velocious 1.0.178 → 1.0.180
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/README.md +36 -0
- package/build/src/cli/commands/background-jobs-main.d.ts +1 -1
- package/build/src/cli/commands/background-jobs-main.d.ts.map +1 -1
- package/build/src/cli/commands/background-jobs-main.js +2 -14
- package/build/src/cli/commands/background-jobs-runner.d.ts +1 -1
- package/build/src/cli/commands/background-jobs-runner.d.ts.map +1 -1
- package/build/src/cli/commands/background-jobs-runner.js +2 -9
- package/build/src/cli/commands/background-jobs-worker.d.ts +1 -1
- package/build/src/cli/commands/background-jobs-worker.d.ts.map +1 -1
- package/build/src/cli/commands/background-jobs-worker.js +2 -14
- package/build/src/database/query/index.d.ts +3 -8
- package/build/src/database/query/index.d.ts.map +1 -1
- package/build/src/database/query/index.js +73 -4
- package/build/src/database/query/join-object.d.ts +4 -0
- package/build/src/database/query/join-object.d.ts.map +1 -1
- package/build/src/database/query/join-object.js +2 -1
- package/build/src/database/query/model-class-query.d.ts.map +1 -1
- package/build/src/database/query/model-class-query.js +47 -2
- package/build/src/database/query/preloader.d.ts.map +1 -1
- package/build/src/database/query/preloader.js +56 -4
- package/build/src/environment-handlers/base.d.ts +15 -0
- package/build/src/environment-handlers/base.d.ts.map +1 -1
- package/build/src/environment-handlers/base.js +22 -1
- package/build/src/environment-handlers/browser.d.ts.map +1 -1
- package/build/src/environment-handlers/browser.js +10 -1
- package/build/src/environment-handlers/node/cli/commands/background-jobs-main.d.ts +5 -0
- package/build/src/environment-handlers/node/cli/commands/background-jobs-main.d.ts.map +1 -0
- package/build/src/environment-handlers/node/cli/commands/background-jobs-main.js +18 -0
- package/build/src/environment-handlers/node/cli/commands/background-jobs-runner.d.ts +5 -0
- package/build/src/environment-handlers/node/cli/commands/background-jobs-runner.d.ts.map +1 -0
- package/build/src/environment-handlers/node/cli/commands/background-jobs-runner.js +13 -0
- package/build/src/environment-handlers/node/cli/commands/background-jobs-worker.d.ts +5 -0
- package/build/src/environment-handlers/node/cli/commands/background-jobs-worker.d.ts.map +1 -0
- package/build/src/environment-handlers/node/cli/commands/background-jobs-worker.js +18 -0
- package/build/src/environment-handlers/node/cli/commands/test.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/test.js +2 -116
- package/build/src/environment-handlers/node.d.ts.map +1 -1
- package/build/src/environment-handlers/node.js +25 -1
- package/build/src/testing/browser-test-app.d.ts +2 -0
- package/build/src/testing/browser-test-app.d.ts.map +1 -0
- package/build/src/testing/browser-test-app.js +24 -0
- package/build/src/testing/test-filter-parser.d.ts +16 -0
- package/build/src/testing/test-filter-parser.d.ts.map +1 -0
- package/build/src/testing/test-filter-parser.js +117 -0
- package/build/src/testing/test-runner.d.ts +35 -0
- package/build/src/testing/test-runner.d.ts.map +1 -1
- package/build/src/testing/test-runner.js +100 -17
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -1
|
@@ -9,6 +9,50 @@ import JoinTracker from "./join-tracker.js";
|
|
|
9
9
|
import RecordNotFoundError from "../record/record-not-found-error.js";
|
|
10
10
|
import WhereModelClassHash from "./where-model-class-hash.js";
|
|
11
11
|
import WhereNot from "./where-not.js";
|
|
12
|
+
/**
|
|
13
|
+
* @param {import("./index.js").NestedPreloadRecord | string | string[]} preload - Preload data in shorthand or nested form.
|
|
14
|
+
* @returns {import("./index.js").NestedPreloadRecord} - Normalized preload record.
|
|
15
|
+
*/
|
|
16
|
+
function normalizePreloadRecord(preload) {
|
|
17
|
+
if (!preload)
|
|
18
|
+
return {};
|
|
19
|
+
if (typeof preload == "string") {
|
|
20
|
+
return { [preload]: true };
|
|
21
|
+
}
|
|
22
|
+
if (Array.isArray(preload)) {
|
|
23
|
+
/** @type {import("./index.js").NestedPreloadRecord} */
|
|
24
|
+
const result = {};
|
|
25
|
+
for (const entry of preload) {
|
|
26
|
+
if (typeof entry == "string") {
|
|
27
|
+
result[entry] = true;
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
if (isPlainObject(entry)) {
|
|
31
|
+
incorporate(result, normalizePreloadRecord(entry));
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
throw new Error(`Invalid preload entry type: ${typeof entry}`);
|
|
35
|
+
}
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
if (!isPlainObject(preload)) {
|
|
39
|
+
throw new Error(`Invalid preload type: ${typeof preload}`);
|
|
40
|
+
}
|
|
41
|
+
/** @type {import("./index.js").NestedPreloadRecord} */
|
|
42
|
+
const result = {};
|
|
43
|
+
for (const [key, value] of Object.entries(preload)) {
|
|
44
|
+
if (value === true || value === false) {
|
|
45
|
+
result[key] = value;
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
if (typeof value == "string" || Array.isArray(value) || isPlainObject(value)) {
|
|
49
|
+
result[key] = normalizePreloadRecord(value);
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
throw new Error(`Invalid preload value for ${key}: ${typeof value}`);
|
|
53
|
+
}
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
12
56
|
/**
|
|
13
57
|
* @template {typeof import("../record/index.js").default} MC
|
|
14
58
|
*/
|
|
@@ -289,7 +333,8 @@ export default class VelociousDatabaseQueryModelClassQuery extends DatabaseQuery
|
|
|
289
333
|
* @returns {this} - The preload.
|
|
290
334
|
*/
|
|
291
335
|
preload(data) {
|
|
292
|
-
|
|
336
|
+
const normalizedPreload = normalizePreloadRecord(data);
|
|
337
|
+
incorporate(this._preload, normalizedPreload);
|
|
293
338
|
return this;
|
|
294
339
|
}
|
|
295
340
|
/**
|
|
@@ -492,4 +537,4 @@ function buildJoinObjectFromWhereHash({ hash, modelClass }) {
|
|
|
492
537
|
}
|
|
493
538
|
return joinObject;
|
|
494
539
|
}
|
|
495
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtY2xhc3MtcXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvbW9kZWwtY2xhc3MtcXVlcnkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDeEMsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGlCQUFpQixDQUFBO0FBQzdDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQTtBQUN0QyxPQUFPLFNBQVMsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN0QyxPQUFPLGFBQWEsTUFBTSxZQUFZLENBQUE7QUFDdEMsT0FBTyxXQUFXLE1BQU0sbUJBQW1CLENBQUE7QUFDM0MsT0FBTyxtQkFBbUIsTUFBTSxxQ0FBcUMsQ0FBQTtBQUNyRSxPQUFPLG1CQUFtQixNQUFNLDZCQUE2QixDQUFBO0FBQzdELE9BQU8sUUFBUSxNQUFNLGdCQUFnQixDQUFBO0FBRXJDOztHQUVHO0FBQ0g7OztHQUdHO0FBRUg7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyxxQ0FBc0MsU0FBUSxhQUFhO0lBQzlFLCtFQUErRTtJQUMvRSxZQUFZLElBQUk7UUFDZCxNQUFNLEVBQUMsVUFBVSxFQUFDLEdBQUcsSUFBSSxDQUFBO1FBRXpCLElBQUksQ0FBQyxVQUFVO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBRTFGLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNYLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFOUIsaUJBQWlCO1FBQ2pCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO1FBRTVCLHVCQUF1QjtRQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFBO1FBQzVDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLFdBQVcsQ0FBQyxFQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFDLENBQUMsQ0FBQTtRQUN0RixJQUFJLENBQUMsc0JBQXNCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO0lBQ25FLENBQUM7SUFFRCxvQ0FBb0M7SUFDcEMsS0FBSztRQUNILE1BQU0sUUFBUSxHQUFHLHdEQUF3RCxDQUFDLENBQUMsSUFBSSxxQ0FBcUMsQ0FBQztZQUNuSCxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDdEIsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ3ZCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtZQUM3QixNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDekIsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNsQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3BCLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN6QixJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDaEIsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3RCLE9BQU8sRUFBRSxFQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBQztZQUMzQixRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDeEIsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzNCLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN6QixZQUFZLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDckMsV0FBVyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFO1lBQ3RDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxzQkFBc0I7U0FDbkQsQ0FBQyxDQUFDLENBQUE7UUFFSCxtQkFBbUI7UUFDbkIsT0FBTyxRQUFRLENBQUE7SUFDakIsQ0FBQztJQUVELDZEQUE2RDtJQUM3RCxLQUFLLENBQUMsS0FBSztRQUNULHFCQUFxQjtRQUNyQixNQUFNLFVBQVUsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUE7UUFDOUksTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFDeEQsSUFBSSxHQUFHLEdBQUcsU0FBUyxjQUFjLEdBQUcsVUFBVSxHQUFHLENBQUE7UUFFakQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLE9BQU87WUFBRSxHQUFHLElBQUksT0FBTyxDQUFBO1FBRXBELEdBQUcsSUFBSSxXQUFXLENBQUE7UUFHbEIsZ0NBQWdDO1FBQ2hDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUUvQixVQUFVLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQTtRQUM1QixVQUFVLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQTtRQUN4QixVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRXRCLE1BQU0sT0FBTyxHQUFHLGdDQUFnQyxDQUFDLENBQUMsTUFBTSxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQTtRQUVuRiw2REFBNkQ7UUFDN0QsSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtRQUN6QixDQUFDO1FBRUQsaUVBQWlFO1FBQ2pFLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQTtRQUVuQixLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUE7WUFDekMsQ0FBQztZQUVELFdBQVcsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFBO1FBQzdCLENBQUM7UUFFRCxPQUFPLFdBQVcsQ0FBQTtJQUNwQixDQUFDO0lBRUQsd0NBQXdDO0lBQ3hDLGFBQWE7UUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUE7UUFFM0QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFBO0lBQ3hCLENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQTtJQUMzQixDQUFDO0lBRUQseUVBQXlFO0lBQ3pFLGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUE7SUFDMUIsQ0FBQztJQUVELDBEQUEwRDtJQUMxRCx3QkFBd0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUE7SUFDcEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILGVBQWUsQ0FBQyxZQUFZO1FBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFBO1FBQ2pDLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQVksQ0FBQyxZQUFZO1FBQ3ZCLE1BQU0sV0FBVyxHQUFHLHdEQUF3RCxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUE7UUFFM0YsV0FBVyxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUE7UUFDeEMsV0FBVyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFBO1FBRTVDLE9BQU8sV0FBVyxDQUFBO0lBQ3BCLENBQUM7SUFFRDs7O09BR0c7SUFDSCw0QkFBNEIsQ0FBQyxJQUFJO1FBQy9CLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtRQUV0RCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFBO1FBRXBELEtBQUssTUFBTSxnQkFBZ0IsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNwQyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtZQUN2RSxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxDQUFBO1lBRTNELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixVQUFVLENBQUMsSUFBSSxJQUFJLGdCQUFnQixFQUFFLENBQUMsQ0FBQTtZQUNyRixDQUFDO1lBRUQsVUFBVSxHQUFHLGdCQUFnQixDQUFBO1FBQy9CLENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUMvQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUJBQWlCLENBQUMsSUFBSTtRQUNwQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFekQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDeEQsQ0FBQztJQUVEOzs7T0FHRztJQUNILHFCQUFxQixDQUFDLElBQUk7UUFDeEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFBO1FBRTlFLE9BQU8sS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFBO0lBQ3ZDLENBQUM7SUFFRDs7O09BR0c7SUFDSCx3QkFBd0IsQ0FBQyxHQUFHLElBQUk7UUFDOUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFaEQsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDN0MsQ0FBQztJQUVEOzs7T0FHRztJQUNILGVBQWUsQ0FBQyxHQUFHLElBQUk7UUFDckIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ3ZFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsbUJBQW1CLENBQUMsZ0JBQWdCLEVBQUUsUUFBUTtRQUM1QyxNQUFNLFdBQVcsR0FBRyx3REFBd0QsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUE7UUFFM0csV0FBVyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFBO1FBQzVDLFdBQVcsQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFBO1FBQ3BDLFdBQVcsQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUE7UUFFekMsT0FBTyxXQUFXLENBQUE7SUFDcEIsQ0FBQztJQUVELDBEQUEwRDtJQUMxRCxLQUFLLENBQUMsVUFBVTtRQUNkLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBRXBDLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7WUFDN0IsTUFBTSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUE7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVE7UUFDakIsK0NBQStDO1FBQy9DLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQTtRQUVyQixVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFBO1FBRXhELE1BQU0sUUFBUSxHQUFHLHdEQUF3RCxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUE7UUFFeEYsUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUUxQixNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUE7UUFFdkMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osTUFBTSxJQUFJLG1CQUFtQixDQUFDLGlCQUFpQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxVQUFVLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBQ3JJLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVU7UUFDckIsK0NBQStDO1FBQy9DLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQTtRQUV4QixLQUFLLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzdCLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUE7WUFFaEQsYUFBYSxDQUFDLGFBQWEsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNoRCxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsd0RBQXdELENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQTtRQUV4RixRQUFRLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBRTdCLE9BQU8sTUFBTSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDL0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxRQUFRO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUVsRSxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFBO1FBQ3JCLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUFDLFVBQVU7UUFDM0IsK0NBQStDO1FBQy9DLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQTtRQUV4QixLQUFLLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzdCLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUE7WUFFaEQsYUFBYSxDQUFDLGFBQWEsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNoRCxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsd0RBQXdELENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQTtRQUV4RixRQUFRLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBRTdCLE1BQU0sS0FBSyxHQUFHLE1BQU0sUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBRXBDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtRQUNyQyxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsUUFBUTtRQUMzQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUE7UUFFNUMsSUFBSSxNQUFNO1lBQUUsT0FBTyxNQUFNLENBQUE7UUFFekIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3ZDLE1BQU0sU0FBUyxHQUFHLCtCQUErQixDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtRQUU5RSxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ3JCLENBQUM7UUFFRCxPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDO0lBRUQsbUZBQW1GO0lBQ25GLEtBQUssQ0FBQyxLQUFLO1FBQ1QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsZUFBZSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDaEwsTUFBTSxPQUFPLEdBQUcsTUFBTSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUE7UUFFeEMsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDbkIsQ0FBQztJQUVELGtGQUFrRjtJQUNsRixLQUFLLENBQUMsSUFBSTtRQUNSLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUNwRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUE7UUFDbEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUVqSixPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNuQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLElBQUk7UUFDVixXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUNoQyxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsT0FBTztRQUNYLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQTtRQUNqQixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUVwQyxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzdCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtZQUN2QyxNQUFNLEtBQUssR0FBRywrQkFBK0IsQ0FBQyxDQUFDLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQTtZQUVoRSxLQUFLLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDaEMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNwQixDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDL0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUM7Z0JBQzlCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtnQkFDM0IsTUFBTTtnQkFDTixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7YUFDdkIsQ0FBQyxDQUFBO1lBRUYsTUFBTSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUE7UUFDdkIsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTztRQUNwQixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUE7UUFFbEMsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUE7UUFFMUUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3ZDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUN4QyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsK0JBQStCLEVBQUUsQ0FBQTtRQUNqRSxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLENBQUE7UUFFL0UsTUFBTSxLQUFLLEdBQUcsd0RBQXdELENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQTtRQUVyRixLQUFLLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQTtRQUNuQixLQUFLLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQTtRQUVuQixXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDakMsTUFBTSxTQUFTLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFBO1lBRS9GLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDekIsQ0FBQyxDQUFDLENBQUE7UUFFRixNQUFNLElBQUksR0FBRyxNQUFNLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUV4QyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDN0IsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFdBQVcsQ0FBQTtZQUNoQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO1FBQzNDLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDNUUsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxLQUFLO1FBQ1QsSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUM3QixPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDM0IsQ0FBQztRQUVELElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsTUFBTSxFQUFDLFlBQVksRUFBRSxZQUFZLEVBQUMsR0FBRyxjQUFjLENBQUMsRUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUMsQ0FBQyxDQUFBO1lBQ3BHLE1BQU0sVUFBVSxHQUFHLDRCQUE0QixDQUFDLEVBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFDLENBQUMsQ0FBQTtZQUVoRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQ3hCLENBQUM7WUFFRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN6QyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQTtnQkFDOUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxtQkFBbUIsQ0FBQztvQkFDeEMsSUFBSSxFQUFFLFlBQVk7b0JBQ2xCLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFO29CQUNoQyxnQkFBZ0I7b0JBQ2hCLEtBQUssRUFBRSxJQUFJO2lCQUNaLENBQUMsQ0FBQyxDQUFBO1lBQ0wsQ0FBQztZQUVELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pDLEtBQUssQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDM0IsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQztRQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLE9BQU8sS0FBSyxLQUFLLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQTtJQUN2RixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUSxDQUFDLEtBQUs7UUFDWixJQUFJLE9BQU8sS0FBSyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQzdCLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUM5QixDQUFDO1FBRUQsSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixNQUFNLEVBQUMsWUFBWSxFQUFFLFlBQVksRUFBQyxHQUFHLGNBQWMsQ0FBQyxFQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBQyxDQUFDLENBQUE7WUFDcEcsTUFBTSxVQUFVLEdBQUcsNEJBQTRCLENBQUMsRUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUMsQ0FBQyxDQUFBO1lBRWhHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUE7WUFDeEIsQ0FBQztZQUVELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO2dCQUM5RixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLG1CQUFtQixDQUFDO29CQUNyRCxJQUFJLEVBQUUsWUFBWTtvQkFDbEIsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUU7b0JBQ2hDLGdCQUFnQjtvQkFDaEIsS0FBSyxFQUFFLElBQUk7aUJBQ1osQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNOLENBQUM7WUFFRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN6QyxLQUFLLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFBO1lBQzlCLENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQTtRQUNiLENBQUM7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixPQUFPLEtBQUssS0FBSyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUE7SUFDdkYsQ0FBQztDQUNGO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMscUJBQXFCLENBQUMsVUFBVSxFQUFFLGdCQUFnQjtJQUN6RCxPQUFPLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUE7QUFDM0QsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxHQUFHO0lBQ3hDLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQywrQkFBK0IsRUFBRSxDQUFBO0lBQ2pFLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUVwQyxJQUFJLFVBQVU7UUFBRSxPQUFPLFVBQVUsQ0FBQTtJQUVqQyxPQUFPLFNBQVMsQ0FBQTtBQUNsQixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGNBQWMsQ0FBQyxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUM7SUFDeEMsa0NBQWtDO0lBQ2xDLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQTtJQUN2QixrQ0FBa0M7SUFDbEMsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFBO0lBRXZCLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUVyQyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsTUFBTSxZQUFZLEdBQUcscUJBQXFCLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1lBRTNELElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLG1CQUFtQixFQUFFLENBQUE7Z0JBQzNELE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxFQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFDLENBQUMsQ0FBQTtnQkFDaEYsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQTtnQkFDakUsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQTtnQkFFakUsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ2xDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFBO2dCQUMvQyxDQUFDO2dCQUVELElBQUksa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNsQyxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtvQkFFOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7d0JBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtvQkFDMUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQUUsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFBO2dCQUNuRSxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUE7WUFDM0IsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1lBRXJELElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQTtZQUMzQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQTtZQUMzQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEVBQUMsWUFBWSxFQUFFLFlBQVksRUFBQyxDQUFBO0FBQ3JDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsNEJBQTRCLENBQUMsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFDO0lBQ3RELGtDQUFrQztJQUNsQyxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUE7SUFFckIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7WUFBRSxTQUFRO1FBRW5DLE1BQU0sWUFBWSxHQUFHLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUUzRCxJQUFJLENBQUMsWUFBWTtZQUFFLFNBQVE7UUFFM0IsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtRQUMzRCxNQUFNLGdCQUFnQixHQUFHLDRCQUE0QixDQUFDLEVBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUMsQ0FBQyxDQUFBO1FBRWxHLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtJQUN0RixDQUFDO0lBRUQsT0FBTyxVQUFVLENBQUE7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge2luY29ycG9yYXRlfSBmcm9tIFwiaW5jb3Jwb3JhdG9yXCJcbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuaW1wb3J0IHtpc1BsYWluT2JqZWN0fSBmcm9tIFwiaXMtcGxhaW4tb2JqZWN0XCJcbmltcG9ydCB7TG9nZ2VyfSBmcm9tIFwiLi4vLi4vbG9nZ2VyLmpzXCJcbmltcG9ydCBQcmVsb2FkZXIgZnJvbSBcIi4vcHJlbG9hZGVyLmpzXCJcbmltcG9ydCBEYXRhYmFzZVF1ZXJ5IGZyb20gXCIuL2luZGV4LmpzXCJcbmltcG9ydCBKb2luVHJhY2tlciBmcm9tIFwiLi9qb2luLXRyYWNrZXIuanNcIlxuaW1wb3J0IFJlY29yZE5vdEZvdW5kRXJyb3IgZnJvbSBcIi4uL3JlY29yZC9yZWNvcmQtbm90LWZvdW5kLWVycm9yLmpzXCJcbmltcG9ydCBXaGVyZU1vZGVsQ2xhc3NIYXNoIGZyb20gXCIuL3doZXJlLW1vZGVsLWNsYXNzLWhhc2guanNcIlxuaW1wb3J0IFdoZXJlTm90IGZyb20gXCIuL3doZXJlLW5vdC5qc1wiXG5cbi8qKlxuICogQHRlbXBsYXRlIHt0eXBlb2YgaW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IE1DXG4gKi9cbi8qKlxuICogQHRlbXBsYXRlIHt0eXBlb2YgaW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IE1DXG4gKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5RdWVyeUFyZ3NUeXBlICYge21vZGVsQ2xhc3M6IE1DLCBqb2luQmFzZVBhdGg/OiBzdHJpbmdbXSwgam9pblRyYWNrZXI/OiBpbXBvcnQoXCIuL2pvaW4tdHJhY2tlci5qc1wiKS5kZWZhdWx0LCBmb3JjZVF1YWxpZnlCYXNlVGFibGU/OiBib29sZWFufX0gTW9kZWxDbGFzc1F1ZXJ5QXJnc1R5cGVcbiAqL1xuXG4vKipcbiAqIEEgZ2VuZXJpYyBxdWVyeSBvdmVyIHNvbWUgbW9kZWwgdHlwZS5cbiAqIEB0ZW1wbGF0ZSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBNQ1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5TW9kZWxDbGFzc1F1ZXJ5IGV4dGVuZHMgRGF0YWJhc2VRdWVyeSB7XG4gIC8qKiBAcGFyYW0ge01vZGVsQ2xhc3NRdWVyeUFyZ3NUeXBlPE1DPn0gYXJncyAtIFF1ZXJ5IGNvbnN0cnVjdG9yIGFyZ3VtZW50cy4gKi9cbiAgY29uc3RydWN0b3IoYXJncykge1xuICAgIGNvbnN0IHttb2RlbENsYXNzfSA9IGFyZ3NcblxuICAgIGlmICghbW9kZWxDbGFzcykgdGhyb3cgbmV3IEVycm9yKGBObyBtb2RlbENsYXNzIGdpdmVuIGluICR7T2JqZWN0LmtleXMoYXJncykuam9pbihcIiwgXCIpfWApXG5cbiAgICBzdXBlcihhcmdzKVxuICAgIHRoaXMubG9nZ2VyID0gbmV3IExvZ2dlcih0aGlzKVxuXG4gICAgLyoqIEB0eXBlIHtNQ30gKi9cbiAgICB0aGlzLm1vZGVsQ2xhc3MgPSBtb2RlbENsYXNzXG5cbiAgICAvKiogQHR5cGUge3N0cmluZ1tdfSAqL1xuICAgIHRoaXMuX2pvaW5CYXNlUGF0aCA9IGFyZ3Muam9pbkJhc2VQYXRoIHx8IFtdXG4gICAgdGhpcy5fam9pblRyYWNrZXIgPSBhcmdzLmpvaW5UcmFja2VyIHx8IG5ldyBKb2luVHJhY2tlcih7bW9kZWxDbGFzczogdGhpcy5tb2RlbENsYXNzfSlcbiAgICB0aGlzLl9mb3JjZVF1YWxpZnlCYXNlVGFibGUgPSBCb29sZWFuKGFyZ3MuZm9yY2VRdWFsaWZ5QmFzZVRhYmxlKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt0aGlzfSAtIFRoZSBjbG9uZS4gICovXG4gIGNsb25lKCkge1xuICAgIGNvbnN0IG5ld1F1ZXJ5ID0gLyoqIEB0eXBlIHtWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5TW9kZWxDbGFzc1F1ZXJ5PE1DPn0gKi8gKG5ldyBWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5TW9kZWxDbGFzc1F1ZXJ5KHtcbiAgICAgIGRyaXZlcjogdGhpcy5fZHJpdmVyRm4sXG4gICAgICBmcm9tczogWy4uLnRoaXMuX2Zyb21zXSxcbiAgICAgIGhhbmRsZXI6IHRoaXMuaGFuZGxlci5jbG9uZSgpLFxuICAgICAgZ3JvdXBzOiBbLi4udGhpcy5fZ3JvdXBzXSxcbiAgICAgIGpvaW5zOiBbLi4udGhpcy5fam9pbnNdLFxuICAgICAgbGltaXQ6IHRoaXMuX2xpbWl0LFxuICAgICAgbW9kZWxDbGFzczogdGhpcy5tb2RlbENsYXNzLFxuICAgICAgb2Zmc2V0OiB0aGlzLl9vZmZzZXQsXG4gICAgICBvcmRlcnM6IFsuLi50aGlzLl9vcmRlcnNdLFxuICAgICAgcGFnZTogdGhpcy5fcGFnZSxcbiAgICAgIHBlclBhZ2U6IHRoaXMuX3BlclBhZ2UsXG4gICAgICBwcmVsb2FkOiB7Li4udGhpcy5fcHJlbG9hZH0sXG4gICAgICBkaXN0aW5jdDogdGhpcy5fZGlzdGluY3QsXG4gICAgICBzZWxlY3RzOiBbLi4udGhpcy5fc2VsZWN0c10sXG4gICAgICB3aGVyZXM6IFsuLi50aGlzLl93aGVyZXNdLFxuICAgICAgam9pbkJhc2VQYXRoOiBbLi4udGhpcy5fam9pbkJhc2VQYXRoXSxcbiAgICAgIGpvaW5UcmFja2VyOiB0aGlzLl9qb2luVHJhY2tlci5jbG9uZSgpLFxuICAgICAgZm9yY2VRdWFsaWZ5QmFzZVRhYmxlOiB0aGlzLl9mb3JjZVF1YWxpZnlCYXNlVGFibGVcbiAgICB9KSlcblxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICByZXR1cm4gbmV3UXVlcnlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTxudW1iZXI+fSAtIFJlc29sdmVzIHdpdGggdGhlIGNvdW50LiAgKi9cbiAgYXN5bmMgY291bnQoKSB7XG4gICAgLy8gR2VuZXJhdGUgY291bnQgU1FMXG4gICAgY29uc3QgcHJpbWFyeUtleSA9IGAke3RoaXMuZHJpdmVyLnF1b3RlVGFibGUodGhpcy5nZXRNb2RlbENsYXNzKCkudGFibGVOYW1lKCkpfS4ke3RoaXMuZHJpdmVyLnF1b3RlQ29sdW1uKHRoaXMuZ2V0TW9kZWxDbGFzcygpLnByaW1hcnlLZXkoKSl9YFxuICAgIGNvbnN0IGRpc3RpbmN0UHJlZml4ID0gdGhpcy5fZGlzdGluY3QgPyBcIkRJU1RJTkNUIFwiIDogXCJcIlxuICAgIGxldCBzcWwgPSBgQ09VTlQoJHtkaXN0aW5jdFByZWZpeH0ke3ByaW1hcnlLZXl9KWBcblxuICAgIGlmICh0aGlzLmRyaXZlci5nZXRUeXBlKCkgPT0gXCJwZ3NxbFwiKSBzcWwgKz0gXCI6OmludFwiXG5cbiAgICBzcWwgKz0gXCIgQVMgY291bnRcIlxuXG5cbiAgICAvLyBDbG9uZSBxdWVyeSBhbmQgZXhlY3V0ZSBjb3VudFxuICAgIGNvbnN0IGNvdW50UXVlcnkgPSB0aGlzLmNsb25lKClcblxuICAgIGNvdW50UXVlcnkuX2Rpc3RpbmN0ID0gZmFsc2VcbiAgICBjb3VudFF1ZXJ5Ll9zZWxlY3RzID0gW11cbiAgICBjb3VudFF1ZXJ5LnNlbGVjdChzcWwpXG5cbiAgICBjb25zdCByZXN1bHRzID0gLyoqIEB0eXBlIHt7Y291bnQ6IG51bWJlcn1bXX0gKi8gKGF3YWl0IGNvdW50UXVlcnkuX2V4ZWN1dGVRdWVyeSgpKVxuXG4gICAgLy8gVGhlIHF1ZXJ5IGlzbid0IGdyb3VwZWQgYW5kIGEgc2luZ2xlIHJlc3VsdCBoYXMgYmVlbiBnaXZlblxuICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PSAxKSB7XG4gICAgICByZXR1cm4gcmVzdWx0c1swXS5jb3VudFxuICAgIH1cblxuICAgIC8vIFRoZSBxdWVyeSBtYXkgYmUgZ3JvdXBlZCBhbmQgYSBsb3Qgb2YgZGlmZmVyZW50IGNvdW50cyBhIGdpdmVuXG4gICAgbGV0IGNvdW50UmVzdWx0ID0gMFxuXG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgaWYgKCEoXCJjb3VudFwiIGluIHJlc3VsdCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBjb3VudCByZXN1bHRcIilcbiAgICAgIH1cblxuICAgICAgY291bnRSZXN1bHQgKz0gcmVzdWx0LmNvdW50XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50UmVzdWx0XG4gIH1cblxuICAvKiogQHJldHVybnMge01DfSAtIFRoZSBtb2RlbCBjbGFzcy4gICovXG4gIGdldE1vZGVsQ2xhc3MoKSB7XG4gICAgaWYgKCF0aGlzLm1vZGVsQ2xhc3MpIHRocm93IG5ldyBFcnJvcihcIm1vZGVsQ2xhc3Mgbm90IHNldFwiKVxuXG4gICAgcmV0dXJuIHRoaXMubW9kZWxDbGFzc1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtzdHJpbmdbXX0gLSBUaGUgam9pbiBiYXNlIHBhdGguICovXG4gIGdldEpvaW5CYXNlUGF0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5fam9pbkJhc2VQYXRoXG4gIH1cblxuICAvKiogQHJldHVybnMge2ltcG9ydChcIi4vam9pbi10cmFja2VyLmpzXCIpLmRlZmF1bHR9IC0gVGhlIGpvaW4gdHJhY2tlci4gKi9cbiAgZ2V0Sm9pblRyYWNrZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2pvaW5UcmFja2VyXG4gIH1cblxuICAvKiogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciB0byBxdWFsaWZ5IGJhc2UgdGFibGUuICovXG4gIGdldEZvcmNlUXVhbGlmeUJhc2VUYWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9yY2VRdWFsaWZ5QmFzZVRhYmxlXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gam9pbkJhc2VQYXRoIC0gSm9pbiBiYXNlIHBhdGguXG4gICAqIEByZXR1cm5zIHt0aGlzfSAtIFRoZSBxdWVyeSB3aXRoIHVwZGF0ZWQgYmFzZSBwYXRoLlxuICAgKi9cbiAgc2V0Sm9pbkJhc2VQYXRoKGpvaW5CYXNlUGF0aCkge1xuICAgIHRoaXMuX2pvaW5CYXNlUGF0aCA9IGpvaW5CYXNlUGF0aFxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gam9pbkJhc2VQYXRoIC0gSm9pbiBiYXNlIHBhdGguXG4gICAqIEByZXR1cm5zIHtWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5TW9kZWxDbGFzc1F1ZXJ5PE1DPn0gLSBUaGUgc2NvcGVkIHF1ZXJ5LlxuICAgKi9cbiAgd2l0aEpvaW5QYXRoKGpvaW5CYXNlUGF0aCkge1xuICAgIGNvbnN0IHNjb3BlZFF1ZXJ5ID0gLyoqIEB0eXBlIHtWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5TW9kZWxDbGFzc1F1ZXJ5PE1DPn0gKi8gKHRoaXMuY2xvbmUoKSlcblxuICAgIHNjb3BlZFF1ZXJ5Ll9qb2luQmFzZVBhdGggPSBqb2luQmFzZVBhdGhcbiAgICBzY29wZWRRdWVyeS5fam9pblRyYWNrZXIgPSB0aGlzLl9qb2luVHJhY2tlclxuXG4gICAgcmV0dXJuIHNjb3BlZFF1ZXJ5XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aCAtIEpvaW4gcGF0aC5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUYWJsZSBuYW1lIGZvciBwYXRoLlxuICAgKi9cbiAgX3Jlc29sdmVUYWJsZU5hbWVGb3JKb2luUGF0aChwYXRoKSB7XG4gICAgbGV0IG1vZGVsQ2xhc3MgPSB0aGlzLl9qb2luVHJhY2tlci5nZXRSb290TW9kZWxDbGFzcygpXG5cbiAgICBpZiAocGF0aC5sZW5ndGggPT09IDApIHJldHVybiBtb2RlbENsYXNzLnRhYmxlTmFtZSgpXG5cbiAgICBmb3IgKGNvbnN0IHJlbGF0aW9uc2hpcE5hbWUgb2YgcGF0aCkge1xuICAgICAgY29uc3QgcmVsYXRpb25zaGlwID0gbW9kZWxDbGFzcy5nZXRSZWxhdGlvbnNoaXBCeU5hbWUocmVsYXRpb25zaGlwTmFtZSlcbiAgICAgIGNvbnN0IHRhcmdldE1vZGVsQ2xhc3MgPSByZWxhdGlvbnNoaXAuZ2V0VGFyZ2V0TW9kZWxDbGFzcygpXG5cbiAgICAgIGlmICghdGFyZ2V0TW9kZWxDbGFzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHRhcmdldCBtb2RlbCBjbGFzcyBmb3IgJHttb2RlbENsYXNzLm5hbWV9IyR7cmVsYXRpb25zaGlwTmFtZX1gKVxuICAgICAgfVxuXG4gICAgICBtb2RlbENsYXNzID0gdGFyZ2V0TW9kZWxDbGFzc1xuICAgIH1cblxuICAgIHJldHVybiBtb2RlbENsYXNzLnRhYmxlTmFtZSgpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aCAtIEpvaW4gcGF0aC5cbiAgICogQHJldHVybnMge3t0YWJsZU5hbWU6IHN0cmluZywgYWxpYXM6IHN0cmluZyB8IHVuZGVmaW5lZH19IC0gVGhlIGVudHJ5LlxuICAgKi9cbiAgX3JlZ2lzdGVySm9pblBhdGgocGF0aCkge1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IHRoaXMuX3Jlc29sdmVUYWJsZU5hbWVGb3JKb2luUGF0aChwYXRoKVxuXG4gICAgcmV0dXJuIHRoaXMuX2pvaW5UcmFja2VyLnJlZ2lzdGVyUGF0aChwYXRoLCB0YWJsZU5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aCAtIEpvaW4gcGF0aC5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBVbnF1b3RlZCB0YWJsZSByZWZlcmVuY2UgKGFsaWFzIG9yIHRhYmxlIG5hbWUpLlxuICAgKi9cbiAgZ2V0Sm9pblRhYmxlUmVmZXJlbmNlKHBhdGgpIHtcbiAgICBjb25zdCBlbnRyeSA9IHRoaXMuX2pvaW5UcmFja2VyLmdldEVudHJ5KHBhdGgpIHx8IHRoaXMuX3JlZ2lzdGVySm9pblBhdGgocGF0aClcblxuICAgIHJldHVybiBlbnRyeS5hbGlhcyB8fCBlbnRyeS50YWJsZU5hbWVcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gey4uLnN0cmluZ30gcGF0aCAtIEpvaW4gcGF0aCBzZWdtZW50cy5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBVbnF1b3RlZCB0YWJsZSByZWZlcmVuY2UgKGFsaWFzIG9yIHRhYmxlIG5hbWUpLlxuICAgKi9cbiAgZ2V0VGFibGVSZWZlcmVuY2VGb3JKb2luKC4uLnBhdGgpIHtcbiAgICBjb25zdCBmdWxsUGF0aCA9IHRoaXMuX2pvaW5CYXNlUGF0aC5jb25jYXQocGF0aClcblxuICAgIHJldHVybiB0aGlzLmdldEpvaW5UYWJsZVJlZmVyZW5jZShmdWxsUGF0aClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gey4uLnN0cmluZ30gcGF0aCAtIEpvaW4gcGF0aCBzZWdtZW50cy5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBRdW90ZWQgdGFibGUgbmFtZSBmb3Igam9pbiBwYXRoLlxuICAgKi9cbiAgZ2V0VGFibGVGb3JKb2luKC4uLnBhdGgpIHtcbiAgICByZXR1cm4gdGhpcy5kcml2ZXIucXVvdGVUYWJsZSh0aGlzLmdldFRhYmxlUmVmZXJlbmNlRm9ySm9pbiguLi5wYXRoKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gdGFyZ2V0TW9kZWxDbGFzcyAtIFRhcmdldCBtb2RlbCBjbGFzcy5cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gam9pblBhdGggLSBKb2luIHBhdGguXG4gICAqIEByZXR1cm5zIHtWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5TW9kZWxDbGFzc1F1ZXJ5PE1DPn0gLSBUaGUgc2NvcGVkIGpvaW4gcXVlcnkuXG4gICAqL1xuICBidWlsZEpvaW5TY29wZVF1ZXJ5KHRhcmdldE1vZGVsQ2xhc3MsIGpvaW5QYXRoKSB7XG4gICAgY29uc3Qgc2NvcGVkUXVlcnkgPSAvKiogQHR5cGUge1ZlbG9jaW91c0RhdGFiYXNlUXVlcnlNb2RlbENsYXNzUXVlcnk8TUM+fSAqLyAodGFyZ2V0TW9kZWxDbGFzcy5fbmV3UXVlcnkoKSlcblxuICAgIHNjb3BlZFF1ZXJ5Ll9qb2luVHJhY2tlciA9IHRoaXMuX2pvaW5UcmFja2VyXG4gICAgc2NvcGVkUXVlcnkuX2pvaW5CYXNlUGF0aCA9IGpvaW5QYXRoXG4gICAgc2NvcGVkUXVlcnkuX2ZvcmNlUXVhbGlmeUJhc2VUYWJsZSA9IHRydWVcblxuICAgIHJldHVybiBzY29wZWRRdWVyeVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuICAqL1xuICBhc3luYyBkZXN0cm95QWxsKCkge1xuICAgIGNvbnN0IHJlY29yZHMgPSBhd2FpdCB0aGlzLnRvQXJyYXkoKVxuXG4gICAgZm9yIChjb25zdCByZWNvcmQgb2YgcmVjb3Jkcykge1xuICAgICAgYXdhaXQgcmVjb3JkLmRlc3Ryb3koKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHJlY29yZElkIC0gUmVjb3JkIGlkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxJbnN0YW5jZVR5cGU8TUM+Pn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBmaW5kLlxuICAgKi9cbiAgYXN5bmMgZmluZChyZWNvcmRJZCkge1xuICAgIC8qKiBAdHlwZSB7e1trZXk6IHN0cmluZ106IG51bWJlciB8IHN0cmluZ319ICovXG4gICAgY29uc3QgY29uZGl0aW9ucyA9IHt9XG5cbiAgICBjb25kaXRpb25zW3RoaXMuZ2V0TW9kZWxDbGFzcygpLnByaW1hcnlLZXkoKV0gPSByZWNvcmRJZFxuXG4gICAgY29uc3QgbmV3UXVlcnkgPSAvKiogQHR5cGUge1ZlbG9jaW91c0RhdGFiYXNlUXVlcnlNb2RlbENsYXNzUXVlcnk8TUM+fSAqLyAodGhpcy5jbG9uZSgpKVxuXG4gICAgbmV3UXVlcnkud2hlcmUoY29uZGl0aW9ucylcblxuICAgIGNvbnN0IHJlY29yZCA9IChhd2FpdCBuZXdRdWVyeS5maXJzdCgpKVxuXG4gICAgaWYgKCFyZWNvcmQpIHtcbiAgICAgIHRocm93IG5ldyBSZWNvcmROb3RGb3VuZEVycm9yKGBDb3VsZG4ndCBmaW5kICR7dGhpcy5nZXRNb2RlbENsYXNzKCkubmFtZX0gd2l0aCAnJHt0aGlzLmdldE1vZGVsQ2xhc3MoKS5wcmltYXJ5S2V5KCl9Jz0ke3JlY29yZElkfWApXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlY29yZFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7e1trZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlcn19IGNvbmRpdGlvbnMgLSBDb25kaXRpb25zIGhhc2gga2V5ZWQgYnkgYXR0cmlidXRlIG5hbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEluc3RhbmNlVHlwZTxNQz4gfCBudWxsPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBieS5cbiAgICovXG4gIGFzeW5jIGZpbmRCeShjb25kaXRpb25zKSB7XG4gICAgLyoqIEB0eXBlIHt7W2tleTogc3RyaW5nXTogbnVtYmVyIHwgc3RyaW5nfX0gKi9cbiAgICBjb25zdCBuZXdDb25kaXRpb25zID0ge31cblxuICAgIGZvciAoY29uc3Qga2V5IGluIGNvbmRpdGlvbnMpIHtcbiAgICAgIGNvbnN0IGtleVVuZGVyc2NvcmUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoa2V5KVxuXG4gICAgICBuZXdDb25kaXRpb25zW2tleVVuZGVyc2NvcmVdID0gY29uZGl0aW9uc1trZXldXG4gICAgfVxuXG4gICAgY29uc3QgbmV3UXVlcnkgPSAvKiogQHR5cGUge1ZlbG9jaW91c0RhdGFiYXNlUXVlcnlNb2RlbENsYXNzUXVlcnk8TUM+fSAqLyAodGhpcy5jbG9uZSgpKVxuXG4gICAgbmV3UXVlcnkud2hlcmUobmV3Q29uZGl0aW9ucylcblxuICAgIHJldHVybiBhd2FpdCBuZXdRdWVyeS5maXJzdCgpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7W2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyfX0gY29uZGl0aW9ucyAtIENvbmRpdGlvbnMgaGFzaCBrZXllZCBieSBhdHRyaWJ1dGUgbmFtZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihJbnN0YW5jZVR5cGU8TUM+KSA6IHZvaWR9IFtjYWxsYmFja10gLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8SW5zdGFuY2VUeXBlPE1DPj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgb3IgY3JlYXRlIGJ5LlxuICAgKi9cbiAgYXN5bmMgZmluZE9yQ3JlYXRlQnkoY29uZGl0aW9ucywgY2FsbGJhY2spIHtcbiAgICBjb25zdCByZWNvcmQgPSBhd2FpdCB0aGlzLmZpbmRPckluaXRpYWxpemVCeShjb25kaXRpb25zLCBjYWxsYmFjaylcblxuICAgIGlmIChyZWNvcmQuaXNOZXdSZWNvcmQoKSkge1xuICAgICAgYXdhaXQgcmVjb3JkLnNhdmUoKVxuICAgIH1cblxuICAgIHJldHVybiByZWNvcmRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXJ9fSBjb25kaXRpb25zIC0gQ29uZGl0aW9ucyBoYXNoIGtleWVkIGJ5IGF0dHJpYnV0ZSBuYW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxJbnN0YW5jZVR5cGU8TUM+Pn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBieSBvciBmYWlsLlxuICAgKi9cbiAgYXN5bmMgZmluZEJ5T3JGYWlsKGNvbmRpdGlvbnMpIHtcbiAgICAvKiogQHR5cGUge3tba2V5OiBzdHJpbmddOiBudW1iZXIgfCBzdHJpbmd9fSAqL1xuICAgIGNvbnN0IG5ld0NvbmRpdGlvbnMgPSB7fVxuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gY29uZGl0aW9ucykge1xuICAgICAgY29uc3Qga2V5VW5kZXJzY29yZSA9IGluZmxlY3Rpb24udW5kZXJzY29yZShrZXkpXG5cbiAgICAgIG5ld0NvbmRpdGlvbnNba2V5VW5kZXJzY29yZV0gPSBjb25kaXRpb25zW2tleV1cbiAgICB9XG5cbiAgICBjb25zdCBuZXdRdWVyeSA9IC8qKiBAdHlwZSB7VmVsb2Npb3VzRGF0YWJhc2VRdWVyeU1vZGVsQ2xhc3NRdWVyeTxNQz59ICovICh0aGlzLmNsb25lKCkpXG5cbiAgICBuZXdRdWVyeS53aGVyZShuZXdDb25kaXRpb25zKVxuXG4gICAgY29uc3QgbW9kZWwgPSBhd2FpdCBuZXdRdWVyeS5maXJzdCgpXG5cbiAgICBpZiAoIW1vZGVsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZWNvcmQgbm90IGZvdW5kXCIpXG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZGVsXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbmRpdGlvbnMgLSBDb25kaXRpb25zLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKEluc3RhbmNlVHlwZTxNQz4pIDogdm9pZH0gW2NhbGxiYWNrXSAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxJbnN0YW5jZVR5cGU8TUM+Pn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBvciBpbml0aWFsaXplIGJ5LlxuICAgKi9cbiAgYXN5bmMgZmluZE9ySW5pdGlhbGl6ZUJ5KGNvbmRpdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgcmVjb3JkID0gYXdhaXQgdGhpcy5maW5kQnkoY29uZGl0aW9ucylcblxuICAgIGlmIChyZWNvcmQpIHJldHVybiByZWNvcmRcblxuICAgIGNvbnN0IE1vZGVsQ2xhc3MgPSB0aGlzLmdldE1vZGVsQ2xhc3MoKVxuICAgIGNvbnN0IG5ld1JlY29yZCA9IC8qKiBAdHlwZSB7SW5zdGFuY2VUeXBlPE1DPn0gKi8gKG5ldyBNb2RlbENsYXNzKGNvbmRpdGlvbnMpKVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjayhuZXdSZWNvcmQpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld1JlY29yZFxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPEluc3RhbmNlVHlwZTxNQz4gfCB1bmRlZmluZWQ+fSAtIFJlc29sdmVzIHdpdGggdGhlIGZpcnN0LiAgKi9cbiAgYXN5bmMgZmlyc3QoKSB7XG4gICAgY29uc3QgbmV3UXVlcnkgPSB0aGlzLmNsb25lKCkubGltaXQoMSkucmVvcmRlcihgJHt0aGlzLmRyaXZlci5xdW90ZVRhYmxlKHRoaXMuZ2V0TW9kZWxDbGFzcygpLnRhYmxlTmFtZSgpKX0uJHt0aGlzLmRyaXZlci5xdW90ZUNvbHVtbih0aGlzLmdldE1vZGVsQ2xhc3MoKS5vcmRlcmFibGVDb2x1bW4oKSl9YClcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgbmV3UXVlcnkudG9BcnJheSgpXG5cbiAgICByZXR1cm4gcmVzdWx0c1swXVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPEluc3RhbmNlVHlwZTxNQz4gfCB1bmRlZmluZWQ+fSAtIFJlc29sdmVzIHdpdGggdGhlIGxhc3QuICAqL1xuICBhc3luYyBsYXN0KCkge1xuICAgIGNvbnN0IHByaW1hcnlLZXkgPSB0aGlzLmdldE1vZGVsQ2xhc3MoKS5wcmltYXJ5S2V5KClcbiAgICBjb25zdCB0YWJsZU5hbWUgPSB0aGlzLmdldE1vZGVsQ2xhc3MoKS50YWJsZU5hbWUoKVxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmNsb25lKCkucmVvcmRlcihgJHt0aGlzLmRyaXZlci5xdW90ZVRhYmxlKHRhYmxlTmFtZSl9LiR7dGhpcy5kcml2ZXIucXVvdGVDb2x1bW4ocHJpbWFyeUtleSl9IERFU0NgKS5saW1pdCgxKS50b0FycmF5KClcblxuICAgIHJldHVybiByZXN1bHRzWzBdXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2luZGV4LmpzXCIpLk5lc3RlZFByZWxvYWRSZWNvcmR9IGRhdGEgLSBEYXRhIHBheWxvYWQuXG4gICAqIEByZXR1cm5zIHt0aGlzfSAtIFRoZSBwcmVsb2FkLlxuICAgKi9cbiAgcHJlbG9hZChkYXRhKSB7XG4gICAgaW5jb3Jwb3JhdGUodGhpcy5fcHJlbG9hZCwgZGF0YSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIHF1ZXJ5IHJlc3VsdHMgdG8gYXJyYXkgb2YgbW9kZWwgaW5zdGFuY2VzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5PEluc3RhbmNlVHlwZTxNQz4+Pn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBhcnJheS5cbiAgICovXG4gIGFzeW5jIHRvQXJyYXkoKSB7XG4gICAgY29uc3QgbW9kZWxzID0gW11cbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5yZXN1bHRzKClcblxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgIGNvbnN0IE1vZGVsQ2xhc3MgPSB0aGlzLmdldE1vZGVsQ2xhc3MoKVxuICAgICAgY29uc3QgbW9kZWwgPSAvKiogQHR5cGUge0luc3RhbmNlVHlwZTxNQz59ICovIChuZXcgTW9kZWxDbGFzcygpKVxuXG4gICAgICBtb2RlbC5sb2FkRXhpc3RpbmdSZWNvcmQocmVzdWx0KVxuICAgICAgbW9kZWxzLnB1c2gobW9kZWwpXG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuX3ByZWxvYWQpLmxlbmd0aCA+IDAgJiYgbW9kZWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHByZWxvYWRlciA9IG5ldyBQcmVsb2FkZXIoe1xuICAgICAgICBtb2RlbENsYXNzOiB0aGlzLm1vZGVsQ2xhc3MsXG4gICAgICAgIG1vZGVscyxcbiAgICAgICAgcHJlbG9hZDogdGhpcy5fcHJlbG9hZFxuICAgICAgfSlcblxuICAgICAgYXdhaXQgcHJlbG9hZGVyLnJ1bigpXG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZGVsc1xuICB9XG5cbiAgLyoqXG4gICAqIFBsdWNrcyBvbmUgb3IgbW9yZSBjb2x1bW5zIGRpcmVjdGx5IGZyb20gdGhlIGRhdGFiYXNlIHdpdGhvdXQgaW5zdGFudGlhdGluZyBtb2RlbHMuXG4gICAqIEBwYXJhbSB7Li4uc3RyaW5nfHN0cmluZ1tdfSBjb2x1bW5zIC0gQ29sdW1uIG5hbWVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnlbXT59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgcGx1Y2suXG4gICAqL1xuICBhc3luYyBwbHVjayguLi5jb2x1bW5zKSB7XG4gICAgY29uc3QgZmxhdENvbHVtbnMgPSBjb2x1bW5zLmZsYXQoKVxuXG4gICAgaWYgKGZsYXRDb2x1bW5zLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29sdW1ucyBnaXZlbiB0byBwbHVja1wiKVxuXG4gICAgY29uc3QgbW9kZWxDbGFzcyA9IHRoaXMuZ2V0TW9kZWxDbGFzcygpXG4gICAgY29uc3QgdGFibGVOYW1lID0gbW9kZWxDbGFzcy50YWJsZU5hbWUoKVxuICAgIGNvbnN0IGF0dHJpYnV0ZU1hcCA9IG1vZGVsQ2xhc3MuZ2V0QXR0cmlidXRlTmFtZVRvQ29sdW1uTmFtZU1hcCgpXG4gICAgY29uc3QgY29sdW1uTmFtZXMgPSBmbGF0Q29sdW1ucy5tYXAoKGNvbHVtbikgPT4gYXR0cmlidXRlTWFwW2NvbHVtbl0gfHwgY29sdW1uKVxuXG4gICAgY29uc3QgcXVlcnkgPSAvKiogQHR5cGUge1ZlbG9jaW91c0RhdGFiYXNlUXVlcnlNb2RlbENsYXNzUXVlcnk8TUM+fSAqLyAodGhpcy5jbG9uZSgpKVxuXG4gICAgcXVlcnkuX3ByZWxvYWQgPSB7fVxuICAgIHF1ZXJ5Ll9zZWxlY3RzID0gW11cblxuICAgIGNvbHVtbk5hbWVzLmZvckVhY2goKGNvbHVtbk5hbWUpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdFNxbCA9IGAke3RoaXMuZHJpdmVyLnF1b3RlVGFibGUodGFibGVOYW1lKX0uJHt0aGlzLmRyaXZlci5xdW90ZUNvbHVtbihjb2x1bW5OYW1lKX1gXG5cbiAgICAgIHF1ZXJ5LnNlbGVjdChzZWxlY3RTcWwpXG4gICAgfSlcblxuICAgIGNvbnN0IHJvd3MgPSBhd2FpdCBxdWVyeS5fZXhlY3V0ZVF1ZXJ5KClcblxuICAgIGlmIChjb2x1bW5OYW1lcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IFtjb2x1bW5OYW1lXSA9IGNvbHVtbk5hbWVzXG4gICAgICByZXR1cm4gcm93cy5tYXAoKHJvdykgPT4gcm93W2NvbHVtbk5hbWVdKVxuICAgIH1cblxuICAgIHJldHVybiByb3dzLm1hcCgocm93KSA9PiBjb2x1bW5OYW1lcy5tYXAoKGNvbHVtbk5hbWUpID0+IHJvd1tjb2x1bW5OYW1lXSkpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2luZGV4LmpzXCIpLldoZXJlQXJndW1lbnRUeXBlfSB3aGVyZSAtIFdoZXJlLlxuICAgKiBAcmV0dXJucyB7dGhpc30gVGhpcyBxdWVyeSBpbnN0YW5jZVxuICAgKi9cbiAgd2hlcmUod2hlcmUpIHtcbiAgICBpZiAodHlwZW9mIHdoZXJlID09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBzdXBlci53aGVyZSh3aGVyZSlcbiAgICB9XG5cbiAgICBpZiAoaXNQbGFpbk9iamVjdCh3aGVyZSkpIHtcbiAgICAgIGNvbnN0IHtyZXNvbHZlZEhhc2gsIGZhbGxiYWNrSGFzaH0gPSBzcGxpdFdoZXJlSGFzaCh7aGFzaDogd2hlcmUsIG1vZGVsQ2xhc3M6IHRoaXMuZ2V0TW9kZWxDbGFzcygpfSlcbiAgICAgIGNvbnN0IGpvaW5PYmplY3QgPSBidWlsZEpvaW5PYmplY3RGcm9tV2hlcmVIYXNoKHtoYXNoOiB3aGVyZSwgbW9kZWxDbGFzczogdGhpcy5nZXRNb2RlbENsYXNzKCl9KVxuXG4gICAgICBpZiAoT2JqZWN0LmtleXMoam9pbk9iamVjdCkubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmpvaW5zKGpvaW5PYmplY3QpXG4gICAgICB9XG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyhyZXNvbHZlZEhhc2gpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgcXVhbGlmeUJhc2VUYWJsZSA9IHRoaXMuZ2V0Rm9yY2VRdWFsaWZ5QmFzZVRhYmxlKCkgfHwgT2JqZWN0LmtleXMoam9pbk9iamVjdCkubGVuZ3RoID4gMFxuICAgICAgICB0aGlzLl93aGVyZXMucHVzaChuZXcgV2hlcmVNb2RlbENsYXNzSGFzaCh7XG4gICAgICAgICAgaGFzaDogcmVzb2x2ZWRIYXNoLFxuICAgICAgICAgIG1vZGVsQ2xhc3M6IHRoaXMuZ2V0TW9kZWxDbGFzcygpLFxuICAgICAgICAgIHF1YWxpZnlCYXNlVGFibGUsXG4gICAgICAgICAgcXVlcnk6IHRoaXNcbiAgICAgICAgfSkpXG4gICAgICB9XG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyhmYWxsYmFja0hhc2gpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc3VwZXIud2hlcmUoZmFsbGJhY2tIYXNoKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0eXBlIG9mIHdoZXJlOiAke3R5cGVvZiB3aGVyZX0gKCR7d2hlcmUuY29uc3RydWN0b3IubmFtZX0pYClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vaW5kZXguanNcIikuV2hlcmVBcmd1bWVudFR5cGV9IHdoZXJlIC0gV2hlcmUuXG4gICAqIEByZXR1cm5zIHt0aGlzfSBUaGlzIHF1ZXJ5IGluc3RhbmNlXG4gICAqL1xuICB3aGVyZU5vdCh3aGVyZSkge1xuICAgIGlmICh0eXBlb2Ygd2hlcmUgPT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHN1cGVyLndoZXJlTm90KHdoZXJlKVxuICAgIH1cblxuICAgIGlmIChpc1BsYWluT2JqZWN0KHdoZXJlKSkge1xuICAgICAgY29uc3Qge3Jlc29sdmVkSGFzaCwgZmFsbGJhY2tIYXNofSA9IHNwbGl0V2hlcmVIYXNoKHtoYXNoOiB3aGVyZSwgbW9kZWxDbGFzczogdGhpcy5nZXRNb2RlbENsYXNzKCl9KVxuICAgICAgY29uc3Qgam9pbk9iamVjdCA9IGJ1aWxkSm9pbk9iamVjdEZyb21XaGVyZUhhc2goe2hhc2g6IHdoZXJlLCBtb2RlbENsYXNzOiB0aGlzLmdldE1vZGVsQ2xhc3MoKX0pXG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyhqb2luT2JqZWN0KS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuam9pbnMoam9pbk9iamVjdClcbiAgICAgIH1cblxuICAgICAgaWYgKE9iamVjdC5rZXlzKHJlc29sdmVkSGFzaCkubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBxdWFsaWZ5QmFzZVRhYmxlID0gdGhpcy5nZXRGb3JjZVF1YWxpZnlCYXNlVGFibGUoKSB8fCBPYmplY3Qua2V5cyhqb2luT2JqZWN0KS5sZW5ndGggPiAwXG4gICAgICAgIHRoaXMuX3doZXJlcy5wdXNoKG5ldyBXaGVyZU5vdChuZXcgV2hlcmVNb2RlbENsYXNzSGFzaCh7XG4gICAgICAgICAgaGFzaDogcmVzb2x2ZWRIYXNoLFxuICAgICAgICAgIG1vZGVsQ2xhc3M6IHRoaXMuZ2V0TW9kZWxDbGFzcygpLFxuICAgICAgICAgIHF1YWxpZnlCYXNlVGFibGUsXG4gICAgICAgICAgcXVlcnk6IHRoaXNcbiAgICAgICAgfSkpKVxuICAgICAgfVxuXG4gICAgICBpZiAoT2JqZWN0LmtleXMoZmFsbGJhY2tIYXNoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHN1cGVyLndoZXJlTm90KGZhbGxiYWNrSGFzaClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHlwZSBvZiB3aGVyZTogJHt0eXBlb2Ygd2hlcmV9ICgke3doZXJlLmNvbnN0cnVjdG9yLm5hbWV9KWApXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gbW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzLlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aW9uc2hpcE5hbWUgLSBSZWxhdGlvbnNoaXAgbmFtZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9yZWNvcmQvcmVsYXRpb25zaGlwcy9iYXNlLmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWR9IC0gVGhlIHJlbGF0aW9uc2hpcC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmVsYXRpb25zaGlwQnlOYW1lKG1vZGVsQ2xhc3MsIHJlbGF0aW9uc2hpcE5hbWUpIHtcbiAgcmV0dXJuIG1vZGVsQ2xhc3MuZ2V0UmVsYXRpb25zaGlwc01hcCgpW3JlbGF0aW9uc2hpcE5hbWVdXG59XG5cbi8qKlxuICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IG1vZGVsQ2xhc3MgLSBNb2RlbCBjbGFzcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBBdHRyaWJ1dGUgb3IgY29sdW1uIG5hbWUuXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSAtIFRoZSByZXNvbHZlZCBjb2x1bW4gbmFtZS5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUNvbHVtbk5hbWUobW9kZWxDbGFzcywga2V5KSB7XG4gIGNvbnN0IGF0dHJpYnV0ZU1hcCA9IG1vZGVsQ2xhc3MuZ2V0QXR0cmlidXRlTmFtZVRvQ29sdW1uTmFtZU1hcCgpXG4gIGNvbnN0IGNvbHVtbk5hbWUgPSBhdHRyaWJ1dGVNYXBba2V5XVxuXG4gIGlmIChjb2x1bW5OYW1lKSByZXR1cm4gY29sdW1uTmFtZVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGFyZ3MuaGFzaCAtIFdoZXJlIGhhc2guXG4gKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gYXJncy5tb2RlbENsYXNzIC0gTW9kZWwgY2xhc3MuXG4gKiBAcmV0dXJucyB7e3Jlc29sdmVkSGFzaDogUmVjb3JkPHN0cmluZywgYW55PiwgZmFsbGJhY2tIYXNoOiBSZWNvcmQ8c3RyaW5nLCBhbnk+fX0gLSBTcGxpdCBoYXNoZXMuXG4gKi9cbmZ1bmN0aW9uIHNwbGl0V2hlcmVIYXNoKHtoYXNoLCBtb2RlbENsYXNzfSkge1xuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGFueT59ICovXG4gIGNvbnN0IHJlc29sdmVkSGFzaCA9IHt9XG4gIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgYW55Pn0gKi9cbiAgY29uc3QgZmFsbGJhY2tIYXNoID0ge31cblxuICBmb3IgKGNvbnN0IGtleSBpbiBoYXNoKSB7XG4gICAgY29uc3QgdmFsdWUgPSBoYXNoW2tleV1cbiAgICBjb25zdCBpc05lc3RlZCA9IGlzUGxhaW5PYmplY3QodmFsdWUpXG5cbiAgICBpZiAoaXNOZXN0ZWQpIHtcbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IGdldFJlbGF0aW9uc2hpcEJ5TmFtZShtb2RlbENsYXNzLCBrZXkpXG5cbiAgICAgIGlmIChyZWxhdGlvbnNoaXApIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0TW9kZWxDbGFzcyA9IHJlbGF0aW9uc2hpcC5nZXRUYXJnZXRNb2RlbENsYXNzKClcbiAgICAgICAgY29uc3QgbmVzdGVkUmVzdWx0ID0gc3BsaXRXaGVyZUhhc2goe2hhc2g6IHZhbHVlLCBtb2RlbENsYXNzOiB0YXJnZXRNb2RlbENsYXNzfSlcbiAgICAgICAgY29uc3QgbmVzdGVkUmVzb2x2ZWRLZXlzID0gT2JqZWN0LmtleXMobmVzdGVkUmVzdWx0LnJlc29sdmVkSGFzaClcbiAgICAgICAgY29uc3QgbmVzdGVkRmFsbGJhY2tLZXlzID0gT2JqZWN0LmtleXMobmVzdGVkUmVzdWx0LmZhbGxiYWNrSGFzaClcblxuICAgICAgICBpZiAobmVzdGVkUmVzb2x2ZWRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXNvbHZlZEhhc2hba2V5XSA9IG5lc3RlZFJlc3VsdC5yZXNvbHZlZEhhc2hcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXN0ZWRGYWxsYmFja0tleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHRhYmxlTmFtZSA9IHRhcmdldE1vZGVsQ2xhc3MudGFibGVOYW1lKClcblxuICAgICAgICAgIGlmICghZmFsbGJhY2tIYXNoW3RhYmxlTmFtZV0pIGZhbGxiYWNrSGFzaFt0YWJsZU5hbWVdID0ge31cbiAgICAgICAgICBPYmplY3QuYXNzaWduKGZhbGxiYWNrSGFzaFt0YWJsZU5hbWVdLCBuZXN0ZWRSZXN1bHQuZmFsbGJhY2tIYXNoKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmYWxsYmFja0hhc2hba2V5XSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbHVtbk5hbWUgPSByZXNvbHZlQ29sdW1uTmFtZShtb2RlbENsYXNzLCBrZXkpXG5cbiAgICAgIGlmIChjb2x1bW5OYW1lKSB7XG4gICAgICAgIHJlc29sdmVkSGFzaFtrZXldID0gdmFsdWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZhbGxiYWNrSGFzaFtrZXldID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge3Jlc29sdmVkSGFzaCwgZmFsbGJhY2tIYXNofVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gYXJncy5oYXNoIC0gV2hlcmUgaGFzaC5cbiAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBhcmdzLm1vZGVsQ2xhc3MgLSBNb2RlbCBjbGFzcy5cbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAtIEpvaW4gb2JqZWN0LlxuICovXG5mdW5jdGlvbiBidWlsZEpvaW5PYmplY3RGcm9tV2hlcmVIYXNoKHtoYXNoLCBtb2RlbENsYXNzfSkge1xuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGFueT59ICovXG4gIGNvbnN0IGpvaW5PYmplY3QgPSB7fVxuXG4gIGZvciAoY29uc3Qga2V5IGluIGhhc2gpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGhhc2hba2V5XVxuXG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkgY29udGludWVcblxuICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IGdldFJlbGF0aW9uc2hpcEJ5TmFtZShtb2RlbENsYXNzLCBrZXkpXG5cbiAgICBpZiAoIXJlbGF0aW9uc2hpcCkgY29udGludWVcblxuICAgIGNvbnN0IHRhcmdldE1vZGVsQ2xhc3MgPSByZWxhdGlvbnNoaXAuZ2V0VGFyZ2V0TW9kZWxDbGFzcygpXG4gICAgY29uc3QgbmVzdGVkSm9pbk9iamVjdCA9IGJ1aWxkSm9pbk9iamVjdEZyb21XaGVyZUhhc2goe2hhc2g6IHZhbHVlLCBtb2RlbENsYXNzOiB0YXJnZXRNb2RlbENsYXNzfSlcblxuICAgIGpvaW5PYmplY3Rba2V5XSA9IE9iamVjdC5rZXlzKG5lc3RlZEpvaW5PYmplY3QpLmxlbmd0aCA+IDAgPyBuZXN0ZWRKb2luT2JqZWN0IDogdHJ1ZVxuICB9XG5cbiAgcmV0dXJuIGpvaW5PYmplY3Rcbn1cbiJdfQ==
|
|
540
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtY2xhc3MtcXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvbW9kZWwtY2xhc3MtcXVlcnkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDeEMsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGlCQUFpQixDQUFBO0FBQzdDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQTtBQUN0QyxPQUFPLFNBQVMsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN0QyxPQUFPLGFBQWEsTUFBTSxZQUFZLENBQUE7QUFDdEMsT0FBTyxXQUFXLE1BQU0sbUJBQW1CLENBQUE7QUFDM0MsT0FBTyxtQkFBbUIsTUFBTSxxQ0FBcUMsQ0FBQTtBQUNyRSxPQUFPLG1CQUFtQixNQUFNLDZCQUE2QixDQUFBO0FBQzdELE9BQU8sUUFBUSxNQUFNLGdCQUFnQixDQUFBO0FBRXJDOzs7R0FHRztBQUNILFNBQVMsc0JBQXNCLENBQUMsT0FBTztJQUNyQyxJQUFJLENBQUMsT0FBTztRQUFFLE9BQU8sRUFBRSxDQUFBO0lBRXZCLElBQUksT0FBTyxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7UUFDL0IsT0FBTyxFQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFDLENBQUE7SUFDMUIsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzNCLHVEQUF1RDtRQUN2RCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUE7UUFFakIsS0FBSyxNQUFNLEtBQUssSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUM1QixJQUFJLE9BQU8sS0FBSyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUM3QixNQUFNLENBQUMsS0FB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QUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtpbmNvcnBvcmF0ZX0gZnJvbSBcImluY29ycG9yYXRvclwiXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCB7aXNQbGFpbk9iamVjdH0gZnJvbSBcImlzLXBsYWluLW9iamVjdFwiXG5pbXBvcnQge0xvZ2dlcn0gZnJvbSBcIi4uLy4uL2xvZ2dlci5qc1wiXG5pbXBvcnQgUHJlbG9hZGVyIGZyb20gXCIuL3ByZWxvYWRlci5qc1wiXG5pbXBvcnQgRGF0YWJhc2VRdWVyeSBmcm9tIFwiLi9pbmRleC5qc1wiXG5pbXBvcnQgSm9pblRyYWNrZXIgZnJvbSBcIi4vam9pbi10cmFja2VyLmpzXCJcbmltcG9ydCBSZWNvcmROb3RGb3VuZEVycm9yIGZyb20gXCIuLi9yZWNvcmQvcmVjb3JkLW5vdC1mb3VuZC1lcnJvci5qc1wiXG5pbXBvcnQgV2hlcmVNb2RlbENsYXNzSGFzaCBmcm9tIFwiLi93aGVyZS1tb2RlbC1jbGFzcy1oYXNoLmpzXCJcbmltcG9ydCBXaGVyZU5vdCBmcm9tIFwiLi93aGVyZS1ub3QuanNcIlxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5OZXN0ZWRQcmVsb2FkUmVjb3JkIHwgc3RyaW5nIHwgc3RyaW5nW119IHByZWxvYWQgLSBQcmVsb2FkIGRhdGEgaW4gc2hvcnRoYW5kIG9yIG5lc3RlZCBmb3JtLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vaW5kZXguanNcIikuTmVzdGVkUHJlbG9hZFJlY29yZH0gLSBOb3JtYWxpemVkIHByZWxvYWQgcmVjb3JkLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVQcmVsb2FkUmVjb3JkKHByZWxvYWQpIHtcbiAgaWYgKCFwcmVsb2FkKSByZXR1cm4ge31cblxuICBpZiAodHlwZW9mIHByZWxvYWQgPT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB7W3ByZWxvYWRdOiB0cnVlfVxuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkocHJlbG9hZCkpIHtcbiAgICAvKiogQHR5cGUge2ltcG9ydChcIi4vaW5kZXguanNcIikuTmVzdGVkUHJlbG9hZFJlY29yZH0gKi9cbiAgICBjb25zdCByZXN1bHQgPSB7fVxuXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBwcmVsb2FkKSB7XG4gICAgICBpZiAodHlwZW9mIGVudHJ5ID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmVzdWx0W2VudHJ5XSA9IHRydWVcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICAgIGluY29ycG9yYXRlKHJlc3VsdCwgbm9ybWFsaXplUHJlbG9hZFJlY29yZChlbnRyeSkpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwcmVsb2FkIGVudHJ5IHR5cGU6ICR7dHlwZW9mIGVudHJ5fWApXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgaWYgKCFpc1BsYWluT2JqZWN0KHByZWxvYWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHByZWxvYWQgdHlwZTogJHt0eXBlb2YgcHJlbG9hZH1gKVxuICB9XG5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL2luZGV4LmpzXCIpLk5lc3RlZFByZWxvYWRSZWNvcmR9ICovXG4gIGNvbnN0IHJlc3VsdCA9IHt9XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocHJlbG9hZCkpIHtcbiAgICBpZiAodmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbHVlXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSB8fCBpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBub3JtYWxpemVQcmVsb2FkUmVjb3JkKHZhbHVlKVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcHJlbG9hZCB2YWx1ZSBmb3IgJHtrZXl9OiAke3R5cGVvZiB2YWx1ZX1gKVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBNQ1xuICovXG4vKipcbiAqIEB0ZW1wbGF0ZSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBNQ1xuICogQHR5cGVkZWYge2ltcG9ydChcIi4vaW5kZXguanNcIikuUXVlcnlBcmdzVHlwZSAmIHttb2RlbENsYXNzOiBNQywgam9pbkJhc2VQYXRoPzogc3RyaW5nW10sIGpvaW5UcmFja2VyPzogaW1wb3J0KFwiLi9qb2luLXRyYWNrZXIuanNcIikuZGVmYXVsdCwgZm9yY2VRdWFsaWZ5QmFzZVRhYmxlPzogYm9vbGVhbn19IE1vZGVsQ2xhc3NRdWVyeUFyZ3NUeXBlXG4gKi9cblxuLyoqXG4gKiBBIGdlbmVyaWMgcXVlcnkgb3ZlciBzb21lIG1vZGVsIHR5cGUuXG4gKiBAdGVtcGxhdGUge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gTUNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VRdWVyeU1vZGVsQ2xhc3NRdWVyeSBleHRlbmRzIERhdGFiYXNlUXVlcnkge1xuICAvKiogQHBhcmFtIHtNb2RlbENsYXNzUXVlcnlBcmdzVHlwZTxNQz59IGFyZ3MgLSBRdWVyeSBjb25zdHJ1Y3RvciBhcmd1bWVudHMuICovXG4gIGNvbnN0cnVjdG9yKGFyZ3MpIHtcbiAgICBjb25zdCB7bW9kZWxDbGFzc30gPSBhcmdzXG5cbiAgICBpZiAoIW1vZGVsQ2xhc3MpIHRocm93IG5ldyBFcnJvcihgTm8gbW9kZWxDbGFzcyBnaXZlbiBpbiAke09iamVjdC5rZXlzKGFyZ3MpLmpvaW4oXCIsIFwiKX1gKVxuXG4gICAgc3VwZXIoYXJncylcbiAgICB0aGlzLmxvZ2dlciA9IG5ldyBMb2dnZXIodGhpcylcblxuICAgIC8qKiBAdHlwZSB7TUN9ICovXG4gICAgdGhpcy5tb2RlbENsYXNzID0gbW9kZWxDbGFzc1xuXG4gICAgLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi9cbiAgICB0aGlzLl9qb2luQmFzZVBhdGggPSBhcmdzLmpvaW5CYXNlUGF0aCB8fCBbXVxuICAgIHRoaXMuX2pvaW5UcmFja2VyID0gYXJncy5qb2luVHJhY2tlciB8fCBuZXcgSm9pblRyYWNrZXIoe21vZGVsQ2xhc3M6IHRoaXMubW9kZWxDbGFzc30pXG4gICAgdGhpcy5fZm9yY2VRdWFsaWZ5QmFzZVRhYmxlID0gQm9vbGVhbihhcmdzLmZvcmNlUXVhbGlmeUJhc2VUYWJsZSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dGhpc30gLSBUaGUgY2xvbmUuICAqL1xuICBjbG9uZSgpIHtcbiAgICBjb25zdCBuZXdRdWVyeSA9IC8qKiBAdHlwZSB7VmVsb2Npb3VzRGF0YWJhc2VRdWVyeU1vZGVsQ2xhc3NRdWVyeTxNQz59ICovIChuZXcgVmVsb2Npb3VzRGF0YWJhc2VRdWVyeU1vZGVsQ2xhc3NRdWVyeSh7XG4gICAgICBkcml2ZXI6IHRoaXMuX2RyaXZlckZuLFxuICAgICAgZnJvbXM6IFsuLi50aGlzLl9mcm9tc10sXG4gICAgICBoYW5kbGVyOiB0aGlzLmhhbmRsZXIuY2xvbmUoKSxcbiAgICAgIGdyb3VwczogWy4uLnRoaXMuX2dyb3Vwc10sXG4gICAgICBqb2luczogWy4uLnRoaXMuX2pvaW5zXSxcbiAgICAgIGxpbWl0OiB0aGlzLl9saW1pdCxcbiAgICAgIG1vZGVsQ2xhc3M6IHRoaXMubW9kZWxDbGFzcyxcbiAgICAgIG9mZnNldDogdGhpcy5fb2Zmc2V0LFxuICAgICAgb3JkZXJzOiBbLi4udGhpcy5fb3JkZXJzXSxcbiAgICAgIHBhZ2U6IHRoaXMuX3BhZ2UsXG4gICAgICBwZXJQYWdlOiB0aGlzLl9wZXJQYWdlLFxuICAgICAgcHJlbG9hZDogey4uLnRoaXMuX3ByZWxvYWR9LFxuICAgICAgZGlzdGluY3Q6IHRoaXMuX2Rpc3RpbmN0LFxuICAgICAgc2VsZWN0czogWy4uLnRoaXMuX3NlbGVjdHNdLFxuICAgICAgd2hlcmVzOiBbLi4udGhpcy5fd2hlcmVzXSxcbiAgICAgIGpvaW5CYXNlUGF0aDogWy4uLnRoaXMuX2pvaW5CYXNlUGF0aF0sXG4gICAgICBqb2luVHJhY2tlcjogdGhpcy5fam9pblRyYWNrZXIuY2xvbmUoKSxcbiAgICAgIGZvcmNlUXVhbGlmeUJhc2VUYWJsZTogdGhpcy5fZm9yY2VRdWFsaWZ5QmFzZVRhYmxlXG4gICAgfSkpXG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgcmV0dXJuIG5ld1F1ZXJ5XG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8bnVtYmVyPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb3VudC4gICovXG4gIGFzeW5jIGNvdW50KCkge1xuICAgIC8vIEdlbmVyYXRlIGNvdW50IFNRTFxuICAgIGNvbnN0IHByaW1hcnlLZXkgPSBgJHt0aGlzLmRyaXZlci5xdW90ZVRhYmxlKHRoaXMuZ2V0TW9kZWxDbGFzcygpLnRhYmxlTmFtZSgpKX0uJHt0aGlzLmRyaXZlci5xdW90ZUNvbHVtbih0aGlzLmdldE1vZGVsQ2xhc3MoKS5wcmltYXJ5S2V5KCkpfWBcbiAgICBjb25zdCBkaXN0aW5jdFByZWZpeCA9IHRoaXMuX2Rpc3RpbmN0ID8gXCJESVNUSU5DVCBcIiA6IFwiXCJcbiAgICBsZXQgc3FsID0gYENPVU5UKCR7ZGlzdGluY3RQcmVmaXh9JHtwcmltYXJ5S2V5fSlgXG5cbiAgICBpZiAodGhpcy5kcml2ZXIuZ2V0VHlwZSgpID09IFwicGdzcWxcIikgc3FsICs9IFwiOjppbnRcIlxuXG4gICAgc3FsICs9IFwiIEFTIGNvdW50XCJcblxuXG4gICAgLy8gQ2xvbmUgcXVlcnkgYW5kIGV4ZWN1dGUgY291bnRcbiAgICBjb25zdCBjb3VudFF1ZXJ5ID0gdGhpcy5jbG9uZSgpXG5cbiAgICBjb3VudFF1ZXJ5Ll9kaXN0aW5jdCA9IGZhbHNlXG4gICAgY291bnRRdWVyeS5fc2VsZWN0cyA9IFtdXG4gICAgY291bnRRdWVyeS5zZWxlY3Qoc3FsKVxuXG4gICAgY29uc3QgcmVzdWx0cyA9IC8qKiBAdHlwZSB7e2NvdW50OiBudW1iZXJ9W119ICovIChhd2FpdCBjb3VudFF1ZXJ5Ll9leGVjdXRlUXVlcnkoKSlcblxuICAgIC8vIFRoZSBxdWVyeSBpc24ndCBncm91cGVkIGFuZCBhIHNpbmdsZSByZXN1bHQgaGFzIGJlZW4gZ2l2ZW5cbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT0gMSkge1xuICAgICAgcmV0dXJuIHJlc3VsdHNbMF0uY291bnRcbiAgICB9XG5cbiAgICAvLyBUaGUgcXVlcnkgbWF5IGJlIGdyb3VwZWQgYW5kIGEgbG90IG9mIGRpZmZlcmVudCBjb3VudHMgYSBnaXZlblxuICAgIGxldCBjb3VudFJlc3VsdCA9IDBcblxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgIGlmICghKFwiY291bnRcIiBpbiByZXN1bHQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY291bnQgcmVzdWx0XCIpXG4gICAgICB9XG5cbiAgICAgIGNvdW50UmVzdWx0ICs9IHJlc3VsdC5jb3VudFxuICAgIH1cblxuICAgIHJldHVybiBjb3VudFJlc3VsdFxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtNQ30gLSBUaGUgbW9kZWwgY2xhc3MuICAqL1xuICBnZXRNb2RlbENsYXNzKCkge1xuICAgIGlmICghdGhpcy5tb2RlbENsYXNzKSB0aHJvdyBuZXcgRXJyb3IoXCJtb2RlbENsYXNzIG5vdCBzZXRcIilcblxuICAgIHJldHVybiB0aGlzLm1vZGVsQ2xhc3NcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nW119IC0gVGhlIGpvaW4gYmFzZSBwYXRoLiAqL1xuICBnZXRKb2luQmFzZVBhdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2pvaW5CYXNlUGF0aFxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtpbXBvcnQoXCIuL2pvaW4tdHJhY2tlci5qc1wiKS5kZWZhdWx0fSAtIFRoZSBqb2luIHRyYWNrZXIuICovXG4gIGdldEpvaW5UcmFja2VyKCkge1xuICAgIHJldHVybiB0aGlzLl9qb2luVHJhY2tlclxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgdG8gcXVhbGlmeSBiYXNlIHRhYmxlLiAqL1xuICBnZXRGb3JjZVF1YWxpZnlCYXNlVGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZvcmNlUXVhbGlmeUJhc2VUYWJsZVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGpvaW5CYXNlUGF0aCAtIEpvaW4gYmFzZSBwYXRoLlxuICAgKiBAcmV0dXJucyB7dGhpc30gLSBUaGUgcXVlcnkgd2l0aCB1cGRhdGVkIGJhc2UgcGF0aC5cbiAgICovXG4gIHNldEpvaW5CYXNlUGF0aChqb2luQmFzZVBhdGgpIHtcbiAgICB0aGlzLl9qb2luQmFzZVBhdGggPSBqb2luQmFzZVBhdGhcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGpvaW5CYXNlUGF0aCAtIEpvaW4gYmFzZSBwYXRoLlxuICAgKiBAcmV0dXJucyB7VmVsb2Npb3VzRGF0YWJhc2VRdWVyeU1vZGVsQ2xhc3NRdWVyeTxNQz59IC0gVGhlIHNjb3BlZCBxdWVyeS5cbiAgICovXG4gIHdpdGhKb2luUGF0aChqb2luQmFzZVBhdGgpIHtcbiAgICBjb25zdCBzY29wZWRRdWVyeSA9IC8qKiBAdHlwZSB7VmVsb2Npb3VzRGF0YWJhc2VRdWVyeU1vZGVsQ2xhc3NRdWVyeTxNQz59ICovICh0aGlzLmNsb25lKCkpXG5cbiAgICBzY29wZWRRdWVyeS5fam9pbkJhc2VQYXRoID0gam9pbkJhc2VQYXRoXG4gICAgc2NvcGVkUXVlcnkuX2pvaW5UcmFja2VyID0gdGhpcy5fam9pblRyYWNrZXJcblxuICAgIHJldHVybiBzY29wZWRRdWVyeVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGggLSBKb2luIHBhdGguXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGFibGUgbmFtZSBmb3IgcGF0aC5cbiAgICovXG4gIF9yZXNvbHZlVGFibGVOYW1lRm9ySm9pblBhdGgocGF0aCkge1xuICAgIGxldCBtb2RlbENsYXNzID0gdGhpcy5fam9pblRyYWNrZXIuZ2V0Um9vdE1vZGVsQ2xhc3MoKVxuXG4gICAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSByZXR1cm4gbW9kZWxDbGFzcy50YWJsZU5hbWUoKVxuXG4gICAgZm9yIChjb25zdCByZWxhdGlvbnNoaXBOYW1lIG9mIHBhdGgpIHtcbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IG1vZGVsQ2xhc3MuZ2V0UmVsYXRpb25zaGlwQnlOYW1lKHJlbGF0aW9uc2hpcE5hbWUpXG4gICAgICBjb25zdCB0YXJnZXRNb2RlbENsYXNzID0gcmVsYXRpb25zaGlwLmdldFRhcmdldE1vZGVsQ2xhc3MoKVxuXG4gICAgICBpZiAoIXRhcmdldE1vZGVsQ2xhc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyB0YXJnZXQgbW9kZWwgY2xhc3MgZm9yICR7bW9kZWxDbGFzcy5uYW1lfSMke3JlbGF0aW9uc2hpcE5hbWV9YClcbiAgICAgIH1cblxuICAgICAgbW9kZWxDbGFzcyA9IHRhcmdldE1vZGVsQ2xhc3NcbiAgICB9XG5cbiAgICByZXR1cm4gbW9kZWxDbGFzcy50YWJsZU5hbWUoKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGggLSBKb2luIHBhdGguXG4gICAqIEByZXR1cm5zIHt7dGFibGVOYW1lOiBzdHJpbmcsIGFsaWFzOiBzdHJpbmcgfCB1bmRlZmluZWR9fSAtIFRoZSBlbnRyeS5cbiAgICovXG4gIF9yZWdpc3RlckpvaW5QYXRoKHBhdGgpIHtcbiAgICBjb25zdCB0YWJsZU5hbWUgPSB0aGlzLl9yZXNvbHZlVGFibGVOYW1lRm9ySm9pblBhdGgocGF0aClcblxuICAgIHJldHVybiB0aGlzLl9qb2luVHJhY2tlci5yZWdpc3RlclBhdGgocGF0aCwgdGFibGVOYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGggLSBKb2luIHBhdGguXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVW5xdW90ZWQgdGFibGUgcmVmZXJlbmNlIChhbGlhcyBvciB0YWJsZSBuYW1lKS5cbiAgICovXG4gIGdldEpvaW5UYWJsZVJlZmVyZW5jZShwYXRoKSB7XG4gICAgY29uc3QgZW50cnkgPSB0aGlzLl9qb2luVHJhY2tlci5nZXRFbnRyeShwYXRoKSB8fCB0aGlzLl9yZWdpc3RlckpvaW5QYXRoKHBhdGgpXG5cbiAgICByZXR1cm4gZW50cnkuYWxpYXMgfHwgZW50cnkudGFibGVOYW1lXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsuLi5zdHJpbmd9IHBhdGggLSBKb2luIHBhdGggc2VnbWVudHMuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVW5xdW90ZWQgdGFibGUgcmVmZXJlbmNlIChhbGlhcyBvciB0YWJsZSBuYW1lKS5cbiAgICovXG4gIGdldFRhYmxlUmVmZXJlbmNlRm9ySm9pbiguLi5wYXRoKSB7XG4gICAgY29uc3QgZnVsbFBhdGggPSB0aGlzLl9qb2luQmFzZVBhdGguY29uY2F0KHBhdGgpXG5cbiAgICByZXR1cm4gdGhpcy5nZXRKb2luVGFibGVSZWZlcmVuY2UoZnVsbFBhdGgpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsuLi5zdHJpbmd9IHBhdGggLSBKb2luIHBhdGggc2VnbWVudHMuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gUXVvdGVkIHRhYmxlIG5hbWUgZm9yIGpvaW4gcGF0aC5cbiAgICovXG4gIGdldFRhYmxlRm9ySm9pbiguLi5wYXRoKSB7XG4gICAgcmV0dXJuIHRoaXMuZHJpdmVyLnF1b3RlVGFibGUodGhpcy5nZXRUYWJsZVJlZmVyZW5jZUZvckpvaW4oLi4ucGF0aCkpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IHRhcmdldE1vZGVsQ2xhc3MgLSBUYXJnZXQgbW9kZWwgY2xhc3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGpvaW5QYXRoIC0gSm9pbiBwYXRoLlxuICAgKiBAcmV0dXJucyB7VmVsb2Npb3VzRGF0YWJhc2VRdWVyeU1vZGVsQ2xhc3NRdWVyeTxNQz59IC0gVGhlIHNjb3BlZCBqb2luIHF1ZXJ5LlxuICAgKi9cbiAgYnVpbGRKb2luU2NvcGVRdWVyeSh0YXJnZXRNb2RlbENsYXNzLCBqb2luUGF0aCkge1xuICAgIGNvbnN0IHNjb3BlZFF1ZXJ5ID0gLyoqIEB0eXBlIHtWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5TW9kZWxDbGFzc1F1ZXJ5PE1DPn0gKi8gKHRhcmdldE1vZGVsQ2xhc3MuX25ld1F1ZXJ5KCkpXG5cbiAgICBzY29wZWRRdWVyeS5fam9pblRyYWNrZXIgPSB0aGlzLl9qb2luVHJhY2tlclxuICAgIHNjb3BlZFF1ZXJ5Ll9qb2luQmFzZVBhdGggPSBqb2luUGF0aFxuICAgIHNjb3BlZFF1ZXJ5Ll9mb3JjZVF1YWxpZnlCYXNlVGFibGUgPSB0cnVlXG5cbiAgICByZXR1cm4gc2NvcGVkUXVlcnlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLiAgKi9cbiAgYXN5bmMgZGVzdHJveUFsbCgpIHtcbiAgICBjb25zdCByZWNvcmRzID0gYXdhaXQgdGhpcy50b0FycmF5KClcblxuICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcbiAgICAgIGF3YWl0IHJlY29yZC5kZXN0cm95KClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSByZWNvcmRJZCAtIFJlY29yZCBpZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8SW5zdGFuY2VUeXBlPE1DPj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgZmluZC5cbiAgICovXG4gIGFzeW5jIGZpbmQocmVjb3JkSWQpIHtcbiAgICAvKiogQHR5cGUge3tba2V5OiBzdHJpbmddOiBudW1iZXIgfCBzdHJpbmd9fSAqL1xuICAgIGNvbnN0IGNvbmRpdGlvbnMgPSB7fVxuXG4gICAgY29uZGl0aW9uc1t0aGlzLmdldE1vZGVsQ2xhc3MoKS5wcmltYXJ5S2V5KCldID0gcmVjb3JkSWRcblxuICAgIGNvbnN0IG5ld1F1ZXJ5ID0gLyoqIEB0eXBlIHtWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5TW9kZWxDbGFzc1F1ZXJ5PE1DPn0gKi8gKHRoaXMuY2xvbmUoKSlcblxuICAgIG5ld1F1ZXJ5LndoZXJlKGNvbmRpdGlvbnMpXG5cbiAgICBjb25zdCByZWNvcmQgPSAoYXdhaXQgbmV3UXVlcnkuZmlyc3QoKSlcblxuICAgIGlmICghcmVjb3JkKSB7XG4gICAgICB0aHJvdyBuZXcgUmVjb3JkTm90Rm91bmRFcnJvcihgQ291bGRuJ3QgZmluZCAke3RoaXMuZ2V0TW9kZWxDbGFzcygpLm5hbWV9IHdpdGggJyR7dGhpcy5nZXRNb2RlbENsYXNzKCkucHJpbWFyeUtleSgpfSc9JHtyZWNvcmRJZH1gKVxuICAgIH1cblxuICAgIHJldHVybiByZWNvcmRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXJ9fSBjb25kaXRpb25zIC0gQ29uZGl0aW9ucyBoYXNoIGtleWVkIGJ5IGF0dHJpYnV0ZSBuYW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxJbnN0YW5jZVR5cGU8TUM+IHwgbnVsbD59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgYnkuXG4gICAqL1xuICBhc3luYyBmaW5kQnkoY29uZGl0aW9ucykge1xuICAgIC8qKiBAdHlwZSB7e1trZXk6IHN0cmluZ106IG51bWJlciB8IHN0cmluZ319ICovXG4gICAgY29uc3QgbmV3Q29uZGl0aW9ucyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBjb25kaXRpb25zKSB7XG4gICAgICBjb25zdCBrZXlVbmRlcnNjb3JlID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKGtleSlcblxuICAgICAgbmV3Q29uZGl0aW9uc1trZXlVbmRlcnNjb3JlXSA9IGNvbmRpdGlvbnNba2V5XVxuICAgIH1cblxuICAgIGNvbnN0IG5ld1F1ZXJ5ID0gLyoqIEB0eXBlIHtWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5TW9kZWxDbGFzc1F1ZXJ5PE1DPn0gKi8gKHRoaXMuY2xvbmUoKSlcblxuICAgIG5ld1F1ZXJ5LndoZXJlKG5ld0NvbmRpdGlvbnMpXG5cbiAgICByZXR1cm4gYXdhaXQgbmV3UXVlcnkuZmlyc3QoKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7e1trZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlcn19IGNvbmRpdGlvbnMgLSBDb25kaXRpb25zIGhhc2gga2V5ZWQgYnkgYXR0cmlidXRlIG5hbWUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oSW5zdGFuY2VUeXBlPE1DPikgOiB2b2lkfSBbY2FsbGJhY2tdIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEluc3RhbmNlVHlwZTxNQz4+fSAtIFJlc29sdmVzIHdpdGggdGhlIG9yIGNyZWF0ZSBieS5cbiAgICovXG4gIGFzeW5jIGZpbmRPckNyZWF0ZUJ5KGNvbmRpdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgcmVjb3JkID0gYXdhaXQgdGhpcy5maW5kT3JJbml0aWFsaXplQnkoY29uZGl0aW9ucywgY2FsbGJhY2spXG5cbiAgICBpZiAocmVjb3JkLmlzTmV3UmVjb3JkKCkpIHtcbiAgICAgIGF3YWl0IHJlY29yZC5zYXZlKClcbiAgICB9XG5cbiAgICByZXR1cm4gcmVjb3JkXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7W2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyfX0gY29uZGl0aW9ucyAtIENvbmRpdGlvbnMgaGFzaCBrZXllZCBieSBhdHRyaWJ1dGUgbmFtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8SW5zdGFuY2VUeXBlPE1DPj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgYnkgb3IgZmFpbC5cbiAgICovXG4gIGFzeW5jIGZpbmRCeU9yRmFpbChjb25kaXRpb25zKSB7XG4gICAgLyoqIEB0eXBlIHt7W2tleTogc3RyaW5nXTogbnVtYmVyIHwgc3RyaW5nfX0gKi9cbiAgICBjb25zdCBuZXdDb25kaXRpb25zID0ge31cblxuICAgIGZvciAoY29uc3Qga2V5IGluIGNvbmRpdGlvbnMpIHtcbiAgICAgIGNvbnN0IGtleVVuZGVyc2NvcmUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoa2V5KVxuXG4gICAgICBuZXdDb25kaXRpb25zW2tleVVuZGVyc2NvcmVdID0gY29uZGl0aW9uc1trZXldXG4gICAgfVxuXG4gICAgY29uc3QgbmV3UXVlcnkgPSAvKiogQHR5cGUge1ZlbG9jaW91c0RhdGFiYXNlUXVlcnlNb2RlbENsYXNzUXVlcnk8TUM+fSAqLyAodGhpcy5jbG9uZSgpKVxuXG4gICAgbmV3UXVlcnkud2hlcmUobmV3Q29uZGl0aW9ucylcblxuICAgIGNvbnN0IG1vZGVsID0gYXdhaXQgbmV3UXVlcnkuZmlyc3QoKVxuXG4gICAgaWYgKCFtb2RlbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVjb3JkIG5vdCBmb3VuZFwiKVxuICAgIH1cblxuICAgIHJldHVybiBtb2RlbFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb25kaXRpb25zIC0gQ29uZGl0aW9ucy5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihJbnN0YW5jZVR5cGU8TUM+KSA6IHZvaWR9IFtjYWxsYmFja10gLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8SW5zdGFuY2VUeXBlPE1DPj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgb3IgaW5pdGlhbGl6ZSBieS5cbiAgICovXG4gIGFzeW5jIGZpbmRPckluaXRpYWxpemVCeShjb25kaXRpb25zLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IHRoaXMuZmluZEJ5KGNvbmRpdGlvbnMpXG5cbiAgICBpZiAocmVjb3JkKSByZXR1cm4gcmVjb3JkXG5cbiAgICBjb25zdCBNb2RlbENsYXNzID0gdGhpcy5nZXRNb2RlbENsYXNzKClcbiAgICBjb25zdCBuZXdSZWNvcmQgPSAvKiogQHR5cGUge0luc3RhbmNlVHlwZTxNQz59ICovIChuZXcgTW9kZWxDbGFzcyhjb25kaXRpb25zKSlcblxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2sobmV3UmVjb3JkKVxuICAgIH1cblxuICAgIHJldHVybiBuZXdSZWNvcmRcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTxJbnN0YW5jZVR5cGU8TUM+IHwgdW5kZWZpbmVkPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBmaXJzdC4gICovXG4gIGFzeW5jIGZpcnN0KCkge1xuICAgIGNvbnN0IG5ld1F1ZXJ5ID0gdGhpcy5jbG9uZSgpLmxpbWl0KDEpLnJlb3JkZXIoYCR7dGhpcy5kcml2ZXIucXVvdGVUYWJsZSh0aGlzLmdldE1vZGVsQ2xhc3MoKS50YWJsZU5hbWUoKSl9LiR7dGhpcy5kcml2ZXIucXVvdGVDb2x1bW4odGhpcy5nZXRNb2RlbENsYXNzKCkub3JkZXJhYmxlQ29sdW1uKCkpfWApXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IG5ld1F1ZXJ5LnRvQXJyYXkoKVxuXG4gICAgcmV0dXJuIHJlc3VsdHNbMF1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTxJbnN0YW5jZVR5cGU8TUM+IHwgdW5kZWZpbmVkPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBsYXN0LiAgKi9cbiAgYXN5bmMgbGFzdCgpIHtcbiAgICBjb25zdCBwcmltYXJ5S2V5ID0gdGhpcy5nZXRNb2RlbENsYXNzKCkucHJpbWFyeUtleSgpXG4gICAgY29uc3QgdGFibGVOYW1lID0gdGhpcy5nZXRNb2RlbENsYXNzKCkudGFibGVOYW1lKClcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5jbG9uZSgpLnJlb3JkZXIoYCR7dGhpcy5kcml2ZXIucXVvdGVUYWJsZSh0YWJsZU5hbWUpfS4ke3RoaXMuZHJpdmVyLnF1b3RlQ29sdW1uKHByaW1hcnlLZXkpfSBERVNDYCkubGltaXQoMSkudG9BcnJheSgpXG5cbiAgICByZXR1cm4gcmVzdWx0c1swXVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5OZXN0ZWRQcmVsb2FkUmVjb3JkfSBkYXRhIC0gRGF0YSBwYXlsb2FkLlxuICAgKiBAcmV0dXJucyB7dGhpc30gLSBUaGUgcHJlbG9hZC5cbiAgICovXG4gIHByZWxvYWQoZGF0YSkge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRQcmVsb2FkID0gbm9ybWFsaXplUHJlbG9hZFJlY29yZChkYXRhKVxuICAgIGluY29ycG9yYXRlKHRoaXMuX3ByZWxvYWQsIG5vcm1hbGl6ZWRQcmVsb2FkKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgcXVlcnkgcmVzdWx0cyB0byBhcnJheSBvZiBtb2RlbCBpbnN0YW5jZXNcbiAgICogQHJldHVybnMge1Byb21pc2U8QXJyYXk8SW5zdGFuY2VUeXBlPE1DPj4+fSAtIFJlc29sdmVzIHdpdGggdGhlIGFycmF5LlxuICAgKi9cbiAgYXN5bmMgdG9BcnJheSgpIHtcbiAgICBjb25zdCBtb2RlbHMgPSBbXVxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLnJlc3VsdHMoKVxuXG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgY29uc3QgTW9kZWxDbGFzcyA9IHRoaXMuZ2V0TW9kZWxDbGFzcygpXG4gICAgICBjb25zdCBtb2RlbCA9IC8qKiBAdHlwZSB7SW5zdGFuY2VUeXBlPE1DPn0gKi8gKG5ldyBNb2RlbENsYXNzKCkpXG5cbiAgICAgIG1vZGVsLmxvYWRFeGlzdGluZ1JlY29yZChyZXN1bHQpXG4gICAgICBtb2RlbHMucHVzaChtb2RlbClcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5fcHJlbG9hZCkubGVuZ3RoID4gMCAmJiBtb2RlbHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcHJlbG9hZGVyID0gbmV3IFByZWxvYWRlcih7XG4gICAgICAgIG1vZGVsQ2xhc3M6IHRoaXMubW9kZWxDbGFzcyxcbiAgICAgICAgbW9kZWxzLFxuICAgICAgICBwcmVsb2FkOiB0aGlzLl9wcmVsb2FkXG4gICAgICB9KVxuXG4gICAgICBhd2FpdCBwcmVsb2FkZXIucnVuKClcbiAgICB9XG5cbiAgICByZXR1cm4gbW9kZWxzXG4gIH1cblxuICAvKipcbiAgICogUGx1Y2tzIG9uZSBvciBtb3JlIGNvbHVtbnMgZGlyZWN0bHkgZnJvbSB0aGUgZGF0YWJhc2Ugd2l0aG91dCBpbnN0YW50aWF0aW5nIG1vZGVscy5cbiAgICogQHBhcmFtIHsuLi5zdHJpbmd8c3RyaW5nW119IGNvbHVtbnMgLSBDb2x1bW4gbmFtZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueVtdPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBwbHVjay5cbiAgICovXG4gIGFzeW5jIHBsdWNrKC4uLmNvbHVtbnMpIHtcbiAgICBjb25zdCBmbGF0Q29sdW1ucyA9IGNvbHVtbnMuZmxhdCgpXG5cbiAgICBpZiAoZmxhdENvbHVtbnMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb2x1bW5zIGdpdmVuIHRvIHBsdWNrXCIpXG5cbiAgICBjb25zdCBtb2RlbENsYXNzID0gdGhpcy5nZXRNb2RlbENsYXNzKClcbiAgICBjb25zdCB0YWJsZU5hbWUgPSBtb2RlbENsYXNzLnRhYmxlTmFtZSgpXG4gICAgY29uc3QgYXR0cmlidXRlTWFwID0gbW9kZWxDbGFzcy5nZXRBdHRyaWJ1dGVOYW1lVG9Db2x1bW5OYW1lTWFwKClcbiAgICBjb25zdCBjb2x1bW5OYW1lcyA9IGZsYXRDb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBhdHRyaWJ1dGVNYXBbY29sdW1uXSB8fCBjb2x1bW4pXG5cbiAgICBjb25zdCBxdWVyeSA9IC8qKiBAdHlwZSB7VmVsb2Npb3VzRGF0YWJhc2VRdWVyeU1vZGVsQ2xhc3NRdWVyeTxNQz59ICovICh0aGlzLmNsb25lKCkpXG5cbiAgICBxdWVyeS5fcHJlbG9hZCA9IHt9XG4gICAgcXVlcnkuX3NlbGVjdHMgPSBbXVxuXG4gICAgY29sdW1uTmFtZXMuZm9yRWFjaCgoY29sdW1uTmFtZSkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0U3FsID0gYCR7dGhpcy5kcml2ZXIucXVvdGVUYWJsZSh0YWJsZU5hbWUpfS4ke3RoaXMuZHJpdmVyLnF1b3RlQ29sdW1uKGNvbHVtbk5hbWUpfWBcblxuICAgICAgcXVlcnkuc2VsZWN0KHNlbGVjdFNxbClcbiAgICB9KVxuXG4gICAgY29uc3Qgcm93cyA9IGF3YWl0IHF1ZXJ5Ll9leGVjdXRlUXVlcnkoKVxuXG4gICAgaWYgKGNvbHVtbk5hbWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgW2NvbHVtbk5hbWVdID0gY29sdW1uTmFtZXNcbiAgICAgIHJldHVybiByb3dzLm1hcCgocm93KSA9PiByb3dbY29sdW1uTmFtZV0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHJvd3MubWFwKChyb3cpID0+IGNvbHVtbk5hbWVzLm1hcCgoY29sdW1uTmFtZSkgPT4gcm93W2NvbHVtbk5hbWVdKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vaW5kZXguanNcIikuV2hlcmVBcmd1bWVudFR5cGV9IHdoZXJlIC0gV2hlcmUuXG4gICAqIEByZXR1cm5zIHt0aGlzfSBUaGlzIHF1ZXJ5IGluc3RhbmNlXG4gICAqL1xuICB3aGVyZSh3aGVyZSkge1xuICAgIGlmICh0eXBlb2Ygd2hlcmUgPT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHN1cGVyLndoZXJlKHdoZXJlKVxuICAgIH1cblxuICAgIGlmIChpc1BsYWluT2JqZWN0KHdoZXJlKSkge1xuICAgICAgY29uc3Qge3Jlc29sdmVkSGFzaCwgZmFsbGJhY2tIYXNofSA9IHNwbGl0V2hlcmVIYXNoKHtoYXNoOiB3aGVyZSwgbW9kZWxDbGFzczogdGhpcy5nZXRNb2RlbENsYXNzKCl9KVxuICAgICAgY29uc3Qgam9pbk9iamVjdCA9IGJ1aWxkSm9pbk9iamVjdEZyb21XaGVyZUhhc2goe2hhc2g6IHdoZXJlLCBtb2RlbENsYXNzOiB0aGlzLmdldE1vZGVsQ2xhc3MoKX0pXG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyhqb2luT2JqZWN0KS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuam9pbnMoam9pbk9iamVjdClcbiAgICAgIH1cblxuICAgICAgaWYgKE9iamVjdC5rZXlzKHJlc29sdmVkSGFzaCkubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBxdWFsaWZ5QmFzZVRhYmxlID0gdGhpcy5nZXRGb3JjZVF1YWxpZnlCYXNlVGFibGUoKSB8fCBPYmplY3Qua2V5cyhqb2luT2JqZWN0KS5sZW5ndGggPiAwXG4gICAgICAgIHRoaXMuX3doZXJlcy5wdXNoKG5ldyBXaGVyZU1vZGVsQ2xhc3NIYXNoKHtcbiAgICAgICAgICBoYXNoOiByZXNvbHZlZEhhc2gsXG4gICAgICAgICAgbW9kZWxDbGFzczogdGhpcy5nZXRNb2RlbENsYXNzKCksXG4gICAgICAgICAgcXVhbGlmeUJhc2VUYWJsZSxcbiAgICAgICAgICBxdWVyeTogdGhpc1xuICAgICAgICB9KSlcbiAgICAgIH1cblxuICAgICAgaWYgKE9iamVjdC5rZXlzKGZhbGxiYWNrSGFzaCkubGVuZ3RoID4gMCkge1xuICAgICAgICBzdXBlci53aGVyZShmYWxsYmFja0hhc2gpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHR5cGUgb2Ygd2hlcmU6ICR7dHlwZW9mIHdoZXJlfSAoJHt3aGVyZS5jb25zdHJ1Y3Rvci5uYW1lfSlgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5XaGVyZUFyZ3VtZW50VHlwZX0gd2hlcmUgLSBXaGVyZS5cbiAgICogQHJldHVybnMge3RoaXN9IFRoaXMgcXVlcnkgaW5zdGFuY2VcbiAgICovXG4gIHdoZXJlTm90KHdoZXJlKSB7XG4gICAgaWYgKHR5cGVvZiB3aGVyZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gc3VwZXIud2hlcmVOb3Qod2hlcmUpXG4gICAgfVxuXG4gICAgaWYgKGlzUGxhaW5PYmplY3Qod2hlcmUpKSB7XG4gICAgICBjb25zdCB7cmVzb2x2ZWRIYXNoLCBmYWxsYmFja0hhc2h9ID0gc3BsaXRXaGVyZUhhc2goe2hhc2g6IHdoZXJlLCBtb2RlbENsYXNzOiB0aGlzLmdldE1vZGVsQ2xhc3MoKX0pXG4gICAgICBjb25zdCBqb2luT2JqZWN0ID0gYnVpbGRKb2luT2JqZWN0RnJvbVdoZXJlSGFzaCh7aGFzaDogd2hlcmUsIG1vZGVsQ2xhc3M6IHRoaXMuZ2V0TW9kZWxDbGFzcygpfSlcblxuICAgICAgaWYgKE9iamVjdC5rZXlzKGpvaW5PYmplY3QpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5qb2lucyhqb2luT2JqZWN0KVxuICAgICAgfVxuXG4gICAgICBpZiAoT2JqZWN0LmtleXMocmVzb2x2ZWRIYXNoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHF1YWxpZnlCYXNlVGFibGUgPSB0aGlzLmdldEZvcmNlUXVhbGlmeUJhc2VUYWJsZSgpIHx8IE9iamVjdC5rZXlzKGpvaW5PYmplY3QpLmxlbmd0aCA+IDBcbiAgICAgICAgdGhpcy5fd2hlcmVzLnB1c2gobmV3IFdoZXJlTm90KG5ldyBXaGVyZU1vZGVsQ2xhc3NIYXNoKHtcbiAgICAgICAgICBoYXNoOiByZXNvbHZlZEhhc2gsXG4gICAgICAgICAgbW9kZWxDbGFzczogdGhpcy5nZXRNb2RlbENsYXNzKCksXG4gICAgICAgICAgcXVhbGlmeUJhc2VUYWJsZSxcbiAgICAgICAgICBxdWVyeTogdGhpc1xuICAgICAgICB9KSkpXG4gICAgICB9XG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyhmYWxsYmFja0hhc2gpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc3VwZXIud2hlcmVOb3QoZmFsbGJhY2tIYXNoKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0eXBlIG9mIHdoZXJlOiAke3R5cGVvZiB3aGVyZX0gKCR7d2hlcmUuY29uc3RydWN0b3IubmFtZX0pYClcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBtb2RlbENsYXNzIC0gTW9kZWwgY2xhc3MuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpb25zaGlwTmFtZSAtIFJlbGF0aW9uc2hpcCBuYW1lLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3JlY29yZC9yZWxhdGlvbnNoaXBzL2Jhc2UuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZH0gLSBUaGUgcmVsYXRpb25zaGlwLlxuICovXG5mdW5jdGlvbiBnZXRSZWxhdGlvbnNoaXBCeU5hbWUobW9kZWxDbGFzcywgcmVsYXRpb25zaGlwTmFtZSkge1xuICByZXR1cm4gbW9kZWxDbGFzcy5nZXRSZWxhdGlvbnNoaXBzTWFwKClbcmVsYXRpb25zaGlwTmFtZV1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gbW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzLlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIEF0dHJpYnV0ZSBvciBjb2x1bW4gbmFtZS5cbiAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IC0gVGhlIHJlc29sdmVkIGNvbHVtbiBuYW1lLlxuICovXG5mdW5jdGlvbiByZXNvbHZlQ29sdW1uTmFtZShtb2RlbENsYXNzLCBrZXkpIHtcbiAgY29uc3QgYXR0cmlidXRlTWFwID0gbW9kZWxDbGFzcy5nZXRBdHRyaWJ1dGVOYW1lVG9Db2x1bW5OYW1lTWFwKClcbiAgY29uc3QgY29sdW1uTmFtZSA9IGF0dHJpYnV0ZU1hcFtrZXldXG5cbiAgaWYgKGNvbHVtbk5hbWUpIHJldHVybiBjb2x1bW5OYW1lXG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gYXJncy5oYXNoIC0gV2hlcmUgaGFzaC5cbiAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBhcmdzLm1vZGVsQ2xhc3MgLSBNb2RlbCBjbGFzcy5cbiAqIEByZXR1cm5zIHt7cmVzb2x2ZWRIYXNoOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBmYWxsYmFja0hhc2g6IFJlY29yZDxzdHJpbmcsIGFueT59fSAtIFNwbGl0IGhhc2hlcy5cbiAqL1xuZnVuY3Rpb24gc3BsaXRXaGVyZUhhc2goe2hhc2gsIG1vZGVsQ2xhc3N9KSB7XG4gIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgYW55Pn0gKi9cbiAgY29uc3QgcmVzb2x2ZWRIYXNoID0ge31cbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAqL1xuICBjb25zdCBmYWxsYmFja0hhc2ggPSB7fVxuXG4gIGZvciAoY29uc3Qga2V5IGluIGhhc2gpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGhhc2hba2V5XVxuICAgIGNvbnN0IGlzTmVzdGVkID0gaXNQbGFpbk9iamVjdCh2YWx1ZSlcblxuICAgIGlmIChpc05lc3RlZCkge1xuICAgICAgY29uc3QgcmVsYXRpb25zaGlwID0gZ2V0UmVsYXRpb25zaGlwQnlOYW1lKG1vZGVsQ2xhc3MsIGtleSlcblxuICAgICAgaWYgKHJlbGF0aW9uc2hpcCkge1xuICAgICAgICBjb25zdCB0YXJnZXRNb2RlbENsYXNzID0gcmVsYXRpb25zaGlwLmdldFRhcmdldE1vZGVsQ2xhc3MoKVxuICAgICAgICBjb25zdCBuZXN0ZWRSZXN1bHQgPSBzcGxpdFdoZXJlSGFzaCh7aGFzaDogdmFsdWUsIG1vZGVsQ2xhc3M6IHRhcmdldE1vZGVsQ2xhc3N9KVxuICAgICAgICBjb25zdCBuZXN0ZWRSZXNvbHZlZEtleXMgPSBPYmplY3Qua2V5cyhuZXN0ZWRSZXN1bHQucmVzb2x2ZWRIYXNoKVxuICAgICAgICBjb25zdCBuZXN0ZWRGYWxsYmFja0tleXMgPSBPYmplY3Qua2V5cyhuZXN0ZWRSZXN1bHQuZmFsbGJhY2tIYXNoKVxuXG4gICAgICAgIGlmIChuZXN0ZWRSZXNvbHZlZEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlc29sdmVkSGFzaFtrZXldID0gbmVzdGVkUmVzdWx0LnJlc29sdmVkSGFzaFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5lc3RlZEZhbGxiYWNrS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgdGFibGVOYW1lID0gdGFyZ2V0TW9kZWxDbGFzcy50YWJsZU5hbWUoKVxuXG4gICAgICAgICAgaWYgKCFmYWxsYmFja0hhc2hbdGFibGVOYW1lXSkgZmFsbGJhY2tIYXNoW3RhYmxlTmFtZV0gPSB7fVxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oZmFsbGJhY2tIYXNoW3RhYmxlTmFtZV0sIG5lc3RlZFJlc3VsdC5mYWxsYmFja0hhc2gpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZhbGxiYWNrSGFzaFtrZXldID0gdmFsdWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29sdW1uTmFtZSA9IHJlc29sdmVDb2x1bW5OYW1lKG1vZGVsQ2xhc3MsIGtleSlcblxuICAgICAgaWYgKGNvbHVtbk5hbWUpIHtcbiAgICAgICAgcmVzb2x2ZWRIYXNoW2tleV0gPSB2YWx1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmFsbGJhY2tIYXNoW2tleV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7cmVzb2x2ZWRIYXNoLCBmYWxsYmFja0hhc2h9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBhcmdzLmhhc2ggLSBXaGVyZSBoYXNoLlxuICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3MubW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIGFueT59IC0gSm9pbiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkSm9pbk9iamVjdEZyb21XaGVyZUhhc2goe2hhc2gsIG1vZGVsQ2xhc3N9KSB7XG4gIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgYW55Pn0gKi9cbiAgY29uc3Qgam9pbk9iamVjdCA9IHt9XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gaGFzaCkge1xuICAgIGNvbnN0IHZhbHVlID0gaGFzaFtrZXldXG5cbiAgICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSBjb250aW51ZVxuXG4gICAgY29uc3QgcmVsYXRpb25zaGlwID0gZ2V0UmVsYXRpb25zaGlwQnlOYW1lKG1vZGVsQ2xhc3MsIGtleSlcblxuICAgIGlmICghcmVsYXRpb25zaGlwKSBjb250aW51ZVxuXG4gICAgY29uc3QgdGFyZ2V0TW9kZWxDbGFzcyA9IHJlbGF0aW9uc2hpcC5nZXRUYXJnZXRNb2RlbENsYXNzKClcbiAgICBjb25zdCBuZXN0ZWRKb2luT2JqZWN0ID0gYnVpbGRKb2luT2JqZWN0RnJvbVdoZXJlSGFzaCh7aGFzaDogdmFsdWUsIG1vZGVsQ2xhc3M6IHRhcmdldE1vZGVsQ2xhc3N9KVxuXG4gICAgam9pbk9iamVjdFtrZXldID0gT2JqZWN0LmtleXMobmVzdGVkSm9pbk9iamVjdCkubGVuZ3RoID4gMCA/IG5lc3RlZEpvaW5PYmplY3QgOiB0cnVlXG4gIH1cblxuICByZXR1cm4gam9pbk9iamVjdFxufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preloader.d.ts","sourceRoot":"","sources":["../../../../src/database/query/preloader.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"preloader.d.ts","sourceRoot":"","sources":["../../../../src/database/query/preloader.js"],"names":[],"mappings":"AAsEA;IACE;;;;;OAKG;IACH,0DAJG;QAA0D,UAAU,EAA5D,cAAc,oBAAoB,EAAE,OAAO;QACE,MAAM,EAAnD,OAAO,oBAAoB,EAAE,OAAO,EAAE;QACgB,OAAO,EAA7D,OAAO,mBAAmB,EAAE,mBAAmB;KACzD,EAOA;IAHC,wDAA4B;IAC5B,+CAAoB;IACpB,yDAAsB;IAGxB,qBAwDC;CACF"}
|
|
@@ -3,6 +3,57 @@ import BelongsToPreloader from "./preloader/belongs-to.js";
|
|
|
3
3
|
import HasManyPreloader from "./preloader/has-many.js";
|
|
4
4
|
import HasOnePreloader from "./preloader/has-one.js";
|
|
5
5
|
import restArgsError from "../../utils/rest-args-error.js";
|
|
6
|
+
/**
|
|
7
|
+
* @param {import("../query/index.js").NestedPreloadRecord | string | string[] | boolean} preload - Preload data in shorthand or nested form.
|
|
8
|
+
* @returns {import("../query/index.js").NestedPreloadRecord | null} - Normalized nested preload record.
|
|
9
|
+
*/
|
|
10
|
+
function normalizeNestedPreload(preload) {
|
|
11
|
+
if (!preload || typeof preload == "boolean")
|
|
12
|
+
return null;
|
|
13
|
+
if (typeof preload == "string") {
|
|
14
|
+
return { [preload]: true };
|
|
15
|
+
}
|
|
16
|
+
if (Array.isArray(preload)) {
|
|
17
|
+
/** @type {import("../query/index.js").NestedPreloadRecord} */
|
|
18
|
+
const result = {};
|
|
19
|
+
for (const entry of preload) {
|
|
20
|
+
if (typeof entry == "string") {
|
|
21
|
+
result[entry] = true;
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
if (entry && typeof entry == "object") {
|
|
25
|
+
const normalizedEntry = normalizeNestedPreload(entry);
|
|
26
|
+
if (normalizedEntry) {
|
|
27
|
+
for (const [key, value] of Object.entries(normalizedEntry)) {
|
|
28
|
+
result[key] = value;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
throw new Error(`Invalid preload entry type: ${typeof entry}`);
|
|
34
|
+
}
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
if (preload && typeof preload == "object") {
|
|
38
|
+
/** @type {import("../query/index.js").NestedPreloadRecord} */
|
|
39
|
+
const result = {};
|
|
40
|
+
for (const [key, value] of Object.entries(preload)) {
|
|
41
|
+
if (value === true || value === false) {
|
|
42
|
+
result[key] = value;
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
const normalizedValue = normalizeNestedPreload(value);
|
|
46
|
+
if (normalizedValue) {
|
|
47
|
+
result[key] = normalizedValue;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
throw new Error(`Invalid preload value for ${key}: ${typeof value}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
throw new Error(`Invalid preload type: ${typeof preload}`);
|
|
56
|
+
}
|
|
6
57
|
export default class VelociousDatabaseQueryPreloader {
|
|
7
58
|
/**
|
|
8
59
|
* @param {object} args - Options object.
|
|
@@ -42,7 +93,8 @@ export default class VelociousDatabaseQueryPreloader {
|
|
|
42
93
|
const targetModelsByClassName = Array.isArray(preloadResult) ? undefined : preloadResult?.targetModelsByClassName;
|
|
43
94
|
// Handle any further preloads in the tree
|
|
44
95
|
const newPreload = this.preload[preloadRelationshipName];
|
|
45
|
-
|
|
96
|
+
const normalizedPreload = normalizeNestedPreload(newPreload);
|
|
97
|
+
if (normalizedPreload && targetModels.length > 0) {
|
|
46
98
|
if (relationship.getPolymorphic() && targetModelsByClassName) {
|
|
47
99
|
const configuration = relationship.getConfiguration();
|
|
48
100
|
for (const className in targetModelsByClassName) {
|
|
@@ -50,7 +102,7 @@ export default class VelociousDatabaseQueryPreloader {
|
|
|
50
102
|
if (models.length == 0)
|
|
51
103
|
continue;
|
|
52
104
|
const targetModelClass = configuration.getModelClass(className);
|
|
53
|
-
const preloader = new VelociousDatabaseQueryPreloader({ modelClass: targetModelClass, models, preload:
|
|
105
|
+
const preloader = new VelociousDatabaseQueryPreloader({ modelClass: targetModelClass, models, preload: normalizedPreload });
|
|
54
106
|
await preloader.run();
|
|
55
107
|
}
|
|
56
108
|
}
|
|
@@ -58,11 +110,11 @@ export default class VelociousDatabaseQueryPreloader {
|
|
|
58
110
|
const targetModelClass = relationship.getTargetModelClass();
|
|
59
111
|
if (!targetModelClass)
|
|
60
112
|
throw new Error("No target model class could be gotten from relationship");
|
|
61
|
-
const preloader = new VelociousDatabaseQueryPreloader({ modelClass: targetModelClass, models: targetModels, preload:
|
|
113
|
+
const preloader = new VelociousDatabaseQueryPreloader({ modelClass: targetModelClass, models: targetModels, preload: normalizedPreload });
|
|
62
114
|
await preloader.run();
|
|
63
115
|
}
|
|
64
116
|
}
|
|
65
117
|
}
|
|
66
118
|
}
|
|
67
119
|
}
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlbG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RhdGFiYXNlL3F1ZXJ5L3ByZWxvYWRlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxrQkFBa0IsTUFBTSwyQkFBMkIsQ0FBQTtBQUMxRCxPQUFPLGdCQUFnQixNQUFNLHlCQUF5QixDQUFBO0FBQ3RELE9BQU8sZUFBZSxNQUFNLHdCQUF3QixDQUFBO0FBQ3BELE9BQU8sYUFBYSxNQUFNLGdDQUFnQyxDQUFBO0FBRTFELE1BQU0sQ0FBQyxPQUFPLE9BQU8sK0JBQStCO0lBQ2xEOzs7OztPQUtHO0lBQ0gsWUFBWSxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsUUFBUSxFQUFDO1FBQ3BELGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUV2QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQTtRQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtJQUN4QixDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUc7UUFDUCxLQUFLLE1BQU0sdUJBQXVCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25ELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtZQUNuRixJQUFJLGFBQWEsQ0FBQTtZQUVqQixJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDMUMsTUFBTSxxQkFBcUIsR0FBRyxzRUFBc0UsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFBO2dCQUNuSCxNQUFNLGdCQUFnQixHQUFHLElBQUksa0JBQWtCLENBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUscUJBQXFCLEVB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RWhJLE1BQU0sU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFBO2dCQUN2QixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEJlbG9uZ3NUb1ByZWxvYWRlciBmcm9tIFwiLi9wcmVsb2FkZXIvYmVsb25ncy10by5qc1wiXG5pbXBvcnQgSGFzTWFueVByZWxvYWRlciBmcm9tIFwiLi9wcmVsb2FkZXIvaGFzLW1hbnkuanNcIlxuaW1wb3J0IEhhc09uZVByZWxvYWRlciBmcm9tIFwiLi9wcmVsb2FkZXIvaGFzLW9uZS5qc1wiXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VRdWVyeVByZWxvYWRlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gYXJncy5tb2RlbENsYXNzIC0gTW9kZWwgY2xhc3MuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHRbXX0gYXJncy5tb2RlbHMgLSBNb2RlbCBpbnN0YW5jZXMuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vcXVlcnkvaW5kZXguanNcIikuTmVzdGVkUHJlbG9hZFJlY29yZH0gYXJncy5wcmVsb2FkIC0gUHJlbG9hZC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHttb2RlbENsYXNzLCBtb2RlbHMsIHByZWxvYWQsIC4uLnJlc3RBcmdzfSkge1xuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICB0aGlzLm1vZGVsQ2xhc3MgPSBtb2RlbENsYXNzXG4gICAgdGhpcy5tb2RlbHMgPSBtb2RlbHNcbiAgICB0aGlzLnByZWxvYWQgPSBwcmVsb2FkXG4gIH1cblxuICBhc3luYyBydW4oKSB7XG4gICAgZm9yIChjb25zdCBwcmVsb2FkUmVsYXRpb25zaGlwTmFtZSBpbiB0aGlzLnByZWxvYWQpIHtcbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IHRoaXMubW9kZWxDbGFzcy5nZXRSZWxhdGlvbnNoaXBCeU5hbWUocHJlbG9hZFJlbGF0aW9uc2hpcE5hbWUpXG4gICAgICBsZXQgcHJlbG9hZFJlc3VsdFxuXG4gICAgICBpZiAocmVsYXRpb25zaGlwLmdldFR5cGUoKSA9PSBcImJlbG9uZ3NUb1wiKSB7XG4gICAgICAgIGNvbnN0IGJlbG9uZ3NUb1JlbGF0aW9uc2hpcCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vcmVjb3JkL3JlbGF0aW9uc2hpcHMvYmVsb25ncy10by5qc1wiKS5kZWZhdWx0fSAqLyAocmVsYXRpb25zaGlwKVxuICAgICAgICBjb25zdCBoYXNNYW55UHJlbG9hZGVyID0gbmV3IEJlbG9uZ3NUb1ByZWxvYWRlcih7bW9kZWxzOiB0aGlzLm1vZGVscywgcmVsYXRpb25zaGlwOiBiZWxvbmdzVG9SZWxhdGlvbnNoaXB9KVxuXG4gICAgICAgIHByZWxvYWRSZXN1bHQgPSBhd2FpdCBoYXNNYW55UHJlbG9hZGVyLnJ1bigpXG4gICAgICB9IGVsc2UgaWYgKHJlbGF0aW9uc2hpcC5nZXRUeXBlKCkgPT0gXCJoYXNNYW55XCIpIHtcbiAgICAgICAgY29uc3QgaGFzTWFueVJlbGF0aW9uc2hpcCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vcmVjb3JkL3JlbGF0aW9uc2hpcHMvaGFzLW1hbnkuanNcIikuZGVmYXVsdH0gKi8gKHJlbGF0aW9uc2hpcClcbiAgICAgICAgY29uc3QgaGFzTWFueVByZWxvYWRlciA9IG5ldyBIYXNNYW55UHJlbG9hZGVyKHttb2RlbHM6IHRoaXMubW9kZWxzLCByZWxhdGlvbnNoaXA6IGhhc01hbnlSZWxhdGlvbnNoaXB9KVxuXG4gICAgICAgIHByZWxvYWRSZXN1bHQgPSBhd2FpdCBoYXNNYW55UHJlbG9hZGVyLnJ1bigpXG4gICAgICB9IGVsc2UgaWYgKHJlbGF0aW9uc2hpcC5nZXRUeXBlKCkgPT0gXCJoYXNPbmVcIikge1xuICAgICAgICBjb25zdCBoYXNPbmVSZWxhdGlvbnNoaXAgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3JlY29yZC9yZWxhdGlvbnNoaXBzL2hhcy1vbmUuanNcIikuZGVmYXVsdH0gKi8gKHJlbGF0aW9uc2hpcClcbiAgICAgICAgY29uc3QgaGFzT25lUHJlbG9hZGVyID0gbmV3IEhhc09uZVByZWxvYWRlcih7bW9kZWxzOiB0aGlzLm1vZGVscywgcmVsYXRpb25zaGlwOiBoYXNPbmVSZWxhdGlvbnNoaXB9KVxuXG4gICAgICAgIHByZWxvYWRSZXN1bHQgPSBhd2FpdCBoYXNPbmVQcmVsb2FkZXIucnVuKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biByZWxhdGlvbnNoaXAgdHlwZTogJHtyZWxhdGlvbnNoaXAuZ2V0VHlwZSgpfWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldE1vZGVscyA9IEFycmF5LmlzQXJyYXkocHJlbG9hZFJlc3VsdCkgPyBwcmVsb2FkUmVzdWx0IDogKHByZWxvYWRSZXN1bHQ/LnRhcmdldE1vZGVscyB8fCBbXSlcbiAgICAgIGNvbnN0IHRhcmdldE1vZGVsc0J5Q2xhc3NOYW1lID0gQXJyYXkuaXNBcnJheShwcmVsb2FkUmVzdWx0KSA/IHVuZGVmaW5lZCA6IHByZWxvYWRSZXN1bHQ/LnRhcmdldE1vZGVsc0J5Q2xhc3NOYW1lXG5cbiAgICAgIC8vIEhhbmRsZSBhbnkgZnVydGhlciBwcmVsb2FkcyBpbiB0aGUgdHJlZVxuICAgICAgY29uc3QgbmV3UHJlbG9hZCA9IHRoaXMucHJlbG9hZFtwcmVsb2FkUmVsYXRpb25zaGlwTmFtZV1cblxuICAgICAgaWYgKHR5cGVvZiBuZXdQcmVsb2FkID09IFwib2JqZWN0XCIgJiYgdGFyZ2V0TW9kZWxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKHJlbGF0aW9uc2hpcC5nZXRQb2x5bW9ycGhpYygpICYmIHRhcmdldE1vZGVsc0J5Q2xhc3NOYW1lKSB7XG4gICAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IHJlbGF0aW9uc2hpcC5nZXRDb25maWd1cmF0aW9uKClcblxuICAgICAgICAgIGZvciAoY29uc3QgY2xhc3NOYW1lIGluIHRhcmdldE1vZGVsc0J5Q2xhc3NOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBtb2RlbHMgPSB0YXJnZXRNb2RlbHNCeUNsYXNzTmFtZVtjbGFzc05hbWVdXG5cbiAgICAgICAgICAgIGlmIChtb2RlbHMubGVuZ3RoID09IDApIGNvbnRpbnVlXG5cbiAgICAgICAgICAgIGNvbnN0IHRhcmdldE1vZGVsQ2xhc3MgPSBjb25maWd1cmF0aW9uLmdldE1vZGVsQ2xhc3MoY2xhc3NOYW1lKVxuICAgICAgICAgICAgY29uc3QgcHJlbG9hZGVyID0gbmV3IFZlbG9jaW91c0RhdGFiYXNlUXVlcnlQcmVsb2FkZXIoe21vZGVsQ2xhc3M6IHRhcmdldE1vZGVsQ2xhc3MsIG1vZGVscywgcHJlbG9hZDogbmV3UHJlbG9hZH0pXG5cbiAgICAgICAgICAgIGF3YWl0IHByZWxvYWRlci5ydW4oKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB0YXJnZXRNb2RlbENsYXNzID0gcmVsYXRpb25zaGlwLmdldFRhcmdldE1vZGVsQ2xhc3MoKVxuXG4gICAgICAgICAgaWYgKCF0YXJnZXRNb2RlbENsYXNzKSB0aHJvdyBuZXcgRXJyb3IoXCJObyB0YXJnZXQgbW9kZWwgY2xhc3MgY291bGQgYmUgZ290dGVuIGZyb20gcmVsYXRpb25zaGlwXCIpXG5cbiAgICAgICAgICBjb25zdCBwcmVsb2FkZXIgPSBuZXcgVmVsb2Npb3VzRGF0YWJhc2VRdWVyeVByZWxvYWRlcih7bW9kZWxDbGFzczogdGFyZ2V0TW9kZWxDbGFzcywgbW9kZWxzOiB0YXJnZXRNb2RlbHMsIHByZWxvYWQ6IG5ld1ByZWxvYWR9KVxuXG4gICAgICAgICAgYXdhaXQgcHJlbG9hZGVyLnJ1bigpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlbG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RhdGFiYXNlL3F1ZXJ5L3ByZWxvYWRlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxrQkFBa0IsTUFBTSwyQkFBMkIsQ0FBQTtBQUMxRCxPQUFPLGdCQUFnQixNQUFNLHlCQUF5QixDQUFBO0FBQ3RELE9BQU8sZUFBZSxNQUFNLHdCQUF3QixDQUFBO0FBQ3BELE9BQU8sYUFBYSxNQUFNLGdDQUFnQyxDQUFBO0FBRTFEOzs7R0FHRztBQUNILFNBQVMsc0JBQXNCLENBQUMsT0FBTztJQUNyQyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sT0FBTyxJQUFJLFNBQVM7UUFBRSxPQUFPLElBQUksQ0FBQTtJQUV4RCxJQUFJLE9BQU8sT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQy9CLE9BQU8sRUFBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBQyxDQUFBO0lBQzFCLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUMzQiw4REFBOEQ7UUFDOUQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFBO1FBRWpCLEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxFQUFFLENBQUM7WUFDNUIsSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQTtnQkFDcEIsU0FBUTtZQUNWLENBQUM7WUFFRCxJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDdEMsTUFBTSxlQUFlLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBRXJELElBQUksZUFBZSxFQUFFLENBQUM7b0JBQ3BCLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxN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S0FBSyxNQUFNLFNBQVMsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO3dCQUNoRCxNQUFNLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQTt3QkFFakQsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUM7NEJBQUUsU0FBUTt3QkFFaEMsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFBO3dCQUMvRCxNQUFNLFNBQVMsR0FBRyxJQUFJLCtCQUErQixDQUFDLEVBQUMsVUFBVSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUMsQ0FBQyxDQUFBO3dCQUV6SCxNQUFNLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtvQkFDdkIsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtvQkFFM0QsSUFBSSxDQUFDLGdCQUFnQjt3QkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUE7b0JBRWpHLE1BQU0sU0FBUyxHQUFHLElBQUksK0JBQStCLENBQUMsRUFBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUMsQ0FBQyxDQUFBO29CQUV2SSxNQUFNLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtnQkFDdkIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBCZWxvbmdzVG9QcmVsb2FkZXIgZnJvbSBcIi4vcHJlbG9hZGVyL2JlbG9uZ3MtdG8uanNcIlxuaW1wb3J0IEhhc01hbnlQcmVsb2FkZXIgZnJvbSBcIi4vcHJlbG9hZGVyL2hhcy1tYW55LmpzXCJcbmltcG9ydCBIYXNPbmVQcmVsb2FkZXIgZnJvbSBcIi4vcHJlbG9hZGVyL2hhcy1vbmUuanNcIlxuaW1wb3J0IHJlc3RBcmdzRXJyb3IgZnJvbSBcIi4uLy4uL3V0aWxzL3Jlc3QtYXJncy1lcnJvci5qc1wiXG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9xdWVyeS9pbmRleC5qc1wiKS5OZXN0ZWRQcmVsb2FkUmVjb3JkIHwgc3RyaW5nIHwgc3RyaW5nW10gfCBib29sZWFufSBwcmVsb2FkIC0gUHJlbG9hZCBkYXRhIGluIHNob3J0aGFuZCBvciBuZXN0ZWQgZm9ybS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9xdWVyeS9pbmRleC5qc1wiKS5OZXN0ZWRQcmVsb2FkUmVjb3JkIHwgbnVsbH0gLSBOb3JtYWxpemVkIG5lc3RlZCBwcmVsb2FkIHJlY29yZC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTmVzdGVkUHJlbG9hZChwcmVsb2FkKSB7XG4gIGlmICghcHJlbG9hZCB8fCB0eXBlb2YgcHJlbG9hZCA9PSBcImJvb2xlYW5cIikgcmV0dXJuIG51bGxcblxuICBpZiAodHlwZW9mIHByZWxvYWQgPT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB7W3ByZWxvYWRdOiB0cnVlfVxuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkocHJlbG9hZCkpIHtcbiAgICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3F1ZXJ5L2luZGV4LmpzXCIpLk5lc3RlZFByZWxvYWRSZWNvcmR9ICovXG4gICAgY29uc3QgcmVzdWx0ID0ge31cblxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgcHJlbG9hZCkge1xuICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJlc3VsdFtlbnRyeV0gPSB0cnVlXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChlbnRyeSAmJiB0eXBlb2YgZW50cnkgPT0gXCJvYmplY3RcIikge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkRW50cnkgPSBub3JtYWxpemVOZXN0ZWRQcmVsb2FkKGVudHJ5KVxuXG4gICAgICAgIGlmIChub3JtYWxpemVkRW50cnkpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhub3JtYWxpemVkRW50cnkpKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwcmVsb2FkIGVudHJ5IHR5cGU6ICR7dHlwZW9mIGVudHJ5fWApXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgaWYgKHByZWxvYWQgJiYgdHlwZW9mIHByZWxvYWQgPT0gXCJvYmplY3RcIikge1xuICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vcXVlcnkvaW5kZXguanNcIikuTmVzdGVkUHJlbG9hZFJlY29yZH0gKi9cbiAgICBjb25zdCByZXN1bHQgPSB7fVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocHJlbG9hZCkpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemVOZXN0ZWRQcmVsb2FkKHZhbHVlKVxuXG4gICAgICBpZiAobm9ybWFsaXplZFZhbHVlKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gbm9ybWFsaXplZFZhbHVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcHJlbG9hZCB2YWx1ZSBmb3IgJHtrZXl9OiAke3R5cGVvZiB2YWx1ZX1gKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwcmVsb2FkIHR5cGU6ICR7dHlwZW9mIHByZWxvYWR9YClcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VRdWVyeVByZWxvYWRlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gYXJncy5tb2RlbENsYXNzIC0gTW9kZWwgY2xhc3MuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHRbXX0gYXJncy5tb2RlbHMgLSBNb2RlbCBpbnN0YW5jZXMuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vcXVlcnkvaW5kZXguanNcIikuTmVzdGVkUHJlbG9hZFJlY29yZH0gYXJncy5wcmVsb2FkIC0gUHJlbG9hZC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHttb2RlbENsYXNzLCBtb2RlbHMsIHByZWxvYWQsIC4uLnJlc3RBcmdzfSkge1xuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICB0aGlzLm1vZGVsQ2xhc3MgPSBtb2RlbENsYXNzXG4gICAgdGhpcy5tb2RlbHMgPSBtb2RlbHNcbiAgICB0aGlzLnByZWxvYWQgPSBwcmVsb2FkXG4gIH1cblxuICBhc3luYyBydW4oKSB7XG4gICAgZm9yIChjb25zdCBwcmVsb2FkUmVsYXRpb25zaGlwTmFtZSBpbiB0aGlzLnByZWxvYWQpIHtcbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IHRoaXMubW9kZWxDbGFzcy5nZXRSZWxhdGlvbnNoaXBCeU5hbWUocHJlbG9hZFJlbGF0aW9uc2hpcE5hbWUpXG4gICAgICBsZXQgcHJlbG9hZFJlc3VsdFxuXG4gICAgICBpZiAocmVsYXRpb25zaGlwLmdldFR5cGUoKSA9PSBcImJlbG9uZ3NUb1wiKSB7XG4gICAgICAgIGNvbnN0IGJlbG9uZ3NUb1JlbGF0aW9uc2hpcCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vcmVjb3JkL3JlbGF0aW9uc2hpcHMvYmVsb25ncy10by5qc1wiKS5kZWZhdWx0fSAqLyAocmVsYXRpb25zaGlwKVxuICAgICAgICBjb25zdCBoYXNNYW55UHJlbG9hZGVyID0gbmV3IEJlbG9uZ3NUb1ByZWxvYWRlcih7bW9kZWxzOiB0aGlzLm1vZGVscywgcmVsYXRpb25zaGlwOiBiZWxvbmdzVG9SZWxhdGlvbnNoaXB9KVxuXG4gICAgICAgIHByZWxvYWRSZXN1bHQgPSBhd2FpdCBoYXNNYW55UHJlbG9hZGVyLnJ1bigpXG4gICAgICB9IGVsc2UgaWYgKHJlbGF0aW9uc2hpcC5nZXRUeXBlKCkgPT0gXCJoYXNNYW55XCIpIHtcbiAgICAgICAgY29uc3QgaGFzTWFueVJlbGF0aW9uc2hpcCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vcmVjb3JkL3JlbGF0aW9uc2hpcHMvaGFzLW1hbnkuanNcIikuZGVmYXVsdH0gKi8gKHJlbGF0aW9uc2hpcClcbiAgICAgICAgY29uc3QgaGFzTWFueVByZWxvYWRlciA9IG5ldyBIYXNNYW55UHJlbG9hZGVyKHttb2RlbHM6IHRoaXMubW9kZWxzLCByZWxhdGlvbnNoaXA6IGhhc01hbnlSZWxhdGlvbnNoaXB9KVxuXG4gICAgICAgIHByZWxvYWRSZXN1bHQgPSBhd2FpdCBoYXNNYW55UHJlbG9hZGVyLnJ1bigpXG4gICAgICB9IGVsc2UgaWYgKHJlbGF0aW9uc2hpcC5nZXRUeXBlKCkgPT0gXCJoYXNPbmVcIikge1xuICAgICAgICBjb25zdCBoYXNPbmVSZWxhdGlvbnNoaXAgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3JlY29yZC9yZWxhdGlvbnNoaXBzL2hhcy1vbmUuanNcIikuZGVmYXVsdH0gKi8gKHJlbGF0aW9uc2hpcClcbiAgICAgICAgY29uc3QgaGFzT25lUHJlbG9hZGVyID0gbmV3IEhhc09uZVByZWxvYWRlcih7bW9kZWxzOiB0aGlzLm1vZGVscywgcmVsYXRpb25zaGlwOiBoYXNPbmVSZWxhdGlvbnNoaXB9KVxuXG4gICAgICAgIHByZWxvYWRSZXN1bHQgPSBhd2FpdCBoYXNPbmVQcmVsb2FkZXIucnVuKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biByZWxhdGlvbnNoaXAgdHlwZTogJHtyZWxhdGlvbnNoaXAuZ2V0VHlwZSgpfWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldE1vZGVscyA9IEFycmF5LmlzQXJyYXkocHJlbG9hZFJlc3VsdCkgPyBwcmVsb2FkUmVzdWx0IDogKHByZWxvYWRSZXN1bHQ/LnRhcmdldE1vZGVscyB8fCBbXSlcbiAgICAgIGNvbnN0IHRhcmdldE1vZGVsc0J5Q2xhc3NOYW1lID0gQXJyYXkuaXNBcnJheShwcmVsb2FkUmVzdWx0KSA/IHVuZGVmaW5lZCA6IHByZWxvYWRSZXN1bHQ/LnRhcmdldE1vZGVsc0J5Q2xhc3NOYW1lXG5cbiAgICAgIC8vIEhhbmRsZSBhbnkgZnVydGhlciBwcmVsb2FkcyBpbiB0aGUgdHJlZVxuICAgICAgY29uc3QgbmV3UHJlbG9hZCA9IHRoaXMucHJlbG9hZFtwcmVsb2FkUmVsYXRpb25zaGlwTmFtZV1cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQcmVsb2FkID0gbm9ybWFsaXplTmVzdGVkUHJlbG9hZChuZXdQcmVsb2FkKVxuXG4gICAgICBpZiAobm9ybWFsaXplZFByZWxvYWQgJiYgdGFyZ2V0TW9kZWxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKHJlbGF0aW9uc2hpcC5nZXRQb2x5bW9ycGhpYygpICYmIHRhcmdldE1vZGVsc0J5Q2xhc3NOYW1lKSB7XG4gICAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IHJlbGF0aW9uc2hpcC5nZXRDb25maWd1cmF0aW9uKClcblxuICAgICAgICAgIGZvciAoY29uc3QgY2xhc3NOYW1lIGluIHRhcmdldE1vZGVsc0J5Q2xhc3NOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBtb2RlbHMgPSB0YXJnZXRNb2RlbHNCeUNsYXNzTmFtZVtjbGFzc05hbWVdXG5cbiAgICAgICAgICAgIGlmIChtb2RlbHMubGVuZ3RoID09IDApIGNvbnRpbnVlXG5cbiAgICAgICAgICAgIGNvbnN0IHRhcmdldE1vZGVsQ2xhc3MgPSBjb25maWd1cmF0aW9uLmdldE1vZGVsQ2xhc3MoY2xhc3NOYW1lKVxuICAgICAgICAgICAgY29uc3QgcHJlbG9hZGVyID0gbmV3IFZlbG9jaW91c0RhdGFiYXNlUXVlcnlQcmVsb2FkZXIoe21vZGVsQ2xhc3M6IHRhcmdldE1vZGVsQ2xhc3MsIG1vZGVscywgcHJlbG9hZDogbm9ybWFsaXplZFByZWxvYWR9KVxuXG4gICAgICAgICAgICBhd2FpdCBwcmVsb2FkZXIucnVuKClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0TW9kZWxDbGFzcyA9IHJlbGF0aW9uc2hpcC5nZXRUYXJnZXRNb2RlbENsYXNzKClcblxuICAgICAgICAgIGlmICghdGFyZ2V0TW9kZWxDbGFzcykgdGhyb3cgbmV3IEVycm9yKFwiTm8gdGFyZ2V0IG1vZGVsIGNsYXNzIGNvdWxkIGJlIGdvdHRlbiBmcm9tIHJlbGF0aW9uc2hpcFwiKVxuXG4gICAgICAgICAgY29uc3QgcHJlbG9hZGVyID0gbmV3IFZlbG9jaW91c0RhdGFiYXNlUXVlcnlQcmVsb2FkZXIoe21vZGVsQ2xhc3M6IHRhcmdldE1vZGVsQ2xhc3MsIG1vZGVsczogdGFyZ2V0TW9kZWxzLCBwcmVsb2FkOiBub3JtYWxpemVkUHJlbG9hZH0pXG5cbiAgICAgICAgICBhd2FpdCBwcmVsb2FkZXIucnVuKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -68,6 +68,21 @@ export default class VelociousEnvironmentHandlerBase {
|
|
|
68
68
|
* @returns {Promise<unknown>} - Resolves with the command result.
|
|
69
69
|
*/
|
|
70
70
|
cliCommandsTest(_command: import("../cli/base-command.js").default): Promise<unknown>;
|
|
71
|
+
/**
|
|
72
|
+
* @param {import("../cli/base-command.js").default} _command - Command.
|
|
73
|
+
* @returns {Promise<unknown>} - Resolves with the command result.
|
|
74
|
+
*/
|
|
75
|
+
cliCommandsBackgroundJobsMain(_command: import("../cli/base-command.js").default): Promise<unknown>;
|
|
76
|
+
/**
|
|
77
|
+
* @param {import("../cli/base-command.js").default} _command - Command.
|
|
78
|
+
* @returns {Promise<unknown>} - Resolves with the command result.
|
|
79
|
+
*/
|
|
80
|
+
cliCommandsBackgroundJobsWorker(_command: import("../cli/base-command.js").default): Promise<unknown>;
|
|
81
|
+
/**
|
|
82
|
+
* @param {import("../cli/base-command.js").default} _command - Command.
|
|
83
|
+
* @returns {Promise<unknown>} - Resolves with the command result.
|
|
84
|
+
*/
|
|
85
|
+
cliCommandsBackgroundJobsRunner(_command: import("../cli/base-command.js").default): Promise<unknown>;
|
|
71
86
|
/**
|
|
72
87
|
* @abstract
|
|
73
88
|
* @returns {Promise<CommandFileObjectType[]>} - Resolves with the commands.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/environment-handlers/base.js"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH;;;;;;GAMG;AAEH;IACE;;;;OAIG;IACH,sCAJW,MAAM,YACN,MAAM,OAAO,CAAC,GAAG,CAAC,GAChB,OAAO,CAAC,GAAG,CAAC,CAcxB;IAED;;;OAGG;IACH,kCAHW,MAAM,GACJ,IAAI,CAMhB;IAED;;;OAGG;IACH,wCAHW,OAAO,qBAAqB,EAAE,OAAO,GAAG,SAAS,GAC/C,MAAM,CAYlB;IACD;;;OAGG;IACH,wCAHW,OAAO,wBAAwB,EAAE,OAAO,GACtC,OAAO,CAAC,OAAO,CAAC,CAI5B;IAED;;;OAGG;IACH,yBAHW,OAAO,wBAAwB,EAAE,OAAO,GACtC,OAAO,CAAC,OAAO,CAAC,CAI5B;IAED;;;OAGG;IACH,uCAHW,OAAO,wBAAwB,EAAE,OAAO,GACtC,OAAO,CAAC,OAAO,CAAC,CAI5B;IAED;;;OAGG;IACH,sCAHW,OAAO,wBAAwB,EAAE,OAAO,GACtC,OAAO,CAAC,OAAO,CAAC,CAI5B;IAED;;;OAGG;IACH,mCAHW,OAAO,wBAAwB,EAAE,OAAO,GACtC,OAAO,CAAC,OAAO,CAAC,CAI5B;IAED;;;;OAIG;IACH,4BAHW,OAAO,wBAAwB,EAAE,OAAO,GACtC,OAAO,CAAC,OAAO,CAAC,CAI5B;IAED;;;OAGG;IACH,4BAHW,OAAO,wBAAwB,EAAE,OAAO,GACtC,OAAO,CAAC,OAAO,CAAC,CAI5B;IAED;;;OAGG;IACH,0BAHW,OAAO,wBAAwB,EAAE,OAAO,GACtC,OAAO,CAAC,OAAO,CAAC,CAI5B;IAED;;;OAGG;IACH,gBAFa,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAE2B;IAExE;;;OAGG;IACH,kBAFa,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAE4B;IAE5E;;;;OAIG;IACH,wBAJW,OAAO,wBAAwB,EAAE,OAAO,gBACxC,cAAc,wBAAwB,EAAE,OAAO,GAC7C,OAAO,CAAC,OAAO,CAAC,CAS5B;IAED;;;OAGG;IACH,oBAFa,OAAO,CAAC,MAAM,CAAC,CAE8C;IAE1E;;;OAGG;IACH,2BAFa,OAAO,CAAC,OAAO,oBAAoB,EAAE,OAAO,CAAC,CAEoC;IAE9F;;;;OAIG;IACH,4BAHW,MAAM,EAAE,GACN,OAAO,CAAC,IAAI,CAAC,CAE0D;IAEpF;;;OAGG;IACH,2BAFa,OAAO,CAAC,IAAI,CAAC,CAEgE;IAE1F;;;;OAIG;IACH,sBAHG;QAA4E,GAAG,EAAvE,MAAM,CAAC,MAAM,EAAE,OAAO,6BAA6B,EAAE,OAAO,CAAC;KACrE,GAAU,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;;;OAKG;IACH,iCAHG;QAAuB,YAAY,EAA3B,MAAM,EAAE;KAChB,GAAU,OAAO,CAAC,cAAe,wBAAwB,EAAE,OAAO,CAAC,CAEsB;IAE5F;;;OAGG;IACH,iBAHW,MAAM,GACJ,IAAI,CAEuB;IAArB,UAAmB;IAEtC;;;OAGG;IACH,mCAHW,OAAO,qBAAqB,EAAE,OAAO,GACnC,IAAI,CAE2D;IAAvC,qDAAqC;IAE1E;;OAEG;IACH,oBAFa,OAAO,qBAAqB,EAAE,OAAO,CAMjD;IAED;;;OAGG;IACH,+BAHW,MAAM,EAAE,GACN,IAAI,CAEmD;IAAnC,sBAAiC;IAElE;;;;OAIG;IACH,8BAHG;QAAqD,aAAa,EAA1D,OAAO,qBAAqB,EAAE,OAAO;KAC7C,GAAU,MAAM,GAAG,SAAS,CAI9B;IAED;;;;;;OAMG;IACH,sBALG;QAAqD,aAAa,EAA1D,OAAO,qBAAqB,EAAE,OAAO;QACX,SAAS,EAAnC,MAAM,GAAG,SAAS;QACJ,WAAW,EAAzB,MAAM;KACd,GAAU,MAAM,GAAG,SAAS,CAI9B;IAED;;;;;OAKG;IACH,sBAJG;QAAsB,QAAQ,EAAtB,MAAM;QACQ,OAAO,EAArB,MAAM;KACd,GAAU,OAAO,CAAC,IAAI,CAAC,CAIzB;CACF;;;;;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/environment-handlers/base.js"],"names":[],"mappings":"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"}
|
|
@@ -108,6 +108,27 @@ export default class VelociousEnvironmentHandlerBase {
|
|
|
108
108
|
async cliCommandsTest(_command) {
|
|
109
109
|
throw new Error("cliCommandsTest not implemented");
|
|
110
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* @param {import("../cli/base-command.js").default} _command - Command.
|
|
113
|
+
* @returns {Promise<unknown>} - Resolves with the command result.
|
|
114
|
+
*/
|
|
115
|
+
async cliCommandsBackgroundJobsMain(_command) {
|
|
116
|
+
throw new Error("cliCommandsBackgroundJobsMain not implemented");
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* @param {import("../cli/base-command.js").default} _command - Command.
|
|
120
|
+
* @returns {Promise<unknown>} - Resolves with the command result.
|
|
121
|
+
*/
|
|
122
|
+
async cliCommandsBackgroundJobsWorker(_command) {
|
|
123
|
+
throw new Error("cliCommandsBackgroundJobsWorker not implemented");
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* @param {import("../cli/base-command.js").default} _command - Command.
|
|
127
|
+
* @returns {Promise<unknown>} - Resolves with the command result.
|
|
128
|
+
*/
|
|
129
|
+
async cliCommandsBackgroundJobsRunner(_command) {
|
|
130
|
+
throw new Error("cliCommandsBackgroundJobsRunner not implemented");
|
|
131
|
+
}
|
|
111
132
|
/**
|
|
112
133
|
* @abstract
|
|
113
134
|
* @returns {Promise<CommandFileObjectType[]>} - Resolves with the commands.
|
|
@@ -217,4 +238,4 @@ export default class VelociousEnvironmentHandlerBase {
|
|
|
217
238
|
return;
|
|
218
239
|
}
|
|
219
240
|
}
|
|
220
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbnZpcm9ubWVudC1oYW5kbGVycy9iYXNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7OztHQUlHO0FBRUg7Ozs7OztHQU1HO0FBRUgsTUFBTSxDQUFDLE9BQU8sT0FBTywrQkFBK0I7SUFDbEQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLEVBQUUsUUFBUTtRQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUE7UUFFekUsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFBO1FBRXZFLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLEdBQUcsY0FBYyxDQUFBO1FBRTFELElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxRQUFRLEVBQUUsQ0FBQTtRQUN6QixDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixHQUFHLHFCQUFxQixDQUFBO1FBQ25FLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUJBQWlCLENBQUMsY0FBYztRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUE7UUFFekUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsR0FBRyxjQUFjLENBQUE7SUFDNUQsQ0FBQztJQUVEOzs7T0FHRztJQUNILHdCQUF3QixDQUFDLGFBQWE7UUFDcEMsTUFBTSxtQkFBbUIsR0FBRyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQTtRQUUvRCxJQUFJLENBQUMsbUJBQW1CO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFBO1FBRTFFLElBQUksT0FBTyxtQkFBbUIsQ0FBQyxzQkFBc0IsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNuRSxPQUFPLG1CQUFtQixDQUFDLHNCQUFzQixDQUFBO1FBQ25ELENBQUM7UUFFRCxPQUFPLG1CQUFtQixDQUFDLHdCQUF3QixFQUFFLENBQUE7SUFDdkQsQ0FBQztJQUNEOzs7T0FHRztJQUNILEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxRQUFRO1FBQzFDLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQTtJQUNsRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGVBQWUsQ0FBQyxPQUFPO1FBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQTtJQUNwRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLDRCQUE0QixDQUFDLFFBQVE7UUFDekMsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFBO0lBQ2pFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsMkJBQTJCLENBQUMsUUFBUTtRQUN4QyxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUE7SUFDaEUsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRO1FBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQTtJQUM3RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRO1FBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQTtJQUN0RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFFBQVE7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFBO0lBQ3RELENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsZUFBZSxDQUFDLFFBQVE7UUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFBO0lBQ3BELENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsWUFBWSxLQUFLLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFFeEU7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGNBQWMsS0FBSyxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBRTVFOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLElBQUksWUFBWSxDQUFDO1lBQ2xDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtZQUNsQixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7U0FDakIsQ0FBQyxDQUFBO1FBRUYsT0FBTyxNQUFNLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUNuQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZ0JBQWdCLEtBQUssTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUUxRTs7O09BR0c7SUFDSCxLQUFLLENBQUMsdUJBQXVCLEtBQUssTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUU5Rjs7OztPQUlHO0lBQ0gsZUFBZSxDQUFDLFVBQVUsSUFBSSxNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUMscUNBQXFDO0lBRTFIOzs7T0FHRztJQUNILHVCQUF1QixLQUFLLE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFFMUY7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSTtRQUN4QixPQUFNO0lBQ1IsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFDLFlBQVksRUFBQyxJQUFJLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQyxxQ0FBcUM7SUFFbEk7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQSxDQUFDLENBQUM7SUFFeEM7OztPQUdHO0lBQ0gsZ0JBQWdCLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQSxDQUFDLENBQUM7SUFFNUU7O09BRUc7SUFDSCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUE7UUFFekUsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFBO0lBQzNCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsY0FBYyxDQUFBLENBQUMsQ0FBQztJQUVwRTs7OztPQUlHO0lBQ0gsc0JBQXNCLENBQUMsS0FBSztRQUMxQixPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsY0FBYyxDQUFDLEtBQUs7UUFDbEIsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLO1FBQ3hCLE9BQU07SUFDUixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDb21tYW5kRmlsZU9iamVjdFR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIC0gQ29tbWFuZCBuYW1lLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGZpbGUgLSBDb21tYW5kIGZpbGUgcGF0aC5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IE1pZ3JhdGlvbk9iamVjdFR5cGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkYXRlIC0gTWlncmF0aW9uIHRpbWVzdGFtcCBwYXJzZWQgZnJvbSBmaWxlbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZnVsbFBhdGhdIC0gQWJzb2x1dGUgcGF0aCB0byB0aGUgbWlncmF0aW9uIGZpbGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWlncmF0aW9uQ2xhc3NOYW1lIC0gRXhwb3J0ZWQgbWlncmF0aW9uIGNsYXNzIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZmlsZSAtIE1pZ3JhdGlvbiBmaWxlbmFtZS5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNFbnZpcm9ubWVudEhhbmRsZXJCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBfb2Zmc2V0TWludXRlcyAtIE9mZnNldCBpbiBtaW51dGVzIChEYXRlI2dldFRpbWV6b25lT2Zmc2V0KS5cbiAgICogQHBhcmFtIHsoKSA9PiBQcm9taXNlPGFueT59IGNhbGxiYWNrIC0gQ2FsbGJhY2sgdG8gcnVuLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fSAtIFJlc3VsdCBvZiB0aGUgY2FsbGJhY2suXG4gICAqL1xuICBhc3luYyBydW5XaXRoVGltZXpvbmVPZmZzZXQoX29mZnNldE1pbnV0ZXMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRpb24pIHRocm93IG5ldyBFcnJvcihcIkNvbmZpZ3VyYXRpb24gaGFzbid0IGJlZW4gc2V0XCIpXG5cbiAgICBjb25zdCBwcmV2aW91c09mZnNldE1pbnV0ZXMgPSB0aGlzLmNvbmZpZ3VyYXRpb24uX3RpbWV6b25lT2Zmc2V0TWludXRlc1xuXG4gICAgdGhpcy5jb25maWd1cmF0aW9uLl90aW1lem9uZU9mZnNldE1pbnV0ZXMgPSBfb2Zmc2V0TWludXRlc1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBjYWxsYmFjaygpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5fdGltZXpvbmVPZmZzZXRNaW51dGVzID0gcHJldmlvdXNPZmZzZXRNaW51dGVzXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBfb2Zmc2V0TWludXRlcyAtIE9mZnNldCBpbiBtaW51dGVzIChEYXRlI2dldFRpbWV6b25lT2Zmc2V0KS5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc2V0VGltZXpvbmVPZmZzZXQoX29mZnNldE1pbnV0ZXMpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlndXJhdGlvbikgdGhyb3cgbmV3IEVycm9yKFwiQ29uZmlndXJhdGlvbiBoYXNuJ3QgYmVlbiBzZXRcIilcblxuICAgIHRoaXMuY29uZmlndXJhdGlvbi5fdGltZXpvbmVPZmZzZXRNaW51dGVzID0gX29mZnNldE1pbnV0ZXNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZH0gY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gT2Zmc2V0IGluIG1pbnV0ZXMuXG4gICAqL1xuICBnZXRUaW1lem9uZU9mZnNldE1pbnV0ZXMoY29uZmlndXJhdGlvbikge1xuICAgIGNvbnN0IGFjdGl2ZUNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uIHx8IHRoaXMuY29uZmlndXJhdGlvblxuXG4gICAgaWYgKCFhY3RpdmVDb25maWd1cmF0aW9uKSB0aHJvdyBuZXcgRXJyb3IoXCJDb25maWd1cmF0aW9uIGhhc24ndCBiZWVuIHNldFwiKVxuXG4gICAgaWYgKHR5cGVvZiBhY3RpdmVDb25maWd1cmF0aW9uLl90aW1lem9uZU9mZnNldE1pbnV0ZXMgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiBhY3RpdmVDb25maWd1cmF0aW9uLl90aW1lem9uZU9mZnNldE1pbnV0ZXNcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0aXZlQ29uZmlndXJhdGlvbi5nZXRUaW1lem9uZU9mZnNldE1pbnV0ZXMoKVxuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gX2NvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNsaUNvbW1hbmRzR2VuZXJhdGVCYXNlTW9kZWxzKF9jb21tYW5kKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJjbGlDb21tYW5kc0dlbmVyYXRlQmFzZU1vZGVscyBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gY29tbWFuZCAtIENvbW1hbmQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fSAtIFJlc29sdmVzIHdpdGggdGhlIGNvbW1hbmQgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgY2xpQ29tbWFuZHNJbml0KGNvbW1hbmQpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcImNsaUNvbW1hbmRzSW5pdCBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gX2NvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNsaUNvbW1hbmRzTWlncmF0aW9uR2VuZXJhdGUoX2NvbW1hbmQpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcImNsaUNvbW1hbmRzTWlncmF0aW9uR2VuZXJhdGUgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jbGkvYmFzZS1jb21tYW5kLmpzXCIpLmRlZmF1bHR9IF9jb21tYW5kIC0gQ29tbWFuZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgY29tbWFuZCByZXN1bHQuXG4gICAqL1xuICBhc3luYyBjbGlDb21tYW5kc01pZ3JhdGlvbkRlc3Ryb3koX2NvbW1hbmQpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcImNsaUNvbW1hbmRzTWlncmF0aW9uRGVzdHJveSBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gX2NvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNsaUNvbW1hbmRzR2VuZXJhdGVNb2RlbChfY29tbWFuZCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpQ29tbWFuZHNHZW5lcmF0ZU1vZGVsIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gX2NvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNsaUNvbW1hbmRzUm91dGVzKF9jb21tYW5kKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJjbGlDb21tYW5kc1JvdXRlcyBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gX2NvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNsaUNvbW1hbmRzU2VydmVyKF9jb21tYW5kKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJjbGlDb21tYW5kc1NlcnZlciBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gX2NvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNsaUNvbW1hbmRzVGVzdChfY29tbWFuZCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpQ29tbWFuZHNUZXN0IG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDb21tYW5kRmlsZU9iamVjdFR5cGVbXT59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgY29tbWFuZHMuXG4gICAqL1xuICBhc3luYyBmaW5kQ29tbWFuZHMoKSB7IHRocm93IG5ldyBFcnJvcihcImZpbmRDb21tYW5kcyBub3QgaW1wbGVtZW50ZWRcIikgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHJldHVybnMge1Byb21pc2U8QXJyYXk8TWlncmF0aW9uT2JqZWN0VHlwZT4+fSAtIFJlc29sdmVzIHdpdGggdGhlIG1pZ3JhdGlvbnMuXG4gICAqL1xuICBhc3luYyBmaW5kTWlncmF0aW9ucygpIHsgdGhyb3cgbmV3IEVycm9yKFwiZmluZE1pZ3JhdGlvbnMgbm90IGltcGxlbW5ldGVkXCIpIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jbGkvYmFzZS1jb21tYW5kLmpzXCIpLmRlZmF1bHR9IGNvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi9jbGkvYmFzZS1jb21tYW5kLmpzXCIpLmRlZmF1bHR9IENvbW1hbmRDbGFzcyAtIENvbW1hbmQgY2xhc3MuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fSAtIFJlc29sdmVzIHdpdGggdGhlIGNvbW1hbmQgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgZm9yd2FyZENvbW1hbmQoY29tbWFuZCwgQ29tbWFuZENsYXNzKSB7XG4gICAgY29uc3QgbmV3Q29tbWFuZCA9IG5ldyBDb21tYW5kQ2xhc3Moe1xuICAgICAgYXJnczogY29tbWFuZC5hcmdzLFxuICAgICAgY2xpOiBjb21tYW5kLmNsaVxuICAgIH0pXG5cbiAgICByZXR1cm4gYXdhaXQgbmV3Q29tbWFuZC5leGVjdXRlKClcbiAgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSB2ZWxvY2lvdXMgcGF0aC5cbiAgICovXG4gIGdldFZlbG9jaW91c1BhdGgoKSB7IHRocm93IG5ldyBFcnJvcihcImdldFZlbG9jaW91c1BhdGggbm90IGltcGxlbWVudGVkXCIpIH1cblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4uL3JvdXRlcy9pbmRleC5qc1wiKS5kZWZhdWx0Pn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBpbXBvcnQgYXBwbGljYXRpb24gcm91dGVzLlxuICAgKi9cbiAgYXN5bmMgaW1wb3J0QXBwbGljYXRpb25Sb3V0ZXMoKSB7IHRocm93IG5ldyBFcnJvcihcImltcG9ydEFwcGxpY2F0aW9uUm91dGVzIG5vdCBpbXBsZW1lbnRlZFwiKSB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBfdGVzdEZpbGVzIC0gVGVzdCBmaWxlcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGltcG9ydFRlc3RGaWxlcyhfdGVzdEZpbGVzKSB7IHRocm93IG5ldyBFcnJvcihcIidpbXBvcnRUZXN0RmlsZXMnIG5vdCBpbXBsZW1lbnRlZFwiKSB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBpbXBvcnRUZXN0aW5nQ29uZmlnUGF0aCgpIHsgdGhyb3cgbmV3IEVycm9yKGAnaW1wb3J0VGVzdGluZ0NvbmZpZ1BhdGgnIG5vdCBpbXBsZW1lbnRlZGApIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdD59IGFyZ3MuZGJzIC0gRGJzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgYWZ0ZXJNaWdyYXRpb25zKGFyZ3MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHJldHVyblxuICB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBhcmdzLmNvbW1hbmRQYXJ0cyAtIENvbW1hbmQgcGFydHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHR5cGVvZiBpbXBvcnQgKFwiLi4vY2xpL2Jhc2UtY29tbWFuZC5qc1wiKS5kZWZhdWx0Pn0gLSBSZXNvbHZlcyB3aXRoIHRoZSByZXF1aXJlIGNvbW1hbmQuXG4gICAqL1xuICBhc3luYyByZXF1aXJlQ29tbWFuZCh7Y29tbWFuZFBhcnRzfSkgeyB0aHJvdyBuZXcgRXJyb3IoXCIncmVxdWlyZUNvbW1hbmQnIG5vdCBpbXBsZW1lbnRlZFwiKSB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld0FyZ3MgLSBOZXcgYXJncy5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc2V0QXJncyhuZXdBcmdzKSB7IHRoaXMuYXJncyA9IG5ld0FyZ3MgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gbmV3Q29uZmlndXJhdGlvbiAtIE5ldyBjb25maWd1cmF0aW9uLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZXRDb25maWd1cmF0aW9uKG5ld0NvbmZpZ3VyYXRpb24pIHsgdGhpcy5jb25maWd1cmF0aW9uID0gbmV3Q29uZmlndXJhdGlvbiB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IC0gVGhlIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBnZXRDb25maWd1cmF0aW9uKCkge1xuICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uKSB0aHJvdyBuZXcgRXJyb3IoXCJDb25maWd1cmF0aW9uIGhhc24ndCBiZWVuIHNldFwiKVxuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvblxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IG5ld1Byb2Nlc3NBcmdzIC0gTmV3IHByb2Nlc3MgYXJncy5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc2V0UHJvY2Vzc0FyZ3MobmV3UHJvY2Vzc0FyZ3MpIHsgdGhpcy5wcm9jZXNzQXJncyA9IG5ld1Byb2Nlc3NBcmdzIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IF9hcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBfYXJncy5jb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gLSBUaGUgZGVmYXVsdCBsb2cgZGlyZWN0b3J5LlxuICAgKi9cbiAgZ2V0RGVmYXVsdExvZ0RpcmVjdG9yeShfYXJncykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBfYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gX2FyZ3MuY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBfYXJncy5kaXJlY3RvcnkgLSBEaXJlY3RvcnkgcGF0aC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IF9hcmdzLmVudmlyb25tZW50IC0gRW52aXJvbm1lbnQuXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IC0gVGhlIGxvZyBmaWxlIHBhdGguXG4gICAqL1xuICBnZXRMb2dGaWxlUGF0aChfYXJncykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBfYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gX2FyZ3MuZmlsZVBhdGggLSBGaWxlIHBhdGguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBfYXJncy5tZXNzYWdlIC0gTWVzc2FnZSB0ZXh0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgd3JpdGVMb2dUb0ZpbGUoX2FyZ3MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHJldHVyblxuICB9XG59XG4iXX0=
|
|
241
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbnZpcm9ubWVudC1oYW5kbGVycy9iYXNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7OztHQUlHO0FBRUg7Ozs7OztHQU1HO0FBRUgsTUFBTSxDQUFDLE9BQU8sT0FBTywrQkFBK0I7SUFDbEQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLEVBQUUsUUFBUTtRQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUE7UUFFekUsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFBO1FBRXZFLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLEdBQUcsY0FBYyxDQUFBO1FBRTFELElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxRQUFRLEVBQUUsQ0FBQTtRQUN6QixDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixHQUFHLHFCQUFxQixDQUFBO1FBQ25FLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUJBQWlCLENBQUMsY0FBYztRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUE7UUFFekUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsR0FBRyxjQUFjLENBQUE7SUFDNUQsQ0FBQztJQUVEOzs7T0FHRztJQUNILHdCQUF3QixDQUFDLGFBQWE7UUFDcEMsTUFBTSxtQkFBbUIsR0FBRyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQTtRQUUvRCxJQUFJLENBQUMsbUJBQW1CO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFBO1FBRTFFLElBQUksT0FBTyxt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LCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDb21tYW5kRmlsZU9iamVjdFR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIC0gQ29tbWFuZCBuYW1lLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGZpbGUgLSBDb21tYW5kIGZpbGUgcGF0aC5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IE1pZ3JhdGlvbk9iamVjdFR5cGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkYXRlIC0gTWlncmF0aW9uIHRpbWVzdGFtcCBwYXJzZWQgZnJvbSBmaWxlbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZnVsbFBhdGhdIC0gQWJzb2x1dGUgcGF0aCB0byB0aGUgbWlncmF0aW9uIGZpbGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWlncmF0aW9uQ2xhc3NOYW1lIC0gRXhwb3J0ZWQgbWlncmF0aW9uIGNsYXNzIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZmlsZSAtIE1pZ3JhdGlvbiBmaWxlbmFtZS5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNFbnZpcm9ubWVudEhhbmRsZXJCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBfb2Zmc2V0TWludXRlcyAtIE9mZnNldCBpbiBtaW51dGVzIChEYXRlI2dldFRpbWV6b25lT2Zmc2V0KS5cbiAgICogQHBhcmFtIHsoKSA9PiBQcm9taXNlPGFueT59IGNhbGxiYWNrIC0gQ2FsbGJhY2sgdG8gcnVuLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fSAtIFJlc3VsdCBvZiB0aGUgY2FsbGJhY2suXG4gICAqL1xuICBhc3luYyBydW5XaXRoVGltZXpvbmVPZmZzZXQoX29mZnNldE1pbnV0ZXMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRpb24pIHRocm93IG5ldyBFcnJvcihcIkNvbmZpZ3VyYXRpb24gaGFzbid0IGJlZW4gc2V0XCIpXG5cbiAgICBjb25zdCBwcmV2aW91c09mZnNldE1pbnV0ZXMgPSB0aGlzLmNvbmZpZ3VyYXRpb24uX3RpbWV6b25lT2Zmc2V0TWludXRlc1xuXG4gICAgdGhpcy5jb25maWd1cmF0aW9uLl90aW1lem9uZU9mZnNldE1pbnV0ZXMgPSBfb2Zmc2V0TWludXRlc1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBjYWxsYmFjaygpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5fdGltZXpvbmVPZmZzZXRNaW51dGVzID0gcHJldmlvdXNPZmZzZXRNaW51dGVzXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBfb2Zmc2V0TWludXRlcyAtIE9mZnNldCBpbiBtaW51dGVzIChEYXRlI2dldFRpbWV6b25lT2Zmc2V0KS5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc2V0VGltZXpvbmVPZmZzZXQoX29mZnNldE1pbnV0ZXMpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlndXJhdGlvbikgdGhyb3cgbmV3IEVycm9yKFwiQ29uZmlndXJhdGlvbiBoYXNuJ3QgYmVlbiBzZXRcIilcblxuICAgIHRoaXMuY29uZmlndXJhdGlvbi5fdGltZXpvbmVPZmZzZXRNaW51dGVzID0gX29mZnNldE1pbnV0ZXNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZH0gY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gT2Zmc2V0IGluIG1pbnV0ZXMuXG4gICAqL1xuICBnZXRUaW1lem9uZU9mZnNldE1pbnV0ZXMoY29uZmlndXJhdGlvbikge1xuICAgIGNvbnN0IGFjdGl2ZUNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uIHx8IHRoaXMuY29uZmlndXJhdGlvblxuXG4gICAgaWYgKCFhY3RpdmVDb25maWd1cmF0aW9uKSB0aHJvdyBuZXcgRXJyb3IoXCJDb25maWd1cmF0aW9uIGhhc24ndCBiZWVuIHNldFwiKVxuXG4gICAgaWYgKHR5cGVvZiBhY3RpdmVDb25maWd1cmF0aW9uLl90aW1lem9uZU9mZnNldE1pbnV0ZXMgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiBhY3RpdmVDb25maWd1cmF0aW9uLl90aW1lem9uZU9mZnNldE1pbnV0ZXNcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0aXZlQ29uZmlndXJhdGlvbi5nZXRUaW1lem9uZU9mZnNldE1pbnV0ZXMoKVxuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gX2NvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNsaUNvbW1hbmRzR2VuZXJhdGVCYXNlTW9kZWxzKF9jb21tYW5kKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJjbGlDb21tYW5kc0dlbmVyYXRlQmFzZU1vZGVscyBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gY29tbWFuZCAtIENvbW1hbmQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fSAtIFJlc29sdmVzIHdpdGggdGhlIGNvbW1hbmQgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgY2xpQ29tbWFuZHNJbml0KGNvbW1hbmQpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcImNsaUNvbW1hbmRzSW5pdCBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gX2NvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNsaUNvbW1hbmRzTWlncmF0aW9uR2VuZXJhdGUoX2NvbW1hbmQpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcImNsaUNvbW1hbmRzTWlncmF0aW9uR2VuZXJhdGUgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jbGkvYmFzZS1jb21tYW5kLmpzXCIpLmRlZmF1bHR9IF9jb21tYW5kIC0gQ29tbWFuZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgY29tbWFuZCByZXN1bHQuXG4gICAqL1xuICBhc3luYyBjbGlDb21tYW5kc01pZ3JhdGlvbkRlc3Ryb3koX2NvbW1hbmQpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcImNsaUNvbW1hbmRzTWlncmF0aW9uRGVzdHJveSBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gX2NvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNsaUNvbW1hbmRzR2VuZXJhdGVNb2RlbChfY29tbWFuZCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpQ29tbWFuZHNHZW5lcmF0ZU1vZGVsIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gX2NvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNsaUNvbW1hbmRzUm91dGVzKF9jb21tYW5kKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJjbGlDb21tYW5kc1JvdXRlcyBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gX2NvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNsaUNvbW1hbmRzU2VydmVyKF9jb21tYW5kKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJjbGlDb21tYW5kc1NlcnZlciBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gX2NvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNsaUNvbW1hbmRzVGVzdChfY29tbWFuZCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpQ29tbWFuZHNUZXN0IG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY2xpL2Jhc2UtY29tbWFuZC5qc1wiKS5kZWZhdWx0fSBfY29tbWFuZCAtIENvbW1hbmQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fSAtIFJlc29sdmVzIHdpdGggdGhlIGNvbW1hbmQgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgY2xpQ29tbWFuZHNCYWNrZ3JvdW5kSm9ic01haW4oX2NvbW1hbmQpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcImNsaUNvbW1hbmRzQmFja2dyb3VuZEpvYnNNYWluIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY2xpL2Jhc2UtY29tbWFuZC5qc1wiKS5kZWZhdWx0fSBfY29tbWFuZCAtIENvbW1hbmQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fSAtIFJlc29sdmVzIHdpdGggdGhlIGNvbW1hbmQgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgY2xpQ29tbWFuZHNCYWNrZ3JvdW5kSm9ic1dvcmtlcihfY29tbWFuZCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpQ29tbWFuZHNCYWNrZ3JvdW5kSm9ic1dvcmtlciBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gX2NvbW1hbmQgLSBDb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNsaUNvbW1hbmRzQmFja2dyb3VuZEpvYnNSdW5uZXIoX2NvbW1hbmQpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcImNsaUNvbW1hbmRzQmFja2dyb3VuZEpvYnNSdW5uZXIgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENvbW1hbmRGaWxlT2JqZWN0VHlwZVtdPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kcy5cbiAgICovXG4gIGFzeW5jIGZpbmRDb21tYW5kcygpIHsgdGhyb3cgbmV3IEVycm9yKFwiZmluZENvbW1hbmRzIG5vdCBpbXBsZW1lbnRlZFwiKSB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTxNaWdyYXRpb25PYmplY3RUeXBlPj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgbWlncmF0aW9ucy5cbiAgICovXG4gIGFzeW5jIGZpbmRNaWdyYXRpb25zKCkgeyB0aHJvdyBuZXcgRXJyb3IoXCJmaW5kTWlncmF0aW9ucyBub3QgaW1wbGVtbmV0ZWRcIikgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gY29tbWFuZCAtIENvbW1hbmQuXG4gICAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gQ29tbWFuZENsYXNzIC0gQ29tbWFuZCBjbGFzcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgY29tbWFuZCByZXN1bHQuXG4gICAqL1xuICBhc3luYyBmb3J3YXJkQ29tbWFuZChjb21tYW5kLCBDb21tYW5kQ2xhc3MpIHtcbiAgICBjb25zdCBuZXdDb21tYW5kID0gbmV3IENvbW1hbmRDbGFzcyh7XG4gICAgICBhcmdzOiBjb21tYW5kLmFyZ3MsXG4gICAgICBjbGk6IGNvbW1hbmQuY2xpXG4gICAgfSlcblxuICAgIHJldHVybiBhd2FpdCBuZXdDb21tYW5kLmV4ZWN1dGUoKVxuICB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSAtIFJlc29sdmVzIHdpdGggdGhlIHZlbG9jaW91cyBwYXRoLlxuICAgKi9cbiAgZ2V0VmVsb2Npb3VzUGF0aCgpIHsgdGhyb3cgbmV3IEVycm9yKFwiZ2V0VmVsb2Npb3VzUGF0aCBub3QgaW1wbGVtZW50ZWRcIikgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi4vcm91dGVzL2luZGV4LmpzXCIpLmRlZmF1bHQ+fSAtIFJlc29sdmVzIHdpdGggdGhlIGltcG9ydCBhcHBsaWNhdGlvbiByb3V0ZXMuXG4gICAqL1xuICBhc3luYyBpbXBvcnRBcHBsaWNhdGlvblJvdXRlcygpIHsgdGhyb3cgbmV3IEVycm9yKFwiaW1wb3J0QXBwbGljYXRpb25Sb3V0ZXMgbm90IGltcGxlbWVudGVkXCIpIH1cblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7c3RyaW5nW119IF90ZXN0RmlsZXMgLSBUZXN0IGZpbGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgaW1wb3J0VGVzdEZpbGVzKF90ZXN0RmlsZXMpIHsgdGhyb3cgbmV3IEVycm9yKFwiJ2ltcG9ydFRlc3RGaWxlcycgbm90IGltcGxlbWVudGVkXCIpIH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGltcG9ydFRlc3RpbmdDb25maWdQYXRoKCkgeyB0aHJvdyBuZXcgRXJyb3IoYCdpbXBvcnRUZXN0aW5nQ29uZmlnUGF0aCcgbm90IGltcGxlbWVudGVkYCkgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0Pn0gYXJncy5kYnMgLSBEYnMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBhZnRlck1pZ3JhdGlvbnMoYXJncykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgcmV0dXJuXG4gIH1cblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGFyZ3MuY29tbWFuZFBhcnRzIC0gQ29tbWFuZCBwYXJ0cy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dHlwZW9mIGltcG9ydCAoXCIuLi9jbGkvYmFzZS1jb21tYW5kLmpzXCIpLmRlZmF1bHQ+fSAtIFJlc29sdmVzIHdpdGggdGhlIHJlcXVpcmUgY29tbWFuZC5cbiAgICovXG4gIGFzeW5jIHJlcXVpcmVDb21tYW5kKHtjb21tYW5kUGFydHN9KSB7IHRocm93IG5ldyBFcnJvcihcIidyZXF1aXJlQ29tbWFuZCcgbm90IGltcGxlbWVudGVkXCIpIH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3QXJncyAtIE5ldyBhcmdzLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZXRBcmdzKG5ld0FyZ3MpIHsgdGhpcy5hcmdzID0gbmV3QXJncyB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBuZXdDb25maWd1cmF0aW9uIC0gTmV3IGNvbmZpZ3VyYXRpb24uXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNldENvbmZpZ3VyYXRpb24obmV3Q29uZmlndXJhdGlvbikgeyB0aGlzLmNvbmZpZ3VyYXRpb24gPSBuZXdDb25maWd1cmF0aW9uIH1cblxuICAvKipcbiAgICogQHJldHVybnMge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gLSBUaGUgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIGdldENvbmZpZ3VyYXRpb24oKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRpb24pIHRocm93IG5ldyBFcnJvcihcIkNvbmZpZ3VyYXRpb24gaGFzbid0IGJlZW4gc2V0XCIpXG5cbiAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gbmV3UHJvY2Vzc0FyZ3MgLSBOZXcgcHJvY2VzcyBhcmdzLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZXRQcm9jZXNzQXJncyhuZXdQcm9jZXNzQXJncykgeyB0aGlzLnByb2Nlc3NBcmdzID0gbmV3UHJvY2Vzc0FyZ3MgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gX2FyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IF9hcmdzLmNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSAtIFRoZSBkZWZhdWx0IGxvZyBkaXJlY3RvcnkuXG4gICAqL1xuICBnZXREZWZhdWx0TG9nRGlyZWN0b3J5KF9hcmdzKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IF9hcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBfYXJncy5jb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IF9hcmdzLmRpcmVjdG9yeSAtIERpcmVjdG9yeSBwYXRoLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gX2FyZ3MuZW52aXJvbm1lbnQgLSBFbnZpcm9ubWVudC5cbiAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gLSBUaGUgbG9nIGZpbGUgcGF0aC5cbiAgICovXG4gIGdldExvZ0ZpbGVQYXRoKF9hcmdzKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IF9hcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBfYXJncy5maWxlUGF0aCAtIEZpbGUgcGF0aC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IF9hcmdzLm1lc3NhZ2UgLSBNZXNzYWdlIHRleHQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyB3cml0ZUxvZ1RvRmlsZShfYXJncykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgcmV0dXJuXG4gIH1cbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/environment-handlers/browser.js"],"names":[],"mappings":"AAKA;;;;;;GAMG;AAEH;;;;;;GAMG;AAEH;IAOE;;;OAGG;IACH,gEAFG;QAA2D,gCAAgC,GAAnF,MAAM,OAAO,CAAC,4BAA4B,CAAC;KACrD,EAOA;IAhBD,qDAAqD;IACrD,kCADW,0BAA0B,GAAG,SAAS,CACL;IAE5C,uDAAuD;IACvD,iCADW,4BAA4B,GAAG,SAAS,CACR;IAUzC,wCANe,OAAO,CAAC,4BAA4B,CAAC,CAMoB;IACxE,eAA8B;IAIhC;;OAEG;IACH,4BAFa,OAAO,CAAC,4BAA4B,CAAC,CAUjD;IAMC;;;QAAqD;IAKvD;;OAEG;IACH,+BAFa,0BAA0B,CAOtC;IAED;;;QAmBC;
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/environment-handlers/browser.js"],"names":[],"mappings":"AAKA;;;;;;GAMG;AAEH;;;;;;GAMG;AAEH;IAOE;;;OAGG;IACH,gEAFG;QAA2D,gCAAgC,GAAnF,MAAM,OAAO,CAAC,4BAA4B,CAAC;KACrD,EAOA;IAhBD,qDAAqD;IACrD,kCADW,0BAA0B,GAAG,SAAS,CACL;IAE5C,uDAAuD;IACvD,iCADW,4BAA4B,GAAG,SAAS,CACR;IAUzC,wCANe,OAAO,CAAC,4BAA4B,CAAC,CAMoB;IACxE,eAA8B;IAIhC;;OAEG;IACH,4BAFa,OAAO,CAAC,4BAA4B,CAAC,CAUjD;IAMC;;;QAAqD;IAKvD;;OAEG;IACH,+BAFa,0BAA0B,CAOtC;IAED;;;QAmBC;IA8FD;;;OAGG;IACH,mBAA0B,UAHf,MAGuB,KAFrB,OAAO,CAAC,cAAc,gCAAgC,EAAE,OAAO,CAAC,CAgB5E;IAeD;;;;OAIG;IACH,6BAHG;QAA4E,GAAG,EAAvE,MAAM,CAAC,MAAM,EAAE,OAAO,6BAA6B,EAAE,OAAO,CAAC;KACrE,GAAU,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2BlC;CACF;qDApPY,CAAC,EAAE,EAAE,MAAM,KAAK;IAAC,OAAO,EAAE,cAAc,gCAAgC,EAAE,OAAO,CAAA;CAAC;2CAClF,sCAAsC,GAAG;IACjD,IAAI,EAAE,MAAM,MAAM,EAAE,CAAC;IACrB,EAAE,EAAE,MAAM,CAAA;CACX;mDAIS,CAAC,EAAE,EAAE,MAAM,KAAK;IAAC,OAAO,EAAE,cAAc,wBAAwB,EAAE,OAAO,CAAA;CAAC;yCAC1E,oCAAoC,GAAG;IAC/C,IAAI,EAAE,MAAM,MAAM,EAAE,CAAC;IACrB,EAAE,EAAE,MAAM,CAAA;CACX;iBAlBa,WAAW;uBAGP,cAAc"}
|