@pipeline-builder/pipeline-manager 4.5.2 → 4.5.4

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.
Files changed (74) hide show
  1. package/README.md +62 -37
  2. package/dist/agent/post-steps.d.ts +5 -4
  3. package/dist/agent/post-steps.d.ts.map +1 -1
  4. package/dist/agent/post-steps.js +19 -7
  5. package/dist/agent/targets.d.ts +12 -2
  6. package/dist/agent/targets.d.ts.map +1 -1
  7. package/dist/agent/targets.js +20 -4
  8. package/dist/cli.d.ts.map +1 -1
  9. package/dist/cli.js +16 -7
  10. package/dist/commands/audit-stacks.d.ts +42 -1
  11. package/dist/commands/audit-stacks.d.ts.map +1 -1
  12. package/dist/commands/audit-stacks.js +104 -23
  13. package/dist/commands/audit-tokens.d.ts.map +1 -1
  14. package/dist/commands/audit-tokens.js +3 -4
  15. package/dist/commands/create-pat.d.ts.map +1 -1
  16. package/dist/commands/create-pat.js +9 -6
  17. package/dist/commands/deploy.d.ts.map +1 -1
  18. package/dist/commands/deploy.js +15 -2
  19. package/dist/commands/login.d.ts +3 -2
  20. package/dist/commands/login.d.ts.map +1 -1
  21. package/dist/commands/login.js +19 -10
  22. package/dist/commands/logout.d.ts +24 -0
  23. package/dist/commands/logout.d.ts.map +1 -0
  24. package/dist/commands/logout.js +105 -0
  25. package/dist/commands/new-plugin.js +5 -5
  26. package/dist/commands/org-export.js +2 -2
  27. package/dist/commands/pipeline-remove.d.ts +26 -0
  28. package/dist/commands/pipeline-remove.d.ts.map +1 -0
  29. package/dist/commands/pipeline-remove.js +84 -0
  30. package/dist/commands/provision-steps.d.ts.map +1 -1
  31. package/dist/commands/provision-steps.js +1 -2
  32. package/dist/commands/provision.d.ts.map +1 -1
  33. package/dist/commands/provision.js +6 -5
  34. package/dist/commands/register.d.ts.map +1 -1
  35. package/dist/commands/register.js +3 -4
  36. package/dist/commands/status.d.ts +5 -2
  37. package/dist/commands/status.d.ts.map +1 -1
  38. package/dist/commands/status.js +65 -25
  39. package/dist/commands/toolchain.d.ts +21 -0
  40. package/dist/commands/toolchain.d.ts.map +1 -0
  41. package/dist/commands/toolchain.js +70 -0
  42. package/dist/commands/validate-templates.d.ts.map +1 -1
  43. package/dist/commands/validate-templates.js +4 -5
  44. package/dist/config/cli.constants.d.ts +8 -0
  45. package/dist/config/cli.constants.d.ts.map +1 -1
  46. package/dist/config/cli.constants.js +21 -2
  47. package/dist/types/plugin.d.ts +0 -6
  48. package/dist/types/plugin.d.ts.map +1 -1
  49. package/dist/types/plugin.js +1 -1
  50. package/dist/utils/command-utils.d.ts +13 -0
  51. package/dist/utils/command-utils.d.ts.map +1 -1
  52. package/dist/utils/command-utils.js +31 -17
  53. package/dist/utils/config-loader.d.ts +2 -1
  54. package/dist/utils/config-loader.d.ts.map +1 -1
  55. package/dist/utils/config-loader.js +14 -4
  56. package/dist/utils/credential-store.d.ts +9 -1
  57. package/dist/utils/credential-store.d.ts.map +1 -1
  58. package/dist/utils/credential-store.js +21 -2
  59. package/dist/utils/error-handler.d.ts +10 -1
  60. package/dist/utils/error-handler.d.ts.map +1 -1
  61. package/dist/utils/error-handler.js +20 -8
  62. package/dist/utils/pipeline-config.d.ts +5 -2
  63. package/dist/utils/pipeline-config.d.ts.map +1 -1
  64. package/dist/utils/pipeline-config.js +12 -3
  65. package/dist/utils/plugin-resolver.d.ts +21 -6
  66. package/dist/utils/plugin-resolver.d.ts.map +1 -1
  67. package/dist/utils/plugin-resolver.js +42 -9
  68. package/dist/utils/response-utils.d.ts +11 -0
  69. package/dist/utils/response-utils.d.ts.map +1 -1
  70. package/dist/utils/response-utils.js +23 -1
  71. package/dist/utils/toolchain.d.ts +78 -0
  72. package/dist/utils/toolchain.d.ts.map +1 -0
  73. package/dist/utils/toolchain.js +195 -0
  74. package/package.json +4 -4
@@ -63,6 +63,21 @@ function writeStore(store) {
63
63
  fs.writeFileSync(tmp, `${JSON.stringify(store, null, 2)}\n`, { mode: 0o600 });
64
64
  fs.renameSync(tmp, STORE_FILE);
65
65
  }
66
+ /** The base URL in the form it is remembered as the active platform. */
67
+ function normalizeBaseUrl(baseUrl) {
68
+ return baseUrl.trim().replace(/\/+$/, '');
69
+ }
70
+ /** The platform the last `auth login` signed in to, or undefined. */
71
+ export function activePlatform() {
72
+ const value = readStore().activePlatform;
73
+ return typeof value === 'string' && value ? value : undefined;
74
+ }
75
+ /** Remember `baseUrl` as the platform later commands talk to. */
76
+ export function setActivePlatform(baseUrl) {
77
+ const store = readStore();
78
+ store.activePlatform = normalizeBaseUrl(baseUrl);
79
+ writeStore(store);
80
+ }
66
81
  /** Persist the session for `baseUrl`, replacing any previous one. */
