@pipeline-builder/pipeline-data 3.4.86 → 3.4.87
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/lib/api/crud-service.d.ts +25 -3
- package/lib/api/crud-service.js +40 -11
- package/lib/api/query-builders.js +57 -29
- package/lib/database/drizzle-schema.d.ts +50 -6188
- package/lib/database/drizzle-schema.js +20 -954
- package/lib/database/postgres-connection.d.ts +0 -1
- package/lib/database/postgres-connection.js +1 -6
- package/lib/database/schema/alert.d.ts +554 -0
- package/lib/database/schema/alert.js +120 -0
- package/lib/database/schema/compliance.d.ts +3284 -0
- package/lib/database/schema/compliance.js +348 -0
- package/lib/database/schema/dashboard.d.ts +457 -0
- package/lib/database/schema/dashboard.js +120 -0
- package/lib/database/schema/message.d.ts +379 -0
- package/lib/database/schema/message.js +95 -0
- package/lib/database/schema/pipeline.d.ts +868 -0
- package/lib/database/schema/pipeline.js +166 -0
- package/lib/database/schema/plugin.d.ts +617 -0
- package/lib/database/schema/plugin.js +134 -0
- package/lib/database/tenancy.js +6 -3
- package/package.json +2 -2
|
@@ -242,4 +242,3 @@ export declare function initializeDatabase(): Promise<void>;
|
|
|
242
242
|
export declare const dbReplica: import("drizzle-orm/node-postgres").NodePgDatabase<Record<string, unknown>> & {
|
|
243
243
|
$client: Pool;
|
|
244
244
|
};
|
|
245
|
-
export declare function closeAllConnections(): Promise<void>;
|
|
@@ -514,9 +514,4 @@ async function closeReplicaPool() {
|
|
|
514
514
|
_replica = null;
|
|
515
515
|
}
|
|
516
516
|
}
|
|
517
|
-
// Back-compat alias: closeConnection() now tears down both pools itself, so this
|
|
518
|
-
// just delegates. Prefer closeConnection().
|
|
519
|
-
export async function closeAllConnections() {
|
|
520
|
-
await closeConnection();
|
|
521
|
-
}
|
|
522
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdGdyZXMtY29ubmVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9wb3N0Z3Jlcy1jb25uZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxJQUFJLEVBQW9DLE1BQU0sSUFBSSxDQUFDO0FBQzVELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU5RCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7QUFFeEM7OztHQUdHO0FBQ0gsU0FBUyxXQUFXLENBQUMsS0FBeUIsRUFBRSxRQUFnQjtJQUM5RCxJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQzVCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbkMsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNsRCxDQUFDO0FBRUQscURBQXFEO0FBQ3JELE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDO0FBRXhELFNBQVMsaUJBQWlCO0lBQ3hCLGlGQUFpRjtJQUNqRiwwREFBMEQ7SUFDMUQsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FB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QyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUcsQ0FBQztZQUFTLENBQUM7UUFDVCxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDO0FBRUQsaUZBQWlGO0FBQ2pGLDRDQUE0QztBQUM1QyxNQUFNLENBQUMsS0FBSyxVQUFVLG1CQUFtQjtJQUN2QyxNQUFNLGVBQWUsRUFBRSxDQUFDO0FBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgc3FsIH0gZnJvbSAnZHJpenpsZS1vcm0nO1xuaW1wb3J0IHsgZHJpenpsZSB9IGZyb20gJ2RyaXp6bGUtb3JtL25vZGUtcG9zdGdyZXMnO1xuaW1wb3J0IHsgUG9vbCwgdHlwZSBQb29sQ29uZmlnLCB0eXBlIFBvb2xDbGllbnQgfSBmcm9tICdwZyc7XG5pbXBvcnQgeyBzY2hlbWEgfSBmcm9tICcuL2RyaXp6bGUtc2NoZW1hLmpzJztcbmltcG9ydCB7IENvbm5lY3Rpb25SZXRyeVN0cmF0ZWd5IH0gZnJvbSAnLi9yZXRyeS1zdHJhdGVneS5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignZGF0YWJhc2UnKTtcblxuLyoqXG4gKiBHZXQgZGF0YWJhc2UgY29uZmlndXJhdGlvbiBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICogTm90ZTogVXNlcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZGlyZWN0bHkgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jeSB3aXRoIHBpcGVsaW5lLWNvcmVcbiAqL1xuZnVuY3Rpb24gcGFyc2VJbnRFbnYodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgZmFsbGJhY2s6IG51bWJlcik6IG51bWJlciB7XG4gIGlmICghdmFsdWUpIHJldHVybiBmYWxsYmFjaztcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgcmV0dXJuIE51bWJlci5pc05hTihwYXJzZWQpID8gZmFsbGJhY2sgOiBwYXJzZWQ7XG59XG5cbi8qKiBEZXRlY3QgTGFtYmRhIGVudmlyb25tZW50IGZvciBwb29sLXNpemUgdHVuaW5nICovXG5jb25zdCBpc0xhbWJkYSA9ICEhcHJvY2Vzcy5lbnYuQVdTX0xBTUJEQV9GVU5DVElPTl9OQU1FO1xuXG5mdW5jdGlvbiBnZXREYXRhYmFzZUNvbmZpZygpIHtcbiAgLy8gTGFtYmRhOiBzbWFsbCBwb29sIChlYWNoIGludm9jYXRpb24gaXMgc2hvcnQtbGl2ZWQsIG1hbnkgY29uY3VycmVudCBpbnN0YW5jZXMpXG4gIC8vIEVDUy9sb25nLXJ1bm5pbmc6IGxhcmdlciBwb29sIGZvciBzdXN0YWluZWQgY29uY3VycmVuY3lcbiAgY29uc3QgZGVmYXVsdFBvb2xTaXplID0gaXNMYW1iZGEgPyAyIDogMjA7XG4gIGNvbnN0IGRlZmF1bHRJZGxlVGltZW91dCA9IGlzTGFtYmRhID8gMTAwMDAgOiAzMDAwMDtcblxuICByZXR1cm4ge1xuICAgIGhvc3Q6IHByb2Nlc3MuZW52LkRCX0hPU1QgfHwgJ3Bvc3RncmVzJyxcbiAgICBwb3J0OiBwYXJzZUludEVudihwcm9jZXNzLmVudi5EQl9QT1JULCA1NDMyKSxcbiAgICBkYXRhYmFzZTogcHJvY2Vzcy5lbnYuREFUQUJBU0UgfHwgJ3BpcGVsaW5lX2J1aWxkZXInLFxuICAgIHVzZXI6IHByb2Nlc3MuZW52LkRCX1VTRVIgfHwgJ3Bvc3RncmVzJyxcbiAgICBwYXNzd29yZDogcHJvY2Vzcy5lbnYuREJfUEFTU1dPUkQgfHwgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicgPyAoKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoJ0RCX1BBU1NXT1JEIGlzIHJlcXVpcmVkIGluIHByb2R1Y3Rpb24nKTsgfSkoKSBhcyBzdHJpbmcgOiAnJyksXG4gICAgbWF4UG9vbFNpemU6IHBhcnNlSW50RW52KHByb2Nlc3MuZW52LkRSSVpaTEVfTUFYX1BPT0xfU0laRSwgZGVmYXVsdFBvb2xTaXplKSxcbiAgICBpZGxlVGltZW91dE1pbGxpczogcGFyc2VJbnRFbnYocHJvY2Vzcy5lbnYuRFJJWlpMRV9JRExFX1RJTUVPVVRfTUlMTElTLCBkZWZhdWx0SWRsZVRpbWVvdXQpLFxuICAgIGNvbm5lY3Rpb25UaW1lb3V0TWlsbGlzOiBwYXJzZUludEVudihwcm9jZXNzLmVudi5EUklaWkxFX0NPTk5FQ1RJT05fVElNRU9VVF9NSUxMSVMsIDUwMDApLFxuICB9O1xufVxuXG4vKipcbiAqIERhdGFiYXNlIGNvbm5lY3Rpb24gc3RhdGlzdGljcyBmb3IgbW9uaXRvcmluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3Rpb25TdGF0cyB7XG4gIHRvdGFsQ291bnQ6IG51bWJlcjtcbiAgaWRsZUNvdW50OiBudW1iZXI7XG4gIHdhaXRpbmdDb3VudDogbnVtYmVyO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIHRoZSBkYXRhYmFzZSBjb25uZWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdGlvbk9wdGlvbnMge1xuICAvKiogV2hldGhlciB0byBlbmFibGUgY29ubmVjdGlvbiBsb2dnaW5nICovXG4gIGVuYWJsZUxvZ2dpbmc/OiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgcmV0cnkgZmFpbGVkIGNvbm5lY3Rpb25zICovXG4gIGVuYWJsZUF1dG9SZXRyeT86IGJvb2xlYW47XG5cbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIGNvbm5lY3Rpb24gcmV0cnkgYXR0ZW1wdHMgKi9cbiAgbWF4UmV0cmllcz86IG51bWJlcjtcblxuICAvKiogRGVsYXkgYmV0d2VlbiByZXRyeSBhdHRlbXB0cyBpbiBtaWxsaXNlY29uZHMgKi9cbiAgcmV0cnlEZWxheT86IG51bWJlcjtcblxuICAvKiogU1NMIGNvbmZpZ3VyYXRpb24gKi9cbiAgc3NsPzogYm9vbGVhbiB8IHsgcmVqZWN0VW5hdXRob3JpemVkOiBib29sZWFuIH07XG59XG5cbi8qKlxuICogU2luZ2xldG9uIGRhdGFiYXNlIGNvbm5lY3Rpb24gY2xhc3MuXG4gKiBNYW5hZ2VzIFBvc3RncmVTUUwgY29ubmVjdGlvbiBwb29saW5nIGFuZCBEcml6emxlIE9STSBpbnN0YW5jZS5cbiAqXG4gKiBGZWF0dXJlczpcbiAqIC0gU2luZ2xldG9uIHBhdHRlcm4gZm9yIHNpbmdsZSBjb25uZWN0aW9uIHBvb2xcbiAqIC0gQXV0b21hdGljIGNvbm5lY3Rpb24gcmV0cnkgd2l0aCBiYWNrb2ZmXG4gKiAtIENvbm5lY3Rpb24gaGVhbHRoIG1vbml0b3JpbmdcbiAqIC0gR3JhY2VmdWwgc2h1dGRvd24gaGFuZGxpbmdcbiAqIC0gQ29tcHJlaGVuc2l2ZSBlcnJvciBoYW5kbGluZ1xuICogLSBDb25uZWN0aW9uIHN0YXRpc3RpY3MgdHJhY2tpbmdcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgQ29ubmVjdGlvbiB9IGZyb20gJy4vY29ubmVjdGlvbic7XG4gKlxuICogY29uc3QgY29ubmVjdGlvbiA9IENvbm5lY3Rpb24uZ2V0SW5zdGFuY2UoKTtcbiAqIGNvbnN0IHBsdWdpbnMgPSBhd2FpdCBjb25uZWN0aW9uLmRiLnNlbGVjdCgpLmZyb20oc2NoZW1hLnBsdWdpbik7XG4gKlxuICogLy8gRHVyaW5nIHNodXRkb3duXG4gKiBhd2FpdCBjb25uZWN0aW9uLmNsb3NlKCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIENvbm5lY3Rpb24ge1xuICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogQ29ubmVjdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBEcml6emxlIE9STSBkYXRhYmFzZSBpbnN0YW5jZSB3aXRoIHNjaGVtYVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRiOiBSZXR1cm5UeXBlPHR5cGVvZiBkcml6emxlPjtcblxuICBwcml2YXRlIHJlYWRvbmx5IHBvb2w6IFBvb2w7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogUmVxdWlyZWQ8Q29ubmVjdGlvbk9wdGlvbnM+O1xuICBwcml2YXRlIHJlYWRvbmx5IHJldHJ5U3RyYXRlZ3k6IENvbm5lY3Rpb25SZXRyeVN0cmF0ZWd5O1xuICBwcml2YXRlIGlzU2h1dHRpbmdEb3duID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFByaXZhdGUgY29uc3RydWN0b3IgdG8gZW5mb3JjZSBzaW5nbGV0b24gcGF0dGVybi5cbiAgICogSW5pdGlhbGl6ZXMgUG9zdGdyZVNRTCBjb25uZWN0aW9uIHBvb2wgYW5kIERyaXp6bGUgT1JNIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjb25uZWN0aW9uXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBkYXRhYmFzZSBpbml0aWFsaXphdGlvbiBmYWlscyBhZnRlciBhbGwgcmV0cmllc1xuICAgKi9cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihvcHRpb25zOiBDb25uZWN0aW9uT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgZW5hYmxlTG9nZ2luZzogb3B0aW9ucy5lbmFibGVMb2dnaW5nID8/IHRydWUsXG4gICAgICBlbmFibGVBdXRvUmV0cnk6IG9wdGlvbnMuZW5hYmxlQXV0b1JldHJ5ID8/IHRydWUsXG4gICAgICBtYXhSZXRyaWVzOiBvcHRpb25zLm1heFJldHJpZXMgPz8gcGFyc2VJbnQocHJvY2Vzcy5lbnYuREJfTUFYX1JFVFJJRVMgfHwgJzMnLCAxMCksXG4gICAgICByZXRyeURlbGF5OiBvcHRpb25zLnJldHJ5RGVsYXkgPz8gcGFyc2VJbnQocHJvY2Vzcy5lbnYuREJfUkVUUllfREVMQVlfTVMgfHwgJzEwMDAnLCAxMCksXG4gICAgICBzc2w6IG9wdGlvbnMuc3NsID8/IGZhbHNlLFxuICAgIH07XG5cbiAgICAvLyBJbml0aWFsaXplIHJldHJ5IHN0cmF0ZWd5XG4gICAgdGhpcy5yZXRyeVN0cmF0ZWd5ID0gbmV3IENvbm5lY3Rpb25SZXRyeVN0cmF0ZWd5KHtcbiAgICAgIG1heFJldHJpZXM6IHRoaXMub3B0aW9ucy5tYXhSZXRyaWVzLFxuICAgICAgYmFzZURlbGF5OiB0aGlzLm9wdGlvbnMucmV0cnlEZWxheSxcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWcgPSBnZXREYXRhYmFzZUNvbmZpZygpO1xuXG4gICAgICBjb25zdCBwb29sQ29uZmlnOiBQb29sQ29uZmlnID0ge1xuICAgICAgICBob3N0OiBjb25maWcuaG9zdCxcbiAgICAgICAgcG9ydDogY29uZmlnLnBvcnQsXG4gICAgICAgIGRhdGFiYXNlOiBjb25maWcuZGF0YWJhc2UsXG4gICAgICAgIHVzZXI6IGNvbmZpZy51c2VyLFxuICAgICAgICBwYXNzd29yZDogY29uZmlnLnBhc3N3b3JkLFxuICAgICAgICBtYXg6IGNvbmZpZy5tYXhQb29sU2l6ZSxcbiAgICAgICAgaWRsZVRpbWVvdXRNaWxsaXM6IGNvbmZpZy5pZGxlVGltZW91dE1pbGxpcyxcbiAgICAgICAgY29ubmVjdGlvblRpbWVvdXRNaWxsaXM6IGNvbmZpZy5jb25uZWN0aW9uVGltZW91dE1pbGxpcyxcbiAgICAgICAgc3NsOiB0aGlzLm9wdGlvbnMuc3NsLFxuICAgICAgICBhbGxvd0V4aXRPbklkbGU6IHRydWUsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnBvb2wgPSBuZXcgUG9vbChwb29sQ29uZmlnKTtcbiAgICAgIHRoaXMuc2V0dXBFdmVudEhhbmRsZXJzKCk7XG5cbiAgICAgIHRoaXMuZGIgPSBkcml6emxlKHRoaXMucG9vbCwgeyBzY2hlbWEgfSk7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlTG9nZ2luZykge1xuICAgICAgICBsb2dnZXIuaW5mbygnRGF0YWJhc2UgY29ubmVjdGlvbiBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgICAgdGhpcy5sb2dDb25uZWN0aW9uQ29uZmlnKHBvb2xDb25maWcpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBpbml0aWFsaXplIGRhdGFiYXNlIGNvbm5lY3Rpb246JywgZXJyb3IpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEYXRhYmFzZSBpbml0aWFsaXphdGlvbiBmYWlsZWQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBDb25uZWN0aW9uIGNsYXNzLlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIGlmIG9uZSBkb2Vzbid0IGV4aXN0LlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gKG9ubHkgdXNlZCBvbiBmaXJzdCBjYWxsKVxuICAgKiBAcmV0dXJucyBUaGUgc2luZ2xldG9uIENvbm5lY3Rpb24gaW5zdGFuY2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0SW5zdGFuY2Uob3B0aW9ucz86IENvbm5lY3Rpb25PcHRpb25zKTogQ29ubmVjdGlvbiB7XG4gICAgaWYgKCFDb25uZWN0aW9uLmluc3RhbmNlKSB7XG4gICAgICBDb25uZWN0aW9uLmluc3RhbmNlID0gbmV3IENvbm5lY3Rpb24ob3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBDb25uZWN0aW9uLmluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgc2luZ2xldG9uIGluc3RhbmNlLlxuICAgKiBVc2VmdWwgZm9yIHRlc3Rpbmcgb3IgcmVjb25maWd1cmluZyB0aGUgY29ubmVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGNsb3NlRXhpc3RpbmcgLSBXaGV0aGVyIHRvIGNsb3NlIGV4aXN0aW5nIGNvbm5lY3Rpb24gYmVmb3JlIHJlc2V0XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFzeW5jIHJlc2V0KGNsb3NlRXhpc3Rpbmc6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKENvbm5lY3Rpb24uaW5zdGFuY2UgJiYgY2xvc2VFeGlzdGluZykge1xuICAgICAgYXdhaXQgQ29ubmVjdGlvbi5pbnN0YW5jZS5jbG9zZSgpO1xuICAgIH1cbiAgICBDb25uZWN0aW9uLmluc3RhbmNlID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUZXN0cyB0aGUgZGF0YWJhc2UgY29ubmVjdGlvblxuICAgKlxuICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiBjb25uZWN0aW9uIGlzIGhlYWx0aHlcbiAgICovXG4gIHB1YmxpYyBhc3luYyB0ZXN0Q29ubmVjdGlvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5wb29sLmNvbm5lY3QoKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5xdWVyeSgnU0VMRUNUIDEnKTtcbiAgICAgIGNsaWVudC5yZWxlYXNlKCk7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlTG9nZ2luZykge1xuICAgICAgICBsb2dnZXIuaW5mbygnRGF0YWJhc2UgY29ubmVjdGlvbiB0ZXN0IHN1Y2Nlc3NmdWwnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdC5yb3dzLmxlbmd0aCA+IDA7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRGF0YWJhc2UgY29ubmVjdGlvbiB0ZXN0IGZhaWxlZDonLCBlcnJvcik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY29ubmVjdGlvbiBwb29sIHN0YXRpc3RpY3NcbiAgICpcbiAgICogQHJldHVybnMgQ3VycmVudCBjb25uZWN0aW9uIHBvb2wgc3RhdGlzdGljc1xuICAgKi9cbiAgcHVibGljIGdldFN0YXRzKCk6IENvbm5lY3Rpb25TdGF0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvdGFsQ291bnQ6IHRoaXMucG9vbC50b3RhbENvdW50LFxuICAgICAgaWRsZUNvdW50OiB0aGlzLnBvb2wuaWRsZUNvdW50LFxuICAgICAgd2FpdGluZ0NvdW50OiB0aGlzLnBvb2wud2FpdGluZ0NvdW50LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgYSBkYXRhYmFzZSB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiB0byBleGVjdXRlIHdpdGhpbiB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHJldHVybnMgUmVzdWx0IG9mIHRoZSB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbm5lY3Rpb24udHJhbnNhY3Rpb24oYXN5bmMgKHR4KSA9PiB7XG4gICAqICAgYXdhaXQgdHguaW5zZXJ0KHNjaGVtYS5wbHVnaW4pLnZhbHVlcyh7IC4uLiB9KTtcbiAgICogICBhd2FpdCB0eC5pbnNlcnQoc2NoZW1hLm1ldGFkYXRhKS52YWx1ZXMoeyAuLi4gfSk7XG4gICAqICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9O1xuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdHJhbnNhY3Rpb248VD4oXG4gICAgY2FsbGJhY2s6IFBhcmFtZXRlcnM8dHlwZW9mIHRoaXMuZGIudHJhbnNhY3Rpb24+WzBdLFxuICAgIHRpbWVvdXRNczogbnVtYmVyID0gcGFyc2VJbnRFbnYocHJvY2Vzcy5lbnYuREJfVFJBTlNBQ1RJT05fVElNRU9VVF9NUywgMzAwMDApLFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICBsZXQgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuICAgIC8vIFdyYXAgY2FsbGJhY2sgdG8gc2V0IFBvc3RncmVTUUwgc3RhdGVtZW50X3RpbWVvdXQgYXMgYSBzZXJ2ZXItc2lkZSBndWFyZC5cbiAgICAvLyBUaGUgUHJvbWlzZS5yYWNlIHRpbWVvdXQgYmVsb3cgaGFuZGxlcyB0aGUgSlMgc2lkZSwgYnV0IHN0YXRlbWVudF90aW1lb3V0XG4gICAgLy8gZW5zdXJlcyB0aGUgREIgaXRzZWxmIGNhbmNlbHMgbG9uZy1ydW5uaW5nIHF1ZXJpZXMgaWYgdGhlIEpTIHRpbWVvdXQgZmlyZXNcbiAgICAvLyBidXQgdGhlIGNvbm5lY3Rpb24gaXNuJ3QgY2xlYW5lZCB1cC5cbiAgICBjb25zdCB3cmFwcGVkQ2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9IGFzeW5jICh0eCkgPT4ge1xuICAgICAgLy8gYFNFVCBMT0NBTCBzdGF0ZW1lbnRfdGltZW91dCA9ICR7bn1gIHBhcmFtZXRlcml6ZXMgdG8gYD0gJDFgLCB3aGljaFxuICAgICAgLy8gUG9zdGdyZXMgcmVqZWN0cyBmb3IgU0VUIOKAlCB1c2Ugc2V0X2NvbmZpZyAoYWNjZXB0cyBhIGJvdW5kIHZhbHVlLCBpc19sb2NhbFxuICAgICAgLy8gPSB0cnVlIOKHkiB0cmFuc2FjdGlvbi1zY29wZWQpLCBtYXRjaGluZyB0ZW5hbmN5LnRzLlxuICAgICAgYXdhaXQgdHguZXhlY3V0ZShzcWxgU0VMRUNUIHNldF9jb25maWcoJ3N0YXRlbWVudF90aW1lb3V0JywgJHtTdHJpbmcodGltZW91dE1zKX0sIHRydWUpYCk7XG4gICAgICByZXR1cm4gY2FsbGJhY2sodHgpO1xuICAgIH07XG4gICAgY29uc3QgdHhQcm9taXNlID0gdGhpcy5kYi50cmFuc2FjdGlvbih3cmFwcGVkQ2FsbGJhY2spIGFzIFByb21pc2U8VD47XG4gICAgY29uc3QgdGltZW91dFByb21pc2UgPSBuZXcgUHJvbWlzZTxuZXZlcj4oKF8sIHJlamVjdCkgPT4ge1xuICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYFRyYW5zYWN0aW9uIHRpbWVvdXQgYWZ0ZXIgJHt0aW1lb3V0TXN9bXNgKSksIHRpbWVvdXRNcyk7XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLnJhY2UoW3R4UHJvbWlzZSwgdGltZW91dFByb21pc2VdKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyISk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFjcXVpcmVzIGEgY2xpZW50IGZyb20gdGhlIHBvb2wgZm9yIG1hbnVhbCBxdWVyeSBleGVjdXRpb25cbiAgICogUmVtZW1iZXIgdG8gcmVsZWFzZSB0aGUgY2xpZW50IHdoZW4gZG9uZVxuICAgKlxuICAgKiBAcmV0dXJucyBQb3N0Z3JlU1FMIGNsaWVudCBmcm9tIHRoZSBwb29sXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgY2xpZW50ID0gYXdhaXQgY29ubmVjdGlvbi5nZXRDbGllbnQoKTtcbiAgICogdHJ5IHtcbiAgICogICBhd2FpdCBjbGllbnQucXVlcnkoJ0JFR0lOJyk7XG4gICAqICAgYXdhaXQgY2xpZW50LnF1ZXJ5KCdJTlNFUlQgSU5UTyAuLi4nKTtcbiAgICogICBhd2FpdCBjbGllbnQucXVlcnkoJ0NPTU1JVCcpO1xuICAgKiB9IGZpbmFsbHkge1xuICAgKiAgIGNsaWVudC5yZWxlYXNlKCk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0Q2xpZW50KCk6IFByb21pc2U8UG9vbENsaWVudD4ge1xuICAgIHJldHVybiB0aGlzLnBvb2wuY29ubmVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgZGF0YWJhc2UgY29ubmVjdGlvbiBwb29sIGdyYWNlZnVsbHkuXG4gICAqIFNob3VsZCBiZSBjYWxsZWQgZHVyaW5nIGFwcGxpY2F0aW9uIHNodXRkb3duLlxuICAgKlxuICAgKiBAcGFyYW0gdGltZW91dCAtIE1heGltdW0gdGltZSB0byB3YWl0IGZvciBjb25uZWN0aW9ucyB0byBjbG9zZSAobXMpXG4gICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHBvb2wgaXMgY2xvc2VkXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2xvc2UodGltZW91dDogbnVtYmVyID0gcGFyc2VJbnRFbnYocHJvY2Vzcy5lbnYuREJfQ0xPU0VfVElNRU9VVF9NUywgNTAwMCkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pc1NodXR0aW5nRG93bikge1xuICAgICAgbG9nZ2VyLndhcm4oJ0Nvbm5lY3Rpb24gaXMgYWxyZWFkeSBzaHV0dGluZyBkb3duJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pc1NodXR0aW5nRG93biA9IHRydWU7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVMb2dnaW5nKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdDbG9zaW5nIGRhdGFiYXNlIGNvbm5lY3Rpb24gcG9vbC4uLicpO1xuICAgICAgICBjb25zdCBzdGF0cyA9IHRoaXMuZ2V0U3RhdHMoKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYFBvb2wgc3RhdHMgLSBUb3RhbDogJHtzdGF0cy50b3RhbENvdW50fSwgSWRsZTogJHtzdGF0cy5pZGxlQ291bnR9LCBXYWl0aW5nOiAke3N0YXRzLndhaXRpbmdDb3VudH1gKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IGEgdGltZW91dCBmb3IgZ3JhY2VmdWwgc2h1dGRvd25cbiAgICAgIGNvbnN0IGNsb3NlUHJvbWlzZSA9IHRoaXMucG9vbC5lbmQoKTtcbiAgICAgIGNvbnN0IHRpbWVvdXRQcm9taXNlID0gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKCdDb25uZWN0aW9uIGNsb3NlIHRpbWVvdXQnKSksIHRpbWVvdXQpLFxuICAgICAgKTtcblxuICAgICAgYXdhaXQgUHJvbWlzZS5yYWNlKFtjbG9zZVByb21pc2UsIHRpbWVvdXRQcm9taXNlXSk7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlTG9nZ2luZykge1xuICAgICAgICBsb2dnZXIuaW5mbygnRGF0YWJhc2UgY29ubmVjdGlvbiBjbG9zZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgY2xvc2luZyBkYXRhYmFzZSBjb25uZWN0aW9uOicsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzU2h1dHRpbmdEb3duID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgY29ubmVjdGlvbiBpcyBzaHV0dGluZyBkb3duXG4gICAqXG4gICAqIEByZXR1cm5zIHRydWUgaWYgY29ubmVjdGlvbiBpcyBpbiBzaHV0ZG93biBzdGF0ZVxuICAgKi9cbiAgcHVibGljIGlzQ2xvc2luZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1NodXR0aW5nRG93bjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgY29ubmVjdGlvbiBwb29sXG4gICAqL1xuICBwcml2YXRlIHNldHVwRXZlbnRIYW5kbGVycygpOiB2b2lkIHtcbiAgICB0aGlzLnBvb2wub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgbG9nZ2VyLmVycm9yKCdVbmV4cGVjdGVkIGVycm9yIG9uIGlkbGUgY2xpZW50OicsIGVycik7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlQXV0b1JldHJ5ICYmIHRoaXMucmV0cnlTdHJhdGVneS5nZXRBdHRlbXB0cygpIDwgdGhpcy5vcHRpb25zLm1heFJldHJpZXMpIHtcbiAgICAgICAgdm9pZCB0aGlzLnJldHJ5U3RyYXRlZ3kuaGFuZGxlQ29ubmVjdGlvbkVycm9yKGVyciwgKCkgPT4gdGhpcy50ZXN0Q29ubmVjdGlvbigpKS5jYXRjaCgocmV0cnlFcnIpID0+IHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0Nvbm5lY3Rpb24gcmV0cnkgZXJyb3I6JywgcmV0cnlFcnIpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMucG9vbC5vbignY29ubmVjdCcsICgpID0+IHtcbiAgICAgIHRoaXMucmV0cnlTdHJhdGVneS5yZXNldCgpOyAvLyBSZXNldCBvbiBzdWNjZXNzZnVsIGNvbm5lY3Rpb25cblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVMb2dnaW5nKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnTmV3IGRhdGFiYXNlIGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMucG9vbC5vbigncmVtb3ZlJywgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVMb2dnaW5nKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnQ2xpZW50IHJlbW92ZWQgZnJvbSBwb29sJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTG9ncyBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24gKHNhbml0aXplZClcbiAgICovXG4gIHByaXZhdGUgbG9nQ29ubmVjdGlvbkNvbmZpZyhjb25maWc6IFBvb2xDb25maWcpOiB2b2lkIHtcbiAgICBsb2dnZXIuaW5mbygnRGF0YWJhc2UgQ29uZmlndXJhdGlvbjonLCB7XG4gICAgICBob3N0OiBgJHtjb25maWcuaG9zdH06JHtjb25maWcucG9ydH1gLFxuICAgICAgZGF0YWJhc2U6IGNvbmZpZy5kYXRhYmFzZSxcbiAgICAgIHVzZXI6IGNvbmZpZy51c2VyLFxuICAgICAgbWF4UG9vbFNpemU6IGNvbmZpZy5tYXgsXG4gICAgICBpZGxlVGltZW91dE1zOiBjb25maWcuaWRsZVRpbWVvdXRNaWxsaXMsXG4gICAgICBjb25uZWN0aW9uVGltZW91dE1zOiBjb25maWcuY29ubmVjdGlvblRpbWVvdXRNaWxsaXMsXG4gICAgICBzc2w6IGNvbmZpZy5zc2wgPyAnZW5hYmxlZCcgOiAnZGlzYWJsZWQnLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogU2luZ2xldG9uIGRhdGFiYXNlIGluc3RhbmNlIGZvciB1c2UgdGhyb3VnaG91dCB0aGUgYXBwbGljYXRpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGRiIH0gZnJvbSAnLi9jb25uZWN0aW9uJztcbiAqXG4gKiAvLyBTZWxlY3QgcXVlcmllc1xuICogY29uc3QgcGx1Z2lucyA9IGF3YWl0IGRiLnNlbGVjdCgpLmZyb20oc2NoZW1hLnBsdWdpbik7XG4gKlxuICogLy8gSW5zZXJ0IHF1ZXJpZXNcbiAqIGF3YWl0IGRiLmluc2VydChzY2hlbWEucGx1Z2luKS52YWx1ZXMoeyBuYW1lOiAnbXktcGx1Z2luJyB9KTtcbiAqXG4gKiAvLyBUcmFuc2FjdGlvbnNcbiAqIGF3YWl0IGRiLnRyYW5zYWN0aW9uKGFzeW5jICh0eCkgPT4ge1xuICogICBhd2FpdCB0eC5pbnNlcnQoc2NoZW1hLnBsdWdpbikudmFsdWVzKHsgLi4uIH0pO1xuICogICBhd2FpdCB0eC51cGRhdGUoc2NoZW1hLnBsdWdpbikuc2V0KHsgLi4uIH0pO1xuICogfSk7XG4gKiBgYGBcbiAqL1xuXG4vLyBMYXp5IGluaXRpYWxpemF0aW9uIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9uIG9uIG1vZHVsZSBsb2FkXG5sZXQgX2RiSW5zdGFuY2U6IFJldHVyblR5cGU8dHlwZW9mIGRyaXp6bGU+IHwgbnVsbCA9IG51bGw7XG5cbi8qKlxuICogR2V0IHRoZSBkYXRhYmFzZSBpbnN0YW5jZSB3aXRoIGxhenkgaW5pdGlhbGl6YXRpb25cbiAqIFRoaXMgYXZvaWRzIHRoZSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgbW9kdWxlIGlzIGxvYWRlZCBiZWZvcmUgZW52aXJvbm1lbnQgaXMgY29uZmlndXJlZFxuICovXG5mdW5jdGlvbiBnZXREYkluc3RhbmNlKCk6IFJldHVyblR5cGU8dHlwZW9mIGRyaXp6bGU+IHtcbiAgaWYgKCFfZGJJbnN0YW5jZSkge1xuICAgIF9kYkluc3RhbmNlID0gQ29ubmVjdGlvbi5nZXRJbnN0YW5jZSgpLmRiO1xuICB9XG4gIHJldHVybiBfZGJJbnN0YW5jZTtcbn1cblxuLyoqXG4gKiBQcm94eS1iYXNlZCBsYXp5IGRhdGFiYXNlIGluc3RhbmNlXG4gKiBUaGUgYWN0dWFsIGNvbm5lY3Rpb24gaXMgb25seSBjcmVhdGVkIHdoZW4gZmlyc3QgYWNjZXNzZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgZGIgfSBmcm9tICcuL2Nvbm5lY3Rpb24nO1xuICpcbiAqIC8vIENvbm5lY3Rpb24gaXMgY3JlYXRlZCBoZXJlIG9uIGZpcnN0IHVzZSwgbm90IG9uIGltcG9ydFxuICogY29uc3QgcGx1Z2lucyA9IGF3YWl0IGRiLnNlbGVjdCgpLmZyb20oc2NoZW1hLnBsdWdpbik7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IGRiID0gbmV3IFByb3h5KHt9IGFzIFJldHVyblR5cGU8dHlwZW9mIGRyaXp6bGU+LCB7XG4gIGdldChfLCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IGdldERiSW5zdGFuY2UoKTtcbiAgICBjb25zdCB2YWx1ZSA9IGluc3RhbmNlW3Byb3AgYXMga2V5b2YgdHlwZW9mIGluc3RhbmNlXTtcbiAgICAvLyBCaW5kIG1ldGhvZHMgdG8gdGhlIGluc3RhbmNlIHRvIHByZXNlcnZlICd0aGlzJyBjb250ZXh0XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHZhbHVlLmJpbmQoaW5zdGFuY2UpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH0sXG59KTtcblxuLyoqXG4gKiBHZXRzIHRoZSBDb25uZWN0aW9uIGluc3RhbmNlIGZvciBhZHZhbmNlZCBvcGVyYXRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGdldENvbm5lY3Rpb24gfSBmcm9tICcuL2Nvbm5lY3Rpb24nO1xuICpcbiAqIGNvbnN0IGNvbm5lY3Rpb24gPSBnZXRDb25uZWN0aW9uKCk7XG4gKiBjb25zdCBzdGF0cyA9IGNvbm5lY3Rpb24uZ2V0U3RhdHMoKTtcbiAqIGNvbnNvbGUubG9nKGBBY3RpdmUgY29ubmVjdGlvbnM6ICR7c3RhdHMudG90YWxDb3VudH1gKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29ubmVjdGlvbigpOiBDb25uZWN0aW9uIHtcbiAgcmV0dXJuIENvbm5lY3Rpb24uZ2V0SW5zdGFuY2UoKTtcbn1cblxuLyoqXG4gKiBDbG9zZXMgdGhlIGRhdGFiYXNlIGNvbm5lY3Rpb25cbiAqIFNob3VsZCBiZSBjYWxsZWQgZHVyaW5nIGFwcGxpY2F0aW9uIHNodXRkb3duXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGNsb3NlQ29ubmVjdGlvbiB9IGZyb20gJy4vY29ubmVjdGlvbic7XG4gKlxuICogcHJvY2Vzcy5vbignU0lHVEVSTScsIGFzeW5jICgpID0+IHtcbiAqICAgYXdhaXQgY2xvc2VDb25uZWN0aW9uKCk7XG4gKiAgIHByb2Nlc3MuZXhpdCgwKTtcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbG9zZUNvbm5lY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNvbm5lY3Rpb24gPSBDb25uZWN0aW9uLmdldEluc3RhbmNlKCk7XG4gIGF3YWl0IGNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgYXdhaXQgY2xvc2VSZXBsaWNhUG9vbCgpOyAvLyB0ZWFyIGRvd24gdGhlIHJlYWQtcmVwbGljYSBwb29sIHRvbyAoc2VydmljZXMgb25seSBjYWxsIHRoaXMpXG4gIF9kYkluc3RhbmNlID0gbnVsbDsgLy8gUmVzZXQgbGF6eSBpbnN0YW5jZVxufVxuXG4vKipcbiAqIFRlc3RzIHRoZSBkYXRhYmFzZSBjb25uZWN0aW9uXG4gKlxuICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRydWUgaWYgY29ubmVjdGlvbiBpcyBoZWFsdGh5XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IHRlc3RDb25uZWN0aW9uIH0gZnJvbSAnLi9jb25uZWN0aW9uJztcbiAqXG4gKiBpZiAoYXdhaXQgdGVzdENvbm5lY3Rpb24oKSkge1xuICogICBjb25zb2xlLmxvZygnRGF0YWJhc2UgaXMgcmVhZHknKTtcbiAqIH0gZWxzZSB7XG4gKiAgIGNvbnNvbGUuZXJyb3IoJ0RhdGFiYXNlIGNvbm5lY3Rpb24gZmFpbGVkJyk7XG4gKiAgIHByb2Nlc3MuZXhpdCgxKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdENvbm5lY3Rpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IGNvbm5lY3Rpb24gPSBDb25uZWN0aW9uLmdldEluc3RhbmNlKCk7XG4gIHJldHVybiBjb25uZWN0aW9uLnRlc3RDb25uZWN0aW9uKCk7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZSB0aGUgZGF0YWJhc2UgY29ubmVjdGlvbiBleHBsaWNpdGx5XG4gKiBDYWxsIHRoaXMgZHVyaW5nIGFwcGxpY2F0aW9uIHN0YXJ0dXAgYWZ0ZXIgZW52aXJvbm1lbnQgaXMgY29uZmlndXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBpbml0aWFsaXplRGF0YWJhc2UgfSBmcm9tICcuL2Nvbm5lY3Rpb24nO1xuICpcbiAqIGFzeW5jIGZ1bmN0aW9uIGJvb3RzdHJhcCgpIHtcbiAqICAgLy8gTG9hZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZmlyc3RcbiAqICAgZG90ZW52LmNvbmZpZygpO1xuICpcbiAqICAgLy8gVGhlbiBpbml0aWFsaXplIGRhdGFiYXNlXG4gKiAgIGF3YWl0IGluaXRpYWxpemVEYXRhYmFzZSgpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0aWFsaXplRGF0YWJhc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNvbm5lY3Rpb24gPSBDb25uZWN0aW9uLmdldEluc3RhbmNlKCk7XG4gIGNvbnN0IGhlYWx0aHkgPSBhd2FpdCBjb25uZWN0aW9uLnRlc3RDb25uZWN0aW9uKCk7XG4gIGlmICghaGVhbHRoeSkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGF0YWJhc2UgY29ubmVjdGlvbiBmYWlsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uJyk7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZWFkLXJlcGxpY2EgcHJpbWl0aXZlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vXG4vLyBPcHQtaW4gcmVhZC1vbmx5IGNsaWVudC4gUG9pbnRlZCBhdCBhIFBvc3RncmVzIHJlcGxpY2EgdmlhIGBEQl9SRVBMSUNBX0hPU1RgXG4vLyAvIGBEQl9SRVBMSUNBX1BPUlRgIChvdGhlciBEQl8qIHZhcnMgYXJlIGluaGVyaXRlZCBmcm9tIHRoZSBwcmltYXJ5KS4gV2hlblxuLy8gYERCX1JFUExJQ0FfSE9TVGAgaXMgdW5zZXQsIGBkYlJlcGxpY2FgIHJlc29sdmVzIHRvIHRoZSBwcmltYXJ5IGBkYmAgc29cbi8vIGV4aXN0aW5nIGNhbGxlcnMgc3RheSBjb3JyZWN0IG9uIHNpbmdsZS1pbnN0YW5jZSBkZXBsb3lzLlxuLy9cbi8vIFVzYWdlIHBhdHRlcm46IHJvdXRlIHJlYWQtb25seSBxdWVyaWVzIChsaXN0IGVuZHBvaW50cywgZGFzaGJvYXJkcyxcbi8vIGFuYWx5dGljcykgdGhyb3VnaCBgZGJSZXBsaWNhYCB0byBvZmZsb2FkIHRoZSBwcmltYXJ5LiBXcml0ZXMgYW5kXG4vLyB0cmFuc2FjdGlvbnMgTVVTVCBzdGF5IG9uIGBkYmAg4oCUIHJlcGxpY2EgbGFnIHdvdWxkIG90aGVyd2lzZSBwcm9kdWNlXG4vLyByZWFkLWFmdGVyLXdyaXRlIHN1cnByaXNlcy5cbi8vXG4vLyBUaGlzIGlzIGEgcHJpbWl0aXZlIG9ubHkg4oCUIG5vIHNlcnZpY2UgY29kZSBoYXMgYmVlbiBtaWdyYXRlZCB0byB1c2UgaXQuXG4vLyBDYWxsZXJzIG9wdCBpbiBleHBsaWNpdGx5OyB0aGUgbWlncmF0aW9uIGlzIGEgcGVyLXF1ZXJ5IGRlY2lzaW9uLCBub3QgYVxuLy8gYmxhbmtldCBzd2l0Y2ggKHJlcGxpY2EgbGFnIHJpc2tzIHZhcnkgYnkgY2FsbCBzaXRlKS5cblxuaW50ZXJmYWNlIFJlcGxpY2FQb29sIHtcbiAgcG9vbDogUG9vbDtcbiAgZGI6IFJldHVyblR5cGU8dHlwZW9mIGRyaXp6bGU+O1xufVxuXG5sZXQgX3JlcGxpY2E6IFJlcGxpY2FQb29sIHwgbnVsbCA9IG51bGw7XG5cbmZ1bmN0aW9uIGdldFJlcGxpY2FDb25maWcoKTogUG9vbENvbmZpZyB8IG51bGwge1xuICBjb25zdCByZXBsaWNhSG9zdCA9IHByb2Nlc3MuZW52LkRCX1JFUExJQ0FfSE9TVDtcbiAgaWYgKCFyZXBsaWNhSG9zdCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGNmZyA9IGdldERhdGFiYXNlQ29uZmlnKCk7XG4gIHJldHVybiB7XG4gICAgaG9zdDogcmVwbGljYUhvc3QsXG4gICAgcG9ydDogcGFyc2VJbnRFbnYocHJvY2Vzcy5lbnYuREJfUkVQTElDQV9QT1JULCBjZmcucG9ydCksXG4gICAgZGF0YWJhc2U6IGNmZy5kYXRhYmFzZSxcbiAgICB1c2VyOiBjZmcudXNlcixcbiAgICBwYXNzd29yZDogY2ZnLnBhc3N3b3JkLFxuICAgIG1heDogcGFyc2VJbnRFbnYocHJvY2Vzcy5lbnYuREJfUkVQTElDQV9NQVhfUE9PTCwgY2ZnLm1heFBvb2xTaXplKSxcbiAgICBpZGxlVGltZW91dE1pbGxpczogY2ZnLmlkbGVUaW1lb3V0TWlsbGlzLFxuICAgIGNvbm5lY3Rpb25UaW1lb3V0TWlsbGlzOiBjZmcuY29ubmVjdGlvblRpbWVvdXRNaWxsaXMsXG4gICAgYWxsb3dFeGl0T25JZGxlOiB0cnVlLFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRSZXBsaWNhUG9vbCgpOiBSZXBsaWNhUG9vbCB8IG51bGwge1xuICBpZiAoX3JlcGxpY2EpIHJldHVybiBfcmVwbGljYTtcbiAgY29uc3QgY2ZnID0gZ2V0UmVwbGljYUNvbmZpZygpO1xuICBpZiAoIWNmZykgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHBvb2wgPSBuZXcgUG9vbChjZmcpO1xuICBwb29sLm9uKCdlcnJvcicsIChlcnIpID0+IGxvZ2dlci5lcnJvcignUmVwbGljYSBwb29sIGVycm9yJywgeyBlcnJvcjogZXJyLm1lc3NhZ2UgfSkpO1xuICBfcmVwbGljYSA9IHsgcG9vbCwgZGI6IGRyaXp6bGUocG9vbCwgeyBzY2hlbWEgfSkgfTtcbiAgbG9nZ2VyLmluZm8oJ1JlYWQgcmVwbGljYSBwb29sIGluaXRpYWxpemVkJywgeyBob3N0OiBjZmcuaG9zdCwgcG9ydDogY2ZnLnBvcnQgfSk7XG4gIHJldHVybiBfcmVwbGljYTtcbn1cblxuLyoqXG4gKiBQcm94eSB0aGF0IHJlc29sdmVzIHRvIHRoZSByZWFkLXJlcGxpY2EgYGRiYCB3aGVuIGBEQl9SRVBMSUNBX0hPU1RgIGlzXG4gKiBzZXQsIGFuZCB0byB0aGUgcHJpbWFyeSBgZGJgIG90aGVyd2lzZS4gVXNlIGZvciByZWFkLW9ubHkgcXVlcmllcyB0aGF0XG4gKiB0b2xlcmF0ZSByZXBsaWNhIGxhZyAodHlwaWNhbGx5IHRlbnMgb2YgbXMpLiBXcml0ZXMgYW5kIHRyYW5zYWN0aW9uc1xuICogTVVTVCBzdGF5IG9uIHRoZSBwcmltYXJ5IGBkYmAuXG4gKlxuICogU2FtZSBsYXp5LWluaXRpYWxpemF0aW9uIHBhdHRlcm4gYXMgYGRiYCDigJQgdGhlIHJlcGxpY2EgcG9vbCBpcyBidWlsdCBvblxuICogZmlyc3QgdXNlLCBub3Qgb24gbW9kdWxlIGltcG9ydC5cbiAqL1xuZXhwb3J0IGNvbnN0IGRiUmVwbGljYSA9IG5ldyBQcm94eSh7fSBhcyBSZXR1cm5UeXBlPHR5cGVvZiBkcml6emxlPiwge1xuICBnZXQoXywgcHJvcDogc3RyaW5nIHwgc3ltYm9sKSB7XG4gICAgY29uc3QgcmVwbGljYSA9IGdldFJlcGxpY2FQb29sKCk7XG4gICAgY29uc3QgdGFyZ2V0ID0gcmVwbGljYSA/IHJlcGxpY2EuZGIgOiBnZXREYkluc3RhbmNlKCk7XG4gICAgY29uc3QgdmFsdWUgPSB0YXJnZXRbcHJvcCBhcyBrZXlvZiB0eXBlb2YgdGFyZ2V0XTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSByZXR1cm4gdmFsdWUuYmluZCh0YXJnZXQpO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSxcbn0pO1xuXG4vKiogQ2xvc2UgdGhlIHJlcGxpY2EgcG9vbC4gQ2FsbGVkIGZyb20gYGNsb3NlQ29ubmVjdGlvbigpYCBzbyBzZXJ2aWNlXG4gKiAgc2h1dGRvd24gaGFuZGxlcnMgZG9uJ3QgaGF2ZSB0byBrbm93IGFib3V0IGJvdGggcG9vbHMgc2VwYXJhdGVseS4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNsb3NlUmVwbGljYVBvb2woKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghX3JlcGxpY2EpIHJldHVybjtcbiAgdHJ5IHtcbiAgICBhd2FpdCBfcmVwbGljYS5wb29sLmVuZCgpO1xuICAgIGxvZ2dlci5pbmZvKCdSZWFkIHJlcGxpY2EgcG9vbCBjbG9zZWQnKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdFcnJvciBjbG9zaW5nIHJlcGxpY2EgcG9vbCcsIHsgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBfcmVwbGljYSA9IG51bGw7XG4gIH1cbn1cblxuLy8gQmFjay1jb21wYXQgYWxpYXM6IGNsb3NlQ29ubmVjdGlvbigpIG5vdyB0ZWFycyBkb3duIGJvdGggcG9vbHMgaXRzZWxmLCBzbyB0aGlzXG4vLyBqdXN0IGRlbGVnYXRlcy4gUHJlZmVyIGNsb3NlQ29ubmVjdGlvbigpLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsb3NlQWxsQ29ubmVjdGlvbnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGNsb3NlQ29ubmVjdGlvbigpO1xufSJdfQ==
|
|
517
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdGdyZXMtY29ubmVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9wb3N0Z3Jlcy1jb25uZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxJQUFJLEVBQW9DLE1BQU0sSUFBSSxDQUFDO0FBQzVELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU5RCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7QUFFeEM7OztHQUdHO0FBQ0gsU0FBUyxXQUFXLENBQUMsS0FBeUIsRUFBRSxRQUFnQjtJQUM5RCxJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQzVCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbkMsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNsRCxDQUFDO0FBRUQscURBQXFEO0FBQ3JELE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDO0FBRXhELFNBQVMsaUJBQWlCO0lBQ3hCLGlGQUFpRjtJQUNqRiwwREFBMEQ7SUFDMUQsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FB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QyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUcsQ0FBQztZQUFTLENBQUM7UUFDVCxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IHNxbCB9IGZyb20gJ2RyaXp6bGUtb3JtJztcbmltcG9ydCB7IGRyaXp6bGUgfSBmcm9tICdkcml6emxlLW9ybS9ub2RlLXBvc3RncmVzJztcbmltcG9ydCB7IFBvb2wsIHR5cGUgUG9vbENvbmZpZywgdHlwZSBQb29sQ2xpZW50IH0gZnJvbSAncGcnO1xuaW1wb3J0IHsgc2NoZW1hIH0gZnJvbSAnLi9kcml6emxlLXNjaGVtYS5qcyc7XG5pbXBvcnQgeyBDb25uZWN0aW9uUmV0cnlTdHJhdGVneSB9IGZyb20gJy4vcmV0cnktc3RyYXRlZ3kuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ2RhdGFiYXNlJyk7XG5cbi8qKlxuICogR2V0IGRhdGFiYXNlIGNvbmZpZ3VyYXRpb24gZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAqIE5vdGU6IFVzZXMgZW52aXJvbm1lbnQgdmFyaWFibGVzIGRpcmVjdGx5IHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY3kgd2l0aCBwaXBlbGluZS1jb3JlXG4gKi9cbmZ1bmN0aW9uIHBhcnNlSW50RW52KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQsIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gZmFsbGJhY2s7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4ocGFyc2VkKSA/IGZhbGxiYWNrIDogcGFyc2VkO1xufVxuXG4vKiogRGV0ZWN0IExhbWJkYSBlbnZpcm9ubWVudCBmb3IgcG9vbC1zaXplIHR1bmluZyAqL1xuY29uc3QgaXNMYW1iZGEgPSAhIXByb2Nlc3MuZW52LkFXU19MQU1CREFfRlVOQ1RJT05fTkFNRTtcblxuZnVuY3Rpb24gZ2V0RGF0YWJhc2VDb25maWcoKSB7XG4gIC8vIExhbWJkYTogc21hbGwgcG9vbCAoZWFjaCBpbnZvY2F0aW9uIGlzIHNob3J0LWxpdmVkLCBtYW55IGNvbmN1cnJlbnQgaW5zdGFuY2VzKVxuICAvLyBFQ1MvbG9uZy1ydW5uaW5nOiBsYXJnZXIgcG9vbCBmb3Igc3VzdGFpbmVkIGNvbmN1cnJlbmN5XG4gIGNvbnN0IGRlZmF1bHRQb29sU2l6ZSA9IGlzTGFtYmRhID8gMiA6IDIwO1xuICBjb25zdCBkZWZhdWx0SWRsZVRpbWVvdXQgPSBpc0xhbWJkYSA/IDEwMDAwIDogMzAwMDA7XG5cbiAgcmV0dXJuIHtcbiAgICBob3N0OiBwcm9jZXNzLmVudi5EQl9IT1NUIHx8ICdwb3N0Z3JlcycsXG4gICAgcG9ydDogcGFyc2VJbnRFbnYocHJvY2Vzcy5lbnYuREJfUE9SVCwgNTQzMiksXG4gICAgZGF0YWJhc2U6IHByb2Nlc3MuZW52LkRBVEFCQVNFIHx8ICdwaXBlbGluZV9idWlsZGVyJyxcbiAgICB1c2VyOiBwcm9jZXNzLmVudi5EQl9VU0VSIHx8ICdwb3N0Z3JlcycsXG4gICAgcGFzc3dvcmQ6IHByb2Nlc3MuZW52LkRCX1BBU1NXT1JEIHx8IChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nID8gKCgpID0+IHsgdGhyb3cgbmV3IEVycm9yKCdEQl9QQVNTV09SRCBpcyByZXF1aXJlZCBpbiBwcm9kdWN0aW9uJyk7IH0pKCkgYXMgc3RyaW5nIDogJycpLFxuICAgIG1heFBvb2xTaXplOiBwYXJzZUludEVudihwcm9jZXNzLmVudi5EUklaWkxFX01BWF9QT09MX1NJWkUsIGRlZmF1bHRQb29sU2l6ZSksXG4gICAgaWRsZVRpbWVvdXRNaWxsaXM6IHBhcnNlSW50RW52KHByb2Nlc3MuZW52LkRSSVpaTEVfSURMRV9USU1FT1VUX01JTExJUywgZGVmYXVsdElkbGVUaW1lb3V0KSxcbiAgICBjb25uZWN0aW9uVGltZW91dE1pbGxpczogcGFyc2VJbnRFbnYocHJvY2Vzcy5lbnYuRFJJWlpMRV9DT05ORUNUSU9OX1RJTUVPVVRfTUlMTElTLCA1MDAwKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBEYXRhYmFzZSBjb25uZWN0aW9uIHN0YXRpc3RpY3MgZm9yIG1vbml0b3JpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0aW9uU3RhdHMge1xuICB0b3RhbENvdW50OiBudW1iZXI7XG4gIGlkbGVDb3VudDogbnVtYmVyO1xuICB3YWl0aW5nQ291bnQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyB0aGUgZGF0YWJhc2UgY29ubmVjdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3Rpb25PcHRpb25zIHtcbiAgLyoqIFdoZXRoZXIgdG8gZW5hYmxlIGNvbm5lY3Rpb24gbG9nZ2luZyAqL1xuICBlbmFibGVMb2dnaW5nPzogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciB0byBhdXRvbWF0aWNhbGx5IHJldHJ5IGZhaWxlZCBjb25uZWN0aW9ucyAqL1xuICBlbmFibGVBdXRvUmV0cnk/OiBib29sZWFuO1xuXG4gIC8qKiBNYXhpbXVtIG51bWJlciBvZiBjb25uZWN0aW9uIHJldHJ5IGF0dGVtcHRzICovXG4gIG1heFJldHJpZXM/OiBudW1iZXI7XG5cbiAgLyoqIERlbGF5IGJldHdlZW4gcmV0cnkgYXR0ZW1wdHMgaW4gbWlsbGlzZWNvbmRzICovXG4gIHJldHJ5RGVsYXk/OiBudW1iZXI7XG5cbiAgLyoqIFNTTCBjb25maWd1cmF0aW9uICovXG4gIHNzbD86IGJvb2xlYW4gfCB7IHJlamVjdFVuYXV0aG9yaXplZDogYm9vbGVhbiB9O1xufVxuXG4vKipcbiAqIFNpbmdsZXRvbiBkYXRhYmFzZSBjb25uZWN0aW9uIGNsYXNzLlxuICogTWFuYWdlcyBQb3N0Z3JlU1FMIGNvbm5lY3Rpb24gcG9vbGluZyBhbmQgRHJpenpsZSBPUk0gaW5zdGFuY2UuXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIFNpbmdsZXRvbiBwYXR0ZXJuIGZvciBzaW5nbGUgY29ubmVjdGlvbiBwb29sXG4gKiAtIEF1dG9tYXRpYyBjb25uZWN0aW9uIHJldHJ5IHdpdGggYmFja29mZlxuICogLSBDb25uZWN0aW9uIGhlYWx0aCBtb25pdG9yaW5nXG4gKiAtIEdyYWNlZnVsIHNodXRkb3duIGhhbmRsaW5nXG4gKiAtIENvbXByZWhlbnNpdmUgZXJyb3IgaGFuZGxpbmdcbiAqIC0gQ29ubmVjdGlvbiBzdGF0aXN0aWNzIHRyYWNraW5nXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IENvbm5lY3Rpb24gfSBmcm9tICcuL2Nvbm5lY3Rpb24nO1xuICpcbiAqIGNvbnN0IGNvbm5lY3Rpb24gPSBDb25uZWN0aW9uLmdldEluc3RhbmNlKCk7XG4gKiBjb25zdCBwbHVnaW5zID0gYXdhaXQgY29ubmVjdGlvbi5kYi5zZWxlY3QoKS5mcm9tKHNjaGVtYS5wbHVnaW4pO1xuICpcbiAqIC8vIER1cmluZyBzaHV0ZG93blxuICogYXdhaXQgY29ubmVjdGlvbi5jbG9zZSgpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25uZWN0aW9uIHtcbiAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IENvbm5lY3Rpb24gfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogRHJpenpsZSBPUk0gZGF0YWJhc2UgaW5zdGFuY2Ugd2l0aCBzY2hlbWFcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkYjogUmV0dXJuVHlwZTx0eXBlb2YgZHJpenpsZT47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBwb29sOiBQb29sO1xuICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IFJlcXVpcmVkPENvbm5lY3Rpb25PcHRpb25zPjtcbiAgcHJpdmF0ZSByZWFkb25seSByZXRyeVN0cmF0ZWd5OiBDb25uZWN0aW9uUmV0cnlTdHJhdGVneTtcbiAgcHJpdmF0ZSBpc1NodXR0aW5nRG93biA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBQcml2YXRlIGNvbnN0cnVjdG9yIHRvIGVuZm9yY2Ugc2luZ2xldG9uIHBhdHRlcm4uXG4gICAqIEluaXRpYWxpemVzIFBvc3RncmVTUUwgY29ubmVjdGlvbiBwb29sIGFuZCBEcml6emxlIE9STSBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgY29ubmVjdGlvblxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgZGF0YWJhc2UgaW5pdGlhbGl6YXRpb24gZmFpbHMgYWZ0ZXIgYWxsIHJldHJpZXNcbiAgICovXG4gIHByaXZhdGUgY29uc3RydWN0b3Iob3B0aW9uczogQ29ubmVjdGlvbk9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgIGVuYWJsZUxvZ2dpbmc6IG9wdGlvbnMuZW5hYmxlTG9nZ2luZyA/PyB0cnVlLFxuICAgICAgZW5hYmxlQXV0b1JldHJ5OiBvcHRpb25zLmVuYWJsZUF1dG9SZXRyeSA/PyB0cnVlLFxuICAgICAgbWF4UmV0cmllczogb3B0aW9ucy5tYXhSZXRyaWVzID8/IHBhcnNlSW50KHByb2Nlc3MuZW52LkRCX01BWF9SRVRSSUVTIHx8ICczJywgMTApLFxuICAgICAgcmV0cnlEZWxheTogb3B0aW9ucy5yZXRyeURlbGF5ID8/IHBhcnNlSW50KHByb2Nlc3MuZW52LkRCX1JFVFJZX0RFTEFZX01TIHx8ICcxMDAwJywgMTApLFxuICAgICAgc3NsOiBvcHRpb25zLnNzbCA/PyBmYWxzZSxcbiAgICB9O1xuXG4gICAgLy8gSW5pdGlhbGl6ZSByZXRyeSBzdHJhdGVneVxuICAgIHRoaXMucmV0cnlTdHJhdGVneSA9IG5ldyBDb25uZWN0aW9uUmV0cnlTdHJhdGVneSh7XG4gICAgICBtYXhSZXRyaWVzOiB0aGlzLm9wdGlvbnMubWF4UmV0cmllcyxcbiAgICAgIGJhc2VEZWxheTogdGhpcy5vcHRpb25zLnJldHJ5RGVsYXksXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnID0gZ2V0RGF0YWJhc2VDb25maWcoKTtcblxuICAgICAgY29uc3QgcG9vbENvbmZpZzogUG9vbENvbmZpZyA9IHtcbiAgICAgICAgaG9zdDogY29uZmlnLmhvc3QsXG4gICAgICAgIHBvcnQ6IGNvbmZpZy5wb3J0LFxuICAgICAgICBkYXRhYmFzZTogY29uZmlnLmRhdGFiYXNlLFxuICAgICAgICB1c2VyOiBjb25maWcudXNlcixcbiAgICAgICAgcGFzc3dvcmQ6IGNvbmZpZy5wYXNzd29yZCxcbiAgICAgICAgbWF4OiBjb25maWcubWF4UG9vbFNpemUsXG4gICAgICAgIGlkbGVUaW1lb3V0TWlsbGlzOiBjb25maWcuaWRsZVRpbWVvdXRNaWxsaXMsXG4gICAgICAgIGNvbm5lY3Rpb25UaW1lb3V0TWlsbGlzOiBjb25maWcuY29ubmVjdGlvblRpbWVvdXRNaWxsaXMsXG4gICAgICAgIHNzbDogdGhpcy5vcHRpb25zLnNzbCxcbiAgICAgICAgYWxsb3dFeGl0T25JZGxlOiB0cnVlLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5wb29sID0gbmV3IFBvb2wocG9vbENvbmZpZyk7XG4gICAgICB0aGlzLnNldHVwRXZlbnRIYW5kbGVycygpO1xuXG4gICAgICB0aGlzLmRiID0gZHJpenpsZSh0aGlzLnBvb2wsIHsgc2NoZW1hIH0pO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZUxvZ2dpbmcpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ0RhdGFiYXNlIGNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICAgIHRoaXMubG9nQ29ubmVjdGlvbkNvbmZpZyhwb29sQ29uZmlnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gaW5pdGlhbGl6ZSBkYXRhYmFzZSBjb25uZWN0aW9uOicsIGVycm9yKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGF0YWJhc2UgaW5pdGlhbGl6YXRpb24gZmFpbGVkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgQ29ubmVjdGlvbiBjbGFzcy5cbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBpZiBvbmUgZG9lc24ndCBleGlzdC5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIChvbmx5IHVzZWQgb24gZmlyc3QgY2FsbClcbiAgICogQHJldHVybnMgVGhlIHNpbmdsZXRvbiBDb25uZWN0aW9uIGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldEluc3RhbmNlKG9wdGlvbnM/OiBDb25uZWN0aW9uT3B0aW9ucyk6IENvbm5lY3Rpb24ge1xuICAgIGlmICghQ29ubmVjdGlvbi5pbnN0YW5jZSkge1xuICAgICAgQ29ubmVjdGlvbi5pbnN0YW5jZSA9IG5ldyBDb25uZWN0aW9uKG9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gQ29ubmVjdGlvbi5pbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS5cbiAgICogVXNlZnVsIGZvciB0ZXN0aW5nIG9yIHJlY29uZmlndXJpbmcgdGhlIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBjbG9zZUV4aXN0aW5nIC0gV2hldGhlciB0byBjbG9zZSBleGlzdGluZyBjb25uZWN0aW9uIGJlZm9yZSByZXNldFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhc3luYyByZXNldChjbG9zZUV4aXN0aW5nOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChDb25uZWN0aW9uLmluc3RhbmNlICYmIGNsb3NlRXhpc3RpbmcpIHtcbiAgICAgIGF3YWl0IENvbm5lY3Rpb24uaW5zdGFuY2UuY2xvc2UoKTtcbiAgICB9XG4gICAgQ29ubmVjdGlvbi5pbnN0YW5jZSA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogVGVzdHMgdGhlIGRhdGFiYXNlIGNvbm5lY3Rpb25cbiAgICpcbiAgICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRydWUgaWYgY29ubmVjdGlvbiBpcyBoZWFsdGh5XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdGVzdENvbm5lY3Rpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMucG9vbC5jb25uZWN0KCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQucXVlcnkoJ1NFTEVDVCAxJyk7XG4gICAgICBjbGllbnQucmVsZWFzZSgpO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZUxvZ2dpbmcpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ0RhdGFiYXNlIGNvbm5lY3Rpb24gdGVzdCBzdWNjZXNzZnVsJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQucm93cy5sZW5ndGggPiAwO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0RhdGFiYXNlIGNvbm5lY3Rpb24gdGVzdCBmYWlsZWQ6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNvbm5lY3Rpb24gcG9vbCBzdGF0aXN0aWNzXG4gICAqXG4gICAqIEByZXR1cm5zIEN1cnJlbnQgY29ubmVjdGlvbiBwb29sIHN0YXRpc3RpY3NcbiAgICovXG4gIHB1YmxpYyBnZXRTdGF0cygpOiBDb25uZWN0aW9uU3RhdHMge1xuICAgIHJldHVybiB7XG4gICAgICB0b3RhbENvdW50OiB0aGlzLnBvb2wudG90YWxDb3VudCxcbiAgICAgIGlkbGVDb3VudDogdGhpcy5wb29sLmlkbGVDb3VudCxcbiAgICAgIHdhaXRpbmdDb3VudDogdGhpcy5wb29sLndhaXRpbmdDb3VudCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIGEgZGF0YWJhc2UgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSB3aXRoaW4gdGhlIHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm5zIFJlc3VsdCBvZiB0aGUgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCBjb25uZWN0aW9uLnRyYW5zYWN0aW9uKGFzeW5jICh0eCkgPT4ge1xuICAgKiAgIGF3YWl0IHR4Lmluc2VydChzY2hlbWEucGx1Z2luKS52YWx1ZXMoeyAuLi4gfSk7XG4gICAqICAgYXdhaXQgdHguaW5zZXJ0KHNjaGVtYS5tZXRhZGF0YSkudmFsdWVzKHsgLi4uIH0pO1xuICAgKiAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUgfTtcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHRyYW5zYWN0aW9uPFQ+KFxuICAgIGNhbGxiYWNrOiBQYXJhbWV0ZXJzPHR5cGVvZiB0aGlzLmRiLnRyYW5zYWN0aW9uPlswXSxcbiAgICB0aW1lb3V0TXM6IG51bWJlciA9IHBhcnNlSW50RW52KHByb2Nlc3MuZW52LkRCX1RSQU5TQUNUSU9OX1RJTUVPVVRfTVMsIDMwMDAwKSxcbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgbGV0IHRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgICAvLyBXcmFwIGNhbGxiYWNrIHRvIHNldCBQb3N0Z3JlU1FMIHN0YXRlbWVudF90aW1lb3V0IGFzIGEgc2VydmVyLXNpZGUgZ3VhcmQuXG4gICAgLy8gVGhlIFByb21pc2UucmFjZSB0aW1lb3V0IGJlbG93IGhhbmRsZXMgdGhlIEpTIHNpZGUsIGJ1dCBzdGF0ZW1lbnRfdGltZW91dFxuICAgIC8vIGVuc3VyZXMgdGhlIERCIGl0c2VsZiBjYW5jZWxzIGxvbmctcnVubmluZyBxdWVyaWVzIGlmIHRoZSBKUyB0aW1lb3V0IGZpcmVzXG4gICAgLy8gYnV0IHRoZSBjb25uZWN0aW9uIGlzbid0IGNsZWFuZWQgdXAuXG4gICAgY29uc3Qgd3JhcHBlZENhbGxiYWNrOiB0eXBlb2YgY2FsbGJhY2sgPSBhc3luYyAodHgpID0+IHtcbiAgICAgIC8vIGBTRVQgTE9DQUwgc3RhdGVtZW50X3RpbWVvdXQgPSAke259YCBwYXJhbWV0ZXJpemVzIHRvIGA9ICQxYCwgd2hpY2hcbiAgICAgIC8vIFBvc3RncmVzIHJlamVjdHMgZm9yIFNFVCDigJQgdXNlIHNldF9jb25maWcgKGFjY2VwdHMgYSBib3VuZCB2YWx1ZSwgaXNfbG9jYWxcbiAgICAgIC8vID0gdHJ1ZSDih5IgdHJhbnNhY3Rpb24tc2NvcGVkKSwgbWF0Y2hpbmcgdGVuYW5jeS50cy5cbiAgICAgIGF3YWl0IHR4LmV4ZWN1dGUoc3FsYFNFTEVDVCBzZXRfY29uZmlnKCdzdGF0ZW1lbnRfdGltZW91dCcsICR7U3RyaW5nKHRpbWVvdXRNcyl9LCB0cnVlKWApO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKHR4KTtcbiAgICB9O1xuICAgIGNvbnN0IHR4UHJvbWlzZSA9IHRoaXMuZGIudHJhbnNhY3Rpb24od3JhcHBlZENhbGxiYWNrKSBhcyBQcm9taXNlPFQ+O1xuICAgIGNvbnN0IHRpbWVvdXRQcm9taXNlID0gbmV3IFByb21pc2U8bmV2ZXI+KChfLCByZWplY3QpID0+IHtcbiAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKGBUcmFuc2FjdGlvbiB0aW1lb3V0IGFmdGVyICR7dGltZW91dE1zfW1zYCkpLCB0aW1lb3V0TXMpO1xuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKFt0eFByb21pc2UsIHRpbWVvdXRQcm9taXNlXSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lciEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBY3F1aXJlcyBhIGNsaWVudCBmcm9tIHRoZSBwb29sIGZvciBtYW51YWwgcXVlcnkgZXhlY3V0aW9uXG4gICAqIFJlbWVtYmVyIHRvIHJlbGVhc2UgdGhlIGNsaWVudCB3aGVuIGRvbmVcbiAgICpcbiAgICogQHJldHVybnMgUG9zdGdyZVNRTCBjbGllbnQgZnJvbSB0aGUgcG9vbFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGNsaWVudCA9IGF3YWl0IGNvbm5lY3Rpb24uZ2V0Q2xpZW50KCk7XG4gICAqIHRyeSB7XG4gICAqICAgYXdhaXQgY2xpZW50LnF1ZXJ5KCdCRUdJTicpO1xuICAgKiAgIGF3YWl0IGNsaWVudC5xdWVyeSgnSU5TRVJUIElOVE8gLi4uJyk7XG4gICAqICAgYXdhaXQgY2xpZW50LnF1ZXJ5KCdDT01NSVQnKTtcbiAgICogfSBmaW5hbGx5IHtcbiAgICogICBjbGllbnQucmVsZWFzZSgpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldENsaWVudCgpOiBQcm9taXNlPFBvb2xDbGllbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5wb29sLmNvbm5lY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIGRhdGFiYXNlIGNvbm5lY3Rpb24gcG9vbCBncmFjZWZ1bGx5LlxuICAgKiBTaG91bGQgYmUgY2FsbGVkIGR1cmluZyBhcHBsaWNhdGlvbiBzaHV0ZG93bi5cbiAgICpcbiAgICogQHBhcmFtIHRpbWVvdXQgLSBNYXhpbXVtIHRpbWUgdG8gd2FpdCBmb3IgY29ubmVjdGlvbnMgdG8gY2xvc2UgKG1zKVxuICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBwb29sIGlzIGNsb3NlZFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNsb3NlKHRpbWVvdXQ6IG51bWJlciA9IHBhcnNlSW50RW52KHByb2Nlc3MuZW52LkRCX0NMT1NFX1RJTUVPVVRfTVMsIDUwMDApKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaXNTaHV0dGluZ0Rvd24pIHtcbiAgICAgIGxvZ2dlci53YXJuKCdDb25uZWN0aW9uIGlzIGFscmVhZHkgc2h1dHRpbmcgZG93bicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNTaHV0dGluZ0Rvd24gPSB0cnVlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlTG9nZ2luZykge1xuICAgICAgICBsb2dnZXIuaW5mbygnQ2xvc2luZyBkYXRhYmFzZSBjb25uZWN0aW9uIHBvb2wuLi4nKTtcbiAgICAgICAgY29uc3Qgc3RhdHMgPSB0aGlzLmdldFN0YXRzKCk7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBQb29sIHN0YXRzIC0gVG90YWw6ICR7c3RhdHMudG90YWxDb3VudH0sIElkbGU6ICR7c3RhdHMuaWRsZUNvdW50fSwgV2FpdGluZzogJHtzdGF0cy53YWl0aW5nQ291bnR9YCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBhIHRpbWVvdXQgZm9yIGdyYWNlZnVsIHNodXRkb3duXG4gICAgICBjb25zdCBjbG9zZVByb21pc2UgPSB0aGlzLnBvb2wuZW5kKCk7XG4gICAgICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignQ29ubmVjdGlvbiBjbG9zZSB0aW1lb3V0JykpLCB0aW1lb3V0KSxcbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IFByb21pc2UucmFjZShbY2xvc2VQcm9taXNlLCB0aW1lb3V0UHJvbWlzZV0pO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZUxvZ2dpbmcpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ0RhdGFiYXNlIGNvbm5lY3Rpb24gY2xvc2VkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGNsb3NpbmcgZGF0YWJhc2UgY29ubmVjdGlvbjonLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc1NodXR0aW5nRG93biA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGNvbm5lY3Rpb24gaXMgc2h1dHRpbmcgZG93blxuICAgKlxuICAgKiBAcmV0dXJucyB0cnVlIGlmIGNvbm5lY3Rpb24gaXMgaW4gc2h1dGRvd24gc3RhdGVcbiAgICovXG4gIHB1YmxpYyBpc0Nsb3NpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNTaHV0dGluZ0Rvd247XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNvbm5lY3Rpb24gcG9vbFxuICAgKi9cbiAgcHJpdmF0ZSBzZXR1cEV2ZW50SGFuZGxlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5wb29sLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgIGxvZ2dlci5lcnJvcignVW5leHBlY3RlZCBlcnJvciBvbiBpZGxlIGNsaWVudDonLCBlcnIpO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZUF1dG9SZXRyeSAmJiB0aGlzLnJldHJ5U3RyYXRlZ3kuZ2V0QXR0ZW1wdHMoKSA8IHRoaXMub3B0aW9ucy5tYXhSZXRyaWVzKSB7XG4gICAgICAgIHZvaWQgdGhpcy5yZXRyeVN0cmF0ZWd5LmhhbmRsZUNvbm5lY3Rpb25FcnJvcihlcnIsICgpID0+IHRoaXMudGVzdENvbm5lY3Rpb24oKSkuY2F0Y2goKHJldHJ5RXJyKSA9PiB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCdDb25uZWN0aW9uIHJldHJ5IGVycm9yOicsIHJldHJ5RXJyKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnBvb2wub24oJ2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICB0aGlzLnJldHJ5U3RyYXRlZ3kucmVzZXQoKTsgLy8gUmVzZXQgb24gc3VjY2Vzc2Z1bCBjb25uZWN0aW9uXG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlTG9nZ2luZykge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ05ldyBkYXRhYmFzZSBjb25uZWN0aW9uIGVzdGFibGlzaGVkJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnBvb2wub24oJ3JlbW92ZScsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlTG9nZ2luZykge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0NsaWVudCByZW1vdmVkIGZyb20gcG9vbCcpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExvZ3MgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uIChzYW5pdGl6ZWQpXG4gICAqL1xuICBwcml2YXRlIGxvZ0Nvbm5lY3Rpb25Db25maWcoY29uZmlnOiBQb29sQ29uZmlnKTogdm9pZCB7XG4gICAgbG9nZ2VyLmluZm8oJ0RhdGFiYXNlIENvbmZpZ3VyYXRpb246Jywge1xuICAgICAgaG9zdDogYCR7Y29uZmlnLmhvc3R9OiR7Y29uZmlnLnBvcnR9YCxcbiAgICAgIGRhdGFiYXNlOiBjb25maWcuZGF0YWJhc2UsXG4gICAgICB1c2VyOiBjb25maWcudXNlcixcbiAgICAgIG1heFBvb2xTaXplOiBjb25maWcubWF4LFxuICAgICAgaWRsZVRpbWVvdXRNczogY29uZmlnLmlkbGVUaW1lb3V0TWlsbGlzLFxuICAgICAgY29ubmVjdGlvblRpbWVvdXRNczogY29uZmlnLmNvbm5lY3Rpb25UaW1lb3V0TWlsbGlzLFxuICAgICAgc3NsOiBjb25maWcuc3NsID8gJ2VuYWJsZWQnIDogJ2Rpc2FibGVkJyxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFNpbmdsZXRvbiBkYXRhYmFzZSBpbnN0YW5jZSBmb3IgdXNlIHRocm91Z2hvdXQgdGhlIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBkYiB9IGZyb20gJy4vY29ubmVjdGlvbic7XG4gKlxuICogLy8gU2VsZWN0IHF1ZXJpZXNcbiAqIGNvbnN0IHBsdWdpbnMgPSBhd2FpdCBkYi5zZWxlY3QoKS5mcm9tKHNjaGVtYS5wbHVnaW4pO1xuICpcbiAqIC8vIEluc2VydCBxdWVyaWVzXG4gKiBhd2FpdCBkYi5pbnNlcnQoc2NoZW1hLnBsdWdpbikudmFsdWVzKHsgbmFtZTogJ215LXBsdWdpbicgfSk7XG4gKlxuICogLy8gVHJhbnNhY3Rpb25zXG4gKiBhd2FpdCBkYi50cmFuc2FjdGlvbihhc3luYyAodHgpID0+IHtcbiAqICAgYXdhaXQgdHguaW5zZXJ0KHNjaGVtYS5wbHVnaW4pLnZhbHVlcyh7IC4uLiB9KTtcbiAqICAgYXdhaXQgdHgudXBkYXRlKHNjaGVtYS5wbHVnaW4pLnNldCh7IC4uLiB9KTtcbiAqIH0pO1xuICogYGBgXG4gKi9cblxuLy8gTGF6eSBpbml0aWFsaXphdGlvbiB0byBhdm9pZCByYWNlIGNvbmRpdGlvbiBvbiBtb2R1bGUgbG9hZFxubGV0IF9kYkluc3RhbmNlOiBSZXR1cm5UeXBlPHR5cGVvZiBkcml6emxlPiB8IG51bGwgPSBudWxsO1xuXG4vKipcbiAqIEdldCB0aGUgZGF0YWJhc2UgaW5zdGFuY2Ugd2l0aCBsYXp5IGluaXRpYWxpemF0aW9uXG4gKiBUaGlzIGF2b2lkcyB0aGUgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIG1vZHVsZSBpcyBsb2FkZWQgYmVmb3JlIGVudmlyb25tZW50IGlzIGNvbmZpZ3VyZWRcbiAqL1xuZnVuY3Rpb24gZ2V0RGJJbnN0YW5jZSgpOiBSZXR1cm5UeXBlPHR5cGVvZiBkcml6emxlPiB7XG4gIGlmICghX2RiSW5zdGFuY2UpIHtcbiAgICBfZGJJbnN0YW5jZSA9IENvbm5lY3Rpb24uZ2V0SW5zdGFuY2UoKS5kYjtcbiAgfVxuICByZXR1cm4gX2RiSW5zdGFuY2U7XG59XG5cbi8qKlxuICogUHJveHktYmFzZWQgbGF6eSBkYXRhYmFzZSBpbnN0YW5jZVxuICogVGhlIGFjdHVhbCBjb25uZWN0aW9uIGlzIG9ubHkgY3JlYXRlZCB3aGVuIGZpcnN0IGFjY2Vzc2VkXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGRiIH0gZnJvbSAnLi9jb25uZWN0aW9uJztcbiAqXG4gKiAvLyBDb25uZWN0aW9uIGlzIGNyZWF0ZWQgaGVyZSBvbiBmaXJzdCB1c2UsIG5vdCBvbiBpbXBvcnRcbiAqIGNvbnN0IHBsdWdpbnMgPSBhd2FpdCBkYi5zZWxlY3QoKS5mcm9tKHNjaGVtYS5wbHVnaW4pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBkYiA9IG5ldyBQcm94eSh7fSBhcyBSZXR1cm5UeXBlPHR5cGVvZiBkcml6emxlPiwge1xuICBnZXQoXywgcHJvcDogc3RyaW5nIHwgc3ltYm9sKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBnZXREYkluc3RhbmNlKCk7XG4gICAgY29uc3QgdmFsdWUgPSBpbnN0YW5jZVtwcm9wIGFzIGtleW9mIHR5cGVvZiBpbnN0YW5jZV07XG4gICAgLy8gQmluZCBtZXRob2RzIHRvIHRoZSBpbnN0YW5jZSB0byBwcmVzZXJ2ZSAndGhpcycgY29udGV4dFxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5iaW5kKGluc3RhbmNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxufSk7XG5cbi8qKlxuICogR2V0cyB0aGUgQ29ubmVjdGlvbiBpbnN0YW5jZSBmb3IgYWR2YW5jZWQgb3BlcmF0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBnZXRDb25uZWN0aW9uIH0gZnJvbSAnLi9jb25uZWN0aW9uJztcbiAqXG4gKiBjb25zdCBjb25uZWN0aW9uID0gZ2V0Q29ubmVjdGlvbigpO1xuICogY29uc3Qgc3RhdHMgPSBjb25uZWN0aW9uLmdldFN0YXRzKCk7XG4gKiBjb25zb2xlLmxvZyhgQWN0aXZlIGNvbm5lY3Rpb25zOiAke3N0YXRzLnRvdGFsQ291bnR9YCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbm5lY3Rpb24oKTogQ29ubmVjdGlvbiB7XG4gIHJldHVybiBDb25uZWN0aW9uLmdldEluc3RhbmNlKCk7XG59XG5cbi8qKlxuICogQ2xvc2VzIHRoZSBkYXRhYmFzZSBjb25uZWN0aW9uXG4gKiBTaG91bGQgYmUgY2FsbGVkIGR1cmluZyBhcHBsaWNhdGlvbiBzaHV0ZG93blxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBjbG9zZUNvbm5lY3Rpb24gfSBmcm9tICcuL2Nvbm5lY3Rpb24nO1xuICpcbiAqIHByb2Nlc3Mub24oJ1NJR1RFUk0nLCBhc3luYyAoKSA9PiB7XG4gKiAgIGF3YWl0IGNsb3NlQ29ubmVjdGlvbigpO1xuICogICBwcm9jZXNzLmV4aXQoMCk7XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xvc2VDb25uZWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjb25uZWN0aW9uID0gQ29ubmVjdGlvbi5nZXRJbnN0YW5jZSgpO1xuICBhd2FpdCBjb25uZWN0aW9uLmNsb3NlKCk7XG4gIGF3YWl0IGNsb3NlUmVwbGljYVBvb2woKTsgLy8gdGVhciBkb3duIHRoZSByZWFkLXJlcGxpY2EgcG9vbCB0b28gKHNlcnZpY2VzIG9ubHkgY2FsbCB0aGlzKVxuICBfZGJJbnN0YW5jZSA9IG51bGw7IC8vIFJlc2V0IGxhenkgaW5zdGFuY2Vcbn1cblxuLyoqXG4gKiBUZXN0cyB0aGUgZGF0YWJhc2UgY29ubmVjdGlvblxuICpcbiAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0cnVlIGlmIGNvbm5lY3Rpb24gaXMgaGVhbHRoeVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyB0ZXN0Q29ubmVjdGlvbiB9IGZyb20gJy4vY29ubmVjdGlvbic7XG4gKlxuICogaWYgKGF3YWl0IHRlc3RDb25uZWN0aW9uKCkpIHtcbiAqICAgY29uc29sZS5sb2coJ0RhdGFiYXNlIGlzIHJlYWR5Jyk7XG4gKiB9IGVsc2Uge1xuICogICBjb25zb2xlLmVycm9yKCdEYXRhYmFzZSBjb25uZWN0aW9uIGZhaWxlZCcpO1xuICogICBwcm9jZXNzLmV4aXQoMSk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RDb25uZWN0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBjb25uZWN0aW9uID0gQ29ubmVjdGlvbi5nZXRJbnN0YW5jZSgpO1xuICByZXR1cm4gY29ubmVjdGlvbi50ZXN0Q29ubmVjdGlvbigpO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemUgdGhlIGRhdGFiYXNlIGNvbm5lY3Rpb24gZXhwbGljaXRseVxuICogQ2FsbCB0aGlzIGR1cmluZyBhcHBsaWNhdGlvbiBzdGFydHVwIGFmdGVyIGVudmlyb25tZW50IGlzIGNvbmZpZ3VyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgaW5pdGlhbGl6ZURhdGFiYXNlIH0gZnJvbSAnLi9jb25uZWN0aW9uJztcbiAqXG4gKiBhc3luYyBmdW5jdGlvbiBib290c3RyYXAoKSB7XG4gKiAgIC8vIExvYWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZpcnN0XG4gKiAgIGRvdGVudi5jb25maWcoKTtcbiAqXG4gKiAgIC8vIFRoZW4gaW5pdGlhbGl6ZSBkYXRhYmFzZVxuICogICBhd2FpdCBpbml0aWFsaXplRGF0YWJhc2UoKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5pdGlhbGl6ZURhdGFiYXNlKCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjb25uZWN0aW9uID0gQ29ubmVjdGlvbi5nZXRJbnN0YW5jZSgpO1xuICBjb25zdCBoZWFsdGh5ID0gYXdhaXQgY29ubmVjdGlvbi50ZXN0Q29ubmVjdGlvbigpO1xuICBpZiAoIWhlYWx0aHkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0RhdGFiYXNlIGNvbm5lY3Rpb24gZmFpbGVkIGR1cmluZyBpbml0aWFsaXphdGlvbicpO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVhZC1yZXBsaWNhIHByaW1pdGl2ZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vL1xuLy8gT3B0LWluIHJlYWQtb25seSBjbGllbnQuIFBvaW50ZWQgYXQgYSBQb3N0Z3JlcyByZXBsaWNhIHZpYSBgREJfUkVQTElDQV9IT1NUYFxuLy8gLyBgREJfUkVQTElDQV9QT1JUYCAob3RoZXIgREJfKiB2YXJzIGFyZSBpbmhlcml0ZWQgZnJvbSB0aGUgcHJpbWFyeSkuIFdoZW5cbi8vIGBEQl9SRVBMSUNBX0hPU1RgIGlzIHVuc2V0LCBgZGJSZXBsaWNhYCByZXNvbHZlcyB0byB0aGUgcHJpbWFyeSBgZGJgIHNvXG4vLyBleGlzdGluZyBjYWxsZXJzIHN0YXkgY29ycmVjdCBvbiBzaW5nbGUtaW5zdGFuY2UgZGVwbG95cy5cbi8vXG4vLyBVc2FnZSBwYXR0ZXJuOiByb3V0ZSByZWFkLW9ubHkgcXVlcmllcyAobGlzdCBlbmRwb2ludHMsIGRhc2hib2FyZHMsXG4vLyBhbmFseXRpY3MpIHRocm91Z2ggYGRiUmVwbGljYWAgdG8gb2ZmbG9hZCB0aGUgcHJpbWFyeS4gV3JpdGVzIGFuZFxuLy8gdHJhbnNhY3Rpb25zIE1VU1Qgc3RheSBvbiBgZGJgIOKAlCByZXBsaWNhIGxhZyB3b3VsZCBvdGhlcndpc2UgcHJvZHVjZVxuLy8gcmVhZC1hZnRlci13cml0ZSBzdXJwcmlzZXMuXG4vL1xuLy8gVGhpcyBpcyBhIHByaW1pdGl2ZSBvbmx5IOKAlCBubyBzZXJ2aWNlIGNvZGUgaGFzIGJlZW4gbWlncmF0ZWQgdG8gdXNlIGl0LlxuLy8gQ2FsbGVycyBvcHQgaW4gZXhwbGljaXRseTsgdGhlIG1pZ3JhdGlvbiBpcyBhIHBlci1xdWVyeSBkZWNpc2lvbiwgbm90IGFcbi8vIGJsYW5rZXQgc3dpdGNoIChyZXBsaWNhIGxhZyByaXNrcyB2YXJ5IGJ5IGNhbGwgc2l0ZSkuXG5cbmludGVyZmFjZSBSZXBsaWNhUG9vbCB7XG4gIHBvb2w6IFBvb2w7XG4gIGRiOiBSZXR1cm5UeXBlPHR5cGVvZiBkcml6emxlPjtcbn1cblxubGV0IF9yZXBsaWNhOiBSZXBsaWNhUG9vbCB8IG51bGwgPSBudWxsO1xuXG5mdW5jdGlvbiBnZXRSZXBsaWNhQ29uZmlnKCk6IFBvb2xDb25maWcgfCBudWxsIHtcbiAgY29uc3QgcmVwbGljYUhvc3QgPSBwcm9jZXNzLmVudi5EQl9SRVBMSUNBX0hPU1Q7XG4gIGlmICghcmVwbGljYUhvc3QpIHJldHVybiBudWxsO1xuICBjb25zdCBjZmcgPSBnZXREYXRhYmFzZUNvbmZpZygpO1xuICByZXR1cm4ge1xuICAgIGhvc3Q6IHJlcGxpY2FIb3N0LFxuICAgIHBvcnQ6IHBhcnNlSW50RW52KHByb2Nlc3MuZW52LkRCX1JFUExJQ0FfUE9SVCwgY2ZnLnBvcnQpLFxuICAgIGRhdGFiYXNlOiBjZmcuZGF0YWJhc2UsXG4gICAgdXNlcjogY2ZnLnVzZXIsXG4gICAgcGFzc3dvcmQ6IGNmZy5wYXNzd29yZCxcbiAgICBtYXg6IHBhcnNlSW50RW52KHByb2Nlc3MuZW52LkRCX1JFUExJQ0FfTUFYX1BPT0wsIGNmZy5tYXhQb29sU2l6ZSksXG4gICAgaWRsZVRpbWVvdXRNaWxsaXM6IGNmZy5pZGxlVGltZW91dE1pbGxpcyxcbiAgICBjb25uZWN0aW9uVGltZW91dE1pbGxpczogY2ZnLmNvbm5lY3Rpb25UaW1lb3V0TWlsbGlzLFxuICAgIGFsbG93RXhpdE9uSWRsZTogdHJ1ZSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVwbGljYVBvb2woKTogUmVwbGljYVBvb2wgfCBudWxsIHtcbiAgaWYgKF9yZXBsaWNhKSByZXR1cm4gX3JlcGxpY2E7XG4gIGNvbnN0IGNmZyA9IGdldFJlcGxpY2FDb25maWcoKTtcbiAgaWYgKCFjZmcpIHJldHVybiBudWxsO1xuICBjb25zdCBwb29sID0gbmV3IFBvb2woY2ZnKTtcbiAgcG9vbC5vbignZXJyb3InLCAoZXJyKSA9PiBsb2dnZXIuZXJyb3IoJ1JlcGxpY2EgcG9vbCBlcnJvcicsIHsgZXJyb3I6IGVyci5tZXNzYWdlIH0pKTtcbiAgX3JlcGxpY2EgPSB7IHBvb2wsIGRiOiBkcml6emxlKHBvb2wsIHsgc2NoZW1hIH0pIH07XG4gIGxvZ2dlci5pbmZvKCdSZWFkIHJlcGxpY2EgcG9vbCBpbml0aWFsaXplZCcsIHsgaG9zdDogY2ZnLmhvc3QsIHBvcnQ6IGNmZy5wb3J0IH0pO1xuICByZXR1cm4gX3JlcGxpY2E7XG59XG5cbi8qKlxuICogUHJveHkgdGhhdCByZXNvbHZlcyB0byB0aGUgcmVhZC1yZXBsaWNhIGBkYmAgd2hlbiBgREJfUkVQTElDQV9IT1NUYCBpc1xuICogc2V0LCBhbmQgdG8gdGhlIHByaW1hcnkgYGRiYCBvdGhlcndpc2UuIFVzZSBmb3IgcmVhZC1vbmx5IHF1ZXJpZXMgdGhhdFxuICogdG9sZXJhdGUgcmVwbGljYSBsYWcgKHR5cGljYWxseSB0ZW5zIG9mIG1zKS4gV3JpdGVzIGFuZCB0cmFuc2FjdGlvbnNcbiAqIE1VU1Qgc3RheSBvbiB0aGUgcHJpbWFyeSBgZGJgLlxuICpcbiAqIFNhbWUgbGF6eS1pbml0aWFsaXphdGlvbiBwYXR0ZXJuIGFzIGBkYmAg4oCUIHRoZSByZXBsaWNhIHBvb2wgaXMgYnVpbHQgb25cbiAqIGZpcnN0IHVzZSwgbm90IG9uIG1vZHVsZSBpbXBvcnQuXG4gKi9cbmV4cG9ydCBjb25zdCBkYlJlcGxpY2EgPSBuZXcgUHJveHkoe30gYXMgUmV0dXJuVHlwZTx0eXBlb2YgZHJpenpsZT4sIHtcbiAgZ2V0KF8sIHByb3A6IHN0cmluZyB8IHN5bWJvbCkge1xuICAgIGNvbnN0IHJlcGxpY2EgPSBnZXRSZXBsaWNhUG9vbCgpO1xuICAgIGNvbnN0IHRhcmdldCA9IHJlcGxpY2EgPyByZXBsaWNhLmRiIDogZ2V0RGJJbnN0YW5jZSgpO1xuICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0W3Byb3AgYXMga2V5b2YgdHlwZW9mIHRhcmdldF07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHZhbHVlLmJpbmQodGFyZ2V0KTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH0sXG59KTtcblxuLyoqIENsb3NlIHRoZSByZXBsaWNhIHBvb2wuIENhbGxlZCBmcm9tIGBjbG9zZUNvbm5lY3Rpb24oKWAgc28gc2VydmljZVxuICogIHNodXRkb3duIGhhbmRsZXJzIGRvbid0IGhhdmUgdG8ga25vdyBhYm91dCBib3RoIHBvb2xzIHNlcGFyYXRlbHkuICovXG5hc3luYyBmdW5jdGlvbiBjbG9zZVJlcGxpY2FQb29sKCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIV9yZXBsaWNhKSByZXR1cm47XG4gIHRyeSB7XG4gICAgYXdhaXQgX3JlcGxpY2EucG9vbC5lbmQoKTtcbiAgICBsb2dnZXIuaW5mbygnUmVhZCByZXBsaWNhIHBvb2wgY2xvc2VkJyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5lcnJvcignRXJyb3IgY2xvc2luZyByZXBsaWNhIHBvb2wnLCB7IGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycikgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgX3JlcGxpY2EgPSBudWxsO1xuICB9XG59XG4iXX0=
|