@dbx-tools/search 0.9.54 → 0.9.60
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 +2 -2
- package/index.ts +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +2 -2
- package/lib/src/lakebase.js +5 -4
- package/package.json +8 -7
- package/src/lakebase.ts +4 -3
package/README.md
CHANGED
|
@@ -244,7 +244,7 @@ the GIN index, so it only runs after the indexed pass finds nothing.
|
|
|
244
244
|
|
|
245
245
|
The provider returns AppKit's `SearchResponse` and mounts the same
|
|
246
246
|
`/api/ai-search/:alias` query surface. AppKit UI's `useAiSearchQuery` and
|
|
247
|
-
`@dbx-tools/ui
|
|
247
|
+
`@dbx-tools/ui/search` work without a backend-specific client:
|
|
248
248
|
|
|
249
249
|
```ts
|
|
250
250
|
import { createApp, lakebase } from "@databricks/appkit";
|
|
@@ -315,5 +315,5 @@ default.
|
|
|
315
315
|
|
|
316
316
|
Browser-safe schemas live in
|
|
317
317
|
[`@dbx-tools/shared-search`](../../shared/search); the React search box
|
|
318
|
-
lives in [`@dbx-tools/ui
|
|
318
|
+
lives in [`@dbx-tools/ui/search`](../../ui/appkit). Model resolution reuses
|
|
319
319
|
[`@dbx-tools/model`](../model).
|
package/index.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
|
|
5
5
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/search";
|
|
6
|
-
export const PACKAGE_VERSION = "0.9.
|
|
6
|
+
export const PACKAGE_VERSION = "0.9.60";
|
|
7
7
|
export * as client from "./src/client.ts";
|
|
8
8
|
export * as config from "./src/config.ts";
|
|
9
9
|
export * as indexOptions from "./src/index-options.ts";
|
package/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const PACKAGE_IDENTIFIER = "@dbx-tools/search";
|
|
2
|
-
export declare const PACKAGE_VERSION = "0.9.
|
|
2
|
+
export declare const PACKAGE_VERSION = "0.9.60";
|
|
3
3
|
export * as client from "./src/client.ts";
|
|
4
4
|
export * as config from "./src/config.ts";
|
|
5
5
|
export * as indexOptions from "./src/index-options.ts";
|
package/lib/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Regenerated from the exporting modules in ./src.
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/search";
|
|
5
|
-
export const PACKAGE_VERSION = "0.9.
|
|
5
|
+
export const PACKAGE_VERSION = "0.9.60";
|
|
6
6
|
export * as client from "./src/client.js";
|
|
7
7
|
export * as config from "./src/config.js";
|
|
8
8
|
export * as indexOptions from "./src/index-options.js";
|
|
@@ -20,4 +20,4 @@ export { LakebaseSearchBackend } from "./src/lakebase.js";
|
|
|
20
20
|
export { LakebaseAiSearchPlugin, lakebaseAiSearch } from "./src/lakebase-plugin.js";
|
|
21
21
|
export { SearchPlugin, search } from "./src/plugin.js";
|
|
22
22
|
export { SEARCH_TOOL_DESCRIPTION, UNIVERSAL_SEARCH_TOOL_DESCRIPTION, ADD_DOCUMENTS_TOOL_DESCRIPTION, CREATE_INDEX_TOOL_DESCRIPTION, SYNC_INDEX_TOOL_DESCRIPTION, searchToolSchema, universalSearchToolSchema, searchResultSchema, createIndexToolSchema, indexInfoSchema, syncIndexToolSchema } from "./src/schema.js";
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxtQkFBbUIsQ0FBQztBQUN0RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssWUFBWSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLGNBQWMsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5SyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUdwRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQ0FBaUMsRUFBRSw4QkFBOEIsRUFBRSw2QkFBNkIsRUFBRSwyQkFBMkIsRUFBRSxnQkFBZ0IsRUFBRSx5QkFBeUIsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvc2VhcmNoXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjkuNjBcIjtcbmV4cG9ydCAqIGFzIGNsaWVudCBmcm9tIFwiLi9zcmMvY2xpZW50LnRzXCI7XG5leHBvcnQgKiBhcyBjb25maWcgZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0ICogYXMgaW5kZXhPcHRpb25zIGZyb20gXCIuL3NyYy9pbmRleC1vcHRpb25zLnRzXCI7XG5leHBvcnQgKiBhcyBsYWtlYmFzZSBmcm9tIFwiLi9zcmMvbGFrZWJhc2UudHNcIjtcbmV4cG9ydCAqIGFzIGxha2ViYXNlUGx1Z2luIGZyb20gXCIuL3NyYy9sYWtlYmFzZS1wbHVnaW4udHNcIjtcbmV4cG9ydCAqIGFzIG5hdGl2ZSBmcm9tIFwiLi9zcmMvbmF0aXZlLnRzXCI7XG5leHBvcnQgKiBhcyBwbHVnaW4gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0ICogYXMgcXVlcnkgZnJvbSBcIi4vc3JjL3F1ZXJ5LnRzXCI7XG5leHBvcnQgKiBhcyBydW50aW1lIGZyb20gXCIuL3NyYy9ydW50aW1lLnRzXCI7XG5leHBvcnQgKiBhcyBzY2hlbWEgZnJvbSBcIi4vc3JjL3NjaGVtYS50c1wiO1xuZXhwb3J0ICogYXMgdG9vbCBmcm9tIFwiLi9zcmMvdG9vbC50c1wiO1xuZXhwb3J0IHsgU2VhcmNoSW5kZXgsIFNlYXJjaENsaWVudCB9IGZyb20gXCIuL3NyYy9jbGllbnQudHNcIjtcbmV4cG9ydCB0eXBlIHsgU2VhcmNoUmVhZEJhY2tlbmQsIFNlYXJjaE9wdGlvbnMsIFVuaXZlcnNhbFNlYXJjaE9wdGlvbnMsIEluZGV4SW5mbywgQ3JlYXRlSW5kZXhPcHRpb25zLCBFbnN1cmVFbmRwb2ludE9wdGlvbnMsIFByb3Zpc2lvbk9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvY2xpZW50LnRzXCI7XG5leHBvcnQgeyBJTkRFWF9FTlYsIERBVEFCUklDS1NfSU5ERVhfRU5WLCBFTkRQT0lOVF9FTlYsIERFRkFVTFRfTU9ERSwgREVGQVVMVF9QQUdFX1NJWkUsIERFRkFVTFRfVElNRU9VVF9NUywgREVGQVVMVF9CQVNFX1BBVEgsIFNFQVJDSF9DT05GSUdfU0NIRU1BIH0gZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0IHR5cGUgeyBTZWFyY2hJbmRleENvbmZpZywgU2VhcmNoUGx1Z2luQ29uZmlnLCBFbnN1cmVPblNldHVwQ29uZmlnLCBSZXNvbHZlZEluZGV4Q29uZmlnLCBSZXNvbHZlZFNlYXJjaENvbmZpZyB9IGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCB7IExha2ViYXNlU2VhcmNoQmFja2VuZCB9IGZyb20gXCIuL3NyYy9sYWtlYmFzZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBMYWtlYmFzZVNlYXJjaE9wdGlvbnMsIExha2ViYXNlU2VhcmNoUG9vbCwgTGFrZWJhc2VQcm92aXNpb25PcHRpb25zIH0gZnJvbSBcIi4vc3JjL2xha2ViYXNlLnRzXCI7XG5leHBvcnQgeyBMYWtlYmFzZUFpU2VhcmNoUGx1Z2luLCBsYWtlYmFzZUFpU2VhcmNoIH0gZnJvbSBcIi4vc3JjL2xha2ViYXNlLXBsdWdpbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBMYWtlYmFzZUFpU2VhcmNoSW5kZXhDb25maWcsIExha2ViYXNlQWlTZWFyY2hDb25maWcgfSBmcm9tIFwiLi9zcmMvbGFrZWJhc2UtcGx1Z2luLnRzXCI7XG5leHBvcnQgdHlwZSB7IEFpU2VhcmNoUHJvdmlkZXIgfSBmcm9tIFwiLi9zcmMvbmF0aXZlLnRzXCI7XG5leHBvcnQgeyBTZWFyY2hQbHVnaW4sIHNlYXJjaCB9IGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCB0eXBlIHsgU2VhcmNoUnVudGltZU9wdGlvbnMsIFNlYXJjaFJ1bnRpbWUgfSBmcm9tIFwiLi9zcmMvcnVudGltZS50c1wiO1xuZXhwb3J0IHsgU0VBUkNIX1RPT0xfREVTQ1JJUFRJT04sIFVOSVZFUlNBTF9TRUFSQ0hfVE9PTF9ERVNDUklQVElPTiwgQUREX0RPQ1VNRU5UU19UT09MX0RFU0NSSVBUSU9OLCBDUkVBVEVfSU5ERVhfVE9PTF9ERVNDUklQVElPTiwgU1lOQ19JTkRFWF9UT09MX0RFU0NSSVBUSU9OLCBzZWFyY2hUb29sU2NoZW1hLCB1bml2ZXJzYWxTZWFyY2hUb29sU2NoZW1hLCBzZWFyY2hSZXN1bHRTY2hlbWEsIGNyZWF0ZUluZGV4VG9vbFNjaGVtYSwgaW5kZXhJbmZvU2NoZW1hLCBzeW5jSW5kZXhUb29sU2NoZW1hIH0gZnJvbSBcIi4vc3JjL3NjaGVtYS50c1wiO1xuZXhwb3J0IHR5cGUgeyBTZWFyY2hUb29sT3B0aW9ucyB9IGZyb20gXCIuL3NyYy90b29sLnRzXCI7XG4iXX0=
|
package/lib/src/lakebase.js
CHANGED
|
@@ -23,7 +23,8 @@
|
|
|
23
23
|
* @module
|
|
24
24
|
*/
|
|
25
25
|
import { ExecutionError } from "@databricks/appkit";
|
|
26
|
-
import {
|
|
26
|
+
import { postgresConnectionOptions } from "@dbx-tools/postgres";
|
|
27
|
+
import { asyncUtils, log, object, stringUtils } from "@dbx-tools/shared-core";
|
|
27
28
|
import { Pool } from "pg";
|
|
28
29
|
const logger = log.logger("search/lakebase");
|
|
29
30
|
/** The internal columns every search table carries, excluded from a hit's `fields`. */
|
|
@@ -92,7 +93,7 @@ export class LakebaseSearchBackend {
|
|
|
92
93
|
this.pool = this.poolSource.managedPool() ?? undefined;
|
|
93
94
|
if (this.pool)
|
|
94
95
|
return this.pool;
|
|
95
|
-
await
|
|
96
|
+
await asyncUtils.sleep(50);
|
|
96
97
|
}
|
|
97
98
|
throw new ExecutionError("search (lakebase): managed pool did not initialize", {
|
|
98
99
|
context: { operation: "connect" },
|
|
@@ -105,7 +106,7 @@ export class LakebaseSearchBackend {
|
|
|
105
106
|
const pgConfigFactory = this.poolSource;
|
|
106
107
|
this.poolPromise ??= (async () => {
|
|
107
108
|
const config = await pgConfigFactory();
|
|
108
|
-
const pool = this.poolFactory(config);
|
|
109
|
+
const pool = this.poolFactory(postgresConnectionOptions(config));
|
|
109
110
|
this.pool = pool;
|
|
110
111
|
this.ownsPool = true;
|
|
111
112
|
return pool;
|
|
@@ -332,4 +333,4 @@ export class LakebaseSearchBackend {
|
|
|
332
333
|
}
|
|
333
334
|
}
|
|
334
335
|
}
|
|
335
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFrZWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGFrZWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBUWxFLE9BQU8sRUFBRSxJQUFJLEVBQW9DLE1BQU0sSUFBSSxDQUFDO0FBRTVELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUU3Qyx1RkFBdUY7QUFDdkYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7QUFFckY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLEtBQWE7SUFDekMsT0FBTztRQUNMLEdBQUcsV0FBVyxDQUFDLG1CQUFtQixDQUNoQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQ3JELEtBQUssQ0FDTjtLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBd0IsRUFBRSxXQUFzQixHQUFHO0lBQzNFLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDaEUsQ0FBQztBQW9DRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8scUJBQXFCO0lBT2I7SUFDQTtJQUVBO0lB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QUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQy9DLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQVcsRUFBRSxDQUFDO1FBQ3RDLENBQUM7Z0JBQVMsQ0FBQztZQUNULE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExha2ViYXNlIChQb3N0Z3JlcykgZnVsbC10ZXh0IHJ1bnRpbWUgYmVoaW5kIGBsYWtlYmFzZUFpU2VhcmNoYC4gSXQgcHJvdmlzaW9uc1xuICogYSBzaW5nbGUgdGFibGUgcGVyIGluZGV4IGFsaWFzLCBpbmRleGVzIGEgZ2VuZXJhdGVkXG4gKiBgdHN2ZWN0b3JgLCBhbmQgYW5zd2VycyBxdWVyaWVzIHdpdGggYSBwcmVmaXggYHRvX3RzcXVlcnlgICsgYHRzX3JhbmtgLlxuICpcbiAqIFF1ZXJpZXMgYXJlIGNvbXBpbGVkIHJhdGhlciB0aGFuIHBhc3NlZCB0aHJvdWdoIGB3ZWJzZWFyY2hfdG9fdHNxdWVyeWAsXG4gKiBiZWNhdXNlIGEgc2VhcmNoIGJveCBuZWVkcyB0d28gdGhpbmdzIHRoYXQgZnVuY3Rpb24gZG9lcyBub3QgZ2l2ZTpcbiAqIHB1bmN0dWF0aW9uLWluc2Vuc2l0aXZpdHkgKHNvIGBzdG9yZS1pbnRlbGxpZ2VuY2VgIG1hdGNoZXMgdGhlIHNhbWUgcm93cyBhc1xuICogYHN0b3JlIGludGVsbGlnZW5jZWApIGFuZCBwcmVmaXggbWF0Y2hpbmcgKHNvIGBpbnRlbGAgcmVhY2hlc1xuICogYGludGVsbGlnZW5jZWApLiBTZWUge0BsaW5rIHRvU2VhcmNoVGVybXN9IC8ge0BsaW5rIHRvVHNRdWVyeX0uXG4gKlxuICogVGhlIHdob2xlIHBvaW50IGlzIHBhcml0eTogdGhpcyBiYWNrZW5kIHJldHVybnMgdGhlIEVYQUNUIHNhbWVcbiAqIGBAZGJ4LXRvb2xzL3NoYXJlZC1zZWFyY2hgIHNoYXBlcyAoYFNlYXJjaFJlc3VsdGAgLyBgU2VhcmNoSGl0YCAvXG4gKiBgVXBzZXJ0UmVzdWx0YCkgYXMgdGhlIFZlY3RvciBTZWFyY2ggYmFja2VuZCwgc28gdGhlIGNsaWVudCwgdGhlIE1hc3RyYVxuICogdG9vbHMsIHRoZSByb3V0ZXMsIGFuZCB0aGUgUmVhY3Qgc2VhcmNoIGJveCBjYW5ub3QgdGVsbCB3aGljaCBvbmUgYW5zd2VyZWQuXG4gKiBBIGhpdCdzIGBpZGAgaXMgdGhlIHByaW1hcnkga2V5LCBpdHMgYHNjb3JlYCBpcyB0aGUgdGV4dC1yYW5rLCBhbmQgYGZpZWxkc2BcbiAqIGlzIHRoZSBzdG9yZWQgZG9jdW1lbnQgbWludXMgdGhlIGludGVybmFsIGNvbHVtbnMuXG4gKlxuICogU3RhbmRhbG9uZSBjYWxsZXJzIGNhbiBzdXBwbHkgYSBgUG9vbENvbmZpZ2AgZmFjdG9yeSBhbmQgbGV0IHRoaXMgYmFja2VuZCBvd25cbiAqIHRoZSByZXN1bHRpbmcgcG9vbC4gQXBwS2l0IGludGVncmF0aW9ucyBpbnN0ZWFkIHN1cHBseSB0aGUgTGFrZWJhc2UgcGx1Z2luJ3NcbiAqIG1hbmFnZWQgcG9vbCBkaXJlY3RseSwgcHJlc2VydmluZyBpdHMgcm91dGluZyBhbmQgY3JlZGVudGlhbCByZWZyZXNoLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBFeGVjdXRpb25FcnJvciB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGxvZywgb2JqZWN0LCBzdHJpbmdVdGlscyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgdHlwZSB7XG4gIFNlYXJjaERvY3VtZW50LFxuICBTZWFyY2hIaXQsXG4gIFNlYXJjaFJlcXVlc3QsXG4gIFNlYXJjaFJlc3VsdCxcbiAgVXBzZXJ0UmVzdWx0LFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtc2VhcmNoXCI7XG5pbXBvcnQgeyBQb29sLCB0eXBlIFBvb2xDbGllbnQsIHR5cGUgUG9vbENvbmZpZyB9IGZyb20gXCJwZ1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwic2VhcmNoL2xha2ViYXNlXCIpO1xuXG4vKiogVGhlIGludGVybmFsIGNvbHVtbnMgZXZlcnkgc2VhcmNoIHRhYmxlIGNhcnJpZXMsIGV4Y2x1ZGVkIGZyb20gYSBoaXQncyBgZmllbGRzYC4gKi9cbmNvbnN0IFJFU0VSVkVEX0NPTFVNTlMgPSBuZXcgU2V0KFtcImlkXCIsIFwic2VhcmNoX3RleHRcIiwgXCJkb2N1bWVudFwiLCBcInNlYXJjaF92ZWN0b3JcIl0pO1xuXG4vKipcbiAqIFNwbGl0IGEgc2VhcmNoLWJveCBzdHJpbmcgaW50byB0aGUgdGVybXMgYSB0c3F1ZXJ5IGlzIGJ1aWx0IGZyb20sIHVzaW5nIHRoZVxuICogc2hhcmVkIGBAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlYCB0b2tlbml6ZXIgc28gdGhlIHNwbGl0dGluZyBydWxlcyBzdGF5XG4gKiBjb25zaXN0ZW50IHdpdGggdGhlIHJlc3Qgb2YgdGhlIHRvb2xraXQuXG4gKlxuICogU3BsaXR0aW5nIG9uIHB1bmN0dWF0aW9uIGlzIHdoYXQgbWFrZXMgYHN0b3JlLWludGVsbGlnZW5jZWAgYmVoYXZlIGxpa2VcbiAqIGBzdG9yZSBpbnRlbGxpZ2VuY2VgLiBQb3N0Z3JlcyBpbmRleGVzIGEgaHlwaGVuYXRlZCB3b3JkIGFzIHRoZSBjb21wb3VuZFxuICogbGV4ZW1lIFBMVVMgZWFjaCBvZiBpdHMgcGFydHMsIGJ1dCBjb21waWxlcyBhIGh5cGhlbmF0ZWQgUVVFUlkgdG8gdGhlXG4gKiBjb21wb3VuZCBhbG9uZSAtIHNvIGBzdG9yZS1pbnRlbGxpZ2VuY2VgIGRlbWFuZHMgYSBgc3RvcmUtaW50ZWxsaWdgIGxleGVtZVxuICogdGhhdCBhIGRvY3VtZW50IHRpdGxlZCBgcmFjZXRyYWMtc3RvcmUtaW50ZWxsaWdlbmNlYCBkb2VzIG5vdCBoYXZlLCBhbmQgdGhlXG4gKiBzZWFyY2ggc2lsZW50bHkgcmV0dXJucyBub3RoaW5nIHdoaWxlIGBzdG9yZSBpbnRlbGxpZ2VuY2VgIHJldHVybnNcbiAqIGV2ZXJ5dGhpbmcuIFNhbWUgZm9yIGAuYCBhbmQgYF9gIGluIGEgdGFibGUgcmVmZXJlbmNlLlxuICpcbiAqIGBjYW1lbENhc2U6IGZhbHNlYCBpcyBsb2FkLWJlYXJpbmcgcmF0aGVyIHRoYW4gYSBkZWZhdWx0OiB0aGUgY2FtZWxDYXNlXG4gKiBzcGxpdHRlciBhbHNvIGJyZWFrcyBkaWdpdCBydW5zLCB0dXJuaW5nIGBncHQ0YCBpbnRvIGBncHRgICsgYDRgIGFuZCBgczNgXG4gKiBpbnRvIGBzYCArIGAzYC4gUG9zdGdyZXMgaW5kZXhlcyBlYWNoIG9mIHRob3NlIGFzIE9ORSBsZXhlbWUsIHNvIG5vIGxleGVtZVxuICogZXZlciBzdGFydHMgd2l0aCB0aGUgdHJhaWxpbmcgZGlnaXRzIGFuZCB0aGUgcHJlY2lzZSBwYXNzIGNvdWxkIG5vdCBtYXRjaFxuICogdGhlbS4gS2VlcGluZyBwdW5jdHVhdGlvbiBhcyB0aGUgb25seSBib3VuZGFyeSBtaXJyb3JzIGhvdyB0aGUgaW5kZXggd2FzXG4gKiBidWlsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvU2VhcmNoVGVybXMocXVlcnk6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFtcbiAgICAuLi5zdHJpbmdVdGlscy50b2tlbml6ZVdpdGhPcHRpb25zKFxuICAgICAgeyBsb3dlckNhc2U6IHRydWUsIGNhbWVsQ2FzZTogZmFsc2UsIGRpc3RpbmN0OiB0cnVlIH0sXG4gICAgICBxdWVyeSxcbiAgICApLFxuICBdO1xufVxuXG4vKipcbiAqIENvbXBpbGUgdGVybXMgaW50byBhIGB0b190c3F1ZXJ5YCBpbnB1dCB3aGVyZSBldmVyeSB0ZXJtIGlzIGEgUFJFRklYLCBzbyBhXG4gKiBwYXJ0aWFsbHkgdHlwZWQgd29yZCBzdGlsbCBtYXRjaGVzIChgaW50ZWw6KmAgcmVhY2hlcyBgaW50ZWxsaWdlbmNlYCkuXG4gKlxuICogVGVybXMgY2Fycnkgb25seSBsZXR0ZXJzIGFuZCBkaWdpdHMgYnkgY29uc3RydWN0aW9uLCBzbyBub25lIG9mIHRzcXVlcnknc1xuICogb3BlcmF0b3JzIChgJiB8ICEgKCApIDogKmApIGNhbiBzdXJ2aXZlIGZyb20gdXNlciBpbnB1dCBpbnRvIHRoZSBjb21waWxlZFxuICogc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Uc1F1ZXJ5KHRlcm1zOiByZWFkb25seSBzdHJpbmdbXSwgb3BlcmF0b3I6IFwiJlwiIHwgXCJ8XCIgPSBcIiZcIik6IHN0cmluZyB7XG4gIHJldHVybiB0ZXJtcy5tYXAoKHRlcm0pID0+IGAke3Rlcm19OipgKS5qb2luKGAgJHtvcGVyYXRvcn0gYCk7XG59XG5cbi8qKiBPcHRpb25zIGZvciBhIHNpbmdsZS1pbmRleCBMYWtlYmFzZSBzZWFyY2ggKG1pcnJvcnMgdGhlIGNsaWVudCdzIGBTZWFyY2hPcHRpb25zYCkuICovXG5leHBvcnQgaW50ZXJmYWNlIExha2ViYXNlU2VhcmNoT3B0aW9ucyB7XG4gIGxpbWl0PzogbnVtYmVyO1xuICBmaWx0ZXI/OiBTZWFyY2hSZXF1ZXN0W1wiZmlsdGVyXCJdO1xuICBzY29yZVRocmVzaG9sZD86IG51bWJlcjtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbi8qKiBPbmUgcmF3IHNlYXJjaCByb3cgYmVmb3JlIGl0IGlzIHNoYXBlZCBpbnRvIGEge0BsaW5rIFNlYXJjaEhpdH0uICovXG5pbnRlcmZhY2UgU2VhcmNoUm93IHtcbiAgaWQ6IHN0cmluZztcbiAgZG9jdW1lbnQ6IHVua25vd247XG4gIHNjb3JlOiBudW1iZXI7XG59XG5cbi8qKiBUaGUgbWFuYWdlZC1wb29sIHN1cmZhY2UgbmVlZGVkIGJ5IHRoZSBzZWFyY2ggYmFja2VuZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFrZWJhc2VTZWFyY2hQb29sIHtcbiAgY29ubmVjdCgpOiBQcm9taXNlPFBvb2xDbGllbnQ+O1xufVxuXG50eXBlIExha2ViYXNlUG9vbFNvdXJjZSA9XG4gIHwgKCgpID0+IFByb21pc2U8UG9vbENvbmZpZz4gfCBQb29sQ29uZmlnKVxuICB8IExha2ViYXNlU2VhcmNoUG9vbFxuICB8IHsgbWFuYWdlZFBvb2w6ICgpID0+IExha2ViYXNlU2VhcmNoUG9vbCB8IG51bGwgfCB1bmRlZmluZWQgfTtcblxuLyoqIE9wdGlvbnMgZm9yIHByb3Zpc2lvbmluZyBhIExha2ViYXNlLWJhY2tlZCBpbmRleC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFrZWJhc2VQcm92aXNpb25PcHRpb25zIHtcbiAgLyoqIFRleHQgY29sdW1uIGVtYmVkZGVkIGludG8gdGhlIHNlYXJjaCB2ZWN0b3IuIERlZmF1bHRzIHRvIGB0ZXh0YC4gKi9cbiAgdGV4dENvbHVtbj86IHN0cmluZztcbiAgLyoqIERvY3VtZW50cyB0byBzZWVkIHdoZW4gdGhlIHRhYmxlIGlzIGVtcHR5LiAqL1xuICBzZWVkPzogU2VhcmNoRG9jdW1lbnRbXTtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbi8qKlxuICogQSBQb3N0Z3JlcyBmdWxsLXRleHQgYmFja2VuZC4gT25lIGluc3RhbmNlIGlzIHNoYXJlZCBhY3Jvc3MgaW5kZXhlczsgZWFjaFxuICogaW5kZXggbWFwcyB0byBhIHRhYmxlIHdob3NlIG5hbWUgaXMgZGVyaXZlZCBmcm9tIHRoZSBpbmRleCByZWZlcmVuY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBMYWtlYmFzZVNlYXJjaEJhY2tlbmQge1xuICBwcml2YXRlIHBvb2w6IExha2ViYXNlU2VhcmNoUG9vbCB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBwb29sUHJvbWlzZTogUHJvbWlzZTxMYWtlYmFzZVNlYXJjaFBvb2w+IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIG93bnNQb29sID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvdmlzaW9uZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBvb2xTb3VyY2U6IExha2ViYXNlUG9vbFNvdXJjZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNjaGVtYSA9IFwicHVibGljXCIsXG4gICAgLyoqIEhvdyBhIHBvb2wgaXMgYnVpbHQgZnJvbSB0aGUgcmVzb2x2ZWQgY29uZmlnLiBPdmVycmlkYWJsZSBmb3IgdGVzdHMuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBwb29sRmFjdG9yeTogKGNvbmZpZzogUG9vbENvbmZpZykgPT4gUG9vbCA9IChjb25maWcpID0+IG5ldyBQb29sKGNvbmZpZyksXG4gICkge31cblxuICAvKiogTGF6aWx5IGJ1aWxkIChhbmQgY2FjaGUpIHRoZSBwZyBwb29sIGZyb20gdGhlIHJlc29sdmVkIExha2ViYXNlIGNvbmZpZy4gKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRQb29sKCk6IFByb21pc2U8TGFrZWJhc2VTZWFyY2hQb29sPiB7XG4gICAgaWYgKHRoaXMucG9vbCkgcmV0dXJuIHRoaXMucG9vbDtcbiAgICBpZiAoXCJtYW5hZ2VkUG9vbFwiIGluIHRoaXMucG9vbFNvdXJjZSkge1xuICAgICAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPCAyMDA7IGF0dGVtcHQgKz0gMSkge1xuICAgICAgICB0aGlzLnBvb2wgPSB0aGlzLnBvb2xTb3VyY2UubWFuYWdlZFBvb2woKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aGlzLnBvb2wpIHJldHVybiB0aGlzLnBvb2w7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDUwKSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXhlY3V0aW9uRXJyb3IoXCJzZWFyY2ggKGxha2ViYXNlKTogbWFuYWdlZCBwb29sIGRpZCBub3QgaW5pdGlhbGl6ZVwiLCB7XG4gICAgICAgIGNvbnRleHQ6IHsgb3BlcmF0aW9uOiBcImNvbm5lY3RcIiB9LFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdGhpcy5wb29sU291cmNlICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMucG9vbCA9IHRoaXMucG9vbFNvdXJjZTtcbiAgICAgIHJldHVybiB0aGlzLnBvb2w7XG4gICAgfVxuICAgIGNvbnN0IHBnQ29uZmlnRmFjdG9yeSA9IHRoaXMucG9vbFNvdXJjZTtcbiAgICB0aGlzLnBvb2xQcm9taXNlID8/PSAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgcGdDb25maWdGYWN0b3J5KCk7XG4gICAgICBjb25zdCBwb29sID0gdGhpcy5wb29sRmFjdG9yeShjb25maWcpO1xuICAgICAgdGhpcy5wb29sID0gcG9vbDtcbiAgICAgIHRoaXMub3duc1Bvb2wgPSB0cnVlO1xuICAgICAgcmV0dXJuIHBvb2w7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gdGhpcy5wb29sUHJvbWlzZTtcbiAgfVxuXG4gIC8qKiBDbG9zZSB0aGUgcG9vbCBzbyBhIHJlc3RhcnRlZCBhcHAgcmVidWlsZHMgaXQuICovXG4gIGFzeW5jIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBvb2wgPSB0aGlzLnBvb2w7XG4gICAgdGhpcy5wb29sID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucG9vbFByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wcm92aXNpb25lZC5jbGVhcigpO1xuICAgIGlmIChwb29sICYmIHRoaXMub3duc1Bvb2wpIGF3YWl0IChwb29sIGFzIFBvb2wpLmVuZCgpO1xuICAgIHRoaXMub3duc1Bvb2wgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggYSBMYWtlYmFzZS1iYWNrZWQgaW5kZXguIFJldHVybnMgaGl0cyBzb3J0ZWQgbW9zdC1yZWxldmFudC1maXJzdCxcbiAgICogc2hhcGVkIGlkZW50aWNhbGx5IHRvIHRoZSBWZWN0b3IgU2VhcmNoIGJhY2tlbmQuXG4gICAqL1xuICBhc3luYyBzZWFyY2goXG4gICAgaW5kZXg6IHN0cmluZyxcbiAgICBxdWVyeTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IExha2ViYXNlU2VhcmNoT3B0aW9ucyA9IHt9LFxuICApOiBQcm9taXNlPFNlYXJjaFJlc3VsdD4ge1xuICAgIGNvbnN0IHRleHQgPSBzdHJpbmdVdGlscy50cmltVG9FbXB0eShxdWVyeSk7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlRm9yKGluZGV4KTtcbiAgICBjb25zdCBsaW1pdCA9IG9wdGlvbnMubGltaXQgPz8gMTA7XG4gICAgY29uc3QgcG9vbCA9IGF3YWl0IHRoaXMuZ2V0UG9vbCgpO1xuICAgIGNvbnN0IHRlcm1zID0gdG9TZWFyY2hUZXJtcyh0ZXh0KTtcblxuICAgIC8vIEFuIGVtcHR5IChvciBwdW5jdHVhdGlvbi1vbmx5KSBib3ggcmV0dXJucyByb3dzIHJhdGhlciB0aGFuIG5vdGhpbmcsIHNvXG4gICAgLy8gdGhlIFVJIHNob3dzIGNvbnRlbnQgYmVmb3JlIHRoZSB1c2VyIHR5cGVzIC0gYXMgYSBrZXl3b3JkIGluZGV4IHdvdWxkLlxuICAgIGlmICh0ZXJtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZmlsdGVyQ2xhdXNlKG9wdGlvbnMuZmlsdGVyLCAxKTtcbiAgICAgIGNvbnN0IGxpbWl0UG9zaXRpb24gPSBmaWx0ZXIucGFyYW1zLmxlbmd0aCArIDE7XG4gICAgICBjb25zdCB7IHJvd3MgfSA9IGF3YWl0IHRoaXMucXVlcnk8U2VhcmNoUm93PihcbiAgICAgICAgcG9vbCxcbiAgICAgICAgYFNFTEVDVCBpZCwgZG9jdW1lbnQsIDA6OmZsb2F0NCBBUyBzY29yZVxuICAgICAgICAgICBGUk9NICR7dGFibGV9XG4gICAgICAgICAgV0hFUkUgVFJVRSR7ZmlsdGVyLnNxbH1cbiAgICAgICAgICBPUkRFUiBCWSBpZFxuICAgICAgICAgIExJTUlUICQke2xpbWl0UG9zaXRpb259YCxcbiAgICAgICAgWy4uLmZpbHRlci5wYXJhbXMsIGxpbWl0XSxcbiAgICAgICAgb3B0aW9ucy5zaWduYWwsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRoaXMudG9SZXN1bHQodGV4dCwgaW5kZXgsIHJvd3MsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8vIFByZWNpc2UgcGFzczogZXZlcnkgdGVybSBtdXN0IG1hdGNoLCBlYWNoIGFzIGEgcHJlZml4LlxuICAgIGNvbnN0IHN0cmljdEZpbHRlciA9IHRoaXMuZmlsdGVyQ2xhdXNlKG9wdGlvbnMuZmlsdGVyLCAyKTtcbiAgICBjb25zdCBzdHJpY3RMaW1pdFBvc2l0aW9uID0gc3RyaWN0RmlsdGVyLnBhcmFtcy5sZW5ndGggKyAyO1xuICAgIGNvbnN0IHN0cmljdCA9IGF3YWl0IHRoaXMucXVlcnk8U2VhcmNoUm93PihcbiAgICAgIHBvb2wsXG4gICAgICBgU0VMRUNUIGlkLCBkb2N1bWVudCwgdHNfcmFuayhzZWFyY2hfdmVjdG9yLCB0b190c3F1ZXJ5KCdlbmdsaXNoJywgJDEpKSBBUyBzY29yZVxuICAgICAgICAgRlJPTSAke3RhYmxlfVxuICAgICAgICBXSEVSRSBzZWFyY2hfdmVjdG9yIEBAIHRvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAkMSlcbiAgICAgICAgICAke3N0cmljdEZpbHRlci5zcWx9XG4gICAgICAgIE9SREVSIEJZIHNjb3JlIERFU0NcbiAgICAgICAgTElNSVQgJCR7c3RyaWN0TGltaXRQb3NpdGlvbn1gLFxuICAgICAgW3RvVHNRdWVyeSh0ZXJtcyksIC4uLnN0cmljdEZpbHRlci5wYXJhbXMsIGxpbWl0XSxcbiAgICAgIG9wdGlvbnMuc2lnbmFsLFxuICAgICk7XG4gICAgaWYgKHN0cmljdC5yb3dzLmxlbmd0aCA+IDApIHJldHVybiB0aGlzLnRvUmVzdWx0KHRleHQsIGluZGV4LCBzdHJpY3Qucm93cywgb3B0aW9ucyk7XG5cbiAgICAvLyBOb3RoaW5nIG1hdGNoZWQgRVZFUlkgdGVybSwgc28gcmVsYXggcmF0aGVyIHRoYW4gcmV0dXJuIGFuIGVtcHR5IGJveDpcbiAgICAvLyBhbnkgb25lIHRlcm0gaXMgZW5vdWdoLCBhbmQgYW4gYElMSUtFYCBwYXNzIGFkZGl0aW9uYWxseSBjYXRjaGVzIGFcbiAgICAvLyBmcmFnbWVudCB0aGF0IGlzIG5vdCBhIHByZWZpeCAoYHRlbGxpZ2VuY2VgKSBvciBhIHRva2VuIHRoZSB0ZXh0LXNlYXJjaFxuICAgIC8vIHBhcnNlciBzcGxpdCBkaWZmZXJlbnRseSB0aGFuIGV4cGVjdGVkLiBTdWJzdHJpbmcgbWF0Y2hpbmcgY2Fubm90IHVzZVxuICAgIC8vIHRoZSBHSU4gaW5kZXgsIHdoaWNoIGlzIHdoeSBpdCBvbmx5IHJ1bnMgb25jZSB0aGUgaW5kZXhlZCBwYXNzIGZhaWxzLlxuICAgIGNvbnN0IHJlbGF4ZWRGaWx0ZXIgPSB0aGlzLmZpbHRlckNsYXVzZShvcHRpb25zLmZpbHRlciwgMyk7XG4gICAgY29uc3QgcmVsYXhlZExpbWl0UG9zaXRpb24gPSByZWxheGVkRmlsdGVyLnBhcmFtcy5sZW5ndGggKyAzO1xuICAgIGNvbnN0IHJlbGF4ZWQgPSBhd2FpdCB0aGlzLnF1ZXJ5PFNlYXJjaFJvdz4oXG4gICAgICBwb29sLFxuICAgICAgYFNFTEVDVCBpZCwgZG9jdW1lbnQsIHRzX3Jhbmsoc2VhcmNoX3ZlY3RvciwgdG9fdHNxdWVyeSgnZW5nbGlzaCcsICQxKSkgQVMgc2NvcmVcbiAgICAgICAgIEZST00gJHt0YWJsZX1cbiAgICAgICAgV0hFUkUgKHNlYXJjaF92ZWN0b3IgQEAgdG9fdHNxdWVyeSgnZW5nbGlzaCcsICQxKVxuICAgICAgICAgICBPUiBzZWFyY2hfdGV4dCBJTElLRSBBTlkoJDI6OnRleHRbXSkpXG4gICAgICAgICAgJHtyZWxheGVkRmlsdGVyLnNxbH1cbiAgICAgICAgT1JERVIgQlkgc2NvcmUgREVTQ1xuICAgICAgICBMSU1JVCAkJHtyZWxheGVkTGltaXRQb3NpdGlvbn1gLFxuICAgICAgW3RvVHNRdWVyeSh0ZXJtcywgXCJ8XCIpLCB0ZXJtcy5tYXAoKHRlcm0pID0+IGAlJHt0ZXJtfSVgKSwgLi4ucmVsYXhlZEZpbHRlci5wYXJhbXMsIGxpbWl0XSxcbiAgICAgIG9wdGlvbnMuc2lnbmFsLFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMudG9SZXN1bHQodGV4dCwgaW5kZXgsIHJlbGF4ZWQucm93cywgb3B0aW9ucyk7XG4gIH1cblxuICAvKiogU2hhcGUgcmF3IHJvd3MgaW50byB0aGUgYFNlYXJjaFJlc3VsdGAgYm90aCBiYWNrZW5kcyByZXR1cm4uICovXG4gIHByaXZhdGUgdG9SZXN1bHQoXG4gICAgcXVlcnk6IHN0cmluZyxcbiAgICBpbmRleDogc3RyaW5nLFxuICAgIHJvd3M6IFNlYXJjaFJvd1tdLFxuICAgIG9wdGlvbnM6IExha2ViYXNlU2VhcmNoT3B0aW9ucyxcbiAgKTogU2VhcmNoUmVzdWx0IHtcbiAgICBjb25zdCBoaXRzOiBTZWFyY2hIaXRbXSA9IHJvd3NcbiAgICAgIC5tYXAoKHJvdykgPT4gKHtcbiAgICAgICAgaWQ6IFN0cmluZyhyb3cuaWQpLFxuICAgICAgICBzY29yZTogTnVtYmVyKHJvdy5zY29yZSkgfHwgMCxcbiAgICAgICAgZmllbGRzOiB0aGlzLnRvRmllbGRzKHJvdy5kb2N1bWVudCksXG4gICAgICB9KSlcbiAgICAgIC5maWx0ZXIoKGhpdCkgPT4gb3B0aW9ucy5zY29yZVRocmVzaG9sZCA9PT0gdW5kZWZpbmVkIHx8IGhpdC5zY29yZSA+PSBvcHRpb25zLnNjb3JlVGhyZXNob2xkKTtcbiAgICByZXR1cm4geyBxdWVyeSwgaW5kZXgsIGhpdHMsIGNvdW50OiBoaXRzLmxlbmd0aCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZSB0aGUgdGFibGUgKyBmdWxsLXRleHQgaW5kZXggZXhpc3QgYW5kIHNlZWQgZG9jdW1lbnRzIHdoZW4gZW1wdHkuXG4gICAqIElkZW1wb3RlbnQsIHNvIGl0IGlzIHNhZmUgdG8gY2FsbCBvbiBldmVyeSBib290LlxuICAgKi9cbiAgYXN5bmMgcHJvdmlzaW9uKGluZGV4OiBzdHJpbmcsIG9wdGlvbnM6IExha2ViYXNlUHJvdmlzaW9uT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMudGFibGVGb3IoaW5kZXgpO1xuICAgIGNvbnN0IHBvb2wgPSBhd2FpdCB0aGlzLmdldFBvb2woKTtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVRhYmxlKHBvb2wsIHRhYmxlLCBvcHRpb25zLnNpZ25hbCk7XG5cbiAgICBjb25zdCB7IHJvd3MgfSA9IGF3YWl0IHRoaXMucXVlcnk8eyBjb3VudDogc3RyaW5nIH0+KFxuICAgICAgcG9vbCxcbiAgICAgIGBTRUxFQ1QgY291bnQoKik6OnRleHQgQVMgY291bnQgRlJPTSAke3RhYmxlfWAsXG4gICAgICBbXSxcbiAgICAgIG9wdGlvbnMuc2lnbmFsLFxuICAgICk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBOdW1iZXIocm93c1swXT8uY291bnQgPz8gXCIwXCIpO1xuICAgIGNvbnN0IHNlZWQgPSBvcHRpb25zLnNlZWQgPz8gW107XG4gICAgaWYgKGV4aXN0aW5nID09PSAwICYmIHNlZWQubGVuZ3RoID4gMCkge1xuICAgICAgYXdhaXQgdGhpcy51cHNlcnQocG9vbCwgdGFibGUsIHNlZWQsIG9wdGlvbnMudGV4dENvbHVtbiA/PyBcInRleHRcIiwgb3B0aW9ucy5zaWduYWwpO1xuICAgICAgbG9nZ2VyLmluZm8oXCJpbmRleC1zZWVkZWRcIiwgeyBpbmRleCwgdGFibGUsIGNvdW50OiBzZWVkLmxlbmd0aCB9KTtcbiAgICAgIHJldHVybiBzZWVkLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIGV4aXN0aW5nO1xuICB9XG5cbiAgLyoqIEFkZCBvciB1cGRhdGUgZG9jdW1lbnRzIGJ5IHByaW1hcnkga2V5LiAqL1xuICBhc3luYyBhZGREb2N1bWVudHMoXG4gICAgaW5kZXg6IHN0cmluZyxcbiAgICBkb2N1bWVudHM6IFNlYXJjaERvY3VtZW50W10sXG4gICAgdGV4dENvbHVtbiA9IFwidGV4dFwiLFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICApOiBQcm9taXNlPFVwc2VydFJlc3VsdD4ge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZUZvcihpbmRleCk7XG4gICAgY29uc3QgcG9vbCA9IGF3YWl0IHRoaXMuZ2V0UG9vbCgpO1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlVGFibGUocG9vbCwgdGFibGUsIHNpZ25hbCk7XG4gICAgYXdhaXQgdGhpcy51cHNlcnQocG9vbCwgdGFibGUsIGRvY3VtZW50cywgdGV4dENvbHVtbiwgc2lnbmFsKTtcbiAgICByZXR1cm4geyBpbmRleCwgY291bnQ6IGRvY3VtZW50cy5sZW5ndGggfTtcbiAgfVxuXG4gIC8qKiBEZWxldGUgZG9jdW1lbnRzIGJ5IHByaW1hcnkga2V5LiAqL1xuICBhc3luYyBkZWxldGVEb2N1bWVudHMoXG4gICAgaW5kZXg6IHN0cmluZyxcbiAgICBpZHM6IEFycmF5PHN0cmluZyB8IG51bWJlcj4sXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8VXBzZXJ0UmVzdWx0PiB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlRm9yKGluZGV4KTtcbiAgICBjb25zdCBwb29sID0gYXdhaXQgdGhpcy5nZXRQb29sKCk7XG4gICAgYXdhaXQgdGhpcy5xdWVyeShwb29sLCBgREVMRVRFIEZST00gJHt0YWJsZX0gV0hFUkUgaWQgPSBBTlkoJDEpYCwgW2lkcy5tYXAoU3RyaW5nKV0sIHNpZ25hbCk7XG4gICAgcmV0dXJuIHsgaW5kZXgsIGNvdW50OiBpZHMubGVuZ3RoIH07XG4gIH1cblxuICAvKiogQ3JlYXRlIHRoZSB0YWJsZSArIEdJTiBpbmRleCBvbmNlIHBlciB0YWJsZSAobWVtb2l6ZWQgYWNyb3NzIGNhbGxzKS4gKi9cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVUYWJsZShcbiAgICBwb29sOiBMYWtlYmFzZVNlYXJjaFBvb2wsXG4gICAgdGFibGU6IHN0cmluZyxcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMucHJvdmlzaW9uZWQuaGFzKHRhYmxlKSkgcmV0dXJuO1xuICAgIC8vIGBkb2N1bWVudGAgaG9sZHMgdGhlIHdob2xlIHJvdzsgYHNlYXJjaF90ZXh0YCBpcyB0aGUgaW5kZXhlZCB0ZXh0OyB0aGVcbiAgICAvLyBnZW5lcmF0ZWQgYHNlYXJjaF92ZWN0b3JgIGtlZXBzIHRoZSB0c3ZlY3RvciBpbiBsb2Nrc3RlcCB3aXRoIGl0IHNvIGFcbiAgICAvLyB3cml0ZSBuZXZlciBoYXMgdG8gY29tcHV0ZSB0aGUgdmVjdG9yIGJ5IGhhbmQuXG4gICAgYXdhaXQgdGhpcy5xdWVyeShwb29sLCBgQ1JFQVRFIFNDSEVNQSBJRiBOT1QgRVhJU1RTICR7dGhpcy5pZGVudCh0aGlzLnNjaGVtYSl9YCwgW10sIHNpZ25hbCk7XG4gICAgYXdhaXQgdGhpcy5xdWVyeShcbiAgICAgIHBvb2wsXG4gICAgICBgQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgJHt0YWJsZX0gKFxuICAgICAgICAgaWQgdGV4dCBQUklNQVJZIEtFWSxcbiAgICAgICAgIHNlYXJjaF90ZXh0IHRleHQgTk9UIE5VTEwgREVGQVVMVCAnJyxcbiAgICAgICAgIGRvY3VtZW50IGpzb25iIE5PVCBOVUxMIERFRkFVTFQgJ3t9Jzo6anNvbmIsXG4gICAgICAgICBzZWFyY2hfdmVjdG9yIHRzdmVjdG9yIEdFTkVSQVRFRCBBTFdBWVMgQVMgKHRvX3RzdmVjdG9yKCdlbmdsaXNoJywgc2VhcmNoX3RleHQpKSBTVE9SRURcbiAgICAgICApYCxcbiAgICAgIFtdLFxuICAgICAgc2lnbmFsLFxuICAgICk7XG4gICAgYXdhaXQgdGhpcy5xdWVyeShcbiAgICAgIHBvb2wsXG4gICAgICBgQUxURVIgVEFCTEUgJHt0YWJsZX1cbiAgICAgICAgIEFERCBDT0xVTU4gSUYgTk9UIEVYSVNUUyBzZWFyY2hfdmVjdG9yIHRzdmVjdG9yXG4gICAgICAgICBHRU5FUkFURUQgQUxXQVlTIEFTICh0b190c3ZlY3RvcignZW5nbGlzaCcsIHNlYXJjaF90ZXh0KSkgU1RPUkVEYCxcbiAgICAgIFtdLFxuICAgICAgc2lnbmFsLFxuICAgICk7XG4gICAgYXdhaXQgdGhpcy5xdWVyeShcbiAgICAgIHBvb2wsXG4gICAgICBgQ1JFQVRFIElOREVYIElGIE5PVCBFWElTVFMgJHt0aGlzLmlkZW50KGAke3RoaXMuYmFyZU5hbWUodGFibGUpfV9mdHNgKX1cbiAgICAgICAgIE9OICR7dGFibGV9IFVTSU5HIGdpbiAoc2VhcmNoX3ZlY3RvcilgLFxuICAgICAgW10sXG4gICAgICBzaWduYWwsXG4gICAgKTtcbiAgICB0aGlzLnByb3Zpc2lvbmVkLmFkZCh0YWJsZSk7XG4gICAgbG9nZ2VyLmluZm8oXCJpbmRleC1jcmVhdGVkXCIsIHsgdGFibGUgfSk7XG4gIH1cblxuICAvKiogVXBzZXJ0IHJvd3M6IHRoZSB3aG9sZSBkb2N1bWVudCBhcyBqc29uYiArIGEgZmxhdHRlbmVkIHRleHQgYmxvYiB0byBpbmRleC4gKi9cbiAgcHJpdmF0ZSBhc3luYyB1cHNlcnQoXG4gICAgcG9vbDogTGFrZWJhc2VTZWFyY2hQb29sLFxuICAgIHRhYmxlOiBzdHJpbmcsXG4gICAgZG9jdW1lbnRzOiBTZWFyY2hEb2N1bWVudFtdLFxuICAgIHRleHRDb2x1bW46IHN0cmluZyxcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZm9yIChjb25zdCBkb2Mgb2YgZG9jdW1lbnRzKSB7XG4gICAgICBjb25zdCBpZCA9IHN0cmluZ1V0aWxzLnRyaW1Ub051bGwoU3RyaW5nKGRvYy5pZCA/PyBkb2MuSUQgPz8gXCJcIikpID8/IHVuZGVmaW5lZDtcbiAgICAgIGlmIChpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGVjdXRpb25FcnJvcihcInNlYXJjaCAobGFrZWJhc2UpOiBhIGRvY3VtZW50IGlzIG1pc3NpbmcgYW4gYGlkYFwiLCB7XG4gICAgICAgICAgY29udGV4dDogeyBvcGVyYXRpb246IFwiYWRkRG9jdW1lbnRzXCIgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gdGhpcy5zZWFyY2hUZXh0KGRvYywgdGV4dENvbHVtbik7XG4gICAgICBhd2FpdCB0aGlzLnF1ZXJ5KFxuICAgICAgICBwb29sLFxuICAgICAgICBgSU5TRVJUIElOVE8gJHt0YWJsZX0gKGlkLCBzZWFyY2hfdGV4dCwgZG9jdW1lbnQpXG4gICAgICAgICAgIFZBTFVFUyAoJDEsICQyLCAkMzo6anNvbmIpXG4gICAgICAgICBPTiBDT05GTElDVCAoaWQpIERPIFVQREFURVxuICAgICAgICAgICBTRVQgc2VhcmNoX3RleHQgPSBFWENMVURFRC5zZWFyY2hfdGV4dCwgZG9jdW1lbnQgPSBFWENMVURFRC5kb2N1bWVudGAsXG4gICAgICAgIFtpZCwgc2VhcmNoVGV4dCwgSlNPTi5zdHJpbmdpZnkoZG9jKV0sXG4gICAgICAgIHNpZ25hbCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRoZSB0ZXh0IGEgcm93IGlzIGluZGV4ZWQgYnk6IHRoZSB0ZXh0IGNvbHVtbiBmaXJzdCwgdGhlbiBhbnkgb3RoZXIgc3RyaW5nIGZpZWxkLiAqL1xuICBwcml2YXRlIHNlYXJjaFRleHQoZG9jOiBTZWFyY2hEb2N1bWVudCwgdGV4dENvbHVtbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBwcmltYXJ5ID0gc3RyaW5nVXRpbHMudHJpbVRvRW1wdHkoU3RyaW5nKGRvY1t0ZXh0Q29sdW1uXSA/PyBcIlwiKSk7XG4gICAgY29uc3QgcmVzdCA9IE9iamVjdC5lbnRyaWVzKGRvYylcbiAgICAgIC5maWx0ZXIoKFtrZXksIHZhbHVlXSkgPT4ga2V5ICE9PSB0ZXh0Q29sdW1uICYmIGtleSAhPT0gXCJpZFwiICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIilcbiAgICAgIC5tYXAoKFssIHZhbHVlXSkgPT4gdmFsdWUgYXMgc3RyaW5nKTtcbiAgICByZXR1cm4gW3ByaW1hcnksIC4uLnJlc3RdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgLyoqIEEgaGl0J3MgYGZpZWxkc2A6IHRoZSBzdG9yZWQgZG9jdW1lbnQgbWludXMgdGhlIHJlc2VydmVkL2ludGVybmFsIGtleXMuICovXG4gIHByaXZhdGUgdG9GaWVsZHMoZG9jdW1lbnQ6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgaWYgKCFvYmplY3QuaXNSZWNvcmQoZG9jdW1lbnQpKSByZXR1cm4ge307XG4gICAgY29uc3QgZmllbGRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRvY3VtZW50KSkge1xuICAgICAgaWYgKFJFU0VSVkVEX0NPTFVNTlMuaGFzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgZmllbGRzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZpZWxkcztcbiAgfVxuXG4gIC8qKiBDb21waWxlIEFwcEtpdCBzY2FsYXIvYXJyYXkgZmlsdGVycyBhZ2FpbnN0IHRoZSBzdG9yZWQgSlNPTiBkb2N1bWVudC4gKi9cbiAgcHJpdmF0ZSBmaWx0ZXJDbGF1c2UoXG4gICAgZmlsdGVyOiBTZWFyY2hSZXF1ZXN0W1wiZmlsdGVyXCJdLFxuICAgIHN0YXJ0UG9zaXRpb246IG51bWJlcixcbiAgKTogeyBzcWw6IHN0cmluZzsgcGFyYW1zOiB1bmtub3duW10gfSB7XG4gICAgaWYgKCFmaWx0ZXIgfHwgT2JqZWN0LmtleXMoZmlsdGVyKS5sZW5ndGggPT09IDApIHJldHVybiB7IHNxbDogXCJcIiwgcGFyYW1zOiBbXSB9O1xuICAgIGNvbnN0IGNsYXVzZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgcGFyYW1zOiB1bmtub3duW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhmaWx0ZXIpKSB7XG4gICAgICBjb25zdCBrZXlQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyBwYXJhbXMubGVuZ3RoO1xuICAgICAgcGFyYW1zLnB1c2goa2V5KTtcbiAgICAgIGNvbnN0IHZhbHVlUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsgcGFyYW1zLmxlbmd0aDtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBwYXJhbXMucHVzaCh2YWx1ZS5tYXAoU3RyaW5nKSk7XG4gICAgICAgIGNsYXVzZXMucHVzaChgZG9jdW1lbnQgLT4+ICQke2tleVBvc2l0aW9ufSA9IEFOWSgkJHt2YWx1ZVBvc2l0aW9ufTo6dGV4dFtdKWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW1zLnB1c2goU3RyaW5nKHZhbHVlKSk7XG4gICAgICAgIGNsYXVzZXMucHVzaChgZG9jdW1lbnQgLT4+ICQke2tleVBvc2l0aW9ufSA9ICQke3ZhbHVlUG9zaXRpb259YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHNxbDogYCBBTkQgJHtjbGF1c2VzLmpvaW4oXCIgQU5EIFwiKX1gLCBwYXJhbXMgfTtcbiAgfVxuXG4gIC8qKiBUaGUgZnVsbHktcXVhbGlmaWVkIHRhYmxlIG5hbWUgZm9yIGFuIGluZGV4IHJlZmVyZW5jZS4gKi9cbiAgcHJpdmF0ZSB0YWJsZUZvcihpbmRleDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5pZGVudCh0aGlzLnNjaGVtYSl9LiR7dGhpcy5pZGVudCh0aGlzLmJhcmVOYW1lKGluZGV4KSl9YDtcbiAgfVxuXG4gIC8qKiBBIHNhZmUgYmFyZSB0YWJsZSBuYW1lIGRlcml2ZWQgZnJvbSBhbiBpbmRleCByZWZlcmVuY2UuICovXG4gIHByaXZhdGUgYmFyZU5hbWUocmVmZXJlbmNlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxhc3QgPSByZWZlcmVuY2Uuc3BsaXQoXCIuXCIpLmZpbHRlcihCb29sZWFuKS5wb3AoKSA/PyByZWZlcmVuY2U7XG4gICAgY29uc3Qgc2x1ZyA9IHN0cmluZ1V0aWxzLnRvU2x1ZyhsYXN0KS5yZXBsYWNlKC8tL2csIFwiX1wiKTtcbiAgICByZXR1cm4gc2x1Zy5sZW5ndGggPiAwID8gc2x1ZyA6IFwiZG9jdW1lbnRzXCI7XG4gIH1cblxuICAvKiogUXVvdGUgYSBQb3N0Z3JlcyBpZGVudGlmaWVyLiAqL1xuICBwcml2YXRlIGlkZW50KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcIiR7bmFtZS5yZXBsYWNlKC9cIi9nLCAnXCJcIicpfVwiYDtcbiAgfVxuXG4gIC8qKiBSdW4gb25lIHF1ZXJ5IHVuZGVyIGV4dGVybmFsIGNhbmNlbGxhdGlvbi4gKi9cbiAgcHJpdmF0ZSBhc3luYyBxdWVyeTxUPihcbiAgICBwb29sOiBMYWtlYmFzZVNlYXJjaFBvb2wsXG4gICAgc3FsOiBzdHJpbmcsXG4gICAgcGFyYW1zOiB1bmtub3duW10sXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8eyByb3dzOiBUW10gfT4ge1xuICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHRocm93IEV4ZWN1dGlvbkVycm9yLmNhbmNlbGVkKCk7XG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgcG9vbC5jb25uZWN0KCk7XG4gICAgbGV0IHJlbGVhc2VkID0gZmFsc2U7XG4gICAgY29uc3Qgb25BYm9ydCA9ICgpID0+IHtcbiAgICAgIGlmIChyZWxlYXNlZCkgcmV0dXJuO1xuICAgICAgcmVsZWFzZWQgPSB0cnVlO1xuICAgICAgY2xpZW50LnJlbGVhc2UodHJ1ZSk7XG4gICAgfTtcbiAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5xdWVyeShzcWwsIHBhcmFtcyk7XG4gICAgICByZXR1cm4geyByb3dzOiByZXN1bHQucm93cyBhcyBUW10gfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2lnbmFsPy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCk7XG4gICAgICBpZiAoIXJlbGVhc2VkKSBjbGllbnQucmVsZWFzZSgpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
336
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFrZWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGFrZWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVE5RSxPQUFPLEVBQUUsSUFBSSxFQUFvQyxNQUFNLElBQUksQ0FBQztBQUU1RCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFN0MsdUZBQXVGO0FBQ3ZGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBRXJGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUFhO0lBQ3pDLE9BQU87UUFDTCxHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsQ0FDaEMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUNyRCxLQUFLLENBQ047S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQXdCLEVBQUUsV0FBc0IsR0FBRztJQUMzRSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ2hFLENB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QUFFLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQy9DLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQVcsRUFBRSxDQUFDO1FBQ3RDLENBQUM7Z0JBQVMsQ0FBQztZQUNULE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExha2ViYXNlIChQb3N0Z3JlcykgZnVsbC10ZXh0IHJ1bnRpbWUgYmVoaW5kIGBsYWtlYmFzZUFpU2VhcmNoYC4gSXQgcHJvdmlzaW9uc1xuICogYSBzaW5nbGUgdGFibGUgcGVyIGluZGV4IGFsaWFzLCBpbmRleGVzIGEgZ2VuZXJhdGVkXG4gKiBgdHN2ZWN0b3JgLCBhbmQgYW5zd2VycyBxdWVyaWVzIHdpdGggYSBwcmVmaXggYHRvX3RzcXVlcnlgICsgYHRzX3JhbmtgLlxuICpcbiAqIFF1ZXJpZXMgYXJlIGNvbXBpbGVkIHJhdGhlciB0aGFuIHBhc3NlZCB0aHJvdWdoIGB3ZWJzZWFyY2hfdG9fdHNxdWVyeWAsXG4gKiBiZWNhdXNlIGEgc2VhcmNoIGJveCBuZWVkcyB0d28gdGhpbmdzIHRoYXQgZnVuY3Rpb24gZG9lcyBub3QgZ2l2ZTpcbiAqIHB1bmN0dWF0aW9uLWluc2Vuc2l0aXZpdHkgKHNvIGBzdG9yZS1pbnRlbGxpZ2VuY2VgIG1hdGNoZXMgdGhlIHNhbWUgcm93cyBhc1xuICogYHN0b3JlIGludGVsbGlnZW5jZWApIGFuZCBwcmVmaXggbWF0Y2hpbmcgKHNvIGBpbnRlbGAgcmVhY2hlc1xuICogYGludGVsbGlnZW5jZWApLiBTZWUge0BsaW5rIHRvU2VhcmNoVGVybXN9IC8ge0BsaW5rIHRvVHNRdWVyeX0uXG4gKlxuICogVGhlIHdob2xlIHBvaW50IGlzIHBhcml0eTogdGhpcyBiYWNrZW5kIHJldHVybnMgdGhlIEVYQUNUIHNhbWVcbiAqIGBAZGJ4LXRvb2xzL3NoYXJlZC1zZWFyY2hgIHNoYXBlcyAoYFNlYXJjaFJlc3VsdGAgLyBgU2VhcmNoSGl0YCAvXG4gKiBgVXBzZXJ0UmVzdWx0YCkgYXMgdGhlIFZlY3RvciBTZWFyY2ggYmFja2VuZCwgc28gdGhlIGNsaWVudCwgdGhlIE1hc3RyYVxuICogdG9vbHMsIHRoZSByb3V0ZXMsIGFuZCB0aGUgUmVhY3Qgc2VhcmNoIGJveCBjYW5ub3QgdGVsbCB3aGljaCBvbmUgYW5zd2VyZWQuXG4gKiBBIGhpdCdzIGBpZGAgaXMgdGhlIHByaW1hcnkga2V5LCBpdHMgYHNjb3JlYCBpcyB0aGUgdGV4dC1yYW5rLCBhbmQgYGZpZWxkc2BcbiAqIGlzIHRoZSBzdG9yZWQgZG9jdW1lbnQgbWludXMgdGhlIGludGVybmFsIGNvbHVtbnMuXG4gKlxuICogU3RhbmRhbG9uZSBjYWxsZXJzIGNhbiBzdXBwbHkgYSBgUG9vbENvbmZpZ2AgZmFjdG9yeSBhbmQgbGV0IHRoaXMgYmFja2VuZCBvd25cbiAqIHRoZSByZXN1bHRpbmcgcG9vbC4gQXBwS2l0IGludGVncmF0aW9ucyBpbnN0ZWFkIHN1cHBseSB0aGUgTGFrZWJhc2UgcGx1Z2luJ3NcbiAqIG1hbmFnZWQgcG9vbCBkaXJlY3RseSwgcHJlc2VydmluZyBpdHMgcm91dGluZyBhbmQgY3JlZGVudGlhbCByZWZyZXNoLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBFeGVjdXRpb25FcnJvciB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IHBvc3RncmVzQ29ubmVjdGlvbk9wdGlvbnMgfSBmcm9tIFwiQGRieC10b29scy9wb3N0Z3Jlc1wiO1xuaW1wb3J0IHsgYXN5bmNVdGlscywgbG9nLCBvYmplY3QsIHN0cmluZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHtcbiAgU2VhcmNoRG9jdW1lbnQsXG4gIFNlYXJjaEhpdCxcbiAgU2VhcmNoUmVxdWVzdCxcbiAgU2VhcmNoUmVzdWx0LFxuICBVcHNlcnRSZXN1bHQsXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1zZWFyY2hcIjtcbmltcG9ydCB7IFBvb2wsIHR5cGUgUG9vbENsaWVudCwgdHlwZSBQb29sQ29uZmlnIH0gZnJvbSBcInBnXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJzZWFyY2gvbGFrZWJhc2VcIik7XG5cbi8qKiBUaGUgaW50ZXJuYWwgY29sdW1ucyBldmVyeSBzZWFyY2ggdGFibGUgY2FycmllcywgZXhjbHVkZWQgZnJvbSBhIGhpdCdzIGBmaWVsZHNgLiAqL1xuY29uc3QgUkVTRVJWRURfQ09MVU1OUyA9IG5ldyBTZXQoW1wiaWRcIiwgXCJzZWFyY2hfdGV4dFwiLCBcImRvY3VtZW50XCIsIFwic2VhcmNoX3ZlY3RvclwiXSk7XG5cbi8qKlxuICogU3BsaXQgYSBzZWFyY2gtYm94IHN0cmluZyBpbnRvIHRoZSB0ZXJtcyBhIHRzcXVlcnkgaXMgYnVpbHQgZnJvbSwgdXNpbmcgdGhlXG4gKiBzaGFyZWQgYEBkYngtdG9vbHMvc2hhcmVkLWNvcmVgIHRva2VuaXplciBzbyB0aGUgc3BsaXR0aW5nIHJ1bGVzIHN0YXlcbiAqIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgdG9vbGtpdC5cbiAqXG4gKiBTcGxpdHRpbmcgb24gcHVuY3R1YXRpb24gaXMgd2hhdCBtYWtlcyBgc3RvcmUtaW50ZWxsaWdlbmNlYCBiZWhhdmUgbGlrZVxuICogYHN0b3JlIGludGVsbGlnZW5jZWAuIFBvc3RncmVzIGluZGV4ZXMgYSBoeXBoZW5hdGVkIHdvcmQgYXMgdGhlIGNvbXBvdW5kXG4gKiBsZXhlbWUgUExVUyBlYWNoIG9mIGl0cyBwYXJ0cywgYnV0IGNvbXBpbGVzIGEgaHlwaGVuYXRlZCBRVUVSWSB0byB0aGVcbiAqIGNvbXBvdW5kIGFsb25lIC0gc28gYHN0b3JlLWludGVsbGlnZW5jZWAgZGVtYW5kcyBhIGBzdG9yZS1pbnRlbGxpZ2AgbGV4ZW1lXG4gKiB0aGF0IGEgZG9jdW1lbnQgdGl0bGVkIGByYWNldHJhYy1zdG9yZS1pbnRlbGxpZ2VuY2VgIGRvZXMgbm90IGhhdmUsIGFuZCB0aGVcbiAqIHNlYXJjaCBzaWxlbnRseSByZXR1cm5zIG5vdGhpbmcgd2hpbGUgYHN0b3JlIGludGVsbGlnZW5jZWAgcmV0dXJuc1xuICogZXZlcnl0aGluZy4gU2FtZSBmb3IgYC5gIGFuZCBgX2AgaW4gYSB0YWJsZSByZWZlcmVuY2UuXG4gKlxuICogYGNhbWVsQ2FzZTogZmFsc2VgIGlzIGxvYWQtYmVhcmluZyByYXRoZXIgdGhhbiBhIGRlZmF1bHQ6IHRoZSBjYW1lbENhc2VcbiAqIHNwbGl0dGVyIGFsc28gYnJlYWtzIGRpZ2l0IHJ1bnMsIHR1cm5pbmcgYGdwdDRgIGludG8gYGdwdGAgKyBgNGAgYW5kIGBzM2BcbiAqIGludG8gYHNgICsgYDNgLiBQb3N0Z3JlcyBpbmRleGVzIGVhY2ggb2YgdGhvc2UgYXMgT05FIGxleGVtZSwgc28gbm8gbGV4ZW1lXG4gKiBldmVyIHN0YXJ0cyB3aXRoIHRoZSB0cmFpbGluZyBkaWdpdHMgYW5kIHRoZSBwcmVjaXNlIHBhc3MgY291bGQgbm90IG1hdGNoXG4gKiB0aGVtLiBLZWVwaW5nIHB1bmN0dWF0aW9uIGFzIHRoZSBvbmx5IGJvdW5kYXJ5IG1pcnJvcnMgaG93IHRoZSBpbmRleCB3YXNcbiAqIGJ1aWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9TZWFyY2hUZXJtcyhxdWVyeTogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gW1xuICAgIC4uLnN0cmluZ1V0aWxzLnRva2VuaXplV2l0aE9wdGlvbnMoXG4gICAgICB7IGxvd2VyQ2FzZTogdHJ1ZSwgY2FtZWxDYXNlOiBmYWxzZSwgZGlzdGluY3Q6IHRydWUgfSxcbiAgICAgIHF1ZXJ5LFxuICAgICksXG4gIF07XG59XG5cbi8qKlxuICogQ29tcGlsZSB0ZXJtcyBpbnRvIGEgYHRvX3RzcXVlcnlgIGlucHV0IHdoZXJlIGV2ZXJ5IHRlcm0gaXMgYSBQUkVGSVgsIHNvIGFcbiAqIHBhcnRpYWxseSB0eXBlZCB3b3JkIHN0aWxsIG1hdGNoZXMgKGBpbnRlbDoqYCByZWFjaGVzIGBpbnRlbGxpZ2VuY2VgKS5cbiAqXG4gKiBUZXJtcyBjYXJyeSBvbmx5IGxldHRlcnMgYW5kIGRpZ2l0cyBieSBjb25zdHJ1Y3Rpb24sIHNvIG5vbmUgb2YgdHNxdWVyeSdzXG4gKiBvcGVyYXRvcnMgKGAmIHwgISAoICkgOiAqYCkgY2FuIHN1cnZpdmUgZnJvbSB1c2VyIGlucHV0IGludG8gdGhlIGNvbXBpbGVkXG4gKiBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1RzUXVlcnkodGVybXM6IHJlYWRvbmx5IHN0cmluZ1tdLCBvcGVyYXRvcjogXCImXCIgfCBcInxcIiA9IFwiJlwiKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRlcm1zLm1hcCgodGVybSkgPT4gYCR7dGVybX06KmApLmpvaW4oYCAke29wZXJhdG9yfSBgKTtcbn1cblxuLyoqIE9wdGlvbnMgZm9yIGEgc2luZ2xlLWluZGV4IExha2ViYXNlIHNlYXJjaCAobWlycm9ycyB0aGUgY2xpZW50J3MgYFNlYXJjaE9wdGlvbnNgKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFrZWJhc2VTZWFyY2hPcHRpb25zIHtcbiAgbGltaXQ/OiBudW1iZXI7XG4gIGZpbHRlcj86IFNlYXJjaFJlcXVlc3RbXCJmaWx0ZXJcIl07XG4gIHNjb3JlVGhyZXNob2xkPzogbnVtYmVyO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuLyoqIE9uZSByYXcgc2VhcmNoIHJvdyBiZWZvcmUgaXQgaXMgc2hhcGVkIGludG8gYSB7QGxpbmsgU2VhcmNoSGl0fS4gKi9cbmludGVyZmFjZSBTZWFyY2hSb3cge1xuICBpZDogc3RyaW5nO1xuICBkb2N1bWVudDogdW5rbm93bjtcbiAgc2NvcmU6IG51bWJlcjtcbn1cblxuLyoqIFRoZSBtYW5hZ2VkLXBvb2wgc3VyZmFjZSBuZWVkZWQgYnkgdGhlIHNlYXJjaCBiYWNrZW5kLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWtlYmFzZVNlYXJjaFBvb2wge1xuICBjb25uZWN0KCk6IFByb21pc2U8UG9vbENsaWVudD47XG59XG5cbnR5cGUgTGFrZWJhc2VQb29sU291cmNlID1cbiAgfCAoKCkgPT4gUHJvbWlzZTxQb29sQ29uZmlnPiB8IFBvb2xDb25maWcpXG4gIHwgTGFrZWJhc2VTZWFyY2hQb29sXG4gIHwgeyBtYW5hZ2VkUG9vbDogKCkgPT4gTGFrZWJhc2VTZWFyY2hQb29sIHwgbnVsbCB8IHVuZGVmaW5lZCB9O1xuXG4vKiogT3B0aW9ucyBmb3IgcHJvdmlzaW9uaW5nIGEgTGFrZWJhc2UtYmFja2VkIGluZGV4LiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWtlYmFzZVByb3Zpc2lvbk9wdGlvbnMge1xuICAvKiogVGV4dCBjb2x1bW4gZW1iZWRkZWQgaW50byB0aGUgc2VhcmNoIHZlY3Rvci4gRGVmYXVsdHMgdG8gYHRleHRgLiAqL1xuICB0ZXh0Q29sdW1uPzogc3RyaW5nO1xuICAvKiogRG9jdW1lbnRzIHRvIHNlZWQgd2hlbiB0aGUgdGFibGUgaXMgZW1wdHkuICovXG4gIHNlZWQ/OiBTZWFyY2hEb2N1bWVudFtdO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuLyoqXG4gKiBBIFBvc3RncmVzIGZ1bGwtdGV4dCBiYWNrZW5kLiBPbmUgaW5zdGFuY2UgaXMgc2hhcmVkIGFjcm9zcyBpbmRleGVzOyBlYWNoXG4gKiBpbmRleCBtYXBzIHRvIGEgdGFibGUgd2hvc2UgbmFtZSBpcyBkZXJpdmVkIGZyb20gdGhlIGluZGV4IHJlZmVyZW5jZS5cbiAqL1xuZXhwb3J0IGNsYXNzIExha2ViYXNlU2VhcmNoQmFja2VuZCB7XG4gIHByaXZhdGUgcG9vbDogTGFrZWJhc2VTZWFyY2hQb29sIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHBvb2xQcm9taXNlOiBQcm9taXNlPExha2ViYXNlU2VhcmNoUG9vbD4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgb3duc1Bvb2wgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm92aXNpb25lZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcG9vbFNvdXJjZTogTGFrZWJhc2VQb29sU291cmNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2NoZW1hID0gXCJwdWJsaWNcIixcbiAgICAvKiogSG93IGEgcG9vbCBpcyBidWlsdCBmcm9tIHRoZSByZXNvbHZlZCBjb25maWcuIE92ZXJyaWRhYmxlIGZvciB0ZXN0cy4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHBvb2xGYWN0b3J5OiAoY29uZmlnOiBQb29sQ29uZmlnKSA9PiBQb29sID0gKGNvbmZpZykgPT4gbmV3IFBvb2woY29uZmlnKSxcbiAgKSB7fVxuXG4gIC8qKiBMYXppbHkgYnVpbGQgKGFuZCBjYWNoZSkgdGhlIHBnIHBvb2wgZnJvbSB0aGUgcmVzb2x2ZWQgTGFrZWJhc2UgY29uZmlnLiAqL1xuICBwcml2YXRlIGFzeW5jIGdldFBvb2woKTogUHJvbWlzZTxMYWtlYmFzZVNlYXJjaFBvb2w+IHtcbiAgICBpZiAodGhpcy5wb29sKSByZXR1cm4gdGhpcy5wb29sO1xuICAgIGlmIChcIm1hbmFnZWRQb29sXCIgaW4gdGhpcy5wb29sU291cmNlKSB7XG4gICAgICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IDIwMDsgYXR0ZW1wdCArPSAxKSB7XG4gICAgICAgIHRoaXMucG9vbCA9IHRoaXMucG9vbFNvdXJjZS5tYW5hZ2VkUG9vbCgpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHRoaXMucG9vbCkgcmV0dXJuIHRoaXMucG9vbDtcbiAgICAgICAgYXdhaXQgYXN5bmNVdGlscy5zbGVlcCg1MCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXhlY3V0aW9uRXJyb3IoXCJzZWFyY2ggKGxha2ViYXNlKTogbWFuYWdlZCBwb29sIGRpZCBub3QgaW5pdGlhbGl6ZVwiLCB7XG4gICAgICAgIGNvbnRleHQ6IHsgb3BlcmF0aW9uOiBcImNvbm5lY3RcIiB9LFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdGhpcy5wb29sU291cmNlICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMucG9vbCA9IHRoaXMucG9vbFNvdXJjZTtcbiAgICAgIHJldHVybiB0aGlzLnBvb2w7XG4gICAgfVxuICAgIGNvbnN0IHBnQ29uZmlnRmFjdG9yeSA9IHRoaXMucG9vbFNvdXJjZTtcbiAgICB0aGlzLnBvb2xQcm9taXNlID8/PSAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgcGdDb25maWdGYWN0b3J5KCk7XG4gICAgICBjb25zdCBwb29sID0gdGhpcy5wb29sRmFjdG9yeShwb3N0Z3Jlc0Nvbm5lY3Rpb25PcHRpb25zKGNvbmZpZykpO1xuICAgICAgdGhpcy5wb29sID0gcG9vbDtcbiAgICAgIHRoaXMub3duc1Bvb2wgPSB0cnVlO1xuICAgICAgcmV0dXJuIHBvb2w7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gdGhpcy5wb29sUHJvbWlzZTtcbiAgfVxuXG4gIC8qKiBDbG9zZSB0aGUgcG9vbCBzbyBhIHJlc3RhcnRlZCBhcHAgcmVidWlsZHMgaXQuICovXG4gIGFzeW5jIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBvb2wgPSB0aGlzLnBvb2w7XG4gICAgdGhpcy5wb29sID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucG9vbFByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wcm92aXNpb25lZC5jbGVhcigpO1xuICAgIGlmIChwb29sICYmIHRoaXMub3duc1Bvb2wpIGF3YWl0IChwb29sIGFzIFBvb2wpLmVuZCgpO1xuICAgIHRoaXMub3duc1Bvb2wgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggYSBMYWtlYmFzZS1iYWNrZWQgaW5kZXguIFJldHVybnMgaGl0cyBzb3J0ZWQgbW9zdC1yZWxldmFudC1maXJzdCxcbiAgICogc2hhcGVkIGlkZW50aWNhbGx5IHRvIHRoZSBWZWN0b3IgU2VhcmNoIGJhY2tlbmQuXG4gICAqL1xuICBhc3luYyBzZWFyY2goXG4gICAgaW5kZXg6IHN0cmluZyxcbiAgICBxdWVyeTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IExha2ViYXNlU2VhcmNoT3B0aW9ucyA9IHt9LFxuICApOiBQcm9taXNlPFNlYXJjaFJlc3VsdD4ge1xuICAgIGNvbnN0IHRleHQgPSBzdHJpbmdVdGlscy50cmltVG9FbXB0eShxdWVyeSk7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlRm9yKGluZGV4KTtcbiAgICBjb25zdCBsaW1pdCA9IG9wdGlvbnMubGltaXQgPz8gMTA7XG4gICAgY29uc3QgcG9vbCA9IGF3YWl0IHRoaXMuZ2V0UG9vbCgpO1xuICAgIGNvbnN0IHRlcm1zID0gdG9TZWFyY2hUZXJtcyh0ZXh0KTtcblxuICAgIC8vIEFuIGVtcHR5IChvciBwdW5jdHVhdGlvbi1vbmx5KSBib3ggcmV0dXJucyByb3dzIHJhdGhlciB0aGFuIG5vdGhpbmcsIHNvXG4gICAgLy8gdGhlIFVJIHNob3dzIGNvbnRlbnQgYmVmb3JlIHRoZSB1c2VyIHR5cGVzIC0gYXMgYSBrZXl3b3JkIGluZGV4IHdvdWxkLlxuICAgIGlmICh0ZXJtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZmlsdGVyQ2xhdXNlKG9wdGlvbnMuZmlsdGVyLCAxKTtcbiAgICAgIGNvbnN0IGxpbWl0UG9zaXRpb24gPSBmaWx0ZXIucGFyYW1zLmxlbmd0aCArIDE7XG4gICAgICBjb25zdCB7IHJvd3MgfSA9IGF3YWl0IHRoaXMucXVlcnk8U2VhcmNoUm93PihcbiAgICAgICAgcG9vbCxcbiAgICAgICAgYFNFTEVDVCBpZCwgZG9jdW1lbnQsIDA6OmZsb2F0NCBBUyBzY29yZVxuICAgICAgICAgICBGUk9NICR7dGFibGV9XG4gICAgICAgICAgV0hFUkUgVFJVRSR7ZmlsdGVyLnNxbH1cbiAgICAgICAgICBPUkRFUiBCWSBpZFxuICAgICAgICAgIExJTUlUICQke2xpbWl0UG9zaXRpb259YCxcbiAgICAgICAgWy4uLmZpbHRlci5wYXJhbXMsIGxpbWl0XSxcbiAgICAgICAgb3B0aW9ucy5zaWduYWwsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRoaXMudG9SZXN1bHQodGV4dCwgaW5kZXgsIHJvd3MsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8vIFByZWNpc2UgcGFzczogZXZlcnkgdGVybSBtdXN0IG1hdGNoLCBlYWNoIGFzIGEgcHJlZml4LlxuICAgIGNvbnN0IHN0cmljdEZpbHRlciA9IHRoaXMuZmlsdGVyQ2xhdXNlKG9wdGlvbnMuZmlsdGVyLCAyKTtcbiAgICBjb25zdCBzdHJpY3RMaW1pdFBvc2l0aW9uID0gc3RyaWN0RmlsdGVyLnBhcmFtcy5sZW5ndGggKyAyO1xuICAgIGNvbnN0IHN0cmljdCA9IGF3YWl0IHRoaXMucXVlcnk8U2VhcmNoUm93PihcbiAgICAgIHBvb2wsXG4gICAgICBgU0VMRUNUIGlkLCBkb2N1bWVudCwgdHNfcmFuayhzZWFyY2hfdmVjdG9yLCB0b190c3F1ZXJ5KCdlbmdsaXNoJywgJDEpKSBBUyBzY29yZVxuICAgICAgICAgRlJPTSAke3RhYmxlfVxuICAgICAgICBXSEVSRSBzZWFyY2hfdmVjdG9yIEBAIHRvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAkMSlcbiAgICAgICAgICAke3N0cmljdEZpbHRlci5zcWx9XG4gICAgICAgIE9SREVSIEJZIHNjb3JlIERFU0NcbiAgICAgICAgTElNSVQgJCR7c3RyaWN0TGltaXRQb3NpdGlvbn1gLFxuICAgICAgW3RvVHNRdWVyeSh0ZXJtcyksIC4uLnN0cmljdEZpbHRlci5wYXJhbXMsIGxpbWl0XSxcbiAgICAgIG9wdGlvbnMuc2lnbmFsLFxuICAgICk7XG4gICAgaWYgKHN0cmljdC5yb3dzLmxlbmd0aCA+IDApIHJldHVybiB0aGlzLnRvUmVzdWx0KHRleHQsIGluZGV4LCBzdHJpY3Qucm93cywgb3B0aW9ucyk7XG5cbiAgICAvLyBOb3RoaW5nIG1hdGNoZWQgRVZFUlkgdGVybSwgc28gcmVsYXggcmF0aGVyIHRoYW4gcmV0dXJuIGFuIGVtcHR5IGJveDpcbiAgICAvLyBhbnkgb25lIHRlcm0gaXMgZW5vdWdoLCBhbmQgYW4gYElMSUtFYCBwYXNzIGFkZGl0aW9uYWxseSBjYXRjaGVzIGFcbiAgICAvLyBmcmFnbWVudCB0aGF0IGlzIG5vdCBhIHByZWZpeCAoYHRlbGxpZ2VuY2VgKSBvciBhIHRva2VuIHRoZSB0ZXh0LXNlYXJjaFxuICAgIC8vIHBhcnNlciBzcGxpdCBkaWZmZXJlbnRseSB0aGFuIGV4cGVjdGVkLiBTdWJzdHJpbmcgbWF0Y2hpbmcgY2Fubm90IHVzZVxuICAgIC8vIHRoZSBHSU4gaW5kZXgsIHdoaWNoIGlzIHdoeSBpdCBvbmx5IHJ1bnMgb25jZSB0aGUgaW5kZXhlZCBwYXNzIGZhaWxzLlxuICAgIGNvbnN0IHJlbGF4ZWRGaWx0ZXIgPSB0aGlzLmZpbHRlckNsYXVzZShvcHRpb25zLmZpbHRlciwgMyk7XG4gICAgY29uc3QgcmVsYXhlZExpbWl0UG9zaXRpb24gPSByZWxheGVkRmlsdGVyLnBhcmFtcy5sZW5ndGggKyAzO1xuICAgIGNvbnN0IHJlbGF4ZWQgPSBhd2FpdCB0aGlzLnF1ZXJ5PFNlYXJjaFJvdz4oXG4gICAgICBwb29sLFxuICAgICAgYFNFTEVDVCBpZCwgZG9jdW1lbnQsIHRzX3Jhbmsoc2VhcmNoX3ZlY3RvciwgdG9fdHNxdWVyeSgnZW5nbGlzaCcsICQxKSkgQVMgc2NvcmVcbiAgICAgICAgIEZST00gJHt0YWJsZX1cbiAgICAgICAgV0hFUkUgKHNlYXJjaF92ZWN0b3IgQEAgdG9fdHNxdWVyeSgnZW5nbGlzaCcsICQxKVxuICAgICAgICAgICBPUiBzZWFyY2hfdGV4dCBJTElLRSBBTlkoJDI6OnRleHRbXSkpXG4gICAgICAgICAgJHtyZWxheGVkRmlsdGVyLnNxbH1cbiAgICAgICAgT1JERVIgQlkgc2NvcmUgREVTQ1xuICAgICAgICBMSU1JVCAkJHtyZWxheGVkTGltaXRQb3NpdGlvbn1gLFxuICAgICAgW3RvVHNRdWVyeSh0ZXJtcywgXCJ8XCIpLCB0ZXJtcy5tYXAoKHRlcm0pID0+IGAlJHt0ZXJtfSVgKSwgLi4ucmVsYXhlZEZpbHRlci5wYXJhbXMsIGxpbWl0XSxcbiAgICAgIG9wdGlvbnMuc2lnbmFsLFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMudG9SZXN1bHQodGV4dCwgaW5kZXgsIHJlbGF4ZWQucm93cywgb3B0aW9ucyk7XG4gIH1cblxuICAvKiogU2hhcGUgcmF3IHJvd3MgaW50byB0aGUgYFNlYXJjaFJlc3VsdGAgYm90aCBiYWNrZW5kcyByZXR1cm4uICovXG4gIHByaXZhdGUgdG9SZXN1bHQoXG4gICAgcXVlcnk6IHN0cmluZyxcbiAgICBpbmRleDogc3RyaW5nLFxuICAgIHJvd3M6IFNlYXJjaFJvd1tdLFxuICAgIG9wdGlvbnM6IExha2ViYXNlU2VhcmNoT3B0aW9ucyxcbiAgKTogU2VhcmNoUmVzdWx0IHtcbiAgICBjb25zdCBoaXRzOiBTZWFyY2hIaXRbXSA9IHJvd3NcbiAgICAgIC5tYXAoKHJvdykgPT4gKHtcbiAgICAgICAgaWQ6IFN0cmluZyhyb3cuaWQpLFxuICAgICAgICBzY29yZTogTnVtYmVyKHJvdy5zY29yZSkgfHwgMCxcbiAgICAgICAgZmllbGRzOiB0aGlzLnRvRmllbGRzKHJvdy5kb2N1bWVudCksXG4gICAgICB9KSlcbiAgICAgIC5maWx0ZXIoKGhpdCkgPT4gb3B0aW9ucy5zY29yZVRocmVzaG9sZCA9PT0gdW5kZWZpbmVkIHx8IGhpdC5zY29yZSA+PSBvcHRpb25zLnNjb3JlVGhyZXNob2xkKTtcbiAgICByZXR1cm4geyBxdWVyeSwgaW5kZXgsIGhpdHMsIGNvdW50OiBoaXRzLmxlbmd0aCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZSB0aGUgdGFibGUgKyBmdWxsLXRleHQgaW5kZXggZXhpc3QgYW5kIHNlZWQgZG9jdW1lbnRzIHdoZW4gZW1wdHkuXG4gICAqIElkZW1wb3RlbnQsIHNvIGl0IGlzIHNhZmUgdG8gY2FsbCBvbiBldmVyeSBib290LlxuICAgKi9cbiAgYXN5bmMgcHJvdmlzaW9uKGluZGV4OiBzdHJpbmcsIG9wdGlvbnM6IExha2ViYXNlUHJvdmlzaW9uT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMudGFibGVGb3IoaW5kZXgpO1xuICAgIGNvbnN0IHBvb2wgPSBhd2FpdCB0aGlzLmdldFBvb2woKTtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVRhYmxlKHBvb2wsIHRhYmxlLCBvcHRpb25zLnNpZ25hbCk7XG5cbiAgICBjb25zdCB7IHJvd3MgfSA9IGF3YWl0IHRoaXMucXVlcnk8eyBjb3VudDogc3RyaW5nIH0+KFxuICAgICAgcG9vbCxcbiAgICAgIGBTRUxFQ1QgY291bnQoKik6OnRleHQgQVMgY291bnQgRlJPTSAke3RhYmxlfWAsXG4gICAgICBbXSxcbiAgICAgIG9wdGlvbnMuc2lnbmFsLFxuICAgICk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBOdW1iZXIocm93c1swXT8uY291bnQgPz8gXCIwXCIpO1xuICAgIGNvbnN0IHNlZWQgPSBvcHRpb25zLnNlZWQgPz8gW107XG4gICAgaWYgKGV4aXN0aW5nID09PSAwICYmIHNlZWQubGVuZ3RoID4gMCkge1xuICAgICAgYXdhaXQgdGhpcy51cHNlcnQocG9vbCwgdGFibGUsIHNlZWQsIG9wdGlvbnMudGV4dENvbHVtbiA/PyBcInRleHRcIiwgb3B0aW9ucy5zaWduYWwpO1xuICAgICAgbG9nZ2VyLmluZm8oXCJpbmRleC1zZWVkZWRcIiwgeyBpbmRleCwgdGFibGUsIGNvdW50OiBzZWVkLmxlbmd0aCB9KTtcbiAgICAgIHJldHVybiBzZWVkLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIGV4aXN0aW5nO1xuICB9XG5cbiAgLyoqIEFkZCBvciB1cGRhdGUgZG9jdW1lbnRzIGJ5IHByaW1hcnkga2V5LiAqL1xuICBhc3luYyBhZGREb2N1bWVudHMoXG4gICAgaW5kZXg6IHN0cmluZyxcbiAgICBkb2N1bWVudHM6IFNlYXJjaERvY3VtZW50W10sXG4gICAgdGV4dENvbHVtbiA9IFwidGV4dFwiLFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICApOiBQcm9taXNlPFVwc2VydFJlc3VsdD4ge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZUZvcihpbmRleCk7XG4gICAgY29uc3QgcG9vbCA9IGF3YWl0IHRoaXMuZ2V0UG9vbCgpO1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlVGFibGUocG9vbCwgdGFibGUsIHNpZ25hbCk7XG4gICAgYXdhaXQgdGhpcy51cHNlcnQocG9vbCwgdGFibGUsIGRvY3VtZW50cywgdGV4dENvbHVtbiwgc2lnbmFsKTtcbiAgICByZXR1cm4geyBpbmRleCwgY291bnQ6IGRvY3VtZW50cy5sZW5ndGggfTtcbiAgfVxuXG4gIC8qKiBEZWxldGUgZG9jdW1lbnRzIGJ5IHByaW1hcnkga2V5LiAqL1xuICBhc3luYyBkZWxldGVEb2N1bWVudHMoXG4gICAgaW5kZXg6IHN0cmluZyxcbiAgICBpZHM6IEFycmF5PHN0cmluZyB8IG51bWJlcj4sXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8VXBzZXJ0UmVzdWx0PiB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlRm9yKGluZGV4KTtcbiAgICBjb25zdCBwb29sID0gYXdhaXQgdGhpcy5nZXRQb29sKCk7XG4gICAgYXdhaXQgdGhpcy5xdWVyeShwb29sLCBgREVMRVRFIEZST00gJHt0YWJsZX0gV0hFUkUgaWQgPSBBTlkoJDEpYCwgW2lkcy5tYXAoU3RyaW5nKV0sIHNpZ25hbCk7XG4gICAgcmV0dXJuIHsgaW5kZXgsIGNvdW50OiBpZHMubGVuZ3RoIH07XG4gIH1cblxuICAvKiogQ3JlYXRlIHRoZSB0YWJsZSArIEdJTiBpbmRleCBvbmNlIHBlciB0YWJsZSAobWVtb2l6ZWQgYWNyb3NzIGNhbGxzKS4gKi9cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVUYWJsZShcbiAgICBwb29sOiBMYWtlYmFzZVNlYXJjaFBvb2wsXG4gICAgdGFibGU6IHN0cmluZyxcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMucHJvdmlzaW9uZWQuaGFzKHRhYmxlKSkgcmV0dXJuO1xuICAgIC8vIGBkb2N1bWVudGAgaG9sZHMgdGhlIHdob2xlIHJvdzsgYHNlYXJjaF90ZXh0YCBpcyB0aGUgaW5kZXhlZCB0ZXh0OyB0aGVcbiAgICAvLyBnZW5lcmF0ZWQgYHNlYXJjaF92ZWN0b3JgIGtlZXBzIHRoZSB0c3ZlY3RvciBpbiBsb2Nrc3RlcCB3aXRoIGl0IHNvIGFcbiAgICAvLyB3cml0ZSBuZXZlciBoYXMgdG8gY29tcHV0ZSB0aGUgdmVjdG9yIGJ5IGhhbmQuXG4gICAgYXdhaXQgdGhpcy5xdWVyeShwb29sLCBgQ1JFQVRFIFNDSEVNQSBJRiBOT1QgRVhJU1RTICR7dGhpcy5pZGVudCh0aGlzLnNjaGVtYSl9YCwgW10sIHNpZ25hbCk7XG4gICAgYXdhaXQgdGhpcy5xdWVyeShcbiAgICAgIHBvb2wsXG4gICAgICBgQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgJHt0YWJsZX0gKFxuICAgICAgICAgaWQgdGV4dCBQUklNQVJZIEtFWSxcbiAgICAgICAgIHNlYXJjaF90ZXh0IHRleHQgTk9UIE5VTEwgREVGQVVMVCAnJyxcbiAgICAgICAgIGRvY3VtZW50IGpzb25iIE5PVCBOVUxMIERFRkFVTFQgJ3t9Jzo6anNvbmIsXG4gICAgICAgICBzZWFyY2hfdmVjdG9yIHRzdmVjdG9yIEdFTkVSQVRFRCBBTFdBWVMgQVMgKHRvX3RzdmVjdG9yKCdlbmdsaXNoJywgc2VhcmNoX3RleHQpKSBTVE9SRURcbiAgICAgICApYCxcbiAgICAgIFtdLFxuICAgICAgc2lnbmFsLFxuICAgICk7XG4gICAgYXdhaXQgdGhpcy5xdWVyeShcbiAgICAgIHBvb2wsXG4gICAgICBgQUxURVIgVEFCTEUgJHt0YWJsZX1cbiAgICAgICAgIEFERCBDT0xVTU4gSUYgTk9UIEVYSVNUUyBzZWFyY2hfdmVjdG9yIHRzdmVjdG9yXG4gICAgICAgICBHRU5FUkFURUQgQUxXQVlTIEFTICh0b190c3ZlY3RvcignZW5nbGlzaCcsIHNlYXJjaF90ZXh0KSkgU1RPUkVEYCxcbiAgICAgIFtdLFxuICAgICAgc2lnbmFsLFxuICAgICk7XG4gICAgYXdhaXQgdGhpcy5xdWVyeShcbiAgICAgIHBvb2wsXG4gICAgICBgQ1JFQVRFIElOREVYIElGIE5PVCBFWElTVFMgJHt0aGlzLmlkZW50KGAke3RoaXMuYmFyZU5hbWUodGFibGUpfV9mdHNgKX1cbiAgICAgICAgIE9OICR7dGFibGV9IFVTSU5HIGdpbiAoc2VhcmNoX3ZlY3RvcilgLFxuICAgICAgW10sXG4gICAgICBzaWduYWwsXG4gICAgKTtcbiAgICB0aGlzLnByb3Zpc2lvbmVkLmFkZCh0YWJsZSk7XG4gICAgbG9nZ2VyLmluZm8oXCJpbmRleC1jcmVhdGVkXCIsIHsgdGFibGUgfSk7XG4gIH1cblxuICAvKiogVXBzZXJ0IHJvd3M6IHRoZSB3aG9sZSBkb2N1bWVudCBhcyBqc29uYiArIGEgZmxhdHRlbmVkIHRleHQgYmxvYiB0byBpbmRleC4gKi9cbiAgcHJpdmF0ZSBhc3luYyB1cHNlcnQoXG4gICAgcG9vbDogTGFrZWJhc2VTZWFyY2hQb29sLFxuICAgIHRhYmxlOiBzdHJpbmcsXG4gICAgZG9jdW1lbnRzOiBTZWFyY2hEb2N1bWVudFtdLFxuICAgIHRleHRDb2x1bW46IHN0cmluZyxcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZm9yIChjb25zdCBkb2Mgb2YgZG9jdW1lbnRzKSB7XG4gICAgICBjb25zdCBpZCA9IHN0cmluZ1V0aWxzLnRyaW1Ub051bGwoU3RyaW5nKGRvYy5pZCA/PyBkb2MuSUQgPz8gXCJcIikpID8/IHVuZGVmaW5lZDtcbiAgICAgIGlmIChpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGVjdXRpb25FcnJvcihcInNlYXJjaCAobGFrZWJhc2UpOiBhIGRvY3VtZW50IGlzIG1pc3NpbmcgYW4gYGlkYFwiLCB7XG4gICAgICAgICAgY29udGV4dDogeyBvcGVyYXRpb246IFwiYWRkRG9jdW1lbnRzXCIgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gdGhpcy5zZWFyY2hUZXh0KGRvYywgdGV4dENvbHVtbik7XG4gICAgICBhd2FpdCB0aGlzLnF1ZXJ5KFxuICAgICAgICBwb29sLFxuICAgICAgICBgSU5TRVJUIElOVE8gJHt0YWJsZX0gKGlkLCBzZWFyY2hfdGV4dCwgZG9jdW1lbnQpXG4gICAgICAgICAgIFZBTFVFUyAoJDEsICQyLCAkMzo6anNvbmIpXG4gICAgICAgICBPTiBDT05GTElDVCAoaWQpIERPIFVQREFURVxuICAgICAgICAgICBTRVQgc2VhcmNoX3RleHQgPSBFWENMVURFRC5zZWFyY2hfdGV4dCwgZG9jdW1lbnQgPSBFWENMVURFRC5kb2N1bWVudGAsXG4gICAgICAgIFtpZCwgc2VhcmNoVGV4dCwgSlNPTi5zdHJpbmdpZnkoZG9jKV0sXG4gICAgICAgIHNpZ25hbCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRoZSB0ZXh0IGEgcm93IGlzIGluZGV4ZWQgYnk6IHRoZSB0ZXh0IGNvbHVtbiBmaXJzdCwgdGhlbiBhbnkgb3RoZXIgc3RyaW5nIGZpZWxkLiAqL1xuICBwcml2YXRlIHNlYXJjaFRleHQoZG9jOiBTZWFyY2hEb2N1bWVudCwgdGV4dENvbHVtbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBwcmltYXJ5ID0gc3RyaW5nVXRpbHMudHJpbVRvRW1wdHkoU3RyaW5nKGRvY1t0ZXh0Q29sdW1uXSA/PyBcIlwiKSk7XG4gICAgY29uc3QgcmVzdCA9IE9iamVjdC5lbnRyaWVzKGRvYylcbiAgICAgIC5maWx0ZXIoKFtrZXksIHZhbHVlXSkgPT4ga2V5ICE9PSB0ZXh0Q29sdW1uICYmIGtleSAhPT0gXCJpZFwiICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIilcbiAgICAgIC5tYXAoKFssIHZhbHVlXSkgPT4gdmFsdWUgYXMgc3RyaW5nKTtcbiAgICByZXR1cm4gW3ByaW1hcnksIC4uLnJlc3RdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgLyoqIEEgaGl0J3MgYGZpZWxkc2A6IHRoZSBzdG9yZWQgZG9jdW1lbnQgbWludXMgdGhlIHJlc2VydmVkL2ludGVybmFsIGtleXMuICovXG4gIHByaXZhdGUgdG9GaWVsZHMoZG9jdW1lbnQ6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgaWYgKCFvYmplY3QuaXNSZWNvcmQoZG9jdW1lbnQpKSByZXR1cm4ge307XG4gICAgY29uc3QgZmllbGRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRvY3VtZW50KSkge1xuICAgICAgaWYgKFJFU0VSVkVEX0NPTFVNTlMuaGFzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgZmllbGRzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZpZWxkcztcbiAgfVxuXG4gIC8qKiBDb21waWxlIEFwcEtpdCBzY2FsYXIvYXJyYXkgZmlsdGVycyBhZ2FpbnN0IHRoZSBzdG9yZWQgSlNPTiBkb2N1bWVudC4gKi9cbiAgcHJpdmF0ZSBmaWx0ZXJDbGF1c2UoXG4gICAgZmlsdGVyOiBTZWFyY2hSZXF1ZXN0W1wiZmlsdGVyXCJdLFxuICAgIHN0YXJ0UG9zaXRpb246IG51bWJlcixcbiAgKTogeyBzcWw6IHN0cmluZzsgcGFyYW1zOiB1bmtub3duW10gfSB7XG4gICAgaWYgKCFmaWx0ZXIgfHwgT2JqZWN0LmtleXMoZmlsdGVyKS5sZW5ndGggPT09IDApIHJldHVybiB7IHNxbDogXCJcIiwgcGFyYW1zOiBbXSB9O1xuICAgIGNvbnN0IGNsYXVzZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgcGFyYW1zOiB1bmtub3duW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhmaWx0ZXIpKSB7XG4gICAgICBjb25zdCBrZXlQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyBwYXJhbXMubGVuZ3RoO1xuICAgICAgcGFyYW1zLnB1c2goa2V5KTtcbiAgICAgIGNvbnN0IHZhbHVlUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsgcGFyYW1zLmxlbmd0aDtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBwYXJhbXMucHVzaCh2YWx1ZS5tYXAoU3RyaW5nKSk7XG4gICAgICAgIGNsYXVzZXMucHVzaChgZG9jdW1lbnQgLT4+ICQke2tleVBvc2l0aW9ufSA9IEFOWSgkJHt2YWx1ZVBvc2l0aW9ufTo6dGV4dFtdKWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW1zLnB1c2goU3RyaW5nKHZhbHVlKSk7XG4gICAgICAgIGNsYXVzZXMucHVzaChgZG9jdW1lbnQgLT4+ICQke2tleVBvc2l0aW9ufSA9ICQke3ZhbHVlUG9zaXRpb259YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHNxbDogYCBBTkQgJHtjbGF1c2VzLmpvaW4oXCIgQU5EIFwiKX1gLCBwYXJhbXMgfTtcbiAgfVxuXG4gIC8qKiBUaGUgZnVsbHktcXVhbGlmaWVkIHRhYmxlIG5hbWUgZm9yIGFuIGluZGV4IHJlZmVyZW5jZS4gKi9cbiAgcHJpdmF0ZSB0YWJsZUZvcihpbmRleDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5pZGVudCh0aGlzLnNjaGVtYSl9LiR7dGhpcy5pZGVudCh0aGlzLmJhcmVOYW1lKGluZGV4KSl9YDtcbiAgfVxuXG4gIC8qKiBBIHNhZmUgYmFyZSB0YWJsZSBuYW1lIGRlcml2ZWQgZnJvbSBhbiBpbmRleCByZWZlcmVuY2UuICovXG4gIHByaXZhdGUgYmFyZU5hbWUocmVmZXJlbmNlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxhc3QgPSByZWZlcmVuY2Uuc3BsaXQoXCIuXCIpLmZpbHRlcihCb29sZWFuKS5wb3AoKSA/PyByZWZlcmVuY2U7XG4gICAgY29uc3Qgc2x1ZyA9IHN0cmluZ1V0aWxzLnRvU2x1ZyhsYXN0KS5yZXBsYWNlKC8tL2csIFwiX1wiKTtcbiAgICByZXR1cm4gc2x1Zy5sZW5ndGggPiAwID8gc2x1ZyA6IFwiZG9jdW1lbnRzXCI7XG4gIH1cblxuICAvKiogUXVvdGUgYSBQb3N0Z3JlcyBpZGVudGlmaWVyLiAqL1xuICBwcml2YXRlIGlkZW50KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcIiR7bmFtZS5yZXBsYWNlKC9cIi9nLCAnXCJcIicpfVwiYDtcbiAgfVxuXG4gIC8qKiBSdW4gb25lIHF1ZXJ5IHVuZGVyIGV4dGVybmFsIGNhbmNlbGxhdGlvbi4gKi9cbiAgcHJpdmF0ZSBhc3luYyBxdWVyeTxUPihcbiAgICBwb29sOiBMYWtlYmFzZVNlYXJjaFBvb2wsXG4gICAgc3FsOiBzdHJpbmcsXG4gICAgcGFyYW1zOiB1bmtub3duW10sXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8eyByb3dzOiBUW10gfT4ge1xuICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHRocm93IEV4ZWN1dGlvbkVycm9yLmNhbmNlbGVkKCk7XG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgcG9vbC5jb25uZWN0KCk7XG4gICAgbGV0IHJlbGVhc2VkID0gZmFsc2U7XG4gICAgY29uc3Qgb25BYm9ydCA9ICgpID0+IHtcbiAgICAgIGlmIChyZWxlYXNlZCkgcmV0dXJuO1xuICAgICAgcmVsZWFzZWQgPSB0cnVlO1xuICAgICAgY2xpZW50LnJlbGVhc2UodHJ1ZSk7XG4gICAgfTtcbiAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5xdWVyeShzcWwsIHBhcmFtcyk7XG4gICAgICByZXR1cm4geyByb3dzOiByZXN1bHQucm93cyBhcyBUW10gfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2lnbmFsPy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCk7XG4gICAgICBpZiAoIXJlbGVhc2VkKSBjbGllbnQucmVsZWFzZSgpO1xuICAgIH1cbiAgfVxufVxuIl19
|
package/package.json
CHANGED
|
@@ -28,12 +28,13 @@
|
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"@databricks/appkit": "0.81.0",
|
|
30
30
|
"@databricks/sdk-experimental": "^0.17.0",
|
|
31
|
-
"@dbx-tools/appkit": "^0.9.
|
|
32
|
-
"@dbx-tools/core": "^0.9.
|
|
33
|
-
"@dbx-tools/model": "^0.9.
|
|
34
|
-
"@dbx-tools/
|
|
35
|
-
"@dbx-tools/shared-
|
|
36
|
-
"@dbx-tools/shared-
|
|
31
|
+
"@dbx-tools/appkit": "^0.9.60",
|
|
32
|
+
"@dbx-tools/core": "^0.9.60",
|
|
33
|
+
"@dbx-tools/model": "^0.9.60",
|
|
34
|
+
"@dbx-tools/postgres": "^0.9.60",
|
|
35
|
+
"@dbx-tools/shared-core": "^0.9.60",
|
|
36
|
+
"@dbx-tools/shared-model": "^0.9.60",
|
|
37
|
+
"@dbx-tools/shared-search": "^0.9.60",
|
|
37
38
|
"@mastra/core": "1.71.0",
|
|
38
39
|
"pg": "^8.22.0",
|
|
39
40
|
"zod": "4.3.6"
|
|
@@ -96,7 +97,7 @@
|
|
|
96
97
|
"./package.json": "./package.json"
|
|
97
98
|
}
|
|
98
99
|
},
|
|
99
|
-
"version": "0.9.
|
|
100
|
+
"version": "0.9.60",
|
|
100
101
|
"types": "./lib/index.d.ts",
|
|
101
102
|
"dbxToolsConfig": {
|
|
102
103
|
"tags": [
|
package/src/lakebase.ts
CHANGED
|
@@ -24,7 +24,8 @@
|
|
|
24
24
|
*/
|
|
25
25
|
|
|
26
26
|
import { ExecutionError } from "@databricks/appkit";
|
|
27
|
-
import {
|
|
27
|
+
import { postgresConnectionOptions } from "@dbx-tools/postgres";
|
|
28
|
+
import { asyncUtils, log, object, stringUtils } from "@dbx-tools/shared-core";
|
|
28
29
|
import type {
|
|
29
30
|
SearchDocument,
|
|
30
31
|
SearchHit,
|
|
@@ -138,7 +139,7 @@ export class LakebaseSearchBackend {
|
|
|
138
139
|
for (let attempt = 0; attempt < 200; attempt += 1) {
|
|
139
140
|
this.pool = this.poolSource.managedPool() ?? undefined;
|
|
140
141
|
if (this.pool) return this.pool;
|
|
141
|
-
await
|
|
142
|
+
await asyncUtils.sleep(50);
|
|
142
143
|
}
|
|
143
144
|
throw new ExecutionError("search (lakebase): managed pool did not initialize", {
|
|
144
145
|
context: { operation: "connect" },
|
|
@@ -151,7 +152,7 @@ export class LakebaseSearchBackend {
|
|
|
151
152
|
const pgConfigFactory = this.poolSource;
|
|
152
153
|
this.poolPromise ??= (async () => {
|
|
153
154
|
const config = await pgConfigFactory();
|
|
154
|
-
const pool = this.poolFactory(config);
|
|
155
|
+
const pool = this.poolFactory(postgresConnectionOptions(config));
|
|
155
156
|
this.pool = pool;
|
|
156
157
|
this.ownsPool = true;
|
|
157
158
|
return pool;
|