@dbx-tools/core 0.9.79 → 0.9.93
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/index.ts +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +2 -2
- package/lib/src/project-utils.d.ts +1 -0
- package/lib/src/project-utils.js +5 -2
- package/package.json +2 -2
- package/src/project-utils.ts +5 -1
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/core";
|
|
6
|
-
export const PACKAGE_VERSION = "0.9.
|
|
6
|
+
export const PACKAGE_VERSION = "0.9.93";
|
|
7
7
|
export * as bin from "./src/bin.ts";
|
|
8
8
|
export * as brandFiles from "./src/brand-files.ts";
|
|
9
9
|
export * as bundle from "./src/bundle.ts";
|
package/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const PACKAGE_IDENTIFIER = "@dbx-tools/core";
|
|
2
|
-
export declare const PACKAGE_VERSION = "0.9.
|
|
2
|
+
export declare const PACKAGE_VERSION = "0.9.93";
|
|
3
3
|
export * as bin from "./src/bin.ts";
|
|
4
4
|
export * as brandFiles from "./src/brand-files.ts";
|
|
5
5
|
export * as bundle from "./src/bundle.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/core";
|
|
5
|
-
export const PACKAGE_VERSION = "0.9.
|
|
5
|
+
export const PACKAGE_VERSION = "0.9.93";
|
|
6
6
|
export * as bin from "./src/bin.js";
|
|
7
7
|
export * as brandFiles from "./src/brand-files.js";
|
|
8
8
|
export * as bundle from "./src/bundle.js";
|
|
@@ -16,4 +16,4 @@ export * as projectUtils from "./src/project-utils.js";
|
|
|
16
16
|
export { BrandContextSchema, defaultBrandContext, parseBrandContext, brandContextJsonSchema, brandContextPrompt } from "./src/brand-files.js";
|
|
17
17
|
export { MAX_TCP_PORT, ENV_ONLY, valueSchema, bundleResourceSchema, bundleEnvEntrySchema, bundleAppSchema, appEnvEntrySchema, appSchema } from "./src/config-utils.js";
|
|
18
18
|
export { COMMAND_NOT_FOUND_EXIT_CODE } from "./src/exec.js";
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FBQztBQUNwRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxVQUFVLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssV0FBVyxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sS0FBSyxrQkFBa0IsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssUUFBUSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sS0FBSyxXQUFXLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxLQUFLLFlBQVksTUFBTSx3QkFBd0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU5SSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR3ZLLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvY29yZVwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjkzXCI7XG5leHBvcnQgKiBhcyBiaW4gZnJvbSBcIi4vc3JjL2Jpbi50c1wiO1xuZXhwb3J0ICogYXMgYnJhbmRGaWxlcyBmcm9tIFwiLi9zcmMvYnJhbmQtZmlsZXMudHNcIjtcbmV4cG9ydCAqIGFzIGJ1bmRsZSBmcm9tIFwiLi9zcmMvYnVuZGxlLnRzXCI7XG5leHBvcnQgKiBhcyBjb25maWdVdGlscyBmcm9tIFwiLi9zcmMvY29uZmlnLXV0aWxzLnRzXCI7XG5leHBvcnQgKiBhcyBkZXBlbmRlbmN5UmVzb2x2ZXIgZnJvbSBcIi4vc3JjL2RlcGVuZGVuY3ktcmVzb2x2ZXIudHNcIjtcbmV4cG9ydCAqIGFzIGV4ZWMgZnJvbSBcIi4vc3JjL2V4ZWMudHNcIjtcbmV4cG9ydCAqIGFzIGZpbGUgZnJvbSBcIi4vc3JjL2ZpbGUudHNcIjtcbmV4cG9ydCAqIGFzIGZpbGVMb2NrIGZyb20gXCIuL3NyYy9maWxlLWxvY2sudHNcIjtcbmV4cG9ydCAqIGFzIHByb2Nlc3NMb2NrIGZyb20gXCIuL3NyYy9wcm9jZXNzLWxvY2sudHNcIjtcbmV4cG9ydCAqIGFzIHByb2plY3RVdGlscyBmcm9tIFwiLi9zcmMvcHJvamVjdC11dGlscy50c1wiO1xuZXhwb3J0IHR5cGUgeyBCaW5Db250ZXh0LCBCaW5TZWxlY3Rpb25Db250ZXh0LCBCaW5TZWxlY3RvciwgQmluVmVyc2lvbk91dHB1dCwgQmluVmVyc2lvblBhcnNlciwgQmluT3B0aW9ucywgQmluUGFja2FnZU9wdGlvbnMsIEJpblVybFJlc29sdmVDb250ZXh0LCBCaW5Tb3VyY2UsIEJpblVybCB9IGZyb20gXCIuL3NyYy9iaW4udHNcIjtcbmV4cG9ydCB7IEJyYW5kQ29udGV4dFNjaGVtYSwgZGVmYXVsdEJyYW5kQ29udGV4dCwgcGFyc2VCcmFuZENvbnRleHQsIGJyYW5kQ29udGV4dEpzb25TY2hlbWEsIGJyYW5kQ29udGV4dFByb21wdCB9IGZyb20gXCIuL3NyYy9icmFuZC1maWxlcy50c1wiO1xuZXhwb3J0IHR5cGUgeyBCcmFuZENvbnRleHQsIEJyYW5kQ29udGV4dElucHV0IH0gZnJvbSBcIi4vc3JjL2JyYW5kLWZpbGVzLnRzXCI7XG5leHBvcnQgeyBNQVhfVENQX1BPUlQsIEVOVl9PTkxZLCB2YWx1ZVNjaGVtYSwgYnVuZGxlUmVzb3VyY2VTY2hlbWEsIGJ1bmRsZUVudkVudHJ5U2NoZW1hLCBidW5kbGVBcHBTY2hlbWEsIGFwcEVudkVudHJ5U2NoZW1hLCBhcHBTY2hlbWEgfSBmcm9tIFwiLi9zcmMvY29uZmlnLXV0aWxzLnRzXCI7XG5leHBvcnQgdHlwZSB7IENvbmZpZ01hcFZhbHVlLCBDb25maWdEYXRhLCBDb25maWdTb3VyY2UsIENvbmZpZ09wdGlvbnMsIENvbmZpZ0ZpbGUgfSBmcm9tIFwiLi9zcmMvY29uZmlnLXV0aWxzLnRzXCI7XG5leHBvcnQgdHlwZSB7IERlcGVuZGVuY3lSZXNvbHZlck9wdGlvbnMsIERlcGVuZGVuY3lJbmZvLCBSZXNvbHZlZE5wbVZlcnNpb24sIE5wbVNwZWNpZmllcklucHV0LCBSZXNvbHZlZE5wbURlcGVuZGVuY2llcywgTWlzc2luZ0RlcGVuZGVuY3lJbmZvIH0gZnJvbSBcIi4vc3JjL2RlcGVuZGVuY3ktcmVzb2x2ZXIudHNcIjtcbmV4cG9ydCB7IENPTU1BTkRfTk9UX0ZPVU5EX0VYSVRfQ09ERSB9IGZyb20gXCIuL3NyYy9leGVjLnRzXCI7XG5leHBvcnQgdHlwZSB7IEV4ZWNTdGRpbywgTGluZUhhbmRsZXIsIExpbmVPdXRwdXRPcHRpb25zLCBTdGRpb09wdGlvbiwgRXhlY1Jlc3VsdCwgQ2hpbGRQcm9jZXNzUmVzdWx0LCBFeGVjT3B0aW9ucywgS2lsbE9wdGlvbnMsIFN5bmNFeGVjU3RkaW8sIFN5bmNFeGVjT3B0aW9ucywgU3Bhd25BcmdzIH0gZnJvbSBcIi4vc3JjL2V4ZWMudHNcIjtcbmV4cG9ydCB0eXBlIHsgRmlsZUxvY2tCYWNrZW5kLCBGaWxlTG9ja0FjcXVpc2l0aW9uLCBGaWxlTG9ja09wdGlvbnMsIEZpbGVMb2NrTGVhc2UgfSBmcm9tIFwiLi9zcmMvZmlsZS1sb2NrLnRzXCI7XG5leHBvcnQgdHlwZSB7IFByb2plY3RDb250ZXh0LCBQcm9qZWN0R2hSZW1vdGUsIFByb2plY3RHaEFjY291bnQsIFJlc29sdmVQcm9qZWN0R2hBY2NvdW50T3B0aW9ucywgTnBtUmVnaXN0cnlPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3Byb2plY3QtdXRpbHMudHNcIjtcbiJdfQ==
|
|
@@ -117,3 +117,4 @@ export type NpmRegistryOptions = {
|
|
|
117
117
|
* `https://registry.npmjs.org/`. `overrideOnly` skips that public default.
|
|
118
118
|
*/
|
|
119
119
|
export declare function npmRegistry(cwd?: string | null, options?: NpmRegistryOptions): net.UrlBuilder | undefined;
|
|
120
|
+
export declare function main(): void;
|
package/lib/src/project-utils.js
CHANGED
|
@@ -603,7 +603,7 @@ function readPackageName(pkgPath) {
|
|
|
603
603
|
return undefined;
|
|
604
604
|
return stringUtils.trimToNull(json.parseRecord(readFileSync(pkgPath, "utf8"))?.name) ?? undefined;
|
|
605
605
|
}
|
|
606
|
-
|
|
606
|
+
export function main() {
|
|
607
607
|
console.log("npm root:", npmRoot());
|
|
608
608
|
console.log("repo root:", gitRoot());
|
|
609
609
|
console.log("package root:", root());
|
|
@@ -620,4 +620,7 @@ if (import.meta.main) {
|
|
|
620
620
|
console.log("project gh account: not found");
|
|
621
621
|
}
|
|
622
622
|
}
|
|
623
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9qZWN0LXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sRUFBUyxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNsQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzdELE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsS0FBSyxJQUFJLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsSUFBSSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFbkUsTUFBTSxZQUFZLEdBQUc7SUFDbkIsY0FBYztJQUNkLGNBQWM7SUFDZCxlQUFlO0lBQ2YsZUFBZTtJQUNmLGNBQWM7Q0FDTixDQUFDO0FBRVgscUZBQXFGO0FBQ3JGLE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxHQUFtQjtJQUN6RCxPQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQy9ELENBQUM7QUFnQ0QsU0FBUywyQkFBMkIsQ0FDbEMsT0FBZSxFQUNmLElBQWMsRUFDZCxHQUFXLEVBQ1gsR0FBdUI7SUFFdkIsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUU7UUFDdEMsR0FBRztRQUNILEdBQUcsRUFBRSxHQUFHLElBQUksT0FBTyxDQUFDLEdB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SUFBSSxTQUFTLENBQUM7QUFDcEcsQ0FBQztBQUVELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQixPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDckMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUNoRCxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixFQUFFLGFBQWEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN0RSxNQUFNLFNBQVMsR0FBRyx1QkFBdUIsRUFBRSxDQUFDO0lBQzVDLElBQUksU0FBUyxFQUFFLENBQUM7UUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRCxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDakUsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixDQUFDLENBQUM7SUFDL0MsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlcG9zaXRvcnksIHBhY2thZ2UsIGJ1bmRsZSwgYW5kIHByb2plY3QgZGlzY292ZXJ5IGZvciBOb2RlIGFuZCBCdW4gdG9vbHMuXG4gKlxuICogVGhpcyBtb2R1bGUgaXMgdGhlIHNoYXJlZCBvd25lciBmb3Igd29ya2luZy1kaXJlY3Rvcnkgbm9ybWFsaXphdGlvbiwgcHJvamVjdFxuICogcm9vdHMsIHJlcG9zaXRvcnkgVVJMcywgcGFja2FnZSBuYW1lcywgYW5kIERhdGFicmlja3MgYnVuZGxlIGNvbnRleHQuIFJldXNlIGl0XG4gKiBpbnN0ZWFkIG9mIGFkZGluZyBwYWNrYWdlLWxvY2FsIHJvb3QtbWFya2VyIHdhbGtzIG9yIEdpdCByZW1vdGUgcGFyc2luZy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgc3Bhd25TeW5jIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgU3RhdHMsIHJlYWRGaWxlU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB7IGJhc2VuYW1lLCBkaXJuYW1lLCBqb2luLCByZXNvbHZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsganNvbiwgbmV0LCBvYmplY3QsIHN0cmluZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IHBhcnNlIGFzIHBhcnNlWWFtbCB9IGZyb20gXCJ5YW1sXCI7XG5pbXBvcnQgeyBjYWNoZWRSZWNvcmQsIHN0YXRTeW5jIGFzIGZpbGVTdGF0U3luYyB9IGZyb20gXCIuL2ZpbGUudHNcIjtcblxuY29uc3QgUk9PVF9NQVJLRVJTID0gW1xuICBcIi5wcm9qZW5yYy50c1wiLFxuICBcIi5wcm9qZW5yYy5qc1wiLFxuICBcIi5wcm9qZW5yYy5tanNcIixcbiAgXCIucHJvamVucmMuY2pzXCIsXG4gIFwicGFja2FnZS5qc29uXCIsXG5dIGFzIGNvbnN0O1xuXG4vKiogUmVzb2x2ZSBhIGJsYW5rLCBudWxsLCBvbWl0dGVkLCByZWxhdGl2ZSwgb3IgYWJzb2x1dGUgY3dkIHRvIGFuIGFic29sdXRlIHBhdGguICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVdvcmtpbmdEaXJlY3RvcnkoY3dkPzogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB7XG4gIHJldHVybiByZXNvbHZlKHN0cmluZ1V0aWxzLnRyaW1Ub051bGwoY3dkKSA/PyBwcm9jZXNzLmN3ZCgpKTtcbn1cblxuLyoqIEEgY29tbWFuZCdzIHN0ZG91dCwgY2xhc3NpZmllZCBhcyBhIGZpbGVzeXN0ZW0gcGF0aCBhbmQvb3IgYSBVUkwuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2plY3RDb250ZXh0IHtcbiAgcmVhZG9ubHkgb3V0cHV0Pzogc3RyaW5nO1xuICAvKiogV2hldGhlciB0aGUgY29tbWFuZCBleGl0ZWQgc3VjY2Vzc2Z1bGx5LiAqL1xuICByZWFkb25seSBzdWNjZXNzOiBib29sZWFuO1xuICAvKiogYG91dHB1dGAgd2hlbiBpdCBuYW1lcyBzb21ldGhpbmcgb24gZGlzay4gKi9cbiAgcmVhZG9ubHkgcGF0aD86IHN0cmluZztcbiAgLyoqIGBmaWxlLnN0YXRTeW5jYCBvZiB7QGxpbmsgcGF0aH0sIHdoZW4gaXQgZXhpc3RzLiAqL1xuICByZWFkb25seSBwYXRoU3RhdHM/OiBTdGF0cztcbiAgLyoqXG4gICAqIGBvdXRwdXRgIHBhcnNlZCBpbnRvIGEgY2hhaW5hYmxlIHtAbGluayBuZXQuVXJsQnVpbGRlcn0sIHdoZW4gaXQgaXMgYSByZWFsXG4gICAqIG5ldHdvcmsgVVJMIC0gYSBub24tYmxhbmsgc2NoZW1lIChub3QgYGZpbGU6YCkgQU5EIGEgbm9uLWJsYW5rIGhvc3RuYW1lLlxuICAgKiBCYXJlIHBhdGhzLCBzY3AtbGlrZSBgZ2l0QGhvc3Q6Li4uYCByZW1vdGVzLCBhbmQgYGZpbGU6YCBVUkxzIHN0YXkgdW5zZXQuXG4gICAqL1xuICByZWFkb25seSB1cmw/OiBuZXQuVXJsQnVpbGRlcjtcbn1cblxuLyoqXG4gKiBiZWNhdXNlIHRoaXMgaXMgY3J1Y2lhbCBkbyBub3QgdXNlIGV4ZWMuc3Bhd25TeW5jXG4gKlxuICogUnVuIGBjb21tYW5kIGFyZ3NgIGluIGBjd2RgIGFuZCBjbGFzc2lmeSBpdHMgc3Rkb3V0OiBgcGF0aGAgKyBgcGF0aFN0YXRzYCB3aGVuXG4gKiB0aGUgb3V0cHV0IG5hbWVzIHNvbWV0aGluZyBvbiBkaXNrLCBgdXJsYCAoYSB7QGxpbmsgbmV0LlVybEJ1aWxkZXJ9KSB3aGVuIGl0XG4gKiBwYXJzZXMgYXMgYSByZWFsIG5ldHdvcmsgVVJMLiBFbXB0eSB7QGxpbmsgUHJvamVjdENvbnRleHR9IG9uIGEgbm9uLXplcm8gZXhpdFxuICogb3IgZW1wdHkgb3V0cHV0LlxuICovXG5pbnRlcmZhY2UgUHJvamVjdENvbW1hbmRPcHRpb25zIHtcbiAgcmVhZG9ubHkgY2FjaGU/OiBib29sZWFuO1xuICByZWFkb25seSBlbnY/OiBOb2RlSlMuUHJvY2Vzc0Vudjtcbn1cblxuZnVuY3Rpb24gcHJvamVjdENvbnRleHRDb21tYW5kT3V0cHV0KFxuICBjb21tYW5kOiBzdHJpbmcsXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICBjd2Q6IHN0cmluZyxcbiAgZW52PzogTm9kZUpTLlByb2Nlc3NFbnYsXG4pOiBQcm9qZWN0Q29udGV4dCB7XG4gIGNvbnN0IHJlc3VsdCA9IHNwYXduU3luYyhjb21tYW5kLCBhcmdzLCB7XG4gICAgY3dkLFxuICAgIGVudjogZW52ID8/IHByb2Nlc3MuZW52LFxuICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJwaXBlXCIsIFwiaWdub3JlXCJdLFxuICB9KTtcbiAgY29uc3Qgb3V0cHV0ID0gcmVzdWx0Py5zdGRvdXQ/LnRvU3RyaW5nKCk/LnRyaW0oKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IDAgJiYgb3V0cHV0KSB7XG4gICAgY29uc3QgcGF0aFN0YXRzID0gZmlsZVN0YXRTeW5jKG91dHB1dCk7XG4gICAgLy8gT25seSBhbiBFWFBMSUNJVCBgc2NoZW1lOi8vLi4uYCBjb3VudHMgYXMgYSBVUkwuIGB1cmxCdWlsZGVyYCBvdGhlcndpc2VcbiAgICAvLyBzeW50aGVzaXplcyBvbmUgKGEgYmFyZSBgZXhhbXBsZS5jb21gIC0+IGBodHRwczovL+KApmAsIGFuIGFic29sdXRlIHBhdGggLT5cbiAgICAvLyBgaHR0cDovL2xvY2FsaG9zdC/igKZgKSwgd2hpY2ggd291bGQgbWlzbGFiZWwgZGlyZWN0b3J5IG91dHB1dHMgYW5kIGJhcmVcbiAgICAvLyB0b2tlbnMgLSBzbyBnYXRlIG9uIHRoZSByYXcgb3V0cHV0IGFscmVhZHkgY2FycnlpbmcgYSBzY2hlbWUgKyBhdXRob3JpdHkuXG4gICAgY29uc3QgdXJsID0gL15bYS16XVthLXowLTkrLi1dKjpcXC9cXC8vaS50ZXN0KG91dHB1dCkgPyBuZXQudXJsQnVpbGRlcihvdXRwdXQpIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IG91dHB1dCwgcGF0aDogcGF0aFN0YXRzID8gb3V0cHV0IDogdW5kZWZpbmVkLCBwYXRoU3RhdHMsIHN1Y2Nlc3M6IHRydWUsIHVybCB9O1xuICB9XG4gIHJldHVybiB7IG91dHB1dCwgc3VjY2VzczogcmVzdWx0LnN0YXR1cyA9PT0gMCB9O1xufVxuXG5jb25zdCBwcm9qZWN0Q29tbWFuZENhY2hlID0gbmV3IE1hcDxzdHJpbmcsIFByb2plY3RDb250ZXh0PigpO1xuXG5mdW5jdGlvbiBwcm9qZWN0Q29udGV4dENvbW1hbmQoXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgYXJnczogc3RyaW5nW10sXG4gIGN3ZD86IHN0cmluZyxcbiAgb3B0aW9uczogUHJvamVjdENvbW1hbmRPcHRpb25zID0ge30sXG4pOiBQcm9qZWN0Q29udGV4dCB7XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZVdvcmtpbmdEaXJlY3RvcnkoY3dkKTtcbiAgY29uc3QgY2FjaGUgPSBvcHRpb25zLmNhY2hlID8/ICghb3B0aW9ucy5lbnYgJiYgcmVzb2x2ZWQgPT09IHJlc29sdmVXb3JraW5nRGlyZWN0b3J5KCkpO1xuICBjb25zdCBrZXkgPSBjYWNoZSA/IEpTT04uc3RyaW5naWZ5KFtyZXNvbHZlZCwgY29tbWFuZCwgLi4uYXJnc10pIDogdW5kZWZpbmVkO1xuICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBjYWNoZWQgPSBwcm9qZWN0Q29tbWFuZENhY2hlLmdldChrZXkpO1xuICAgIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGNhY2hlZDtcbiAgfVxuICBjb25zdCB2YWx1ZSA9IHByb2plY3RDb250ZXh0Q29tbWFuZE91dHB1dChjb21tYW5kLCBhcmdzLCByZXNvbHZlZCwgb3B0aW9ucy5lbnYpO1xuICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHByb2plY3RDb21tYW5kQ2FjaGUuc2V0KGtleSwgdmFsdWUpO1xuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHByb2plY3RDb21tYW5kKGNvbW1hbmQ6IHN0cmluZykge1xuICBjb25zdCBjb250ZXh0ID0gKFxuICAgIGFyZ3M6IHN0cmluZ1tdLFxuICAgIGN3ZD86IHN0cmluZyxcbiAgICBvcHRpb25zPzogUHJvamVjdENvbW1hbmRPcHRpb25zLFxuICApOiBQcm9qZWN0Q29udGV4dCA9PiBwcm9qZWN0Q29udGV4dENvbW1hbmQoY29tbWFuZCwgYXJncywgY3dkLCBvcHRpb25zKTtcbiAgcmV0dXJuIHtcbiAgICBjb250ZXh0LFxuICAgIG91dHB1dChcbiAgICAgIGFyZ3M6IHN0cmluZ1tdLFxuICAgICAgY3dkPzogc3RyaW5nLFxuICAgICAgb3B0aW9ucz86IFByb2plY3RDb21tYW5kT3B0aW9ucyxcbiAgICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgcmV0dXJuIHN0cmluZ1V0aWxzLnRyaW1Ub051bGwoY29udGV4dChhcmdzLCBjd2QsIG9wdGlvbnMpLm91dHB1dCkgPz8gdW5kZWZpbmVkO1xuICAgIH0sXG4gICAgcm9vdChhcmdzOiBzdHJpbmdbXSwgY3dkOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgY29uc3QgcGFyc2VkID0gY29udGV4dChhcmdzLCBjd2QpO1xuICAgICAgcmV0dXJuIHBhcnNlZC5wYXRoU3RhdHM/LmlzRGlyZWN0b3J5KCkgPyBwYXJzZWQucGF0aCA6IHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIHN1Y2NlZWRzKGFyZ3M6IHN0cmluZ1tdLCBjd2Q/OiBzdHJpbmcsIG9wdGlvbnM/OiBQcm9qZWN0Q29tbWFuZE9wdGlvbnMpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBjb250ZXh0KGFyZ3MsIGN3ZCwgb3B0aW9ucykuc3VjY2VzcztcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBnaXRDb21tYW5kID0gcHJvamVjdENvbW1hbmQoXCJnaXRcIik7XG5jb25zdCBnaENvbW1hbmQgPSBwcm9qZWN0Q29tbWFuZChcImdoXCIpO1xuY29uc3QgbnBtQ29tbWFuZCA9IHByb2plY3RDb21tYW5kKFwibnBtXCIpO1xuY29uc3Qgc3NoQ29tbWFuZCA9IHByb2plY3RDb21tYW5kKFwic3NoXCIpO1xuXG5mdW5jdGlvbiBnaXRSZW1vdGVVcmwoY3dkPzogc3RyaW5nLCByZW1vdGUgPSBcIm9yaWdpblwiLCByZWZyZXNoID0gZmFsc2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gZ2l0Q29tbWFuZC5vdXRwdXQoW1wicmVtb3RlXCIsIFwiZ2V0LXVybFwiLCByZW1vdGVdLCBjd2QsIHsgY2FjaGU6ICFyZWZyZXNoIH0pO1xufVxuXG4vKipcbiAqIENsb3Nlc3QgZGlyZWN0b3J5IHdpdGggYSBgcGFja2FnZS5qc29uYCBvciBgbm9kZV9tb2R1bGVzYCwgbWF0Y2hpbmcgYG5wbSBwcmVmaXhgLlxuICpcbiAqIExpZmVjeWNsZSBzY3JpcHRzIGZyb20gbnBtIGFuZCBCdW4gc2V0IGBucG1fY29uZmlnX2xvY2FsX3ByZWZpeGAgdG8gdGhhdFxuICogZGlyZWN0b3J5LiBSZWFkIGl0IGZpcnN0IHdoZW4gcmVzb2x2aW5nIHRoaXMgcHJvY2VzcydzIGN3ZCBzbyBhIG1pc3NpbmcgbnBtXG4gKiBDTEkgaXMgbm90IHJlcXVpcmVkLiBgbnBtX2NvbmZpZ19wcmVmaXhgIC8gYFBSRUZJWGAgYXJlIHRoZSBnbG9iYWwgaW5zdGFsbFxuICogcHJlZml4IGFuZCBtdXN0IG5vdCBiZSB1c2VkIGhlcmUuXG4gKlxuICogQnVuIGhhcyBubyBwcmVmaXggY29tbWFuZCAoYGJ1biBwbSBiaW5gIGlzIHRoZSBgLmJpbmAgZGlyZWN0b3J5KS4gcG5wbSdzXG4gKiBgcHJlZml4YCBjb21tYW5kIGlzIHVuaW1wbGVtZW50ZWQ7IGBwbnBtIHJvb3RgIHByaW50cyBgbm9kZV9tb2R1bGVzYC5cbiAqL1xuZnVuY3Rpb24gbnBtUm9vdChjd2Q/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVXb3JraW5nRGlyZWN0b3J5KGN3ZCk7XG4gIGlmIChyZXNvbHZlZCA9PT0gcmVzb2x2ZVdvcmtpbmdEaXJlY3RvcnkoKSkge1xuICAgIGNvbnN0IGZyb21FbnYgPSBlbnZEaXJlY3RvcnkocHJvY2Vzcy5lbnYubnBtX2NvbmZpZ19sb2NhbF9wcmVmaXgpO1xuICAgIGlmIChmcm9tRW52KSByZXR1cm4gZnJvbUVudjtcbiAgfVxuICByZXR1cm4gbnBtQ29tbWFuZC5yb290KFtcInByZWZpeFwiXSwgcmVzb2x2ZWQpO1xufVxuXG5mdW5jdGlvbiBlbnZEaXJlY3RvcnkodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHBhdGggPSBzdHJpbmdVdGlscy50cmltVG9OdWxsKHZhbHVlKTtcbiAgaWYgKCFwYXRoKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmUocGF0aCk7XG4gIHJldHVybiBmaWxlU3RhdFN5bmMocmVzb2x2ZWQpPy5pc0RpcmVjdG9yeSgpID8gcmVzb2x2ZWQgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdpdFJvb3QoY3dkPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlV29ya2luZ0RpcmVjdG9yeShjd2QpO1xuICByZXR1cm4gZ2l0Q29tbWFuZC5yb290KFtcInJldi1wYXJzZVwiLCBcIi0tc2hvdy10b3BsZXZlbFwiXSwgcmVzb2x2ZWQpO1xufVxuXG4vKiogUmVzb2x2ZSB0aGUgbmVhcmVzdCBwcm9qZWN0IHJvb3Qgd2l0aG91dCB3YWxraW5nIGFib3ZlIGl0cyBucG0gb3IgR2l0IGJvdW5kYXJ5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvb3QoY3dkPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlV29ya2luZ0RpcmVjdG9yeShjd2QpO1xuICBsZXQgY3VycmVudCA9IHJlc29sdmVkO1xuXG4gIGlmICghZmlsZVN0YXRTeW5jKGN1cnJlbnQpPy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgY3VycmVudCA9IGRpcm5hbWUoY3VycmVudCk7XG4gIH1cbiAgY29uc3QgYm91bmRhcmllcyA9IG5ldyBTZXQoXG4gICAgW25wbUJvdW5kYXJ5KHJlc29sdmVkKSwgZ2l0Um9vdChyZXNvbHZlZCldXG4gICAgICAuZmlsdGVyKChwYXRoKTogcGF0aCBpcyBzdHJpbmcgPT4gcGF0aCAhPT0gdW5kZWZpbmVkKVxuICAgICAgLm1hcCgocGF0aCkgPT4gcmVzb2x2ZShwYXRoKSksXG4gICk7XG4gIGNvbnN0IGhhc0JvdW5kYXJ5ID0gYm91bmRhcmllcy5zaXplID4gMDtcbiAgbGV0IGJlc3Q6IHsgZGlyOiBzdHJpbmc7IHByaW9yaXR5OiBudW1iZXIgfSB8IHVuZGVmaW5lZDtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBmb3IgKGNvbnN0IFtwcmlvcml0eSwgbWFya2VyXSBvZiBST09UX01BUktFUlMuZW50cmllcygpKSB7XG4gICAgICBpZiAoZmlsZVN0YXRTeW5jKGpvaW4oY3VycmVudCwgbWFya2VyKSk/LmlzRmlsZSgpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBiZXN0ID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICBwcmlvcml0eSA8IGJlc3QucHJpb3JpdHkgfHxcbiAgICAgICAgICAocHJpb3JpdHkgPT09IGJlc3QucHJpb3JpdHkgJiYgY3VycmVudC5sZW5ndGggPCBiZXN0LmRpci5sZW5ndGgpXG4gICAgICAgICkge1xuICAgICAgICAgIGJlc3QgPSB7IGRpcjogY3VycmVudCwgcHJpb3JpdHkgfTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFoYXNCb3VuZGFyeSAmJiBiZXN0KSB7XG4gICAgICByZXR1cm4gYmVzdC5kaXI7XG4gICAgfVxuICAgIGlmIChib3VuZGFyaWVzLmhhcyhjdXJyZW50KSkge1xuICAgICAgcmV0dXJuIGJlc3Q/LmRpcjtcbiAgICB9XG4gICAgY29uc3QgcGFyZW50ID0gZGlybmFtZShjdXJyZW50KTtcbiAgICBpZiAocGFyZW50ID09PSBjdXJyZW50KSB7XG4gICAgICByZXR1cm4gYmVzdD8uZGlyO1xuICAgIH1cbiAgICBjdXJyZW50ID0gcGFyZW50O1xuICB9XG59XG5cbmZ1bmN0aW9uIG5wbUJvdW5kYXJ5KGN3ZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgY2FuZGlkYXRlID0gbnBtUm9vdChjd2QpO1xuICBpZiAoIWNhbmRpZGF0ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlKGNhbmRpZGF0ZSk7XG4gIGlmIChmaWxlU3RhdFN5bmMoam9pbihyZXNvbHZlZCwgXCJwYWNrYWdlLmpzb25cIikpPy5pc0ZpbGUoKSkgcmV0dXJuIHJlc29sdmVkO1xuICBpZiAoZmlsZVN0YXRTeW5jKGpvaW4ocmVzb2x2ZWQsIFwibm9kZV9tb2R1bGVzXCIpKT8uaXNEaXJlY3RvcnkoKSkgcmV0dXJuIHJlc29sdmVkO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgZ2l0IHJlbW90ZSBVUkwgKGBodHRwczovLy4uLmAsIGBnaXRAaG9zdDpvd25lci9yZXBvLmdpdGAsIGV0Yy4pIGFuZFxuICogcmV0dXJuIHRoZSByZXBvIHNlZ21lbnQsIHN0cmlwcGluZyBhbnkgYC5naXRgIHN1ZmZpeC4gUmV0dXJucyBgdW5kZWZpbmVkYCBmb3JcbiAqIGVtcHR5IG9yIHVucGFyc2FibGUgaW5wdXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUdpdFJlbW90ZSh1cmw6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHRyaW1tZWQgPSB1cmwudHJpbSgpO1xuICBpZiAoIXRyaW1tZWQpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3Qgc2NwID0gL15bXkBdK0BbXjpdKzooLispJC9pLmV4ZWModHJpbW1lZCk7XG4gIGlmIChzY3ApIHJldHVybiBsYXN0UGF0aFNlZ21lbnQoc2NwWzFdID8/IFwiXCIpO1xuXG4gIHRyeSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHRyaW1tZWQucmVwbGFjZSgvXFwuZ2l0JC9pLCBcIlwiKTtcbiAgICBjb25zdCBwYXRobmFtZSA9IG5ldyBVUkwobm9ybWFsaXplZCkucGF0aG5hbWU7XG4gICAgY29uc3Qgc2VnbWVudCA9IHBhdGhuYW1lLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbikuYXQoLTEpO1xuICAgIHJldHVybiBzZWdtZW50ID8gbGFzdFBhdGhTZWdtZW50KHNlZ21lbnQpIDogdW5kZWZpbmVkO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIGxhc3RQYXRoU2VnbWVudChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzZWdtZW50ID0gcGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKEJvb2xlYW4pLmF0KC0xKSA/PyBwYXRoO1xuICByZXR1cm4gc2VnbWVudC5yZXBsYWNlKC9cXC5naXQkL2ksIFwiXCIpO1xufVxuXG4vKipcbiAqIFlpZWxkIGNhbmRpZGF0ZSBwcm9qZWN0LXJvb3QgZGlyZWN0b3JpZXMgZm9yIGBjd2RgLCBpbiBwcmlvcml0eSBvcmRlcjogdGhlXG4gKiBgbnBtIHByZWZpeGAsIHRoZSBnaXQgdG9wLWxldmVsLCB0aGVuIGBjd2RgIGl0c2VsZi4gRHVwbGljYXRlcyBhcmUgc2tpcHBlZDtcbiAqIG9ubHkgZXhpc3RpbmcgZGlyZWN0b3JpZXMgYXJlIHlpZWxkZWQgKGV4Y2VwdCB0aGUgZmluYWwgYGN3ZGAgZmFsbGJhY2spLlxuICovXG5leHBvcnQgZnVuY3Rpb24qIHJlc29sdmVQcm9qZWN0Um9vdHMoY3dkPzogc3RyaW5nKTogR2VuZXJhdG9yPHN0cmluZz4ge1xuICBjb25zdCBiYXNlID0gcmVzb2x2ZVdvcmtpbmdEaXJlY3RvcnkoY3dkKTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBbbnBtUm9vdChiYXNlKSwgZ2l0Um9vdChiYXNlKV0pIHtcbiAgICBpZiAoIWNhbmRpZGF0ZSkgY29udGludWU7XG4gICAgY29uc3QgZGlyID0gcmVzb2x2ZShjYW5kaWRhdGUpO1xuICAgIGlmIChzZWVuLmhhcyhkaXIpKSBjb250aW51ZTtcbiAgICBzZWVuLmFkZChkaXIpO1xuICAgIGlmIChmaWxlU3RhdFN5bmMoZGlyKT8uaXNEaXJlY3RvcnkoKSkgeWllbGQgZGlyO1xuICB9XG4gIGlmICghc2Vlbi5oYXMoYmFzZSkpIHlpZWxkIGJhc2U7XG59XG5cbi8qKiBUaGUgbmVhcmVzdCBhbmNlc3RvciBvZiBgY3dkYCAoZnJvbSB7QGxpbmsgcmVzb2x2ZVByb2plY3RSb290c30pIHdpdGggYSBgcGFja2FnZS5qc29uYC4gKi9cbmZ1bmN0aW9uIHdvcmtzcGFjZVJvb3QoY3dkPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IGxhc3Q6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCBkaXIgb2YgcmVzb2x2ZVByb2plY3RSb290cyhjd2QpKSB7XG4gICAgaWYgKGZpbGVTdGF0U3luYyhyZXNvbHZlKGRpciwgXCJwYWNrYWdlLmpzb25cIikpPy5pc0ZpbGUoKSkgcmV0dXJuIGRpcjtcbiAgICBsYXN0ID0gZGlyO1xuICB9XG4gIHJldHVybiBsYXN0ID8/IHJlc29sdmVXb3JraW5nRGlyZWN0b3J5KGN3ZCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGh1bWFuLWZyaWVuZGx5IHByb2plY3QgbmFtZSBmb3IgdGhlIHJlcG8gcm9vdGVkIGF0IGBjd2RgOlxuICogYHBhY2thZ2UuanNvbmAgYG5hbWVgLCB0aGVuIHRoZSBnaXQgcmVtb3RlJ3MgcmVwbyBuYW1lLCB0aGVuIHRoZSByb290XG4gKiBkaXJlY3RvcnkncyBiYXNlbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5hbWUoY3dkPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlV29ya2luZ0RpcmVjdG9yeShjd2QpO1xuICBjb25zdCByb290RGlyID0gd29ya3NwYWNlUm9vdChyZXNvbHZlZCk7XG5cbiAgY29uc3QgZnJvbVBhY2thZ2UgPSByZWFkUGFja2FnZU5hbWUocmVzb2x2ZShyb290RGlyLCBcInBhY2thZ2UuanNvblwiKSk7XG4gIGlmIChmcm9tUGFja2FnZSkgcmV0dXJuIGZyb21QYWNrYWdlO1xuXG4gIGNvbnN0IHJlbW90ZSA9IGdpdFJlbW90ZVVybChyb290RGlyKTtcbiAgY29uc3QgZnJvbUdpdCA9IHJlbW90ZSA/IHBhcnNlR2l0UmVtb3RlKHJlbW90ZSkgOiB1bmRlZmluZWQ7XG4gIGlmIChmcm9tR2l0KSByZXR1cm4gZnJvbUdpdDtcblxuICByZXR1cm4gYmFzZW5hbWUocm9vdERpcik7XG59XG5cbi8qKlxuICogVGhlIEdpdEh1YiBDTEkncyBjYW5vbmljYWwgcmVwbyBVUkwgLSB0aGUgZWFzeSBwYXRoLiBgZ2hgIGFscmVhZHkgcmVzb2x2ZXMgdGhlXG4gKiB0cnVlIGhvc3QgKG5vIHNzaC1hbGlhcyBwYXJzaW5nKSBhbmQgcHJpbnRzIGEgY2xlYW4gYGh0dHBzOi8vaG9zdC9vd25lci9yZXBvYC5cbiAqIGB1bmRlZmluZWRgIHdoZW4gYGdoYCBpcyBhYnNlbnQsIHVuYXV0aGVudGljYXRlZCwgb3IgdGhlIGRpciBpc24ndCBhIEdIIHJlcG8uXG4gKi9cbmZ1bmN0aW9uIHJlcG9zaXRvcnlVcmxGcm9tR2goY3dkPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYWNjb3VudCA9IHJlc29sdmVQcm9qZWN0R2hBY2NvdW50KGN3ZCk7XG4gIGlmICghYWNjb3VudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3Qgb3V0ID0gZ2hDb21tYW5kLm91dHB1dChcbiAgICBbXCJyZXBvXCIsIFwidmlld1wiLCBhY2NvdW50LnJlbW90ZS5yZXBvc2l0b3J5LCBcIi0tanNvblwiLCBcInVybFwiXSxcbiAgICBhY2NvdW50LnJvb3QsXG4gICAgeyBjYWNoZTogZmFsc2UsIGVudjogYWNjb3VudC5lbnYgfSxcbiAgKTtcbiAgcmV0dXJuIHN0cmluZ1V0aWxzLnRyaW1Ub051bGwoanNvbi5wYXJzZVJlY29yZChvdXQpPy51cmwpID8/IHVuZGVmaW5lZDtcbn1cblxuLyoqIFJlc29sdmUgYW4gc3NoIGhvc3QgYWxpYXMgKGB+Ly5zc2gvY29uZmlnYCkgdG8gaXRzIGVmZmVjdGl2ZSBgaG9zdG5hbWVgIHZpYSBgc3NoIC1HYC4gKi9cbmZ1bmN0aW9uIHJlc29sdmVTc2hIb3N0TmFtZShob3N0OiBzdHJpbmcsIGN3ZD86IHN0cmluZywgcmVmcmVzaCA9IGZhbHNlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbGluZSA9IHNzaENvbW1hbmRcbiAgICAuY29udGV4dChbXCItR1wiLCBob3N0XSwgY3dkLCB7IGNhY2hlOiAhcmVmcmVzaCB9KVxuICAgIC5vdXRwdXQ/LnNwbGl0KFwiXFxuXCIpXG4gICAgLmZpbmQoKGwpID0+IC9eaG9zdG5hbWVcXHMvaS50ZXN0KGwudHJpbSgpKSk7XG4gIGNvbnN0IG5hbWUgPSBsaW5lPy50cmltKCkuc3BsaXQoL1xccysvKVsxXTtcbiAgcmV0dXJuIG5hbWUgJiYgbmFtZSAhPT0gaG9zdCA/IG5hbWUgOiB1bmRlZmluZWQ7XG59XG5cbi8qKiBQYXJzZWQgR2l0SHViLXN0eWxlIHJlbW90ZSBjb29yZGluYXRlcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvamVjdEdoUmVtb3RlIHtcbiAgLyoqIEFjY291bnQgaGludGVkIGJ5IGFuIFNTSCBhbGlhcyBzdWNoIGFzIGBnaXRAZ2l0aHViLXdvcms6YC4gKi9cbiAgcmVhZG9ubHkgYWNjb3VudEhpbnQ/OiBzdHJpbmc7XG4gIC8qKiBIb3N0IHdyaXR0ZW4gaW4gdGhlIHJlbW90ZSBiZWZvcmUgU1NIIGFsaWFzIHJlc29sdXRpb24uICovXG4gIHJlYWRvbmx5IGhvc3Q6IHN0cmluZztcbiAgLyoqIGBvd25lci9yZXBvc2l0b3J5YCBwYXRoLiAqL1xuICByZWFkb25seSByZXBvc2l0b3J5OiBzdHJpbmc7XG59XG5cbi8qKiBBdXRoZW50aWNhdGVkIEdpdEh1YiBDTEkgYWNjb3VudCBzZWxlY3RlZCBmb3Igb25lIHByb2plY3QgcmVtb3RlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9qZWN0R2hBY2NvdW50IHtcbiAgLyoqIEVudmlyb25tZW50IHRvIHBhc3MgdG8gZXZlcnkgYGdoYCBjb21tYW5kIGZvciB0aGlzIHByb2plY3QuICovXG4gIHJlYWRvbmx5IGVudjogTm9kZUpTLlByb2Nlc3NFbnY7XG4gIC8qKiBBY3R1YWwgR2l0SHViIGhvc3Qgc2VsZWN0ZWQgZnJvbSBgZ2ggYXV0aCBzdGF0dXNgLiAqL1xuICByZWFkb25seSBob3N0OiBzdHJpbmc7XG4gIC8qKiBBdXRoZW50aWNhdGVkIEdpdEh1YiBsb2dpbi4gKi9cbiAgcmVhZG9ubHkgbG9naW46IHN0cmluZztcbiAgLyoqIFBhcnNlZCBwcm9qZWN0IHJlbW90ZS4gKi9cbiAgcmVhZG9ubHkgcmVtb3RlOiBQcm9qZWN0R2hSZW1vdGU7XG4gIC8qKiBSZXNvbHZlZCBwcm9qZWN0IGRpcmVjdG9yeSB1c2VkIGZvciBjb21tYW5kIGV4ZWN1dGlvbi4gKi9cbiAgcmVhZG9ubHkgcm9vdDogc3RyaW5nO1xufVxuXG4vKiogT3B0aW9ucyBmb3IgY2FjaGVkIHByb2plY3QgR2l0SHViLWFjY291bnQgcmVzb2x1dGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZVByb2plY3RHaEFjY291bnRPcHRpb25zIHtcbiAgLyoqIEdpdCByZW1vdGUgbmFtZS4gRGVmYXVsdHMgdG8gYG9yaWdpbmAuICovXG4gIHJlYWRvbmx5IHJlbW90ZT86IHN0cmluZztcbiAgLyoqIFJlLXJlYWQgZ2l0LCBTU0gsIGFuZCBHaXRIdWIgQ0xJIHN0YXRlIGluc3RlYWQgb2YgdXNpbmcgdGhlIHByb2Nlc3MgY2FjaGUuICovXG4gIHJlYWRvbmx5IHJlZnJlc2g/OiBib29sZWFuO1xufVxuXG4vKiogUGFyc2UgSFRUUFMsIFNTSCBVUkwsIG9yIHNjcC1saWtlIEdpdEh1YiByZW1vdGUgY29vcmRpbmF0ZXMuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQcm9qZWN0R2hSZW1vdGUocmVtb3RlVXJsOiBzdHJpbmcpOiBQcm9qZWN0R2hSZW1vdGUgfCB1bmRlZmluZWQge1xuICBjb25zdCB2YWx1ZSA9IHJlbW90ZVVybC50cmltKCkucmVwbGFjZSgvXFwuZ2l0JC9pLCBcIlwiKTtcbiAgY29uc3QgaHR0cHMgPSAvXmh0dHBzPzpcXC9cXC8oW14vXSspXFwvKFteL10rKVxcLyhbXi9dKykkL2kuZXhlYyh2YWx1ZSk7XG4gIGlmIChodHRwcykgcmV0dXJuIHsgaG9zdDogaHR0cHNbMV0hLCByZXBvc2l0b3J5OiBgJHtodHRwc1syXX0vJHtodHRwc1szXX1gIH07XG4gIGNvbnN0IHNzaCA9IC9eKD86c3NoOlxcL1xcLyk/Z2l0QChbXi86XSspWzovXShbXi9dKylcXC8oW14vXSspJC9pLmV4ZWModmFsdWUpO1xuICBpZiAoIXNzaCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgYWNjb3VudEhpbnQgPSAvXmdpdGh1Yi0oLispJC9pLmV4ZWMoc3NoWzFdISk/LlsxXTtcbiAgcmV0dXJuIHtcbiAgICAuLi4oYWNjb3VudEhpbnQgPyB7IGFjY291bnRIaW50IH0gOiB7fSksXG4gICAgaG9zdDogc3NoWzFdISxcbiAgICByZXBvc2l0b3J5OiBgJHtzc2hbMl19LyR7c3NoWzNdfWAsXG4gIH07XG59XG5cbmNvbnN0IHByb2plY3RHaEFjY291bnRDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBQcm9qZWN0R2hBY2NvdW50IHwgbnVsbD4oKTtcblxuLyoqXG4gKiBSZXNvbHZlIGFuZCBjYWNoZSB0aGUgYXV0aGVudGljYXRlZCBgZ2hgIGFjY291bnQgdGhhdCBjYW4gYWNjZXNzIGEgcHJvamVjdCdzXG4gKiByZW1vdGUuIFNTSCBhbGlhcyBhY2NvdW50IGhpbnRzIHdpbiwgZm9sbG93ZWQgYnkgdGhlIGFjdGl2ZSBhY2NvdW50IG9uIHRoZVxuICogZWZmZWN0aXZlIFNTSC9IVFRQUyBob3N0LCB0aGVuIG90aGVyIGF1dGhlbnRpY2F0ZWQgYWNjb3VudHMuIEV2ZXJ5IGNhbmRpZGF0ZVxuICogaXMgdmVyaWZpZWQgYWdhaW5zdCB0aGUgcmVwb3NpdG9yeSBiZWZvcmUgaXQgaXMgcmV0dXJuZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUHJvamVjdEdoQWNjb3VudChcbiAgY3dkPzogc3RyaW5nLFxuICBvcHRpb25zOiBSZXNvbHZlUHJvamVjdEdoQWNjb3VudE9wdGlvbnMgPSB7fSxcbik6IFByb2plY3RHaEFjY291bnQgfCB1bmRlZmluZWQge1xuICBjb25zdCByb290ID0gcmVzb2x2ZVdvcmtpbmdEaXJlY3RvcnkoY3dkKTtcbiAgY29uc3QgcmVtb3RlTmFtZSA9IHN0cmluZ1V0aWxzLnRyaW1Ub051bGwob3B0aW9ucy5yZW1vdGUpID8/IFwib3JpZ2luXCI7XG4gIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KFtcbiAgICByb290LFxuICAgIHJlbW90ZU5hbWUsXG4gICAgaG9tZWRpcigpLFxuICAgIHByb2Nlc3MuZW52LkdIX0NPTkZJR19ESVIgPz8gXCJcIixcbiAgXSk7XG4gIGlmICghb3B0aW9ucy5yZWZyZXNoICYmIHByb2plY3RHaEFjY291bnRDYWNoZS5oYXMoa2V5KSkge1xuICAgIHJldHVybiBwcm9qZWN0R2hBY2NvdW50Q2FjaGUuZ2V0KGtleSkgPz8gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJlbW90ZVVybCA9IGdpdFJlbW90ZVVybChyb290LCByZW1vdGVOYW1lLCBvcHRpb25zLnJlZnJlc2gpO1xuICBpZiAoIXJlbW90ZVVybCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgcmVtb3RlID0gcGFyc2VQcm9qZWN0R2hSZW1vdGUocmVtb3RlVXJsKTtcbiAgaWYgKCFyZW1vdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGVmZmVjdGl2ZUhvc3QgPSByZXNvbHZlU3NoSG9zdE5hbWUocmVtb3RlLmhvc3QsIHJvb3QsIG9wdGlvbnMucmVmcmVzaCkgPz8gcmVtb3RlLmhvc3Q7XG5cbiAgY29uc3Qgc3RhdHVzID0gZ2hDb21tYW5kLm91dHB1dChbXCJhdXRoXCIsIFwic3RhdHVzXCIsIFwiLS1qc29uXCIsIFwiaG9zdHNcIl0sIHJvb3QsIHtcbiAgICBjYWNoZTogZmFsc2UsXG4gIH0pO1xuICBpZiAoIXN0YXR1cykge1xuICAgIHByb2plY3RHaEFjY291bnRDYWNoZS5zZXQoa2V5LCBudWxsKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBwYXJzZWQ6IHtcbiAgICBob3N0cz86IFJlY29yZDxcbiAgICAgIHN0cmluZyxcbiAgICAgIEFycmF5PHsgYWN0aXZlPzogYm9vbGVhbjsgaG9zdD86IHN0cmluZzsgbG9naW4/OiBzdHJpbmc7IHN0YXRlPzogc3RyaW5nIH0+XG4gICAgPjtcbiAgfTtcbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBKU09OLnBhcnNlKHN0YXR1cykgYXMgdHlwZW9mIHBhcnNlZDtcbiAgfSBjYXRjaCB7XG4gICAgcHJvamVjdEdoQWNjb3VudENhY2hlLnNldChrZXksIG51bGwpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgYWNjb3VudHMgPSBPYmplY3QuZW50cmllcyhwYXJzZWQuaG9zdHMgPz8ge30pLmZsYXRNYXAoKFtob3N0LCBlbnRyaWVzXSkgPT5cbiAgICBlbnRyaWVzXG4gICAgICAuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkuc3RhdGUgPT09IFwic3VjY2Vzc1wiICYmIGVudHJ5LmxvZ2luKVxuICAgICAgLm1hcCgoZW50cnkpID0+ICh7XG4gICAgICAgIGFjdGl2ZTogZW50cnkuYWN0aXZlID09PSB0cnVlLFxuICAgICAgICBob3N0OiBlbnRyeS5ob3N0ID8/IGhvc3QsXG4gICAgICAgIGxvZ2luOiBlbnRyeS5sb2dpbiEsXG4gICAgICB9KSksXG4gICk7XG4gIGFjY291bnRzLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiB7XG4gICAgY29uc3QgcmFuayA9IChhY2NvdW50OiAodHlwZW9mIGFjY291bnRzKVtudW1iZXJdKTogbnVtYmVyID0+IHtcbiAgICAgIGlmIChyZW1vdGUuYWNjb3VudEhpbnQgJiYgYWNjb3VudC5sb2dpbiA9PT0gcmVtb3RlLmFjY291bnRIaW50KSByZXR1cm4gMDtcbiAgICAgIGlmIChhY2NvdW50Lmhvc3QgPT09IGVmZmVjdGl2ZUhvc3QgJiYgYWNjb3VudC5hY3RpdmUpIHJldHVybiAxO1xuICAgICAgaWYgKGFjY291bnQuaG9zdCA9PT0gZWZmZWN0aXZlSG9zdCkgcmV0dXJuIDI7XG4gICAgICBpZiAoYWNjb3VudC5hY3RpdmUpIHJldHVybiAzO1xuICAgICAgcmV0dXJuIDQ7XG4gICAgfTtcbiAgICByZXR1cm4gcmFuayhsZWZ0KSAtIHJhbmsocmlnaHQpO1xuICB9KTtcblxuICBmb3IgKGNvbnN0IGFjY291bnQgb2YgYWNjb3VudHMpIHtcbiAgICBjb25zdCB0b2tlbiA9IGdoQ29tbWFuZC5vdXRwdXQoXG4gICAgICBbXCJhdXRoXCIsIFwidG9rZW5cIiwgXCItLWhvc3RuYW1lXCIsIGFjY291bnQuaG9zdCwgXCItLXVzZXJcIiwgYWNjb3VudC5sb2dpbl0sXG4gICAgICByb290LFxuICAgICAgeyBjYWNoZTogZmFsc2UgfSxcbiAgICApO1xuICAgIGlmICghdG9rZW4pIGNvbnRpbnVlO1xuICAgIGNvbnN0IGVudiA9IHsgLi4ucHJvY2Vzcy5lbnYsIEdIX0hPU1Q6IGFjY291bnQuaG9zdCwgR0hfVE9LRU46IHRva2VuIH07XG4gICAgaWYgKFxuICAgICAgIWdoQ29tbWFuZC5zdWNjZWVkcyhcbiAgICAgICAgW1wiYXBpXCIsIFwiLS1ob3N0bmFtZVwiLCBhY2NvdW50Lmhvc3QsIGByZXBvcy8ke3JlbW90ZS5yZXBvc2l0b3J5fWAsIFwiLS1zaWxlbnRcIl0sXG4gICAgICAgIHJvb3QsXG4gICAgICAgIHsgY2FjaGU6IGZhbHNlLCBlbnYgfSxcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBzZWxlY3RlZCA9IHsgZW52LCBob3N0OiBhY2NvdW50Lmhvc3QsIGxvZ2luOiBhY2NvdW50LmxvZ2luLCByZW1vdGUsIHJvb3QgfTtcbiAgICBwcm9qZWN0R2hBY2NvdW50Q2FjaGUuc2V0KGtleSwgc2VsZWN0ZWQpO1xuICAgIHJldHVybiBzZWxlY3RlZDtcbiAgfVxuICBwcm9qZWN0R2hBY2NvdW50Q2FjaGUuc2V0KGtleSwgbnVsbCk7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRmFsbGJhY2s6IG5vcm1hbGl6ZSBgZ2l0IHJlbW90ZSBnZXQtdXJsIG9yaWdpbmAgdG8gYSBwbGFpblxuICogYGh0dHBzOi8vaG9zdC9vd25lci9yZXBvYCBVUkwuIHNjcC1saWtlIC8gYHNzaDovL2AgLyBgZ2l0Oi8vYCAvXG4gKiBlbWJlZGRlZC1jcmVkZW50aWFsIGZvcm1zIGFyZSByZXdyaXR0ZW4gdG8gaHR0cHMsIGFuZCBhbiBzc2ggaG9zdCBhbGlhcyBpc1xuICogZm9sbG93ZWQgdG8gaXRzIHJlYWwgaG9zdG5hbWUuXG4gKi9cbmZ1bmN0aW9uIHJlcG9zaXRvcnlVcmxGcm9tR2l0KGN3ZD86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHJhdyA9IGdpdFJlbW90ZVVybChjd2QpO1xuICBpZiAoIXJhdykgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAvLyBOb3JtYWxpemUgdGhlIHNjaGVtZSB0byBodHRwcyBhdCB0aGUgc3RyaW5nIGxldmVsIGZpcnN0OiB0aGUgV0hBVFdHIGBVUkxgXG4gIC8vIHBhcnNlciBjYW4ndCBjb252ZXJ0IGEgbm9uLXNwZWNpYWwgc2NoZW1lIChgc3NoYC9gZ2l0YCkgdG8gYGh0dHBzYCAodGhlXG4gIC8vIGBwcm90b2NvbGAgc2V0dGVyIG5vLW9wcyksIGFuZCBzY3AtbGlrZSBgZ2l0QGhvc3Q6b3duZXIvcmVwb2AgaXNuJ3QgYSBVUkwgYXRcbiAgLy8gYWxsLiBSZXdyaXRlIGJvdGggaW50byBhbiBgaHR0cHM6Ly9gIHN0cmluZywgdGhlbiBsZXQge0BsaW5rIG5ldC51cmxCdWlsZGVyfVxuICAvLyBvd24gdGhlIHN0cnVjdHVyZWQgZWRpdHMgKHN0cmlwIGNyZWRlbnRpYWxzLCBzd2FwIHRoZSBob3N0KS5cbiAgbGV0IGh0dHBzID0gcmF3LnJlcGxhY2UoL15naXRcXCsvLCBcIlwiKTtcbiAgY29uc3Qgc2NwID0gL15bXkBdK0AoW146XSspOiguKykkLy5leGVjKGh0dHBzKTtcbiAgaWYgKHNjcCkgaHR0cHMgPSBgaHR0cHM6Ly8ke3NjcFsxXX0vJHtzY3BbMl19YDtcbiAgaHR0cHMgPSBodHRwcy5yZXBsYWNlKC9eKHNzaHxnaXQpOlxcL1xcLy8sIFwiaHR0cHM6Ly9cIik7XG5cbiAgbGV0IGJ1aWxkZXIgPSBuZXQudXJsQnVpbGRlcihodHRwcyk7XG4gIGlmICghYnVpbGRlcikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgLy8gRHJvcCBhbnkgZW1iZWRkZWQgYHVzZXJbOnBhc3NdQGAgY3JlZGVudGlhbHMuXG4gIGlmIChidWlsZGVyLnVzZXJuYW1lIHx8IGJ1aWxkZXIucGFzc3dvcmQpIHtcbiAgICBidWlsZGVyID0gYnVpbGRlci53aXRoKFwidXNlcm5hbWVcIiwgXCJcIikud2l0aChcInBhc3N3b3JkXCIsIFwiXCIpO1xuICB9XG4gIC8vIEZvbGxvdyBhbiBzc2ggaG9zdCBhbGlhcyB0byB0aGUgdHJ1ZSBob3N0LlxuICBjb25zdCByZWFsSG9zdCA9IHJlc29sdmVTc2hIb3N0TmFtZShidWlsZGVyLmhvc3RuYW1lLCBjd2QpO1xuICBpZiAocmVhbEhvc3QpIGJ1aWxkZXIgPSBidWlsZGVyLndpdGgoXCJob3N0bmFtZVwiLCByZWFsSG9zdCk7XG5cbiAgcmV0dXJuIGAke2J1aWxkZXIub3JpZ2lufSR7YnVpbGRlci5wYXRobmFtZS5yZXBsYWNlKC9cXC5naXQkLywgXCJcIil9YDtcbn1cblxuLyoqXG4gKiBUaGUgcmVwbydzIGNhbm9uaWNhbCByZW1vdGUgVVJMLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZXJlIGlzIG5vIGdpdCByZW1vdGUuXG4gKiBUcmllcyBgZ2ggcmVwbyB2aWV3YCBmaXJzdCAoaG9zdC1hY2N1cmF0ZSwgbm8gcGFyc2luZyksIHRoZW4gbm9ybWFsaXplc1xuICogYGdpdCByZW1vdGUgZ2V0LXVybCBvcmlnaW5gLiBBIGJsYW5rLCBvbWl0dGVkLCBvciBleHBsaWNpdGx5IGN1cnJlbnQgYGN3ZGBcbiAqIHJldXNlcyBjYWNoZWQgY29tbWFuZCBwcm9iZXM7IGFub3RoZXIgcmVzb2x2ZWQgZGlyZWN0b3J5IGV4ZWN1dGVzIGRpcmVjdGx5LlxuICpcbiAqIEBwYXJhbSBjd2QgLSBkaXJlY3RvcnkgdG8gcmVzb2x2ZSBmcm9tIChkZWZhdWx0cyB0byBgcHJvY2Vzcy5jd2QoKWApLlxuICogQHBhcmFtIGZvcm1hdCAtIGBcImh0dHBzXCJgIChkZWZhdWx0KSB5aWVsZHMgYGh0dHBzOi8vaG9zdC9vd25lci9yZXBvYDtcbiAqICAgYFwibnBtXCJgIHlpZWxkcyBucG0ncyBgZ2l0K2h0dHBzOi8vaG9zdC9vd25lci9yZXBvLmdpdGAgZm9ybSAoZm9yIGFcbiAqICAgYHBhY2thZ2UuanNvbmAgYHJlcG9zaXRvcnkudXJsYCB0aGF0IHBhc3NlcyBucG0gcHJvdmVuYW5jZSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBvc2l0b3J5VXJsKGN3ZD86IHN0cmluZywgZm9ybWF0OiBcImh0dHBzXCIgfCBcIm5wbVwiID0gXCJodHRwc1wiKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlV29ya2luZ0RpcmVjdG9yeShjd2QpO1xuICBjb25zdCBodHRwcyA9IHJlcG9zaXRvcnlVcmxGcm9tR2gocmVzb2x2ZWQpID8/IHJlcG9zaXRvcnlVcmxGcm9tR2l0KHJlc29sdmVkKTtcbiAgaWYgKCFodHRwcykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIGZvcm1hdCA9PT0gXCJucG1cIiA/IGBnaXQrJHtodHRwcy5yZXBsYWNlKC9cXC5naXQkLywgXCJcIil9LmdpdGAgOiBodHRwcztcbn1cblxuLyoqIFB1YmxpYyBucG0sIHVzZWQgb25seSBhZnRlciBlbnYsIG5wbXJjLCBidW5maWcsIGFuZCBwbnBtIHlhbWwgbWlzcy4gKi9cbmNvbnN0IERFRkFVTFRfTlBNX1JFR0lTVFJZID0gXCJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9cIjtcblxuLyoqIElucHV0cyB0aGF0IGNvbnRyb2wgYWN0aXZlIG5wbSByZWdpc3RyeSBkaXNjb3ZlcnkuICovXG5leHBvcnQgdHlwZSBOcG1SZWdpc3RyeU9wdGlvbnMgPSB7XG4gIC8qKiBTa2lwIHB1YmxpYyBucG1qcy5vcmcgc28gY2FsbGVycyBjYW4gZGV0ZWN0IGEgY29uZmlndXJlZCBvdmVycmlkZS4gKi9cbiAgb3ZlcnJpZGVPbmx5PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFJlYWQgYG5wbV9jb25maWdfcmVnaXN0cnlgLCBgTlBNX0NPTkZJR19SRUdJU1RSWWAsIGFuZCBgQlVOX0NPTkZJR19SRUdJU1RSWWBcbiAgICogZmlyc3QuIERlZmF1bHRzIHRvIHRydWUgc28gdGhlIHNhbWUgY2FzY2FkZSBhIHBhY2thZ2UgbWFuYWdlciB1c2VzIGlzIHRoZVxuICAgKiBkZWZhdWx0LlxuICAgKi9cbiAgZW52VmFycz86IGJvb2xlYW47XG59O1xuXG5jb25zdCBucG1SZWdpc3RyeUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIG5ldC5VcmxCdWlsZGVyIHwgdW5kZWZpbmVkPigpO1xuXG4vKipcbiAqIFRoZSBhY3RpdmUgbnBtIHJlZ2lzdHJ5IGFzIGEgY2hhaW5hYmxlIHtAbGluayBuZXQuVXJsQnVpbGRlcn0uXG4gKlxuICogUmVzb2x1dGlvbiBpcyBtYW5hZ2VyLWFnbm9zdGljIGFuZCBtZW1vaXplZCBwZXIgY3dkIHBsdXMgb3B0aW9uczogZW52aXJvbm1lbnRcbiAqIHZhcmlhYmxlcywgdGhlbiBgLm5wbXJjYCAocHJvamVjdCBhbmNlc3RvcnMsIHVzZXIsIGdsb2JhbCksIHRoZW4gQnVuXG4gKiBgYnVuZmlnLnRvbWxgIGBpbnN0YWxsLnJlZ2lzdHJ5YCwgdGhlbiBwbnBtIHdvcmtzcGFjZS9nbG9iYWwgWUFNTCwgdGhlblxuICogYGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2AuIGBvdmVycmlkZU9ubHlgIHNraXBzIHRoYXQgcHVibGljIGRlZmF1bHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBucG1SZWdpc3RyeShcbiAgY3dkPzogc3RyaW5nIHwgbnVsbCxcbiAgb3B0aW9ucz86IE5wbVJlZ2lzdHJ5T3B0aW9ucyxcbik6IG5ldC5VcmxCdWlsZGVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlV29ya2luZ0RpcmVjdG9yeShjd2QpO1xuICBjb25zdCBlbnZWYXJzID0gb3B0aW9ucz8uZW52VmFycyAhPT0gZmFsc2U7XG4gIGNvbnN0IG92ZXJyaWRlT25seSA9IEJvb2xlYW4ob3B0aW9ucz8ub3ZlcnJpZGVPbmx5KTtcbiAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoW1xuICAgIHJlc29sdmVkLFxuICAgIG92ZXJyaWRlT25seSxcbiAgICBlbnZWYXJzLFxuICAgIGhvbWVkaXIoKSxcbiAgICBwcm9jZXNzLmVudi5OUE1fQ09ORklHX1VTRVJDT05GSUcgPz8gXCJcIixcbiAgICBwcm9jZXNzLmVudi5OUE1fQ09ORklHX0dMT0JBTENPTkZJRyA/PyBcIlwiLFxuICAgIHByb2Nlc3MuZW52LlBSRUZJWCA/PyBcIlwiLFxuICAgIGVudlZhcnMgPyAocHJvY2Vzcy5lbnYubnBtX2NvbmZpZ19yZWdpc3RyeSA/PyBcIlwiKSA6IFwiXCIsXG4gICAgZW52VmFycyA/IChwcm9jZXNzLmVudi5OUE1fQ09ORklHX1JFR0lTVFJZID8/IFwiXCIpIDogXCJcIixcbiAgICBlbnZWYXJzID8gKHByb2Nlc3MuZW52LkJVTl9DT05GSUdfUkVHSVNUUlkgPz8gXCJcIikgOiBcIlwiLFxuICBdKTtcbiAgaWYgKG5wbVJlZ2lzdHJ5Q2FjaGUuaGFzKGtleSkpIHJldHVybiBucG1SZWdpc3RyeUNhY2hlLmdldChrZXkpO1xuICBjb25zdCB2YWx1ZSA9IHJlc29sdmVOcG1SZWdpc3RyeShyZXNvbHZlZCwgeyBvdmVycmlkZU9ubHksIGVudlZhcnMgfSk7XG4gIG5wbVJlZ2lzdHJ5Q2FjaGUuc2V0KGtleSwgdmFsdWUpO1xuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVOcG1SZWdpc3RyeShcbiAgY3dkOiBzdHJpbmcsXG4gIG9wdGlvbnM6IHsgb3ZlcnJpZGVPbmx5OiBib29sZWFuOyBlbnZWYXJzOiBib29sZWFuIH0sXG4pOiBuZXQuVXJsQnVpbGRlciB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIG5wbVJlZ2lzdHJ5Q2FuZGlkYXRlcyhjd2QsIG9wdGlvbnMuZW52VmFycykpIHtcbiAgICBjb25zdCB1cmwgPSB0b1JlZ2lzdHJ5VXJsKGNhbmRpZGF0ZSwgb3B0aW9ucy5vdmVycmlkZU9ubHkpO1xuICAgIGlmICh1cmwpIHJldHVybiB1cmw7XG4gIH1cbiAgcmV0dXJuIHRvUmVnaXN0cnlVcmwoREVGQVVMVF9OUE1fUkVHSVNUUlksIG9wdGlvbnMub3ZlcnJpZGVPbmx5KTtcbn1cblxuZnVuY3Rpb24qIG5wbVJlZ2lzdHJ5Q2FuZGlkYXRlcyhjd2Q6IHN0cmluZywgZW52VmFyczogYm9vbGVhbik6IEdlbmVyYXRvcjxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKGVudlZhcnMpIHtcbiAgICB5aWVsZCBwcm9jZXNzLmVudi5ucG1fY29uZmlnX3JlZ2lzdHJ5O1xuICAgIHlpZWxkIHByb2Nlc3MuZW52Lk5QTV9DT05GSUdfUkVHSVNUUlk7XG4gICAgeWllbGQgcHJvY2Vzcy5lbnYuQlVOX0NPTkZJR19SRUdJU1RSWTtcbiAgfVxuICBmb3IgKGNvbnN0IGRpciBvZiBhbmNlc3RvckRpcnMoY3dkKSkge1xuICAgIHlpZWxkIHJlYWROcG1yY1JlZ2lzdHJ5KGpvaW4oZGlyLCBcIi5ucG1yY1wiKSk7XG4gIH1cbiAgeWllbGQgcmVhZE5wbXJjUmVnaXN0cnkocHJvY2Vzcy5lbnYuTlBNX0NPTkZJR19VU0VSQ09ORklHID8/IGpvaW4oaG9tZWRpcigpLCBcIi5ucG1yY1wiKSk7XG4gIHlpZWxkIHJlYWROcG1yY1JlZ2lzdHJ5KHByb2Nlc3MuZW52Lk5QTV9DT05GSUdfR0xPQkFMQ09ORklHID8/IGRlZmF1bHRHbG9iYWxOcG1yYygpKTtcbiAgZm9yIChjb25zdCBkaXIgb2YgYW5jZXN0b3JEaXJzKGN3ZCkpIHtcbiAgICB5aWVsZCByZWFkQnVuZmlnUmVnaXN0cnkoam9pbihkaXIsIFwiYnVuZmlnLnRvbWxcIikpO1xuICB9XG4gIHlpZWxkIHJlYWRCdW5maWdSZWdpc3RyeShqb2luKGhvbWVkaXIoKSwgXCJidW5maWcudG9tbFwiKSk7XG4gIGZvciAoY29uc3QgZGlyIG9mIGFuY2VzdG9yRGlycyhjd2QpKSB7XG4gICAgeWllbGQgcmVhZFlhbWxSZWdpc3RyeShqb2luKGRpciwgXCJwbnBtLXdvcmtzcGFjZS55YW1sXCIpKTtcbiAgfVxuICBmb3IgKGNvbnN0IHBhdGggb2YgcG5wbUdsb2JhbENvbmZpZ1BhdGhzKCkpIHtcbiAgICB5aWVsZCByZWFkWWFtbFJlZ2lzdHJ5KHBhdGgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvUmVnaXN0cnlVcmwoXG4gIGNhbmRpZGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBvdmVycmlkZU9ubHk6IGJvb2xlYW4sXG4pOiBuZXQuVXJsQnVpbGRlciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHRyaW1tZWQgPSBzdHJpbmdVdGlscy50cmltVG9OdWxsKGNhbmRpZGF0ZSk7XG4gIGlmICghdHJpbW1lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgdXJsID0gbmV0LnVybEJ1aWxkZXIodHJpbW1lZCk7XG4gIGlmICghdXJsKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAob3ZlcnJpZGVPbmx5ICYmIGlzUHVibGljTnBtUmVnaXN0cnkodXJsKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHVybDtcbn1cblxuZnVuY3Rpb24gaXNQdWJsaWNOcG1SZWdpc3RyeSh1cmw6IG5ldC5VcmxCdWlsZGVyKTogYm9vbGVhbiB7XG4gIHJldHVybiB1cmwuaG9zdG5hbWUgPT09IFwicmVnaXN0cnkubnBtanMub3JnXCI7XG59XG5cbmZ1bmN0aW9uKiBhbmNlc3RvckRpcnMoY3dkOiBzdHJpbmcpOiBHZW5lcmF0b3I8c3RyaW5nPiB7XG4gIGxldCBjdXJyZW50ID0gY3dkO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIHlpZWxkIGN1cnJlbnQ7XG4gICAgY29uc3QgcGFyZW50ID0gZGlybmFtZShjdXJyZW50KTtcbiAgICBpZiAocGFyZW50ID09PSBjdXJyZW50KSByZXR1cm47XG4gICAgY3VycmVudCA9IHBhcmVudDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0R2xvYmFsTnBtcmMoKTogc3RyaW5nIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09IFwid2luMzJcIikge1xuICAgIHJldHVybiBqb2luKHByb2Nlc3MuZW52LlBST0dSQU1EQVRBID8/IFwiQzpcXFxcUHJvZ3JhbURhdGFcIiwgXCJucG1cIiwgXCJldGNcIiwgXCJucG1yY1wiKTtcbiAgfVxuICByZXR1cm4gam9pbihwcm9jZXNzLmVudi5QUkVGSVggPz8gXCIvdXNyL2xvY2FsXCIsIFwiZXRjXCIsIFwibnBtcmNcIik7XG59XG5cbmZ1bmN0aW9uIHBucG1HbG9iYWxDb25maWdQYXRocygpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGhvbWUgPSBob21lZGlyKCk7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSBcImRhcndpblwiKSB7XG4gICAgcmV0dXJuIFtqb2luKGhvbWUsIFwiTGlicmFyeS9QcmVmZXJlbmNlcy9wbnBtL2NvbmZpZy55YW1sXCIpXTtcbiAgfVxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiKSB7XG4gICAgcmV0dXJuIFtqb2luKHByb2Nlc3MuZW52LkxPQ0FMQVBQREFUQSA/PyBqb2luKGhvbWUsIFwiQXBwRGF0YS9Mb2NhbFwiKSwgXCJwbnBtL2NvbmZpZy55YW1sXCIpXTtcbiAgfVxuICByZXR1cm4gW2pvaW4oaG9tZSwgXCIuY29uZmlnL3BucG0vY29uZmlnLnlhbWxcIildO1xufVxuXG5mdW5jdGlvbiByZWFkTnBtcmNSZWdpc3RyeShwYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gY2FjaGVkUmVjb3JkKGBucG1yYy1yZWdpc3RyeToke3BhdGh9YCwgKCkgPT4ge1xuICAgIGNvbnN0IHRleHQgPSByZWFkVGV4dEZpbGUocGF0aCk7XG4gICAgY29uc3QgcmVnaXN0cnkgPSB0ZXh0ID8gcGFyc2VJbmlSZWdpc3RyeSh0ZXh0KSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVnaXN0cnkgPyB7IHJlZ2lzdHJ5IH0gOiB1bmRlZmluZWQ7XG4gIH0pPy5yZWdpc3RyeTtcbn1cblxuZnVuY3Rpb24gcmVhZEJ1bmZpZ1JlZ2lzdHJ5KHBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBjYWNoZWRSZWNvcmQoYGJ1bmZpZy1yZWdpc3RyeToke3BhdGh9YCwgKCkgPT4ge1xuICAgIGNvbnN0IHRleHQgPSByZWFkVGV4dEZpbGUocGF0aCk7XG4gICAgY29uc3QgcmVnaXN0cnkgPSB0ZXh0ID8gcGFyc2VCdW5maWdSZWdpc3RyeSh0ZXh0KSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVnaXN0cnkgPyB7IHJlZ2lzdHJ5IH0gOiB1bmRlZmluZWQ7XG4gIH0pPy5yZWdpc3RyeTtcbn1cblxuZnVuY3Rpb24gcmVhZFlhbWxSZWdpc3RyeShwYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gY2FjaGVkUmVjb3JkKGB5YW1sLXJlZ2lzdHJ5OiR7cGF0aH1gLCAoKSA9PiB7XG4gICAgY29uc3QgdGV4dCA9IHJlYWRUZXh0RmlsZShwYXRoKTtcbiAgICBpZiAoIXRleHQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VZYW1sKHRleHQpO1xuICAgIGlmICghb2JqZWN0LmlzUmVjb3JkKHBhcnNlZCkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcmVnaXN0cnkgPSB5YW1sUmVnaXN0cnkocGFyc2VkKTtcbiAgICByZXR1cm4gcmVnaXN0cnkgPyB7IHJlZ2lzdHJ5IH0gOiB1bmRlZmluZWQ7XG4gIH0pPy5yZWdpc3RyeTtcbn1cblxuZnVuY3Rpb24gcmVhZFRleHRGaWxlKHBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghZmlsZVN0YXRTeW5jKHBhdGgpPy5pc0ZpbGUoKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHJlYWRGaWxlU3luYyhwYXRoLCBcInV0ZjhcIik7XG59XG5cbi8qKiBQYXJzZSBhIGByZWdpc3RyeT1gIGFzc2lnbm1lbnQgZnJvbSBucG1yYyAvIGluaSB0ZXh0LiAqL1xuZnVuY3Rpb24gcGFyc2VJbmlSZWdpc3RyeSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBmb3IgKGNvbnN0IHJhdyBvZiB0ZXh0LnNwbGl0KC9cXHI/XFxuLykpIHtcbiAgICBjb25zdCBsaW5lID0gcmF3LnRyaW0oKTtcbiAgICBpZiAoIWxpbmUgfHwgbGluZS5zdGFydHNXaXRoKFwiI1wiKSB8fCBsaW5lLnN0YXJ0c1dpdGgoXCI7XCIpKSBjb250aW51ZTtcbiAgICBjb25zdCBlcSA9IGxpbmUuaW5kZXhPZihcIj1cIik7XG4gICAgaWYgKGVxID09PSAtMSkgY29udGludWU7XG4gICAgaWYgKGxpbmUuc2xpY2UoMCwgZXEpLnRyaW0oKSAhPT0gXCJyZWdpc3RyeVwiKSBjb250aW51ZTtcbiAgICByZXR1cm4gdW5xdW90ZUluaVZhbHVlKGxpbmUuc2xpY2UoZXEgKyAxKSk7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZWFkIEJ1biBgaW5zdGFsbC5yZWdpc3RyeWAgZnJvbSBhIGJ1bmZpZy50b21sLiBUYWJsZSBmb3JtXG4gKiBgW2luc3RhbGwucmVnaXN0cnldYCB3aXRoIGB1cmwgPSBcIi4uLlwiYCBpcyBhY2NlcHRlZDsgc2NvcGVkIG1hcHMgYXJlIGlnbm9yZWQuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQnVuZmlnUmVnaXN0cnkodGV4dDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgbGV0IHNlY3Rpb24gPSBcIlwiO1xuICBmb3IgKGNvbnN0IHJhdyBvZiB0ZXh0LnNwbGl0KC9cXHI/XFxuLykpIHtcbiAgICBjb25zdCBsaW5lID0gc3RyaXBUb21sQ29tbWVudChyYXcpLnRyaW0oKTtcbiAgICBpZiAoIWxpbmUpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGhlYWRlciA9IC9eXFxbKFteXFxdXSspXFxdJC8uZXhlYyhsaW5lKTtcbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBzZWN0aW9uID0gaGVhZGVyWzFdIS50cmltKCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgZXEgPSBsaW5lLmluZGV4T2YoXCI9XCIpO1xuICAgIGlmIChlcSA9PT0gLTEpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGtleSA9IGxpbmUuc2xpY2UoMCwgZXEpLnRyaW0oKTtcbiAgICBjb25zdCB2YWx1ZSA9IHVucXVvdGVJbmlWYWx1ZShsaW5lLnNsaWNlKGVxICsgMSkpO1xuICAgIGlmIChzZWN0aW9uID09PSBcImluc3RhbGxcIiAmJiBrZXkgPT09IFwicmVnaXN0cnlcIiAmJiAhdmFsdWUuc3RhcnRzV2l0aChcIntcIikpIHJldHVybiB2YWx1ZTtcbiAgICBpZiAoc2VjdGlvbiA9PT0gXCJpbnN0YWxsLnJlZ2lzdHJ5XCIgJiYga2V5ID09PSBcInVybFwiKSByZXR1cm4gdmFsdWU7XG4gICAgaWYgKCFzZWN0aW9uICYmIGtleSA9PT0gXCJpbnN0YWxsLnJlZ2lzdHJ5XCIpIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB5YW1sUmVnaXN0cnkoZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodHlwZW9mIGRhdGEucmVnaXN0cnkgPT09IFwic3RyaW5nXCIpIHJldHVybiBkYXRhLnJlZ2lzdHJ5O1xuICBjb25zdCByZWdpc3RyaWVzID0gZGF0YS5yZWdpc3RyaWVzO1xuICBpZiAob2JqZWN0LmlzUmVjb3JkKHJlZ2lzdHJpZXMpICYmIHR5cGVvZiByZWdpc3RyaWVzLmRlZmF1bHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gcmVnaXN0cmllcy5kZWZhdWx0O1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHVucXVvdGVJbmlWYWx1ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKTtcbiAgY29uc3QgY29tbWVudCA9IHRyaW1tZWQuc2VhcmNoKC9cXHMrIy8pO1xuICBjb25zdCByYXcgPSBjb21tZW50ID09PSAtMSA/IHRyaW1tZWQgOiB0cmltbWVkLnNsaWNlKDAsIGNvbW1lbnQpLnRyaW0oKTtcbiAgaWYgKChyYXcuc3RhcnRzV2l0aCgnXCInKSAmJiByYXcuZW5kc1dpdGgoJ1wiJykpIHx8IChyYXcuc3RhcnRzV2l0aChcIidcIikgJiYgcmF3LmVuZHNXaXRoKFwiJ1wiKSkpIHtcbiAgICByZXR1cm4gcmF3LnNsaWNlKDEsIC0xKTtcbiAgfVxuICByZXR1cm4gcmF3O1xufVxuXG5mdW5jdGlvbiBzdHJpcFRvbWxDb21tZW50KGxpbmU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGhhc2ggPSBsaW5lLmluZGV4T2YoXCIjXCIpO1xuICByZXR1cm4gaGFzaCA9PT0gLTEgPyBsaW5lIDogbGluZS5zbGljZSgwLCBoYXNoKTtcbn1cblxuZnVuY3Rpb24gcmVhZFBhY2thZ2VOYW1lKHBrZ1BhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghZmlsZVN0YXRTeW5jKHBrZ1BhdGgpPy5pc0ZpbGUoKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHN0cmluZ1V0aWxzLnRyaW1Ub051bGwoanNvbi5wYXJzZVJlY29yZChyZWFkRmlsZVN5bmMocGtnUGF0aCwgXCJ1dGY4XCIpKT8ubmFtZSkgPz8gdW5kZWZpbmVkO1xufVxuXG5pZiAoaW1wb3J0Lm1ldGEubWFpbikge1xuICBjb25zb2xlLmxvZyhcIm5wbSByb290OlwiLCBucG1Sb290KCkpO1xuICBjb25zb2xlLmxvZyhcInJlcG8gcm9vdDpcIiwgZ2l0Um9vdCgpKTtcbiAgY29uc29sZS5sb2coXCJwYWNrYWdlIHJvb3Q6XCIsIHJvb3QoKSk7XG4gIGNvbnNvbGUubG9nKFwicHJvamVjdCBuYW1lOlwiLCBuYW1lKCkpO1xuICBjb25zb2xlLmxvZyhcInJlcG9zaXRvcnkgdXJsOlwiLCByZXBvc2l0b3J5VXJsKCkpO1xuICBjb25zb2xlLmxvZyhcInJlcG9zaXRvcnkgdXJsIChucG0pOlwiLCByZXBvc2l0b3J5VXJsKHVuZGVmaW5lZCwgXCJucG1cIikpO1xuICBjb25zdCBnaEFjY291bnQgPSByZXNvbHZlUHJvamVjdEdoQWNjb3VudCgpO1xuICBpZiAoZ2hBY2NvdW50KSB7XG4gICAgY29uc29sZS5sb2coXCJwcm9qZWN0IGdoIGhvc3Q6XCIsIGdoQWNjb3VudC5ob3N0KTtcbiAgICBjb25zb2xlLmxvZyhcInByb2plY3QgZ2ggbG9naW46XCIsIGdoQWNjb3VudC5sb2dpbik7XG4gICAgY29uc29sZS5sb2coXCJwcm9qZWN0IGdoIHJlbW90ZTpcIiwgZ2hBY2NvdW50LnJlbW90ZS5yZXBvc2l0b3J5KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmxvZyhcInByb2plY3QgZ2ggYWNjb3VudDogbm90IGZvdW5kXCIpO1xuICB9XG59XG4iXX0=
|
|
623
|
+
if (import.meta.main) {
|
|
624
|
+
main();
|
|
625
|
+
}
|
|
626
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9qZWN0LXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sRUFBUyxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNsQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzdELE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsS0FBSyxJQUFJLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsSUFBSSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFbkUsTUFBTSxZQUFZLEdBQUc7SUFDbkIsY0FBYztJQUNkLGNBQWM7SUFDZCxlQUFlO0lBQ2YsZUFBZTtJQUNmLGNBQWM7Q0FDTixDQUFDO0FBRVgscUZBQXFGO0FBQ3JGLE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxHQUFtQjtJQUN6RCxPQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQy9ELENBQUM7QUFnQ0QsU0FBUywyQkFBMkIsQ0FDbEMsT0FBZSxFQUNmLElBQWMsRUFDZCxHQUFXLEVBQ1gsR0FBdUI7SUFFdkIsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUU7UUFDdEMsR0FBRztRQUNILEdBQUcsRUFBRSxHQUFHLElBQUksT0FBTyxDQUFDLEdB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Y292ZXJ5IGZvciBOb2RlIGFuZCBCdW4gdG9vbHMuXG4gKlxuICogVGhpcyBtb2R1bGUgaXMgdGhlIHNoYXJlZCBvd25lciBmb3Igd29ya2luZy1kaXJlY3Rvcnkgbm9ybWFsaXphdGlvbiwgcHJvamVjdFxuICogcm9vdHMsIHJlcG9zaXRvcnkgVVJMcywgcGFja2FnZSBuYW1lcywgYW5kIERhdGFicmlja3MgYnVuZGxlIGNvbnRleHQuIFJldXNlIGl0XG4gKiBpbnN0ZWFkIG9mIGFkZGluZyBwYWNrYWdlLWxvY2FsIHJvb3QtbWFya2VyIHdhbGtzIG9yIEdpdCByZW1vdGUgcGFyc2luZy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgc3Bhd25TeW5jIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgU3RhdHMsIHJlYWRGaWxlU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB7IGJhc2VuYW1lLCBkaXJuYW1lLCBqb2luLCByZXNvbHZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsganNvbiwgbmV0LCBvYmplY3QsIHN0cmluZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IHBhcnNlIGFzIHBhcnNlWWFtbCB9IGZyb20gXCJ5YW1sXCI7XG5pbXBvcnQgeyBjYWNoZWRSZWNvcmQsIHN0YXRTeW5jIGFzIGZpbGVTdGF0U3luYyB9IGZyb20gXCIuL2ZpbGUudHNcIjtcblxuY29uc3QgUk9PVF9NQVJLRVJTID0gW1xuICBcIi5wcm9qZW5yYy50c1wiLFxuICBcIi5wcm9qZW5yYy5qc1wiLFxuICBcIi5wcm9qZW5yYy5tanNcIixcbiAgXCIucHJvamVucmMuY2pzXCIsXG4gIFwicGFja2FnZS5qc29uXCIsXG5dIGFzIGNvbnN0O1xuXG4vKiogUmVzb2x2ZSBhIGJsYW5rLCBudWxsLCBvbWl0dGVkLCByZWxhdGl2ZSwgb3IgYWJzb2x1dGUgY3dkIHRvIGFuIGFic29sdXRlIHBhdGguICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVdvcmtpbmdEaXJlY3RvcnkoY3dkPzogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB7XG4gIHJldHVybiByZXNvbHZlKHN0cmluZ1V0aWxzLnRyaW1Ub051bGwoY3dkKSA/PyBwcm9jZXNzLmN3ZCgpKTtcbn1cblxuLyoqIEEgY29tbWFuZCdzIHN0ZG91dCwgY2xhc3NpZmllZCBhcyBhIGZpbGVzeXN0ZW0gcGF0aCBhbmQvb3IgYSBVUkwuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2plY3RDb250ZXh0IHtcbiAgcmVhZG9ubHkgb3V0cHV0Pzogc3RyaW5nO1xuICAvKiogV2hldGhlciB0aGUgY29tbWFuZCBleGl0ZWQgc3VjY2Vzc2Z1bGx5LiAqL1xuICByZWFkb25seSBzdWNjZXNzOiBib29sZWFuO1xuICAvKiogYG91dHB1dGAgd2hlbiBpdCBuYW1lcyBzb21ldGhpbmcgb24gZGlzay4gKi9cbiAgcmVhZG9ubHkgcGF0aD86IHN0cmluZztcbiAgLyoqIGBmaWxlLnN0YXRTeW5jYCBvZiB7QGxpbmsgcGF0aH0sIHdoZW4gaXQgZXhpc3RzLiAqL1xuICByZWFkb25seSBwYXRoU3RhdHM/OiBTdGF0cztcbiAgLyoqXG4gICAqIGBvdXRwdXRgIHBhcnNlZCBpbnRvIGEgY2hhaW5hYmxlIHtAbGluayBuZXQuVXJsQnVpbGRlcn0sIHdoZW4gaXQgaXMgYSByZWFsXG4gICAqIG5ldHdvcmsgVVJMIC0gYSBub24tYmxhbmsgc2NoZW1lIChub3QgYGZpbGU6YCkgQU5EIGEgbm9uLWJsYW5rIGhvc3RuYW1lLlxuICAgKiBCYXJlIHBhdGhzLCBzY3AtbGlrZSBgZ2l0QGhvc3Q6Li4uYCByZW1vdGVzLCBhbmQgYGZpbGU6YCBVUkxzIHN0YXkgdW5zZXQuXG4gICAqL1xuICByZWFkb25seSB1cmw/OiBuZXQuVXJsQnVpbGRlcjtcbn1cblxuLyoqXG4gKiBiZWNhdXNlIHRoaXMgaXMgY3J1Y2lhbCBkbyBub3QgdXNlIGV4ZWMuc3Bhd25TeW5jXG4gKlxuICogUnVuIGBjb21tYW5kIGFyZ3NgIGluIGBjd2RgIGFuZCBjbGFzc2lmeSBpdHMgc3Rkb3V0OiBgcGF0aGAgKyBgcGF0aFN0YXRzYCB3aGVuXG4gKiB0aGUgb3V0cHV0IG5hbWVzIHNvbWV0aGluZyBvbiBkaXNrLCBgdXJsYCAoYSB7QGxpbmsgbmV0LlVybEJ1aWxkZXJ9KSB3aGVuIGl0XG4gKiBwYXJzZXMgYXMgYSByZWFsIG5ldHdvcmsgVVJMLiBFbXB0eSB7QGxpbmsgUHJvamVjdENvbnRleHR9IG9uIGEgbm9uLXplcm8gZXhpdFxuICogb3IgZW1wdHkgb3V0cHV0LlxuICovXG5pbnRlcmZhY2UgUHJvamVjdENvbW1hbmRPcHRpb25zIHtcbiAgcmVhZG9ubHkgY2FjaGU/OiBib29sZWFuO1xuICByZWFkb25seSBlbnY/OiBOb2RlSlMuUHJvY2Vzc0Vudjtcbn1cblxuZnVuY3Rpb24gcHJvamVjdENvbnRleHRDb21tYW5kT3V0cHV0KFxuICBjb21tYW5kOiBzdHJpbmcsXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICBjd2Q6IHN0cmluZyxcbiAgZW52PzogTm9kZUpTLlByb2Nlc3NFbnYsXG4pOiBQcm9qZWN0Q29udGV4dCB7XG4gIGNvbnN0IHJlc3VsdCA9IHNwYXduU3luYyhjb21tYW5kLCBhcmdzLCB7XG4gICAgY3dkLFxuICAgIGVudjogZW52ID8/IHByb2Nlc3MuZW52LFxuICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJwaXBlXCIsIFwiaWdub3JlXCJdLFxuICB9KTtcbiAgY29uc3Qgb3V0cHV0ID0gcmVzdWx0Py5zdGRvdXQ/LnRvU3RyaW5nKCk/LnRyaW0oKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IDAgJiYgb3V0cHV0KSB7XG4gICAgY29uc3QgcGF0aFN0YXRzID0gZmlsZVN0YXRTeW5jKG91dHB1dCk7XG4gICAgLy8gT25seSBhbiBFWFBMSUNJVCBgc2NoZW1lOi8vLi4uYCBjb3VudHMgYXMgYSBVUkwuIGB1cmxCdWlsZGVyYCBvdGhlcndpc2VcbiAgICAvLyBzeW50aGVzaXplcyBvbmUgKGEgYmFyZSBgZXhhbXBsZS5jb21gIC0+IGBodHRwczovL+KApmAsIGFuIGFic29sdXRlIHBhdGggLT5cbiAgICAvLyBgaHR0cDovL2xvY2FsaG9zdC/igKZgKSwgd2hpY2ggd291bGQgbWlzbGFiZWwgZGlyZWN0b3J5IG91dHB1dHMgYW5kIGJhcmVcbiAgICAvLyB0b2tlbnMgLSBzbyBnYXRlIG9uIHRoZSByYXcgb3V0cHV0IGFscmVhZHkgY2FycnlpbmcgYSBzY2hlbWUgKyBhdXRob3JpdHkuXG4gICAgY29uc3QgdXJsID0gL15bYS16XVthLXowLTkrLi1dKjpcXC9cXC8vaS50ZXN0KG91dHB1dCkgPyBuZXQudXJsQnVpbGRlcihvdXRwdXQpIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IG91dHB1dCwgcGF0aDogcGF0aFN0YXRzID8gb3V0cHV0IDogdW5kZWZpbmVkLCBwYXRoU3RhdHMsIHN1Y2Nlc3M6IHRydWUsIHVybCB9O1xuICB9XG4gIHJldHVybiB7IG91dHB1dCwgc3VjY2VzczogcmVzdWx0LnN0YXR1cyA9PT0gMCB9O1xufVxuXG5jb25zdCBwcm9qZWN0Q29tbWFuZENhY2hlID0gbmV3IE1hcDxzdHJpbmcsIFByb2plY3RDb250ZXh0PigpO1xuXG5mdW5jdGlvbiBwcm9qZWN0Q29udGV4dENvbW1hbmQoXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgYXJnczogc3RyaW5nW10sXG4gIGN3ZD86IHN0cmluZyxcbiAgb3B0aW9uczogUHJvamVjdENvbW1hbmRPcHRpb25zID0ge30sXG4pOiBQcm9qZWN0Q29udGV4dCB7XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZVdvcmtpbmdEaXJlY3RvcnkoY3dkKTtcbiAgY29uc3QgY2FjaGUgPSBvcHRpb25zLmNhY2hlID8/ICghb3B0aW9ucy5lbnYgJiYgcmVzb2x2ZWQgPT09IHJlc29sdmVXb3JraW5nRGlyZWN0b3J5KCkpO1xuICBjb25zdCBrZXkgPSBjYWNoZSA/IEpTT04uc3RyaW5naWZ5KFtyZXNvbHZlZCwgY29tbWFuZCwgLi4uYXJnc10pIDogdW5kZWZpbmVkO1xuICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBjYWNoZWQgPSBwcm9qZWN0Q29tbWFuZENhY2hlLmdldChrZXkpO1xuICAgIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGNhY2hlZDtcbiAgfVxuICBjb25zdCB2YWx1ZSA9IHByb2plY3RDb250ZXh0Q29tbWFuZE91dHB1dChjb21tYW5kLCBhcmdzLCByZXNvbHZlZCwgb3B0aW9ucy5lbnYpO1xuICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHByb2plY3RDb21tYW5kQ2FjaGUuc2V0KGtleSwgdmFsdWUpO1xuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHByb2plY3RDb21tYW5kKGNvbW1hbmQ6IHN0cmluZykge1xuICBjb25zdCBjb250ZXh0ID0gKFxuICAgIGFyZ3M6IHN0cmluZ1tdLFxuICAgIGN3ZD86IHN0cmluZyxcbiAgICBvcHRpb25zPzogUHJvamVjdENvbW1hbmRPcHRpb25zLFxuICApOiBQcm9qZWN0Q29udGV4dCA9PiBwcm9qZWN0Q29udGV4dENvbW1hbmQoY29tbWFuZCwgYXJncywgY3dkLCBvcHRpb25zKTtcbiAgcmV0dXJuIHtcbiAgICBjb250ZXh0LFxuICAgIG91dHB1dChcbiAgICAgIGFyZ3M6IHN0cmluZ1tdLFxuICAgICAgY3dkPzogc3RyaW5nLFxuICAgICAgb3B0aW9ucz86IFByb2plY3RDb21tYW5kT3B0aW9ucyxcbiAgICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgcmV0dXJuIHN0cmluZ1V0aWxzLnRyaW1Ub051bGwoY29udGV4dChhcmdzLCBjd2QsIG9wdGlvbnMpLm91dHB1dCkgPz8gdW5kZWZpbmVkO1xuICAgIH0sXG4gICAgcm9vdChhcmdzOiBzdHJpbmdbXSwgY3dkOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgY29uc3QgcGFyc2VkID0gY29udGV4dChhcmdzLCBjd2QpO1xuICAgICAgcmV0dXJuIHBhcnNlZC5wYXRoU3RhdHM/LmlzRGlyZWN0b3J5KCkgPyBwYXJzZWQucGF0aCA6IHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIHN1Y2NlZWRzKGFyZ3M6IHN0cmluZ1tdLCBjd2Q/OiBzdHJpbmcsIG9wdGlvbnM/OiBQcm9qZWN0Q29tbWFuZE9wdGlvbnMpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBjb250ZXh0KGFyZ3MsIGN3ZCwgb3B0aW9ucykuc3VjY2VzcztcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBnaXRDb21tYW5kID0gcHJvamVjdENvbW1hbmQoXCJnaXRcIik7XG5jb25zdCBnaENvbW1hbmQgPSBwcm9qZWN0Q29tbWFuZChcImdoXCIpO1xuY29uc3QgbnBtQ29tbWFuZCA9IHByb2plY3RDb21tYW5kKFwibnBtXCIpO1xuY29uc3Qgc3NoQ29tbWFuZCA9IHByb2plY3RDb21tYW5kKFwic3NoXCIpO1xuXG5mdW5jdGlvbiBnaXRSZW1vdGVVcmwoY3dkPzogc3RyaW5nLCByZW1vdGUgPSBcIm9yaWdpblwiLCByZWZyZXNoID0gZmFsc2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gZ2l0Q29tbWFuZC5vdXRwdXQoW1wicmVtb3RlXCIsIFwiZ2V0LXVybFwiLCByZW1vdGVdLCBjd2QsIHsgY2FjaGU6ICFyZWZyZXNoIH0pO1xufVxuXG4vKipcbiAqIENsb3Nlc3QgZGlyZWN0b3J5IHdpdGggYSBgcGFja2FnZS5qc29uYCBvciBgbm9kZV9tb2R1bGVzYCwgbWF0Y2hpbmcgYG5wbSBwcmVmaXhgLlxuICpcbiAqIExpZmVjeWNsZSBzY3JpcHRzIGZyb20gbnBtIGFuZCBCdW4gc2V0IGBucG1fY29uZmlnX2xvY2FsX3ByZWZpeGAgdG8gdGhhdFxuICogZGlyZWN0b3J5LiBSZWFkIGl0IGZpcnN0IHdoZW4gcmVzb2x2aW5nIHRoaXMgcHJvY2VzcydzIGN3ZCBzbyBhIG1pc3NpbmcgbnBtXG4gKiBDTEkgaXMgbm90IHJlcXVpcmVkLiBgbnBtX2NvbmZpZ19wcmVmaXhgIC8gYFBSRUZJWGAgYXJlIHRoZSBnbG9iYWwgaW5zdGFsbFxuICogcHJlZml4IGFuZCBtdXN0IG5vdCBiZSB1c2VkIGhlcmUuXG4gKlxuICogQnVuIGhhcyBubyBwcmVmaXggY29tbWFuZCAoYGJ1biBwbSBiaW5gIGlzIHRoZSBgLmJpbmAgZGlyZWN0b3J5KS4gcG5wbSdzXG4gKiBgcHJlZml4YCBjb21tYW5kIGlzIHVuaW1wbGVtZW50ZWQ7IGBwbnBtIHJvb3RgIHByaW50cyBgbm9kZV9tb2R1bGVzYC5cbiAqL1xuZnVuY3Rpb24gbnBtUm9vdChjd2Q/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVXb3JraW5nRGlyZWN0b3J5KGN3ZCk7XG4gIGlmIChyZXNvbHZlZCA9PT0gcmVzb2x2ZVdvcmtpbmdEaXJlY3RvcnkoKSkge1xuICAgIGNvbnN0IGZyb21FbnYgPSBlbnZEaXJlY3RvcnkocHJvY2Vzcy5lbnYubnBtX2NvbmZpZ19sb2NhbF9wcmVmaXgpO1xuICAgIGlmIChmcm9tRW52KSByZXR1cm4gZnJvbUVudjtcbiAgfVxuICByZXR1cm4gbnBtQ29tbWFuZC5yb290KFtcInByZWZpeFwiXSwgcmVzb2x2ZWQpO1xufVxuXG5mdW5jdGlvbiBlbnZEaXJlY3RvcnkodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHBhdGggPSBzdHJpbmdVdGlscy50cmltVG9OdWxsKHZhbHVlKTtcbiAgaWYgKCFwYXRoKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmUocGF0aCk7XG4gIHJldHVybiBmaWxlU3RhdFN5bmMocmVzb2x2ZWQpPy5pc0RpcmVjdG9yeSgpID8gcmVzb2x2ZWQgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdpdFJvb3QoY3dkPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlV29ya2luZ0RpcmVjdG9yeShjd2QpO1xuICByZXR1cm4gZ2l0Q29tbWFuZC5yb290KFtcInJldi1wYXJzZVwiLCBcIi0tc2hvdy10b3BsZXZlbFwiXSwgcmVzb2x2ZWQpO1xufVxuXG4vKiogUmVzb2x2ZSB0aGUgbmVhcmVzdCBwcm9qZWN0IHJvb3Qgd2l0aG91dCB3YWxraW5nIGFib3ZlIGl0cyBucG0gb3IgR2l0IGJvdW5kYXJ5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvb3QoY3dkPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlV29ya2luZ0RpcmVjdG9yeShjd2QpO1xuICBsZXQgY3VycmVudCA9IHJlc29sdmVkO1xuXG4gIGlmICghZmlsZVN0YXRTeW5jKGN1cnJlbnQpPy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgY3VycmVudCA9IGRpcm5hbWUoY3VycmVudCk7XG4gIH1cbiAgY29uc3QgYm91bmRhcmllcyA9IG5ldyBTZXQoXG4gICAgW25wbUJvdW5kYXJ5KHJlc29sdmVkKSwgZ2l0Um9vdChyZXNvbHZlZCldXG4gICAgICAuZmlsdGVyKChwYXRoKTogcGF0aCBpcyBzdHJpbmcgPT4gcGF0aCAhPT0gdW5kZWZpbmVkKVxuICAgICAgLm1hcCgocGF0aCkgPT4gcmVzb2x2ZShwYXRoKSksXG4gICk7XG4gIGNvbnN0IGhhc0JvdW5kYXJ5ID0gYm91bmRhcmllcy5zaXplID4gMDtcbiAgbGV0IGJlc3Q6IHsgZGlyOiBzdHJpbmc7IHByaW9yaXR5OiBudW1iZXIgfSB8IHVuZGVmaW5lZDtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBmb3IgKGNvbnN0IFtwcmlvcml0eSwgbWFya2VyXSBvZiBST09UX01BUktFUlMuZW50cmllcygpKSB7XG4gICAgICBpZiAoZmlsZVN0YXRTeW5jKGpvaW4oY3VycmVudCwgbWFya2VyKSk/LmlzRmlsZSgpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBiZXN0ID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICBwcmlvcml0eSA8IGJlc3QucHJpb3JpdHkgfHxcbiAgICAgICAgICAocHJpb3JpdHkgPT09IGJlc3QucHJpb3JpdHkgJiYgY3VycmVudC5sZW5ndGggPCBiZXN0LmRpci5sZW5ndGgpXG4gICAgICAgICkge1xuICAgICAgICAgIGJlc3QgPSB7IGRpcjogY3VycmVudCwgcHJpb3JpdHkgfTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFoYXNCb3VuZGFyeSAmJiBiZXN0KSB7XG4gICAgICByZXR1cm4gYmVzdC5kaXI7XG4gICAgfVxuICAgIGlmIChib3VuZGFyaWVzLmhhcyhjdXJyZW50KSkge1xuICAgICAgcmV0dXJuIGJlc3Q/LmRpcjtcbiAgICB9XG4gICAgY29uc3QgcGFyZW50ID0gZGlybmFtZShjdXJyZW50KTtcbiAgICBpZiAocGFyZW50ID09PSBjdXJyZW50KSB7XG4gICAgICByZXR1cm4gYmVzdD8uZGlyO1xuICAgIH1cbiAgICBjdXJyZW50ID0gcGFyZW50O1xuICB9XG59XG5cbmZ1bmN0aW9uIG5wbUJvdW5kYXJ5KGN3ZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgY2FuZGlkYXRlID0gbnBtUm9vdChjd2QpO1xuICBpZiAoIWNhbmRpZGF0ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlKGNhbmRpZGF0ZSk7XG4gIGlmIChmaWxlU3RhdFN5bmMoam9pbihyZXNvbHZlZCwgXCJwYWNrYWdlLmpzb25cIikpPy5pc0ZpbGUoKSkgcmV0dXJuIHJlc29sdmVkO1xuICBpZiAoZmlsZVN0YXRTeW5jKGpvaW4ocmVzb2x2ZWQsIFwibm9kZV9tb2R1bGVzXCIpKT8uaXNEaXJlY3RvcnkoKSkgcmV0dXJuIHJlc29sdmVkO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgZ2l0IHJlbW90ZSBVUkwgKGBodHRwczovLy4uLmAsIGBnaXRAaG9zdDpvd25lci9yZXBvLmdpdGAsIGV0Yy4pIGFuZFxuICogcmV0dXJuIHRoZSByZXBvIHNlZ21lbnQsIHN0cmlwcGluZyBhbnkgYC5naXRgIHN1ZmZpeC4gUmV0dXJucyBgdW5kZWZpbmVkYCBmb3JcbiAqIGVtcHR5IG9yIHVucGFyc2FibGUgaW5wdXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUdpdFJlbW90ZSh1cmw6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHRyaW1tZWQgPSB1cmwudHJpbSgpO1xuICBpZiAoIXRyaW1tZWQpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3Qgc2NwID0gL15bXkBdK0BbXjpdKzooLispJC9pLmV4ZWModHJpbW1lZCk7XG4gIGlmIChzY3ApIHJldHVybiBsYXN0UGF0aFNlZ21lbnQoc2NwWzFdID8/IFwiXCIpO1xuXG4gIHRyeSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHRyaW1tZWQucmVwbGFjZSgvXFwuZ2l0JC9pLCBcIlwiKTtcbiAgICBjb25zdCBwYXRobmFtZSA9IG5ldyBVUkwobm9ybWFsaXplZCkucGF0aG5hbWU7XG4gICAgY29uc3Qgc2VnbWVudCA9IHBhdGhuYW1lLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbikuYXQoLTEpO1xuICAgIHJldHVybiBzZWdtZW50ID8gbGFzdFBhdGhTZWdtZW50KHNlZ21lbnQpIDogdW5kZWZpbmVkO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIGxhc3RQYXRoU2VnbWVudChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzZWdtZW50ID0gcGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKEJvb2xlYW4pLmF0KC0xKSA/PyBwYXRoO1xuICByZXR1cm4gc2VnbWVudC5yZXBsYWNlKC9cXC5naXQkL2ksIFwiXCIpO1xufVxuXG4vKipcbiAqIFlpZWxkIGNhbmRpZGF0ZSBwcm9qZWN0LXJvb3QgZGlyZWN0b3JpZXMgZm9yIGBjd2RgLCBpbiBwcmlvcml0eSBvcmRlcjogdGhlXG4gKiBgbnBtIHByZWZpeGAsIHRoZSBnaXQgdG9wLWxldmVsLCB0aGVuIGBjd2RgIGl0c2VsZi4gRHVwbGljYXRlcyBhcmUgc2tpcHBlZDtcbiAqIG9ubHkgZXhpc3RpbmcgZGlyZWN0b3JpZXMgYXJlIHlpZWxkZWQgKGV4Y2VwdCB0aGUgZmluYWwgYGN3ZGAgZmFsbGJhY2spLlxuICovXG5leHBvcnQgZnVuY3Rpb24qIHJlc29sdmVQcm9qZWN0Um9vdHMoY3dkPzogc3RyaW5nKTogR2VuZXJhdG9yPHN0cmluZz4ge1xuICBjb25zdCBiYXNlID0gcmVzb2x2ZVdvcmtpbmdEaXJlY3RvcnkoY3dkKTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBbbnBtUm9vdChiYXNlKSwgZ2l0Um9vdChiYXNlKV0pIHtcbiAgICBpZiAoIWNhbmRpZGF0ZSkgY29udGludWU7XG4gICAgY29uc3QgZGlyID0gcmVzb2x2ZShjYW5kaWRhdGUpO1xuICAgIGlmIChzZWVuLmhhcyhkaXIpKSBjb250aW51ZTtcbiAgICBzZWVuLmFkZChkaXIpO1xuICAgIGlmIChmaWxlU3RhdFN5bmMoZGlyKT8uaXNEaXJlY3RvcnkoKSkgeWllbGQgZGlyO1xuICB9XG4gIGlmICghc2Vlbi5oYXMoYmFzZSkpIHlpZWxkIGJhc2U7XG59XG5cbi8qKiBUaGUgbmVhcmVzdCBhbmNlc3RvciBvZiBgY3dkYCAoZnJvbSB7QGxpbmsgcmVzb2x2ZVByb2plY3RSb290c30pIHdpdGggYSBgcGFja2FnZS5qc29uYC4gKi9cbmZ1bmN0aW9uIHdvcmtzcGFjZVJvb3QoY3dkPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IGxhc3Q6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCBkaXIgb2YgcmVzb2x2ZVByb2plY3RSb290cyhjd2QpKSB7XG4gICAgaWYgKGZpbGVTdGF0U3luYyhyZXNvbHZlKGRpciwgXCJwYWNrYWdlLmpzb25cIikpPy5pc0ZpbGUoKSkgcmV0dXJuIGRpcjtcbiAgICBsYXN0ID0gZGlyO1xuICB9XG4gIHJldHVybiBsYXN0ID8/IHJlc29sdmVXb3JraW5nRGlyZWN0b3J5KGN3ZCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGh1bWFuLWZyaWVuZGx5IHByb2plY3QgbmFtZSBmb3IgdGhlIHJlcG8gcm9vdGVkIGF0IGBjd2RgOlxuICogYHBhY2thZ2UuanNvbmAgYG5hbWVgLCB0aGVuIHRoZSBnaXQgcmVtb3RlJ3MgcmVwbyBuYW1lLCB0aGVuIHRoZSByb290XG4gKiBkaXJlY3RvcnkncyBiYXNlbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5hbWUoY3dkPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlV29ya2luZ0RpcmVjdG9yeShjd2QpO1xuICBjb25zdCByb290RGlyID0gd29ya3NwYWNlUm9vdChyZXNvbHZlZCk7XG5cbiAgY29uc3QgZnJvbVBhY2thZ2UgPSByZWFkUGFja2FnZU5hbWUocmVzb2x2ZShyb290RGlyLCBcInBhY2thZ2UuanNvblwiKSk7XG4gIGlmIChmcm9tUGFja2FnZSkgcmV0dXJuIGZyb21QYWNrYWdlO1xuXG4gIGNvbnN0IHJlbW90ZSA9IGdpdFJlbW90ZVVybChyb290RGlyKTtcbiAgY29uc3QgZnJvbUdpdCA9IHJlbW90ZSA/IHBhcnNlR2l0UmVtb3RlKHJlbW90ZSkgOiB1bmRlZmluZWQ7XG4gIGlmIChmcm9tR2l0KSByZXR1cm4gZnJvbUdpdDtcblxuICByZXR1cm4gYmFzZW5hbWUocm9vdERpcik7XG59XG5cbi8qKlxuICogVGhlIEdpdEh1YiBDTEkncyBjYW5vbmljYWwgcmVwbyBVUkwgLSB0aGUgZWFzeSBwYXRoLiBgZ2hgIGFscmVhZHkgcmVzb2x2ZXMgdGhlXG4gKiB0cnVlIGhvc3QgKG5vIHNzaC1hbGlhcyBwYXJzaW5nKSBhbmQgcHJpbnRzIGEgY2xlYW4gYGh0dHBzOi8vaG9zdC9vd25lci9yZXBvYC5cbiAqIGB1bmRlZmluZWRgIHdoZW4gYGdoYCBpcyBhYnNlbnQsIHVuYXV0aGVudGljYXRlZCwgb3IgdGhlIGRpciBpc24ndCBhIEdIIHJlcG8uXG4gKi9cbmZ1bmN0aW9uIHJlcG9zaXRvcnlVcmxGcm9tR2goY3dkPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYWNjb3VudCA9IHJlc29sdmVQcm9qZWN0R2hBY2NvdW50KGN3ZCk7XG4gIGlmICghYWNjb3VudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3Qgb3V0ID0gZ2hDb21tYW5kLm91dHB1dChcbiAgICBbXCJyZXBvXCIsIFwidmlld1wiLCBhY2NvdW50LnJlbW90ZS5yZXBvc2l0b3J5LCBcIi0tanNvblwiLCBcInVybFwiXSxcbiAgICBhY2NvdW50LnJvb3QsXG4gICAgeyBjYWNoZTogZmFsc2UsIGVudjogYWNjb3VudC5lbnYgfSxcbiAgKTtcbiAgcmV0dXJuIHN0cmluZ1V0aWxzLnRyaW1Ub051bGwoanNvbi5wYXJzZVJlY29yZChvdXQpPy51cmwpID8/IHVuZGVmaW5lZDtcbn1cblxuLyoqIFJlc29sdmUgYW4gc3NoIGhvc3QgYWxpYXMgKGB+Ly5zc2gvY29uZmlnYCkgdG8gaXRzIGVmZmVjdGl2ZSBgaG9zdG5hbWVgIHZpYSBgc3NoIC1HYC4gKi9cbmZ1bmN0aW9uIHJlc29sdmVTc2hIb3N0TmFtZShob3N0OiBzdHJpbmcsIGN3ZD86IHN0cmluZywgcmVmcmVzaCA9IGZhbHNlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbGluZSA9IHNzaENvbW1hbmRcbiAgICAuY29udGV4dChbXCItR1wiLCBob3N0XSwgY3dkLCB7IGNhY2hlOiAhcmVmcmVzaCB9KVxuICAgIC5vdXRwdXQ/LnNwbGl0KFwiXFxuXCIpXG4gICAgLmZpbmQoKGwpID0+IC9eaG9zdG5hbWVcXHMvaS50ZXN0KGwudHJpbSgpKSk7XG4gIGNvbnN0IG5hbWUgPSBsaW5lPy50cmltKCkuc3BsaXQoL1xccysvKVsxXTtcbiAgcmV0dXJuIG5hbWUgJiYgbmFtZSAhPT0gaG9zdCA/IG5hbWUgOiB1bmRlZmluZWQ7XG59XG5cbi8qKiBQYXJzZWQgR2l0SHViLXN0eWxlIHJlbW90ZSBjb29yZGluYXRlcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvamVjdEdoUmVtb3RlIHtcbiAgLyoqIEFjY291bnQgaGludGVkIGJ5IGFuIFNTSCBhbGlhcyBzdWNoIGFzIGBnaXRAZ2l0aHViLXdvcms6YC4gKi9cbiAgcmVhZG9ubHkgYWNjb3VudEhpbnQ/OiBzdHJpbmc7XG4gIC8qKiBIb3N0IHdyaXR0ZW4gaW4gdGhlIHJlbW90ZSBiZWZvcmUgU1NIIGFsaWFzIHJlc29sdXRpb24uICovXG4gIHJlYWRvbmx5IGhvc3Q6IHN0cmluZztcbiAgLyoqIGBvd25lci9yZXBvc2l0b3J5YCBwYXRoLiAqL1xuICByZWFkb25seSByZXBvc2l0b3J5OiBzdHJpbmc7XG59XG5cbi8qKiBBdXRoZW50aWNhdGVkIEdpdEh1YiBDTEkgYWNjb3VudCBzZWxlY3RlZCBmb3Igb25lIHByb2plY3QgcmVtb3RlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9qZWN0R2hBY2NvdW50IHtcbiAgLyoqIEVudmlyb25tZW50IHRvIHBhc3MgdG8gZXZlcnkgYGdoYCBjb21tYW5kIGZvciB0aGlzIHByb2plY3QuICovXG4gIHJlYWRvbmx5IGVudjogTm9kZUpTLlByb2Nlc3NFbnY7XG4gIC8qKiBBY3R1YWwgR2l0SHViIGhvc3Qgc2VsZWN0ZWQgZnJvbSBgZ2ggYXV0aCBzdGF0dXNgLiAqL1xuICByZWFkb25seSBob3N0OiBzdHJpbmc7XG4gIC8qKiBBdXRoZW50aWNhdGVkIEdpdEh1YiBsb2dpbi4gKi9cbiAgcmVhZG9ubHkgbG9naW46IHN0cmluZztcbiAgLyoqIFBhcnNlZCBwcm9qZWN0IHJlbW90ZS4gKi9cbiAgcmVhZG9ubHkgcmVtb3RlOiBQcm9qZWN0R2hSZW1vdGU7XG4gIC8qKiBSZXNvbHZlZCBwcm9qZWN0IGRpcmVjdG9yeSB1c2VkIGZvciBjb21tYW5kIGV4ZWN1dGlvbi4gKi9cbiAgcmVhZG9ubHkgcm9vdDogc3RyaW5nO1xufVxuXG4vKiogT3B0aW9ucyBmb3IgY2FjaGVkIHByb2plY3QgR2l0SHViLWFjY291bnQgcmVzb2x1dGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZVByb2plY3RHaEFjY291bnRPcHRpb25zIHtcbiAgLyoqIEdpdCByZW1vdGUgbmFtZS4gRGVmYXVsdHMgdG8gYG9yaWdpbmAuICovXG4gIHJlYWRvbmx5IHJlbW90ZT86IHN0cmluZztcbiAgLyoqIFJlLXJlYWQgZ2l0LCBTU0gsIGFuZCBHaXRIdWIgQ0xJIHN0YXRlIGluc3RlYWQgb2YgdXNpbmcgdGhlIHByb2Nlc3MgY2FjaGUuICovXG4gIHJlYWRvbmx5IHJlZnJlc2g/OiBib29sZWFuO1xufVxuXG4vKiogUGFyc2UgSFRUUFMsIFNTSCBVUkwsIG9yIHNjcC1saWtlIEdpdEh1YiByZW1vdGUgY29vcmRpbmF0ZXMuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQcm9qZWN0R2hSZW1vdGUocmVtb3RlVXJsOiBzdHJpbmcpOiBQcm9qZWN0R2hSZW1vdGUgfCB1bmRlZmluZWQge1xuICBjb25zdCB2YWx1ZSA9IHJlbW90ZVVybC50cmltKCkucmVwbGFjZSgvXFwuZ2l0JC9pLCBcIlwiKTtcbiAgY29uc3QgaHR0cHMgPSAvXmh0dHBzPzpcXC9cXC8oW14vXSspXFwvKFteL10rKVxcLyhbXi9dKykkL2kuZXhlYyh2YWx1ZSk7XG4gIGlmIChodHRwcykgcmV0dXJuIHsgaG9zdDogaHR0cHNbMV0hLCByZXBvc2l0b3J5OiBgJHtodHRwc1syXX0vJHtodHRwc1szXX1gIH07XG4gIGNvbnN0IHNzaCA9IC9eKD86c3NoOlxcL1xcLyk/Z2l0QChbXi86XSspWzovXShbXi9dKylcXC8oW14vXSspJC9pLmV4ZWModmFsdWUpO1xuICBpZiAoIXNzaCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgYWNjb3VudEhpbnQgPSAvXmdpdGh1Yi0oLispJC9pLmV4ZWMoc3NoWzFdISk/LlsxXTtcbiAgcmV0dXJuIHtcbiAgICAuLi4oYWNjb3VudEhpbnQgPyB7IGFjY291bnRIaW50IH0gOiB7fSksXG4gICAgaG9zdDogc3NoWzFdISxcbiAgICByZXBvc2l0b3J5OiBgJHtzc2hbMl19LyR7c3NoWzNdfWAsXG4gIH07XG59XG5cbmNvbnN0IHByb2plY3RHaEFjY291bnRDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBQcm9qZWN0R2hBY2NvdW50IHwgbnVsbD4oKTtcblxuLyoqXG4gKiBSZXNvbHZlIGFuZCBjYWNoZSB0aGUgYXV0aGVudGljYXRlZCBgZ2hgIGFjY291bnQgdGhhdCBjYW4gYWNjZXNzIGEgcHJvamVjdCdzXG4gKiByZW1vdGUuIFNTSCBhbGlhcyBhY2NvdW50IGhpbnRzIHdpbiwgZm9sbG93ZWQgYnkgdGhlIGFjdGl2ZSBhY2NvdW50IG9uIHRoZVxuICogZWZmZWN0aXZlIFNTSC9IVFRQUyBob3N0LCB0aGVuIG90aGVyIGF1dGhlbnRpY2F0ZWQgYWNjb3VudHMuIEV2ZXJ5IGNhbmRpZGF0ZVxuICogaXMgdmVyaWZpZWQgYWdhaW5zdCB0aGUgcmVwb3NpdG9yeSBiZWZvcmUgaXQgaXMgcmV0dXJuZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUHJvamVjdEdoQWNjb3VudChcbiAgY3dkPzogc3RyaW5nLFxuICBvcHRpb25zOiBSZXNvbHZlUHJvamVjdEdoQWNjb3VudE9wdGlvbnMgPSB7fSxcbik6IFByb2plY3RHaEFjY291bnQgfCB1bmRlZmluZWQge1xuICBjb25zdCByb290ID0gcmVzb2x2ZVdvcmtpbmdEaXJlY3RvcnkoY3dkKTtcbiAgY29uc3QgcmVtb3RlTmFtZSA9IHN0cmluZ1V0aWxzLnRyaW1Ub051bGwob3B0aW9ucy5yZW1vdGUpID8/IFwib3JpZ2luXCI7XG4gIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KFtcbiAgICByb290LFxuICAgIHJlbW90ZU5hbWUsXG4gICAgaG9tZWRpcigpLFxuICAgIHByb2Nlc3MuZW52LkdIX0NPTkZJR19ESVIgPz8gXCJcIixcbiAgXSk7XG4gIGlmICghb3B0aW9ucy5yZWZyZXNoICYmIHByb2plY3RHaEFjY291bnRDYWNoZS5oYXMoa2V5KSkge1xuICAgIHJldHVybiBwcm9qZWN0R2hBY2NvdW50Q2FjaGUuZ2V0KGtleSkgPz8gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJlbW90ZVVybCA9IGdpdFJlbW90ZVVybChyb290LCByZW1vdGVOYW1lLCBvcHRpb25zLnJlZnJlc2gpO1xuICBpZiAoIXJlbW90ZVVybCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgcmVtb3RlID0gcGFyc2VQcm9qZWN0R2hSZW1vdGUocmVtb3RlVXJsKTtcbiAgaWYgKCFyZW1vdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGVmZmVjdGl2ZUhvc3QgPSByZXNvbHZlU3NoSG9zdE5hbWUocmVtb3RlLmhvc3QsIHJvb3QsIG9wdGlvbnMucmVmcmVzaCkgPz8gcmVtb3RlLmhvc3Q7XG5cbiAgY29uc3Qgc3RhdHVzID0gZ2hDb21tYW5kLm91dHB1dChbXCJhdXRoXCIsIFwic3RhdHVzXCIsIFwiLS1qc29uXCIsIFwiaG9zdHNcIl0sIHJvb3QsIHtcbiAgICBjYWNoZTogZmFsc2UsXG4gIH0pO1xuICBpZiAoIXN0YXR1cykge1xuICAgIHByb2plY3RHaEFjY291bnRDYWNoZS5zZXQoa2V5LCBudWxsKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBwYXJzZWQ6IHtcbiAgICBob3N0cz86IFJlY29yZDxcbiAgICAgIHN0cmluZyxcbiAgICAgIEFycmF5PHsgYWN0aXZlPzogYm9vbGVhbjsgaG9zdD86IHN0cmluZzsgbG9naW4/OiBzdHJpbmc7IHN0YXRlPzogc3RyaW5nIH0+XG4gICAgPjtcbiAgfTtcbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBKU09OLnBhcnNlKHN0YXR1cykgYXMgdHlwZW9mIHBhcnNlZDtcbiAgfSBjYXRjaCB7XG4gICAgcHJvamVjdEdoQWNjb3VudENhY2hlLnNldChrZXksIG51bGwpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgYWNjb3VudHMgPSBPYmplY3QuZW50cmllcyhwYXJzZWQuaG9zdHMgPz8ge30pLmZsYXRNYXAoKFtob3N0LCBlbnRyaWVzXSkgPT5cbiAgICBlbnRyaWVzXG4gICAgICAuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkuc3RhdGUgPT09IFwic3VjY2Vzc1wiICYmIGVudHJ5LmxvZ2luKVxuICAgICAgLm1hcCgoZW50cnkpID0+ICh7XG4gICAgICAgIGFjdGl2ZTogZW50cnkuYWN0aXZlID09PSB0cnVlLFxuICAgICAgICBob3N0OiBlbnRyeS5ob3N0ID8/IGhvc3QsXG4gICAgICAgIGxvZ2luOiBlbnRyeS5sb2dpbiEsXG4gICAgICB9KSksXG4gICk7XG4gIGFjY291bnRzLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiB7XG4gICAgY29uc3QgcmFuayA9IChhY2NvdW50OiAodHlwZW9mIGFjY291bnRzKVtudW1iZXJdKTogbnVtYmVyID0+IHtcbiAgICAgIGlmIChyZW1vdGUuYWNjb3VudEhpbnQgJiYgYWNjb3VudC5sb2dpbiA9PT0gcmVtb3RlLmFjY291bnRIaW50KSByZXR1cm4gMDtcbiAgICAgIGlmIChhY2NvdW50Lmhvc3QgPT09IGVmZmVjdGl2ZUhvc3QgJiYgYWNjb3VudC5hY3RpdmUpIHJldHVybiAxO1xuICAgICAgaWYgKGFjY291bnQuaG9zdCA9PT0gZWZmZWN0aXZlSG9zdCkgcmV0dXJuIDI7XG4gICAgICBpZiAoYWNjb3VudC5hY3RpdmUpIHJldHVybiAzO1xuICAgICAgcmV0dXJuIDQ7XG4gICAgfTtcbiAgICByZXR1cm4gcmFuayhsZWZ0KSAtIHJhbmsocmlnaHQpO1xuICB9KTtcblxuICBmb3IgKGNvbnN0IGFjY291bnQgb2YgYWNjb3VudHMpIHtcbiAgICBjb25zdCB0b2tlbiA9IGdoQ29tbWFuZC5vdXRwdXQoXG4gICAgICBbXCJhdXRoXCIsIFwidG9rZW5cIiwgXCItLWhvc3RuYW1lXCIsIGFjY291bnQuaG9zdCwgXCItLXVzZXJcIiwgYWNjb3VudC5sb2dpbl0sXG4gICAgICByb290LFxuICAgICAgeyBjYWNoZTogZmFsc2UgfSxcbiAgICApO1xuICAgIGlmICghdG9rZW4pIGNvbnRpbnVlO1xuICAgIGNvbnN0IGVudiA9IHsgLi4ucHJvY2Vzcy5lbnYsIEdIX0hPU1Q6IGFjY291bnQuaG9zdCwgR0hfVE9LRU46IHRva2VuIH07XG4gICAgaWYgKFxuICAgICAgIWdoQ29tbWFuZC5zdWNjZWVkcyhcbiAgICAgICAgW1wiYXBpXCIsIFwiLS1ob3N0bmFtZVwiLCBhY2NvdW50Lmhvc3QsIGByZXBvcy8ke3JlbW90ZS5yZXBvc2l0b3J5fWAsIFwiLS1zaWxlbnRcIl0sXG4gICAgICAgIHJvb3QsXG4gICAgICAgIHsgY2FjaGU6IGZhbHNlLCBlbnYgfSxcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBzZWxlY3RlZCA9IHsgZW52LCBob3N0OiBhY2NvdW50Lmhvc3QsIGxvZ2luOiBhY2NvdW50LmxvZ2luLCByZW1vdGUsIHJvb3QgfTtcbiAgICBwcm9qZWN0R2hBY2NvdW50Q2FjaGUuc2V0KGtleSwgc2VsZWN0ZWQpO1xuICAgIHJldHVybiBzZWxlY3RlZDtcbiAgfVxuICBwcm9qZWN0R2hBY2NvdW50Q2FjaGUuc2V0KGtleSwgbnVsbCk7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRmFsbGJhY2s6IG5vcm1hbGl6ZSBgZ2l0IHJlbW90ZSBnZXQtdXJsIG9yaWdpbmAgdG8gYSBwbGFpblxuICogYGh0dHBzOi8vaG9zdC9vd25lci9yZXBvYCBVUkwuIHNjcC1saWtlIC8gYHNzaDovL2AgLyBgZ2l0Oi8vYCAvXG4gKiBlbWJlZGRlZC1jcmVkZW50aWFsIGZvcm1zIGFyZSByZXdyaXR0ZW4gdG8gaHR0cHMsIGFuZCBhbiBzc2ggaG9zdCBhbGlhcyBpc1xuICogZm9sbG93ZWQgdG8gaXRzIHJlYWwgaG9zdG5hbWUuXG4gKi9cbmZ1bmN0aW9uIHJlcG9zaXRvcnlVcmxGcm9tR2l0KGN3ZD86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHJhdyA9IGdpdFJlbW90ZVVybChjd2QpO1xuICBpZiAoIXJhdykgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAvLyBOb3JtYWxpemUgdGhlIHNjaGVtZSB0byBodHRwcyBhdCB0aGUgc3RyaW5nIGxldmVsIGZpcnN0OiB0aGUgV0hBVFdHIGBVUkxgXG4gIC8vIHBhcnNlciBjYW4ndCBjb252ZXJ0IGEgbm9uLXNwZWNpYWwgc2NoZW1lIChgc3NoYC9gZ2l0YCkgdG8gYGh0dHBzYCAodGhlXG4gIC8vIGBwcm90b2NvbGAgc2V0dGVyIG5vLW9wcyksIGFuZCBzY3AtbGlrZSBgZ2l0QGhvc3Q6b3duZXIvcmVwb2AgaXNuJ3QgYSBVUkwgYXRcbiAgLy8gYWxsLiBSZXdyaXRlIGJvdGggaW50byBhbiBgaHR0cHM6Ly9gIHN0cmluZywgdGhlbiBsZXQge0BsaW5rIG5ldC51cmxCdWlsZGVyfVxuICAvLyBvd24gdGhlIHN0cnVjdHVyZWQgZWRpdHMgKHN0cmlwIGNyZWRlbnRpYWxzLCBzd2FwIHRoZSBob3N0KS5cbiAgbGV0IGh0dHBzID0gcmF3LnJlcGxhY2UoL15naXRcXCsvLCBcIlwiKTtcbiAgY29uc3Qgc2NwID0gL15bXkBdK0AoW146XSspOiguKykkLy5leGVjKGh0dHBzKTtcbiAgaWYgKHNjcCkgaHR0cHMgPSBgaHR0cHM6Ly8ke3NjcFsxXX0vJHtzY3BbMl19YDtcbiAgaHR0cHMgPSBodHRwcy5yZXBsYWNlKC9eKHNzaHxnaXQpOlxcL1xcLy8sIFwiaHR0cHM6Ly9cIik7XG5cbiAgbGV0IGJ1aWxkZXIgPSBuZXQudXJsQnVpbGRlcihodHRwcyk7XG4gIGlmICghYnVpbGRlcikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgLy8gRHJvcCBhbnkgZW1iZWRkZWQgYHVzZXJbOnBhc3NdQGAgY3JlZGVudGlhbHMuXG4gIGlmIChidWlsZGVyLnVzZXJuYW1lIHx8IGJ1aWxkZXIucGFzc3dvcmQpIHtcbiAgICBidWlsZGVyID0gYnVpbGRlci53aXRoKFwidXNlcm5hbWVcIiwgXCJcIikud2l0aChcInBhc3N3b3JkXCIsIFwiXCIpO1xuICB9XG4gIC8vIEZvbGxvdyBhbiBzc2ggaG9zdCBhbGlhcyB0byB0aGUgdHJ1ZSBob3N0LlxuICBjb25zdCByZWFsSG9zdCA9IHJlc29sdmVTc2hIb3N0TmFtZShidWlsZGVyLmhvc3RuYW1lLCBjd2QpO1xuICBpZiAocmVhbEhvc3QpIGJ1aWxkZXIgPSBidWlsZGVyLndpdGgoXCJob3N0bmFtZVwiLCByZWFsSG9zdCk7XG5cbiAgcmV0dXJuIGAke2J1aWxkZXIub3JpZ2lufSR7YnVpbGRlci5wYXRobmFtZS5yZXBsYWNlKC9cXC5naXQkLywgXCJcIil9YDtcbn1cblxuLyoqXG4gKiBUaGUgcmVwbydzIGNhbm9uaWNhbCByZW1vdGUgVVJMLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZXJlIGlzIG5vIGdpdCByZW1vdGUuXG4gKiBUcmllcyBgZ2ggcmVwbyB2aWV3YCBmaXJzdCAoaG9zdC1hY2N1cmF0ZSwgbm8gcGFyc2luZyksIHRoZW4gbm9ybWFsaXplc1xuICogYGdpdCByZW1vdGUgZ2V0LXVybCBvcmlnaW5gLiBBIGJsYW5rLCBvbWl0dGVkLCBvciBleHBsaWNpdGx5IGN1cnJlbnQgYGN3ZGBcbiAqIHJldXNlcyBjYWNoZWQgY29tbWFuZCBwcm9iZXM7IGFub3RoZXIgcmVzb2x2ZWQgZGlyZWN0b3J5IGV4ZWN1dGVzIGRpcmVjdGx5LlxuICpcbiAqIEBwYXJhbSBjd2QgLSBkaXJlY3RvcnkgdG8gcmVzb2x2ZSBmcm9tIChkZWZhdWx0cyB0byBgcHJvY2Vzcy5jd2QoKWApLlxuICogQHBhcmFtIGZvcm1hdCAtIGBcImh0dHBzXCJgIChkZWZhdWx0KSB5aWVsZHMgYGh0dHBzOi8vaG9zdC9vd25lci9yZXBvYDtcbiAqICAgYFwibnBtXCJgIHlpZWxkcyBucG0ncyBgZ2l0K2h0dHBzOi8vaG9zdC9vd25lci9yZXBvLmdpdGAgZm9ybSAoZm9yIGFcbiAqICAgYHBhY2thZ2UuanNvbmAgYHJlcG9zaXRvcnkudXJsYCB0aGF0IHBhc3NlcyBucG0gcHJvdmVuYW5jZSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBvc2l0b3J5VXJsKGN3ZD86IHN0cmluZywgZm9ybWF0OiBcImh0dHBzXCIgfCBcIm5wbVwiID0gXCJodHRwc1wiKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlV29ya2luZ0RpcmVjdG9yeShjd2QpO1xuICBjb25zdCBodHRwcyA9IHJlcG9zaXRvcnlVcmxGcm9tR2gocmVzb2x2ZWQpID8/IHJlcG9zaXRvcnlVcmxGcm9tR2l0KHJlc29sdmVkKTtcbiAgaWYgKCFodHRwcykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIGZvcm1hdCA9PT0gXCJucG1cIiA/IGBnaXQrJHtodHRwcy5yZXBsYWNlKC9cXC5naXQkLywgXCJcIil9LmdpdGAgOiBodHRwcztcbn1cblxuLyoqIFB1YmxpYyBucG0sIHVzZWQgb25seSBhZnRlciBlbnYsIG5wbXJjLCBidW5maWcsIGFuZCBwbnBtIHlhbWwgbWlzcy4gKi9cbmNvbnN0IERFRkFVTFRfTlBNX1JFR0lTVFJZID0gXCJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9cIjtcblxuLyoqIElucHV0cyB0aGF0IGNvbnRyb2wgYWN0aXZlIG5wbSByZWdpc3RyeSBkaXNjb3ZlcnkuICovXG5leHBvcnQgdHlwZSBOcG1SZWdpc3RyeU9wdGlvbnMgPSB7XG4gIC8qKiBTa2lwIHB1YmxpYyBucG1qcy5vcmcgc28gY2FsbGVycyBjYW4gZGV0ZWN0IGEgY29uZmlndXJlZCBvdmVycmlkZS4gKi9cbiAgb3ZlcnJpZGVPbmx5PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFJlYWQgYG5wbV9jb25maWdfcmVnaXN0cnlgLCBgTlBNX0NPTkZJR19SRUdJU1RSWWAsIGFuZCBgQlVOX0NPTkZJR19SRUdJU1RSWWBcbiAgICogZmlyc3QuIERlZmF1bHRzIHRvIHRydWUgc28gdGhlIHNhbWUgY2FzY2FkZSBhIHBhY2thZ2UgbWFuYWdlciB1c2VzIGlzIHRoZVxuICAgKiBkZWZhdWx0LlxuICAgKi9cbiAgZW52VmFycz86IGJvb2xlYW47XG59O1xuXG5jb25zdCBucG1SZWdpc3RyeUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIG5ldC5VcmxCdWlsZGVyIHwgdW5kZWZpbmVkPigpO1xuXG4vKipcbiAqIFRoZSBhY3RpdmUgbnBtIHJlZ2lzdHJ5IGFzIGEgY2hhaW5hYmxlIHtAbGluayBuZXQuVXJsQnVpbGRlcn0uXG4gKlxuICogUmVzb2x1dGlvbiBpcyBtYW5hZ2VyLWFnbm9zdGljIGFuZCBtZW1vaXplZCBwZXIgY3dkIHBsdXMgb3B0aW9uczogZW52aXJvbm1lbnRcbiAqIHZhcmlhYmxlcywgdGhlbiBgLm5wbXJjYCAocHJvamVjdCBhbmNlc3RvcnMsIHVzZXIsIGdsb2JhbCksIHRoZW4gQnVuXG4gKiBgYnVuZmlnLnRvbWxgIGBpbnN0YWxsLnJlZ2lzdHJ5YCwgdGhlbiBwbnBtIHdvcmtzcGFjZS9nbG9iYWwgWUFNTCwgdGhlblxuICogYGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2AuIGBvdmVycmlkZU9ubHlgIHNraXBzIHRoYXQgcHVibGljIGRlZmF1bHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBucG1SZWdpc3RyeShcbiAgY3dkPzogc3RyaW5nIHwgbnVsbCxcbiAgb3B0aW9ucz86IE5wbVJlZ2lzdHJ5T3B0aW9ucyxcbik6IG5ldC5VcmxCdWlsZGVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlV29ya2luZ0RpcmVjdG9yeShjd2QpO1xuICBjb25zdCBlbnZWYXJzID0gb3B0aW9ucz8uZW52VmFycyAhPT0gZmFsc2U7XG4gIGNvbnN0IG92ZXJyaWRlT25seSA9IEJvb2xlYW4ob3B0aW9ucz8ub3ZlcnJpZGVPbmx5KTtcbiAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoW1xuICAgIHJlc29sdmVkLFxuICAgIG92ZXJyaWRlT25seSxcbiAgICBlbnZWYXJzLFxuICAgIGhvbWVkaXIoKSxcbiAgICBwcm9jZXNzLmVudi5OUE1fQ09ORklHX1VTRVJDT05GSUcgPz8gXCJcIixcbiAgICBwcm9jZXNzLmVudi5OUE1fQ09ORklHX0dMT0JBTENPTkZJRyA/PyBcIlwiLFxuICAgIHByb2Nlc3MuZW52LlBSRUZJWCA/PyBcIlwiLFxuICAgIGVudlZhcnMgPyAocHJvY2Vzcy5lbnYubnBtX2NvbmZpZ19yZWdpc3RyeSA/PyBcIlwiKSA6IFwiXCIsXG4gICAgZW52VmFycyA/IChwcm9jZXNzLmVudi5OUE1fQ09ORklHX1JFR0lTVFJZID8/IFwiXCIpIDogXCJcIixcbiAgICBlbnZWYXJzID8gKHByb2Nlc3MuZW52LkJVTl9DT05GSUdfUkVHSVNUUlkgPz8gXCJcIikgOiBcIlwiLFxuICBdKTtcbiAgaWYgKG5wbVJlZ2lzdHJ5Q2FjaGUuaGFzKGtleSkpIHJldHVybiBucG1SZWdpc3RyeUNhY2hlLmdldChrZXkpO1xuICBjb25zdCB2YWx1ZSA9IHJlc29sdmVOcG1SZWdpc3RyeShyZXNvbHZlZCwgeyBvdmVycmlkZU9ubHksIGVudlZhcnMgfSk7XG4gIG5wbVJlZ2lzdHJ5Q2FjaGUuc2V0KGtleSwgdmFsdWUpO1xuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVOcG1SZWdpc3RyeShcbiAgY3dkOiBzdHJpbmcsXG4gIG9wdGlvbnM6IHsgb3ZlcnJpZGVPbmx5OiBib29sZWFuOyBlbnZWYXJzOiBib29sZWFuIH0sXG4pOiBuZXQuVXJsQnVpbGRlciB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIG5wbVJlZ2lzdHJ5Q2FuZGlkYXRlcyhjd2QsIG9wdGlvbnMuZW52VmFycykpIHtcbiAgICBjb25zdCB1cmwgPSB0b1JlZ2lzdHJ5VXJsKGNhbmRpZGF0ZSwgb3B0aW9ucy5vdmVycmlkZU9ubHkpO1xuICAgIGlmICh1cmwpIHJldHVybiB1cmw7XG4gIH1cbiAgcmV0dXJuIHRvUmVnaXN0cnlVcmwoREVGQVVMVF9OUE1fUkVHSVNUUlksIG9wdGlvbnMub3ZlcnJpZGVPbmx5KTtcbn1cblxuZnVuY3Rpb24qIG5wbVJlZ2lzdHJ5Q2FuZGlkYXRlcyhjd2Q6IHN0cmluZywgZW52VmFyczogYm9vbGVhbik6IEdlbmVyYXRvcjxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKGVudlZhcnMpIHtcbiAgICB5aWVsZCBwcm9jZXNzLmVudi5ucG1fY29uZmlnX3JlZ2lzdHJ5O1xuICAgIHlpZWxkIHByb2Nlc3MuZW52Lk5QTV9DT05GSUdfUkVHSVNUUlk7XG4gICAgeWllbGQgcHJvY2Vzcy5lbnYuQlVOX0NPTkZJR19SRUdJU1RSWTtcbiAgfVxuICBmb3IgKGNvbnN0IGRpciBvZiBhbmNlc3RvckRpcnMoY3dkKSkge1xuICAgIHlpZWxkIHJlYWROcG1yY1JlZ2lzdHJ5KGpvaW4oZGlyLCBcIi5ucG1yY1wiKSk7XG4gIH1cbiAgeWllbGQgcmVhZE5wbXJjUmVnaXN0cnkocHJvY2Vzcy5lbnYuTlBNX0NPTkZJR19VU0VSQ09ORklHID8/IGpvaW4oaG9tZWRpcigpLCBcIi5ucG1yY1wiKSk7XG4gIHlpZWxkIHJlYWROcG1yY1JlZ2lzdHJ5KHByb2Nlc3MuZW52Lk5QTV9DT05GSUdfR0xPQkFMQ09ORklHID8/IGRlZmF1bHRHbG9iYWxOcG1yYygpKTtcbiAgZm9yIChjb25zdCBkaXIgb2YgYW5jZXN0b3JEaXJzKGN3ZCkpIHtcbiAgICB5aWVsZCByZWFkQnVuZmlnUmVnaXN0cnkoam9pbihkaXIsIFwiYnVuZmlnLnRvbWxcIikpO1xuICB9XG4gIHlpZWxkIHJlYWRCdW5maWdSZWdpc3RyeShqb2luKGhvbWVkaXIoKSwgXCJidW5maWcudG9tbFwiKSk7XG4gIGZvciAoY29uc3QgZGlyIG9mIGFuY2VzdG9yRGlycyhjd2QpKSB7XG4gICAgeWllbGQgcmVhZFlhbWxSZWdpc3RyeShqb2luKGRpciwgXCJwbnBtLXdvcmtzcGFjZS55YW1sXCIpKTtcbiAgfVxuICBmb3IgKGNvbnN0IHBhdGggb2YgcG5wbUdsb2JhbENvbmZpZ1BhdGhzKCkpIHtcbiAgICB5aWVsZCByZWFkWWFtbFJlZ2lzdHJ5KHBhdGgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvUmVnaXN0cnlVcmwoXG4gIGNhbmRpZGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBvdmVycmlkZU9ubHk6IGJvb2xlYW4sXG4pOiBuZXQuVXJsQnVpbGRlciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHRyaW1tZWQgPSBzdHJpbmdVdGlscy50cmltVG9OdWxsKGNhbmRpZGF0ZSk7XG4gIGlmICghdHJpbW1lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgdXJsID0gbmV0LnVybEJ1aWxkZXIodHJpbW1lZCk7XG4gIGlmICghdXJsKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAob3ZlcnJpZGVPbmx5ICYmIGlzUHVibGljTnBtUmVnaXN0cnkodXJsKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHVybDtcbn1cblxuZnVuY3Rpb24gaXNQdWJsaWNOcG1SZWdpc3RyeSh1cmw6IG5ldC5VcmxCdWlsZGVyKTogYm9vbGVhbiB7XG4gIHJldHVybiB1cmwuaG9zdG5hbWUgPT09IFwicmVnaXN0cnkubnBtanMub3JnXCI7XG59XG5cbmZ1bmN0aW9uKiBhbmNlc3RvckRpcnMoY3dkOiBzdHJpbmcpOiBHZW5lcmF0b3I8c3RyaW5nPiB7XG4gIGxldCBjdXJyZW50ID0gY3dkO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIHlpZWxkIGN1cnJlbnQ7XG4gICAgY29uc3QgcGFyZW50ID0gZGlybmFtZShjdXJyZW50KTtcbiAgICBpZiAocGFyZW50ID09PSBjdXJyZW50KSByZXR1cm47XG4gICAgY3VycmVudCA9IHBhcmVudDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0R2xvYmFsTnBtcmMoKTogc3RyaW5nIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09IFwid2luMzJcIikge1xuICAgIHJldHVybiBqb2luKHByb2Nlc3MuZW52LlBST0dSQU1EQVRBID8/IFwiQzpcXFxcUHJvZ3JhbURhdGFcIiwgXCJucG1cIiwgXCJldGNcIiwgXCJucG1yY1wiKTtcbiAgfVxuICByZXR1cm4gam9pbihwcm9jZXNzLmVudi5QUkVGSVggPz8gXCIvdXNyL2xvY2FsXCIsIFwiZXRjXCIsIFwibnBtcmNcIik7XG59XG5cbmZ1bmN0aW9uIHBucG1HbG9iYWxDb25maWdQYXRocygpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGhvbWUgPSBob21lZGlyKCk7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSBcImRhcndpblwiKSB7XG4gICAgcmV0dXJuIFtqb2luKGhvbWUsIFwiTGlicmFyeS9QcmVmZXJlbmNlcy9wbnBtL2NvbmZpZy55YW1sXCIpXTtcbiAgfVxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiKSB7XG4gICAgcmV0dXJuIFtqb2luKHByb2Nlc3MuZW52LkxPQ0FMQVBQREFUQSA/PyBqb2luKGhvbWUsIFwiQXBwRGF0YS9Mb2NhbFwiKSwgXCJwbnBtL2NvbmZpZy55YW1sXCIpXTtcbiAgfVxuICByZXR1cm4gW2pvaW4oaG9tZSwgXCIuY29uZmlnL3BucG0vY29uZmlnLnlhbWxcIildO1xufVxuXG5mdW5jdGlvbiByZWFkTnBtcmNSZWdpc3RyeShwYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gY2FjaGVkUmVjb3JkKGBucG1yYy1yZWdpc3RyeToke3BhdGh9YCwgKCkgPT4ge1xuICAgIGNvbnN0IHRleHQgPSByZWFkVGV4dEZpbGUocGF0aCk7XG4gICAgY29uc3QgcmVnaXN0cnkgPSB0ZXh0ID8gcGFyc2VJbmlSZWdpc3RyeSh0ZXh0KSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVnaXN0cnkgPyB7IHJlZ2lzdHJ5IH0gOiB1bmRlZmluZWQ7XG4gIH0pPy5yZWdpc3RyeTtcbn1cblxuZnVuY3Rpb24gcmVhZEJ1bmZpZ1JlZ2lzdHJ5KHBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBjYWNoZWRSZWNvcmQoYGJ1bmZpZy1yZWdpc3RyeToke3BhdGh9YCwgKCkgPT4ge1xuICAgIGNvbnN0IHRleHQgPSByZWFkVGV4dEZpbGUocGF0aCk7XG4gICAgY29uc3QgcmVnaXN0cnkgPSB0ZXh0ID8gcGFyc2VCdW5maWdSZWdpc3RyeSh0ZXh0KSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVnaXN0cnkgPyB7IHJlZ2lzdHJ5IH0gOiB1bmRlZmluZWQ7XG4gIH0pPy5yZWdpc3RyeTtcbn1cblxuZnVuY3Rpb24gcmVhZFlhbWxSZWdpc3RyeShwYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gY2FjaGVkUmVjb3JkKGB5YW1sLXJlZ2lzdHJ5OiR7cGF0aH1gLCAoKSA9PiB7XG4gICAgY29uc3QgdGV4dCA9IHJlYWRUZXh0RmlsZShwYXRoKTtcbiAgICBpZiAoIXRleHQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VZYW1sKHRleHQpO1xuICAgIGlmICghb2JqZWN0LmlzUmVjb3JkKHBhcnNlZCkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcmVnaXN0cnkgPSB5YW1sUmVnaXN0cnkocGFyc2VkKTtcbiAgICByZXR1cm4gcmVnaXN0cnkgPyB7IHJlZ2lzdHJ5IH0gOiB1bmRlZmluZWQ7XG4gIH0pPy5yZWdpc3RyeTtcbn1cblxuZnVuY3Rpb24gcmVhZFRleHRGaWxlKHBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghZmlsZVN0YXRTeW5jKHBhdGgpPy5pc0ZpbGUoKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHJlYWRGaWxlU3luYyhwYXRoLCBcInV0ZjhcIik7XG59XG5cbi8qKiBQYXJzZSBhIGByZWdpc3RyeT1gIGFzc2lnbm1lbnQgZnJvbSBucG1yYyAvIGluaSB0ZXh0LiAqL1xuZnVuY3Rpb24gcGFyc2VJbmlSZWdpc3RyeSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBmb3IgKGNvbnN0IHJhdyBvZiB0ZXh0LnNwbGl0KC9cXHI/XFxuLykpIHtcbiAgICBjb25zdCBsaW5lID0gcmF3LnRyaW0oKTtcbiAgICBpZiAoIWxpbmUgfHwgbGluZS5zdGFydHNXaXRoKFwiI1wiKSB8fCBsaW5lLnN0YXJ0c1dpdGgoXCI7XCIpKSBjb250aW51ZTtcbiAgICBjb25zdCBlcSA9IGxpbmUuaW5kZXhPZihcIj1cIik7XG4gICAgaWYgKGVxID09PSAtMSkgY29udGludWU7XG4gICAgaWYgKGxpbmUuc2xpY2UoMCwgZXEpLnRyaW0oKSAhPT0gXCJyZWdpc3RyeVwiKSBjb250aW51ZTtcbiAgICByZXR1cm4gdW5xdW90ZUluaVZhbHVlKGxpbmUuc2xpY2UoZXEgKyAxKSk7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZWFkIEJ1biBgaW5zdGFsbC5yZWdpc3RyeWAgZnJvbSBhIGJ1bmZpZy50b21sLiBUYWJsZSBmb3JtXG4gKiBgW2luc3RhbGwucmVnaXN0cnldYCB3aXRoIGB1cmwgPSBcIi4uLlwiYCBpcyBhY2NlcHRlZDsgc2NvcGVkIG1hcHMgYXJlIGlnbm9yZWQuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQnVuZmlnUmVnaXN0cnkodGV4dDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgbGV0IHNlY3Rpb24gPSBcIlwiO1xuICBmb3IgKGNvbnN0IHJhdyBvZiB0ZXh0LnNwbGl0KC9cXHI/XFxuLykpIHtcbiAgICBjb25zdCBsaW5lID0gc3RyaXBUb21sQ29tbWVudChyYXcpLnRyaW0oKTtcbiAgICBpZiAoIWxpbmUpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGhlYWRlciA9IC9eXFxbKFteXFxdXSspXFxdJC8uZXhlYyhsaW5lKTtcbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBzZWN0aW9uID0gaGVhZGVyWzFdIS50cmltKCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgZXEgPSBsaW5lLmluZGV4T2YoXCI9XCIpO1xuICAgIGlmIChlcSA9PT0gLTEpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGtleSA9IGxpbmUuc2xpY2UoMCwgZXEpLnRyaW0oKTtcbiAgICBjb25zdCB2YWx1ZSA9IHVucXVvdGVJbmlWYWx1ZShsaW5lLnNsaWNlKGVxICsgMSkpO1xuICAgIGlmIChzZWN0aW9uID09PSBcImluc3RhbGxcIiAmJiBrZXkgPT09IFwicmVnaXN0cnlcIiAmJiAhdmFsdWUuc3RhcnRzV2l0aChcIntcIikpIHJldHVybiB2YWx1ZTtcbiAgICBpZiAoc2VjdGlvbiA9PT0gXCJpbnN0YWxsLnJlZ2lzdHJ5XCIgJiYga2V5ID09PSBcInVybFwiKSByZXR1cm4gdmFsdWU7XG4gICAgaWYgKCFzZWN0aW9uICYmIGtleSA9PT0gXCJpbnN0YWxsLnJlZ2lzdHJ5XCIpIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB5YW1sUmVnaXN0cnkoZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodHlwZW9mIGRhdGEucmVnaXN0cnkgPT09IFwic3RyaW5nXCIpIHJldHVybiBkYXRhLnJlZ2lzdHJ5O1xuICBjb25zdCByZWdpc3RyaWVzID0gZGF0YS5yZWdpc3RyaWVzO1xuICBpZiAob2JqZWN0LmlzUmVjb3JkKHJlZ2lzdHJpZXMpICYmIHR5cGVvZiByZWdpc3RyaWVzLmRlZmF1bHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gcmVnaXN0cmllcy5kZWZhdWx0O1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHVucXVvdGVJbmlWYWx1ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKTtcbiAgY29uc3QgY29tbWVudCA9IHRyaW1tZWQuc2VhcmNoKC9cXHMrIy8pO1xuICBjb25zdCByYXcgPSBjb21tZW50ID09PSAtMSA/IHRyaW1tZWQgOiB0cmltbWVkLnNsaWNlKDAsIGNvbW1lbnQpLnRyaW0oKTtcbiAgaWYgKChyYXcuc3RhcnRzV2l0aCgnXCInKSAmJiByYXcuZW5kc1dpdGgoJ1wiJykpIHx8IChyYXcuc3RhcnRzV2l0aChcIidcIikgJiYgcmF3LmVuZHNXaXRoKFwiJ1wiKSkpIHtcbiAgICByZXR1cm4gcmF3LnNsaWNlKDEsIC0xKTtcbiAgfVxuICByZXR1cm4gcmF3O1xufVxuXG5mdW5jdGlvbiBzdHJpcFRvbWxDb21tZW50KGxpbmU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGhhc2ggPSBsaW5lLmluZGV4T2YoXCIjXCIpO1xuICByZXR1cm4gaGFzaCA9PT0gLTEgPyBsaW5lIDogbGluZS5zbGljZSgwLCBoYXNoKTtcbn1cblxuZnVuY3Rpb24gcmVhZFBhY2thZ2VOYW1lKHBrZ1BhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghZmlsZVN0YXRTeW5jKHBrZ1BhdGgpPy5pc0ZpbGUoKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHN0cmluZ1V0aWxzLnRyaW1Ub051bGwoanNvbi5wYXJzZVJlY29yZChyZWFkRmlsZVN5bmMocGtnUGF0aCwgXCJ1dGY4XCIpKT8ubmFtZSkgPz8gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFpbigpIHtcbiAgY29uc29sZS5sb2coXCJucG0gcm9vdDpcIiwgbnBtUm9vdCgpKTtcbiAgY29uc29sZS5sb2coXCJyZXBvIHJvb3Q6XCIsIGdpdFJvb3QoKSk7XG4gIGNvbnNvbGUubG9nKFwicGFja2FnZSByb290OlwiLCByb290KCkpO1xuICBjb25zb2xlLmxvZyhcInByb2plY3QgbmFtZTpcIiwgbmFtZSgpKTtcbiAgY29uc29sZS5sb2coXCJyZXBvc2l0b3J5IHVybDpcIiwgcmVwb3NpdG9yeVVybCgpKTtcbiAgY29uc29sZS5sb2coXCJyZXBvc2l0b3J5IHVybCAobnBtKTpcIiwgcmVwb3NpdG9yeVVybCh1bmRlZmluZWQsIFwibnBtXCIpKTtcbiAgY29uc3QgZ2hBY2NvdW50ID0gcmVzb2x2ZVByb2plY3RHaEFjY291bnQoKTtcbiAgaWYgKGdoQWNjb3VudCkge1xuICAgIGNvbnNvbGUubG9nKFwicHJvamVjdCBnaCBob3N0OlwiLCBnaEFjY291bnQuaG9zdCk7XG4gICAgY29uc29sZS5sb2coXCJwcm9qZWN0IGdoIGxvZ2luOlwiLCBnaEFjY291bnQubG9naW4pO1xuICAgIGNvbnNvbGUubG9nKFwicHJvamVjdCBnaCByZW1vdGU6XCIsIGdoQWNjb3VudC5yZW1vdGUucmVwb3NpdG9yeSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coXCJwcm9qZWN0IGdoIGFjY291bnQ6IG5vdCBmb3VuZFwiKTtcbiAgfVxufVxuXG5pZiAoaW1wb3J0Lm1ldGEubWFpbikge1xuICBtYWluKCk7XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"typescript": "^5.9.3"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@dbx-tools/shared-core": "^0.9.
|
|
28
|
+
"@dbx-tools/shared-core": "^0.9.93",
|
|
29
29
|
"extract-zip": "^2.0.1",
|
|
30
30
|
"proper-lockfile": "^4.1.2",
|
|
31
31
|
"semver": "^7.7.3",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"./package.json": "./package.json"
|
|
88
88
|
}
|
|
89
89
|
},
|
|
90
|
-
"version": "0.9.
|
|
90
|
+
"version": "0.9.93",
|
|
91
91
|
"types": "./lib/index.d.ts",
|
|
92
92
|
"dbxToolsConfig": {
|
|
93
93
|
"tags": [
|
package/src/project-utils.ts
CHANGED
|
@@ -738,7 +738,7 @@ function readPackageName(pkgPath: string): string | undefined {
|
|
|
738
738
|
return stringUtils.trimToNull(json.parseRecord(readFileSync(pkgPath, "utf8"))?.name) ?? undefined;
|
|
739
739
|
}
|
|
740
740
|
|
|
741
|
-
|
|
741
|
+
export function main() {
|
|
742
742
|
console.log("npm root:", npmRoot());
|
|
743
743
|
console.log("repo root:", gitRoot());
|
|
744
744
|
console.log("package root:", root());
|
|
@@ -754,3 +754,7 @@ if (import.meta.main) {
|
|
|
754
754
|
console.log("project gh account: not found");
|
|
755
755
|
}
|
|
756
756
|
}
|
|
757
|
+
|
|
758
|
+
if (import.meta.main) {
|
|
759
|
+
main();
|
|
760
|
+
}
|