67
82
  export function saveSession(baseUrl, session) {
68
83
  const store = readStore();
@@ -75,7 +90,11 @@ export function saveSession(baseUrl, session) {
75
90
  export function loadSession(baseUrl) {
76
91
  return readStore().sessions[storeKey(baseUrl)];
77
92
  }
78
- /** Forget the session for `baseUrl` (sign-out, or a refresh the platform rejected). */
93
+ /**
94
+ * Forget the session for `baseUrl` (sign-out, or a refresh the platform
95
+ * rejected). The active platform is kept: it is the platform the person chose,
96
+ * so the next `auth login` (whose `--url` defaults to it) signs back in there.
97
+ */
79
98
  export function clearSession(baseUrl) {
80
99
  const store = readStore();
81
100
  if (!(storeKey(baseUrl) in store.sessions))
@@ -145,4 +164,4 @@ export async function withRefreshLock(fn) {
145
164
  fs.rmSync(REFRESH_LOCK_FILE, { force: true });
146
165
  }
147
166
  }
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlZGVudGlhbC1zdG9yZS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2NyZWRlbnRpYWwtc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BCLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUN4QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU3RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBQy9ELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDNUQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUUvRCx5RUFBeUU7QUFDekUsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQUM7QUFDckMsNkVBQTZFO0FBQzdFLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFDO0FBRWpDLHlFQUF5RTtBQUN6RSxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUM7QUFtQjlCLGtFQUFrRTtBQUNsRSxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLFFBQVEsQ0FBQyxPQUFlO0lBQy9CLE9BQU8sT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVB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TSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7UUFDNUUsQ0FBQztJQUNILENBQUM7SUFDRCxJQUFJLENBQUM7UUFDSCxPQUFPLE1BQU0sRUFBRSxFQUFFLENBQUM7SUFDcEIsQ0FBQztZQUFTLENBQUM7UUFDVCxJQUFJLElBQUk7WUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBPbi1kaXNrIHNlc3Npb24gc3RvcmUgZm9yIGBhdXRoIGxvZ2luYC5cbiAqXG4gKiBgfi8ucGlwZWxpbmUtbWFuYWdlci9jcmVkZW50aWFscy5qc29uYCwgb3duZXItb25seSAoMDYwMCBmaWxlIGluc2lkZSB0aGUgMDcwMFxuICogZGlyZWN0b3J5IHRoZSBhdWRpdCBsb2cgYWxyZWFkeSBjcmVhdGVzKSwga2V5ZWQgYnkgcGxhdGZvcm0gYmFzZSBVUkwgc28gb25lXG4gKiBtYWNoaW5lIGNhbiBob2xkIHNlc3Npb25zIGZvciBzZXZlcmFsIHBsYXRmb3JtcyBhdCBvbmNlLlxuICpcbiAqIEl0IGhvbGRzIGEgcmVhbCBzZXNzaW9uIOKAlCB0aGUgYWNjZXNzIHRva2VuIEFORCBpdHMgcmVmcmVzaCB0b2tlbiDigJQgYmVjYXVzZVxuICogdGhhdCBpcyB3aGF0IHRoZSBkZXZpY2UgZmxvdyBoYW5kcyBiYWNrIGFuZCB3aGF0IGxldHMgdGhlIENMSSBrZWVwIHdvcmtpbmcgZm9yXG4gKiBkYXlzIHdpdGhvdXQgYW5vdGhlciBicm93c2VyIHJvdW5kIHRyaXAuIE5vdGhpbmcgZWxzZSBhYm91dCB0aGUgYWNjb3VudCBpc1xuICogc3RvcmVkOiBubyBwYXNzd29yZCAodGhlIENMSSBuZXZlciBob2xkcyBvbmUpIGFuZCBubyBpZGVudGlmaWVyLlxuICpcbiAqIFJlc29sdXRpb24gb3JkZXIgZXZlcnl3aGVyZSBlbHNlIGluIHRoZSBDTEkgaXMgdW5jaGFuZ2VkIGluIHNwaXJpdDogYW5cbiAqIGV4cGxpY2l0IGBQTEFURk9STV9UT0tFTmAgaW4gdGhlIGVudmlyb25tZW50IGFsd2F5cyB3aW5zLCBzbyBDSSBrZWVwcyB1c2luZyBhblxuICogYWNjZXNzIGtleSBhbmQgaXMgbmV2ZXIgYWZmZWN0ZWQgYnkgd2hhdGV2ZXIgYSBkZXZlbG9wZXIncyBsYXB0b3AgaGFzIGNhY2hlZC5cbiAqL1xuXG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZXJyb3JNZXNzYWdlIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgcHJpbnREZWJ1ZywgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi9vdXRwdXQtdXRpbHMuanMnO1xuXG5jb25zdCBTVE9SRV9ESVIgPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLnBpcGVsaW5lLW1hbmFnZXInKTtcbmNvbnN0IFNUT1JFX0ZJTEUgPSBwYXRoLmpvaW4oU1RPUkVfRElSLCAnY3JlZGVudGlhbHMuanNvbicpO1xuY29uc3QgUkVGUkVTSF9MT0NLX0ZJTEUgPSBwYXRoLmpvaW4oU1RPUkVfRElSLCAncmVmcmVzaC5sb2NrJyk7XG5cbi8qKiBBIGxvY2sgb2xkZXIgdGhhbiB0aGlzIGJlbG9uZ3MgdG8gYSBwcm9jZXNzIHRoYXQgZGllZCBtaWQtcmVmcmVzaC4gKi9cbmNvbnN0IFJFRlJFU0hfTE9DS19TVEFMRV9NUyA9IDMwXzAwMDtcbi8qKiBIb3cgbG9uZyBhIHNlY29uZCBwcm9jZXNzIHdhaXRzIGZvciB0aGUgZmlyc3Qgb25lJ3MgcmVmcmVzaCB0byBmaW5pc2guICovXG5jb25zdCBSRUZSRVNIX0xPQ0tfV0FJVF9NUyA9IDE1XzAwMDtcbmNvbnN0IFJFRlJFU0hfTE9DS19QT0xMX01TID0gMTAwO1xuXG4vKiogUmUtYXV0aGVudGljYXRlIHJhdGhlciB0aGFuIGhhbmQgb3V0IGEgdG9rZW4gdGhpcyBjbG9zZSB0byBleHBpcnkuICovXG5jb25zdCBFWFBJUllfU0tFV19NUyA9IDYwXzAwMDtcblxuLyoqIE9uZSBwbGF0Zm9ybSdzIHN0b3JlZCBzZXNzaW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9yZWRTZXNzaW9uIHtcbiAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgLyoqIFJvdGF0ZWQgb24gZXZlcnkgcmVmcmVzaDsgYWJzZW50IG9ubHkgaWYgdGhlIHBsYXRmb3JtIHN0b3BwZWQgaXNzdWluZyBvbmUuICovXG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgLyoqIEVwb2NoIG1zIHRoZSBhY2Nlc3MgdG9rZW4gZXhwaXJlcy4gKi9cbiAgZXhwaXJlc0F0OiBudW1iZXI7XG4gIC8qKiBUaGUgb3JnIHRoZSBzZXNzaW9uIHdhcyBzY29wZWQgdG8gd2hlbiBpdCB3YXMgc3RvcmVkIChpbmZvcm1hdGlvbmFsKS4gKi9cbiAgb3JnYW5pemF0aW9uSWQ/OiBzdHJpbmc7XG4gIHNhdmVkQXQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFN0b3JlRmlsZSB7XG4gIHZlcnNpb246IDE7XG4gIHNlc3Npb25zOiBSZWNvcmQ8c3RyaW5nLCBTdG9yZWRTZXNzaW9uPjtcbn1cblxuLyoqIFdoZXJlIHRoZSBzZXNzaW9ucyBsaXZlIOKAlCBzdXJmYWNlZCBpbiBoZWxwIHRleHQgYW5kIGVycm9ycy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVkZW50aWFsU3RvcmVQYXRoKCk6IHN0cmluZyB7XG4gIHJldHVybiBTVE9SRV9GSUxFO1xufVxuXG4vKipcbiAqIFRyYWlsaW5nIHNsYXNoZXMgYW5kIGNhc2UgZGlmZmVyZW5jZXMgaW4gdGhlIGhvc3Qgd291bGQgb3RoZXJ3aXNlIHNwbGl0IG9uZVxuICogcGxhdGZvcm0gaW50byBzZXZlcmFsIGVudHJpZXMuXG4gKi9cbmZ1bmN0aW9uIHN0b3JlS2V5KGJhc2VVcmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBiYXNlVXJsLnRyaW0oKS5yZXBsYWNlKC9cXC8rJC8sICcnKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiByZWFkU3RvcmUoKTogU3RvcmVGaWxlIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhTVE9SRV9GSUxFLCAndXRmLTgnKSk7XG4gICAgaWYgKHBhcnNlZD8udmVyc2lvbiA9PT0gMSAmJiBwYXJzZWQuc2Vzc2lvbnMgJiYgdHlwZW9mIHBhcnNlZC5zZXNzaW9ucyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBwYXJzZWQgYXMgU3RvcmVGaWxlO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gTWlzc2luZyBvciB1bnJlYWRhYmxlOiB0cmVhdCBhcyBlbXB0eS4gQSBjb3JydXB0IGZpbGUgbXVzdCBub3QgYnJlYWsgZXZlcnlcbiAgICAvLyBjb21tYW5kIOKAlCB0aGUgbmV4dCBzdWNjZXNzZnVsIGxvZ2luIHJld3JpdGVzIGl0LlxuICB9XG4gIHJldHVybiB7IHZlcnNpb246IDEsIHNlc3Npb25zOiB7fSB9O1xufVxuXG5mdW5jdGlvbiB3cml0ZVN0b3JlKHN0b3JlOiBTdG9yZUZpbGUpOiB2b2lkIHtcbiAgZnMubWtkaXJTeW5jKFNUT1JFX0RJUiwgeyByZWN1cnNpdmU6IHRydWUsIG1vZGU6IDBvNzAwIH0pO1xuICAvLyBXcml0ZSB0aHJvdWdoIGEgdGVtcCBmaWxlIHNvIGFuIGludGVycnVwdGVkIHdyaXRlIGNhbid0IGxlYXZlIGEgdHJ1bmNhdGVkXG4gIC8vIHN0b3JlIGJlaGluZCwgYW5kIGNyZWF0ZSBpdCAwNjAwIGZyb20gdGhlIHN0YXJ0IChuZXZlciBicmllZmx5IHdvcmxkLXJlYWRhYmxlKS5cbiAgY29uc3QgdG1wID0gYCR7U1RPUkVfRklMRX0udG1wYDtcbiAgZnMud3JpdGVGaWxlU3luYyh0bXAsIGAke0pTT04uc3RyaW5naWZ5KHN0b3JlLCBudWxsLCAyKX1cXG5gLCB7IG1vZGU6IDBvNjAwIH0pO1xuICBmcy5yZW5hbWVTeW5jKHRtcCwgU1RPUkVfRklMRSk7XG59XG5cbi8qKiBQZXJzaXN0IHRoZSBzZXNzaW9uIGZvciBgYmFzZVVybGAsIHJlcGxhY2luZyBhbnkgcHJldmlvdXMgb25lLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhdmVTZXNzaW9uKGJhc2VVcmw6IHN0cmluZywgc2Vzc2lvbjogT21pdDxTdG9yZWRTZXNzaW9uLCAnc2F2ZWRBdCc+KTogdm9pZCB7XG4gIGNvbnN0IHN0b3JlID0gcmVhZFN0b3JlKCk7XG4gIHN0b3JlLnNlc3Npb25zW3N0b3JlS2V5KGJhc2VVcmwpXSA9IHsgLi4uc2Vzc2lvbiwgc2F2ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpIH07XG4gIHdyaXRlU3RvcmUoc3RvcmUpO1xuICBwcmludERlYnVnKCdTZXNzaW9uIHN0b3JlZCcsIHsgcGF0aDogU1RPUkVfRklMRSwgcGxhdGZvcm06IHN0b3JlS2V5KGJhc2VVcmwpIH0pO1xufVxuXG4vKiogVGhlIHN0b3JlZCBzZXNzaW9uIGZvciBgYmFzZVVybGAsIG9yIHVuZGVmaW5lZC4gRXhwaXJ5IGlzIE5PVCBjaGVja2VkIGhlcmUg4oCUXG4gKiAgY2FsbGVycyBkZWNpZGUgd2hldGhlciB0byB1c2UsIHJlZnJlc2ggb3IgaWdub3JlIGl0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRTZXNzaW9uKGJhc2VVcmw6IHN0cmluZyk6IFN0b3JlZFNlc3Npb24gfCB1bmRlZmluZWQge1xuICByZXR1cm4gcmVhZFN0b3JlKCkuc2Vzc2lvbnNbc3RvcmVLZXkoYmFzZVVybCldO1xufVxuXG4vKiogRm9yZ2V0IHRoZSBzZXNzaW9uIGZvciBgYmFzZVVybGAgKHNpZ24tb3V0LCBvciBhIHJlZnJlc2ggdGhlIHBsYXRmb3JtIHJlamVjdGVkKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhclNlc3Npb24oYmFzZVVybDogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IHN0b3JlID0gcmVhZFN0b3JlKCk7XG4gIGlmICghKHN0b3JlS2V5KGJhc2VVcmwpIGluIHN0b3JlLnNlc3Npb25zKSkgcmV0dXJuO1xuICBkZWxldGUgc3RvcmUuc2Vzc2lvbnNbc3RvcmVLZXkoYmFzZVVybCldO1xuICB0cnkge1xuICAgIHdyaXRlU3RvcmUoc3RvcmUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIExvc2luZyB0aGUgYWJpbGl0eSB0byBjbGVhciBhIGRlYWQgc2Vzc2lvbiBpcyBhIG51aXNhbmNlLCBub3QgYSBmYWlsdXJlLlxuICAgIHByaW50V2FybmluZygnQ291bGQgbm90IHVwZGF0ZSB0aGUgc3RvcmVkIGNyZWRlbnRpYWxzJywge1xuICAgICAgcGF0aDogU1RPUkVfRklMRSxcbiAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyb3IpLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKiBUcnVlIHdoZW4gdGhlIHN0b3JlZCBhY2Nlc3MgdG9rZW4gaXMgc3RpbGwgdXNhYmxlICh3aXRoIGEgbGl0dGxlIHNsYWNrKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Nlc3Npb25Vc2FibGUoc2Vzc2lvbjogU3RvcmVkU2Vzc2lvbiB8IHVuZGVmaW5lZCk6IHNlc3Npb24gaXMgU3RvcmVkU2Vzc2lvbiB7XG4gIHJldHVybiAhIXNlc3Npb24/LmFjY2Vzc1Rva2VuICYmIHNlc3Npb24uZXhwaXJlc0F0IC0gRVhQSVJZX1NLRVdfTVMgPiBEYXRlLm5vdygpO1xufVxuXG4vKipcbiAqIFJ1biBgZm5gIGhvbGRpbmcgdGhlIG1hY2hpbmUtd2lkZSBSRUZSRVNIIExPQ0sgKGB+Ly5waXBlbGluZS1tYW5hZ2VyL3JlZnJlc2gubG9ja2AsXG4gKiBjcmVhdGVkIGV4Y2x1c2l2ZWx5KS5cbiAqXG4gKiBBIHJlZnJlc2ggdG9rZW4gaXMgc2luZ2xlLXVzZTogdHdvIENMSSBwcm9jZXNzZXMgcmVuZXdpbmcgdGhlIHNhbWUgc3RvcmVkXG4gKiBzZXNzaW9uIGF0IG9uY2UgKGEgc2NyaXB0IGZhbm5pbmcgb3V0IGNvbW1hbmRzLCB0d28gdGVybWluYWxzKSB3b3VsZCBwcmVzZW50XG4gKiB0aGUgc2FtZSB0b2tlbiB0d2ljZSwgYW5kIG91dHNpZGUgdGhlIHBsYXRmb3JtJ3Mgc2hvcnQgcm90YXRpb24gZ3JhY2UgdGhlXG4gKiBzZWNvbmQgdXNlIHJlYWRzIGFzIFJFVVNFIOKAlCB3aGljaCByZXZva2VzIHRoZSBzZXNzaW9uLiBTZXJpYWxpemluZyB0aGUgcmVmcmVzaFxuICogbWVhbnMgdGhlIHNlY29uZCBwcm9jZXNzIHdhaXRzLCB0aGVuIChyZS1yZWFkaW5nIHRoZSBzdG9yZSkgZmluZHMgdGhlIHBhaXIgdGhlXG4gKiBmaXJzdCBvbmUgYWxyZWFkeSBzYXZlZCBpbnN0ZWFkIG9mIHNwZW5kaW5nIHRoZSBvbGQgdG9rZW4gYWdhaW4uXG4gKlxuICogQSBsb2NrIGxlZnQgYmVoaW5kIGJ5IGEgY3Jhc2hlZCBwcm9jZXNzIGlzIGJyb2tlbiBhZnRlclxuICoge0BsaW5rIFJFRlJFU0hfTE9DS19TVEFMRV9NU307IHdhaXRpbmcgZ2l2ZXMgdXAgYWZ0ZXIge0BsaW5rIFJFRlJFU0hfTE9DS19XQUlUX01TfVxuICogYW5kIHJ1bnMgYGZuYCBhbnl3YXkgKHRoZSBwbGF0Zm9ybSBncmFjZSBzdGlsbCBjb3ZlcnMgYSBuZWFyLXNpbXVsdGFuZW91cyB1c2UpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aFJlZnJlc2hMb2NrPFQ+KGZuOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gIGZzLm1rZGlyU3luYyhTVE9SRV9ESVIsIHsgcmVjdXJzaXZlOiB0cnVlLCBtb2RlOiAwbzcwMCB9KTtcbiAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgUkVGUkVTSF9MT0NLX1dBSVRfTVM7XG4gIGxldCBoZWxkID0gZmFsc2U7XG4gIHdoaWxlICghaGVsZCkge1xuICAgIHRyeSB7XG4gICAgICBmcy5jbG9zZVN5bmMoZnMub3BlblN5bmMoUkVGUkVTSF9MT0NLX0ZJTEUsICd3eCcsIDBvNjAwKSk7XG4gICAgICBoZWxkID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKChlcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgIT09ICdFRVhJU1QnKSBicmVhazsgLy8gY2FuJ3QgbG9jayBhdCBhbGwg4oCUIHByb2NlZWQgdW5sb2NrZWRcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChEYXRlLm5vdygpIC0gZnMuc3RhdFN5bmMoUkVGUkVTSF9MT0NLX0ZJTEUpLm10aW1lTXMgPiBSRUZSRVNIX0xPQ0tfU1RBTEVfTVMpIHtcbiAgICAgICAgICBmcy5ybVN5bmMoUkVGUkVTSF9MT0NLX0ZJTEUsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb250aW51ZTsgLy8gdmFuaXNoZWQgYmV0d2VlbiBvcGVuIGFuZCBzdGF0IOKAlCB0cnkgYWdhaW5cbiAgICAgIH1cbiAgICAgIGlmIChEYXRlLm5vdygpID49IGRlYWRsaW5lKSBicmVhaztcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIFJFRlJFU0hfTE9DS19QT0xMX01TKSk7XG4gICAgfVxuICB9XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGZuKCk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKGhlbGQpIGZzLnJtU3luYyhSRUZSRVNIX0xPQ0tfRklMRSwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgfVxufVxuIl19
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlZGVudGlhbC1zdG9yZS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2NyZWRlbnRpYWwtc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BCLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUN4QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU3RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBQy9ELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDNUQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUUvRCx5RUFBeUU7QUFDekUsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQUM7QUFDckMsNkVBQTZFO0FBQzdFLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFDO0FBRWpDLHlFQUF5RTtBQUN6RSxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUM7QUEwQjlCLGtFQUFrRTtBQUNsRSxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLFFBQVEsQ0FBQyxPQUFlO0lBQy9CLE9BQU8sT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVB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RSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzFELElBQUksR0FBRyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUssS0FBK0IsQ0FBQyxJQUFJLEtBQUssUUFBUTtnQkFBRSxNQUFNLENBQUMsdUNBQXVDO1lBQ3RHLElBQUksQ0FBQztnQkFDSCxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUMsT0FBTyxHQUFHLHFCQUFxQixFQUFFLENBQUM7b0JBQ2hGLEVBQUUsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDOUMsU0FBUztnQkFDWCxDQUFDO1lBQ0gsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxTQUFTLENBQUMsNkNBQTZDO1lBQ3pELENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxRQUFRO2dCQUFFLE1BQU07WUFDbEMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7UUFDNUUsQ0FBQztJQUNILENBQUM7SUFDRCxJQUFJLENBQUM7UUFDSCxPQUFPLE1BQU0sRUFBRSxFQUFFLENBQUM7SUFDcEIsQ0FBQztZQUFTLENBQUM7UUFDVCxJQUFJLElBQUk7WUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBPbi1kaXNrIHNlc3Npb24gc3RvcmUgZm9yIGBhdXRoIGxvZ2luYC5cbiAqXG4gKiBgfi8ucGlwZWxpbmUtbWFuYWdlci9jcmVkZW50aWFscy5qc29uYCwgb3duZXItb25seSAoMDYwMCBmaWxlIGluc2lkZSB0aGUgMDcwMFxuICogZGlyZWN0b3J5IHRoZSBhdWRpdCBsb2cgYWxyZWFkeSBjcmVhdGVzKSwga2V5ZWQgYnkgcGxhdGZvcm0gYmFzZSBVUkwgc28gb25lXG4gKiBtYWNoaW5lIGNhbiBob2xkIHNlc3Npb25zIGZvciBzZXZlcmFsIHBsYXRmb3JtcyBhdCBvbmNlLlxuICpcbiAqIEl0IGhvbGRzIGEgcmVhbCBzZXNzaW9uIOKAlCB0aGUgYWNjZXNzIHRva2VuIEFORCBpdHMgcmVmcmVzaCB0b2tlbiDigJQgYmVjYXVzZVxuICogdGhhdCBpcyB3aGF0IHRoZSBkZXZpY2UgZmxvdyBoYW5kcyBiYWNrIGFuZCB3aGF0IGxldHMgdGhlIENMSSBrZWVwIHdvcmtpbmcgZm9yXG4gKiBkYXlzIHdpdGhvdXQgYW5vdGhlciBicm93c2VyIHJvdW5kIHRyaXAuIE5vdGhpbmcgZWxzZSBhYm91dCB0aGUgYWNjb3VudCBpc1xuICogc3RvcmVkOiBubyBwYXNzd29yZCAodGhlIENMSSBuZXZlciBob2xkcyBvbmUpIGFuZCBubyBpZGVudGlmaWVyLlxuICpcbiAqIFJlc29sdXRpb24gb3JkZXIgZXZlcnl3aGVyZSBlbHNlIGluIHRoZSBDTEkgaXMgdW5jaGFuZ2VkIGluIHNwaXJpdDogYW5cbiAqIGV4cGxpY2l0IGBQTEFURk9STV9UT0tFTmAgaW4gdGhlIGVudmlyb25tZW50IGFsd2F5cyB3aW5zLCBzbyBDSSBrZWVwcyB1c2luZyBhblxuICogYWNjZXNzIGtleSBhbmQgaXMgbmV2ZXIgYWZmZWN0ZWQgYnkgd2hhdGV2ZXIgYSBkZXZlbG9wZXIncyBsYXB0b3AgaGFzIGNhY2hlZC5cbiAqL1xuXG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZXJyb3JNZXNzYWdlIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgcHJpbnREZWJ1ZywgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi9vdXRwdXQtdXRpbHMuanMnO1xuXG5jb25zdCBTVE9SRV9ESVIgPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLnBpcGVsaW5lLW1hbmFnZXInKTtcbmNvbnN0IFNUT1JFX0ZJTEUgPSBwYXRoLmpvaW4oU1RPUkVfRElSLCAnY3JlZGVudGlhbHMuanNvbicpO1xuY29uc3QgUkVGUkVTSF9MT0NLX0ZJTEUgPSBwYXRoLmpvaW4oU1RPUkVfRElSLCAncmVmcmVzaC5sb2NrJyk7XG5cbi8qKiBBIGxvY2sgb2xkZXIgdGhhbiB0aGlzIGJlbG9uZ3MgdG8gYSBwcm9jZXNzIHRoYXQgZGllZCBtaWQtcmVmcmVzaC4gKi9cbmNvbnN0IFJFRlJFU0hfTE9DS19TVEFMRV9NUyA9IDMwXzAwMDtcbi8qKiBIb3cgbG9uZyBhIHNlY29uZCBwcm9jZXNzIHdhaXRzIGZvciB0aGUgZmlyc3Qgb25lJ3MgcmVmcmVzaCB0byBmaW5pc2guICovXG5jb25zdCBSRUZSRVNIX0xPQ0tfV0FJVF9NUyA9IDE1XzAwMDtcbmNvbnN0IFJFRlJFU0hfTE9DS19QT0xMX01TID0gMTAwO1xuXG4vKiogUmUtYXV0aGVudGljYXRlIHJhdGhlciB0aGFuIGhhbmQgb3V0IGEgdG9rZW4gdGhpcyBjbG9zZSB0byBleHBpcnkuICovXG5jb25zdCBFWFBJUllfU0tFV19NUyA9IDYwXzAwMDtcblxuLyoqIE9uZSBwbGF0Zm9ybSdzIHN0b3JlZCBzZXNzaW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9yZWRTZXNzaW9uIHtcbiAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgLyoqIFJvdGF0ZWQgb24gZXZlcnkgcmVmcmVzaDsgYWJzZW50IG9ubHkgaWYgdGhlIHBsYXRmb3JtIHN0b3BwZWQgaXNzdWluZyBvbmUuICovXG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgLyoqIEVwb2NoIG1zIHRoZSBhY2Nlc3MgdG9rZW4gZXhwaXJlcy4gKi9cbiAgZXhwaXJlc0F0OiBudW1iZXI7XG4gIC8qKiBUaGUgb3JnIHRoZSBzZXNzaW9uIHdhcyBzY29wZWQgdG8gd2hlbiBpdCB3YXMgc3RvcmVkIChpbmZvcm1hdGlvbmFsKS4gKi9cbiAgb3JnYW5pemF0aW9uSWQ/OiBzdHJpbmc7XG4gIHNhdmVkQXQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFN0b3JlRmlsZSB7XG4gIHZlcnNpb246IDE7XG4gIHNlc3Npb25zOiBSZWNvcmQ8c3RyaW5nLCBTdG9yZWRTZXNzaW9uPjtcbiAgLyoqXG4gICAqIFRoZSBwbGF0Zm9ybSB0aGUgbGFzdCBgYXV0aCBsb2dpbmAgc2lnbmVkIGluIHRvLiBFdmVyeSBvdGhlciBjb21tYW5kIHJlYWRzXG4gICAqIGl0cyBiYXNlIFVSTCBmcm9tIHRoaXMgKGJlbG93IGBQTEFURk9STV9CQVNFX1VSTGAsIGFib3ZlIHRoZSBjb25maWcgZmlsZXMg4oCUXG4gICAqIHNlZSBjb25maWctbG9hZGVyKSwgc28gYGF1dGggbG9naW4gLS11cmwgWGAgaXMgZm9sbG93ZWQgYnkgY29tbWFuZHMgdGhhdFxuICAgKiB0YWxrIHRvIFgsIHdoaWNoIGlzIHdoZXJlIHRoZSBzZXNzaW9uIHdhcyBzdG9yZWQuXG4gICAqL1xuICBhY3RpdmVQbGF0Zm9ybT86IHN0cmluZztcbn1cblxuLyoqIFdoZXJlIHRoZSBzZXNzaW9ucyBsaXZlIOKAlCBzdXJmYWNlZCBpbiBoZWxwIHRleHQgYW5kIGVycm9ycy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVkZW50aWFsU3RvcmVQYXRoKCk6IHN0cmluZyB7XG4gIHJldHVybiBTVE9SRV9GSUxFO1xufVxuXG4vKipcbiAqIFRyYWlsaW5nIHNsYXNoZXMgYW5kIGNhc2UgZGlmZmVyZW5jZXMgaW4gdGhlIGhvc3Qgd291bGQgb3RoZXJ3aXNlIHNwbGl0IG9uZVxuICogcGxhdGZvcm0gaW50byBzZXZlcmFsIGVudHJpZXMuXG4gKi9cbmZ1bmN0aW9uIHN0b3JlS2V5KGJhc2VVcmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBiYXNlVXJsLnRyaW0oKS5yZXBsYWNlKC9cXC8rJC8sICcnKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiByZWFkU3RvcmUoKTogU3RvcmVGaWxlIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhTVE9SRV9GSUxFLCAndXRmLTgnKSk7XG4gICAgaWYgKHBhcnNlZD8udmVyc2lvbiA9PT0gMSAmJiBwYXJzZWQuc2Vzc2lvbnMgJiYgdHlwZW9mIHBhcnNlZC5zZXNzaW9ucyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBwYXJzZWQgYXMgU3RvcmVGaWxlO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gTWlzc2luZyBvciB1bnJlYWRhYmxlOiB0cmVhdCBhcyBlbXB0eS4gQSBjb3JydXB0IGZpbGUgbXVzdCBub3QgYnJlYWsgZXZlcnlcbiAgICAvLyBjb21tYW5kIOKAlCB0aGUgbmV4dCBzdWNjZXNzZnVsIGxvZ2luIHJld3JpdGVzIGl0LlxuICB9XG4gIHJldHVybiB7IHZlcnNpb246IDEsIHNlc3Npb25zOiB7fSB9O1xufVxuXG5mdW5jdGlvbiB3cml0ZVN0b3JlKHN0b3JlOiBTdG9yZUZpbGUpOiB2b2lkIHtcbiAgZnMubWtkaXJTeW5jKFNUT1JFX0RJUiwgeyByZWN1cnNpdmU6IHRydWUsIG1vZGU6IDBvNzAwIH0pO1xuICAvLyBXcml0ZSB0aHJvdWdoIGEgdGVtcCBmaWxlIHNvIGFuIGludGVycnVwdGVkIHdyaXRlIGNhbid0IGxlYXZlIGEgdHJ1bmNhdGVkXG4gIC8vIHN0b3JlIGJlaGluZCwgYW5kIGNyZWF0ZSBpdCAwNjAwIGZyb20gdGhlIHN0YXJ0IChuZXZlciBicmllZmx5IHdvcmxkLXJlYWRhYmxlKS5cbiAgY29uc3QgdG1wID0gYCR7U1RPUkVfRklMRX0udG1wYDtcbiAgZnMud3JpdGVGaWxlU3luYyh0bXAsIGAke0pTT04uc3RyaW5naWZ5KHN0b3JlLCBudWxsLCAyKX1cXG5gLCB7IG1vZGU6IDBvNjAwIH0pO1xuICBmcy5yZW5hbWVTeW5jKHRtcCwgU1RPUkVfRklMRSk7XG59XG5cbi8qKiBUaGUgYmFzZSBVUkwgaW4gdGhlIGZvcm0gaXQgaXMgcmVtZW1iZXJlZCBhcyB0aGUgYWN0aXZlIHBsYXRmb3JtLiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQmFzZVVybChiYXNlVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYmFzZVVybC50cmltKCkucmVwbGFjZSgvXFwvKyQvLCAnJyk7XG59XG5cbi8qKiBUaGUgcGxhdGZvcm0gdGhlIGxhc3QgYGF1dGggbG9naW5gIHNpZ25lZCBpbiB0bywgb3IgdW5kZWZpbmVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFjdGl2ZVBsYXRmb3JtKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHZhbHVlID0gcmVhZFN0b3JlKCkuYWN0aXZlUGxhdGZvcm07XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbi8qKiBSZW1lbWJlciBgYmFzZVVybGAgYXMgdGhlIHBsYXRmb3JtIGxhdGVyIGNvbW1hbmRzIHRhbGsgdG8uICovXG5leHBvcnQgZnVuY3Rpb24gc2V0QWN0aXZlUGxhdGZvcm0oYmFzZVVybDogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IHN0b3JlID0gcmVhZFN0b3JlKCk7XG4gIHN0b3JlLmFjdGl2ZVBsYXRmb3JtID0gbm9ybWFsaXplQmFzZVVybChiYXNlVXJsKTtcbiAgd3JpdGVTdG9yZShzdG9yZSk7XG59XG5cbi8qKiBQZXJzaXN0IHRoZSBzZXNzaW9uIGZvciBgYmFzZVVybGAsIHJlcGxhY2luZyBhbnkgcHJldmlvdXMgb25lLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhdmVTZXNzaW9uKGJhc2VVcmw6IHN0cmluZywgc2Vzc2lvbjogT21pdDxTdG9yZWRTZXNzaW9uLCAnc2F2ZWRBdCc+KTogdm9pZCB7XG4gIGNvbnN0IHN0b3JlID0gcmVhZFN0b3JlKCk7XG4gIHN0b3JlLnNlc3Npb25zW3N0b3JlS2V5KGJhc2VVcmwpXSA9IHsgLi4uc2Vzc2lvbiwgc2F2ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpIH07XG4gIHdyaXRlU3RvcmUoc3RvcmUpO1xuICBwcmludERlYnVnKCdTZXNzaW9uIHN0b3JlZCcsIHsgcGF0aDogU1RPUkVfRklMRSwgcGxhdGZvcm06IHN0b3JlS2V5KGJhc2VVcmwpIH0pO1xufVxuXG4vKiogVGhlIHN0b3JlZCBzZXNzaW9uIGZvciBgYmFzZVVybGAsIG9yIHVuZGVmaW5lZC4gRXhwaXJ5IGlzIE5PVCBjaGVja2VkIGhlcmUg4oCUXG4gKiAgY2FsbGVycyBkZWNpZGUgd2hldGhlciB0byB1c2UsIHJlZnJlc2ggb3IgaWdub3JlIGl0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRTZXNzaW9uKGJhc2VVcmw6IHN0cmluZyk6IFN0b3JlZFNlc3Npb24gfCB1bmRlZmluZWQge1xuICByZXR1cm4gcmVhZFN0b3JlKCkuc2Vzc2lvbnNbc3RvcmVLZXkoYmFzZVVybCldO1xufVxuXG4vKipcbiAqIEZvcmdldCB0aGUgc2Vzc2lvbiBmb3IgYGJhc2VVcmxgIChzaWduLW91dCwgb3IgYSByZWZyZXNoIHRoZSBwbGF0Zm9ybVxuICogcmVqZWN0ZWQpLiBUaGUgYWN0aXZlIHBsYXRmb3JtIGlzIGtlcHQ6IGl0IGlzIHRoZSBwbGF0Zm9ybSB0aGUgcGVyc29uIGNob3NlLFxuICogc28gdGhlIG5leHQgYGF1dGggbG9naW5gICh3aG9zZSBgLS11cmxgIGRlZmF1bHRzIHRvIGl0KSBzaWducyBiYWNrIGluIHRoZXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJTZXNzaW9uKGJhc2VVcmw6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBzdG9yZSA9IHJlYWRTdG9yZSgpO1xuICBpZiAoIShzdG9yZUtleShiYXNlVXJsKSBpbiBzdG9yZS5zZXNzaW9ucykpIHJldHVybjtcbiAgZGVsZXRlIHN0b3JlLnNlc3Npb25zW3N0b3JlS2V5KGJhc2VVcmwpXTtcbiAgdHJ5IHtcbiAgICB3cml0ZVN0b3JlKHN0b3JlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBMb3NpbmcgdGhlIGFiaWxpdHkgdG8gY2xlYXIgYSBkZWFkIHNlc3Npb24gaXMgYSBudWlzYW5jZSwgbm90IGEgZmFpbHVyZS5cbiAgICBwcmludFdhcm5pbmcoJ0NvdWxkIG5vdCB1cGRhdGUgdGhlIHN0b3JlZCBjcmVkZW50aWFscycsIHtcbiAgICAgIHBhdGg6IFNUT1JFX0ZJTEUsXG4gICAgICBlcnJvcjogZXJyb3JNZXNzYWdlKGVycm9yKSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKiogVHJ1ZSB3aGVuIHRoZSBzdG9yZWQgYWNjZXNzIHRva2VuIGlzIHN0aWxsIHVzYWJsZSAod2l0aCBhIGxpdHRsZSBzbGFjaykuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTZXNzaW9uVXNhYmxlKHNlc3Npb246IFN0b3JlZFNlc3Npb24gfCB1bmRlZmluZWQpOiBzZXNzaW9uIGlzIFN0b3JlZFNlc3Npb24ge1xuICByZXR1cm4gISFzZXNzaW9uPy5hY2Nlc3NUb2tlbiAmJiBzZXNzaW9uLmV4cGlyZXNBdCAtIEVYUElSWV9TS0VXX01TID4gRGF0ZS5ub3coKTtcbn1cblxuLyoqXG4gKiBSdW4gYGZuYCBob2xkaW5nIHRoZSBtYWNoaW5lLXdpZGUgUkVGUkVTSCBMT0NLIChgfi8ucGlwZWxpbmUtbWFuYWdlci9yZWZyZXNoLmxvY2tgLFxuICogY3JlYXRlZCBleGNsdXNpdmVseSkuXG4gKlxuICogQSByZWZyZXNoIHRva2VuIGlzIHNpbmdsZS11c2U6IHR3byBDTEkgcHJvY2Vzc2VzIHJlbmV3aW5nIHRoZSBzYW1lIHN0b3JlZFxuICogc2Vzc2lvbiBhdCBvbmNlIChhIHNjcmlwdCBmYW5uaW5nIG91dCBjb21tYW5kcywgdHdvIHRlcm1pbmFscykgd291bGQgcHJlc2VudFxuICogdGhlIHNhbWUgdG9rZW4gdHdpY2UsIGFuZCBvdXRzaWRlIHRoZSBwbGF0Zm9ybSdzIHNob3J0IHJvdGF0aW9uIGdyYWNlIHRoZVxuICogc2Vjb25kIHVzZSByZWFkcyBhcyBSRVVTRSDigJQgd2hpY2ggcmV2b2tlcyB0aGUgc2Vzc2lvbi4gU2VyaWFsaXppbmcgdGhlIHJlZnJlc2hcbiAqIG1lYW5zIHRoZSBzZWNvbmQgcHJvY2VzcyB3YWl0cywgdGhlbiAocmUtcmVhZGluZyB0aGUgc3RvcmUpIGZpbmRzIHRoZSBwYWlyIHRoZVxuICogZmlyc3Qgb25lIGFscmVhZHkgc2F2ZWQgaW5zdGVhZCBvZiBzcGVuZGluZyB0aGUgb2xkIHRva2VuIGFnYWluLlxuICpcbiAqIEEgbG9jayBsZWZ0IGJlaGluZCBieSBhIGNyYXNoZWQgcHJvY2VzcyBpcyBicm9rZW4gYWZ0ZXJcbiAqIHtAbGluayBSRUZSRVNIX0xPQ0tfU1RBTEVfTVN9OyB3YWl0aW5nIGdpdmVzIHVwIGFmdGVyIHtAbGluayBSRUZSRVNIX0xPQ0tfV0FJVF9NU31cbiAqIGFuZCBydW5zIGBmbmAgYW55d2F5ICh0aGUgcGxhdGZvcm0gZ3JhY2Ugc3RpbGwgY292ZXJzIGEgbmVhci1zaW11bHRhbmVvdXMgdXNlKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhSZWZyZXNoTG9jazxUPihmbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICBmcy5ta2RpclN5bmMoU1RPUkVfRElSLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgbW9kZTogMG83MDAgfSk7XG4gIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIFJFRlJFU0hfTE9DS19XQUlUX01TO1xuICBsZXQgaGVsZCA9IGZhbHNlO1xuICB3aGlsZSAoIWhlbGQpIHtcbiAgICB0cnkge1xuICAgICAgZnMuY2xvc2VTeW5jKGZzLm9wZW5TeW5jKFJFRlJFU0hfTE9DS19GSUxFLCAnd3gnLCAwbzYwMCkpO1xuICAgICAgaGVsZCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICgoZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlICE9PSAnRUVYSVNUJykgYnJlYWs7IC8vIGNhbid0IGxvY2sgYXQgYWxsIOKAlCBwcm9jZWVkIHVubG9ja2VkXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoRGF0ZS5ub3coKSAtIGZzLnN0YXRTeW5jKFJFRlJFU0hfTE9DS19GSUxFKS5tdGltZU1zID4gUkVGUkVTSF9MT0NLX1NUQUxFX01TKSB7XG4gICAgICAgICAgZnMucm1TeW5jKFJFRlJFU0hfTE9DS19GSUxFLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29udGludWU7IC8vIHZhbmlzaGVkIGJldHdlZW4gb3BlbiBhbmQgc3RhdCDigJQgdHJ5IGFnYWluXG4gICAgICB9XG4gICAgICBpZiAoRGF0ZS5ub3coKSA+PSBkZWFkbGluZSkgYnJlYWs7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBSRUZSRVNIX0xPQ0tfUE9MTF9NUykpO1xuICAgIH1cbiAgfVxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBmbigpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChoZWxkKSBmcy5ybVN5bmMoUkVGUkVTSF9MT0NLX0ZJTEUsIHsgZm9yY2U6IHRydWUgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -2,9 +2,18 @@ import { ERROR_CODES, type ErrorCode, type ErrorHandlerOptions } from '../types/
2
2
  export { ERROR_CODES };
3
3
  export type { ErrorCode };
4
4
  /**
5
- * Format and handle errors with colored output
5
+ * Format and handle errors with colored output: print the error (see
6
+ * {@link reportError}), then exit with its standard code — or, with
7
+ * `exit: false`, rethrow it.
6
8
  */
7
9
  export declare function handleError(err: unknown, code?: ErrorCode, options?: ErrorHandlerOptions): never;
10
+ /**
11
+ * Print an error the way {@link handleError} does and RETURN its standard exit
12
+ * code, without exiting or throwing — for commands with their own exit-code
13
+ * contract (the cron-friendly audits exit 2 on a scan failure). `handleError`
14
+ * with `exit: false` rethrows, so a `process.exit(2)` after it never ran.
15
+ */
16
+ export declare function reportError(err: unknown, code?: ErrorCode, options?: Omit<ErrorHandlerOptions, 'exit'>): ErrorCode;
8
17
  /**
9
18
  * Validation error class
10
19
  */
@@ -1 +1 @@
1
- {"version":3,"file":"error-handler.d.ts","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,WAAW,EACX,KAAK,SAAS,EACd,KAAK,mBAAmB,EAEzB,MAAM,mBAAmB,CAAC;AAK3B,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B;;GAEG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,OAAO,EACZ,IAAI,GAAE,SAA+B,EACrC,OAAO,GAAE,mBAAwB,GAChC,KAAK,CAiHP;AAID;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IAG/B,KAAK,CAAC,EAAE,MAAM;IACd,KAAK,CAAC,EAAE,OAAO;IACf,IAAI,CAAC,EAAE,MAAM;IACb,QAAQ,CAAC,EAAE,MAAM;IAL1B,YACE,OAAO,EAAE,MAAM,EACR,KAAK,CAAC,EAAE,MAAM,YAAA,EACd,KAAK,CAAC,EAAE,OAAO,EACf,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,QAAQ,CAAC,EAAE,MAAM,YAAA,EAKzB;CACF;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;IAG5B,GAAG,CAAC,EAAE,MAAM;IACZ,KAAK,CAAC,EAAE,KAAK;IACb,OAAO,CAAC,EAAE,MAAM;IAChB,WAAW,EAAE,OAAO;IACpB,gBAAgB,EAAE,OAAO;IANlC,YACE,OAAO,EAAE,MAAM,EACR,GAAG,CAAC,EAAE,MAAM,YAAA,EACZ,KAAK,CAAC,EAAE,KAAK,YAAA,EACb,OAAO,CAAC,EAAE,MAAM,YAAA,EAChB,WAAW,GAAE,OAAc,EAC3B,gBAAgB,GAAE,OAAe,EAKzC;CACF"}
1
+ {"version":3,"file":"error-handler.d.ts","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,WAAW,EACX,KAAK,SAAS,EACd,KAAK,mBAAmB,EAEzB,MAAM,mBAAmB,CAAC;AAK3B,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,OAAO,EACZ,IAAI,GAAE,SAA+B,EACrC,OAAO,GAAE,mBAAwB,GAChC,KAAK,CAOP;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,OAAO,EACZ,IAAI,GAAE,SAA+B,EACrC,OAAO,GAAE,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAM,GAC9C,SAAS,CA2GX;AAID;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IAG/B,KAAK,CAAC,EAAE,MAAM;IACd,KAAK,CAAC,EAAE,OAAO;IACf,IAAI,CAAC,EAAE,MAAM;IACb,QAAQ,CAAC,EAAE,MAAM;IAL1B,YACE,OAAO,EAAE,MAAM,EACR,KAAK,CAAC,EAAE,MAAM,YAAA,EACd,KAAK,CAAC,EAAE,OAAO,EACf,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,QAAQ,CAAC,EAAE,MAAM,YAAA,EAKzB;CACF;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;IAG5B,GAAG,CAAC,EAAE,MAAM;IACZ,KAAK,CAAC,EAAE,KAAK;IACb,OAAO,CAAC,EAAE,MAAM;IAChB,WAAW,EAAE,OAAO;IACpB,gBAAgB,EAAE,OAAO;IANlC,YACE,OAAO,EAAE,MAAM,EACR,GAAG,CAAC,EAAE,MAAM,YAAA,EACZ,KAAK,CAAC,EAAE,KAAK,YAAA,EACb,OAAO,CAAC,EAAE,MAAM,YAAA,EAChB,WAAW,GAAE,OAAc,EAC3B,gBAAgB,GAAE,OAAe,EAKzC;CACF"}
@@ -8,10 +8,26 @@ const { bold, dim, red, yellow, cyan } = pico;
8
8
  // Re-export for convenience
9
9
  export { ERROR_CODES };
10
10
  /**
11
- * Format and handle errors with colored output
11
+ * Format and handle errors with colored output: print the error (see
12
+ * {@link reportError}), then exit with its standard code — or, with
13
+ * `exit: false`, rethrow it.
12
14
  */
13
15
  export function handleError(err, code = ERROR_CODES.GENERAL, options = {}) {
14
- const { debug = false, exit = true, logToConsole = true, context, correlationId = generateExecutionId(), } = options;
16
+ const resolvedCode = reportError(err, code, options);
17
+ if (options.exit ?? true) {
18
+ process.exitCode = resolvedCode;
19
+ process.exit(resolvedCode);
20
+ }
21
+ throw err;
22
+ }
23
+ /**
24
+ * Print an error the way {@link handleError} does and RETURN its standard exit
25
+ * code, without exiting or throwing — for commands with their own exit-code
26
+ * contract (the cron-friendly audits exit 2 on a scan failure). `handleError`
27
+ * with `exit: false` rethrows, so a `process.exit(2)` after it never ran.
28
+ */
29
+ export function reportError(err, code = ERROR_CODES.GENERAL, options = {}) {
30
+ const { debug = false, logToConsole = true, context, correlationId = generateExecutionId(), } = options;
15
31
  // Derive the canonical exit code from the ACTUAL error (see resolveExitCode),
16
32
  // falling back to the caller's `code` for anything unclassifiable. This is what
17
33
  // makes every command emit the SAME exit code for the same class of failure,
@@ -103,11 +119,7 @@ export function handleError(err, code = ERROR_CODES.GENERAL, options = {}) {
103
119
  }
104
120
  console.error('');
105
121
  }
106
- if (exit) {
107
- process.exitCode = resolvedCode;
108
- process.exit(resolvedCode);
109
- }
110
- throw err;
122
+ return resolvedCode;
111
123
  }
112
124
  // --- Error classes (only those actually used) ---
113
125
  /**
@@ -310,4 +322,4 @@ function isAxiosError(err) {
310
322
  'isAxiosError' in err &&
311
323
  err.isAxiosError === true);
312
324
  }
313
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItaGFuZGxlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2Vycm9yLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLElBQUksTUFBTSxZQUFZLENBQUM7QUFDOUIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDakUsT0FBTyxFQUNMLFdBQVcsR0FJWixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBRTlDLDRCQUE0QjtBQUM1QixPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUM7QUFHdkI7O0dBRUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUN6QixHQUFZLEVBQ1osSUFBSSxHQUFjLFdBQVcsQ0FBQyxPQUFPLEVBQ3JDLE9BQU8sR0FBd0IsRUFBRTtJQUVqQyxNQUFNLEVBQ0osS0FBSyxHQUFHLEtBQUssRUFDYixJQUFJLEdBQUcsSUFBSSxFQUNYLFlBQVksR0FBRyxJQUFJLEVBQ25CLE9BQU8sRUFDUCxhQUFhLEdBQUcsbUJBQW1CLEVBQUUsR0FDdEMsR0FBRyxPQUFPLENBQUM7SUFFWiw4RUFBOEU7SUFDOUUsZ0ZBQWdGO0lBQ2hGLDZFQUE2RTtJQUM3RSwrRUFBK0U7SUFDL0UsOEJBQThCO0lBQzlCLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFaEQsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sT0FBTyxHQUFHLE9BQU8sYUFBYSxFQUFFLENBQUM7UUFFdkMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLE9BQU8sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDekUsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUU1QixJQUFJLEdBQUcsWUFBWSxLQUFLLEVBQUUsQ0FBQztZQUN6QixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFbEQsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUN6QixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsQ0FBQztZQUVELGdDQUFnQztZQUNoQyxJQUFJLEdBQUcsWUFBWSxlQUFlLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxHQUFHLENBQUMsS0FBSztvQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZELElBQUksR0FBRyxDQUFDLEtBQUssS0FBSyxTQUFTO29CQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDcEYsSUFBSSxHQUFHLENBQUMsSUFBSTtvQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BELElBQUksR0FBRyxDQUFDLFFBQVE7b0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xFLENBQUM7WUFFRCw2QkFBNkI7WUFDN0IsSUFBSSxHQUFHLFlBQVksWUFBWSxFQUFFLENBQUM7Z0JBQ2hDLElBQUksR0FBRyxDQUFDLEdBQUc7b0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUM5RCxJQUFJLEdBQUcsQ0FBQyxPQUFPO29CQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7Z0JBQ3BFLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BFLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM5RSxJQUFJLEdBQUcsQ0FBQyxLQUFLO29CQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckUsQ0FBQztZQUVELDJCQUEyQjtZQUMzQixJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN0QixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztnQkFDcEMsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7Z0JBQzVCLElBQUksTUFBTSxFQUFFLENBQUM7b0JBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQ3RDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLENBQUM7Z0JBQ0QsSUFBSSxHQUFHO29CQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7b0JBQ3ZCLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7b0JBQ2hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzRCxDQUFDO1lBQ0gsQ0FBQztZQUVELHVFQUF1RTtZQUN2RSxJQUFJLFFBQVEsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNsQyxNQUFNLE1BQU0sR0FBSSxHQUFHLENBQUMsTUFBMEIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDakUsSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO29CQUNsQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUM3QixDQUFDO1lBQ0gsQ0FBQztZQUVELE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDNUQsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFFOUMsSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQy9DLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2xCLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQy9CLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtvQkFDL0MsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5RCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxJQUFJLEtBQUssSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2xCLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25DLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEQsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUM1RCxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBRUQsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUU1QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsK0NBQStDLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDekQsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUVELE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksSUFBSSxFQUFFLENBQUM7UUFDVCxPQUFPLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQztRQUNoQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxNQUFNLEdBQUcsQ0FBQztBQUNaLENBQUM7QUFFRCxtREFBbUQ7QUFFbkQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxLQUFLO0lBRy9CLEtBQUs7SUFDTCxLQUFLO0lBQ0wsSUFBSTtJQUNKLFFBQVE7SUFMakIsWUFDRSxPQUFlLEVBQ1IsS0FBYyxFQUNkLEtBQWUsRUFDZixJQUFhLEVBQ2IsUUFBaUI7UUFFeEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO3FCQUxSLEtBQUs7cUJBQ0wsS0FBSztvQkFDTCxJQUFJO3dCQUNKLFFBQVE7UUFHZixJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO1FBQzlCLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFlBQWEsU0FBUSxLQUFLO0lBRzVCLEdBQUc7SUFDSCxLQUFLO0lBQ0wsT0FBTztJQUNQLFdBQVc7SUFDWCxnQkFBZ0I7SUFOekIsWUFDRSxPQUFlLEVBQ1IsR0FBWSxFQUNaLEtBQWEsRUFDYixPQUFnQixFQUNoQixXQUFXLEdBQVksSUFBSSxFQUMzQixnQkFBZ0IsR0FBWSxLQUFLO1FBRXhDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQzttQkFOUixHQUFHO3FCQUNILEtBQUs7dUJBQ0wsT0FBTzsyQkFDUCxXQUFXO2dDQUNYLGdCQUFnQjtRQUd2QixJQUFJLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQztRQUMzQixLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0NBQ0Y7QUFFRCwwQkFBMEI7QUFFMUI7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxlQUFlLENBQUMsR0FBWSxFQUFFLFFBQW1CO0lBQ3hELElBQUksR0FBRyxZQUFZLGVBQWU7UUFBRSxPQUFPLFdBQVcsQ0FBQyxVQUFVLENBQUM7SUFDbEUsSUFBSSxHQUFHLFlBQVksWUFBWTtRQUFFLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztJQUVoRyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO1FBQ3BDLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLEtBQUssR0FBRztZQUFFLE9BQU8sV0FBVyxDQUFDLFVBQVUsQ0FBQztRQUNwRSxJQUFJLE1BQU0sS0FBSyxHQUFHO1lBQUUsT0FBTyxXQUFXLENBQUMsY0FBYyxDQUFDO1FBQ3RELElBQUksTUFBTSxLQUFLLEdBQUc7WUFBRSxPQUFPLFdBQVcsQ0FBQyxhQUFhLENBQUM7UUFDckQsSUFBSSxNQUFNLEtBQUssR0FBRztZQUFFLE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUNqRCxJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxLQUFLLEdBQUc7WUFBRSxPQUFPLFdBQVcsQ0FBQyxPQUFPLENBQUM7UUFDakUsd0VBQXdFO1FBQ3hFLHdFQUF3RTtRQUN4RSxJQUFJLE1BQU0sS0FBSyxHQUFHO1lBQUUsT0FBTyxXQUFXLENBQUMsYUFBYSxDQUFDO1FBQ3JELElBQUksTUFBTSxJQUFJLE1BQU0sSUFBSSxHQUFHO1lBQUUsT0FBTyxXQUFXLENBQUMsV0FBVyxDQUFDO1FBQzVELDhFQUE4RTtRQUM5RSxrRUFBa0U7UUFDbEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRO1lBQUUsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDO1FBQzlDLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCwyREFBMkQ7SUFDM0QsTUFBTSxPQUFPLEdBQUksR0FBaUMsRUFBRSxJQUFJLENBQUM7SUFDekQsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3ZHLE9BQU8sV0FBVyxDQUFDLFdBQVcsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsSUFBSSxPQUFPLEtBQUssV0FBVztZQUFFLE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUN4RCxJQUFJLENBQUMsY0FBYyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDdkgsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsSUFBZTtJQUN2QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDL0UsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsTUFBYztJQUN2QyxNQUFNLFdBQVcsR0FBMkI7UUFDMUMsR0FBRyxFQUFFLGFBQWE7UUFDbEIsR0FBRyxFQUFFLGNBQWM7UUFDbkIsR0FBRyxFQUFFLFdBQVc7UUFDaEIsR0FBRyxFQUFFLFdBQVc7UUFDaEIsR0FBRyxFQUFFLGlCQUFpQjtRQUN0QixHQUFHLEVBQUUsVUFBVTtRQUNmLEdBQUcsRUFBRSxzQkFBc0I7UUFDM0IsR0FBRyxFQUFFLG1CQUFtQjtRQUN4QixHQUFHLEVBQUUsdUJBQXVCO1FBQzVCLEdBQUcsRUFBRSxhQUFhO1FBQ2xCLEdBQUcsRUFBRSxxQkFBcUI7UUFDMUIsR0FBRyxFQUFFLGlCQUFpQjtLQUN2QixDQUFDO0lBQ0YsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDO0FBQzFDLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLEdBQVksRUFBRSxJQUFlO0lBQ3ZELElBQUksSUFBSSxLQUFLLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QyxPQUFPLGlFQUFpRSxDQUFDO0lBQzNFLENBQUM7SUFDRCxJQUFJLElBQUksS0FBSyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDakMsT0FBTyxxREFBcUQsQ0FBQztJQUMvRCxDQUFDO0lBQ0QsSUFBSSxJQUFJLEtBQUssV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sMERBQTBELENBQUM7SUFDcEUsQ0FBQztJQUNELElBQUksSUFBSSxLQUFLLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQyxPQUFPLHlEQUF5RCxDQUFDO0lBQ25FLENBQUM7SUFDRCxJQUFJLEdBQUcsWUFBWSxLQUFLLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN4RCxPQUFPLHlGQUF5RixDQUFDO0lBQ25HLENBQUM7SUFDRCxJQUFJLEdBQUcsWUFBWSxlQUFlLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hELE9BQU8saUNBQWlDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQztJQUN2RCxDQUFDO0lBQ0QsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN0QixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztRQUNwQyxJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxLQUFLLEdBQUc7WUFBRSxPQUFPLGlEQUFpRCxDQUFDO1FBQy9GLDZFQUE2RTtRQUM3RSwwRUFBMEU7UUFDMUUsY0FBYztRQUNkLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDOUQsT0FBTywyRkFBMkYsQ0FBQztRQUNyRyxDQUFDO1FBQ0QsSUFBSSxNQUFNLEtBQUssR0FBRztZQUFFLE9BQU8scURBQXFELENBQUM7UUFDakYsSUFBSSxNQUFNLElBQUksTUFBTSxJQUFJLEdBQUc7WUFBRSxPQUFPLG1EQUFtRCxDQUFDO0lBQzFGLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLElBQWE7SUFDdEMsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDMUMsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQzlDLE1BQU0sU0FBUyxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQTZCLENBQUM7UUFDekQsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3hHLElBQUksS0FBSyxJQUFJLFNBQVM7Z0JBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLFlBQVksQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0QixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsR0FBVztJQUM5QixJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDL0QsSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7Z0JBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ25GLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxLQUFjO0lBQ25DLElBQUksS0FBSyxLQUFLLElBQUk7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUNsQyxJQUFJLEtBQUssS0FBSyxTQUFTO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFDNUMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNELE9BQU8sR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDO1FBQ2pELENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNyRSxDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDL0QsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsS0FBYTtJQUN2QyxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRyxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsR0FBWTtJQUNoQyxPQUFPLENBQ0wsT0FBTyxHQUFHLEtBQUssUUFBUTtRQUN2QixHQUFHLEtBQUssSUFBSTtRQUNaLGNBQWMsSUFBSSxHQUFHO1FBQ3BCLEdBQStCLENBQUMsWUFBWSxLQUFLLElBQUksQ0FDdkQsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgaXNRdW90YUV4Y2VlZGVkQm9keSB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUnO1xuaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyBnZW5lcmF0ZUV4ZWN1dGlvbklkIH0gZnJvbSAnLi4vY29uZmlnL2NsaS5jb25zdGFudHMuanMnO1xuaW1wb3J0IHtcbiAgRVJST1JfQ09ERVMsXG4gIHR5cGUgRXJyb3JDb2RlLFxuICB0eXBlIEVycm9ySGFuZGxlck9wdGlvbnMsXG4gIHR5cGUgQXhpb3NFcnJvckxpa2UsXG59IGZyb20gJy4uL3R5cGVzL2luZGV4LmpzJztcblxuY29uc3QgeyBib2xkLCBkaW0sIHJlZCwgeWVsbG93LCBjeWFuIH0gPSBwaWNvO1xuXG4vLyBSZS1leHBvcnQgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgeyBFUlJPUl9DT0RFUyB9O1xuZXhwb3J0IHR5cGUgeyBFcnJvckNvZGUgfTtcblxuLyoqXG4gKiBGb3JtYXQgYW5kIGhhbmRsZSBlcnJvcnMgd2l0aCBjb2xvcmVkIG91dHB1dFxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlRXJyb3IoXG4gIGVycjogdW5rbm93bixcbiAgY29kZTogRXJyb3JDb2RlID0gRVJST1JfQ09ERVMuR0VORVJBTCxcbiAgb3B0aW9uczogRXJyb3JIYW5kbGVyT3B0aW9ucyA9IHt9LFxuKTogbmV2ZXIge1xuICBjb25zdCB7XG4gICAgZGVidWcgPSBmYWxzZSxcbiAgICBleGl0ID0gdHJ1ZSxcbiAgICBsb2dUb0NvbnNvbGUgPSB0cnVlLFxuICAgIGNvbnRleHQsXG4gICAgY29ycmVsYXRpb25JZCA9IGdlbmVyYXRlRXhlY3V0aW9uSWQoKSxcbiAgfSA9IG9wdGlvbnM7XG5cbiAgLy8gRGVyaXZlIHRoZSBjYW5vbmljYWwgZXhpdCBjb2RlIGZyb20gdGhlIEFDVFVBTCBlcnJvciAoc2VlIHJlc29sdmVFeGl0Q29kZSksXG4gIC8vIGZhbGxpbmcgYmFjayB0byB0aGUgY2FsbGVyJ3MgYGNvZGVgIGZvciBhbnl0aGluZyB1bmNsYXNzaWZpYWJsZS4gVGhpcyBpcyB3aGF0XG4gIC8vIG1ha2VzIGV2ZXJ5IGNvbW1hbmQgZW1pdCB0aGUgU0FNRSBleGl0IGNvZGUgZm9yIHRoZSBzYW1lIGNsYXNzIG9mIGZhaWx1cmUsXG4gIC8vIHJhdGhlciB0aGFuIGEgYmxhbmtldCBBUElfUkVRVUVTVC9HRU5FUkFMLiBVc2VkIGZvciBkaXNwbGF5LCB0aGUgc3VnZ2VzdGlvbixcbiAgLy8gYW5kIHRoZSBwcm9jZXNzIGV4aXQgYmVsb3cuXG4gIGNvbnN0IHJlc29sdmVkQ29kZSA9IHJlc29sdmVFeGl0Q29kZShlcnIsIGNvZGUpO1xuXG4gIGlmIChsb2dUb0NvbnNvbGUpIHtcbiAgICBjb25zdCBkaXZpZGVyID0gJ+KUgCcucmVwZWF0KHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgfHwgODApO1xuICAgIGNvbnN0IGVycm9ySWQgPSBgRVJSLSR7Y29ycmVsYXRpb25JZH1gO1xuXG4gICAgY29uc29sZS5lcnJvcignXFxuJyArIHJlZChib2xkKCfinJcgRVJST1InKSkgKyBkaW0oYCBbJHtlcnJvcklkfV1gKSArICdcXG4nKTtcbiAgICBjb25zb2xlLmVycm9yKGRpbShkaXZpZGVyKSk7XG5cbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IocmVkKGJvbGQoJ01lc3NhZ2U6JykpLCBlcnIubWVzc2FnZSk7XG5cbiAgICAgIGlmIChlcnIubmFtZSAhPT0gJ0Vycm9yJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKHJlZCgnVHlwZTonKSwgZXJyLm5hbWUpO1xuICAgICAgfVxuXG4gICAgICAvLyBTaG93IFZhbGlkYXRpb24gZXJyb3IgZGV0YWlsc1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFZhbGlkYXRpb25FcnJvcikge1xuICAgICAgICBpZiAoZXJyLmZpZWxkKSBjb25zb2xlLmVycm9yKHJlZCgnRmllbGQ6JyksIGVyci5maWVsZCk7XG4gICAgICAgIGlmIChlcnIudmFsdWUgIT09IHVuZGVmaW5lZCkgY29uc29sZS5lcnJvcihyZWQoJ1ZhbHVlOicpLCBzYW5pdGl6ZVZhbHVlKGVyci52YWx1ZSkpO1xuICAgICAgICBpZiAoZXJyLnJ1bGUpIGNvbnNvbGUuZXJyb3IocmVkKCdSdWxlOicpLCBlcnIucnVsZSk7XG4gICAgICAgIGlmIChlcnIuZXhwZWN0ZWQpIGNvbnNvbGUuZXJyb3IocmVkKCdFeHBlY3RlZDonKSwgZXJyLmV4cGVjdGVkKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2hvdyBOZXR3b3JrIGVycm9yIGRldGFpbHNcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBOZXR3b3JrRXJyb3IpIHtcbiAgICAgICAgaWYgKGVyci51cmwpIGNvbnNvbGUuZXJyb3IocmVkKCdVUkw6JyksIHNhbml0aXplVXJsKGVyci51cmwpKTtcbiAgICAgICAgaWYgKGVyci50aW1lb3V0KSBjb25zb2xlLmVycm9yKHJlZCgnVGltZW91dDonKSwgYCR7ZXJyLnRpbWVvdXR9bXNgKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihyZWQoJ1JlcXVlc3QgTWFkZTonKSwgZXJyLnJlcXVlc3RNYWRlID8gJ1llcycgOiAnTm8nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihyZWQoJ1Jlc3BvbnNlIFJlY2VpdmVkOicpLCBlcnIucmVzcG9uc2VSZWNlaXZlZCA/ICdZZXMnIDogJ05vJyk7XG4gICAgICAgIGlmIChlcnIuY2F1c2UpIGNvbnNvbGUuZXJyb3IocmVkKCdDYXVzZWQgYnk6JyksIGVyci5jYXVzZS5tZXNzYWdlKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2hvdyBBeGlvcyBlcnJvciBkZXRhaWxzXG4gICAgICBpZiAoaXNBeGlvc0Vycm9yKGVycikpIHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gZXJyLnJlc3BvbnNlPy5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHVybCA9IGVyci5jb25maWc/LnVybDtcbiAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVkKCdTdGF0dXM6JyksIHN0YXR1cyk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihyZWQoJ1N0YXR1cyBUZXh0OicpLCBnZXRIdHRwU3RhdHVzVGV4dChzdGF0dXMpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXJsKSBjb25zb2xlLmVycm9yKHJlZCgnVVJMOicpLCBzYW5pdGl6ZVVybCh1cmwpKTtcbiAgICAgICAgaWYgKGVyci5yZXNwb25zZT8uZGF0YSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVkKCdSZXNwb25zZTonKSk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihkaW0oc2FuaXRpemVFcnJvckRhdGEoZXJyLnJlc3BvbnNlLmRhdGEpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU2hvdyBDREsvZXhlY1N5bmMgZXJyb3IgZGV0YWlscyAoc3RkZXJyIGNhcHR1cmVkIGZyb20gY2hpbGQgcHJvY2VzcylcbiAgICAgIGlmICgnc3RkZXJyJyBpbiBlcnIgJiYgZXJyLnN0ZGVycikge1xuICAgICAgICBjb25zdCBzdGRlcnIgPSAoZXJyLnN0ZGVyciBhcyBCdWZmZXIgfCBzdHJpbmcpLnRvU3RyaW5nKCkudHJpbSgpO1xuICAgICAgICBpZiAoc3RkZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihyZWQoJ0NESyBPdXRwdXQ6JykpO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZGltKHN0ZGVycikpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUuZXJyb3IocmVkKCdDb2RlOicpLCBnZXRFcnJvckNvZGVOYW1lKHJlc29sdmVkQ29kZSkpO1xuICAgICAgY29uc29sZS5lcnJvcihkaW0oJ0Vycm9yIElEOicpLCBkaW0oZXJyb3JJZCkpO1xuXG4gICAgICBpZiAoY29udGV4dCAmJiBPYmplY3Qua2V5cyhjb250ZXh0KS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJycpO1xuICAgICAgICBjb25zb2xlLmVycm9yKHJlZCgnQ29udGV4dDonKSk7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGNvbnRleHQpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCAgJHtjeWFuKGtleSl9OmAsIGRpbShzYW5pdGl6ZVZhbHVlKHZhbHVlKSkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlYnVnICYmIGVyci5zdGFjaykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCcnKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihkaW0oJ1N0YWNrIHRyYWNlOicpKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihkaW0oc2FuaXRpemVTdGFja1RyYWNlKGVyci5zdGFjaykpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihyZWQoJ0Vycm9yOicpLCBTdHJpbmcoZXJyKSk7XG4gICAgICBjb25zb2xlLmVycm9yKHJlZCgnQ29kZTonKSwgZ2V0RXJyb3JDb2RlTmFtZShyZXNvbHZlZENvZGUpKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZGltKCdFcnJvciBJRDonKSwgZGltKGVycm9ySWQpKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKGRpbShkaXZpZGVyKSk7XG5cbiAgICBpZiAoIWRlYnVnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKHllbGxvdygn8J+SoSBUaXA6JyksIGRpbSgnUnVuIHdpdGggLS1kZWJ1ZyBmbGFnIHRvIHNlZSBmdWxsIHN0YWNrIHRyYWNlJykpO1xuICAgIH1cblxuICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBnZXRFcnJvclN1Z2dlc3Rpb24oZXJyLCByZXNvbHZlZENvZGUpO1xuICAgIGlmIChzdWdnZXN0aW9uKSB7XG4gICAgICBjb25zb2xlLmVycm9yKHllbGxvdygn8J+SoSBTdWdnZXN0aW9uOicpLCBkaW0oc3VnZ2VzdGlvbikpO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoJycpO1xuICB9XG5cbiAgaWYgKGV4aXQpIHtcbiAgICBwcm9jZXNzLmV4aXRDb2RlID0gcmVzb2x2ZWRDb2RlO1xuICAgIHByb2Nlc3MuZXhpdChyZXNvbHZlZENvZGUpO1xuICB9XG5cbiAgdGhyb3cgZXJyO1xufVxuXG4vLyAtLS0gRXJyb3IgY2xhc3NlcyAob25seSB0aG9zZSBhY3R1YWxseSB1c2VkKSAtLS1cblxuLyoqXG4gKiBWYWxpZGF0aW9uIGVycm9yIGNsYXNzXG4gKi9cbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBwdWJsaWMgZmllbGQ/OiBzdHJpbmcsXG4gICAgcHVibGljIHZhbHVlPzogdW5rbm93bixcbiAgICBwdWJsaWMgcnVsZT86IHN0cmluZyxcbiAgICBwdWJsaWMgZXhwZWN0ZWQ/OiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdWYWxpZGF0aW9uRXJyb3InO1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9XG59XG5cbi8qKlxuICogTmV0d29yayBlcnJvciBjbGFzc1xuICovXG5leHBvcnQgY2xhc3MgTmV0d29ya0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgcHVibGljIHVybD86IHN0cmluZyxcbiAgICBwdWJsaWMgY2F1c2U/OiBFcnJvcixcbiAgICBwdWJsaWMgdGltZW91dD86IG51bWJlcixcbiAgICBwdWJsaWMgcmVxdWVzdE1hZGU6IGJvb2xlYW4gPSB0cnVlLFxuICAgIHB1YmxpYyByZXNwb25zZVJlY2VpdmVkOiBib29sZWFuID0gZmFsc2UsXG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdOZXR3b3JrRXJyb3InO1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9XG59XG5cbi8vIC0tLSBQcml2YXRlIGhlbHBlcnMgLS0tXG5cbi8qKlxuICogTWFwIHRoZSBBQ1RVQUwgZXJyb3IgdG8gYSBjYW5vbmljYWwgZXhpdCBjb2RlIHNvIGV2ZXJ5IGNvbW1hbmQgZXhpdHMgd2l0aCB0aGVcbiAqIFNBTUUgY29kZSBmb3IgdGhlIHNhbWUgY2xhc3Mgb2YgZmFpbHVyZS4gVGhlIGNhbGxlci1zdXBwbGllZCBgZmFsbGJhY2tgIChlLmcuXG4gKiBBUElfUkVRVUVTVCkgaXMgdXNlZCBvbmx5IGZvciBlcnJvcnMgdGhpcyBjYW4ndCBjbGFzc2lmeS4gQ29kZXMgKHNyYy90eXBlcy9lcnJvci50cyk6XG4gKlxuICogICAxIEdFTkVSQUwgwrcgMiBWQUxJREFUSU9OIMK3IDMgQVBJX1JFUVVFU1QgwrcgNCBBVVRIRU5USUNBVElPTiDCtyA1IEFVVEhPUklaQVRJT05cbiAqICAgNiBOT1RfRk9VTkQgwrcgNyBORVRXT1JLIMK3IDggQ09ORklHVVJBVElPTiDCtyA5IEZJTEVfU1lTVEVNIMK3IDEwIFRJTUVPVVRcbiAqXG4gKiBQcmVjZWRlbmNlOiB0eXBlZCBDTEkgZXJyb3JzIOKGkiBIVFRQIHN0YXR1cyDihpIgTm9kZSBzeXN0ZW0gZXJyb3IgYGNvZGVgIOKGkiBmYWxsYmFjay5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUV4aXRDb2RlKGVycjogdW5rbm93biwgZmFsbGJhY2s6IEVycm9yQ29kZSk6IEVycm9yQ29kZSB7XG4gIGlmIChlcnIgaW5zdGFuY2VvZiBWYWxpZGF0aW9uRXJyb3IpIHJldHVybiBFUlJPUl9DT0RFUy5WQUxJREFUSU9OO1xuICBpZiAoZXJyIGluc3RhbmNlb2YgTmV0d29ya0Vycm9yKSByZXR1cm4gZXJyLnRpbWVvdXQgPyBFUlJPUl9DT0RFUy5USU1FT1VUIDogRVJST1JfQ09ERVMuTkVUV09SSztcblxuICBpZiAoaXNBeGlvc0Vycm9yKGVycikpIHtcbiAgICBjb25zdCBzdGF0dXMgPSBlcnIucmVzcG9uc2U/LnN0YXR1cztcbiAgICBpZiAoc3RhdHVzID09PSA0MDAgfHwgc3RhdHVzID09PSA0MjIpIHJldHVybiBFUlJPUl9DT0RFUy5WQUxJREFUSU9OO1xuICAgIGlmIChzdGF0dXMgPT09IDQwMSkgcmV0dXJuIEVSUk9SX0NPREVTLkFVVEhFTlRJQ0FUSU9OO1xuICAgIGlmIChzdGF0dXMgPT09IDQwMykgcmV0dXJuIEVSUk9SX0NPREVTLkFVVEhPUklaQVRJT047XG4gICAgaWYgKHN0YXR1cyA9PT0gNDA0KSByZXR1cm4gRVJST1JfQ09ERVMuTk9UX0ZPVU5EO1xuICAgIGlmIChzdGF0dXMgPT09IDQwOCB8fCBzdGF0dXMgPT09IDUwNCkgcmV0dXJuIEVSUk9SX0NPREVTLlRJTUVPVVQ7XG4gICAgLy8gQ0xJRU5UX1VQR1JBREVfUkVRVUlSRUQ6IHRoaXMgQ0xJIGlzIGJlbG93IHRoZSBwbGF0Zm9ybSdzIG1pbmltdW0g4oCUIGFcbiAgICAvLyBsb2NhbC1pbnN0YWxsIHByb2JsZW0gKGZpeDogLS11cGdyYWRlKSwgc28gc2NyaXB0cyBjYW4gdGVsbCBpdCBhcGFydC5cbiAgICBpZiAoc3RhdHVzID09PSA0MjYpIHJldHVybiBFUlJPUl9DT0RFUy5DT05GSUdVUkFUSU9OO1xuICAgIGlmIChzdGF0dXMgJiYgc3RhdHVzID49IDUwMCkgcmV0dXJuIEVSUk9SX0NPREVTLkFQSV9SRVFVRVNUO1xuICAgIC8vIEEgcmVxdWVzdCB0aGF0IGdvdCBubyBIVFRQIHJlc3BvbnNlIG5ldmVyIHJlYWNoZWQgdGhlIHNlcnZlciAoRE5TIC8gcmVmdXNlZFxuICAgIC8vIC8gcmVzZXQpIOKAlCB0aGF0J3MgYSBuZXR3b3JrIGZhaWx1cmUsIG5vdCBhbiBBUEktcmVzcG9uc2UgZXJyb3IuXG4gICAgaWYgKCFlcnIucmVzcG9uc2UpIHJldHVybiBFUlJPUl9DT0RFUy5ORVRXT1JLO1xuICAgIHJldHVybiBmYWxsYmFjaztcbiAgfVxuXG4gIC8vIE5vZGUgc3lzdGVtIGVycm9ycyAoZnMgKyBzb2NrZXRzKSBjYXJyeSBhIHN0cmluZyBgY29kZWAuXG4gIGNvbnN0IHN5c0NvZGUgPSAoZXJyIGFzIHsgY29kZT86IHVua25vd24gfSB8IG51bGwpPy5jb2RlO1xuICBpZiAodHlwZW9mIHN5c0NvZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKFsnRU5PRU5UJywgJ0VBQ0NFUycsICdFSVNESVInLCAnRU5PVERJUicsICdFRVhJU1QnLCAnRVBFUk0nLCAnRU5PU1BDJywgJ0VNRklMRSddLmluY2x1ZGVzKHN5c0NvZGUpKSB7XG4gICAgICByZXR1cm4gRVJST1JfQ09ERVMuRklMRV9TWVNURU07XG4gICAgfVxuICAgIGlmIChzeXNDb2RlID09PSAnRVRJTUVET1VUJykgcmV0dXJuIEVSUk9SX0NPREVTLlRJTUVPVVQ7XG4gICAgaWYgKFsnRUNPTk5SRUZVU0VEJywgJ0VOT1RGT1VORCcsICdFQ09OTlJFU0VUJywgJ0VIT1NUVU5SRUFDSCcsICdFTkVUVU5SRUFDSCcsICdFQUlfQUdBSU4nLCAnRVBJUEUnXS5pbmNsdWRlcyhzeXNDb2RlKSkge1xuICAgICAgcmV0dXJuIEVSUk9SX0NPREVTLk5FVFdPUks7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbGxiYWNrO1xufVxuXG5mdW5jdGlvbiBnZXRFcnJvckNvZGVOYW1lKGNvZGU6IEVycm9yQ29kZSk6IHN0cmluZyB7XG4gIGNvbnN0IGVudHJ5ID0gT2JqZWN0LmVudHJpZXMoRVJST1JfQ09ERVMpLmZpbmQoKFtfLCB2YWx1ZV0pID0+IHZhbHVlID09PSBjb2RlKTtcbiAgcmV0dXJuIGVudHJ5ID8gYCR7ZW50cnlbMF19ICgke2NvZGV9KWAgOiBTdHJpbmcoY29kZSk7XG59XG5cbmZ1bmN0aW9uIGdldEh0dHBTdGF0dXNUZXh0KHN0YXR1czogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RhdHVzVGV4dHM6IFJlY29yZDxudW1iZXIsIHN0cmluZz4gPSB7XG4gICAgNDAwOiAnQmFkIFJlcXVlc3QnLFxuICAgIDQwMTogJ1VuYXV0aG9yaXplZCcsXG4gICAgNDAzOiAnRm9yYmlkZGVuJyxcbiAgICA0MDQ6ICdOb3QgRm91bmQnLFxuICAgIDQwODogJ1JlcXVlc3QgVGltZW91dCcsXG4gICAgNDA5OiAnQ29uZmxpY3QnLFxuICAgIDQyMjogJ1VucHJvY2Vzc2FibGUgRW50aXR5JyxcbiAgICA0Mjk6ICdUb28gTWFueSBSZXF1ZXN0cycsXG4gICAgNTAwOiAnSW50ZXJuYWwgU2VydmVyIEVycm9yJyxcbiAgICA1MDI6ICdCYWQgR2F0ZXdheScsXG4gICAgNTAzOiAnU2VydmljZSBVbmF2YWlsYWJsZScsXG4gICAgNTA0OiAnR2F0ZXdheSBUaW1lb3V0JyxcbiAgfTtcbiAgcmV0dXJuIHN0YXR1c1RleHRzW3N0YXR1c10gfHwgJ1Vua25vd24nO1xufVxuXG5mdW5jdGlvbiBnZXRFcnJvclN1Z2dlc3Rpb24oZXJyOiB1bmtub3duLCBjb2RlOiBFcnJvckNvZGUpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKGNvZGUgPT09IEVSUk9SX0NPREVTLkFVVEhFTlRJQ0FUSU9OKSB7XG4gICAgcmV0dXJuICdDaGVjayB0aGF0IFBMQVRGT1JNX1RPS0VOIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCBjb3JyZWN0bHknO1xuICB9XG4gIGlmIChjb2RlID09PSBFUlJPUl9DT0RFUy5ORVRXT1JLKSB7XG4gICAgcmV0dXJuICdDaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24gYW5kIEFQSSBlbmRwb2ludCBVUkwnO1xuICB9XG4gIGlmIChjb2RlID09PSBFUlJPUl9DT0RFUy5DT05GSUdVUkFUSU9OKSB7XG4gICAgcmV0dXJuICdSdW4gXCJjbGkgdmVyc2lvbiAtLWNoZWNrLWNvbmZpZ1wiIHRvIHZlcmlmeSBjb25maWd1cmF0aW9uJztcbiAgfVxuICBpZiAoY29kZSA9PT0gRVJST1JfQ09ERVMuTk9UX0ZPVU5EKSB7XG4gICAgcmV0dXJuICdWZXJpZnkgdGhlIHJlc291cmNlIElEIGV4aXN0cyBhbmQgeW91IGhhdmUgYWNjZXNzIHRvIGl0JztcbiAgfVxuICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ2NkaycpKSB7XG4gICAgcmV0dXJuICdDaGVjayB0aGUgQ0RLIG91dHB1dCBhYm92ZSBmb3IgQ2xvdWRGb3JtYXRpb24gZXJyb3JzLiBSdW4gd2l0aCAtLWRlYnVnIGZvciBmdWxsIGRldGFpbHMnO1xuICB9XG4gIGlmIChlcnIgaW5zdGFuY2VvZiBWYWxpZGF0aW9uRXJyb3IgJiYgZXJyLmZpZWxkKSB7XG4gICAgcmV0dXJuIGBDaGVjayB0aGUgdmFsdWUgcHJvdmlkZWQgZm9yIFwiJHtlcnIuZmllbGR9XCJgO1xuICB9XG4gIGlmIChpc0F4aW9zRXJyb3IoZXJyKSkge1xuICAgIGNvbnN0IHN0YXR1cyA9IGVyci5yZXNwb25zZT8uc3RhdHVzO1xuICAgIGlmIChzdGF0dXMgPT09IDQwMSB8fCBzdGF0dXMgPT09IDQwMykgcmV0dXJuICdDaGVjayB5b3VyIGF1dGhlbnRpY2F0aW9uIHRva2VuIGFuZCBwZXJtaXNzaW9ucyc7XG4gICAgLy8gQSBxdW90YSByZWZ1c2FsIHdvbid0IGNsZWFyIGJ5IHdhaXRpbmcgYSBtb21lbnQ6IHRoZSBtZXNzYWdlIGFscmVhZHkgbmFtZXNcbiAgICAvLyB0aGUgcmVzZXQgZGF0ZSBhbmQgdGhlIHVwZ3JhZGUgbGluayAoYXBpLWNsaWVudCkuIE9ubHkgYSBwbGFpbiA0MjkgaXMgYVxuICAgIC8vIHJhdGUgbGltaXQuXG4gICAgaWYgKHN0YXR1cyA9PT0gNDI5ICYmIGlzUXVvdGFFeGNlZWRlZEJvZHkoZXJyLnJlc3BvbnNlPy5kYXRhKSkge1xuICAgICAgcmV0dXJuICdSZXRyeWluZyB3aWxsIG5vdCBoZWxwIHVudGlsIHRoZSBxdW90YSByZXNldHMg4oCUIHJhaXNlIHRoZSBsaW1pdCBhdCB0aGUgdXBncmFkZSBsaW5rIGFib3ZlJztcbiAgICB9XG4gICAgaWYgKHN0YXR1cyA9PT0gNDI5KSByZXR1cm4gJ1JhdGUgbGltaXQgZXhjZWVkZWQgLSB3YWl0IGEgbW9tZW50IGJlZm9yZSByZXRyeWluZyc7XG4gICAgaWYgKHN0YXR1cyAmJiBzdGF0dXMgPj0gNTAwKSByZXR1cm4gJ1NlcnZlciBlcnJvciAtIHRyeSBhZ2FpbiBsYXRlciBvciBjb250YWN0IHN1cHBvcnQnO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZUVycm9yRGF0YShkYXRhOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykgcmV0dXJuIGRhdGE7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgZGF0YSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHNhbml0aXplZCA9IHsgLi4uZGF0YSB9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIFsndG9rZW4nLCAncGFzc3dvcmQnLCAnc2VjcmV0JywgJ2FwaUtleScsICdhdXRob3JpemF0aW9uJywgJ2p3dCcsICdjcmVkZW50aWFsJywgJ2JlYXJlciddLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgaWYgKGZpZWxkIGluIHNhbml0aXplZCkgc2FuaXRpemVkW2ZpZWxkXSA9ICdbUkVEQUNURURdJztcbiAgICB9KTtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc2FuaXRpemVkLCBudWxsLCAyKTtcbiAgfVxuICByZXR1cm4gU3RyaW5nKGRhdGEpO1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgY29uc3QgdXJsT2JqID0gbmV3IFVSTCh1cmwpO1xuICAgIFsndG9rZW4nLCAna2V5JywgJ3NlY3JldCcsICdwYXNzd29yZCcsICdhcGlLZXknXS5mb3JFYWNoKHBhcmFtID0+IHtcbiAgICAgIGlmICh1cmxPYmouc2VhcmNoUGFyYW1zLmhhcyhwYXJhbSkpIHVybE9iai5zZWFyY2hQYXJhbXMuc2V0KHBhcmFtLCAnW1JFREFDVEVEXScpO1xuICAgIH0pO1xuICAgIHJldHVybiB1cmxPYmoudG9TdHJpbmcoKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZVZhbHVlKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJ251bGwnO1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuICd1bmRlZmluZWQnO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIGlmICh2YWx1ZS5sZW5ndGggPiAyMCAmJiAvXltBLVphLXowLTkrLz1fLV0rJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBgJHt2YWx1ZS5zdWJzdHJpbmcoMCwgOCl9Li4uW1JFREFDVEVEXWA7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPiAxMDAgPyB2YWx1ZS5zdWJzdHJpbmcoMCwgOTcpICsgJy4uLicgOiB2YWx1ZTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JykgcmV0dXJuIHNhbml0aXplRXJyb3JEYXRhKHZhbHVlKTtcbiAgY29uc3Qgc3RyID0gU3RyaW5nKHZhbHVlKTtcbiAgcmV0dXJuIHN0ci5sZW5ndGggPiAxMDAgPyBzdHIuc3Vic3RyaW5nKDAsIDk3KSArICcuLi4nIDogc3RyO1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZVN0YWNrVHJhY2Uoc3RhY2s6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdGFjay5zcGxpdCgnXFxuJykuc2xpY2UoMCwgMTApLm1hcChsaW5lID0+IGxpbmUucmVwbGFjZSgvXFwvLio/XFwvL2csICcuLi4vJykpLmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiBpc0F4aW9zRXJyb3IoZXJyOiB1bmtub3duKTogZXJyIGlzIEF4aW9zRXJyb3JMaWtlIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgZXJyID09PSAnb2JqZWN0JyAmJlxuICAgIGVyciAhPT0gbnVsbCAmJlxuICAgICdpc0F4aW9zRXJyb3InIGluIGVyciAmJlxuICAgIChlcnIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZVxuICApO1xufVxuIl19
325
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItaGFuZGxlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2Vycm9yLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLElBQUksTUFBTSxZQUFZLENBQUM7QUFDOUIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDakUsT0FBTyxFQUNMLFdBQVcsR0FJWixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBRTlDLDRCQUE0QjtBQUM1QixPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUM7QUFHdkI7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQ3pCLEdBQVksRUFDWixJQUFJLEdBQWMsV0FBVyxDQUFDLE9BQU8sRUFDckMsT0FBTyxHQUF3QixFQUFFO0lBRWpDLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JELElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN6QixPQUFPLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQztRQUNoQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFDRCxNQUFNLEdBQUcsQ0FBQztBQUNaLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQ3pCLEdBQVksRUFDWixJQUFJLEdBQWMsV0FBVyxDQUFDLE9BQU8sRUFDckMsT0FBTyxHQUFzQyxFQUFFO0lBRS9DLE1BQU0sRUFDSixLQUFLLEdBQUcsS0FBSyxFQUNiLFlBQVksR0FBRyxJQUFJLEVB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QUM7QUFDL0QsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsS0FBYTtJQUN2QyxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRyxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsR0FBWTtJQUNoQyxPQUFPLENBQ0wsT0FBTyxHQUFHLEtBQUssUUFBUTtRQUN2QixHQUFHLEtBQUssSUFBSTtRQUNaLGNBQWMsSUFBSSxHQUFHO1FBQ3BCLEdBQStCLENBQUMsWUFBWSxLQUFLLElBQUksQ0FDdkQsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgaXNRdW90YUV4Y2VlZGVkQm9keSB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUnO1xuaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyBnZW5lcmF0ZUV4ZWN1dGlvbklkIH0gZnJvbSAnLi4vY29uZmlnL2NsaS5jb25zdGFudHMuanMnO1xuaW1wb3J0IHtcbiAgRVJST1JfQ09ERVMsXG4gIHR5cGUgRXJyb3JDb2RlLFxuICB0eXBlIEVycm9ySGFuZGxlck9wdGlvbnMsXG4gIHR5cGUgQXhpb3NFcnJvckxpa2UsXG59IGZyb20gJy4uL3R5cGVzL2luZGV4LmpzJztcblxuY29uc3QgeyBib2xkLCBkaW0sIHJlZCwgeWVsbG93LCBjeWFuIH0gPSBwaWNvO1xuXG4vLyBSZS1leHBvcnQgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgeyBFUlJPUl9DT0RFUyB9O1xuZXhwb3J0IHR5cGUgeyBFcnJvckNvZGUgfTtcblxuLyoqXG4gKiBGb3JtYXQgYW5kIGhhbmRsZSBlcnJvcnMgd2l0aCBjb2xvcmVkIG91dHB1dDogcHJpbnQgdGhlIGVycm9yIChzZWVcbiAqIHtAbGluayByZXBvcnRFcnJvcn0pLCB0aGVuIGV4aXQgd2l0aCBpdHMgc3RhbmRhcmQgY29kZSDigJQgb3IsIHdpdGhcbiAqIGBleGl0OiBmYWxzZWAsIHJldGhyb3cgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVFcnJvcihcbiAgZXJyOiB1bmtub3duLFxuICBjb2RlOiBFcnJvckNvZGUgPSBFUlJPUl9DT0RFUy5HRU5FUkFMLFxuICBvcHRpb25zOiBFcnJvckhhbmRsZXJPcHRpb25zID0ge30sXG4pOiBuZXZlciB7XG4gIGNvbnN0IHJlc29sdmVkQ29kZSA9IHJlcG9ydEVycm9yKGVyciwgY29kZSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLmV4aXQgPz8gdHJ1ZSkge1xuICAgIHByb2Nlc3MuZXhpdENvZGUgPSByZXNvbHZlZENvZGU7XG4gICAgcHJvY2Vzcy5leGl0KHJlc29sdmVkQ29kZSk7XG4gIH1cbiAgdGhyb3cgZXJyO1xufVxuXG4vKipcbiAqIFByaW50IGFuIGVycm9yIHRoZSB3YXkge0BsaW5rIGhhbmRsZUVycm9yfSBkb2VzIGFuZCBSRVRVUk4gaXRzIHN0YW5kYXJkIGV4aXRcbiAqIGNvZGUsIHdpdGhvdXQgZXhpdGluZyBvciB0aHJvd2luZyDigJQgZm9yIGNvbW1hbmRzIHdpdGggdGhlaXIgb3duIGV4aXQtY29kZVxuICogY29udHJhY3QgKHRoZSBjcm9uLWZyaWVuZGx5IGF1ZGl0cyBleGl0IDIgb24gYSBzY2FuIGZhaWx1cmUpLiBgaGFuZGxlRXJyb3JgXG4gKiB3aXRoIGBleGl0OiBmYWxzZWAgcmV0aHJvd3MsIHNvIGEgYHByb2Nlc3MuZXhpdCgyKWAgYWZ0ZXIgaXQgbmV2ZXIgcmFuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwb3J0RXJyb3IoXG4gIGVycjogdW5rbm93bixcbiAgY29kZTogRXJyb3JDb2RlID0gRVJST1JfQ09ERVMuR0VORVJBTCxcbiAgb3B0aW9uczogT21pdDxFcnJvckhhbmRsZXJPcHRpb25zLCAnZXhpdCc+ID0ge30sXG4pOiBFcnJvckNvZGUge1xuICBjb25zdCB7XG4gICAgZGVidWcgPSBmYWxzZSxcbiAgICBsb2dUb0NvbnNvbGUgPSB0cnVlLFxuICAgIGNvbnRleHQsXG4gICAgY29ycmVsYXRpb25JZCA9IGdlbmVyYXRlRXhlY3V0aW9uSWQoKSxcbiAgfSA9IG9wdGlvbnM7XG5cbiAgLy8gRGVyaXZlIHRoZSBjYW5vbmljYWwgZXhpdCBjb2RlIGZyb20gdGhlIEFDVFVBTCBlcnJvciAoc2VlIHJlc29sdmVFeGl0Q29kZSksXG4gIC8vIGZhbGxpbmcgYmFjayB0byB0aGUgY2FsbGVyJ3MgYGNvZGVgIGZvciBhbnl0aGluZyB1bmNsYXNzaWZpYWJsZS4gVGhpcyBpcyB3aGF0XG4gIC8vIG1ha2VzIGV2ZXJ5IGNvbW1hbmQgZW1pdCB0aGUgU0FNRSBleGl0IGNvZGUgZm9yIHRoZSBzYW1lIGNsYXNzIG9mIGZhaWx1cmUsXG4gIC8vIHJhdGhlciB0aGFuIGEgYmxhbmtldCBBUElfUkVRVUVTVC9HRU5FUkFMLiBVc2VkIGZvciBkaXNwbGF5LCB0aGUgc3VnZ2VzdGlvbixcbiAgLy8gYW5kIHRoZSBwcm9jZXNzIGV4aXQgYmVsb3cuXG4gIGNvbnN0IHJlc29sdmVkQ29kZSA9IHJlc29sdmVFeGl0Q29kZShlcnIsIGNvZGUpO1xuXG4gIGlmIChsb2dUb0NvbnNvbGUpIHtcbiAgICBjb25zdCBkaXZpZGVyID0gJ+KUgCcucmVwZWF0KHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgfHwgODApO1xuICAgIGNvbnN0IGVycm9ySWQgPSBgRVJSLSR7Y29ycmVsYXRpb25JZH1gO1xuXG4gICAgY29uc29sZS5lcnJvcignXFxuJyArIHJlZChib2xkKCfinJcgRVJST1InKSkgKyBkaW0oYCBbJHtlcnJvcklkfV1gKSArICdcXG4nKTtcbiAgICBjb25zb2xlLmVycm9yKGRpbShkaXZpZGVyKSk7XG5cbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IocmVkKGJvbGQoJ01lc3NhZ2U6JykpLCBlcnIubWVzc2FnZSk7XG5cbiAgICAgIGlmIChlcnIubmFtZSAhPT0gJ0Vycm9yJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKHJlZCgnVHlwZTonKSwgZXJyLm5hbWUpO1xuICAgICAgfVxuXG4gICAgICAvLyBTaG93IFZhbGlkYXRpb24gZXJyb3IgZGV0YWlsc1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFZhbGlkYXRpb25FcnJvcikge1xuICAgICAgICBpZiAoZXJyLmZpZWxkKSBjb25zb2xlLmVycm9yKHJlZCgnRmllbGQ6JyksIGVyci5maWVsZCk7XG4gICAgICAgIGlmIChlcnIudmFsdWUgIT09IHVuZGVmaW5lZCkgY29uc29sZS5lcnJvcihyZWQoJ1ZhbHVlOicpLCBzYW5pdGl6ZVZhbHVlKGVyci52YWx1ZSkpO1xuICAgICAgICBpZiAoZXJyLnJ1bGUpIGNvbnNvbGUuZXJyb3IocmVkKCdSdWxlOicpLCBlcnIucnVsZSk7XG4gICAgICAgIGlmIChlcnIuZXhwZWN0ZWQpIGNvbnNvbGUuZXJyb3IocmVkKCdFeHBlY3RlZDonKSwgZXJyLmV4cGVjdGVkKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2hvdyBOZXR3b3JrIGVycm9yIGRldGFpbHNcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBOZXR3b3JrRXJyb3IpIHtcbiAgICAgICAgaWYgKGVyci51cmwpIGNvbnNvbGUuZXJyb3IocmVkKCdVUkw6JyksIHNhbml0aXplVXJsKGVyci51cmwpKTtcbiAgICAgICAgaWYgKGVyci50aW1lb3V0KSBjb25zb2xlLmVycm9yKHJlZCgnVGltZW91dDonKSwgYCR7ZXJyLnRpbWVvdXR9bXNgKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihyZWQoJ1JlcXVlc3QgTWFkZTonKSwgZXJyLnJlcXVlc3RNYWRlID8gJ1llcycgOiAnTm8nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihyZWQoJ1Jlc3BvbnNlIFJlY2VpdmVkOicpLCBlcnIucmVzcG9uc2VSZWNlaXZlZCA/ICdZZXMnIDogJ05vJyk7XG4gICAgICAgIGlmIChlcnIuY2F1c2UpIGNvbnNvbGUuZXJyb3IocmVkKCdDYXVzZWQgYnk6JyksIGVyci5jYXVzZS5tZXNzYWdlKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2hvdyBBeGlvcyBlcnJvciBkZXRhaWxzXG4gICAgICBpZiAoaXNBeGlvc0Vycm9yKGVycikpIHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gZXJyLnJlc3BvbnNlPy5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHVybCA9IGVyci5jb25maWc/LnVybDtcbiAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVkKCdTdGF0dXM6JyksIHN0YXR1cyk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihyZWQoJ1N0YXR1cyBUZXh0OicpLCBnZXRIdHRwU3RhdHVzVGV4dChzdGF0dXMpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXJsKSBjb25zb2xlLmVycm9yKHJlZCgnVVJMOicpLCBzYW5pdGl6ZVVybCh1cmwpKTtcbiAgICAgICAgaWYgKGVyci5yZXNwb25zZT8uZGF0YSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVkKCdSZXNwb25zZTonKSk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihkaW0oc2FuaXRpemVFcnJvckRhdGEoZXJyLnJlc3BvbnNlLmRhdGEpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU2hvdyBDREsvZXhlY1N5bmMgZXJyb3IgZGV0YWlscyAoc3RkZXJyIGNhcHR1cmVkIGZyb20gY2hpbGQgcHJvY2VzcylcbiAgICAgIGlmICgnc3RkZXJyJyBpbiBlcnIgJiYgZXJyLnN0ZGVycikge1xuICAgICAgICBjb25zdCBzdGRlcnIgPSAoZXJyLnN0ZGVyciBhcyBCdWZmZXIgfCBzdHJpbmcpLnRvU3RyaW5nKCkudHJpbSgpO1xuICAgICAgICBpZiAoc3RkZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihyZWQoJ0NESyBPdXRwdXQ6JykpO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZGltKHN0ZGVycikpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUuZXJyb3IocmVkKCdDb2RlOicpLCBnZXRFcnJvckNvZGVOYW1lKHJlc29sdmVkQ29kZSkpO1xuICAgICAgY29uc29sZS5lcnJvcihkaW0oJ0Vycm9yIElEOicpLCBkaW0oZXJyb3JJZCkpO1xuXG4gICAgICBpZiAoY29udGV4dCAmJiBPYmplY3Qua2V5cyhjb250ZXh0KS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJycpO1xuICAgICAgICBjb25zb2xlLmVycm9yKHJlZCgnQ29udGV4dDonKSk7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGNvbnRleHQpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCAgJHtjeWFuKGtleSl9OmAsIGRpbShzYW5pdGl6ZVZhbHVlKHZhbHVlKSkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlYnVnICYmIGVyci5zdGFjaykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCcnKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihkaW0oJ1N0YWNrIHRyYWNlOicpKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihkaW0oc2FuaXRpemVTdGFja1RyYWNlKGVyci5zdGFjaykpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihyZWQoJ0Vycm9yOicpLCBTdHJpbmcoZXJyKSk7XG4gICAgICBjb25zb2xlLmVycm9yKHJlZCgnQ29kZTonKSwgZ2V0RXJyb3JDb2RlTmFtZShyZXNvbHZlZENvZGUpKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZGltKCdFcnJvciBJRDonKSwgZGltKGVycm9ySWQpKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKGRpbShkaXZpZGVyKSk7XG5cbiAgICBpZiAoIWRlYnVnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKHllbGxvdygn8J+SoSBUaXA6JyksIGRpbSgnUnVuIHdpdGggLS1kZWJ1ZyBmbGFnIHRvIHNlZSBmdWxsIHN0YWNrIHRyYWNlJykpO1xuICAgIH1cblxuICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBnZXRFcnJvclN1Z2dlc3Rpb24oZXJyLCByZXNvbHZlZENvZGUpO1xuICAgIGlmIChzdWdnZXN0aW9uKSB7XG4gICAgICBjb25zb2xlLmVycm9yKHllbGxvdygn8J+SoSBTdWdnZXN0aW9uOicpLCBkaW0oc3VnZ2VzdGlvbikpO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoJycpO1xuICB9XG5cbiAgcmV0dXJuIHJlc29sdmVkQ29kZTtcbn1cblxuLy8gLS0tIEVycm9yIGNsYXNzZXMgKG9ubHkgdGhvc2UgYWN0dWFsbHkgdXNlZCkgLS0tXG5cbi8qKlxuICogVmFsaWRhdGlvbiBlcnJvciBjbGFzc1xuICovXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgcHVibGljIGZpZWxkPzogc3RyaW5nLFxuICAgIHB1YmxpYyB2YWx1ZT86IHVua25vd24sXG4gICAgcHVibGljIHJ1bGU/OiBzdHJpbmcsXG4gICAgcHVibGljIGV4cGVjdGVkPzogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnVmFsaWRhdGlvbkVycm9yJztcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfVxufVxuXG4vKipcbiAqIE5ldHdvcmsgZXJyb3IgY2xhc3NcbiAqL1xuZXhwb3J0IGNsYXNzIE5ldHdvcmtFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIHB1YmxpYyB1cmw/OiBzdHJpbmcsXG4gICAgcHVibGljIGNhdXNlPzogRXJyb3IsXG4gICAgcHVibGljIHRpbWVvdXQ/OiBudW1iZXIsXG4gICAgcHVibGljIHJlcXVlc3RNYWRlOiBib29sZWFuID0gdHJ1ZSxcbiAgICBwdWJsaWMgcmVzcG9uc2VSZWNlaXZlZDogYm9vbGVhbiA9IGZhbHNlLFxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnTmV0d29ya0Vycm9yJztcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfVxufVxuXG4vLyAtLS0gUHJpdmF0ZSBoZWxwZXJzIC0tLVxuXG4vKipcbiAqIE1hcCB0aGUgQUNUVUFMIGVycm9yIHRvIGEgY2Fub25pY2FsIGV4aXQgY29kZSBzbyBldmVyeSBjb21tYW5kIGV4aXRzIHdpdGggdGhlXG4gKiBTQU1FIGNvZGUgZm9yIHRoZSBzYW1lIGNsYXNzIG9mIGZhaWx1cmUuIFRoZSBjYWxsZXItc3VwcGxpZWQgYGZhbGxiYWNrYCAoZS5nLlxuICogQVBJX1JFUVVFU1QpIGlzIHVzZWQgb25seSBmb3IgZXJyb3JzIHRoaXMgY2FuJ3QgY2xhc3NpZnkuIENvZGVzIChzcmMvdHlwZXMvZXJyb3IudHMpOlxuICpcbiAqICAgMSBHRU5FUkFMIMK3IDIgVkFMSURBVElPTiDCtyAzIEFQSV9SRVFVRVNUIMK3IDQgQVVUSEVOVElDQVRJT04gwrcgNSBBVVRIT1JJWkFUSU9OXG4gKiAgIDYgTk9UX0ZPVU5EIMK3IDcgTkVUV09SSyDCtyA4IENPTkZJR1VSQVRJT04gwrcgOSBGSUxFX1NZU1RFTSDCtyAxMCBUSU1FT1VUXG4gKlxuICogUHJlY2VkZW5jZTogdHlwZWQgQ0xJIGVycm9ycyDihpIgSFRUUCBzdGF0dXMg4oaSIE5vZGUgc3lzdGVtIGVycm9yIGBjb2RlYCDihpIgZmFsbGJhY2suXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVFeGl0Q29kZShlcnI6IHVua25vd24sIGZhbGxiYWNrOiBFcnJvckNvZGUpOiBFcnJvckNvZGUge1xuICBpZiAoZXJyIGluc3RhbmNlb2YgVmFsaWRhdGlvbkVycm9yKSByZXR1cm4gRVJST1JfQ09ERVMuVkFMSURBVElPTjtcbiAgaWYgKGVyciBpbnN0YW5jZW9mIE5ldHdvcmtFcnJvcikgcmV0dXJuIGVyci50aW1lb3V0ID8gRVJST1JfQ09ERVMuVElNRU9VVCA6IEVSUk9SX0NPREVTLk5FVFdPUks7XG5cbiAgaWYgKGlzQXhpb3NFcnJvcihlcnIpKSB7XG4gICAgY29uc3Qgc3RhdHVzID0gZXJyLnJlc3BvbnNlPy5zdGF0dXM7XG4gICAgaWYgKHN0YXR1cyA9PT0gNDAwIHx8IHN0YXR1cyA9PT0gNDIyKSByZXR1cm4gRVJST1JfQ09ERVMuVkFMSURBVElPTjtcbiAgICBpZiAoc3RhdHVzID09PSA0MDEpIHJldHVybiBFUlJPUl9DT0RFUy5BVVRIRU5USUNBVElPTjtcbiAgICBpZiAoc3RhdHVzID09PSA0MDMpIHJldHVybiBFUlJPUl9DT0RFUy5BVVRIT1JJWkFUSU9OO1xuICAgIGlmIChzdGF0dXMgPT09IDQwNCkgcmV0dXJuIEVSUk9SX0NPREVTLk5PVF9GT1VORDtcbiAgICBpZiAoc3RhdHVzID09PSA0MDggfHwgc3RhdHVzID09PSA1MDQpIHJldHVybiBFUlJPUl9DT0RFUy5USU1FT1VUO1xuICAgIC8vIENMSUVOVF9VUEdSQURFX1JFUVVJUkVEOiB0aGlzIENMSSBpcyBiZWxvdyB0aGUgcGxhdGZvcm0ncyBtaW5pbXVtIOKAlCBhXG4gICAgLy8gbG9jYWwtaW5zdGFsbCBwcm9ibGVtIChmaXg6IC0tdXBncmFkZSksIHNvIHNjcmlwdHMgY2FuIHRlbGwgaXQgYXBhcnQuXG4gICAgaWYgKHN0YXR1cyA9PT0gNDI2KSByZXR1cm4gRVJST1JfQ09ERVMuQ09ORklHVVJBVElPTjtcbiAgICBpZiAoc3RhdHVzICYmIHN0YXR1cyA+PSA1MDApIHJldHVybiBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVDtcbiAgICAvLyBBIHJlcXVlc3QgdGhhdCBnb3Qgbm8gSFRUUCByZXNwb25zZSBuZXZlciByZWFjaGVkIHRoZSBzZXJ2ZXIgKEROUyAvIHJlZnVzZWRcbiAgICAvLyAvIHJlc2V0KSDigJQgdGhhdCdzIGEgbmV0d29yayBmYWlsdXJlLCBub3QgYW4gQVBJLXJlc3BvbnNlIGVycm9yLlxuICAgIGlmICghZXJyLnJlc3BvbnNlKSByZXR1cm4gRVJST1JfQ09ERVMuTkVUV09SSztcbiAgICByZXR1cm4gZmFsbGJhY2s7XG4gIH1cblxuICAvLyBOb2RlIHN5c3RlbSBlcnJvcnMgKGZzICsgc29ja2V0cykgY2FycnkgYSBzdHJpbmcgYGNvZGVgLlxuICBjb25zdCBzeXNDb2RlID0gKGVyciBhcyB7IGNvZGU/OiB1bmtub3duIH0gfCBudWxsKT8uY29kZTtcbiAgaWYgKHR5cGVvZiBzeXNDb2RlID09PSAnc3RyaW5nJykge1xuICAgIGlmIChbJ0VOT0VOVCcsICdFQUNDRVMnLCAnRUlTRElSJywgJ0VOT1RESVInLCAnRUVYSVNUJywgJ0VQRVJNJywgJ0VOT1NQQycsICdFTUZJTEUnXS5pbmNsdWRlcyhzeXNDb2RlKSkge1xuICAgICAgcmV0dXJuIEVSUk9SX0NPREVTLkZJTEVfU1lTVEVNO1xuICAgIH1cbiAgICBpZiAoc3lzQ29kZSA9PT0gJ0VUSU1FRE9VVCcpIHJldHVybiBFUlJPUl9DT0RFUy5USU1FT1VUO1xuICAgIGlmIChbJ0VDT05OUkVGVVNFRCcsICdFTk9URk9VTkQnLCAnRUNPTk5SRVNFVCcsICdFSE9TVFVOUkVBQ0gnLCAnRU5FVFVOUkVBQ0gnLCAnRUFJX0FHQUlOJywgJ0VQSVBFJ10uaW5jbHVkZXMoc3lzQ29kZSkpIHtcbiAgICAgIHJldHVybiBFUlJPUl9DT0RFUy5ORVRXT1JLO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxsYmFjaztcbn1cblxuZnVuY3Rpb24gZ2V0RXJyb3JDb2RlTmFtZShjb2RlOiBFcnJvckNvZGUpOiBzdHJpbmcge1xuICBjb25zdCBlbnRyeSA9IE9iamVjdC5lbnRyaWVzKEVSUk9SX0NPREVTKS5maW5kKChbXywgdmFsdWVdKSA9PiB2YWx1ZSA9PT0gY29kZSk7XG4gIHJldHVybiBlbnRyeSA/IGAke2VudHJ5WzBdfSAoJHtjb2RlfSlgIDogU3RyaW5nKGNvZGUpO1xufVxuXG5mdW5jdGlvbiBnZXRIdHRwU3RhdHVzVGV4dChzdGF0dXM6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IHN0YXR1c1RleHRzOiBSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+ID0ge1xuICAgIDQwMDogJ0JhZCBSZXF1ZXN0JyxcbiAgICA0MDE6ICdVbmF1dGhvcml6ZWQnLFxuICAgIDQwMzogJ0ZvcmJpZGRlbicsXG4gICAgNDA0OiAnTm90IEZvdW5kJyxcbiAgICA0MDg6ICdSZXF1ZXN0IFRpbWVvdXQnLFxuICAgIDQwOTogJ0NvbmZsaWN0JyxcbiAgICA0MjI6ICdVbnByb2Nlc3NhYmxlIEVudGl0eScsXG4gICAgNDI5OiAnVG9vIE1hbnkgUmVxdWVzdHMnLFxuICAgIDUwMDogJ0ludGVybmFsIFNlcnZlciBFcnJvcicsXG4gICAgNTAyOiAnQmFkIEdhdGV3YXknLFxuICAgIDUwMzogJ1NlcnZpY2UgVW5hdmFpbGFibGUnLFxuICAgIDUwNDogJ0dhdGV3YXkgVGltZW91dCcsXG4gIH07XG4gIHJldHVybiBzdGF0dXNUZXh0c1tzdGF0dXNdIHx8ICdVbmtub3duJztcbn1cblxuZnVuY3Rpb24gZ2V0RXJyb3JTdWdnZXN0aW9uKGVycjogdW5rbm93biwgY29kZTogRXJyb3JDb2RlKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmIChjb2RlID09PSBFUlJPUl9DT0RFUy5BVVRIRU5USUNBVElPTikge1xuICAgIHJldHVybiAnQ2hlY2sgdGhhdCBQTEFURk9STV9UT0tFTiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQgY29ycmVjdGx5JztcbiAgfVxuICBpZiAoY29kZSA9PT0gRVJST1JfQ09ERVMuTkVUV09SSykge1xuICAgIHJldHVybiAnQ2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uIGFuZCBBUEkgZW5kcG9pbnQgVVJMJztcbiAgfVxuICBpZiAoY29kZSA9PT0gRVJST1JfQ09ERVMuQ09ORklHVVJBVElPTikge1xuICAgIHJldHVybiAnUnVuIFwiY2xpIHZlcnNpb24gLS1jaGVjay1jb25maWdcIiB0byB2ZXJpZnkgY29uZmlndXJhdGlvbic7XG4gIH1cbiAgaWYgKGNvZGUgPT09IEVSUk9SX0NPREVTLk5PVF9GT1VORCkge1xuICAgIHJldHVybiAnVmVyaWZ5IHRoZSByZXNvdXJjZSBJRCBleGlzdHMgYW5kIHlvdSBoYXZlIGFjY2VzcyB0byBpdCc7XG4gIH1cbiAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdjZGsnKSkge1xuICAgIHJldHVybiAnQ2hlY2sgdGhlIENESyBvdXRwdXQgYWJvdmUgZm9yIENsb3VkRm9ybWF0aW9uIGVycm9ycy4gUnVuIHdpdGggLS1kZWJ1ZyBmb3IgZnVsbCBkZXRhaWxzJztcbiAgfVxuICBpZiAoZXJyIGluc3RhbmNlb2YgVmFsaWRhdGlvbkVycm9yICYmIGVyci5maWVsZCkge1xuICAgIHJldHVybiBgQ2hlY2sgdGhlIHZhbHVlIHByb3ZpZGVkIGZvciBcIiR7ZXJyLmZpZWxkfVwiYDtcbiAgfVxuICBpZiAoaXNBeGlvc0Vycm9yKGVycikpIHtcbiAgICBjb25zdCBzdGF0dXMgPSBlcnIucmVzcG9uc2U/LnN0YXR1cztcbiAgICBpZiAoc3RhdHVzID09PSA0MDEgfHwgc3RhdHVzID09PSA0MDMpIHJldHVybiAnQ2hlY2sgeW91ciBhdXRoZW50aWNhdGlvbiB0b2tlbiBhbmQgcGVybWlzc2lvbnMnO1xuICAgIC8vIEEgcXVvdGEgcmVmdXNhbCB3b24ndCBjbGVhciBieSB3YWl0aW5nIGEgbW9tZW50OiB0aGUgbWVzc2FnZSBhbHJlYWR5IG5hbWVzXG4gICAgLy8gdGhlIHJlc2V0IGRhdGUgYW5kIHRoZSB1cGdyYWRlIGxpbmsgKGFwaS1jbGllbnQpLiBPbmx5IGEgcGxhaW4gNDI5IGlzIGFcbiAgICAvLyByYXRlIGxpbWl0LlxuICAgIGlmIChzdGF0dXMgPT09IDQyOSAmJiBpc1F1b3RhRXhjZWVkZWRCb2R5KGVyci5yZXNwb25zZT8uZGF0YSkpIHtcbiAgICAgIHJldHVybiAnUmV0cnlpbmcgd2lsbCBub3QgaGVscCB1bnRpbCB0aGUgcXVvdGEgcmVzZXRzIOKAlCByYWlzZSB0aGUgbGltaXQgYXQgdGhlIHVwZ3JhZGUgbGluayBhYm92ZSc7XG4gICAgfVxuICAgIGlmIChzdGF0dXMgPT09IDQyOSkgcmV0dXJuICdSYXRlIGxpbWl0IGV4Y2VlZGVkIC0gd2FpdCBhIG1vbWVudCBiZWZvcmUgcmV0cnlpbmcnO1xuICAgIGlmIChzdGF0dXMgJiYgc3RhdHVzID49IDUwMCkgcmV0dXJuICdTZXJ2ZXIgZXJyb3IgLSB0cnkgYWdhaW4gbGF0ZXIgb3IgY29udGFjdCBzdXBwb3J0JztcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gc2FuaXRpemVFcnJvckRhdGEoZGF0YTogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHJldHVybiBkYXRhO1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmIGRhdGEgIT09IG51bGwpIHtcbiAgICBjb25zdCBzYW5pdGl6ZWQgPSB7IC4uLmRhdGEgfSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBbJ3Rva2VuJywgJ3Bhc3N3b3JkJywgJ3NlY3JldCcsICdhcGlLZXknLCAnYXV0aG9yaXphdGlvbicsICdqd3QnLCAnY3JlZGVudGlhbCcsICdiZWFyZXInXS5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgIGlmIChmaWVsZCBpbiBzYW5pdGl6ZWQpIHNhbml0aXplZFtmaWVsZF0gPSAnW1JFREFDVEVEXSc7XG4gICAgfSk7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHNhbml0aXplZCwgbnVsbCwgMik7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyhkYXRhKTtcbn1cblxuZnVuY3Rpb24gc2FuaXRpemVVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGNvbnN0IHVybE9iaiA9IG5ldyBVUkwodXJsKTtcbiAgICBbJ3Rva2VuJywgJ2tleScsICdzZWNyZXQnLCAncGFzc3dvcmQnLCAnYXBpS2V5J10uZm9yRWFjaChwYXJhbSA9PiB7XG4gICAgICBpZiAodXJsT2JqLnNlYXJjaFBhcmFtcy5oYXMocGFyYW0pKSB1cmxPYmouc2VhcmNoUGFyYW1zLnNldChwYXJhbSwgJ1tSRURBQ1RFRF0nKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdXJsT2JqLnRvU3RyaW5nKCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2FuaXRpemVWYWx1ZSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICdudWxsJztcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiAndW5kZWZpbmVkJztcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodmFsdWUubGVuZ3RoID4gMjAgJiYgL15bQS1aYS16MC05Ky89Xy1dKyQvLnRlc3QodmFsdWUpKSB7XG4gICAgICByZXR1cm4gYCR7dmFsdWUuc3Vic3RyaW5nKDAsIDgpfS4uLltSRURBQ1RFRF1gO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUubGVuZ3RoID4gMTAwID8gdmFsdWUuc3Vic3RyaW5nKDAsIDk3KSArICcuLi4nIDogdmFsdWU7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHJldHVybiBzYW5pdGl6ZUVycm9yRGF0YSh2YWx1ZSk7XG4gIGNvbnN0IHN0ciA9IFN0cmluZyh2YWx1ZSk7XG4gIHJldHVybiBzdHIubGVuZ3RoID4gMTAwID8gc3RyLnN1YnN0cmluZygwLCA5NykgKyAnLi4uJyA6IHN0cjtcbn1cblxuZnVuY3Rpb24gc2FuaXRpemVTdGFja1RyYWNlKHN0YWNrOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RhY2suc3BsaXQoJ1xcbicpLnNsaWNlKDAsIDEwKS5tYXAobGluZSA9PiBsaW5lLnJlcGxhY2UoL1xcLy4qP1xcLy9nLCAnLi4uLycpKS5qb2luKCdcXG4nKTtcbn1cblxuZnVuY3Rpb24gaXNBeGlvc0Vycm9yKGVycjogdW5rbm93bik6IGVyciBpcyBBeGlvc0Vycm9yTGlrZSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIGVyciA9PT0gJ29iamVjdCcgJiZcbiAgICBlcnIgIT09IG51bGwgJiZcbiAgICAnaXNBeGlvc0Vycm9yJyBpbiBlcnIgJiZcbiAgICAoZXJyIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5pc0F4aW9zRXJyb3IgPT09IHRydWVcbiAgKTtcbn1cbiJdfQ==
@@ -8,7 +8,7 @@ import type { Pipeline } from '../types/pipeline.js';
8
8
  export interface FetchedPipeline {
9
9
  /** The raw pipeline record (id/org/project/flags) as returned by the platform. */
10
10
  readonly pipeline: Pipeline;
11
- /** props + pipelineId (+ orgId) + resolvedPlugins, with the registry pull-host baked in. */
11
+ /** props + pipelineId (+ orgId) + resolvedPlugins + resolvedBootstrap, with the registry pull-host baked in. */
12
12
  readonly propsWithIds: Record<string, unknown>;
13
13
  /** The resolved platform base URL the config was fetched against. */
14
14
  readonly baseUrl: string;
@@ -20,7 +20,10 @@ export interface FetchedPipeline {
20
20
  * - GET the pipeline and validate it has `props`,
21
21
  * - assemble `propsWithIds` (props + pipelineId + orgId),
22
22
  * - pre-resolve plugins so the template ships real CodeBuild image URIs
23
- * (otherwise CDK falls back to standard:7.0 at deploy time),
23
+ * (otherwise the steps fall back to the deploy-time lookup path),
24
+ * - resolve the toolchain release's pipeline-bootstrap (FATAL on any
25
+ * failure, D2) with the same `toolchain.release` pin a managed cdk-synth
26
+ * reference sent, and check both halves are one release,
24
27
  * - bake the registry pull-host from the platform URL (no-op when
25
28
  * IMAGE_REGISTRY_PULL_HOST is set).
26
29
  */
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline-config.d.ts","sources":["../../src/utils/pipeline-config.ts"],"names":[],"mappings":"AAGA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAKjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,kFAAkF;IAClF,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,4FAA4F;IAC5F,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/C,qEAAqE;IACrE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,kFAAkF;IAClF,QAAQ,CAAC,cAAc,EAAE,SAAS,aAAa,EAAE,CAAC;CACnD;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAuBxG;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAW9F"}
1
+ {"version":3,"file":"pipeline-config.d.ts","sources":["../../src/utils/pipeline-config.ts"],"names":[],"mappings":"AAGA;;;GAGG;AAEH,OAAO,KAAK,EAAmB,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAMjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,kFAAkF;IAClF,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,gHAAgH;IAChH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/C,qEAAqE;IACrE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,kFAAkF;IAClF,QAAQ,CAAC,cAAc,EAAE,SAAS,aAAa,EAAE,CAAC;CACnD;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA4BxG;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAW9F"}
@@ -4,12 +4,16 @@ import { printInfo } from './output-utils.js';
4
4
  import { resolvePluginsForProps } from './plugin-resolver.js';
5
5
  import { bakePlatformRegistry } from './registry.js';
6
6
  import { extractSingleResponse } from './response-utils.js';
7
+ import { assertOneRelease, resolveBootstrapImage } from './toolchain.js';
7
8
  /**
8
9
  * Fetch a pipeline by id and build the synth/deploy props:
9
10
  * - GET the pipeline and validate it has `props`,
10
11
  * - assemble `propsWithIds` (props + pipelineId + orgId),
11
12
  * - pre-resolve plugins so the template ships real CodeBuild image URIs
12
- * (otherwise CDK falls back to standard:7.0 at deploy time),
13
+ * (otherwise the steps fall back to the deploy-time lookup path),
14
+ * - resolve the toolchain release's pipeline-bootstrap (FATAL on any
15
+ * failure, D2) with the same `toolchain.release` pin a managed cdk-synth
16
+ * reference sent, and check both halves are one release,
13
17
  * - bake the registry pull-host from the platform URL (no-op when
14
18
  * IMAGE_REGISTRY_PULL_HOST is set).
15
19
  */
@@ -26,11 +30,16 @@ export async function fetchPipelineProps(client, pipelineId) {
26
30
  pipelineId: pipeline.id || pipelineId,
27
31
  };
28
32
  const pluginWarnings = [];
29
- const resolvedPlugins = await resolvePluginsForProps(client, propsWithIds, pluginWarnings);
33
+ const managedToolchains = {};
34
+ const resolvedPlugins = await resolvePluginsForProps(client, propsWithIds, pluginWarnings, managedToolchains);
30
35
  if (Object.keys(resolvedPlugins).length > 0) {
31
36
  propsWithIds.resolvedPlugins = resolvedPlugins;
32
37
  printInfo('Pre-resolved plugins', { count: Object.keys(resolvedPlugins).length });
33
38
  }
39
+ const resolvedBootstrap = await resolveBootstrapImage(client, propsWithIds, pluginWarnings);
40
+ assertOneRelease(resolvedBootstrap, managedToolchains);
41
+ propsWithIds.resolvedBootstrap = resolvedBootstrap;
42
+ printInfo('Toolchain release', { release: resolvedBootstrap.toolchain.releaseVersion, via: resolvedBootstrap.toolchain.resolvedVia });
34
43
  bakePlatformRegistry(propsWithIds, config.api.baseUrl);
35
44
  return { pipeline, propsWithIds, baseUrl: config.api.baseUrl, pluginWarnings };
36
45
  }
@@ -53,4 +62,4 @@ export async function printResolvedOrExit(propsWithIds) {
53
62
  }
54
63
  console.log(JSON.stringify(propsWithIds, null, 2));
55
64
  }
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtY29uZmlnLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcGlwZWxpbmUtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFTdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQWM1RDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsa0JBQWtCLENBQUMsTUFBaUIsRUFBRSxVQUFrQjtJQUM1RSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUEwQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDdEcsTUFBTSxRQUFRLEdBQUcscUJBQXFCLENBQVcsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoRixJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELE1BQU0sWUFBWSxHQUE0QjtRQUM1QyxHQUFJLFFBQVEsQ0FBQyxLQUFpQztRQUM5QyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDcEQsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLElBQUksVUFBVTtLQUN0QyxDQUFDO0lBRUYsTUFBTSxjQUFjLEdBQW9CLEVBQUUsQ0FBQztJQUMzQyxNQUFNLGVBQWUsR0FBRyxNQUFNLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDM0YsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1QyxZQUFZLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztRQUMvQyxTQUFTLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUM7QUFDakYsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxZQUFxQztJQUM3RSxNQUFNLEVBQUUsc0JBQXNCLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBQ25GLE1BQU0sS0FBSyxHQUFHLEVBQUUsUUFBUSxFQUFFLFlBQVksQ0FBQyxRQUFRLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDO0lBQ3ZGLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssYUFBYSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2RyxNQUFNLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4RyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDekIsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3BDLEtBQUssTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU07WUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDbkYsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogU2hhcmVkIHBpcGVsaW5lLWNvbmZpZyByZXNvbHV0aW9uIHVzZWQgYnkgYm90aCBgc3ludGhgIGFuZCBgZGVwbG95YCBzbyB0aGUgdHdvXG4gKiBjb21tYW5kcyBmZXRjaCwgcGx1Z2luLXJlc29sdmUsIHJlZ2lzdHJ5LWJha2UsIGFuZCB0ZW1wbGF0ZS1wcmV2aWV3IGlkZW50aWNhbGx5LlxuICovXG5cbmltcG9ydCB0eXBlIHsgTG9va3VwV2FybmluZyB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBBcGlDbGllbnQgfSBmcm9tICcuL2FwaS1jbGllbnQuanMnO1xuaW1wb3J0IHsgcHJpbnRJbmZvIH0gZnJvbSAnLi9vdXRwdXQtdXRpbHMuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVBsdWdpbnNGb3JQcm9wcyB9IGZyb20gJy4vcGx1Z2luLXJlc29sdmVyLmpzJztcbmltcG9ydCB7IGJha2VQbGF0Zm9ybVJlZ2lzdHJ5IH0gZnJvbSAnLi9yZWdpc3RyeS5qcyc7XG5pbXBvcnQgeyBleHRyYWN0U2luZ2xlUmVzcG9uc2UgfSBmcm9tICcuL3Jlc3BvbnNlLXV0aWxzLmpzJztcbmltcG9ydCB0eXBlIHsgUGlwZWxpbmUgfSBmcm9tICcuLi90eXBlcy9waXBlbGluZS5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmV0Y2hlZFBpcGVsaW5lIHtcbiAgLyoqIFRoZSByYXcgcGlwZWxpbmUgcmVjb3JkIChpZC9vcmcvcHJvamVjdC9mbGFncykgYXMgcmV0dXJuZWQgYnkgdGhlIHBsYXRmb3JtLiAqL1xuICByZWFkb25seSBwaXBlbGluZTogUGlwZWxpbmU7XG4gIC8qKiBwcm9wcyArIHBpcGVsaW5lSWQgKCsgb3JnSWQpICsgcmVzb2x2ZWRQbHVnaW5zLCB3aXRoIHRoZSByZWdpc3RyeSBwdWxsLWhvc3QgYmFrZWQgaW4uICovXG4gIHJlYWRvbmx5IHByb3BzV2l0aElkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKiBUaGUgcmVzb2x2ZWQgcGxhdGZvcm0gYmFzZSBVUkwgdGhlIGNvbmZpZyB3YXMgZmV0Y2hlZCBhZ2FpbnN0LiAqL1xuICByZWFkb25seSBiYXNlVXJsOiBzdHJpbmc7XG4gIC8qKiBFdmVyeSBncmFkZWQgbG9va3VwIHdhcm5pbmcgKGFscmVhZHkgcHJpbnRlZCkg4oCUIGZvciB0aGUgZW5kLW9mLXJ1biBzdW1tYXJ5LiAqL1xuICByZWFkb25seSBwbHVnaW5XYXJuaW5nczogcmVhZG9ubHkgTG9va3VwV2FybmluZ1tdO1xufVxuXG4vKipcbiAqIEZldGNoIGEgcGlwZWxpbmUgYnkgaWQgYW5kIGJ1aWxkIHRoZSBzeW50aC9kZXBsb3kgcHJvcHM6XG4gKiAgLSBHRVQgdGhlIHBpcGVsaW5lIGFuZCB2YWxpZGF0ZSBpdCBoYXMgYHByb3BzYCxcbiAqICAtIGFzc2VtYmxlIGBwcm9wc1dpdGhJZHNgIChwcm9wcyArIHBpcGVsaW5lSWQgKyBvcmdJZCksXG4gKiAgLSBwcmUtcmVzb2x2ZSBwbHVnaW5zIHNvIHRoZSB0ZW1wbGF0ZSBzaGlwcyByZWFsIENvZGVCdWlsZCBpbWFnZSBVUklzXG4gKiAgICAob3RoZXJ3aXNlIENESyBmYWxscyBiYWNrIHRvIHN0YW5kYXJkOjcuMCBhdCBkZXBsb3kgdGltZSksXG4gKiAgLSBiYWtlIHRoZSByZWdpc3RyeSBwdWxsLWhvc3QgZnJvbSB0aGUgcGxhdGZvcm0gVVJMIChuby1vcCB3aGVuXG4gKiAgICBJTUFHRV9SRUdJU1RSWV9QVUxMX0hPU1QgaXMgc2V0KS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoUGlwZWxpbmVQcm9wcyhjbGllbnQ6IEFwaUNsaWVudCwgcGlwZWxpbmVJZDogc3RyaW5nKTogUHJvbWlzZTxGZXRjaGVkUGlwZWxpbmU+IHtcbiAgY29uc3QgY29uZmlnID0gY2xpZW50LmdldENvbmZpZygpO1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KGAke2NvbmZpZy5hcGkucGlwZWxpbmVVcmx9LyR7cGlwZWxpbmVJZH1gKTtcbiAgY29uc3QgcGlwZWxpbmUgPSBleHRyYWN0U2luZ2xlUmVzcG9uc2U8UGlwZWxpbmU+KHJlc3BvbnNlLCAncGlwZWxpbmUnLCAncHJvcHMnKTtcbiAgaWYgKCFwaXBlbGluZT8ucHJvcHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byByZXRyaWV2ZSBwaXBlbGluZSBwcm9wcyBmb3IgSUQ6ICR7cGlwZWxpbmVJZH1gKTtcbiAgfVxuXG4gIGNvbnN0IHByb3BzV2l0aElkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgLi4uKHBpcGVsaW5lLnByb3BzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSxcbiAgICAuLi4ocGlwZWxpbmUub3JnSWQgPyB7IG9yZ0lkOiBwaXBlbGluZS5vcmdJZCB9IDoge30pLFxuICAgIHBpcGVsaW5lSWQ6IHBpcGVsaW5lLmlkIHx8IHBpcGVsaW5lSWQsXG4gIH07XG5cbiAgY29uc3QgcGx1Z2luV2FybmluZ3M6IExvb2t1cFdhcm5pbmdbXSA9IFtdO1xuICBjb25zdCByZXNvbHZlZFBsdWdpbnMgPSBhd2FpdCByZXNvbHZlUGx1Z2luc0ZvclByb3BzKGNsaWVudCwgcHJvcHNXaXRoSWRzLCBwbHVnaW5XYXJuaW5ncyk7XG4gIGlmIChPYmplY3Qua2V5cyhyZXNvbHZlZFBsdWdpbnMpLmxlbmd0aCA+IDApIHtcbiAgICBwcm9wc1dpdGhJZHMucmVzb2x2ZWRQbHVnaW5zID0gcmVzb2x2ZWRQbHVnaW5zO1xuICAgIHByaW50SW5mbygnUHJlLXJlc29sdmVkIHBsdWdpbnMnLCB7IGNvdW50OiBPYmplY3Qua2V5cyhyZXNvbHZlZFBsdWdpbnMpLmxlbmd0aCB9KTtcbiAgfVxuXG4gIGJha2VQbGF0Zm9ybVJlZ2lzdHJ5KHByb3BzV2l0aElkcywgY29uZmlnLmFwaS5iYXNlVXJsKTtcbiAgcmV0dXJuIHsgcGlwZWxpbmUsIHByb3BzV2l0aElkcywgYmFzZVVybDogY29uZmlnLmFwaS5iYXNlVXJsLCBwbHVnaW5XYXJuaW5ncyB9O1xufVxuXG4vKipcbiAqIEFwcGx5IHBhc3MtMSBzZWxmLXJlZmVyZW5jaW5nIHRlbXBsYXRlIHJlc29sdXRpb24gdG8gYHByb3BzV2l0aElkc2AgYW5kIHByaW50IGl0XG4gKiB0byBzdGRvdXQgKHVzZWQgYnkgYHN5bnRoIC0tc2hvdy1yZXNvbHZlZGAgLyBgZGVwbG95IC0tc2hvdy1yZXNvbHZlZGApLiBFeGl0cyB3aXRoXG4gKiBjb2RlIDEgaWYgcmVzb2x1dGlvbiByZXBvcnRzIGVycm9ycy4gYHJlc29sdmVTZWxmUmVmZXJlbmNpbmdgIG11dGF0ZXMgdGhlIG9iamVjdFxuICogaW4gcGxhY2UsIHNvIHRoZSBwcmludGVkIEpTT04gcmVmbGVjdHMgdGhlIGV4cGFuZGVkIHRlbXBsYXRlcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByaW50UmVzb2x2ZWRPckV4aXQocHJvcHNXaXRoSWRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHJlc29sdmVTZWxmUmVmZXJlbmNpbmcgfSA9IGF3YWl0IGltcG9ydCgnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtY29yZScpO1xuICBjb25zdCBzY29wZSA9IHsgbWV0YWRhdGE6IHByb3BzV2l0aElkcy5tZXRhZGF0YSA/PyB7fSwgdmFyczogcHJvcHNXaXRoSWRzLnZhcnMgPz8ge30gfTtcbiAgY29uc3QgaXNUcGwgPSAoZjogc3RyaW5nKSA9PiBmID09PSAncHJvamVjdE5hbWUnIHx8IGYuc3RhcnRzV2l0aCgnbWV0YWRhdGEuJykgfHwgZi5zdGFydHNXaXRoKCd2YXJzLicpO1xuICBjb25zdCByZXN1bHQgPSByZXNvbHZlU2VsZlJlZmVyZW5jaW5nKHByb3BzV2l0aElkcywgc2NvcGUsIGlzVHBsLCAoZjogc3RyaW5nKSA9PiAoaXNUcGwoZikgPyBmIDogbnVsbCkpO1xuICBpZiAocmVzdWx0LmVycm9ycy5sZW5ndGgpIHtcbiAgICBjb25zb2xlLmVycm9yKCdSZXNvbHV0aW9uIGVycm9yczonKTtcbiAgICBmb3IgKGNvbnN0IGUgb2YgcmVzdWx0LmVycm9ycykgY29uc29sZS5lcnJvcihgICBbJHtlLmZpZWxkID8/ICc/J31dICR7ZS5tZXNzYWdlfWApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShwcm9wc1dpdGhJZHMsIG51bGwsIDIpKTtcbn1cbiJdfQ==
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtY29uZmlnLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcGlwZWxpbmUtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFTdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQWN6RTs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsa0JBQWtCLENBQUMsTUFBaUIsRUFBRSxVQUFrQjtJQUM1RSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUEwQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDdEcsTUFBTSxRQUFRLEdBQUcscUJBQXFCLENBQVcsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoRixJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELE1BQU0sWUFBWSxHQUE0QjtRQUM1QyxHQUFJLFFBQVEsQ0FBQyxLQUFpQztRQUM5QyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFD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b3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBTaGFyZWQgcGlwZWxpbmUtY29uZmlnIHJlc29sdXRpb24gdXNlZCBieSBib3RoIGBzeW50aGAgYW5kIGBkZXBsb3lgIHNvIHRoZSB0d29cbiAqIGNvbW1hbmRzIGZldGNoLCBwbHVnaW4tcmVzb2x2ZSwgcmVnaXN0cnktYmFrZSwgYW5kIHRlbXBsYXRlLXByZXZpZXcgaWRlbnRpY2FsbHkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBMb29rdXBUb29sY2hhaW4sIExvb2t1cFdhcm5pbmcgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1jb3JlJztcbmltcG9ydCB0eXBlIHsgQXBpQ2xpZW50IH0gZnJvbSAnLi9hcGktY2xpZW50LmpzJztcbmltcG9ydCB7IHByaW50SW5mbyB9IGZyb20gJy4vb3V0cHV0LXV0aWxzLmpzJztcbmltcG9ydCB7IHJlc29sdmVQbHVnaW5zRm9yUHJvcHMgfSBmcm9tICcuL3BsdWdpbi1yZXNvbHZlci5qcyc7XG5pbXBvcnQgeyBiYWtlUGxhdGZvcm1SZWdpc3RyeSB9IGZyb20gJy4vcmVnaXN0cnkuanMnO1xuaW1wb3J0IHsgZXh0cmFjdFNpbmdsZVJlc3BvbnNlIH0gZnJvbSAnLi9yZXNwb25zZS11dGlscy5qcyc7XG5pbXBvcnQgeyBhc3NlcnRPbmVSZWxlYXNlLCByZXNvbHZlQm9vdHN0cmFwSW1hZ2UgfSBmcm9tICcuL3Rvb2xjaGFpbi5qcyc7XG5pbXBvcnQgdHlwZSB7IFBpcGVsaW5lIH0gZnJvbSAnLi4vdHlwZXMvcGlwZWxpbmUuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZldGNoZWRQaXBlbGluZSB7XG4gIC8qKiBUaGUgcmF3IHBpcGVsaW5lIHJlY29yZCAoaWQvb3JnL3Byb2plY3QvZmxhZ3MpIGFzIHJldHVybmVkIGJ5IHRoZSBwbGF0Zm9ybS4gKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmU6IFBpcGVsaW5lO1xuICAvKiogcHJvcHMgKyBwaXBlbGluZUlkICgrIG9yZ0lkKSArIHJlc29sdmVkUGx1Z2lucyArIHJlc29sdmVkQm9vdHN0cmFwLCB3aXRoIHRoZSByZWdpc3RyeSBwdWxsLWhvc3QgYmFrZWQgaW4uICovXG4gIHJlYWRvbmx5IHByb3BzV2l0aElkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKiBUaGUgcmVzb2x2ZWQgcGxhdGZvcm0gYmFzZSBVUkwgdGhlIGNvbmZpZyB3YXMgZmV0Y2hlZCBhZ2FpbnN0LiAqL1xuICByZWFkb25seSBiYXNlVXJsOiBzdHJpbmc7XG4gIC8qKiBFdmVyeSBncmFkZWQgbG9va3VwIHdhcm5pbmcgKGFscmVhZHkgcHJpbnRlZCkg4oCUIGZvciB0aGUgZW5kLW9mLXJ1biBzdW1tYXJ5LiAqL1xuICByZWFkb25seSBwbHVnaW5XYXJuaW5nczogcmVhZG9ubHkgTG9va3VwV2FybmluZ1tdO1xufVxuXG4vKipcbiAqIEZldGNoIGEgcGlwZWxpbmUgYnkgaWQgYW5kIGJ1aWxkIHRoZSBzeW50aC9kZXBsb3kgcHJvcHM6XG4gKiAgLSBHRVQgdGhlIHBpcGVsaW5lIGFuZCB2YWxpZGF0ZSBpdCBoYXMgYHByb3BzYCxcbiAqICAtIGFzc2VtYmxlIGBwcm9wc1dpdGhJZHNgIChwcm9wcyArIHBpcGVsaW5lSWQgKyBvcmdJZCksXG4gKiAgLSBwcmUtcmVzb2x2ZSBwbHVnaW5zIHNvIHRoZSB0ZW1wbGF0ZSBzaGlwcyByZWFsIENvZGVCdWlsZCBpbWFnZSBVUklzXG4gKiAgICAob3RoZXJ3aXNlIHRoZSBzdGVwcyBmYWxsIGJhY2sgdG8gdGhlIGRlcGxveS10aW1lIGxvb2t1cCBwYXRoKSxcbiAqICAtIHJlc29sdmUgdGhlIHRvb2xjaGFpbiByZWxlYXNlJ3MgcGlwZWxpbmUtYm9vdHN0cmFwIChGQVRBTCBvbiBhbnlcbiAqICAgIGZhaWx1cmUsIEQyKSB3aXRoIHRoZSBzYW1lIGB0b29sY2hhaW4ucmVsZWFzZWAgcGluIGEgbWFuYWdlZCBjZGstc3ludGhcbiAqICAgIHJlZmVyZW5jZSBzZW50LCBhbmQgY2hlY2sgYm90aCBoYWx2ZXMgYXJlIG9uZSByZWxlYXNlLFxuICogIC0gYmFrZSB0aGUgcmVnaXN0cnkgcHVsbC1ob3N0IGZyb20gdGhlIHBsYXRmb3JtIFVSTCAobm8tb3Agd2hlblxuICogICAgSU1BR0VfUkVHSVNUUllfUFVMTF9IT1NUIGlzIHNldCkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaFBpcGVsaW5lUHJvcHMoY2xpZW50OiBBcGlDbGllbnQsIHBpcGVsaW5lSWQ6IHN0cmluZyk6IFByb21pc2U8RmV0Y2hlZFBpcGVsaW5lPiB7XG4gIGNvbnN0IGNvbmZpZyA9IGNsaWVudC5nZXRDb25maWcoKTtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PFJlY29yZDxzdHJpbmcsIHVua25vd24+PihgJHtjb25maWcuYXBpLnBpcGVsaW5lVXJsfS8ke3BpcGVsaW5lSWR9YCk7XG4gIGNvbnN0IHBpcGVsaW5lID0gZXh0cmFjdFNpbmdsZVJlc3BvbnNlPFBpcGVsaW5lPihyZXNwb25zZSwgJ3BpcGVsaW5lJywgJ3Byb3BzJyk7XG4gIGlmICghcGlwZWxpbmU/LnByb3BzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcmV0cmlldmUgcGlwZWxpbmUgcHJvcHMgZm9yIElEOiAke3BpcGVsaW5lSWR9YCk7XG4gIH1cblxuICBjb25zdCBwcm9wc1dpdGhJZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIC4uLihwaXBlbGluZS5wcm9wcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiksXG4gICAgLi4uKHBpcGVsaW5lLm9yZ0lkID8geyBvcmdJZDogcGlwZWxpbmUub3JnSWQgfSA6IHt9KSxcbiAgICBwaXBlbGluZUlkOiBwaXBlbGluZS5pZCB8fCBwaXBlbGluZUlkLFxuICB9O1xuXG4gIGNvbnN0IHBsdWdpbldhcm5pbmdzOiBMb29rdXBXYXJuaW5nW10gPSBbXTtcbiAgY29uc3QgbWFuYWdlZFRvb2xjaGFpbnM6IFJlY29yZDxzdHJpbmcsIExvb2t1cFRvb2xjaGFpbj4gPSB7fTtcbiAgY29uc3QgcmVzb2x2ZWRQbHVnaW5zID0gYXdhaXQgcmVzb2x2ZVBsdWdpbnNGb3JQcm9wcyhjbGllbnQsIHByb3BzV2l0aElkcywgcGx1Z2luV2FybmluZ3MsIG1hbmFnZWRUb29sY2hhaW5zKTtcbiAgaWYgKE9iamVjdC5rZXlzKHJlc29sdmVkUGx1Z2lucykubGVuZ3RoID4gMCkge1xuICAgIHByb3BzV2l0aElkcy5yZXNvbHZlZFBsdWdpbnMgPSByZXNvbHZlZFBsdWdpbnM7XG4gICAgcHJpbnRJbmZvKCdQcmUtcmVzb2x2ZWQgcGx1Z2lucycsIHsgY291bnQ6IE9iamVjdC5rZXlzKHJlc29sdmVkUGx1Z2lucykubGVuZ3RoIH0pO1xuICB9XG4gIGNvbnN0IHJlc29sdmVkQm9vdHN0cmFwID0gYXdhaXQgcmVzb2x2ZUJvb3RzdHJhcEltYWdlKGNsaWVudCwgcHJvcHNXaXRoSWRzLCBwbHVnaW5XYXJuaW5ncyk7XG4gIGFzc2VydE9uZVJlbGVhc2UocmVzb2x2ZWRCb290c3RyYXAsIG1hbmFnZWRUb29sY2hhaW5zKTtcbiAgcHJvcHNXaXRoSWRzLnJlc29sdmVkQm9vdHN0cmFwID0gcmVzb2x2ZWRCb290c3RyYXA7XG4gIHByaW50SW5mbygnVG9vbGNoYWluIHJlbGVhc2UnLCB7IHJlbGVhc2U6IHJlc29sdmVkQm9vdHN0cmFwLnRvb2xjaGFpbi5yZWxlYXNlVmVyc2lvbiwgdmlhOiByZXNvbHZlZEJvb3RzdHJhcC50b29sY2hhaW4ucmVzb2x2ZWRWaWEgfSk7XG5cbiAgYmFrZVBsYXRmb3JtUmVnaXN0cnkocHJvcHNXaXRoSWRzLCBjb25maWcuYXBpLmJhc2VVcmwpO1xuICByZXR1cm4geyBwaXBlbGluZSwgcHJvcHNXaXRoSWRzLCBiYXNlVXJsOiBjb25maWcuYXBpLmJhc2VVcmwsIHBsdWdpbldhcm5pbmdzIH07XG59XG5cbi8qKlxuICogQXBwbHkgcGFzcy0xIHNlbGYtcmVmZXJlbmNpbmcgdGVtcGxhdGUgcmVzb2x1dGlvbiB0byBgcHJvcHNXaXRoSWRzYCBhbmQgcHJpbnQgaXRcbiAqIHRvIHN0ZG91dCAodXNlZCBieSBgc3ludGggLS1zaG93LXJlc29sdmVkYCAvIGBkZXBsb3kgLS1zaG93LXJlc29sdmVkYCkuIEV4aXRzIHdpdGhcbiAqIGNvZGUgMSBpZiByZXNvbHV0aW9uIHJlcG9ydHMgZXJyb3JzLiBgcmVzb2x2ZVNlbGZSZWZlcmVuY2luZ2AgbXV0YXRlcyB0aGUgb2JqZWN0XG4gKiBpbiBwbGFjZSwgc28gdGhlIHByaW50ZWQgSlNPTiByZWZsZWN0cyB0aGUgZXhwYW5kZWQgdGVtcGxhdGVzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJpbnRSZXNvbHZlZE9yRXhpdChwcm9wc1dpdGhJZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgcmVzb2x2ZVNlbGZSZWZlcmVuY2luZyB9ID0gYXdhaXQgaW1wb3J0KCdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1jb3JlJyk7XG4gIGNvbnN0IHNjb3BlID0geyBtZXRhZGF0YTogcHJvcHNXaXRoSWRzLm1ldGFkYXRhID8/IHt9LCB2YXJzOiBwcm9wc1dpdGhJZHMudmFycyA/PyB7fSB9O1xuICBjb25zdCBpc1RwbCA9IChmOiBzdHJpbmcpID0+IGYgPT09ICdwcm9qZWN0TmFtZScgfHwgZi5zdGFydHNXaXRoKCdtZXRhZGF0YS4nKSB8fCBmLnN0YXJ0c1dpdGgoJ3ZhcnMuJyk7XG4gIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVTZWxmUmVmZXJlbmNpbmcocHJvcHNXaXRoSWRzLCBzY29wZSwgaXNUcGwsIChmOiBzdHJpbmcpID0+IChpc1RwbChmKSA/IGYgOiBudWxsKSk7XG4gIGlmIChyZXN1bHQuZXJyb3JzLmxlbmd0aCkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1Jlc29sdXRpb24gZXJyb3JzOicpO1xuICAgIGZvciAoY29uc3QgZSBvZiByZXN1bHQuZXJyb3JzKSBjb25zb2xlLmVycm9yKGAgIFske2UuZmllbGQgPz8gJz8nfV0gJHtlLm1lc3NhZ2V9YCk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG4gIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHByb3BzV2l0aElkcywgbnVsbCwgMikpO1xufVxuIl19
@@ -1,5 +1,18 @@
1
- import { type LookupWarning } from '@pipeline-builder/pipeline-core';
1
+ import { type LookupToolchain, type LookupWarning } from '@pipeline-builder/pipeline-core';
2
2
  import { ApiClient } from './api-client.js';
3
+ /**
4
+ * Whether a reference names a managed toolchain half (`cdk-synth`): the
5
+ * system org's, never a listing — so no publisher. It resolves through the
6
+ * toolchain release (the pipeline's `toolchain.release` pin, else the org /
7
+ * canary / platform default), never by its own version.
8
+ */
9
+ export declare function isManagedToolchainRef(ref: {
10
+ name?: string;
11
+ publisher?: string;
12
+ filter?: Record<string, unknown>;
13
+ }): boolean;
14
+ /** The plugin service's error code on a refused answer, when it carries one. */
15
+ export declare function serviceErrorCode(err: unknown): string | null;
3
16
  /** One plugin the synth could not use, as {@link PluginResolutionError} reports it. */
4
17
  export interface PluginRefusal {
5
18
  /** `[<publisher>/]<name>` of the reference. */
@@ -26,14 +39,16 @@ export declare function printLookupWarningSummary(warnings: readonly LookupWarni
26
39
  * the deploy-time custom resource Lambda uses. Returning the full Plugin
27
40
  * record at synth time is what allows the resulting CFN template to ship
28
41
  * with real CodeBuild image URIs (`<host>/<ns>/<name>:<version>`) rather than
29
- * the `aws/codebuild/standard:7.0` fallback that the synth-time token path
30
- * forces.
42
+ * the pipeline's default image that the synth-time token path forces.
31
43
  *
32
44
  * Failures are non-fatal: a missing plugin or unreachable API logs a warning
33
45
  * and falls through to the deploy-time custom resource path so partial
34
46
  * platform outages don't block synth/deploy. The exceptions abort the synth:
35
- * the {@link FATAL_LOOKUP_CODES} refusals, and an exact version pin that does
36
- * not exist.
47
+ * the {@link FATAL_LOOKUP_CODES} refusals, an exact version pin that does
48
+ * not exist, and ANY failure on a managed toolchain reference (`cdk-synth`),
49
+ * which has no deploy-time fallback (D2). A managed reference sends the
50
+ * pipeline's `toolchain.release` as `releasePin` — the same pin the bootstrap
51
+ * lookup sends — and its resolved release lands in `toolchainSink` by key.
37
52
  *
38
53
  * Every reference is looked up before anything is thrown, and ALL fatal
39
54
  * refusals are reported together. Stopping at the first meant a pipeline with
@@ -52,5 +67,5 @@ export declare function printLookupWarningSummary(warnings: readonly LookupWarni
52
67
  *
53
68
  * Keyed by `alias || name` to match `PluginLookup.plugin()`.
54
69
  */
55
- export declare function resolvePluginsForProps(client: ApiClient, props: Record<string, unknown>, warningSink?: LookupWarning[]): Promise<Record<string, unknown>>;
70
+ export declare function resolvePluginsForProps(client: ApiClient, props: Record<string, unknown>, warningSink?: LookupWarning[], toolchainSink?: Record<string, LookupToolchain>): Promise<Record<string, unknown>>;
56
71
  //# sourceMappingURL=plugin-resolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-resolver.d.ts","sources":["../../src/utils/plugin-resolver.ts"],"names":[],"mappings":"AAIA,OAAO,EAC6D,KAAK,aAAa,EAErF,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAqH5C,uFAAuF;AACvF,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,oFAAoF;IACpF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAClC,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE;IAAvD,YAAqB,QAAQ,EAAE,SAAS,aAAa,EAAE,EAKtD;CACF;AAmBD,uEAAuE;AACvE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAG9E;AAED,4FAA4F;AAC5F,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,GAAG,IAAI,CAOlF;AASD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,WAAW,CAAC,EAAE,aAAa,EAAE,GAC5B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAqElC"}
1
+ {"version":3,"file":"plugin-resolver.d.ts","sources":["../../src/utils/plugin-resolver.ts"],"names":[],"mappings":"AAIA,OAAO,EAC6D,KAAK,eAAe,EAAE,KAAK,aAAa,EAE3G,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAqH5C;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,OAAO,CAE3H;AAED,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAI5D;AAED,uFAAuF;AACvF,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,oFAAoF;IACpF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAClC,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE;IAAvD,YAAqB,QAAQ,EAAE,SAAS,aAAa,EAAE,EAKtD;CACF;AAmBD,uEAAuE;AACvE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAG9E;AAED,4FAA4F;AAC5F,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,GAAG,IAAI,CAOlF;AASD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,WAAW,CAAC,EAAE,aAAa,EAAE,EAC7B,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAC9C,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAoFlC"}