@pipeline-builder/pipeline-manager 4.1.8 → 4.1.10

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 (38) hide show
  1. package/dist/boilerplate.js +3 -2
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +5 -4
  4. package/dist/commands/audit-tokens.js +3 -3
  5. package/dist/commands/create-pipeline.d.ts.map +1 -1
  6. package/dist/commands/create-pipeline.js +4 -3
  7. package/dist/commands/instantiate-template.d.ts.map +1 -1
  8. package/dist/commands/instantiate-template.js +3 -2
  9. package/dist/commands/provision.d.ts +2 -4
  10. package/dist/commands/provision.d.ts.map +1 -1
  11. package/dist/commands/provision.js +3 -14
  12. package/dist/commands/register.d.ts.map +1 -1
  13. package/dist/commands/register.js +3 -2
  14. package/dist/commands/store-token.d.ts.map +1 -1
  15. package/dist/commands/store-token.js +3 -4
  16. package/dist/commands/upload-plugin.d.ts.map +1 -1
  17. package/dist/commands/upload-plugin.js +3 -2
  18. package/dist/commands/version.d.ts.map +1 -1
  19. package/dist/commands/version.js +3 -2
  20. package/dist/lambda/token-renew-handler.d.ts.map +1 -1
  21. package/dist/lambda/token-renew-handler.js +9 -7
  22. package/dist/templates/token-renew-stack.json +0 -5
  23. package/dist/utils/audit-log.d.ts.map +1 -1
  24. package/dist/utils/audit-log.js +3 -2
  25. package/dist/utils/config-loader.d.ts.map +1 -1
  26. package/dist/utils/config-loader.js +3 -2
  27. package/dist/utils/credential-store.d.ts.map +1 -1
  28. package/dist/utils/credential-store.js +3 -2
  29. package/dist/utils/deploy-runner.d.ts.map +1 -1
  30. package/dist/utils/deploy-runner.js +6 -5
  31. package/dist/utils/output-utils.d.ts.map +1 -1
  32. package/dist/utils/output-utils.js +4 -3
  33. package/dist/utils/plugin-resolver.d.ts.map +1 -1
  34. package/dist/utils/plugin-resolver.js +3 -2
  35. package/dist/utils/service-account.d.ts +0 -24
  36. package/dist/utils/service-account.d.ts.map +1 -1
  37. package/dist/utils/service-account.js +27 -2
  38. package/package.json +16 -4
@@ -1,5 +1,6 @@
1
1
  // Copyright 2026 Pipeline Builder Contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
+ import { errorMessage } from '@pipeline-builder/api-core';
3
4
  import { Command } from 'commander';
4
5
  import {} from '../types/index.js';
5
6
  import { createAuthenticatedClient, printCommandHeader, printSslWarning, withRegionOption, withSslOptions } from '../utils/command-utils.js';
@@ -152,9 +153,9 @@ async function postRegistration(client, pipelineUrl, payload, pipelineId) {
152
153
  catch (err) {
153
154
  printWarning('Registration failed', {
154
155
  pipelineId,
155
- error: err instanceof Error ? err.message : String(err),
156
+ error: errorMessage(err),
156
157
  });
157
158
  return false;
158
159
  }
159
160
  }
160
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBd0MsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdJLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUgsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLGtCQUFrQixHQUVuQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRW5FOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxPQUFnQjtJQUN2QyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsT0FBTztTQUNwQyxPQUFPLENBQUMsVUFBVSxDQUFDO1NBQ25CLFdBQVcsQ0FBQywwRkFBMEYsQ0FBQztTQUN2RyxNQUFNLENBQUMsZUFBZSxFQUFFLG1EQUFtRCxDQUFDLENBQUM7U0FDN0UsTUFBTSxDQUFDLFlBQVksRUFBRSx5REFBeUQsQ0FBQyxDQUFDO1NBQ2hGLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDeEIsTUFBTSxXQUFXLEdBQUcsa0JBQWtC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QUssRUFBRSxXQUFXLENBQUMsV0FBVyxFQUFFO2dCQUMxQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUs7Z0JBQzNCLElBQUksRUFBRSxLQUFLO2dCQUNYLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFO2FBQ3RFLENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVEOzs7R0FHRztBQUNILEtBQUssVUFBVSxnQkFBZ0IsQ0FDN0IsTUFBb0QsRUFDcEQsV0FBbUIsRUFDbkIsT0FBd0IsRUFDeEIsVUFBa0I7SUFFbEIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsV0FBVyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdEQsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDeEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLFlBQVksQ0FBQyxxQkFBcUIsRUFBRTtZQUNsQyxVQUFVO1lBQ1YsS0FBSyxFQUFFLEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7U0FDeEQsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IHR5cGUgUGlwZWxpbmUsIHR5cGUgUGlwZWxpbmVSZXNwb25zZSB9IGZyb20gJy4uL3R5cGVzL2luZGV4LmpzJztcbmltcG9ydCB7IGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnQsIHByaW50Q29tbWFuZEhlYWRlciwgcHJpbnRTc2xXYXJuaW5nLCB3aXRoUmVnaW9uT3B0aW9uLCB3aXRoU3NsT3B0aW9ucyB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludEVycm9yLCBwcmludEluZm8sIHByaW50S2V5VmFsdWUsIHByaW50U2VjdGlvbiwgcHJpbnRTdWNjZXNzLCBwcmludFdhcm5pbmcgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMuanMnO1xuaW1wb3J0IHtcbiAgYnVpbGRSZWdpc3RyeVBheWxvYWQsXG4gIGNsZWFyUGVuZGluZ0ludGVudCxcbiAgcmVhZFBlbmRpbmdJbnRlbnRzLFxuICB3cml0ZVBlbmRpbmdJbnRlbnQsXG4gIHR5cGUgUmVnaXN0cnlQYXlsb2FkLFxufSBmcm9tICcuLi91dGlscy9yZWdpc3RyeS5qcyc7XG5pbXBvcnQgeyBleHRyYWN0U2luZ2xlUmVzcG9uc2UgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS11dGlscy5qcyc7XG5cbi8qKlxuICogUmVnaXN0ZXJzIHRoZSBgcmVnaXN0ZXJgIGNvbW1hbmQgd2l0aCB0aGUgQ0xJIHByb2dyYW0uXG4gKlxuICogVHdvIHB1cnBvc2VzIOKAlCBib3RoIHRhcmdldGVkIGF0IHJlY292ZXJpbmcgZnJvbSBhIGRlcGxveSB3aG9zZSByZWdpc3RyYXRpb25cbiAqIHN0ZXAgZGlkbid0IGxhbmQ6XG4gKlxuICogICAxLiBFeHBsaWNpdCByZS1yZWdpc3RlciAoYC0taWQgPHBpcGVsaW5lSWQ+YCkg4oCUIHJlY29tcHV0ZXMgdGhlIEFSTiBmcm9tXG4gKiAgICAgIFNUUyArIHJlZ2lvbiBhbmQgUE9TVHMgaXQgdG8gdGhlIHBsYXRmb3JtLiBVc2VmdWwgd2hlbiB0aGUgcGxhdGZvcm1cbiAqICAgICAgd2FzIHVucmVhY2hhYmxlIGR1cmluZyBgZGVwbG95YCwgd2hlbiB0aGUgcmVnaXN0cnkgcm93IHdhcyBkZWxldGVkIGJ5XG4gKiAgICAgIG1pc3Rha2UsIG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIGEgZGVwbG95ZWQgc3RhY2sgaGFzIG5vIHJlZ2lzdHJ5IHJvdy5cbiAqXG4gKiAgIDIuIERyYWluIHBlbmRpbmcgaW50ZW50cyAoZXZlcnkgaW52b2NhdGlvbikg4oCUIGBkZXBsb3lgIHdyaXRlcyBhIGxvY2FsXG4gKiAgICAgIGZpbGUgdW5kZXIgYH4vLnBpcGVsaW5lLW1hbmFnZXIvcGVuZGluZy1yZWdpc3RyYXRpb25zL2Agd2hlbmV2ZXIgaXRzXG4gKiAgICAgIHJlZ2lzdHJhdGlvbiBQT1NUIGZhaWxzLiBFYWNoIGByZWdpc3RlcmAgaW52b2NhdGlvbiB0cmllcyB0byBkcmFpblxuICogICAgICBldmVyeSBzdWNoIGZpbGUuIE9uIHN1Y2Nlc3MgdGhlIGZpbGUgaXMgZGVsZXRlZDsgb24gZmFpbHVyZSBpdCBzdGF5c1xuICogICAgICBhbmQgc3VyZmFjZXMgYXMgYSB3YXJuaW5nLlxuICpcbiAqIEZsYWdzOlxuICogICAtIGAtLWlkIDxwaXBlbGluZUlkPmAg4oCUIHJlLXJlZ2lzdGVyIGEgc3BlY2lmaWMgcGlwZWxpbmUgYnkgSURcbiAqICAgLSBgLS1yZWdpb24gPHJlZ2lvbj5gIOKAlCBBV1MgcmVnaW9uIChkZWZhdWx0OiBBV1NfUkVHSU9OIGVudiAvIHVzLWVhc3QtMSlcbiAqICAgLSBgLS1uby1kcmFpbmAg4oCUIHNraXAgZHJhaW5pbmcgcGVuZGluZyBpbnRlbnRzXG4gKlxuICogRXhpdCBjb2RlczpcbiAqICAgLSAwOiByZXF1ZXN0ZWQgcmVnaXN0cmF0aW9uIHN1Y2NlZWRlZCBBTkQgbm8gcGVuZGluZyBpbnRlbnRzIHJlbWFpblxuICogICAtIDE6IGF0IGxlYXN0IG9uZSByZWdpc3RyYXRpb24gKGV4cGxpY2l0IG9yIHBlbmRpbmcpIHN0aWxsIGZhaWxlZFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBiYXNoXG4gKiAjIFJldHJ5IGEgcmVnaXN0cmF0aW9uIHRoYXQgZmFpbGVkIGR1cmluZyBkZXBsb3lcbiAqIHBpcGVsaW5lLW1hbmFnZXIgcGlwZWxpbmUgcmVnaXN0ZXIgLS1pZCBwaXBlLTEyM1xuICpcbiAqICMgSnVzdCBkcmFpbiBwZW5kaW5nIGludGVudHMgZnJvbSBkaXNrLCBubyBzcGVjaWZpYyByZWdpc3RyYXRpb25cbiAqIHBpcGVsaW5lLW1hbmFnZXIgcGlwZWxpbmUgcmVnaXN0ZXJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXIocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICB3aXRoU3NsT3B0aW9ucyh3aXRoUmVnaW9uT3B0aW9uKHByb2dyYW1cbiAgICAuY29tbWFuZCgncmVnaXN0ZXInKVxuICAgIC5kZXNjcmlwdGlvbignUmVnaXN0ZXIgYSBkZXBsb3llZCBwaXBlbGluZSBBUk4gd2l0aCB0aGUgcGxhdGZvcm0gKHJldHJ5IHBhdGggZm9yIGZhaWxlZCByZWdpc3RyYXRpb25zKScpXG4gICAgLm9wdGlvbignLWksIC0taWQgPGlkPicsICdQaXBlbGluZSBJRCB0byByZWdpc3RlciAocmUtZGVyaXZlcyBBUk4gZnJvbSBTVFMpJykpXG4gICAgLm9wdGlvbignLS1uby1kcmFpbicsICdTa2lwIGRyYWluaW5nIHBlbmRpbmcgaW50ZW50cyBmcm9tIHByaW9yIGZhaWxlZCBkZXBsb3lzJykpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgZXhlY3V0aW9uSWQgPSBwcmludENvbW1hbmRIZWFkZXIoJ1JlZ2lzdGVyIFBpcGVsaW5lJyk7XG4gICAgICBwcmludFNzbFdhcm5pbmcob3B0aW9ucy52ZXJpZnlTc2wpO1xuXG4gICAgICBsZXQgYW55RmFpbGVkID0gZmFsc2U7XG4gICAgICBsZXQgcmVnaXN0ZXJlZENvdW50ID0gMDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gY3JlYXRlQXV0aGVudGljYXRlZENsaWVudChvcHRpb25zKTtcbiAgICAgICAgY29uc3QgcGlwZWxpbmVVcmwgPSBjbGllbnQuZ2V0Q29uZmlnKCkuYXBpLnBpcGVsaW5lVXJsO1xuXG4gICAgICAgIC8vIOKUgOKUgCBEcmFpbiBwZW5kaW5nIGludGVudHMgZmlyc3Qg4pSA4pSAXG4gICAgICAgIC8vIFdlIGRyYWluIGJlZm9yZSB0aGUgZXhwbGljaXQgcmVnaXN0cmF0aW9uIHNvIGEgcXVldWVkIGZhaWx1cmUgZm9yXG4gICAgICAgIC8vIHRoZSBzYW1lIHBpcGVsaW5lSWQgaXMgcmVwbGFjZWQgKG5vdCBkb3VibGUtYXBwbGllZCkgYnkgdGhlIGZyZXNoXG4gICAgICAgIC8vIHBheWxvYWQgYmVsb3cuXG4gICAgICAgIGNvbnN0IGRyYWluZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuZHJhaW4gIT09IGZhbHNlKSB7XG4gICAgICAgICAgY29uc3QgaW50ZW50cyA9IGF3YWl0IHJlYWRQZW5kaW5nSW50ZW50cygpO1xuICAgICAgICAgIGlmIChpbnRlbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHByaW50U2VjdGlvbignRHJhaW5pbmcgcGVuZGluZyBpbnRlbnRzJyk7XG4gICAgICAgICAgICBwcmludEluZm8oJ0ZvdW5kIHBlbmRpbmcgcmVnaXN0cmF0aW9ucyBmcm9tIHByaW9yIGZhaWxlZCBkZXBsb3lzJywge1xuICAgICAgICAgICAgICBjb3VudDogU3RyaW5nKGludGVudHMubGVuZ3RoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpbnRlbnQgb2YgaW50ZW50cykge1xuICAgICAgICAgICAgICAvLyBTa2lwIHRoZSBleHBsaWNpdCBwaXBlbGluZSDigJQgd2UnbGwgcmUtYnVpbGQgYSBmcmVzaCBwYXlsb2FkIGJlbG93LlxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5pZCAmJiBpbnRlbnQucGlwZWxpbmVJZCA9PT0gb3B0aW9ucy5pZCkgY29udGludWU7XG4gICAgICAgICAgICAgIGNvbnN0IG9rID0gYXdhaXQgcG9zdFJlZ2lzdHJhdGlvbihjbGllbnQsIHBpcGVsaW5lVXJsLCBpbnRlbnQsIGludGVudC5waXBlbGluZUlkKTtcbiAgICAgICAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgY2xlYXJQZW5kaW5nSW50ZW50KGludGVudC5waXBlbGluZUlkKTtcbiAgICAgICAgICAgICAgICBkcmFpbmVkLmFkZChpbnRlbnQucGlwZWxpbmVJZCk7XG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJlZENvdW50Kys7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYW55RmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKUgOKUgCBFeHBsaWNpdCByZWdpc3RyYXRpb24g4pSA4pSAXG4gICAgICAgIGlmIChvcHRpb25zLmlkKSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdSZS1yZWdpc3RlcmluZyBwaXBlbGluZScpO1xuICAgICAgICAgIGNvbnN0IHBpcGVsaW5lUmVzID0gYXdhaXQgY2xpZW50LmdldDxQaXBlbGluZVJlc3BvbnNlPihgJHtwaXBlbGluZVVybH0vJHtvcHRpb25zLmlkfWApO1xuICAgICAgICAgIGNvbnN0IHBpcGVsaW5lID0gZXh0cmFjdFNpbmdsZVJlc3BvbnNlPFBpcGVsaW5lPihwaXBlbGluZVJlcywgJ3BpcGVsaW5lJywgJ2lkJyk7XG4gICAgICAgICAgaWYgKCFwaXBlbGluZSkge1xuICAgICAgICAgICAgcHJpbnRFcnJvcignUGlwZWxpbmUgbm90IGZvdW5kIGluIHBsYXRmb3JtJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHBpcGVsaW5lIHJldHVybmVkIGZvciBpZCAke29wdGlvbnMuaWR9YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFwaXBlbGluZS5vcmdJZCkge1xuICAgICAgICAgICAgcHJpbnRFcnJvcignUGlwZWxpbmUgaGFzIG5vIG9yZ0lkIOKAlCBjYW5ub3QgcmVnaXN0ZXInKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGlwZWxpbmUgJHtwaXBlbGluZS5pZH0gaXMgbWlzc2luZyBvcmdJZGApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgYnVpbGRSZWdpc3RyeVBheWxvYWQoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiBwaXBlbGluZS5pZCxcbiAgICAgICAgICAgICAgb3JnSWQ6IHBpcGVsaW5lLm9yZ0lkLFxuICAgICAgICAgICAgICBwaXBlbGluZU5hbWU6IHBpcGVsaW5lLnBpcGVsaW5lTmFtZSxcbiAgICAgICAgICAgICAgcHJvamVjdDogcGlwZWxpbmUucHJvamVjdCxcbiAgICAgICAgICAgICAgb3JnYW5pemF0aW9uOiBwaXBlbGluZS5vcmdhbml6YXRpb24sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3B0aW9ucy5yZWdpb24sXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIENsZWFyIGFueSBzdGFsZSBpbnRlbnQgZm9yIHRoaXMgcGlwZWxpbmVJZCBiZWZvcmUgcmV0cnlpbmcgc28gd2VcbiAgICAgICAgICAvLyBkb24ndCBsZWF2ZSBhIGR1cGxpY2F0ZSBmaWxlIGJlaGluZCBvbiBzdWNjZXNzLlxuICAgICAgICAgIGF3YWl0IGNsZWFyUGVuZGluZ0ludGVudChwYXlsb2FkLnBpcGVsaW5lSWQpO1xuXG4gICAgICAgICAgY29uc3Qgb2sgPSBhd2FpdCBwb3N0UmVnaXN0cmF0aW9uKGNsaWVudCwgcGlwZWxpbmVVcmwsIHBheWxvYWQsIHBheWxvYWQucGlwZWxpbmVJZCk7XG4gICAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgICByZWdpc3RlcmVkQ291bnQrKztcbiAgICAgICAgICAgIHByaW50U3VjY2VzcygnUGlwZWxpbmUgcmVnaXN0ZXJlZCBmb3IgZXZlbnQgcmVwb3J0aW5nJywge1xuICAgICAgICAgICAgICBwaXBlbGluZUlkOiBwYXlsb2FkLnBpcGVsaW5lSWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYW55RmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBhd2FpdCB3cml0ZVBlbmRpbmdJbnRlbnQocGF5bG9hZCk7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoJ1JlZ2lzdHJhdGlvbiBmYWlsZWQ7IGludGVudCBzYXZlZCBmb3IgcmV0cnknLCB7IGludGVudDogcGF0aCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwcmludFNlY3Rpb24oJ1N1bW1hcnknKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgJ1JlZ2lzdGVyZWQnOiBTdHJpbmcocmVnaXN0ZXJlZENvdW50KSxcbiAgICAgICAgICAnRHJhaW5lZCBmcm9tIHF1ZXVlJzogU3RyaW5nKGRyYWluZWQuc2l6ZSksXG4gICAgICAgICAgJ1N0YXR1cyc6IGFueUZhaWxlZCA/ICdTb21lIHJlZ2lzdHJhdGlvbnMgc3RpbGwgcGVuZGluZycgOiAnQWxsIGNsZWFyJyxcbiAgICAgICAgICAnRXhlY3V0aW9uIElEJzogZXhlY3V0aW9uSWQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHByb2Nlc3MuZXhpdChhbnlGYWlsZWQgPyAxIDogMCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuQVBJX1JFUVVFU1QsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogZmFsc2UsXG4gICAgICAgICAgY29udGV4dDogeyBjb21tYW5kOiAncmVnaXN0ZXInLCBleGVjdXRpb25JZCwgcGlwZWxpbmVJZDogb3B0aW9ucy5pZCB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgIH0pO1xufVxuXG4vKipcbiAqIFBPU1QgYSByZWdpc3RyYXRpb24gcGF5bG9hZCB0byB0aGUgcGxhdGZvcm0uIE9uIGZhaWx1cmUsIHRoZSBjYWxsZXIgZGVjaWRlc1xuICogd2hldGhlciB0byB3cml0ZS9wcmVzZXJ2ZSBhIHBlbmRpbmcgaW50ZW50IOKAlCB0aGlzIGhlbHBlciBqdXN0IHJlcG9ydHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBvc3RSZWdpc3RyYXRpb24oXG4gIGNsaWVudDogUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudD4sXG4gIHBpcGVsaW5lVXJsOiBzdHJpbmcsXG4gIHBheWxvYWQ6IFJlZ2lzdHJ5UGF5bG9hZCxcbiAgcGlwZWxpbmVJZDogc3RyaW5nLFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgYXdhaXQgY2xpZW50LnBvc3QoYCR7cGlwZWxpbmVVcmx9L3JlZ2lzdHJ5YCwgcGF5bG9hZCk7XG4gICAgcHJpbnRJbmZvKCdSZWdpc3RlcmVkJywgeyBwaXBlbGluZUlkIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBwcmludFdhcm5pbmcoJ1JlZ2lzdHJhdGlvbiBmYWlsZWQnLCB7XG4gICAgICBwaXBlbGluZUlkLFxuICAgICAgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQXdDLE1BQU0sbUJBQW1CLENBQUM7QUFDekUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3SSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFILE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixrQkFBa0IsR0FFbkIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVuRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtDRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQUMsT0FBZ0I7SUFDdkMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE9BQU87U0FDcEMsT0FBTyxDQUFDLFVBQVUsQ0FBQztTQUNuQixXQUFXLENBQUMsMEZBQTBGLENBQUM7U0FDdkcsTUFBTSxDQUFDLGVBQWUsRUFBRSxtREFBbUQsQ0FBQyxDQUFDO1NBQzdFLE1BQU0sQ0FBQyxZQUFZLEVBQUUseURBQXlELENBQUMsQ0FBQztTQUNoRixNQUFNLENBQUMsS0FBSyxFQUFF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O1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLFdBQVcsRUFBRTtnQkFDMUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUsS0FBSztnQkFDWCxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRTthQUN0RSxDQUFDLENBQUM7WUFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxLQUFLLFVBQVUsZ0JBQWdCLENBQzdCLE1BQW9ELEVBQ3BELFdBQW1CLEVBQ25CLE9BQXdCLEVBQ3hCLFVBQWtCO0lBRWxCLElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVcsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELFNBQVMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixZQUFZLENBQUMscUJBQXFCLEVBQUU7WUFDbEMsVUFBVTtZQUNWLEtBQUssRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDO1NBQ3pCLENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgZXJyb3JNZXNzYWdlIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyB0eXBlIFBpcGVsaW5lLCB0eXBlIFBpcGVsaW5lUmVzcG9uc2UgfSBmcm9tICcuLi90eXBlcy9pbmRleC5qcyc7XG5pbXBvcnQgeyBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50LCBwcmludENvbW1hbmRIZWFkZXIsIHByaW50U3NsV2FybmluZywgd2l0aFJlZ2lvbk9wdGlvbiwgd2l0aFNzbE9wdGlvbnMgfSBmcm9tICcuLi91dGlscy9jb21tYW5kLXV0aWxzLmpzJztcbmltcG9ydCB7IEVSUk9SX0NPREVTLCBoYW5kbGVFcnJvciB9IGZyb20gJy4uL3V0aWxzL2Vycm9yLWhhbmRsZXIuanMnO1xuaW1wb3J0IHsgcHJpbnRFcnJvciwgcHJpbnRJbmZvLCBwcmludEtleVZhbHVlLCBwcmludFNlY3Rpb24sIHByaW50U3VjY2VzcywgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcbmltcG9ydCB7XG4gIGJ1aWxkUmVnaXN0cnlQYXlsb2FkLFxuICBjbGVhclBlbmRpbmdJbnRlbnQsXG4gIHJlYWRQZW5kaW5nSW50ZW50cyxcbiAgd3JpdGVQZW5kaW5nSW50ZW50LFxuICB0eXBlIFJlZ2lzdHJ5UGF5bG9hZCxcbn0gZnJvbSAnLi4vdXRpbHMvcmVnaXN0cnkuanMnO1xuaW1wb3J0IHsgZXh0cmFjdFNpbmdsZVJlc3BvbnNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UtdXRpbHMuanMnO1xuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgYHJlZ2lzdGVyYCBjb21tYW5kIHdpdGggdGhlIENMSSBwcm9ncmFtLlxuICpcbiAqIFR3byBwdXJwb3NlcyDigJQgYm90aCB0YXJnZXRlZCBhdCByZWNvdmVyaW5nIGZyb20gYSBkZXBsb3kgd2hvc2UgcmVnaXN0cmF0aW9uXG4gKiBzdGVwIGRpZG4ndCBsYW5kOlxuICpcbiAqICAgMS4gRXhwbGljaXQgcmUtcmVnaXN0ZXIgKGAtLWlkIDxwaXBlbGluZUlkPmApIOKAlCByZWNvbXB1dGVzIHRoZSBBUk4gZnJvbVxuICogICAgICBTVFMgKyByZWdpb24gYW5kIFBPU1RzIGl0IHRvIHRoZSBwbGF0Zm9ybS4gVXNlZnVsIHdoZW4gdGhlIHBsYXRmb3JtXG4gKiAgICAgIHdhcyB1bnJlYWNoYWJsZSBkdXJpbmcgYGRlcGxveWAsIHdoZW4gdGhlIHJlZ2lzdHJ5IHJvdyB3YXMgZGVsZXRlZCBieVxuICogICAgICBtaXN0YWtlLCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiBhIGRlcGxveWVkIHN0YWNrIGhhcyBubyByZWdpc3RyeSByb3cuXG4gKlxuICogICAyLiBEcmFpbiBwZW5kaW5nIGludGVudHMgKGV2ZXJ5IGludm9jYXRpb24pIOKAlCBgZGVwbG95YCB3cml0ZXMgYSBsb2NhbFxuICogICAgICBmaWxlIHVuZGVyIGB+Ly5waXBlbGluZS1tYW5hZ2VyL3BlbmRpbmctcmVnaXN0cmF0aW9ucy9gIHdoZW5ldmVyIGl0c1xuICogICAgICByZWdpc3RyYXRpb24gUE9TVCBmYWlscy4gRWFjaCBgcmVnaXN0ZXJgIGludm9jYXRpb24gdHJpZXMgdG8gZHJhaW5cbiAqICAgICAgZXZlcnkgc3VjaCBmaWxlLiBPbiBzdWNjZXNzIHRoZSBmaWxlIGlzIGRlbGV0ZWQ7IG9uIGZhaWx1cmUgaXQgc3RheXNcbiAqICAgICAgYW5kIHN1cmZhY2VzIGFzIGEgd2FybmluZy5cbiAqXG4gKiBGbGFnczpcbiAqICAgLSBgLS1pZCA8cGlwZWxpbmVJZD5gIOKAlCByZS1yZWdpc3RlciBhIHNwZWNpZmljIHBpcGVsaW5lIGJ5IElEXG4gKiAgIC0gYC0tcmVnaW9uIDxyZWdpb24+YCDigJQgQVdTIHJlZ2lvbiAoZGVmYXVsdDogQVdTX1JFR0lPTiBlbnYgLyB1cy1lYXN0LTEpXG4gKiAgIC0gYC0tbm8tZHJhaW5gIOKAlCBza2lwIGRyYWluaW5nIHBlbmRpbmcgaW50ZW50c1xuICpcbiAqIEV4aXQgY29kZXM6XG4gKiAgIC0gMDogcmVxdWVzdGVkIHJlZ2lzdHJhdGlvbiBzdWNjZWVkZWQgQU5EIG5vIHBlbmRpbmcgaW50ZW50cyByZW1haW5cbiAqICAgLSAxOiBhdCBsZWFzdCBvbmUgcmVnaXN0cmF0aW9uIChleHBsaWNpdCBvciBwZW5kaW5nKSBzdGlsbCBmYWlsZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgYmFzaFxuICogIyBSZXRyeSBhIHJlZ2lzdHJhdGlvbiB0aGF0IGZhaWxlZCBkdXJpbmcgZGVwbG95XG4gKiBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIHJlZ2lzdGVyIC0taWQgcGlwZS0xMjNcbiAqXG4gKiAjIEp1c3QgZHJhaW4gcGVuZGluZyBpbnRlbnRzIGZyb20gZGlzaywgbm8gc3BlY2lmaWMgcmVnaXN0cmF0aW9uXG4gKiBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIHJlZ2lzdGVyXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyKHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgd2l0aFNzbE9wdGlvbnMod2l0aFJlZ2lvbk9wdGlvbihwcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3JlZ2lzdGVyJylcbiAgICAuZGVzY3JpcHRpb24oJ1JlZ2lzdGVyIGEgZGVwbG95ZWQgcGlwZWxpbmUgQVJOIHdpdGggdGhlIHBsYXRmb3JtIChyZXRyeSBwYXRoIGZvciBmYWlsZWQgcmVnaXN0cmF0aW9ucyknKVxuICAgIC5vcHRpb24oJy1pLCAtLWlkIDxpZD4nLCAnUGlwZWxpbmUgSUQgdG8gcmVnaXN0ZXIgKHJlLWRlcml2ZXMgQVJOIGZyb20gU1RTKScpKVxuICAgIC5vcHRpb24oJy0tbm8tZHJhaW4nLCAnU2tpcCBkcmFpbmluZyBwZW5kaW5nIGludGVudHMgZnJvbSBwcmlvciBmYWlsZWQgZGVwbG95cycpKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdSZWdpc3RlciBQaXBlbGluZScpO1xuICAgICAgcHJpbnRTc2xXYXJuaW5nKG9wdGlvbnMudmVyaWZ5U3NsKTtcblxuICAgICAgbGV0IGFueUZhaWxlZCA9IGZhbHNlO1xuICAgICAgbGV0IHJlZ2lzdGVyZWRDb3VudCA9IDA7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnQob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHBpcGVsaW5lVXJsID0gY2xpZW50LmdldENvbmZpZygpLmFwaS5waXBlbGluZVVybDtcblxuICAgICAgICAvLyDilIDilIAgRHJhaW4gcGVuZGluZyBpbnRlbnRzIGZpcnN0IOKUgOKUgFxuICAgICAgICAvLyBXZSBkcmFpbiBiZWZvcmUgdGhlIGV4cGxpY2l0IHJlZ2lzdHJhdGlvbiBzbyBhIHF1ZXVlZCBmYWlsdXJlIGZvclxuICAgICAgICAvLyB0aGUgc2FtZSBwaXBlbGluZUlkIGlzIHJlcGxhY2VkIChub3QgZG91YmxlLWFwcGxpZWQpIGJ5IHRoZSBmcmVzaFxuICAgICAgICAvLyBwYXlsb2FkIGJlbG93LlxuICAgICAgICBjb25zdCBkcmFpbmVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIGlmIChvcHRpb25zLmRyYWluICE9PSBmYWxzZSkge1xuICAgICAgICAgIGNvbnN0IGludGVudHMgPSBhd2FpdCByZWFkUGVuZGluZ0ludGVudHMoKTtcbiAgICAgICAgICBpZiAoaW50ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBwcmludFNlY3Rpb24oJ0RyYWluaW5nIHBlbmRpbmcgaW50ZW50cycpO1xuICAgICAgICAgICAgcHJpbnRJbmZvKCdGb3VuZCBwZW5kaW5nIHJlZ2lzdHJhdGlvbnMgZnJvbSBwcmlvciBmYWlsZWQgZGVwbG95cycsIHtcbiAgICAgICAgICAgICAgY291bnQ6IFN0cmluZyhpbnRlbnRzLmxlbmd0aCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaW50ZW50IG9mIGludGVudHMpIHtcbiAgICAgICAgICAgICAgLy8gU2tpcCB0aGUgZXhwbGljaXQgcGlwZWxpbmUg4oCUIHdlJ2xsIHJlLWJ1aWxkIGEgZnJlc2ggcGF5bG9hZCBiZWxvdy5cbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaWQgJiYgaW50ZW50LnBpcGVsaW5lSWQgPT09IG9wdGlvbnMuaWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjb25zdCBvayA9IGF3YWl0IHBvc3RSZWdpc3RyYXRpb24oY2xpZW50LCBwaXBlbGluZVVybCwgaW50ZW50LCBpbnRlbnQucGlwZWxpbmVJZCk7XG4gICAgICAgICAgICAgIGlmIChvaykge1xuICAgICAgICAgICAgICAgIGF3YWl0IGNsZWFyUGVuZGluZ0ludGVudChpbnRlbnQucGlwZWxpbmVJZCk7XG4gICAgICAgICAgICAgICAgZHJhaW5lZC5hZGQoaW50ZW50LnBpcGVsaW5lSWQpO1xuICAgICAgICAgICAgICAgIHJlZ2lzdGVyZWRDb3VudCsrO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFueUZhaWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyDilIDilIAgRXhwbGljaXQgcmVnaXN0cmF0aW9uIOKUgOKUgFxuICAgICAgICBpZiAob3B0aW9ucy5pZCkge1xuICAgICAgICAgIHByaW50U2VjdGlvbignUmUtcmVnaXN0ZXJpbmcgcGlwZWxpbmUnKTtcbiAgICAgICAgICBjb25zdCBwaXBlbGluZVJlcyA9IGF3YWl0IGNsaWVudC5nZXQ8UGlwZWxpbmVSZXNwb25zZT4oYCR7cGlwZWxpbmVVcmx9LyR7b3B0aW9ucy5pZH1gKTtcbiAgICAgICAgICBjb25zdCBwaXBlbGluZSA9IGV4dHJhY3RTaW5nbGVSZXNwb25zZTxQaXBlbGluZT4ocGlwZWxpbmVSZXMsICdwaXBlbGluZScsICdpZCcpO1xuICAgICAgICAgIGlmICghcGlwZWxpbmUpIHtcbiAgICAgICAgICAgIHByaW50RXJyb3IoJ1BpcGVsaW5lIG5vdCBmb3VuZCBpbiBwbGF0Zm9ybScpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBwaXBlbGluZSByZXR1cm5lZCBmb3IgaWQgJHtvcHRpb25zLmlkfWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghcGlwZWxpbmUub3JnSWQpIHtcbiAgICAgICAgICAgIHByaW50RXJyb3IoJ1BpcGVsaW5lIGhhcyBubyBvcmdJZCDigJQgY2Fubm90IHJlZ2lzdGVyJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBpcGVsaW5lICR7cGlwZWxpbmUuaWR9IGlzIG1pc3Npbmcgb3JnSWRgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IGJ1aWxkUmVnaXN0cnlQYXlsb2FkKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogcGlwZWxpbmUuaWQsXG4gICAgICAgICAgICAgIG9yZ0lkOiBwaXBlbGluZS5vcmdJZCxcbiAgICAgICAgICAgICAgcGlwZWxpbmVOYW1lOiBwaXBlbGluZS5waXBlbGluZU5hbWUsXG4gICAgICAgICAgICAgIHByb2plY3Q6IHBpcGVsaW5lLnByb2plY3QsXG4gICAgICAgICAgICAgIG9yZ2FuaXphdGlvbjogcGlwZWxpbmUub3JnYW5pemF0aW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9wdGlvbnMucmVnaW9uLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyBDbGVhciBhbnkgc3RhbGUgaW50ZW50IGZvciB0aGlzIHBpcGVsaW5lSWQgYmVmb3JlIHJldHJ5aW5nIHNvIHdlXG4gICAgICAgICAgLy8gZG9uJ3QgbGVhdmUgYSBkdXBsaWNhdGUgZmlsZSBiZWhpbmQgb24gc3VjY2Vzcy5cbiAgICAgICAgICBhd2FpdCBjbGVhclBlbmRpbmdJbnRlbnQocGF5bG9hZC5waXBlbGluZUlkKTtcblxuICAgICAgICAgIGNvbnN0IG9rID0gYXdhaXQgcG9zdFJlZ2lzdHJhdGlvbihjbGllbnQsIHBpcGVsaW5lVXJsLCBwYXlsb2FkLCBwYXlsb2FkLnBpcGVsaW5lSWQpO1xuICAgICAgICAgIGlmIChvaykge1xuICAgICAgICAgICAgcmVnaXN0ZXJlZENvdW50Kys7XG4gICAgICAgICAgICBwcmludFN1Y2Nlc3MoJ1BpcGVsaW5lIHJlZ2lzdGVyZWQgZm9yIGV2ZW50IHJlcG9ydGluZycsIHtcbiAgICAgICAgICAgICAgcGlwZWxpbmVJZDogcGF5bG9hZC5waXBlbGluZUlkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFueUZhaWxlZCA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gYXdhaXQgd3JpdGVQZW5kaW5nSW50ZW50KHBheWxvYWQpO1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdSZWdpc3RyYXRpb24gZmFpbGVkOyBpbnRlbnQgc2F2ZWQgZm9yIHJldHJ5JywgeyBpbnRlbnQ6IHBhdGggfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJpbnRTZWN0aW9uKCdTdW1tYXJ5Jyk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICdSZWdpc3RlcmVkJzogU3RyaW5nKHJlZ2lzdGVyZWRDb3VudCksXG4gICAgICAgICAgJ0RyYWluZWQgZnJvbSBxdWV1ZSc6IFN0cmluZyhkcmFpbmVkLnNpemUpLFxuICAgICAgICAgICdTdGF0dXMnOiBhbnlGYWlsZWQgPyAnU29tZSByZWdpc3RyYXRpb25zIHN0aWxsIHBlbmRpbmcnIDogJ0FsbCBjbGVhcicsXG4gICAgICAgICAgJ0V4ZWN1dGlvbiBJRCc6IGV4ZWN1dGlvbklkLFxuICAgICAgICB9KTtcblxuICAgICAgICBwcm9jZXNzLmV4aXQoYW55RmFpbGVkID8gMSA6IDApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkFQSV9SRVFVRVNULCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IGZhbHNlLFxuICAgICAgICAgIGNvbnRleHQ6IHsgY29tbWFuZDogJ3JlZ2lzdGVyJywgZXhlY3V0aW9uSWQsIHBpcGVsaW5lSWQ6IG9wdGlvbnMuaWQgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9KTtcbn1cblxuLyoqXG4gKiBQT1NUIGEgcmVnaXN0cmF0aW9uIHBheWxvYWQgdG8gdGhlIHBsYXRmb3JtLiBPbiBmYWlsdXJlLCB0aGUgY2FsbGVyIGRlY2lkZXNcbiAqIHdoZXRoZXIgdG8gd3JpdGUvcHJlc2VydmUgYSBwZW5kaW5nIGludGVudCDigJQgdGhpcyBoZWxwZXIganVzdCByZXBvcnRzLlxuICovXG5hc3luYyBmdW5jdGlvbiBwb3N0UmVnaXN0cmF0aW9uKFxuICBjbGllbnQ6IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnQ+LFxuICBwaXBlbGluZVVybDogc3RyaW5nLFxuICBwYXlsb2FkOiBSZWdpc3RyeVBheWxvYWQsXG4gIHBpcGVsaW5lSWQ6IHN0cmluZyxcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICB0cnkge1xuICAgIGF3YWl0IGNsaWVudC5wb3N0KGAke3BpcGVsaW5lVXJsfS9yZWdpc3RyeWAsIHBheWxvYWQpO1xuICAgIHByaW50SW5mbygnUmVnaXN0ZXJlZCcsIHsgcGlwZWxpbmVJZCB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcHJpbnRXYXJuaW5nKCdSZWdpc3RyYXRpb24gZmFpbGVkJywge1xuICAgICAgcGlwZWxpbmVJZCxcbiAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"store-token.d.ts","sourceRoot":"","sources":["../../src/commands/store-token.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmJpC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4PjD"}
1
+ {"version":3,"file":"store-token.d.ts","sourceRoot":"","sources":["../../src/commands/store-token.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiJpC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2PjD"}
@@ -6,6 +6,7 @@ import { fileURLToPath } from 'node:url';
6
6
  import * as os from 'os';
7
7
  import path from 'path';
8
8
  import { LambdaClient, UpdateFunctionCodeCommand } from '@aws-sdk/client-lambda';
9
+ import { errorMessage } from '@pipeline-builder/api-core';
9
10
  import { Command } from 'commander';
10
11
  import { APP_VERSION, validateNumber } from '../config/cli.constants.js';
11
12
  import { auditLog } from '../utils/audit-log.js';
@@ -81,7 +82,6 @@ async function deployRenewSchedule(opts) {
81
82
  '--stack-name', stackName,
82
83
  '--template-file', templatePath,
83
84
  '--parameter-overrides',
84
- `PlatformBaseUrl=${opts.platformUrl}`,
85
85
  `PlatformSecretName=${opts.secretName}`,
86
86
  `RenewDays=${opts.days}`,
87
87
  `ScheduleExpression=${scheduleExpression}`,
@@ -310,7 +310,7 @@ export function storeToken(program) {
310
310
  }
311
311
  catch (err) {
312
312
  printWarning(`Stored the new key, but could not revoke the previous one (${previous.keyId}): `
313
- + `${err instanceof Error ? err.message : String(err)}. It expires on its own; revoke it from `
313
+ + `${errorMessage(err)}. It expires on its own; revoke it from `
314
314
  + 'Settings → Service accounts if you want it gone now.');
315
315
  }
316
316
  }
@@ -319,7 +319,6 @@ export function storeToken(program) {
319
319
  if (options.schedule) {
320
320
  const fiveFieldCron = options.cron || process.env.TOKEN_RENEW_SCHEDULE || DEFAULT_RENEW_CRON;
321
321
  scheduleExpression = await deployRenewSchedule({
322
- platformUrl: client.getBaseUrl(),
323
322
  secretName,
324
323
  days,
325
324
  fiveFieldCron,
@@ -384,4 +383,4 @@ export function storeToken(program) {
384
383
  }
385
384
  });
386
385
  }
387
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUtdG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvc3RvcmUtdG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxZQUFZLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JGLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckssT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxN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aEIsWUFBWSxDQUFDLHVDQUF1QyxDQUFDLENBQUM7Z0JBQ3RELFNBQVMsQ0FBQyxpQ0FBaUMsVUFBVSxFQUFFLENBQUMsQ0FBQztnQkFDekQsU0FBUyxDQUFDLHFFQUFxRSxDQUFDLENBQUM7Z0JBQ2pGLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2hCLElBQUksa0JBQWtCLEVBQUUsQ0FBQztvQkFDdkIsU0FBUyxDQUFDLDRCQUE0QixrQkFBa0Isb0NBQW9DLFdBQVcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO2dCQUN4SCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sU0FBUyxDQUFDLGlCQUFpQixXQUFXLENBQUMsU0FBUyxvREFBb0QsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDNUcsU0FBUyxDQUFDLCtEQUErRCxDQUFDLENBQUM7Z0JBQzdFLENBQUM7WUFDSCxDQUFDO1FBRUgsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxXQUFXLEVBQUU7Z0JBQzFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSztnQkFDM0IsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsT0FBTyxFQUFFO29CQUNQLE9BQU8sRUFBRSxhQUFhO29CQUN0QixXQUFXO29CQUNYLFVBQVUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixJQUFJLHdCQUF3QjtpQkFDekU7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGV4ZWNGaWxlU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgTGFtYmRhQ2xpZW50LCBVcGRhdGVGdW5jdGlvbkNvZGVDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWxhbWJkYSc7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IEFQUF9WRVJTSU9OLCB2YWxpZGF0ZU51bWJlciB9IGZyb20gJy4uL2NvbmZpZy9jbGkuY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IGF1ZGl0TG9nIH0gZnJvbSAnLi4vdXRpbHMvYXVkaXQtbG9nLmpzJztcbmltcG9ydCB7IHJlc29sdmVBd3NSZWdpb24gfSBmcm9tICcuLi91dGlscy9hd3MtZW52LmpzJztcbmltcG9ydCB7IHVwc2VydFNlY3JldCwgZ2V0U2VjcmV0QXJuLCBnZXRTZWNyZXRWYWx1ZSB9IGZyb20gJy4uL3V0aWxzL2F3cy1zZWNyZXRzLmpzJztcbmltcG9ydCB7IGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnRBc3luYywgcHJpbnRDb21tYW5kSGVhZGVyLCBwcmludFNzbFdhcm5pbmcsIHdpdGhQcm9maWxlT3B0aW9uLCB3aXRoUmVnaW9uT3B0aW9uLCB3aXRoU3NsT3B0aW9ucyB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgdG9FdmVudEJyaWRnZUNyb24gfSBmcm9tICcuLi91dGlscy9jcm9uLmpzJztcbmltcG9ydCB7IEVSUk9SX0NPREVTLCBoYW5kbGVFcnJvciB9IGZyb20gJy4uL3V0aWxzL2Vycm9yLWhhbmRsZXIuanMnO1xuaW1wb3J0IHsgcHJpbnRJbmZvLCBwcmludEtleVZhbHVlLCBwcmludFNlY3Rpb24sIHByaW50U3VjY2VzcywgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcbmltcG9ydCB7IGVuc3VyZVBsYXRmb3JtVG9rZW4sIHNjb3BlU2VjcmV0TGVhZiwgc2VjcmV0TmFtZUZvck9yZyB9IGZyb20gJy4uL3V0aWxzL3BsYXRmb3JtLXNlY3JldC5qcyc7XG5pbXBvcnQgeyBwcm92aXNpb25TZXJ2aWNlQWNjb3VudEtleSwgcmV2b2tlU2VydmljZUFjY291bnRLZXkgfSBmcm9tICcuLi91dGlscy9zZXJ2aWNlLWFjY291bnQuanMnO1xuXG4vLyBFU00gaGFzIG5vIF9fZGlybmFtZTsgZGVyaXZlIGl0IGZyb20gdGhpcyBtb2R1bGUncyBVUkwuXG5jb25zdCBfX2Rpcm5hbWUgPSBwYXRoLmRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcblxuY29uc3QgUkVORVdfU1RBQ0tfTkFNRSA9ICdwaXBlbGluZS1idWlsZGVyLXRva2VuLXJlbmV3Jztcbi8vIENGTi1tYW5hZ2VkIExhbWJkYSBmdW5jdGlvbiBuYW1lIOKAlCBrZWVwIGluIHN5bmMgd2l0aCB0b2tlbi1yZW5ldy1zdGFjay5qc29uLlxuY29uc3QgUkVORVdfTEFNQkRBX05BTUUgPSAncGlwZWxpbmUtYnVpbGRlci10b2tlbi1yZW5ldyc7XG4vLyBEZWZhdWx0IDUtZmllbGQgY3JvbiAoZGFpbHkgYXQgbWlkbmlnaHQpIHdoZW4gbmVpdGhlciAtLWNyb24gbm9yIFRPS0VOX1JFTkVXX1NDSEVEVUxFIGlzIHNldC5cbmNvbnN0IERFRkFVTFRfUkVORVdfQ1JPTiA9ICcwIDAgKiAqIConO1xuXG4vKipcbiAqIENhcGFiaWxpdHkgc2NvcGVzIGEgc3RvcmVkIGNyZWRlbnRpYWwgbWF5IGNhcnJ5LCBhbmQgd2hhdCBlYWNoIG9uZSBpcyBGT1IuXG4gKlxuICogQSBzY29wZWQga2V5IGV4Y2hhbmdlcyB0byBhIHRva2VuIHdpdGggbm8gcGVybWlzc2lvbnMgYW5kIG5vIGFkbWluIGZsYWdzIGF0XG4gKiBhbGwg4oCUIG9ubHkgdGhlIG9uZSBjYXBhYmlsaXR5IOKAlCBzbyBpdCBpcyB0aGUgc2hhcGUgZXZlcnkgYXV0b21hdGlvbiB0aGF0IGRvZXNcbiAqIGV4YWN0bHkgb25lIHRoaW5nIHNob3VsZCBob2xkICgjMTIpLiBUaGUgdW5zY29wZWQgYHBsYXRmb3JtYCBjcmVkZW50aWFsIGlzIHRoZVxuICogcmVtYWluaW5nIGZ1bGwtcHJpdmlsZWdlIG9uZTogc3ludGgvZGVwbG95IGNhbGxiYWNrcyBhbmQgdGhlIHBsdWdpbi1sb29rdXBcbiAqIExhbWJkYSBjYWxsIHRoZSBvcmRpbmFyeSBBUEkgc3VyZmFjZSwgd2hpY2ggbm8gc2luZ2xlIHNjb3BlIGNvdmVycy5cbiAqL1xuY29uc3QgU0NPUEVfQ0FUQUxPRzogUmVjb3JkPHN0cmluZywgeyBhY2NvdW50OiBzdHJpbmc7IGRlc2NyaXB0aW9uOiBzdHJpbmcgfT4gPSB7XG4gICdyZXBvcnRpbmc6aW5nZXN0Jzoge1xuICAgIGFjY291bnQ6ICdyZXBvcnRpbmctaW5nZXN0JyxcbiAgICBkZXNjcmlwdGlvbjogJ0FXUyBwaXBlbGluZS1ldmVudCBpbmdlc3Rpb24gKHRoZSBldmVudHMgTGFtYmRhIFBPU1RzIC9yZXBvcnRzL2V2ZW50cyknLFxuICB9LFxuICAncmVnaXN0cnk6cHVzaCc6IHtcbiAgICBhY2NvdW50OiAncmVnaXN0cnktcHVzaCcsXG4gICAgZGVzY3JpcHRpb246ICdDSSBpbWFnZSBwdXNoZXMgaW50byB0aGlzIG9yZ+KAmXMgcmVnaXN0cnkgbmFtZXNwYWNlIChDb2RlQnVpbGQg4oaSIC90b2tlbiknLFxuICB9LFxufTtcblxuLyoqIFRoZSBhY2NvdW50IHRoYXQgaG9sZHMgdGhlIHVuc2NvcGVkLCBmdWxsLXByaXZpbGVnZSBzdG9yZWQgY3JlZGVudGlhbC4gKi9cbmNvbnN0IFBMQVRGT1JNX0FDQ09VTlQgPSB7XG4gIGFjY291bnQ6ICdwbGF0Zm9ybS1hdXRvbWF0aW9uJyxcbiAgZGVzY3JpcHRpb246ICdTdG9yZWQgcGxhdGZvcm0gY3JlZGVudGlhbCBmb3IgQ0RLIHN5bnRoL2RlcGxveSwgcGx1Z2luIGxvb2t1cCBhbmQgaW1hZ2UgcHVzaGVzJyxcbn07XG5cbi8qKlxuICogRGVwbG95IChvciB1cGRhdGUpIHRoZSBvbmNlLWEtZGF5IEtFWSBST1RBVElPTiBzdGFjazogYSBzY2hlZHVsZWQgTGFtYmRhIHRoYXRcbiAqIHJlcGxhY2VzIHRoZSBzZXJ2aWNlLWFjY291bnQga2V5IGluIHRoaXMgc2VjcmV0IGJlZm9yZSBpdCBleHBpcmVzLiBNaXJyb3JzXG4gKiBzZXR1cC1ldmVudHMg4oCUIGBhd3MgY2xvdWRmb3JtYXRpb24gZGVwbG95YCBmb3IgdGhlIGluZnJhLCB0aGVuIGEgZGlyZWN0XG4gKiBVcGRhdGVGdW5jdGlvbkNvZGUgd2l0aCB0aGUgcm90YXRvciBoYW5kbGVyIGNvbXBpbGVkIGFsb25nc2lkZSB0aGlzIENMSSAoc2VlXG4gKiBzcmMvbGFtYmRhL3Rva2VuLXJlbmV3LWhhbmRsZXIudHMpLlxuICovXG5hc3luYyBmdW5jdGlvbiBkZXBsb3lSZW5ld1NjaGVkdWxlKG9wdHM6IHtcbiAgcGxhdGZvcm1Vcmw6IHN0cmluZztcbiAgc2VjcmV0TmFtZTogc3RyaW5nO1xuICBkYXlzOiBudW1iZXI7XG4gIGZpdmVGaWVsZENyb246IHN0cmluZztcbiAgcmVnaW9uOiBzdHJpbmc7XG4gIHByb2ZpbGU/OiBzdHJpbmc7XG59KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qgc2NoZWR1bGVFeHByZXNzaW9uID0gdG9FdmVudEJyaWRnZUNyb24ob3B0cy5maXZlRmllbGRDcm9uKTsgLy8gdmFsaWRhdGVzICsgMTUtbWluIGd1YXJkXG5cbiAgLy8gTmFtZSByZW5ld2FsIHJlc291cmNlcyBwZXItc2VjcmV0IHNvIGEgc2NvcGVkLWNyZWRlbnRpYWwgc3RhY2sgKGUuZy4gdGhlXG4gIC8vIHJlcG9ydGluZy1pbmdlc3Qga2V5IHRoZSBldmVudCBMYW1iZGEgcmVhZHMpIGNvZXhpc3RzIHdpdGggdGhlXG4gIC8vIHBsYXRmb3JtLWNyZWRlbnRpYWwgc3RhY2sgaW5zdGVhZCBvZiBjb2xsaWRpbmcgb24gdGhlIChhY2NvdW50LWdsb2JhbCkgSUFNXG4gIC8vIHJvbGUgLyBMYW1iZGEgLyBydWxlIG5hbWVzLiBUaGUgcGxhdGZvcm0gc2VjcmV0IGtlZXBzIHRoZSBiYXJlIG5hbWVcbiAgLy8gKHN1ZmZpeCAnJykgc28gZXhpc3RpbmcgZGVwbG95bWVudHMnIHN0YWNrIGlzIHVwZGF0ZWQgaW4gcGxhY2UsIG5vdFxuICAvLyBkdXBsaWNhdGVkOyBhbnkgb3RoZXIgc2VjcmV0IGFwcGVuZHMgaXRzIHRyYWlsaW5nIHBhdGggc2VnbWVudC5cbiAgY29uc3Qgc2VjcmV0TGVhZiA9IG9wdHMuc2VjcmV0TmFtZS5yZXBsYWNlKC8uKlxcLy8sICcnKTsgLy8gJ3BsYXRmb3JtJyB8ICdyZXBvcnRpbmctaW5nZXN0JyB8IOKAplxuICBjb25zdCBuYW1lU3VmZml4ID0gc2VjcmV0TGVhZiA9PT0gJ3BsYXRmb3JtJyA/ICcnIDogYC0ke3NlY3JldExlYWYucmVwbGFjZSgvW15hLXowLTldKy9naSwgJy0nKX1gO1xuICBjb25zdCBzdGFja05hbWUgPSBgJHtSRU5FV19TVEFDS19OQU1FfSR7bmFtZVN1ZmZpeH1gO1xuICBjb25zdCBsYW1iZGFOYW1lID0gYCR7UkVORVdfTEFNQkRBX05BTUV9JHtuYW1lU3VmZml4fWA7XG5cbiAgcHJpbnRTZWN0aW9uKCdTY2hlZHVsZSBSb3RhdGlvbicpO1xuICBwcmludEluZm8oJ1BhcmFtZXRlcnMnLCB7XG4gICAgc3RhY2s6IHN0YWNrTmFtZSxcbiAgICBzY2hlZHVsZTogb3B0cy5maXZlRmllbGRDcm9uLFxuICAgIGV2ZW50YnJpZGdlOiBzY2hlZHVsZUV4cHJlc3Npb24sXG4gICAgcmVuZXdEYXlzOiBvcHRzLmRheXMsXG4gIH0pO1xuXG4gIC8vIFN0ZXAgMTogaW5mcmEgKExhbWJkYSBnZXRzIHBsYWNlaG9sZGVyIGNvZGUgb24gZmlyc3QgY3JlYXRlKS5cbiAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL3RlbXBsYXRlcy90b2tlbi1yZW5ldy1zdGFjay5qc29uJyk7XG4gIGNvbnN0IGNmbkFyZ3MgPSBbXG4gICAgJ2Nsb3VkZm9ybWF0aW9uJywgJ2RlcGxveScsXG4gICAgJy0tc3RhY2stbmFtZScsIHN0YWNrTmFtZSxcbiAgICAnLS10ZW1wbGF0ZS1maWxlJywgdGVtcGxhdGVQYXRoLFxuICAgICctLXBhcmFtZXRlci1vdmVycmlkZXMnLFxuICAgIGBQbGF0Zm9ybUJhc2VVcmw9JHtvcHRzLnBsYXRmb3JtVXJsfWAsXG4gICAgYFBsYXRmb3JtU2VjcmV0TmFtZT0ke29wdHMuc2VjcmV0TmFtZX1gLFxuICAgIGBSZW5ld0RheXM9JHtvcHRzLmRheXN9YCxcbiAgICBgU2NoZWR1bGVFeHByZXNzaW9uPSR7c2NoZWR1bGVFeHByZXNzaW9ufWAsXG4gICAgYE5hbWVTdWZmaXg9JHtuYW1lU3VmZml4fWAsXG4gICAgLy8gUmVjb3JkZWQgZm9yIHByb3ZlbmFuY2Ugb25seSDigJQgdGhlIHJvdGF0b3Igbm8gbG9uZ2VyIGluc3RhbGxzIHRoZSBDTEkgYXRcbiAgICAvLyBydW50aW1lIChpdCBzcGVha3MgdG8gdGhlIHBsYXRmb3JtIGRpcmVjdGx5KSwgYnV0IGtub3dpbmcgd2hpY2ggQ0xJXG4gICAgLy8gZGVwbG95ZWQgYSBzdGFjayBpcyB3b3J0aCBrZWVwaW5nLlxuICAgIGBQaXBlbGluZU1hbmFnZXJWZXJzaW9uPSR7QVBQX1ZFUlNJT059YCxcbiAgICAnLS1jYXBhYmlsaXRpZXMnLCAnQ0FQQUJJTElUWV9OQU1FRF9JQU0nLFxuICAgICctLW5vLWZhaWwtb24tZW1wdHktY2hhbmdlc2V0JyxcbiAgICAnLS1yZWdpb24nLCBvcHRzLnJlZ2lvbixcbiAgXTtcbiAgaWYgKG9wdHMucHJvZmlsZSkgY2ZuQXJncy5wdXNoKCctLXByb2ZpbGUnLCBvcHRzLnByb2ZpbGUpO1xuICBleGVjRmlsZVN5bmMoJ2F3cycsIGNmbkFyZ3MsIHsgc3RkaW86ICdpbmhlcml0JyB9KTtcblxuICAvLyBTdGVwIDI6IHVwbG9hZCB0aGUgcmVhbCBoYW5kbGVyLiBJdCdzIEVTTSwgc28gdGhlIHppcCBlbnRyeSBtdXN0IGJlIGluZGV4Lm1qc1xuICAvLyAoSGFuZGxlciBzdGF5cyBpbmRleC5oYW5kbGVyIOKAlCBub2RlanMyNC54IHJlc29sdmVzIHRoZSAubWpzIGV4dGVuc2lvbikuXG4gIGNvbnN0IGhhbmRsZXJTcmMgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vbGFtYmRhL3Rva2VuLXJlbmV3LWhhbmRsZXIuanMnKTtcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGhhbmRsZXJTcmMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUb2tlbi1yZW5ldyBoYW5kbGVyIG5vdCBmb3VuZCBhdCAke2hhbmRsZXJTcmN9IOKAlCB3YXMgdGhlIHBhY2thZ2UgYnVpbHQ/YCk7XG4gIH1cbiAgY29uc3QgdG1wRGlyID0gZnMubWtkdGVtcFN5bmMocGF0aC5qb2luKG9zLnRtcGRpcigpLCAndG9rZW4tcmVuZXctJykpO1xuICB0cnkge1xuICAgIGZzLmNvcHlGaWxlU3luYyhoYW5kbGVyU3JjLCBwYXRoLmpvaW4odG1wRGlyLCAnaW5kZXgubWpzJykpO1xuICAgIGNvbnN0IHppcFBhdGggPSBwYXRoLmpvaW4odG1wRGlyLCAnaW5kZXguemlwJyk7XG4gICAgZXhlY0ZpbGVTeW5jKCd6aXAnLCBbJy1qJywgemlwUGF0aCwgJ2luZGV4Lm1qcyddLCB7IGN3ZDogdG1wRGlyLCBzdGRpbzogJ3BpcGUnIH0pO1xuXG4gICAgY29uc3QgbGFtYmRhQ2xpZW50ID0gbmV3IExhbWJkYUNsaWVudCh7IHJlZ2lvbjogb3B0cy5yZWdpb24gfSk7XG4gICAgYXdhaXQgbGFtYmRhQ2xpZW50LnNlbmQobmV3IFVwZGF0ZUZ1bmN0aW9uQ29kZUNvbW1hbmQoe1xuICAgICAgRnVuY3Rpb25OYW1lOiBsYW1iZGFOYW1lLFxuICAgICAgWmlwRmlsZTogZnMucmVhZEZpbGVTeW5jKHppcFBhdGgpLFxuICAgIH0pKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBmcy5ybVN5bmModG1wRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gIH1cblxuICBwcmludFN1Y2Nlc3MoYFJvdGF0aW9uIHNjaGVkdWxlZCAoJHtzY2hlZHVsZUV4cHJlc3Npb259KWApO1xuICByZXR1cm4gc2NoZWR1bGVFeHByZXNzaW9uO1xufVxuXG4vKiogUmVhZCB0aGUga2V5IGlkIGEgcHJldmlvdXMgcnVuIHN0b3JlZCwgc28gdGhpcyBydW4gY2FuIHJldGlyZSBpdC4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByZXZpb3VzS2V5SWQoXG4gIHNlY3JldE5hbWU6IHN0cmluZyxcbiAgYXdzOiB7IHJlZ2lvbjogc3RyaW5nOyBwcm9maWxlPzogc3RyaW5nIH0sXG4pOiBQcm9taXNlPHsga2V5SWQ/OiBzdHJpbmc7IHNlcnZpY2VBY2NvdW50SWQ/OiBzdHJpbmcgfT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJhdyA9IGF3YWl0IGdldFNlY3JldFZhbHVlKHNlY3JldE5hbWUsIGF3cyk7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyYXcpIGFzIHsga2V5SWQ/OiBzdHJpbmc7IHNlcnZpY2VBY2NvdW50SWQ/OiBzdHJpbmcgfTtcbiAgICByZXR1cm4geyBrZXlJZDogcGFyc2VkLmtleUlkLCBzZXJ2aWNlQWNjb3VudElkOiBwYXJzZWQuc2VydmljZUFjY291bnRJZCB9O1xuICB9IGNhdGNoIHtcbiAgICAvLyBObyBzZWNyZXQgeWV0IChmaXJzdCBydW4pLCBvciBvbmUgd3JpdHRlbiBiZWZvcmUgdGhlIHNlcnZpY2UtYWNjb3VudFxuICAgIC8vIGN1dG92ZXIgKG5vIGtleUlkKS4gRWl0aGVyIHdheSB0aGVyZSBpcyBub3RoaW5nIHRoaXMgcnVuIGNhbiByZXRpcmUuXG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIHRoZSBgc3RvcmUtdG9rZW5gIGNvbW1hbmQgd2l0aCB0aGUgQ0xJIHByb2dyYW0uXG4gKlxuICogUHJvdmlzaW9ucyB0aGUgb3JnJ3MgbWFjaGluZSBpZGVudGl0eSDigJQgYSBTRVJWSUNFIEFDQ09VTlQgYW5kIG9uZSBgcGJfc2Ff4oCmYFxuICoga2V5IOKAlCBhbmQgc3RvcmVzIHRoZSBrZXkgaW4gQVdTIFNlY3JldHMgTWFuYWdlciBmb3IgQ0RLIGRlcGxveW1lbnRzLFxuICogQ29kZUJ1aWxkJ3MgcmVnaXN0cnkgY3JlZGVudGlhbHMsIHRoZSBwbHVnaW4tbG9va3VwIExhbWJkYSBhbmQgdGhlIGV2ZW50XG4gKiBpbmdlc3Rpb24gTGFtYmRhICgjMTIgLyAjTjIpLiBOb3RoaW5nIHN0b3JlZCBpcyB0aWVkIHRvIGEgcGVyc29uJ3Mgc2Vzc2lvbiBhbnlcbiAqIG1vcmU6IHRoZSBhY2NvdW50IG91dGxpdmVzIGl0cyBjcmVhdG9yLCB0YWtlcyBubyBzZWF0LCBhbmQgZXZlcnkgYXVkaXQgcm93IGl0XG4gKiBwcm9kdWNlcyBuYW1lcyB0aGUgYWNjb3VudC5cbiAqXG4gKiBCZWNhdXNlIGNyZWF0aW5nIGFuIGFjY291bnQgYW5kIGlzc3VpbmcgaXRzIGtleSBhcmUgc3RlcC11cCBnYXRlZCwgdGhpcyBuZWVkc1xuICogdGhlIG9wZXJhdG9yJ3MgcGFzc3dvcmQg4oCUIGAtLXBhc3N3b3JkYCwgb3IgdGhlIGBQTEFURk9STV9QQVNTV09SRGAgZW52IHZhclxuICogKHByZWZlcnJlZDogaXQga2VlcHMgdGhlIHBhc3N3b3JkIG91dCBvZiBzaGVsbCBoaXN0b3J5IGFuZCBwbGFuIG91dHB1dCkuXG4gKlxuICogQnkgZGVmYXVsdCBpdCBPTkxZIHdyaXRlcyB0aGUgc2VjcmV0LiBQYXNzIC0tc2NoZWR1bGUgdG8gYWxzbyBkZXBsb3kgdGhlIGRhaWx5XG4gKiBLRVkgUk9UQVRJT04gc3RhY2sgKGEgTGFtYmRhIHRoYXQgcmVwbGFjZXMgdGhlIGtleSBiZWZvcmUgaXQgZXhwaXJlcykuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGJhc2hcbiAqIFBMQVRGT1JNX1BBU1NXT1JEPSoqKiBwaXBlbGluZS1tYW5hZ2VyIGluZnJhIHN0b3JlLXRva2VuIC0tcmVnaW9uIHVzLWVhc3QtMVxuICogUExBVEZPUk1fUEFTU1dPUkQ9KioqIHBpcGVsaW5lLW1hbmFnZXIgaW5mcmEgc3RvcmUtdG9rZW4gLS1kYXlzIDkwIC0tcmVnaW9uIHVzLWVhc3QtMVxuICogUExBVEZPUk1fUEFTU1dPUkQ9KioqIHBpcGVsaW5lLW1hbmFnZXIgaW5mcmEgc3RvcmUtdG9rZW4gLS1zY2hlZHVsZSAtLXJlZ2lvbiB1cy1lYXN0LTEgICAgICMgKyBkYWlseSByb3RhdGlvblxuICogUExBVEZPUk1fUEFTU1dPUkQ9KioqIHBpcGVsaW5lLW1hbmFnZXIgaW5mcmEgc3RvcmUtdG9rZW4gLS1zY29wZSByZXBvcnRpbmc6aW5nZXN0IC0tc2NoZWR1bGVcbiAqIFBMQVRGT1JNX1BBU1NXT1JEPSoqKiBwaXBlbGluZS1tYW5hZ2VyIGluZnJhIHN0b3JlLXRva2VuIC0tc2NvcGUgcmVnaXN0cnk6cHVzaCAtLXNjaGVkdWxlXG4gKiBwaXBlbGluZS1tYW5hZ2VyIGluZnJhIHN0b3JlLXRva2VuIC0tZHJ5LXJ1blxuICogcGlwZWxpbmUtbWFuYWdlciBpbmZyYSBzdG9yZS10b2tlbiAtdSBhZG1pbiAtcCAnKioqJyAtLXJlZ2lvbiB1cy1lYXN0LTFcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RvcmVUb2tlbihwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHdpdGhTc2xPcHRpb25zKFxuICAgIHdpdGhQcm9maWxlT3B0aW9uKFxuICAgICAgd2l0aFJlZ2lvbk9wdGlvbihwcm9ncmFtXG4gICAgICAgIC5jb21tYW5kKCdzdG9yZS10b2tlbicpXG4gICAgICAgIC5kZXNjcmlwdGlvbignUHJvdmlzaW9uIGFuIG9yZyBzZXJ2aWNlLWFjY291bnQga2V5IChpdHMgb3duIG1hY2hpbmUgaWRlbnRpdHkpIGFuZCBzdG9yZSBpdCBpbiBBV1MgU2VjcmV0cyBNYW5hZ2VyIGZvciBDREsgZGVwbG95bWVudHMnKVxuICAgICAgICAub3B0aW9uKCctdSwgLS1pZGVudGlmaWVyIDxpZGVudGlmaWVyPicsICdVc2VybmFtZSBvciBlbWFpbCAoc2tpcHMgUExBVEZPUk1fVE9LRU4gcmVxdWlyZW1lbnQpJylcbiAgICAgICAgLm9wdGlvbignLXAsIC0tcGFzc3dvcmQgPHBhc3N3b3JkPicsICdMb2dpbiBwYXNzd29yZCDigJQgYWxzbyB1c2VkIGZvciB0aGUgc3RlcC11cCBldmVyeSBrZXkgd3JpdGUgcmVxdWlyZXMgKHByZWZlciBQTEFURk9STV9QQVNTV09SRCknKVxuICAgICAgICAub3B0aW9uKCctLWRheXMgPGRheXM+JywgJ0tleSBsaWZldGltZSBpbiBkYXlzIChtYXggMzY1KScsICczMCcpXG4gICAgICAgIC5vcHRpb24oJy0tc2NvcGUgPHNjb3BlPicsIGBQcm92aXNpb24gYSBsZWFzdC1wcml2aWxlZ2Ugc2NvcGVkIGtleSBpbnN0ZWFkIG9mIHRoZSBmdWxsLXByaXZpbGVnZSBwbGF0Zm9ybSBvbmUuIE9uZSBvZjogJHtPYmplY3Qua2V5cyhTQ09QRV9DQVRBTE9HKS5qb2luKCcsICcpfWApXG4gICAgICAgIC5vcHRpb24oJy0tYWNjb3VudCA8bmFtZT4nLCAnT3ZlcnJpZGUgdGhlIHNlcnZpY2UtYWNjb3VudCBuYW1lIHRoaXMga2V5IGlzIGlzc3VlZCBvbiAoZGVmYXVsdDogZGVyaXZlZCBmcm9tIC0tc2NvcGUpJylcbiAgICAgICAgLm9wdGlvbignLS1kcnktcnVuJywgJ1Nob3cgd2hhdCB3b3VsZCBiZSBwcm92aXNpb25lZCB3aXRob3V0IGNhbGxpbmcgdGhlIHBsYXRmb3JtIG9yIHdyaXRpbmcgdG8gU2VjcmV0cyBNYW5hZ2VyJywgZmFsc2UpKSxcbiAgICApXG4gICAgICAub3B0aW9uKCctLXNjaGVkdWxlJywgJ0Fsc28gZGVwbG95IHRoZSBkYWlseSBrZXktcm90YXRpb24gc3RhY2sgdGhhdCByZXBsYWNlcyB0aGlzIGtleSBiZWZvcmUgaXQgZXhwaXJlcyAob2ZmIGJ5IGRlZmF1bHQpJywgZmFsc2UpXG4gICAgICAub3B0aW9uKCctLWNyb24gPGV4cHI+JywgJ1JvdGF0aW9uIHNjaGVkdWxlIGFzIGEgNS1maWVsZCBjcm9uLCB1c2VkIHdpdGggLS1zY2hlZHVsZSAoZGVmYXVsdDogVE9LRU5fUkVORVdfU0NIRURVTEUgZW52IG9yIFwiMCAwICogKiAqXCI7IG1pbiBldmVyeSAxNSBtaW51dGVzKScpXG4gICAgICAub3B0aW9uKCctLWpzb24nLCAnT3V0cHV0IHJlc3VsdCBhcyBKU09OJywgZmFsc2UpLFxuICApXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgZXhlY3V0aW9uSWQgPSBwcmludENvbW1hbmRIZWFkZXIoJ1N0b3JlIFRva2VuJywgdW5kZWZpbmVkLCB7IHF1aWV0OiBvcHRpb25zLmpzb24gfSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHByaW50U3NsV2FybmluZyhvcHRpb25zLnZlcmlmeVNzbCk7XG5cbiAgICAgICAgY29uc3QgcmVnaW9uID0gcmVzb2x2ZUF3c1JlZ2lvbihvcHRpb25zLnJlZ2lvbik7XG4gICAgICAgIGNvbnN0IGF3cyA9IHsgcmVnaW9uLCBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkIH07XG5cbiAgICAgICAgY29uc3QgZGF5cyA9IHZhbGlkYXRlTnVtYmVyKG9wdGlvbnMuZGF5cywgJ2RheXMnLCAxLCAzNjUpO1xuICAgICAgICBjb25zdCBleHBpcmVzSW5TZWNvbmRzID0gZGF5cyAqIDI0ICogNjAgKiA2MDtcblxuICAgICAgICBjb25zdCBzY29wZSA9IG9wdGlvbnMuc2NvcGUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBjYXRhbG9ndWVkID0gc2NvcGUgPyBTQ09QRV9DQVRBTE9HW3Njb3BlXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHNjb3BlICYmICFjYXRhbG9ndWVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIC0tc2NvcGUgXCIke3Njb3BlfVwiLiBTdXBwb3J0ZWQ6ICR7T2JqZWN0LmtleXMoU0NPUEVfQ0FUQUxPRykuam9pbignLCAnKX1gKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXaGljaCBtYWNoaW5lIGlkZW50aXR5IHRoaXMgY3JlZGVudGlhbCBiZWxvbmdzIHRvOiB0aGUgc2NvcGUncyBvd25cbiAgICAgICAgLy8gYWNjb3VudCwgb3IgdGhlIG9yZydzIHNpbmdsZSBmdWxsLXByaXZpbGVnZSBhdXRvbWF0aW9uIGFjY291bnQuXG4gICAgICAgIGNvbnN0IGlkZW50aXR5ID0gY2F0YWxvZ3VlZCA/PyBQTEFURk9STV9BQ0NPVU5UO1xuICAgICAgICBjb25zdCBhY2NvdW50TmFtZSA9IChvcHRpb25zLmFjY291bnQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKSA/PyBpZGVudGl0eS5hY2NvdW50O1xuXG4gICAgICAgIC8vIFN0ZXAgMDogbG9nIGluIGZpcnN0IHdoZW4gY3JlZHMgYXJlIGF2YWlsYWJsZSBhbmQgbm8gUExBVEZPUk1fVE9LRU4gaXNcbiAgICAgICAgLy8gc2V0IChzaGFyZWQgd2l0aCBzZXR1cC1ldmVudHMpLiBDcmVkcyBjb21lIGZyb20gLS1pZGVudGlmaWVyLy0tcGFzc3dvcmRcbiAgICAgICAgLy8gT1IgdGhlIGVudiB2YXJzIFBMQVRGT1JNX0lERU5USUZJRVIvUExBVEZPUk1fUEFTU1dPUkQg4oCUIHRoZSBlbnYgcGF0aFxuICAgICAgICAvLyBsZXRzIGNhbGxlcnMgbGlrZSBgcHJvdmlzaW9uIC0td2l0aC1ldmVudHNgIHBhc3MgdGhlbSB3aXRob3V0IHB1dHRpbmdcbiAgICAgICAgLy8gdGhlIHBhc3N3b3JkIG9uIHRoZSBjb21tYW5kIGxpbmUgKHdoZXJlIGl0IHdvdWxkIHNob3cgaW4gcGxhbnMvbG9ncykuXG4gICAgICAgIGF3YWl0IGVuc3VyZVBsYXRmb3JtVG9rZW4ob3B0aW9ucyk7XG5cbiAgICAgICAgLy8gVGhlIHBhc3N3b3JkIGlzIEFMU08gdGhlIHN0ZXAtdXAgZmFjdG9yIGZvciBib3RoIHdyaXRlcyBiZWxvdywgc28gaXQgaXNcbiAgICAgICAgLy8gcmVxdWlyZWQgZXZlbiB3aGVuIFBMQVRGT1JNX1RPS0VOIGlzIGFscmVhZHkgc2V0LiBTYXkgdGhhdCBwbGFpbmx5XG4gICAgICAgIC8vIHJhdGhlciB0aGFuIGZhaWxpbmcgdGhyZWUgY2FsbHMgbGF0ZXIgd2l0aCBhIDQwMy5cbiAgICAgICAgY29uc3QgcGFzc3dvcmQgPSAob3B0aW9ucy5wYXNzd29yZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQpIHx8IHByb2Nlc3MuZW52LlBMQVRGT1JNX1BBU1NXT1JEO1xuICAgICAgICBpZiAoIXBhc3N3b3JkICYmICFvcHRpb25zLmRyeVJ1bikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdBIHBhc3N3b3JkIGlzIHJlcXVpcmVkOiBjcmVhdGluZyBhIHNlcnZpY2UgYWNjb3VudCBhbmQgaXNzdWluZyBpdHMga2V5IGFyZSBib3RoIHN0ZXAtdXAgZ2F0ZWQuICdcbiAgICAgICAgICAgICsgJ1NldCBQTEFURk9STV9QQVNTV09SRCAocHJlZmVycmVkKSBvciBwYXNzIC0tcGFzc3dvcmQuJyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJpbnRTZWN0aW9uKCdQcm92aXNpb24gU2VydmljZS1BY2NvdW50IEtleScpO1xuXG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnRBc3luYyhvcHRpb25zKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5kcnlSdW4pIHtcbiAgICAgICAgICAvLyBEcnkgcnVuIHN0YXlzIGVudGlyZWx5IE9GRkxJTkUg4oCUIGl0IG11c3Qgbm90IGNyZWF0ZSBhbiBhY2NvdW50IG9yXG4gICAgICAgICAgLy8gYnVybiBhIGtleSBqdXN0IHRvIHNob3cgd2hhdCBpdCB3b3VsZCBkby5cbiAgICAgICAgICBjb25zdCBwbGFuID0ge1xuICAgICAgICAgICAgc2VydmljZUFjY291bnQ6IGFjY291bnROYW1lLFxuICAgICAgICAgICAgcm9sZXM6IHNjb3BlID8gJ25vbmUgKHNjb3BlZCwgbGVhc3QgcHJpdmlsZWdlKScgOiAnb3JnIGFkbWluJyxcbiAgICAgICAgICAgIHNjb3BlOiBzY29wZSA/PyAnKG5vbmUg4oCUIGZ1bGwgcGxhdGZvcm0gY3JlZGVudGlhbCknLFxuICAgICAgICAgICAgc2VjcmV0TmFtZTogcHJvY2Vzcy5lbnYuUExBVEZPUk1fU0VDUkVUX05BTUUgfHwgYCR7c2VjcmV0TmFtZUZvck9yZygnPG9yZ0lkPicsIHNjb3BlID8gc2NvcGVTZWNyZXRMZWFmKHNjb3BlKSA6ICdwbGF0Zm9ybScpfWAsXG4gICAgICAgICAgICByZWdpb24sXG4gICAgICAgICAgICBleHBpcmVzSW5EYXlzOiBkYXlzLFxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKG9wdGlvbnMuanNvbikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoeyBzdWNjZXNzOiB0cnVlLCBkcnlSdW46IHRydWUsIC4uLnBsYW4gfSwgbnVsbCwgMikpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgICAgICBwcmludFNlY3Rpb24oJ0RyeSBSdW4g4oCUIE5vIENoYW5nZXMgTWFkZScpO1xuICAgICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICAgICdTZXJ2aWNlIEFjY291bnQnOiBwbGFuLnNlcnZpY2VBY2NvdW50LFxuICAgICAgICAgICAgICAnUm9sZXMnOiBwbGFuLnJvbGVzLFxuICAgICAgICAgICAgICAnS2V5IFNjb3BlJzogcGxhbi5zY29wZSxcbiAgICAgICAgICAgICAgJ1NlY3JldCBOYW1lJzogcGxhbi5zZWNyZXROYW1lLFxuICAgICAgICAgICAgICAnUmVnaW9uJzogcGxhbi5yZWdpb24sXG4gICAgICAgICAgICAgICdFeHBpcmVzIEluJzogYCR7ZGF5c30gZGF5c2AsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHByaW50U3VjY2VzcygnRHJ5IHJ1biBjb21wbGV0ZSDigJQgbm8gYWNjb3VudCwga2V5IG9yIHNlY3JldCB3YXMgY3JlYXRlZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBrZXlOYW1lID0gYCR7YWNjb3VudE5hbWV9LSR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKX1gO1xuICAgICAgICBjb25zdCBwcm92aXNpb25lZCA9IGF3YWl0IHByb3Zpc2lvblNlcnZpY2VBY2NvdW50S2V5KHtcbiAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkISxcbiAgICAgICAgICBhY2NvdW50TmFtZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogaWRlbnRpdHkuZGVzY3JpcHRpb24sXG4gICAgICAgICAgcm9sZXM6IHNjb3BlID8gJ25vbmUnIDogJ2FkbWluJyxcbiAgICAgICAgICAuLi4oc2NvcGUgPyB7IHNjb3BlIH0gOiB7fSksXG4gICAgICAgICAgZXhwaXJlc0luU2Vjb25kcyxcbiAgICAgICAgICBrZXlOYW1lLFxuICAgICAgICB9KTtcblxuICAgICAgICBwcmludFN1Y2Nlc3MoYEtleSBpc3N1ZWQgb24gc2VydmljZSBhY2NvdW50ICcke2FjY291bnROYW1lfScgKGV4cGlyZXMgJHtwcm92aXNpb25lZC5leHBpcmVzQXR9KWApO1xuXG4gICAgICAgIC8vIEFuIGV4cGxpY2l0IFBMQVRGT1JNX1NFQ1JFVF9OQU1FIHN0aWxsIHdpbnMgKHRoZSBlc2NhcGUgaGF0Y2ggZm9yXG4gICAgICAgIC8vIGhhbmQtbWFuYWdlZCBwYXRocyk7IG90aGVyd2lzZSBkZXJpdmUgaXQgZnJvbSB0aGUgb3JnIHRoZSBwbGF0Zm9ybVxuICAgICAgICAvLyByZXBvcnRlZCwgd2hpY2ggd29ya3Mgd2l0aCBhbiBvcGFxdWUgYWNjZXNzIGtleSBhcyBQTEFURk9STV9UT0tFTiDigJRcbiAgICAgICAgLy8gYSBrZXkgY2FycmllcyBubyBvcmcgY2xhaW0gdG8gZGVjb2RlLlxuICAgICAgICBjb25zdCBzZWNyZXROYW1lID0gcHJvY2Vzcy5lbnYuUExBVEZPUk1fU0VDUkVUX05BTUVcbiAgICAgICAgICB8fCBzZWNyZXROYW1lRm9yT3JnKHByb3Zpc2lvbmVkLm9yZ2FuaXphdGlvbklkLCBzY29wZSA/IHNjb3BlU2VjcmV0TGVhZihzY29wZSkgOiAncGxhdGZvcm0nKTtcblxuICAgICAgICBhdWRpdExvZygnc3RvcmUtdG9rZW4nLCB7XG4gICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgc2VjcmV0TmFtZSxcbiAgICAgICAgICBkYXlzLFxuICAgICAgICAgIHNlcnZpY2VBY2NvdW50OiBhY2NvdW50TmFtZSxcbiAgICAgICAgICBzY29wZTogc2NvcGUgPz8gbnVsbCxcbiAgICAgICAgICBrZXlJZDogcHJvdmlzaW9uZWQua2V5SWQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHByaW50SW5mbygnUGFyYW1ldGVycycsIHtcbiAgICAgICAgICBzZWNyZXROYW1lLFxuICAgICAgICAgIHJlZ2lvbixcbiAgICAgICAgICBzZXJ2aWNlQWNjb3VudDogYWNjb3VudE5hbWUsXG4gICAgICAgICAgc2NvcGU6IHNjb3BlID8/ICcobm9uZSknLFxuICAgICAgICAgIGRheXMsXG4gICAgICAgICAgZXhwaXJlc0luOiBgJHtleHBpcmVzSW5TZWNvbmRzfXNgLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBXaGF0IHRoaXMgcnVuIGlzIFJFUExBQ0lORywgcmVhZCBiZWZvcmUgdGhlIHdyaXRlIHNvIHRoZSBvbGQga2V5IGNhbiBiZVxuICAgICAgICAvLyByZXRpcmVkIGFmdGVyIHRoZSBuZXcgb25lIGlzIHNhZmVseSBzdG9yZWQuXG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gYXdhaXQgcHJldmlvdXNLZXlJZChzZWNyZXROYW1lLCBhd3MpO1xuXG4gICAgICAgIC8vIFNjaGVtYTogeyB1c2VybmFtZTogb3JnSWQsIHBhc3N3b3JkOiA8cGJfc2FfIGtleT4sIC4uLm1ldGFkYXRhIH1cbiAgICAgICAgLy8gLSB1c2VybmFtZS9wYXNzd29yZCBzYXRpc2Z5IENvZGVCdWlsZCdzIGBzZWNyZXRzTWFuYWdlckNyZWRlbnRpYWxzYFxuICAgICAgICAvLyAgIChIVFRQIEJhc2ljLCBzZW50IHRvIHBpcGVsaW5lLWltYWdlLXJlZ2lzdHJ5J3MgL3Rva2VuIGVuZHBvaW50LCB3aGljaFxuICAgICAgICAvLyAgIGV4Y2hhbmdlcyB0aGUgb3BhcXVlIGtleSBsaWtlIGV2ZXJ5IG90aGVyIHNlcnZpY2UgZG9lcylcbiAgICAgICAgLy8gLSBgcGFzc3dvcmRgIHN0YXlzIHRoZSBjYW5vbmljYWwgZmllbGQ6IHRoZSBwbHVnaW4tbG9va3VwIExhbWJkYSwgdGhlXG4gICAgICAgIC8vICAgZXZlbnRzIExhbWJkYSBhbmQgYC0tc3RvcmUtdG9rZW5zYCBhbGwgcmVhZCBpdC4gT25seSBpdHMgVkFMVUUgY2hhbmdlZCxcbiAgICAgICAgLy8gICBmcm9tIGEgbWFjaGluZS1zZXNzaW9uIEpXVCB0byBhbiBvcGFxdWUgc2VydmljZS1hY2NvdW50IGtleS5cbiAgICAgICAgLy8gLSBrZXlJZCAvIHNlcnZpY2VBY2NvdW50SWQgYXJlIHdoYXQgdGhlIHJvdGF0aW9uIExhbWJkYSBuZWVkcyB0byByZXRpcmVcbiAgICAgICAgLy8gICB0aGUga2V5IGl0IHJlcGxhY2VzLlxuICAgICAgICBjb25zdCBzZWNyZXRWYWx1ZSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICB1c2VybmFtZTogcHJvdmlzaW9uZWQub3JnYW5pemF0aW9uSWQsXG4gICAgICAgICAgcGFzc3dvcmQ6IHByb3Zpc2lvbmVkLmtleSxcbiAgICAgICAgICBwbGF0Zm9ybVVybDogY2xpZW50LmdldEJhc2VVcmwoKSxcbiAgICAgICAgICBvcmdhbml6YXRpb25JZDogcHJvdmlzaW9uZWQub3JnYW5pemF0aW9uSWQsXG4gICAgICAgICAgc2VydmljZUFjY291bnRJZDogcHJvdmlzaW9uZWQuc2VydmljZUFjY291bnRJZCxcbiAgICAgICAgICBzZXJ2aWNlQWNjb3VudE5hbWU6IHByb3Zpc2lvbmVkLnNlcnZpY2VBY2NvdW50TmFtZSxcbiAgICAgICAgICBrZXlJZDogcHJvdmlzaW9uZWQua2V5SWQsXG4gICAgICAgICAgc2NvcGU6IHByb3Zpc2lvbmVkLnNjb3BlLFxuICAgICAgICAgIGV4cGlyZXNJbjogZXhwaXJlc0luU2Vjb25kcyxcbiAgICAgICAgICBleHBpcmVzQXQ6IHByb3Zpc2lvbmVkLmV4cGlyZXNBdCxcbiAgICAgICAgICBjcmVhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcHJpbnRTZWN0aW9uKCdTdG9yZSBLZXknKTtcblxuICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGBQaXBlbGluZSBCdWlsZGVyIHNlcnZpY2UtYWNjb3VudCBrZXkgKCR7YWNjb3VudE5hbWV9OyByZW5ldyBieSAke3Byb3Zpc2lvbmVkLmV4cGlyZXNBdH0pYDtcbiAgICAgICAgYXdhaXQgdXBzZXJ0U2VjcmV0KHNlY3JldE5hbWUsIHNlY3JldFZhbHVlLCBkZXNjcmlwdGlvbiwgYXdzKTtcblxuICAgICAgICBjb25zdCBhcm4gPSBhd2FpdCBnZXRTZWNyZXRBcm4oc2VjcmV0TmFtZSwgYXdzKTtcblxuICAgICAgICAvLyBSZXRpcmUgdGhlIGNyZWRlbnRpYWwgdGhpcyBydW4gcmVwbGFjZWQg4oCUIEFGVEVSIHRoZSBuZXcgb25lIGlzIHN0b3JlZCxcbiAgICAgICAgLy8gbmV2ZXIgYmVmb3JlLiBBIGZhaWx1cmUgaGVyZSBsZWF2ZXMgYSBzdXBlcmZsdW91cyBrZXkgdGhhdCBleHBpcmVzIG9uXG4gICAgICAgIC8vIGl0cyBvd247IGRvaW5nIGl0IGluIHRoZSBvdGhlciBvcmRlciB3b3VsZCBsZWF2ZSB0aGUgc2VjcmV0IG5hbWluZyBhXG4gICAgICAgIC8vIHJldm9rZWQga2V5IGlmIHRoZSB3cml0ZSBmYWlsZWQuXG4gICAgICAgIGlmIChwcmV2aW91cy5rZXlJZCAmJiBwcmV2aW91cy5zZXJ2aWNlQWNjb3VudElkID09PSBwcm92aXNpb25lZC5zZXJ2aWNlQWNjb3VudElkKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHJldm9rZVNlcnZpY2VBY2NvdW50S2V5KFxuICAgICAgICAgICAgICBjbGllbnQsIHBhc3N3b3JkISwgcHJvdmlzaW9uZWQub3JnYW5pemF0aW9uSWQsIHByb3Zpc2lvbmVkLnNlcnZpY2VBY2NvdW50SWQsIHByZXZpb3VzLmtleUlkLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHByaW50U3VjY2VzcyhgUmV0aXJlZCB0aGUgcHJldmlvdXMga2V5ICgke3ByZXZpb3VzLmtleUlkfSlgKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICAgYFN0b3JlZCB0aGUgbmV3IGtleSwgYnV0IGNvdWxkIG5vdCByZXZva2UgdGhlIHByZXZpb3VzIG9uZSAoJHtwcmV2aW91cy5rZXlJZH0pOiBgXG4gICAgICAgICAgICAgICsgYCR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpfS4gSXQgZXhwaXJlcyBvbiBpdHMgb3duOyByZXZva2UgaXQgZnJvbSBgXG4gICAgICAgICAgICAgICsgJ1NldHRpbmdzIOKGkiBTZXJ2aWNlIGFjY291bnRzIGlmIHlvdSB3YW50IGl0IGdvbmUgbm93LicsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9wdGlvbmFsbHkgaW5zdGFsbCB0aGUgb25jZS1hLWRheSByb3RhdGlvbiBzdGFjayBzbyB0aGlzIGtleSBuZXZlciBsYXBzZXMuXG4gICAgICAgIGxldCBzY2hlZHVsZUV4cHJlc3Npb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKG9wdGlvbnMuc2NoZWR1bGUpIHtcbiAgICAgICAgICBjb25zdCBmaXZlRmllbGRDcm9uID0gb3B0aW9ucy5jcm9uIHx8IHByb2Nlc3MuZW52LlRPS0VOX1JFTkVXX1NDSEVEVUxFIHx8IERFRkFVTFRfUkVORVdfQ1JPTjtcbiAgICAgICAgICBzY2hlZHVsZUV4cHJlc3Npb24gPSBhd2FpdCBkZXBsb3lSZW5ld1NjaGVkdWxlKHtcbiAgICAgICAgICAgIHBsYXRmb3JtVXJsOiBjbGllbnQuZ2V0QmFzZVVybCgpLFxuICAgICAgICAgICAgc2VjcmV0TmFtZSxcbiAgICAgICAgICAgIGRheXMsXG4gICAgICAgICAgICBmaXZlRmllbGRDcm9uLFxuICAgICAgICAgICAgcmVnaW9uLFxuICAgICAgICAgICAgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuanNvbikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBzZWNyZXROYW1lLFxuICAgICAgICAgICAgc2VjcmV0QXJuOiBhcm4sXG4gICAgICAgICAgICByZWdpb24sXG4gICAgICAgICAgICBzZXJ2aWNlQWNjb3VudDogYWNjb3VudE5hbWUsXG4gICAgICAgICAgICBzZXJ2aWNlQWNjb3VudElkOiBwcm92aXNpb25lZC5zZXJ2aWNlQWNjb3VudElkLFxuICAgICAgICAgICAga2V5SWQ6IHByb3Zpc2lvbmVkLmtleUlkLFxuICAgICAgICAgICAgc2NvcGU6IHByb3Zpc2lvbmVkLnNjb3BlLFxuICAgICAgICAgICAgZXhwaXJlc0luRGF5czogZGF5cyxcbiAgICAgICAgICAgIGV4cGlyZXNBdDogcHJvdmlzaW9uZWQuZXhwaXJlc0F0LFxuICAgICAgICAgICAgc2NoZWR1bGU6IHNjaGVkdWxlRXhwcmVzc2lvbiA/PyBudWxsLFxuICAgICAgICAgIH0sIG51bGwsIDIpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdLZXkgU3RvcmVkJyk7XG5cbiAgICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAgICdTZWNyZXQgTmFtZSc6IHNlY3JldE5hbWUsXG4gICAgICAgICAgICAnU2VjcmV0IEFSTic6IGFybixcbiAgICAgICAgICAgICdSZWdpb24nOiByZWdpb24sXG4gICAgICAgICAgICAnU2VydmljZSBBY2NvdW50JzogYWNjb3VudE5hbWUsXG4gICAgICAgICAgICAnS2V5IFNjb3BlJzogcHJvdmlzaW9uZWQuc2NvcGUgPz8gJyhub25lIOKAlCBmdWxsIHBsYXRmb3JtIGNyZWRlbnRpYWwpJyxcbiAgICAgICAgICAgICdLZXkgSWQnOiBwcm92aXNpb25lZC5rZXlJZCxcbiAgICAgICAgICAgICdFeHBpcmVzIEluJzogYCR7ZGF5c30gZGF5c2AsXG4gICAgICAgICAgICAnUmVuZXcgQnknOiBwcm92aXNpb25lZC5leHBpcmVzQXQsXG4gICAgICAgICAgICAnQXV0by1Sb3RhdGUnOiBzY2hlZHVsZUV4cHJlc3Npb24gPyBg4pyTICR7c2NoZWR1bGVFeHByZXNzaW9ufWAgOiAnb2ZmIChwYXNzIC0tc2NoZWR1bGUgdG8gZW5hYmxlKScsXG4gICAgICAgICAgICAnU3RhdHVzJzogJ+KckyBTdG9yZWQnLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICAgIHByaW50U3VjY2VzcygnS2V5IHN0b3JlZC4gVG8gdXNlIHdpdGggc3ludGgvZGVwbG95OicpO1xuICAgICAgICAgIHByaW50SW5mbyhgICBleHBvcnQgUExBVEZPUk1fU0VDUkVUX05BTUU9JHtzZWNyZXROYW1lfWApO1xuICAgICAgICAgIHByaW50SW5mbygnICBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIHN5bnRoIC0taWQgPHBpcGVsaW5lLWlkPiAtLXN0b3JlLXRva2VucycpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgICBpZiAoc2NoZWR1bGVFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICBwcmludEluZm8oYEF1dG8tcm90YXRpb24gaXMgYWN0aXZlICgke3NjaGVkdWxlRXhwcmVzc2lvbn0pOyB0aGUgc2VjcmV0IGlzIHJlcGxhY2VkIGJlZm9yZSAke3Byb3Zpc2lvbmVkLmV4cGlyZXNBdH0uYCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByaW50SW5mbyhgUm90YXRlIGJlZm9yZSAke3Byb3Zpc2lvbmVkLmV4cGlyZXNBdH0gd2l0aDogcGlwZWxpbmUtbWFuYWdlciBpbmZyYSBzdG9yZS10b2tlbiAtLWRheXMgJHtkYXlzfWApO1xuICAgICAgICAgICAgcHJpbnRJbmZvKCcgIChvciBwYXNzIC0tc2NoZWR1bGUgdG8gaW5zdGFsbCBhIGRhaWx5IGF1dG8tcm90YXRpb24gc3RhY2spJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6ICdzdG9yZS10b2tlbicsXG4gICAgICAgICAgICBleGVjdXRpb25JZCxcbiAgICAgICAgICAgIHNlY3JldE5hbWU6IHByb2Nlc3MuZW52LlBMQVRGT1JNX1NFQ1JFVF9OQU1FIHx8ICcoZGVyaXZlZCBmcm9tIHRoZSBvcmcpJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
386
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUtdG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvc3RvcmUtdG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxZQUFZLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRixPQUFPLEVBQUUsOEJBQThCLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JLLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLFNBQVMsRUFB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QUFDLHFFQUFxRSxDQUFDLENBQUM7Z0JBQ2pGLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2hCLElBQUksa0JBQWtCLEVBQUUsQ0FBQztvQkFDdkIsU0FBUyxDQUFDLDRCQUE0QixrQkFBa0Isb0NBQW9DLFdBQVcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO2dCQUN4SCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sU0FBUyxDQUFDLGlCQUFpQixXQUFXLENBQUMsU0FBUyxvREFBb0QsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDNUcsU0FBUyxDQUFDLCtEQUErRCxDQUFDLENBQUM7Z0JBQzdFLENBQUM7WUFDSCxDQUFDO1FBRUgsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxXQUFXLEVBQUU7Z0JBQzFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSztnQkFDM0IsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsT0FBTyxFQUFFO29CQUNQLE9BQU8sRUFBRSxhQUFhO29CQUN0QixXQUFXO29CQUNYLFVBQVUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixJQUFJLHdCQUF3QjtpQkFDekU7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGV4ZWNGaWxlU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgTGFtYmRhQ2xpZW50LCBVcGRhdGVGdW5jdGlvbkNvZGVDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWxhbWJkYSc7XG5pbXBvcnQgeyBlcnJvck1lc3NhZ2UgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IEFQUF9WRVJTSU9OLCB2YWxpZGF0ZU51bWJlciB9IGZyb20gJy4uL2NvbmZpZy9jbGkuY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IGF1ZGl0TG9nIH0gZnJvbSAnLi4vdXRpbHMvYXVkaXQtbG9nLmpzJztcbmltcG9ydCB7IHJlc29sdmVBd3NSZWdpb24gfSBmcm9tICcuLi91dGlscy9hd3MtZW52LmpzJztcbmltcG9ydCB7IHVwc2VydFNlY3JldCwgZ2V0U2VjcmV0QXJuLCBnZXRTZWNyZXRWYWx1ZSB9IGZyb20gJy4uL3V0aWxzL2F3cy1zZWNyZXRzLmpzJztcbmltcG9ydCB7IGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnRBc3luYywgcHJpbnRDb21tYW5kSGVhZGVyLCBwcmludFNzbFdhcm5pbmcsIHdpdGhQcm9maWxlT3B0aW9uLCB3aXRoUmVnaW9uT3B0aW9uLCB3aXRoU3NsT3B0aW9ucyB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgdG9FdmVudEJyaWRnZUNyb24gfSBmcm9tICcuLi91dGlscy9jcm9uLmpzJztcbmltcG9ydCB7IEVSUk9SX0NPREVTLCBoYW5kbGVFcnJvciB9IGZyb20gJy4uL3V0aWxzL2Vycm9yLWhhbmRsZXIuanMnO1xuaW1wb3J0IHsgcHJpbnRJbmZvLCBwcmludEtleVZhbHVlLCBwcmludFNlY3Rpb24sIHByaW50U3VjY2VzcywgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcbmltcG9ydCB7IGVuc3VyZVBsYXRmb3JtVG9rZW4sIHNjb3BlU2VjcmV0TGVhZiwgc2VjcmV0TmFtZUZvck9yZyB9IGZyb20gJy4uL3V0aWxzL3BsYXRmb3JtLXNlY3JldC5qcyc7XG5pbXBvcnQgeyBwcm92aXNpb25TZXJ2aWNlQWNjb3VudEtleSwgcmV2b2tlU2VydmljZUFjY291bnRLZXkgfSBmcm9tICcuLi91dGlscy9zZXJ2aWNlLWFjY291bnQuanMnO1xuXG4vLyBFU00gaGFzIG5vIF9fZGlybmFtZTsgZGVyaXZlIGl0IGZyb20gdGhpcyBtb2R1bGUncyBVUkwuXG5jb25zdCBfX2Rpcm5hbWUgPSBwYXRoLmRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcblxuY29uc3QgUkVORVdfU1RBQ0tfTkFNRSA9ICdwaXBlbGluZS1idWlsZGVyLXRva2VuLXJlbmV3Jztcbi8vIENGTi1tYW5hZ2VkIExhbWJkYSBmdW5jdGlvbiBuYW1lIOKAlCBrZWVwIGluIHN5bmMgd2l0aCB0b2tlbi1yZW5ldy1zdGFjay5qc29uLlxuY29uc3QgUkVORVdfTEFNQkRBX05BTUUgPSAncGlwZWxpbmUtYnVpbGRlci10b2tlbi1yZW5ldyc7XG4vLyBEZWZhdWx0IDUtZmllbGQgY3JvbiAoZGFpbHkgYXQgbWlkbmlnaHQpIHdoZW4gbmVpdGhlciAtLWNyb24gbm9yIFRPS0VOX1JFTkVXX1NDSEVEVUxFIGlzIHNldC5cbmNvbnN0IERFRkFVTFRfUkVORVdfQ1JPTiA9ICcwIDAgKiAqIConO1xuXG4vKipcbiAqIENhcGFiaWxpdHkgc2NvcGVzIGEgc3RvcmVkIGNyZWRlbnRpYWwgbWF5IGNhcnJ5LCBhbmQgd2hhdCBlYWNoIG9uZSBpcyBGT1IuXG4gKlxuICogQSBzY29wZWQga2V5IGV4Y2hhbmdlcyB0byBhIHRva2VuIHdpdGggbm8gcGVybWlzc2lvbnMgYW5kIG5vIGFkbWluIGZsYWdzIGF0XG4gKiBhbGwg4oCUIG9ubHkgdGhlIG9uZSBjYXBhYmlsaXR5IOKAlCBzbyBpdCBpcyB0aGUgc2hhcGUgZXZlcnkgYXV0b21hdGlvbiB0aGF0IGRvZXNcbiAqIGV4YWN0bHkgb25lIHRoaW5nIHNob3VsZCBob2xkICgjMTIpLiBUaGUgdW5zY29wZWQgYHBsYXRmb3JtYCBjcmVkZW50aWFsIGlzIHRoZVxuICogcmVtYWluaW5nIGZ1bGwtcHJpdmlsZWdlIG9uZTogc3ludGgvZGVwbG95IGNhbGxiYWNrcyBhbmQgdGhlIHBsdWdpbi1sb29rdXBcbiAqIExhbWJkYSBjYWxsIHRoZSBvcmRpbmFyeSBBUEkgc3VyZmFjZSwgd2hpY2ggbm8gc2luZ2xlIHNjb3BlIGNvdmVycy5cbiAqL1xuY29uc3QgU0NPUEVfQ0FUQUxPRzogUmVjb3JkPHN0cmluZywgeyBhY2NvdW50OiBzdHJpbmc7IGRlc2NyaXB0aW9uOiBzdHJpbmcgfT4gPSB7XG4gICdyZXBvcnRpbmc6aW5nZXN0Jzoge1xuICAgIGFjY291bnQ6ICdyZXBvcnRpbmctaW5nZXN0JyxcbiAgICBkZXNjcmlwdGlvbjogJ0FXUyBwaXBlbGluZS1ldmVudCBpbmdlc3Rpb24gKHRoZSBldmVudHMgTGFtYmRhIFBPU1RzIC9yZXBvcnRzL2V2ZW50cyknLFxuICB9LFxuICAncmVnaXN0cnk6cHVzaCc6IHtcbiAgICBhY2NvdW50OiAncmVnaXN0cnktcHVzaCcsXG4gICAgZGVzY3JpcHRpb246ICdDSSBpbWFnZSBwdXNoZXMgaW50byB0aGlzIG9yZ+KAmXMgcmVnaXN0cnkgbmFtZXNwYWNlIChDb2RlQnVpbGQg4oaSIC90b2tlbiknLFxuICB9LFxufTtcblxuLyoqIFRoZSBhY2NvdW50IHRoYXQgaG9sZHMgdGhlIHVuc2NvcGVkLCBmdWxsLXByaXZpbGVnZSBzdG9yZWQgY3JlZGVudGlhbC4gKi9cbmNvbnN0IFBMQVRGT1JNX0FDQ09VTlQgPSB7XG4gIGFjY291bnQ6ICdwbGF0Zm9ybS1hdXRvbWF0aW9uJyxcbiAgZGVzY3JpcHRpb246ICdTdG9yZWQgcGxhdGZvcm0gY3JlZGVudGlhbCBmb3IgQ0RLIHN5bnRoL2RlcGxveSwgcGx1Z2luIGxvb2t1cCBhbmQgaW1hZ2UgcHVzaGVzJyxcbn07XG5cbi8qKlxuICogRGVwbG95IChvciB1cGRhdGUpIHRoZSBvbmNlLWEtZGF5IEtFWSBST1RBVElPTiBzdGFjazogYSBzY2hlZHVsZWQgTGFtYmRhIHRoYXRcbiAqIHJlcGxhY2VzIHRoZSBzZXJ2aWNlLWFjY291bnQga2V5IGluIHRoaXMgc2VjcmV0IGJlZm9yZSBpdCBleHBpcmVzLiBNaXJyb3JzXG4gKiBzZXR1cC1ldmVudHMg4oCUIGBhd3MgY2xvdWRmb3JtYXRpb24gZGVwbG95YCBmb3IgdGhlIGluZnJhLCB0aGVuIGEgZGlyZWN0XG4gKiBVcGRhdGVGdW5jdGlvbkNvZGUgd2l0aCB0aGUgcm90YXRvciBoYW5kbGVyIGNvbXBpbGVkIGFsb25nc2lkZSB0aGlzIENMSSAoc2VlXG4gKiBzcmMvbGFtYmRhL3Rva2VuLXJlbmV3LWhhbmRsZXIudHMpLlxuICovXG5hc3luYyBmdW5jdGlvbiBkZXBsb3lSZW5ld1NjaGVkdWxlKG9wdHM6IHtcbiAgc2VjcmV0TmFtZTogc3RyaW5nO1xuICBkYXlzOiBudW1iZXI7XG4gIGZpdmVGaWVsZENyb246IHN0cmluZztcbiAgcmVnaW9uOiBzdHJpbmc7XG4gIHByb2ZpbGU/OiBzdHJpbmc7XG59KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qgc2NoZWR1bGVFeHByZXNzaW9uID0gdG9FdmVudEJyaWRnZUNyb24ob3B0cy5maXZlRmllbGRDcm9uKTsgLy8gdmFsaWRhdGVzICsgMTUtbWluIGd1YXJkXG5cbiAgLy8gTmFtZSByZW5ld2FsIHJlc291cmNlcyBwZXItc2VjcmV0IHNvIGEgc2NvcGVkLWNyZWRlbnRpYWwgc3RhY2sgKGUuZy4gdGhlXG4gIC8vIHJlcG9ydGluZy1pbmdlc3Qga2V5IHRoZSBldmVudCBMYW1iZGEgcmVhZHMpIGNvZXhpc3RzIHdpdGggdGhlXG4gIC8vIHBsYXRmb3JtLWNyZWRlbnRpYWwgc3RhY2sgaW5zdGVhZCBvZiBjb2xsaWRpbmcgb24gdGhlIChhY2NvdW50LWdsb2JhbCkgSUFNXG4gIC8vIHJvbGUgLyBMYW1iZGEgLyBydWxlIG5hbWVzLiBUaGUgcGxhdGZvcm0gc2VjcmV0IGtlZXBzIHRoZSBiYXJlIG5hbWVcbiAgLy8gKHN1ZmZpeCAnJykgc28gZXhpc3RpbmcgZGVwbG95bWVudHMnIHN0YWNrIGlzIHVwZGF0ZWQgaW4gcGxhY2UsIG5vdFxuICAvLyBkdXBsaWNhdGVkOyBhbnkgb3RoZXIgc2VjcmV0IGFwcGVuZHMgaXRzIHRyYWlsaW5nIHBhdGggc2VnbWVudC5cbiAgY29uc3Qgc2VjcmV0TGVhZiA9IG9wdHMuc2VjcmV0TmFtZS5yZXBsYWNlKC8uKlxcLy8sICcnKTsgLy8gJ3BsYXRmb3JtJyB8ICdyZXBvcnRpbmctaW5nZXN0JyB8IOKAplxuICBjb25zdCBuYW1lU3VmZml4ID0gc2VjcmV0TGVhZiA9PT0gJ3BsYXRmb3JtJyA/ICcnIDogYC0ke3NlY3JldExlYWYucmVwbGFjZSgvW15hLXowLTldKy9naSwgJy0nKX1gO1xuICBjb25zdCBzdGFja05hbWUgPSBgJHtSRU5FV19TVEFDS19OQU1FfSR7bmFtZVN1ZmZpeH1gO1xuICBjb25zdCBsYW1iZGFOYW1lID0gYCR7UkVORVdfTEFNQkRBX05BTUV9JHtuYW1lU3VmZml4fWA7XG5cbiAgcHJpbnRTZWN0aW9uKCdTY2hlZHVsZSBSb3RhdGlvbicpO1xuICBwcmludEluZm8oJ1BhcmFtZXRlcnMnLCB7XG4gICAgc3RhY2s6IHN0YWNrTmFtZSxcbiAgICBzY2hlZHVsZTogb3B0cy5maXZlRmllbGRDcm9uLFxuICAgIGV2ZW50YnJpZGdlOiBzY2hlZHVsZUV4cHJlc3Npb24sXG4gICAgcmVuZXdEYXlzOiBvcHRzLmRheXMsXG4gIH0pO1xuXG4gIC8vIFN0ZXAgMTogaW5mcmEgKExhbWJkYSBnZXRzIHBsYWNlaG9sZGVyIGNvZGUgb24gZmlyc3QgY3JlYXRlKS5cbiAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL3RlbXBsYXRlcy90b2tlbi1yZW5ldy1zdGFjay5qc29uJyk7XG4gIGNvbnN0IGNmbkFyZ3MgPSBbXG4gICAgJ2Nsb3VkZm9ybWF0aW9uJywgJ2RlcGxveScsXG4gICAgJy0tc3RhY2stbmFtZScsIHN0YWNrTmFtZSxcbiAgICAnLS10ZW1wbGF0ZS1maWxlJywgdGVtcGxhdGVQYXRoLFxuICAgICctLXBhcmFtZXRlci1vdmVycmlkZXMnLFxuICAgIGBQbGF0Zm9ybVNlY3JldE5hbWU9JHtvcHRzLnNlY3JldE5hbWV9YCxcbiAgICBgUmVuZXdEYXlzPSR7b3B0cy5kYXlzfWAsXG4gICAgYFNjaGVkdWxlRXhwcmVzc2lvbj0ke3NjaGVkdWxlRXhwcmVzc2lvbn1gLFxuICAgIGBOYW1lU3VmZml4PSR7bmFtZVN1ZmZpeH1gLFxuICAgIC8vIFJlY29yZGVkIGZvciBwcm92ZW5hbmNlIG9ubHkg4oCUIHRoZSByb3RhdG9yIG5vIGxvbmdlciBpbnN0YWxscyB0aGUgQ0xJIGF0XG4gICAgLy8gcnVudGltZSAoaXQgc3BlYWtzIHRvIHRoZSBwbGF0Zm9ybSBkaXJlY3RseSksIGJ1dCBrbm93aW5nIHdoaWNoIENMSVxuICAgIC8vIGRlcGxveWVkIGEgc3RhY2sgaXMgd29ydGgga2VlcGluZy5cbiAgICBgUGlwZWxpbmVNYW5hZ2VyVmVyc2lvbj0ke0FQUF9WRVJTSU9OfWAsXG4gICAgJy0tY2FwYWJpbGl0aWVzJywgJ0NBUEFCSUxJVFlfTkFNRURfSUFNJyxcbiAgICAnLS1uby1mYWlsLW9uLWVtcHR5LWNoYW5nZXNldCcsXG4gICAgJy0tcmVnaW9uJywgb3B0cy5yZWdpb24sXG4gIF07XG4gIGlmIChvcHRzLnByb2ZpbGUpIGNmbkFyZ3MucHVzaCgnLS1wcm9maWxlJywgb3B0cy5wcm9maWxlKTtcbiAgZXhlY0ZpbGVTeW5jKCdhd3MnLCBjZm5BcmdzLCB7IHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG5cbiAgLy8gU3RlcCAyOiB1cGxvYWQgdGhlIHJlYWwgaGFuZGxlci4gSXQncyBFU00sIHNvIHRoZSB6aXAgZW50cnkgbXVzdCBiZSBpbmRleC5tanNcbiAgLy8gKEhhbmRsZXIgc3RheXMgaW5kZXguaGFuZGxlciDigJQgbm9kZWpzMjQueCByZXNvbHZlcyB0aGUgLm1qcyBleHRlbnNpb24pLlxuICBjb25zdCBoYW5kbGVyU3JjID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xhbWJkYS90b2tlbi1yZW5ldy1oYW5kbGVyLmpzJyk7XG4gIGlmICghZnMuZXhpc3RzU3luYyhoYW5kbGVyU3JjKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVG9rZW4tcmVuZXcgaGFuZGxlciBub3QgZm91bmQgYXQgJHtoYW5kbGVyU3JjfSDigJQgd2FzIHRoZSBwYWNrYWdlIGJ1aWx0P2ApO1xuICB9XG4gIGNvbnN0IHRtcERpciA9IGZzLm1rZHRlbXBTeW5jKHBhdGguam9pbihvcy50bXBkaXIoKSwgJ3Rva2VuLXJlbmV3LScpKTtcbiAgdHJ5IHtcbiAgICBmcy5jb3B5RmlsZVN5bmMoaGFuZGxlclNyYywgcGF0aC5qb2luKHRtcERpciwgJ2luZGV4Lm1qcycpKTtcbiAgICBjb25zdCB6aXBQYXRoID0gcGF0aC5qb2luKHRtcERpciwgJ2luZGV4LnppcCcpO1xuICAgIGV4ZWNGaWxlU3luYygnemlwJywgWyctaicsIHppcFBhdGgsICdpbmRleC5tanMnXSwgeyBjd2Q6IHRtcERpciwgc3RkaW86ICdwaXBlJyB9KTtcblxuICAgIGNvbnN0IGxhbWJkYUNsaWVudCA9IG5ldyBMYW1iZGFDbGllbnQoeyByZWdpb246IG9wdHMucmVnaW9uIH0pO1xuICAgIGF3YWl0IGxhbWJkYUNsaWVudC5zZW5kKG5ldyBVcGRhdGVGdW5jdGlvbkNvZGVDb21tYW5kKHtcbiAgICAgIEZ1bmN0aW9uTmFtZTogbGFtYmRhTmFtZSxcbiAgICAgIFppcEZpbGU6IGZzLnJlYWRGaWxlU3luYyh6aXBQYXRoKSxcbiAgICB9KSk7XG4gIH0gZmluYWxseSB7XG4gICAgZnMucm1TeW5jKHRtcERpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICB9XG5cbiAgcHJpbnRTdWNjZXNzKGBSb3RhdGlvbiBzY2hlZHVsZWQgKCR7c2NoZWR1bGVFeHByZXNzaW9ufSlgKTtcbiAgcmV0dXJuIHNjaGVkdWxlRXhwcmVzc2lvbjtcbn1cblxuLyoqIFJlYWQgdGhlIGtleSBpZCBhIHByZXZpb3VzIHJ1biBzdG9yZWQsIHNvIHRoaXMgcnVuIGNhbiByZXRpcmUgaXQuICovXG5hc3luYyBmdW5jdGlvbiBwcmV2aW91c0tleUlkKFxuICBzZWNyZXROYW1lOiBzdHJpbmcsXG4gIGF3czogeyByZWdpb246IHN0cmluZzsgcHJvZmlsZT86IHN0cmluZyB9LFxuKTogUHJvbWlzZTx7IGtleUlkPzogc3RyaW5nOyBzZXJ2aWNlQWNjb3VudElkPzogc3RyaW5nIH0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCBnZXRTZWNyZXRWYWx1ZShzZWNyZXROYW1lLCBhd3MpO1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KSBhcyB7IGtleUlkPzogc3RyaW5nOyBzZXJ2aWNlQWNjb3VudElkPzogc3RyaW5nIH07XG4gICAgcmV0dXJuIHsga2V5SWQ6IHBhcnNlZC5rZXlJZCwgc2VydmljZUFjY291bnRJZDogcGFyc2VkLnNlcnZpY2VBY2NvdW50SWQgfTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gTm8gc2VjcmV0IHlldCAoZmlyc3QgcnVuKSwgb3Igb25lIHdyaXR0ZW4gYmVmb3JlIHRoZSBzZXJ2aWNlLWFjY291bnRcbiAgICAvLyBjdXRvdmVyIChubyBrZXlJZCkuIEVpdGhlciB3YXkgdGhlcmUgaXMgbm90aGluZyB0aGlzIHJ1biBjYW4gcmV0aXJlLlxuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgYHN0b3JlLXRva2VuYCBjb21tYW5kIHdpdGggdGhlIENMSSBwcm9ncmFtLlxuICpcbiAqIFByb3Zpc2lvbnMgdGhlIG9yZydzIG1hY2hpbmUgaWRlbnRpdHkg4oCUIGEgU0VSVklDRSBBQ0NPVU5UIGFuZCBvbmUgYHBiX3NhX+KApmBcbiAqIGtleSDigJQgYW5kIHN0b3JlcyB0aGUga2V5IGluIEFXUyBTZWNyZXRzIE1hbmFnZXIgZm9yIENESyBkZXBsb3ltZW50cyxcbiAqIENvZGVCdWlsZCdzIHJlZ2lzdHJ5IGNyZWRlbnRpYWxzLCB0aGUgcGx1Z2luLWxvb2t1cCBMYW1iZGEgYW5kIHRoZSBldmVudFxuICogaW5nZXN0aW9uIExhbWJkYSAoIzEyIC8gI04yKS4gTm90aGluZyBzdG9yZWQgaXMgdGllZCB0byBhIHBlcnNvbidzIHNlc3Npb24gYW55XG4gKiBtb3JlOiB0aGUgYWNjb3VudCBvdXRsaXZlcyBpdHMgY3JlYXRvciwgdGFrZXMgbm8gc2VhdCwgYW5kIGV2ZXJ5IGF1ZGl0IHJvdyBpdFxuICogcHJvZHVjZXMgbmFtZXMgdGhlIGFjY291bnQuXG4gKlxuICogQmVjYXVzZSBjcmVhdGluZyBhbiBhY2NvdW50IGFuZCBpc3N1aW5nIGl0cyBrZXkgYXJlIHN0ZXAtdXAgZ2F0ZWQsIHRoaXMgbmVlZHNcbiAqIHRoZSBvcGVyYXRvcidzIHBhc3N3b3JkIOKAlCBgLS1wYXNzd29yZGAsIG9yIHRoZSBgUExBVEZPUk1fUEFTU1dPUkRgIGVudiB2YXJcbiAqIChwcmVmZXJyZWQ6IGl0IGtlZXBzIHRoZSBwYXNzd29yZCBvdXQgb2Ygc2hlbGwgaGlzdG9yeSBhbmQgcGxhbiBvdXRwdXQpLlxuICpcbiAqIEJ5IGRlZmF1bHQgaXQgT05MWSB3cml0ZXMgdGhlIHNlY3JldC4gUGFzcyAtLXNjaGVkdWxlIHRvIGFsc28gZGVwbG95IHRoZSBkYWlseVxuICogS0VZIFJPVEFUSU9OIHN0YWNrIChhIExhbWJkYSB0aGF0IHJlcGxhY2VzIHRoZSBrZXkgYmVmb3JlIGl0IGV4cGlyZXMpLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBiYXNoXG4gKiBQTEFURk9STV9QQVNTV09SRD0qKiogcGlwZWxpbmUtbWFuYWdlciBpbmZyYSBzdG9yZS10b2tlbiAtLXJlZ2lvbiB1cy1lYXN0LTFcbiAqIFBMQVRGT1JNX1BBU1NXT1JEPSoqKiBwaXBlbGluZS1tYW5hZ2VyIGluZnJhIHN0b3JlLXRva2VuIC0tZGF5cyA5MCAtLXJlZ2lvbiB1cy1lYXN0LTFcbiAqIFBMQVRGT1JNX1BBU1NXT1JEPSoqKiBwaXBlbGluZS1tYW5hZ2VyIGluZnJhIHN0b3JlLXRva2VuIC0tc2NoZWR1bGUgLS1yZWdpb24gdXMtZWFzdC0xICAgICAjICsgZGFpbHkgcm90YXRpb25cbiAqIFBMQVRGT1JNX1BBU1NXT1JEPSoqKiBwaXBlbGluZS1tYW5hZ2VyIGluZnJhIHN0b3JlLXRva2VuIC0tc2NvcGUgcmVwb3J0aW5nOmluZ2VzdCAtLXNjaGVkdWxlXG4gKiBQTEFURk9STV9QQVNTV09SRD0qKiogcGlwZWxpbmUtbWFuYWdlciBpbmZyYSBzdG9yZS10b2tlbiAtLXNjb3BlIHJlZ2lzdHJ5OnB1c2ggLS1zY2hlZHVsZVxuICogcGlwZWxpbmUtbWFuYWdlciBpbmZyYSBzdG9yZS10b2tlbiAtLWRyeS1ydW5cbiAqIHBpcGVsaW5lLW1hbmFnZXIgaW5mcmEgc3RvcmUtdG9rZW4gLXUgYWRtaW4gLXAgJyoqKicgLS1yZWdpb24gdXMtZWFzdC0xXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0b3JlVG9rZW4ocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICB3aXRoU3NsT3B0aW9ucyhcbiAgICB3aXRoUHJvZmlsZU9wdGlvbihcbiAgICAgIHdpdGhSZWdpb25PcHRpb24ocHJvZ3JhbVxuICAgICAgICAuY29tbWFuZCgnc3RvcmUtdG9rZW4nKVxuICAgICAgICAuZGVzY3JpcHRpb24oJ1Byb3Zpc2lvbiBhbiBvcmcgc2VydmljZS1hY2NvdW50IGtleSAoaXRzIG93biBtYWNoaW5lIGlkZW50aXR5KSBhbmQgc3RvcmUgaXQgaW4gQVdTIFNlY3JldHMgTWFuYWdlciBmb3IgQ0RLIGRlcGxveW1lbnRzJylcbiAgICAgICAgLm9wdGlvbignLXUsIC0taWRlbnRpZmllciA8aWRlbnRpZmllcj4nLCAnVXNlcm5hbWUgb3IgZW1haWwgKHNraXBzIFBMQVRGT1JNX1RPS0VOIHJlcXVpcmVtZW50KScpXG4gICAgICAgIC5vcHRpb24oJy1wLCAtLXBhc3N3b3JkIDxwYXNzd29yZD4nLCAnTG9naW4gcGFzc3dvcmQg4oCUIGFsc28gdXNlZCBmb3IgdGhlIHN0ZXAtdXAgZXZlcnkga2V5IHdyaXRlIHJlcXVpcmVzIChwcmVmZXIgUExBVEZPUk1fUEFTU1dPUkQpJylcbiAgICAgICAgLm9wdGlvbignLS1kYXlzIDxkYXlzPicsICdLZXkgbGlmZXRpbWUgaW4gZGF5cyAobWF4IDM2NSknLCAnMzAnKVxuICAgICAgICAub3B0aW9uKCctLXNjb3BlIDxzY29wZT4nLCBgUHJvdmlzaW9uIGEgbGVhc3QtcHJpdmlsZWdlIHNjb3BlZCBrZXkgaW5zdGVhZCBvZiB0aGUgZnVsbC1wcml2aWxlZ2UgcGxhdGZvcm0gb25lLiBPbmUgb2Y6ICR7T2JqZWN0LmtleXMoU0NPUEVfQ0FUQUxPRykuam9pbignLCAnKX1gKVxuICAgICAgICAub3B0aW9uKCctLWFjY291bnQgPG5hbWU+JywgJ092ZXJyaWRlIHRoZSBzZXJ2aWNlLWFjY291bnQgbmFtZSB0aGlzIGtleSBpcyBpc3N1ZWQgb24gKGRlZmF1bHQ6IGRlcml2ZWQgZnJvbSAtLXNjb3BlKScpXG4gICAgICAgIC5vcHRpb24oJy0tZHJ5LXJ1bicsICdTaG93IHdoYXQgd291bGQgYmUgcHJvdmlzaW9uZWQgd2l0aG91dCBjYWxsaW5nIHRoZSBwbGF0Zm9ybSBvciB3cml0aW5nIHRvIFNlY3JldHMgTWFuYWdlcicsIGZhbHNlKSksXG4gICAgKVxuICAgICAgLm9wdGlvbignLS1zY2hlZHVsZScsICdBbHNvIGRlcGxveSB0aGUgZGFpbHkga2V5LXJvdGF0aW9uIHN0YWNrIHRoYXQgcmVwbGFjZXMgdGhpcyBrZXkgYmVmb3JlIGl0IGV4cGlyZXMgKG9mZiBieSBkZWZhdWx0KScsIGZhbHNlKVxuICAgICAgLm9wdGlvbignLS1jcm9uIDxleHByPicsICdSb3RhdGlvbiBzY2hlZHVsZSBhcyBhIDUtZmllbGQgY3JvbiwgdXNlZCB3aXRoIC0tc2NoZWR1bGUgKGRlZmF1bHQ6IFRPS0VOX1JFTkVXX1NDSEVEVUxFIGVudiBvciBcIjAgMCAqICogKlwiOyBtaW4gZXZlcnkgMTUgbWludXRlcyknKVxuICAgICAgLm9wdGlvbignLS1qc29uJywgJ091dHB1dCByZXN1bHQgYXMgSlNPTicsIGZhbHNlKSxcbiAgKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdTdG9yZSBUb2tlbicsIHVuZGVmaW5lZCwgeyBxdWlldDogb3B0aW9ucy5qc29uIH0pO1xuXG4gICAgICB0cnkge1xuICAgICAgICBwcmludFNzbFdhcm5pbmcob3B0aW9ucy52ZXJpZnlTc2wpO1xuXG4gICAgICAgIGNvbnN0IHJlZ2lvbiA9IHJlc29sdmVBd3NSZWdpb24ob3B0aW9ucy5yZWdpb24pO1xuICAgICAgICBjb25zdCBhd3MgPSB7IHJlZ2lvbiwgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlIGFzIHN0cmluZyB8IHVuZGVmaW5lZCB9O1xuXG4gICAgICAgIGNvbnN0IGRheXMgPSB2YWxpZGF0ZU51bWJlcihvcHRpb25zLmRheXMsICdkYXlzJywgMSwgMzY1KTtcbiAgICAgICAgY29uc3QgZXhwaXJlc0luU2Vjb25kcyA9IGRheXMgKiAyNCAqIDYwICogNjA7XG5cbiAgICAgICAgY29uc3Qgc2NvcGUgPSBvcHRpb25zLnNjb3BlIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgY2F0YWxvZ3VlZCA9IHNjb3BlID8gU0NPUEVfQ0FUQUxPR1tzY29wZV0gOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChzY29wZSAmJiAhY2F0YWxvZ3VlZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biAtLXNjb3BlIFwiJHtzY29wZX1cIi4gU3VwcG9ydGVkOiAke09iamVjdC5rZXlzKFNDT1BFX0NBVEFMT0cpLmpvaW4oJywgJyl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2hpY2ggbWFjaGluZSBpZGVudGl0eSB0aGlzIGNyZWRlbnRpYWwgYmVsb25ncyB0bzogdGhlIHNjb3BlJ3Mgb3duXG4gICAgICAgIC8vIGFjY291bnQsIG9yIHRoZSBvcmcncyBzaW5nbGUgZnVsbC1wcml2aWxlZ2UgYXV0b21hdGlvbiBhY2NvdW50LlxuICAgICAgICBjb25zdCBpZGVudGl0eSA9IGNhdGFsb2d1ZWQgPz8gUExBVEZPUk1fQUNDT1VOVDtcbiAgICAgICAgY29uc3QgYWNjb3VudE5hbWUgPSAob3B0aW9ucy5hY2NvdW50IGFzIHN0cmluZyB8IHVuZGVmaW5lZCkgPz8gaWRlbnRpdHkuYWNjb3VudDtcblxuICAgICAgICAvLyBTdGVwIDA6IGxvZyBpbiBmaXJzdCB3aGVuIGNyZWRzIGFyZSBhdmFpbGFibGUgYW5kIG5vIFBMQVRGT1JNX1RPS0VOIGlzXG4gICAgICAgIC8vIHNldCAoc2hhcmVkIHdpdGggc2V0dXAtZXZlbnRzKS4gQ3JlZHMgY29tZSBmcm9tIC0taWRlbnRpZmllci8tLXBhc3N3b3JkXG4gICAgICAgIC8vIE9SIHRoZSBlbnYgdmFycyBQTEFURk9STV9JREVOVElGSUVSL1BMQVRGT1JNX1BBU1NXT1JEIOKAlCB0aGUgZW52IHBhdGhcbiAgICAgICAgLy8gbGV0cyBjYWxsZXJzIGxpa2UgYHByb3Zpc2lvbiAtLXdpdGgtZXZlbnRzYCBwYXNzIHRoZW0gd2l0aG91dCBwdXR0aW5nXG4gICAgICAgIC8vIHRoZSBwYXNzd29yZCBvbiB0aGUgY29tbWFuZCBsaW5lICh3aGVyZSBpdCB3b3VsZCBzaG93IGluIHBsYW5zL2xvZ3MpLlxuICAgICAgICBhd2FpdCBlbnN1cmVQbGF0Zm9ybVRva2VuKG9wdGlvbnMpO1xuXG4gICAgICAgIC8vIFRoZSBwYXNzd29yZCBpcyBBTFNPIHRoZSBzdGVwLXVwIGZhY3RvciBmb3IgYm90aCB3cml0ZXMgYmVsb3csIHNvIGl0IGlzXG4gICAgICAgIC8vIHJlcXVpcmVkIGV2ZW4gd2hlbiBQTEFURk9STV9UT0tFTiBpcyBhbHJlYWR5IHNldC4gU2F5IHRoYXQgcGxhaW5seVxuICAgICAgICAvLyByYXRoZXIgdGhhbiBmYWlsaW5nIHRocmVlIGNhbGxzIGxhdGVyIHdpdGggYSA0MDMuXG4gICAgICAgIGNvbnN0IHBhc3N3b3JkID0gKG9wdGlvbnMucGFzc3dvcmQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKSB8fCBwcm9jZXNzLmVudi5QTEFURk9STV9QQVNTV09SRDtcbiAgICAgICAgaWYgKCFwYXNzd29yZCAmJiAhb3B0aW9ucy5kcnlSdW4pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnQSBwYXNzd29yZCBpcyByZXF1aXJlZDogY3JlYXRpbmcgYSBzZXJ2aWNlIGFjY291bnQgYW5kIGlzc3VpbmcgaXRzIGtleSBhcmUgYm90aCBzdGVwLXVwIGdhdGVkLiAnXG4gICAgICAgICAgICArICdTZXQgUExBVEZPUk1fUEFTU1dPUkQgKHByZWZlcnJlZCkgb3IgcGFzcyAtLXBhc3N3b3JkLicsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByaW50U2VjdGlvbignUHJvdmlzaW9uIFNlcnZpY2UtQWNjb3VudCBLZXknKTtcblxuICAgICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmMob3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuZHJ5UnVuKSB7XG4gICAgICAgICAgLy8gRHJ5IHJ1biBzdGF5cyBlbnRpcmVseSBPRkZMSU5FIOKAlCBpdCBtdXN0IG5vdCBjcmVhdGUgYW4gYWNjb3VudCBvclxuICAgICAgICAgIC8vIGJ1cm4gYSBrZXkganVzdCB0byBzaG93IHdoYXQgaXQgd291bGQgZG8uXG4gICAgICAgICAgY29uc3QgcGxhbiA9IHtcbiAgICAgICAgICAgIHNlcnZpY2VBY2NvdW50OiBhY2NvdW50TmFtZSxcbiAgICAgICAgICAgIHJvbGVzOiBzY29wZSA/ICdub25lIChzY29wZWQsIGxlYXN0IHByaXZpbGVnZSknIDogJ29yZyBhZG1pbicsXG4gICAgICAgICAgICBzY29wZTogc2NvcGUgPz8gJyhub25lIOKAlCBmdWxsIHBsYXRmb3JtIGNyZWRlbnRpYWwpJyxcbiAgICAgICAgICAgIHNlY3JldE5hbWU6IHByb2Nlc3MuZW52LlBMQVRGT1JNX1NFQ1JFVF9OQU1FIHx8IGAke3NlY3JldE5hbWVGb3JPcmcoJzxvcmdJZD4nLCBzY29wZSA/IHNjb3BlU2VjcmV0TGVhZihzY29wZSkgOiAncGxhdGZvcm0nKX1gLFxuICAgICAgICAgICAgcmVnaW9uLFxuICAgICAgICAgICAgZXhwaXJlc0luRGF5czogZGF5cyxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHsgc3VjY2VzczogdHJ1ZSwgZHJ5UnVuOiB0cnVlLCAuLi5wbGFuIH0sIG51bGwsIDIpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICAgICAgcHJpbnRTZWN0aW9uKCdEcnkgUnVuIOKAlCBObyBDaGFuZ2VzIE1hZGUnKTtcbiAgICAgICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICAgICAnU2VydmljZSBBY2NvdW50JzogcGxhbi5zZXJ2aWNlQWNjb3VudCxcbiAgICAgICAgICAgICAgJ1JvbGVzJzogcGxhbi5yb2xlcyxcbiAgICAgICAgICAgICAgJ0tleSBTY29wZSc6IHBsYW4uc2NvcGUsXG4gICAgICAgICAgICAgICdTZWNyZXQgTmFtZSc6IHBsYW4uc2VjcmV0TmFtZSxcbiAgICAgICAgICAgICAgJ1JlZ2lvbic6IHBsYW4ucmVnaW9uLFxuICAgICAgICAgICAgICAnRXhwaXJlcyBJbic6IGAke2RheXN9IGRheXNgLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcmludFN1Y2Nlc3MoJ0RyeSBydW4gY29tcGxldGUg4oCUIG5vIGFjY291bnQsIGtleSBvciBzZWNyZXQgd2FzIGNyZWF0ZWQnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qga2V5TmFtZSA9IGAke2FjY291bnROYW1lfS0ke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCl9YDtcbiAgICAgICAgY29uc3QgcHJvdmlzaW9uZWQgPSBhd2FpdCBwcm92aXNpb25TZXJ2aWNlQWNjb3VudEtleSh7XG4gICAgICAgICAgY2xpZW50LFxuICAgICAgICAgIHBhc3N3b3JkOiBwYXNzd29yZCEsXG4gICAgICAgICAgYWNjb3VudE5hbWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGlkZW50aXR5LmRlc2NyaXB0aW9uLFxuICAgICAgICAgIHJvbGVzOiBzY29wZSA/ICdub25lJyA6ICdhZG1pbicsXG4gICAgICAgICAgLi4uKHNjb3BlID8geyBzY29wZSB9IDoge30pLFxuICAgICAgICAgIGV4cGlyZXNJblNlY29uZHMsXG4gICAgICAgICAga2V5TmFtZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcHJpbnRTdWNjZXNzKGBLZXkgaXNzdWVkIG9uIHNlcnZpY2UgYWNjb3VudCAnJHthY2NvdW50TmFtZX0nIChleHBpcmVzICR7cHJvdmlzaW9uZWQuZXhwaXJlc0F0fSlgKTtcblxuICAgICAgICAvLyBBbiBleHBsaWNpdCBQTEFURk9STV9TRUNSRVRfTkFNRSBzdGlsbCB3aW5zICh0aGUgZXNjYXBlIGhhdGNoIGZvclxuICAgICAgICAvLyBoYW5kLW1hbmFnZWQgcGF0aHMpOyBvdGhlcndpc2UgZGVyaXZlIGl0IGZyb20gdGhlIG9yZyB0aGUgcGxhdGZvcm1cbiAgICAgICAgLy8gcmVwb3J0ZWQsIHdoaWNoIHdvcmtzIHdpdGggYW4gb3BhcXVlIGFjY2VzcyBrZXkgYXMgUExBVEZPUk1fVE9LRU4g4oCUXG4gICAgICAgIC8vIGEga2V5IGNhcnJpZXMgbm8gb3JnIGNsYWltIHRvIGRlY29kZS5cbiAgICAgICAgY29uc3Qgc2VjcmV0TmFtZSA9IHByb2Nlc3MuZW52LlBMQVRGT1JNX1NFQ1JFVF9OQU1FXG4gICAgICAgICAgfHwgc2VjcmV0TmFtZUZvck9yZyhwcm92aXNpb25lZC5vcmdhbml6YXRpb25JZCwgc2NvcGUgPyBzY29wZVNlY3JldExlYWYoc2NvcGUpIDogJ3BsYXRmb3JtJyk7XG5cbiAgICAgICAgYXVkaXRMb2coJ3N0b3JlLXRva2VuJywge1xuICAgICAgICAgIGV4ZWN1dGlvbklkLFxuICAgICAgICAgIHNlY3JldE5hbWUsXG4gICAgICAgICAgZGF5cyxcbiAgICAgICAgICBzZXJ2aWNlQWNjb3VudDogYWNjb3VudE5hbWUsXG4gICAgICAgICAgc2NvcGU6IHNjb3BlID8/IG51bGwsXG4gICAgICAgICAga2V5SWQ6IHByb3Zpc2lvbmVkLmtleUlkLFxuICAgICAgICB9KTtcblxuICAgICAgICBwcmludEluZm8oJ1BhcmFtZXRlcnMnLCB7XG4gICAgICAgICAgc2VjcmV0TmFtZSxcbiAgICAgICAgICByZWdpb24sXG4gICAgICAgICAgc2VydmljZUFjY291bnQ6IGFjY291bnROYW1lLFxuICAgICAgICAgIHNjb3BlOiBzY29wZSA/PyAnKG5vbmUpJyxcbiAgICAgICAgICBkYXlzLFxuICAgICAgICAgIGV4cGlyZXNJbjogYCR7ZXhwaXJlc0luU2Vjb25kc31zYCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gV2hhdCB0aGlzIHJ1biBpcyBSRVBMQUNJTkcsIHJlYWQgYmVmb3JlIHRoZSB3cml0ZSBzbyB0aGUgb2xkIGtleSBjYW4gYmVcbiAgICAgICAgLy8gcmV0aXJlZCBhZnRlciB0aGUgbmV3IG9uZSBpcyBzYWZlbHkgc3RvcmVkLlxuICAgICAgICBjb25zdCBwcmV2aW91cyA9IGF3YWl0IHByZXZpb3VzS2V5SWQoc2VjcmV0TmFtZSwgYXdzKTtcblxuICAgICAgICAvLyBTY2hlbWE6IHsgdXNlcm5hbWU6IG9yZ0lkLCBwYXNzd29yZDogPHBiX3NhXyBrZXk+LCAuLi5tZXRhZGF0YSB9XG4gICAgICAgIC8vIC0gdXNlcm5hbWUvcGFzc3dvcmQgc2F0aXNmeSBDb2RlQnVpbGQncyBgc2VjcmV0c01hbmFnZXJDcmVkZW50aWFsc2BcbiAgICAgICAgLy8gICAoSFRUUCBCYXNpYywgc2VudCB0byBwaXBlbGluZS1pbWFnZS1yZWdpc3RyeSdzIC90b2tlbiBlbmRwb2ludCwgd2hpY2hcbiAgICAgICAgLy8gICBleGNoYW5nZXMgdGhlIG9wYXF1ZSBrZXkgbGlrZSBldmVyeSBvdGhlciBzZXJ2aWNlIGRvZXMpXG4gICAgICAgIC8vIC0gYHBhc3N3b3JkYCBzdGF5cyB0aGUgY2Fub25pY2FsIGZpZWxkOiB0aGUgcGx1Z2luLWxvb2t1cCBMYW1iZGEsIHRoZVxuICAgICAgICAvLyAgIGV2ZW50cyBMYW1iZGEgYW5kIGAtLXN0b3JlLXRva2Vuc2AgYWxsIHJlYWQgaXQuIE9ubHkgaXRzIFZBTFVFIGNoYW5nZWQsXG4gICAgICAgIC8vICAgZnJvbSBhIG1hY2hpbmUtc2Vzc2lvbiBKV1QgdG8gYW4gb3BhcXVlIHNlcnZpY2UtYWNjb3VudCBrZXkuXG4gICAgICAgIC8vIC0ga2V5SWQgLyBzZXJ2aWNlQWNjb3VudElkIGFyZSB3aGF0IHRoZSByb3RhdGlvbiBMYW1iZGEgbmVlZHMgdG8gcmV0aXJlXG4gICAgICAgIC8vICAgdGhlIGtleSBpdCByZXBsYWNlcy5cbiAgICAgICAgY29uc3Qgc2VjcmV0VmFsdWUgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgdXNlcm5hbWU6IHByb3Zpc2lvbmVkLm9yZ2FuaXphdGlvbklkLFxuICAgICAgICAgIHBhc3N3b3JkOiBwcm92aXNpb25lZC5rZXksXG4gICAgICAgICAgcGxhdGZvcm1Vcmw6IGNsaWVudC5nZXRCYXNlVXJsKCksXG4gICAgICAgICAgb3JnYW5pemF0aW9uSWQ6IHByb3Zpc2lvbmVkLm9yZ2FuaXphdGlvbklkLFxuICAgICAgICAgIHNlcnZpY2VBY2NvdW50SWQ6IHByb3Zpc2lvbmVkLnNlcnZpY2VBY2NvdW50SWQsXG4gICAgICAgICAgc2VydmljZUFjY291bnROYW1lOiBwcm92aXNpb25lZC5zZXJ2aWNlQWNjb3VudE5hbWUsXG4gICAgICAgICAga2V5SWQ6IHByb3Zpc2lvbmVkLmtleUlkLFxuICAgICAgICAgIHNjb3BlOiBwcm92aXNpb25lZC5zY29wZSxcbiAgICAgICAgICBleHBpcmVzSW46IGV4cGlyZXNJblNlY29uZHMsXG4gICAgICAgICAgZXhwaXJlc0F0OiBwcm92aXNpb25lZC5leHBpcmVzQXQsXG4gICAgICAgICAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHByaW50U2VjdGlvbignU3RvcmUgS2V5Jyk7XG5cbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBgUGlwZWxpbmUgQnVpbGRlciBzZXJ2aWNlLWFjY291bnQga2V5ICgke2FjY291bnROYW1lfTsgcmVuZXcgYnkgJHtwcm92aXNpb25lZC5leHBpcmVzQXR9KWA7XG4gICAgICAgIGF3YWl0IHVwc2VydFNlY3JldChzZWNyZXROYW1lLCBzZWNyZXRWYWx1ZSwgZGVzY3JpcHRpb24sIGF3cyk7XG5cbiAgICAgICAgY29uc3QgYXJuID0gYXdhaXQgZ2V0U2VjcmV0QXJuKHNlY3JldE5hbWUsIGF3cyk7XG5cbiAgICAgICAgLy8gUmV0aXJlIHRoZSBjcmVkZW50aWFsIHRoaXMgcnVuIHJlcGxhY2VkIOKAlCBBRlRFUiB0aGUgbmV3IG9uZSBpcyBzdG9yZWQsXG4gICAgICAgIC8vIG5ldmVyIGJlZm9yZS4gQSBmYWlsdXJlIGhlcmUgbGVhdmVzIGEgc3VwZXJmbHVvdXMga2V5IHRoYXQgZXhwaXJlcyBvblxuICAgICAgICAvLyBpdHMgb3duOyBkb2luZyBpdCBpbiB0aGUgb3RoZXIgb3JkZXIgd291bGQgbGVhdmUgdGhlIHNlY3JldCBuYW1pbmcgYVxuICAgICAgICAvLyByZXZva2VkIGtleSBpZiB0aGUgd3JpdGUgZmFpbGVkLlxuICAgICAgICBpZiAocHJldmlvdXMua2V5SWQgJiYgcHJldmlvdXMuc2VydmljZUFjY291bnRJZCA9PT0gcHJvdmlzaW9uZWQuc2VydmljZUFjY291bnRJZCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCByZXZva2VTZXJ2aWNlQWNjb3VudEtleShcbiAgICAgICAgICAgICAgY2xpZW50LCBwYXNzd29yZCEsIHByb3Zpc2lvbmVkLm9yZ2FuaXphdGlvbklkLCBwcm92aXNpb25lZC5zZXJ2aWNlQWNjb3VudElkLCBwcmV2aW91cy5rZXlJZCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBwcmludFN1Y2Nlc3MoYFJldGlyZWQgdGhlIHByZXZpb3VzIGtleSAoJHtwcmV2aW91cy5rZXlJZH0pYCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAgIGBTdG9yZWQgdGhlIG5ldyBrZXksIGJ1dCBjb3VsZCBub3QgcmV2b2tlIHRoZSBwcmV2aW91cyBvbmUgKCR7cHJldmlvdXMua2V5SWR9KTogYFxuICAgICAgICAgICAgICArIGAke2Vycm9yTWVzc2FnZShlcnIpfS4gSXQgZXhwaXJlcyBvbiBpdHMgb3duOyByZXZva2UgaXQgZnJvbSBgXG4gICAgICAgICAgICAgICsgJ1NldHRpbmdzIOKGkiBTZXJ2aWNlIGFjY291bnRzIGlmIHlvdSB3YW50IGl0IGdvbmUgbm93LicsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9wdGlvbmFsbHkgaW5zdGFsbCB0aGUgb25jZS1hLWRheSByb3RhdGlvbiBzdGFjayBzbyB0aGlzIGtleSBuZXZlciBsYXBzZXMuXG4gICAgICAgIGxldCBzY2hlZHVsZUV4cHJlc3Npb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKG9wdGlvbnMuc2NoZWR1bGUpIHtcbiAgICAgICAgICBjb25zdCBmaXZlRmllbGRDcm9uID0gb3B0aW9ucy5jcm9uIHx8IHByb2Nlc3MuZW52LlRPS0VOX1JFTkVXX1NDSEVEVUxFIHx8IERFRkFVTFRfUkVORVdfQ1JPTjtcbiAgICAgICAgICBzY2hlZHVsZUV4cHJlc3Npb24gPSBhd2FpdCBkZXBsb3lSZW5ld1NjaGVkdWxlKHtcbiAgICAgICAgICAgIHNlY3JldE5hbWUsXG4gICAgICAgICAgICBkYXlzLFxuICAgICAgICAgICAgZml2ZUZpZWxkQ3JvbixcbiAgICAgICAgICAgIHJlZ2lvbixcbiAgICAgICAgICAgIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgc2VjcmV0TmFtZSxcbiAgICAgICAgICAgIHNlY3JldEFybjogYXJuLFxuICAgICAgICAgICAgcmVnaW9uLFxuICAgICAgICAgICAgc2VydmljZUFjY291bnQ6IGFjY291bnROYW1lLFxuICAgICAgICAgICAgc2VydmljZUFjY291bnRJZDogcHJvdmlzaW9uZWQuc2VydmljZUFjY291bnRJZCxcbiAgICAgICAgICAgIGtleUlkOiBwcm92aXNpb25lZC5rZXlJZCxcbiAgICAgICAgICAgIHNjb3BlOiBwcm92aXNpb25lZC5zY29wZSxcbiAgICAgICAgICAgIGV4cGlyZXNJbkRheXM6IGRheXMsXG4gICAgICAgICAgICBleHBpcmVzQXQ6IHByb3Zpc2lvbmVkLmV4cGlyZXNBdCxcbiAgICAgICAgICAgIHNjaGVkdWxlOiBzY2hlZHVsZUV4cHJlc3Npb24gPz8gbnVsbCxcbiAgICAgICAgICB9LCBudWxsLCAyKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICAgIHByaW50U2VjdGlvbignS2V5IFN0b3JlZCcpO1xuXG4gICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICAnU2VjcmV0IE5hbWUnOiBzZWNyZXROYW1lLFxuICAgICAgICAgICAgJ1NlY3JldCBBUk4nOiBhcm4sXG4gICAgICAgICAgICAnUmVnaW9uJzogcmVnaW9uLFxuICAgICAgICAgICAgJ1NlcnZpY2UgQWNjb3VudCc6IGFjY291bnROYW1lLFxuICAgICAgICAgICAgJ0tleSBTY29wZSc6IHByb3Zpc2lvbmVkLnNjb3BlID8/ICcobm9uZSDigJQgZnVsbCBwbGF0Zm9ybSBjcmVkZW50aWFsKScsXG4gICAgICAgICAgICAnS2V5IElkJzogcHJvdmlzaW9uZWQua2V5SWQsXG4gICAgICAgICAgICAnRXhwaXJlcyBJbic6IGAke2RheXN9IGRheXNgLFxuICAgICAgICAgICAgJ1JlbmV3IEJ5JzogcHJvdmlzaW9uZWQuZXhwaXJlc0F0LFxuICAgICAgICAgICAgJ0F1dG8tUm90YXRlJzogc2NoZWR1bGVFeHByZXNzaW9uID8gYOKckyAke3NjaGVkdWxlRXhwcmVzc2lvbn1gIDogJ29mZiAocGFzcyAtLXNjaGVkdWxlIHRvIGVuYWJsZSknLFxuICAgICAgICAgICAgJ1N0YXR1cyc6ICfinJMgU3RvcmVkJyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgICBwcmludFN1Y2Nlc3MoJ0tleSBzdG9yZWQuIFRvIHVzZSB3aXRoIHN5bnRoL2RlcGxveTonKTtcbiAgICAgICAgICBwcmludEluZm8oYCAgZXhwb3J0IFBMQVRGT1JNX1NFQ1JFVF9OQU1FPSR7c2VjcmV0TmFtZX1gKTtcbiAgICAgICAgICBwcmludEluZm8oJyAgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBzeW50aCAtLWlkIDxwaXBlbGluZS1pZD4gLS1zdG9yZS10b2tlbnMnKTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgICAgaWYgKHNjaGVkdWxlRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgcHJpbnRJbmZvKGBBdXRvLXJvdGF0aW9uIGlzIGFjdGl2ZSAoJHtzY2hlZHVsZUV4cHJlc3Npb259KTsgdGhlIHNlY3JldCBpcyByZXBsYWNlZCBiZWZvcmUgJHtwcm92aXNpb25lZC5leHBpcmVzQXR9LmApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcmludEluZm8oYFJvdGF0ZSBiZWZvcmUgJHtwcm92aXNpb25lZC5leHBpcmVzQXR9IHdpdGg6IHBpcGVsaW5lLW1hbmFnZXIgaW5mcmEgc3RvcmUtdG9rZW4gLS1kYXlzICR7ZGF5c31gKTtcbiAgICAgICAgICAgIHByaW50SW5mbygnICAob3IgcGFzcyAtLXNjaGVkdWxlIHRvIGluc3RhbGwgYSBkYWlseSBhdXRvLXJvdGF0aW9uIHN0YWNrKScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuQVBJX1JFUVVFU1QsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICBjb21tYW5kOiAnc3RvcmUtdG9rZW4nLFxuICAgICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgICBzZWNyZXROYW1lOiBwcm9jZXNzLmVudi5QTEFURk9STV9TRUNSRVRfTkFNRSB8fCAnKGRlcml2ZWQgZnJvbSB0aGUgb3JnKScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"upload-plugin.d.ts","sourceRoot":"","sources":["../../src/commands/upload-plugin.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoRnD"}
1
+ {"version":3,"file":"upload-plugin.d.ts","sourceRoot":"","sources":["../../src/commands/upload-plugin.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoRnD"}
@@ -2,6 +2,7 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  import * as fs from 'fs';
4
4
  import * as path from 'path';
5
+ import { errorMessage } from '@pipeline-builder/api-core';
5
6
  import { Command } from 'commander';
6
7
  import FormData from 'form-data';
7
8
  import ora from 'ora';
@@ -110,7 +111,7 @@ export function uploadPlugin(program) {
110
111
  catch (error) {
111
112
  printError('Cannot read plugin file', {
112
113
  path: filePath,
113
- error: error instanceof Error ? error.message : String(error),
114
+ error: errorMessage(error),
114
115
  });
115
116
  throw new ValidationError('Plugin file is not readable', 'file', filePath);
116
117
  }
@@ -272,4 +273,4 @@ export function uploadPlugin(program) {
272
273
  }
273
274
  });
274
275
  }
275
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy91cGxvYWQtcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFDO0FBQ3RCLE9BQU8sSUFBSSxNQUFNLFlBQVksQ0FBQztBQUM5QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUUsT0FBTyxFQUFvQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUseUJBQXlCLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0gsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RJLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRW5FLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBRTdCOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsT0FBZ0I7SUFDM0MsY0FBYyxDQUFDLE9BQU87U0FDbkIsT0FBTyxDQUFDLFFBQVEsQ0FBQztTQUNqQixX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LEVBQUUsQ0FBQztZQUNmLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLFdBQVcsRUFBRTtnQkFDMUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUU7b0JBQ1AsT0FBTyxFQUFFLGVBQWU7b0JBQ3hCLFdBQVc7b0JBQ1gsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO29CQUNsQixZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVk7b0JBQ2xDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtvQkFDbEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO29CQUN4QixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07b0JBQ3RCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtvQkFDdEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO2lCQUM3QjthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IEZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSc7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQgcGljbyBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7IEZJTEVfU0laRV9MSU1JVFMsIGZvcm1hdEZpbGVTaXplIH0gZnJvbSAnLi4vY29uZmlnL2NsaS5jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgdHlwZSBQbHVnaW4sIHR5cGUgUGx1Z2luUmVzcG9uc2UgfSBmcm9tICcuLi90eXBlcy9pbmRleC5qcyc7XG5pbXBvcnQgeyBwcmludENvbW1hbmRIZWFkZXIsIHByaW50U3NsV2FybmluZywgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudCwgd2l0aFNzbE9wdGlvbnMgfSBmcm9tICcuLi91dGlscy9jb21tYW5kLXV0aWxzLmpzJztcbmltcG9ydCB7IEVSUk9SX0NPREVTLCBoYW5kbGVFcnJvciwgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBmaWxlRXhpc3RzLCBwcmludEVycm9yLCBwcmludEluZm8sIHByaW50S2V5VmFsdWUsIHByaW50U2VjdGlvbiwgcHJpbnRTdWNjZXNzLCBwcmludFdhcm5pbmcgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMuanMnO1xuaW1wb3J0IHsgZXh0cmFjdFNpbmdsZVJlc3BvbnNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UtdXRpbHMuanMnO1xuXG5jb25zdCB7IGJvbGQsIGdyZWVuIH0gPSBwaWNvO1xuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgYHVwbG9hZC1wbHVnaW5gIGNvbW1hbmQgd2l0aCB0aGUgQ0xJIHByb2dyYW0uXG4gKlxuICogVmFsaWRhdGVzIGEgbG9jYWwgcGx1Z2luIFpJUCBmaWxlIChzaXplLCBleHRlbnNpb24sIHJlYWRhYmlsaXR5KSxcbiAqIGJ1aWxkcyBhIG11bHRpcGFydCBmb3JtLCBhbmQgdXBsb2FkcyBpdCB0byB0aGUgcGxhdGZvcm0gQVBJLlxuICogUGx1Z2luIG5hbWUgYW5kIHZlcnNpb24gY2FuIGJlIGF1dG8tZGV0ZWN0ZWQgZnJvbSB0aGUgcGFja2FnZVxuICogb3Igb3ZlcnJpZGRlbiB2aWEgQ0xJIGZsYWdzLlxuICpcbiAqIEBwYXJhbSBwcm9ncmFtIC0gVGhlIHJvb3QgQ29tbWFuZGVyIHByb2dyYW0gaW5zdGFuY2UgdG8gYXR0YWNoIHRoZSBjb21tYW5kIHRvLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBiYXNoXG4gKiBjbGkgcGx1Z2luIHVwbG9hZCAtLWZpbGUgcGx1Z2luLnppcCAtLW9yZ2FuaXphdGlvbiBhY21lXG4gKiBjbGkgcGx1Z2luIHVwbG9hZCAtLWZpbGUgcGx1Z2luLnppcCAtLW9yZ2FuaXphdGlvbiBhY21lIC0tcHVibGljXG4gKiBjbGkgcGx1Z2luIHVwbG9hZCAtLWZpbGUgcGx1Z2luLnppcCAtLW9yZ2FuaXphdGlvbiBhY21lIC0tbmFtZSBteS1wbHVnaW4gLS12ZXJzaW9uIDEuMC4wXG4gKiBjbGkgcGx1Z2luIHVwbG9hZCAtLWZpbGUgcGx1Z2luLnppcCAtLW9yZ2FuaXphdGlvbiBhY21lIC0tbm8tdmVyaWZ5LXNzbFxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGxvYWRQbHVnaW4ocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICB3aXRoU3NsT3B0aW9ucyhwcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3VwbG9hZCcpXG4gICAgLmRlc2NyaXB0aW9uKCdVcGxvYWQgYW5kIGRlcGxveSBhIHBsdWdpbiBwYWNrYWdlJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1mLCAtLWZpbGUgPGZpbGU+JywgJ1BhdGggdG8gcGx1Z2luIFpJUCBmaWxlJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1vLCAtLW9yZ2FuaXphdGlvbiA8b3JnYW5pemF0aW9uPicsICdPcmdhbml6YXRpb24gbmFtZScpXG4gICAgLm9wdGlvbignLW4sIC0tbmFtZSA8bmFtZT4nLCAnUGx1Z2luIG5hbWUgKG9wdGlvbmFsLCBleHRyYWN0ZWQgZnJvbSBwYWNrYWdlIGlmIG5vdCBwcm92aWRlZCknKVxuICAgIC5vcHRpb24oJy12LCAtLXZlcnNpb24gPHZlcnNpb24+JywgJ1BsdWdpbiB2ZXJzaW9uIChvcHRpb25hbCwgZXh0cmFjdGVkIGZyb20gcGFja2FnZSBpZiBub3QgcHJvdmlkZWQpJylcbiAgICAub3B0aW9uKCctLXB1YmxpYycsICdNYWtlIHBsdWdpbiBwdWJsaWNseSBhY2Nlc3NpYmxlJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1hY3RpdmUnLCAnU2V0IHBsdWdpbiBhcyBhY3RpdmUnLCB0cnVlKVxuICAgIC5vcHRpb24oJy0tbm8tYWN0aXZlJywgJ1VwbG9hZCB0aGUgcGx1Z2luIGFzIGluYWN0aXZlJykpXG4gICAgLm9wdGlvbignLS1kcnktcnVuJywgJ1ZhbGlkYXRlIGZpbGUgd2l0aG91dCB1cGxvYWRpbmcnLCBmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignVXBsb2FkIFBsdWdpbicpO1xuXG4gICAgICB0cnkge1xuXG4gICAgICAgIC8vIERpc3BsYXkgcGFyYW1ldGVyc1xuICAgICAgICBwcmludEluZm8oJ1VwbG9hZCBwYXJhbWV0ZXJzJywge1xuICAgICAgICAgIGZpbGU6IG9wdGlvbnMuZmlsZSxcbiAgICAgICAgICBvcmdhbml6YXRpb246IG9wdGlvbnMub3JnYW5pemF0aW9uLFxuICAgICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSB8fCAnKGF1dG8tZGV0ZWN0KScsXG4gICAgICAgICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uIHx8ICcoYXV0by1kZXRlY3QpJyxcbiAgICAgICAgICBwdWJsaWM6IG9wdGlvbnMucHVibGljID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgIGFjdGl2ZTogb3B0aW9ucy5hY3RpdmUgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICAgZHJ5UnVuOiBvcHRpb25zLmRyeVJ1bixcbiAgICAgICAgICB2ZXJpZnlTc2w6IG9wdGlvbnMudmVyaWZ5U3NsLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTZWN1cml0eSB3YXJuaW5nIGZvciBTU0wgdmVyaWZpY2F0aW9uIGRpc2FibGVkXG4gICAgICAgIHByaW50U3NsV2FybmluZyhvcHRpb25zLnZlcmlmeVNzbCk7XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgb3JnYW5pemF0aW9uXG4gICAgICAgIGlmICghb3B0aW9ucy5vcmdhbml6YXRpb24gfHwgdHlwZW9mIG9wdGlvbnMub3JnYW5pemF0aW9uICE9PSAnc3RyaW5nJyB8fCBvcHRpb25zLm9yZ2FuaXphdGlvbi50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignSW52YWxpZCBvcmdhbml6YXRpb24gbmFtZScsIHsgcHJvdmlkZWQ6IG9wdGlvbnMub3JnYW5pemF0aW9uIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ09yZ2FuaXphdGlvbiBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycsICdvcmdhbml6YXRpb24nLCBvcHRpb25zLm9yZ2FuaXphdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGF0ZSBmaWxlIHBhdGhcbiAgICAgICAgaWYgKCFvcHRpb25zLmZpbGUgfHwgdHlwZW9mIG9wdGlvbnMuZmlsZSAhPT0gJ3N0cmluZycgfHwgb3B0aW9ucy5maWxlLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBwcmludEVycm9yKCdJbnZhbGlkIGZpbGUgcGF0aCcsIHsgcHJvdmlkZWQ6IG9wdGlvbnMuZmlsZSB9KTtcbiAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdGaWxlIHBhdGggbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnLCAnZmlsZScsIG9wdGlvbnMuZmlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShvcHRpb25zLmZpbGUpO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlIGZpbGUgZXhpc3RzXG4gICAgICAgIHByaW50SW5mbygnVmFsaWRhdGluZyBwbHVnaW4gZmlsZScsIHsgcGF0aDogZmlsZVBhdGggfSk7XG5cbiAgICAgICAgaWYgKCFmaWxlRXhpc3RzKGZpbGVQYXRoKSkge1xuICAgICAgICAgIHByaW50RXJyb3IoJ1BsdWdpbiBmaWxlIG5vdCBmb3VuZCcsIHsgcGF0aDogZmlsZVBhdGggfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgUGx1Z2luIGZpbGUgbm90IGZvdW5kOiAke2ZpbGVQYXRofWAsICdmaWxlJywgZmlsZVBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZmlsZSBleHRlbnNpb25cbiAgICAgICAgY29uc3QgZmlsZUV4dCA9IHBhdGguZXh0bmFtZShmaWxlUGF0aCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGZpbGVFeHQgIT09ICcuemlwJykge1xuICAgICAgICAgIHByaW50V2FybmluZygnRmlsZSBleHRlbnNpb24gaXMgbm90IC56aXAnLCB7XG4gICAgICAgICAgICBwcm92aWRlZDogZmlsZUV4dCxcbiAgICAgICAgICAgIGV4cGVjdGVkOiAnLnppcCcsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUGx1Z2luIGZpbGUgbXVzdCBiZSBhIFpJUCBhcmNoaXZlJywgJ2ZpbGUnLCBmaWxlUGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgZmlsZSBzdGF0c1xuICAgICAgICBjb25zdCBzdGF0cyA9IGZzLnN0YXRTeW5jKGZpbGVQYXRoKTtcbiAgICAgICAgY29uc3Qgc2l6ZUJ5dGVzID0gc3RhdHMuc2l6ZTtcbiAgICAgICAgY29uc3Qgc2l6ZUZvcm1hdHRlZCA9IGZvcm1hdEZpbGVTaXplKHNpemVCeXRlcyk7XG5cbiAgICAgICAgcHJpbnRTdWNjZXNzKCdQbHVnaW4gZmlsZSBmb3VuZCcsIHtcbiAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICBzaXplOiBzaXplRm9ybWF0dGVkLFxuICAgICAgICAgIG1vZGlmaWVkOiBuZXcgRGF0ZShzdGF0cy5tdGltZSkudG9Mb2NhbGVTdHJpbmcoKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQ2hlY2sgZmlsZSBzaXplXG4gICAgICAgIGlmIChzaXplQnl0ZXMgPiBGSUxFX1NJWkVfTElNSVRTLlBMVUdJTikge1xuICAgICAgICAgIHByaW50RXJyb3IoJ1BsdWdpbiBmaWxlIHRvbyBsYXJnZScsIHtcbiAgICAgICAgICAgIHNpemU6IHNpemVGb3JtYXR0ZWQsXG4gICAgICAgICAgICBtYXhpbXVtOiBmb3JtYXRGaWxlU2l6ZShGSUxFX1NJWkVfTElNSVRTLlBMVUdJTiksXG4gICAgICAgICAgICBleGNlZWRlZEJ5OiBmb3JtYXRGaWxlU2l6ZShzaXplQnl0ZXMgLSBGSUxFX1NJWkVfTElNSVRTLlBMVUdJTiksXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICAgIGBQbHVnaW4gZmlsZSBleGNlZWRzIG1heGltdW0gc2l6ZSBvZiAke2Zvcm1hdEZpbGVTaXplKEZJTEVfU0laRV9MSU1JVFMuUExVR0lOKX0gKGFjdHVhbDogJHtzaXplRm9ybWF0dGVkfSlgLFxuICAgICAgICAgICAgJ2ZpbGUuc2l6ZScsXG4gICAgICAgICAgICBzaXplQnl0ZXMsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGlmIGZpbGUgaXMgcmVhZGFibGVcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmcy5hY2Nlc3NTeW5jKGZpbGVQYXRoLCBmcy5jb25zdGFudHMuUl9PSyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignQ2Fubm90IHJlYWQgcGx1Z2luIGZpbGUnLCB7XG4gICAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUGx1Z2luIGZpbGUgaXMgbm90IHJlYWRhYmxlJywgJ2ZpbGUnLCBmaWxlUGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBwcmludFN1Y2Nlc3MoJ1BsdWdpbiBmaWxlIHZhbGlkYXRlZCcpO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlIHZlcnNpb24gZm9ybWF0IGlmIHByb3ZpZGVkLiBBbGxvd3MgLXByZXJlbGVhc2UgYW5kICtidWlsZFxuICAgICAgICAvLyBtZXRhZGF0YSAodmFsaWQgc2VtdmVyKSB0byBtYXRjaCB2YWxpZGF0ZS1wbHVnaW4gYW5kIHRoZSBEQiBjb25zdHJhaW50LlxuICAgICAgICBpZiAob3B0aW9ucy52ZXJzaW9uKSB7XG4gICAgICAgICAgY29uc3QgdmVyc2lvblJlZ2V4ID0gL15cXGQrXFwuXFxkK1xcLlxcZCsoLVthLXpBLVowLTkuLV0rKT8oXFwrW2EtekEtWjAtOS4tXSspPyQvO1xuICAgICAgICAgIGlmICghdmVyc2lvblJlZ2V4LnRlc3Qob3B0aW9ucy52ZXJzaW9uKSkge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdWZXJzaW9uIGZvcm1hdCBtYXkgYmUgaW52YWxpZCcsIHtcbiAgICAgICAgICAgICAgcHJvdmlkZWQ6IG9wdGlvbnMudmVyc2lvbixcbiAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICdzZW1hbnRpYyB2ZXJzaW9uIChlLmcuLCAxLjAuMCwgMS4yLjMtYmV0YS4xKScsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGF0ZSBuYW1lIGZvcm1hdCBpZiBwcm92aWRlZFxuICAgICAgICBpZiAob3B0aW9ucy5uYW1lKSB7XG4gICAgICAgICAgY29uc3QgbmFtZVJlZ2V4ID0gL15bYS16MC05LV0rJC87XG4gICAgICAgICAgaWYgKCFuYW1lUmVnZXgudGVzdChvcHRpb25zLm5hbWUpKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoJ1BsdWdpbiBuYW1lIGZvcm1hdCBtYXkgYmUgaW52YWxpZCcsIHtcbiAgICAgICAgICAgICAgcHJvdmlkZWQ6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICdsb3dlcmNhc2UgYWxwaGFudW1lcmljIHdpdGggZGFzaGVzIChlLmcuLCBteS1wbHVnaW4tbmFtZSknLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRHJ5IHJ1biBtb2RlXG4gICAgICAgIGlmIChvcHRpb25zLmRyeVJ1bikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ0RyeSBSdW4gLSBWYWxpZGF0aW9uIENvbXBsZXRlJyk7XG4gICAgICAgICAgcHJpbnRTdWNjZXNzKCdGaWxlIHZhbGlkYXRpb24gcGFzc2VkIC0gbm8gdXBsb2FkIHBlcmZvcm1lZCcpO1xuXG4gICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICBGaWxlOiBmaWxlUGF0aCxcbiAgICAgICAgICAgIFNpemU6IHNpemVGb3JtYXR0ZWQsXG4gICAgICAgICAgICBPcmdhbml6YXRpb246IG9wdGlvbnMub3JnYW5pemF0aW9uLFxuICAgICAgICAgICAgTmFtZTogb3B0aW9ucy5uYW1lIHx8ICcod2lsbCBiZSBhdXRvLWRldGVjdGVkKScsXG4gICAgICAgICAgICBWZXJzaW9uOiBvcHRpb25zLnZlcnNpb24gfHwgJyh3aWxsIGJlIGF1dG8tZGV0ZWN0ZWQpJyxcbiAgICAgICAgICAgIFB1YmxpYzogb3B0aW9ucy5wdWJsaWMgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICAgICBBY3RpdmU6IG9wdGlvbnMuYWN0aXZlID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIGF1dGhlbnRpY2F0ZWQgQVBJIGNsaWVudFxuICAgICAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50KG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBjb25maWcgPSBjbGllbnQuZ2V0Q29uZmlnKCk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIGZvcm0gZGF0YVxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50U2VjdGlvbignVXBsb2FkaW5nIFBsdWdpbicpO1xuICAgICAgICBwcmludEluZm8oJ1ByZXBhcmluZyB1cGxvYWQnLCB7XG4gICAgICAgICAgZmlsZTogcGF0aC5iYXNlbmFtZShmaWxlUGF0aCksXG4gICAgICAgICAgc2l6ZTogc2l6ZUZvcm1hdHRlZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdwbHVnaW4nLCBmcy5jcmVhdGVSZWFkU3RyZWFtKGZpbGVQYXRoKSwge1xuICAgICAgICAgIGZpbGVuYW1lOiBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKSxcbiAgICAgICAgICBjb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL3ppcCcsXG4gICAgICAgIH0pO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ29yZ2FuaXphdGlvbicsIG9wdGlvbnMub3JnYW5pemF0aW9uKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5uYW1lKSBmb3JtRGF0YS5hcHBlbmQoJ25hbWUnLCBvcHRpb25zLm5hbWUpO1xuICAgICAgICBpZiAob3B0aW9ucy52ZXJzaW9uKSBmb3JtRGF0YS5hcHBlbmQoJ3ZlcnNpb24nLCBvcHRpb25zLnZlcnNpb24pO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2lzUHVibGljJywgb3B0aW9ucy5wdWJsaWMgPyAndHJ1ZScgOiAnZmFsc2UnKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdpc0FjdGl2ZScsIG9wdGlvbnMuYWN0aXZlID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG5cbiAgICAgICAgLy8gTWFrZSBBUEkgcmVxdWVzdFxuICAgICAgICBjb25zdCBlbmRwb2ludCA9IGNvbmZpZy5hcGkucGx1Z2luVXBsb2FkVXJsO1xuICAgICAgICBwcmludEluZm8oJ1VwbG9hZGluZyB0byBBUEknLCB7XG4gICAgICAgICAgZW5kcG9pbnQ6IGAke2NvbmZpZy5hcGkuYmFzZVVybH0ke2VuZHBvaW50fWAsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcblxuICAgICAgICBjb25zdCBzcGlubmVyID0gb3JhKCdVcGxvYWRpbmcgcGx1Z2luLi4uJykuc3RhcnQoKTtcbiAgICAgICAgbGV0IHJhd1Jlc3BvbnNlOiBQbHVnaW5SZXNwb25zZTtcbiAgICAgICAgbGV0IGR1cmF0aW9uOiBudW1iZXI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICByYXdSZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0Rm9ybTxQbHVnaW5SZXNwb25zZT4oZW5kcG9pbnQsIGZvcm1EYXRhKTtcbiAgICAgICAgICBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdQbHVnaW4gdXBsb2FkZWQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBzcGlubmVyLmZhaWwoJ1VwbG9hZCBmYWlsZWQnKTtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gZXh0cmFjdFNpbmdsZVJlc3BvbnNlPFBsdWdpbj4ocmF3UmVzcG9uc2UsICdwbHVnaW4nLCAnbmFtZScpO1xuXG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgICBwcmludEVycm9yKCdObyB2YWxpZCBwbHVnaW4gZGF0YSBpbiByZXNwb25zZScsIHtcbiAgICAgICAgICAgIHJlc3BvbnNlS2V5czogcmF3UmVzcG9uc2UgPyBPYmplY3Qua2V5cyhyYXdSZXNwb25zZSkgOiAnKG51bGwpJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQgLSBubyB2YWxpZCBwbHVnaW4gZGF0YSByZWNlaXZlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludFNlY3Rpb24oJ1BsdWdpbiBVcGxvYWRlZCBTdWNjZXNzZnVsbHknKTtcblxuICAgICAgICAvLyBEaXNwbGF5IHBsdWdpbiBpbmZvcm1hdGlvblxuICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAnUGx1Z2luIElEJzogZ3JlZW4oYm9sZChyZXNwb25zZS5pZCkpLFxuICAgICAgICAgICdOYW1lJzogcmVzcG9uc2UubmFtZSxcbiAgICAgICAgICAnVmVyc2lvbic6IHJlc3BvbnNlLnZlcnNpb24sXG4gICAgICAgICAgJ09yZ2FuaXphdGlvbic6IHJlc3BvbnNlLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICAnRGVzY3JpcHRpb24nOiByZXNwb25zZS5kZXNjcmlwdGlvbiB8fCAnKG5vdCBzZXQpJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAnRmlsZSBVUkwnOiByZXNwb25zZS5maWxlVXJsIHx8ICcobm90IGF2YWlsYWJsZSknLFxuICAgICAgICAgICdGaWxlIFNpemUnOiByZXNwb25zZS5maWxlU2l6ZSA/IGAkeyhyZXNwb25zZS5maWxlU2l6ZSAvIDEwMjQpLnRvRml4ZWQoMil9IEtCYCA6ICcobm90IGF2YWlsYWJsZSknLFxuICAgICAgICAgICdDaGVja3N1bSc6IHJlc3BvbnNlLmNoZWNrc3VtID8gYCR7cmVzcG9uc2UuY2hlY2tzdW0uc3Vic3RyaW5nKDAsIDE2KX0uLi5gIDogJyhub3QgYXZhaWxhYmxlKScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgJ1B1YmxpYyc6IHJlc3BvbnNlLmlzUHVibGljID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgICdBY3RpdmUnOiByZXNwb25zZS5pc0FjdGl2ZSA/ICdZZXMnIDogJ05vJyxcbiAgICAgICAgICAnQ3JlYXRlZCBBdCc6IHJlc3BvbnNlLmNyZWF0ZWRBdCB8fCAnKG5vdCBhdmFpbGFibGUpJyxcbiAgICAgICAgICAnVXBsb2FkZWQgQnknOiByZXNwb25zZS51cGxvYWRlZEJ5IHx8ICcobm90IGF2YWlsYWJsZSknLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICdFeGVjdXRpb24gSUQnOiBleGVjdXRpb25JZCxcbiAgICAgICAgICAnVXBsb2FkIER1cmF0aW9uJzogYCR7KGR1cmF0aW9uIC8gMTAwMCkudG9GaXhlZCgyKX1zYCxcbiAgICAgICAgICAnU3RhdHVzJzogZ3JlZW4oJ+KckyBTdWNjZXNzJyksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFByaW50IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaWYgYXZhaWxhYmxlXG4gICAgICAgIGlmIChyZXNwb25zZS5tZXRhZGF0YSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgICBwcmludEluZm8oJ1BsdWdpbiBtZXRhZGF0YSBhdmFpbGFibGUnLCB7XG4gICAgICAgICAgICBrZXlzOiBPYmplY3Qua2V5cyhyZXNwb25zZS5tZXRhZGF0YSkubGVuZ3RoLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJpbnQgZGVwbG95bWVudCBsb2dzIFVSTCBpZiBhdmFpbGFibGVcbiAgICAgICAgY29uc3QgcmVzcCA9IHJlc3BvbnNlIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IHJlc3BbJ1gtUmVxdWVzdC1JZCddIHx8IHJlc3AucmVxdWVzdElkO1xuICAgICAgICBpZiAocmVxdWVzdElkKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICAgIHByaW50SW5mbygnRGVwbG95bWVudCBsb2dzIGF2YWlsYWJsZScsIHtcbiAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgIHVybDogYCR7Y29uZmlnLmFwaS5iYXNlVXJsfS9sb2dzLyR7cmVxdWVzdElkfWAsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOZXh0IHN0ZXBzXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRJbmZvKCdOZXh0IHN0ZXBzJywge1xuICAgICAgICAgIHZpZXc6IGBVc2UgXCJnZXQtcGx1Z2luIC0taWQgJHtyZXNwb25zZS5pZH1cIiB0byB2aWV3IHBsdWdpbiBkZXRhaWxzYCxcbiAgICAgICAgICBsaXN0OiAnVXNlIFwibGlzdC1wbHVnaW5zXCIgdG8gc2VlIGFsbCBwbHVnaW5zJyxcbiAgICAgICAgfSk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6ICd1cGxvYWQtcGx1Z2luJyxcbiAgICAgICAgICAgIGV4ZWN1dGlvbklkLFxuICAgICAgICAgICAgZmlsZTogb3B0aW9ucy5maWxlLFxuICAgICAgICAgICAgb3JnYW5pemF0aW9uOiBvcHRpb25zLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbixcbiAgICAgICAgICAgIHB1YmxpYzogb3B0aW9ucy5wdWJsaWMsXG4gICAgICAgICAgICBhY3RpdmU6IG9wdGlvbnMuYWN0aXZlLFxuICAgICAgICAgICAgdmVyaWZ5U3NsOiBvcHRpb25zLnZlcmlmeVNzbCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
276
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy91cGxvYWQtcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQztBQUN0QixPQUFPLElBQUksTUFBTSxZQUFZLENBQUM7QUFDOUIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlFLE9BQU8sRUFBb0MsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLHlCQUF5QixFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNILE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0SSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVuRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQztBQUU3Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLE9BQWdCO0lBQzNDLGNBQWMs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QUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxXQUFXLEVBQUU7Z0JBQzFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSztnQkFDM0IsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsT0FBTyxFQUFFO29CQUNQLE9BQU8sRUFBRSxlQUFlO29CQUN4QixXQUFXO29CQUNYLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtvQkFDbEIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO29CQUNsQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7b0JBQ2xCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztvQkFDeEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO29CQUN0QixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07b0JBQ3RCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztpQkFDN0I7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBlcnJvck1lc3NhZ2UgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCBGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnO1xuaW1wb3J0IG9yYSBmcm9tICdvcmEnO1xuaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyBGSUxFX1NJWkVfTElNSVRTLCBmb3JtYXRGaWxlU2l6ZSB9IGZyb20gJy4uL2NvbmZpZy9jbGkuY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IHR5cGUgUGx1Z2luLCB0eXBlIFBsdWdpblJlc3BvbnNlIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXguanMnO1xuaW1wb3J0IHsgcHJpbnRDb21tYW5kSGVhZGVyLCBwcmludFNzbFdhcm5pbmcsIGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnQsIHdpdGhTc2xPcHRpb25zIH0gZnJvbSAnLi4vdXRpbHMvY29tbWFuZC11dGlscy5qcyc7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IsIFZhbGlkYXRpb25FcnJvciB9IGZyb20gJy4uL3V0aWxzL2Vycm9yLWhhbmRsZXIuanMnO1xuaW1wb3J0IHsgZmlsZUV4aXN0cywgcHJpbnRFcnJvciwgcHJpbnRJbmZvLCBwcmludEtleVZhbHVlLCBwcmludFNlY3Rpb24sIHByaW50U3VjY2VzcywgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcbmltcG9ydCB7IGV4dHJhY3RTaW5nbGVSZXNwb25zZSB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlLXV0aWxzLmpzJztcblxuY29uc3QgeyBib2xkLCBncmVlbiB9ID0gcGljbztcblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGB1cGxvYWQtcGx1Z2luYCBjb21tYW5kIHdpdGggdGhlIENMSSBwcm9ncmFtLlxuICpcbiAqIFZhbGlkYXRlcyBhIGxvY2FsIHBsdWdpbiBaSVAgZmlsZSAoc2l6ZSwgZXh0ZW5zaW9uLCByZWFkYWJpbGl0eSksXG4gKiBidWlsZHMgYSBtdWx0aXBhcnQgZm9ybSwgYW5kIHVwbG9hZHMgaXQgdG8gdGhlIHBsYXRmb3JtIEFQSS5cbiAqIFBsdWdpbiBuYW1lIGFuZCB2ZXJzaW9uIGNhbiBiZSBhdXRvLWRldGVjdGVkIGZyb20gdGhlIHBhY2thZ2VcbiAqIG9yIG92ZXJyaWRkZW4gdmlhIENMSSBmbGFncy5cbiAqXG4gKiBAcGFyYW0gcHJvZ3JhbSAtIFRoZSByb290IENvbW1hbmRlciBwcm9ncmFtIGluc3RhbmNlIHRvIGF0dGFjaCB0aGUgY29tbWFuZCB0by5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgYmFzaFxuICogY2xpIHBsdWdpbiB1cGxvYWQgLS1maWxlIHBsdWdpbi56aXAgLS1vcmdhbml6YXRpb24gYWNtZVxuICogY2xpIHBsdWdpbiB1cGxvYWQgLS1maWxlIHBsdWdpbi56aXAgLS1vcmdhbml6YXRpb24gYWNtZSAtLXB1YmxpY1xuICogY2xpIHBsdWdpbiB1cGxvYWQgLS1maWxlIHBsdWdpbi56aXAgLS1vcmdhbml6YXRpb24gYWNtZSAtLW5hbWUgbXktcGx1Z2luIC0tdmVyc2lvbiAxLjAuMFxuICogY2xpIHBsdWdpbiB1cGxvYWQgLS1maWxlIHBsdWdpbi56aXAgLS1vcmdhbml6YXRpb24gYWNtZSAtLW5vLXZlcmlmeS1zc2xcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBsb2FkUGx1Z2luKHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgd2l0aFNzbE9wdGlvbnMocHJvZ3JhbVxuICAgIC5jb21tYW5kKCd1cGxvYWQnKVxuICAgIC5kZXNjcmlwdGlvbignVXBsb2FkIGFuZCBkZXBsb3kgYSBwbHVnaW4gcGFja2FnZScpXG4gICAgLnJlcXVpcmVkT3B0aW9uKCctZiwgLS1maWxlIDxmaWxlPicsICdQYXRoIHRvIHBsdWdpbiBaSVAgZmlsZScpXG4gICAgLnJlcXVpcmVkT3B0aW9uKCctbywgLS1vcmdhbml6YXRpb24gPG9yZ2FuaXphdGlvbj4nLCAnT3JnYW5pemF0aW9uIG5hbWUnKVxuICAgIC5vcHRpb24oJy1uLCAtLW5hbWUgPG5hbWU+JywgJ1BsdWdpbiBuYW1lIChvcHRpb25hbCwgZXh0cmFjdGVkIGZyb20gcGFja2FnZSBpZiBub3QgcHJvdmlkZWQpJylcbiAgICAub3B0aW9uKCctdiwgLS12ZXJzaW9uIDx2ZXJzaW9uPicsICdQbHVnaW4gdmVyc2lvbiAob3B0aW9uYWwsIGV4dHJhY3RlZCBmcm9tIHBhY2thZ2UgaWYgbm90IHByb3ZpZGVkKScpXG4gICAgLm9wdGlvbignLS1wdWJsaWMnLCAnTWFrZSBwbHVnaW4gcHVibGljbHkgYWNjZXNzaWJsZScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tYWN0aXZlJywgJ1NldCBwbHVnaW4gYXMgYWN0aXZlJywgdHJ1ZSlcbiAgICAub3B0aW9uKCctLW5vLWFjdGl2ZScsICdVcGxvYWQgdGhlIHBsdWdpbiBhcyBpbmFjdGl2ZScpKVxuICAgIC5vcHRpb24oJy0tZHJ5LXJ1bicsICdWYWxpZGF0ZSBmaWxlIHdpdGhvdXQgdXBsb2FkaW5nJywgZmFsc2UpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgZXhlY3V0aW9uSWQgPSBwcmludENvbW1hbmRIZWFkZXIoJ1VwbG9hZCBQbHVnaW4nKTtcblxuICAgICAgdHJ5IHtcblxuICAgICAgICAvLyBEaXNwbGF5IHBhcmFtZXRlcnNcbiAgICAgICAgcHJpbnRJbmZvKCdVcGxvYWQgcGFyYW1ldGVycycsIHtcbiAgICAgICAgICBmaWxlOiBvcHRpb25zLmZpbGUsXG4gICAgICAgICAgb3JnYW5pemF0aW9uOiBvcHRpb25zLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICBuYW1lOiBvcHRpb25zLm5hbWUgfHwgJyhhdXRvLWRldGVjdCknLFxuICAgICAgICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbiB8fCAnKGF1dG8tZGV0ZWN0KScsXG4gICAgICAgICAgcHVibGljOiBvcHRpb25zLnB1YmxpYyA/ICdZZXMnIDogJ05vJyxcbiAgICAgICAgICBhY3RpdmU6IG9wdGlvbnMuYWN0aXZlID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgIGRyeVJ1bjogb3B0aW9ucy5kcnlSdW4sXG4gICAgICAgICAgdmVyaWZ5U3NsOiBvcHRpb25zLnZlcmlmeVNzbCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU2VjdXJpdHkgd2FybmluZyBmb3IgU1NMIHZlcmlmaWNhdGlvbiBkaXNhYmxlZFxuICAgICAgICBwcmludFNzbFdhcm5pbmcob3B0aW9ucy52ZXJpZnlTc2wpO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlIG9yZ2FuaXphdGlvblxuICAgICAgICBpZiAoIW9wdGlvbnMub3JnYW5pemF0aW9uIHx8IHR5cGVvZiBvcHRpb25zLm9yZ2FuaXphdGlvbiAhPT0gJ3N0cmluZycgfHwgb3B0aW9ucy5vcmdhbml6YXRpb24udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHByaW50RXJyb3IoJ0ludmFsaWQgb3JnYW5pemF0aW9uIG5hbWUnLCB7IHByb3ZpZGVkOiBvcHRpb25zLm9yZ2FuaXphdGlvbiB9KTtcbiAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdPcmdhbml6YXRpb24gbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnLCAnb3JnYW5pemF0aW9uJywgb3B0aW9ucy5vcmdhbml6YXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZmlsZSBwYXRoXG4gICAgICAgIGlmICghb3B0aW9ucy5maWxlIHx8IHR5cGVvZiBvcHRpb25zLmZpbGUgIT09ICdzdHJpbmcnIHx8IG9wdGlvbnMuZmlsZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignSW52YWxpZCBmaWxlIHBhdGgnLCB7IHByb3ZpZGVkOiBvcHRpb25zLmZpbGUgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignRmlsZSBwYXRoIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJywgJ2ZpbGUnLCBvcHRpb25zLmZpbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLnJlc29sdmUob3B0aW9ucy5maWxlKTtcblxuICAgICAgICAvLyBWYWxpZGF0ZSBmaWxlIGV4aXN0c1xuICAgICAgICBwcmludEluZm8oJ1ZhbGlkYXRpbmcgcGx1Z2luIGZpbGUnLCB7IHBhdGg6IGZpbGVQYXRoIH0pO1xuXG4gICAgICAgIGlmICghZmlsZUV4aXN0cyhmaWxlUGF0aCkpIHtcbiAgICAgICAgICBwcmludEVycm9yKCdQbHVnaW4gZmlsZSBub3QgZm91bmQnLCB7IHBhdGg6IGZpbGVQYXRoIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYFBsdWdpbiBmaWxlIG5vdCBmb3VuZDogJHtmaWxlUGF0aH1gLCAnZmlsZScsIGZpbGVQYXRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGZpbGUgZXh0ZW5zaW9uXG4gICAgICAgIGNvbnN0IGZpbGVFeHQgPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChmaWxlRXh0ICE9PSAnLnppcCcpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ0ZpbGUgZXh0ZW5zaW9uIGlzIG5vdCAuemlwJywge1xuICAgICAgICAgICAgcHJvdmlkZWQ6IGZpbGVFeHQsXG4gICAgICAgICAgICBleHBlY3RlZDogJy56aXAnLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ1BsdWdpbiBmaWxlIG11c3QgYmUgYSBaSVAgYXJjaGl2ZScsICdmaWxlJywgZmlsZVBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IGZpbGUgc3RhdHNcbiAgICAgICAgY29uc3Qgc3RhdHMgPSBmcy5zdGF0U3luYyhmaWxlUGF0aCk7XG4gICAgICAgIGNvbnN0IHNpemVCeXRlcyA9IHN0YXRzLnNpemU7XG4gICAgICAgIGNvbnN0IHNpemVGb3JtYXR0ZWQgPSBmb3JtYXRGaWxlU2l6ZShzaXplQnl0ZXMpO1xuXG4gICAgICAgIHByaW50U3VjY2VzcygnUGx1Z2luIGZpbGUgZm91bmQnLCB7XG4gICAgICAgICAgcGF0aDogZmlsZVBhdGgsXG4gICAgICAgICAgc2l6ZTogc2l6ZUZvcm1hdHRlZCxcbiAgICAgICAgICBtb2RpZmllZDogbmV3IERhdGUoc3RhdHMubXRpbWUpLnRvTG9jYWxlU3RyaW5nKCksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIENoZWNrIGZpbGUgc2l6ZVxuICAgICAgICBpZiAoc2l6ZUJ5dGVzID4gRklMRV9TSVpFX0xJTUlUUy5QTFVHSU4pIHtcbiAgICAgICAgICBwcmludEVycm9yKCdQbHVnaW4gZmlsZSB0b28gbGFyZ2UnLCB7XG4gICAgICAgICAgICBzaXplOiBzaXplRm9ybWF0dGVkLFxuICAgICAgICAgICAgbWF4aW11bTogZm9ybWF0RmlsZVNpemUoRklMRV9TSVpFX0xJTUlUUy5QTFVHSU4pLFxuICAgICAgICAgICAgZXhjZWVkZWRCeTogZm9ybWF0RmlsZVNpemUoc2l6ZUJ5dGVzIC0gRklMRV9TSVpFX0xJTUlUUy5QTFVHSU4pLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgICBgUGx1Z2luIGZpbGUgZXhjZWVkcyBtYXhpbXVtIHNpemUgb2YgJHtmb3JtYXRGaWxlU2l6ZShGSUxFX1NJWkVfTElNSVRTLlBMVUdJTil9IChhY3R1YWw6ICR7c2l6ZUZvcm1hdHRlZH0pYCxcbiAgICAgICAgICAgICdmaWxlLnNpemUnLFxuICAgICAgICAgICAgc2l6ZUJ5dGVzLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBpZiBmaWxlIGlzIHJlYWRhYmxlXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZnMuYWNjZXNzU3luYyhmaWxlUGF0aCwgZnMuY29uc3RhbnRzLlJfT0spO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHByaW50RXJyb3IoJ0Nhbm5vdCByZWFkIHBsdWdpbiBmaWxlJywge1xuICAgICAgICAgICAgcGF0aDogZmlsZVBhdGgsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3JNZXNzYWdlKGVycm9yKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdQbHVnaW4gZmlsZSBpcyBub3QgcmVhZGFibGUnLCAnZmlsZScsIGZpbGVQYXRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByaW50U3VjY2VzcygnUGx1Z2luIGZpbGUgdmFsaWRhdGVkJyk7XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgdmVyc2lvbiBmb3JtYXQgaWYgcHJvdmlkZWQuIEFsbG93cyAtcHJlcmVsZWFzZSBhbmQgK2J1aWxkXG4gICAgICAgIC8vIG1ldGFkYXRhICh2YWxpZCBzZW12ZXIpIHRvIG1hdGNoIHZhbGlkYXRlLXBsdWdpbiBhbmQgdGhlIERCIGNvbnN0cmFpbnQuXG4gICAgICAgIGlmIChvcHRpb25zLnZlcnNpb24pIHtcbiAgICAgICAgICBjb25zdCB2ZXJzaW9uUmVnZXggPSAvXlxcZCtcXC5cXGQrXFwuXFxkKygtW2EtekEtWjAtOS4tXSspPyhcXCtbYS16QS1aMC05Li1dKyk/JC87XG4gICAgICAgICAgaWYgKCF2ZXJzaW9uUmVnZXgudGVzdChvcHRpb25zLnZlcnNpb24pKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoJ1ZlcnNpb24gZm9ybWF0IG1heSBiZSBpbnZhbGlkJywge1xuICAgICAgICAgICAgICBwcm92aWRlZDogb3B0aW9ucy52ZXJzaW9uLFxuICAgICAgICAgICAgICBleHBlY3RlZDogJ3NlbWFudGljIHZlcnNpb24gKGUuZy4sIDEuMC4wLCAxLjIuMy1iZXRhLjEpJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIG5hbWUgZm9ybWF0IGlmIHByb3ZpZGVkXG4gICAgICAgIGlmIChvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgICBjb25zdCBuYW1lUmVnZXggPSAvXlthLXowLTktXSskLztcbiAgICAgICAgICBpZiAoIW5hbWVSZWdleC50ZXN0KG9wdGlvbnMubmFtZSkpIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZygnUGx1Z2luIG5hbWUgZm9ybWF0IG1heSBiZSBpbnZhbGlkJywge1xuICAgICAgICAgICAgICBwcm92aWRlZDogb3B0aW9ucy5uYW1lLFxuICAgICAgICAgICAgICBleHBlY3RlZDogJ2xvd2VyY2FzZSBhbHBoYW51bWVyaWMgd2l0aCBkYXNoZXMgKGUuZy4sIG15LXBsdWdpbi1uYW1lKScsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEcnkgcnVuIG1vZGVcbiAgICAgICAgaWYgKG9wdGlvbnMuZHJ5UnVuKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICAgIHByaW50U2VjdGlvbignRHJ5IFJ1biAtIFZhbGlkYXRpb24gQ29tcGxldGUnKTtcbiAgICAgICAgICBwcmludFN1Y2Nlc3MoJ0ZpbGUgdmFsaWRhdGlvbiBwYXNzZWQgLSBubyB1cGxvYWQgcGVyZm9ybWVkJyk7XG5cbiAgICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAgIEZpbGU6IGZpbGVQYXRoLFxuICAgICAgICAgICAgU2l6ZTogc2l6ZUZvcm1hdHRlZCxcbiAgICAgICAgICAgIE9yZ2FuaXphdGlvbjogb3B0aW9ucy5vcmdhbml6YXRpb24sXG4gICAgICAgICAgICBOYW1lOiBvcHRpb25zLm5hbWUgfHwgJyh3aWxsIGJlIGF1dG8tZGV0ZWN0ZWQpJyxcbiAgICAgICAgICAgIFZlcnNpb246IG9wdGlvbnMudmVyc2lvbiB8fCAnKHdpbGwgYmUgYXV0by1kZXRlY3RlZCknLFxuICAgICAgICAgICAgUHVibGljOiBvcHRpb25zLnB1YmxpYyA/ICdZZXMnIDogJ05vJyxcbiAgICAgICAgICAgIEFjdGl2ZTogb3B0aW9ucy5hY3RpdmUgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgYXV0aGVudGljYXRlZCBBUEkgY2xpZW50XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnQob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGNsaWVudC5nZXRDb25maWcoKTtcblxuICAgICAgICAvLyBDcmVhdGUgZm9ybSBkYXRhXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRTZWN0aW9uKCdVcGxvYWRpbmcgUGx1Z2luJyk7XG4gICAgICAgIHByaW50SW5mbygnUHJlcGFyaW5nIHVwbG9hZCcsIHtcbiAgICAgICAgICBmaWxlOiBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKSxcbiAgICAgICAgICBzaXplOiBzaXplRm9ybWF0dGVkLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ3BsdWdpbicsIGZzLmNyZWF0ZVJlYWRTdHJlYW0oZmlsZVBhdGgpLCB7XG4gICAgICAgICAgZmlsZW5hbWU6IHBhdGguYmFzZW5hbWUoZmlsZVBhdGgpLFxuICAgICAgICAgIGNvbnRlbnRUeXBlOiAnYXBwbGljYXRpb24vemlwJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnb3JnYW5pemF0aW9uJywgb3B0aW9ucy5vcmdhbml6YXRpb24pO1xuXG4gICAgICAgIGlmIChvcHRpb25zLm5hbWUpIGZvcm1EYXRhLmFwcGVuZCgnbmFtZScsIG9wdGlvbnMubmFtZSk7XG4gICAgICAgIGlmIChvcHRpb25zLnZlcnNpb24pIGZvcm1EYXRhLmFwcGVuZCgndmVyc2lvbicsIG9wdGlvbnMudmVyc2lvbik7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnaXNQdWJsaWMnLCBvcHRpb25zLnB1YmxpYyA/ICd0cnVlJyA6ICdmYWxzZScpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2lzQWN0aXZlJywgb3B0aW9ucy5hY3RpdmUgPyAndHJ1ZScgOiAnZmFsc2UnKTtcblxuICAgICAgICAvLyBNYWtlIEFQSSByZXF1ZXN0XG4gICAgICAgIGNvbnN0IGVuZHBvaW50ID0gY29uZmlnLmFwaS5wbHVnaW5VcGxvYWRVcmw7XG4gICAgICAgIHByaW50SW5mbygnVXBsb2FkaW5nIHRvIEFQSScsIHtcbiAgICAgICAgICBlbmRwb2ludDogYCR7Y29uZmlnLmFwaS5iYXNlVXJsfSR7ZW5kcG9pbnR9YCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuXG4gICAgICAgIGNvbnN0IHNwaW5uZXIgPSBvcmEoJ1VwbG9hZGluZyBwbHVnaW4uLi4nKS5zdGFydCgpO1xuICAgICAgICBsZXQgcmF3UmVzcG9uc2U6IFBsdWdpblJlc3BvbnNlO1xuICAgICAgICBsZXQgZHVyYXRpb246IG51bWJlcjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIHJhd1Jlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3RGb3JtPFBsdWdpblJlc3BvbnNlPihlbmRwb2ludCwgZm9ybURhdGEpO1xuICAgICAgICAgIGR1cmF0aW9uID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ1BsdWdpbiB1cGxvYWRlZCcpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHNwaW5uZXIuZmFpbCgnVXBsb2FkIGZhaWxlZCcpO1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBleHRyYWN0U2luZ2xlUmVzcG9uc2U8UGx1Z2luPihyYXdSZXNwb25zZSwgJ3BsdWdpbicsICduYW1lJyk7XG5cbiAgICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICAgIHByaW50RXJyb3IoJ05vIHZhbGlkIHBsdWdpbiBkYXRhIGluIHJlc3BvbnNlJywge1xuICAgICAgICAgICAgcmVzcG9uc2VLZXlzOiByYXdSZXNwb25zZSA/IE9iamVjdC5rZXlzKHJhd1Jlc3BvbnNlKSA6ICcobnVsbCknLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXBsb2FkIGZhaWxlZCAtIG5vIHZhbGlkIHBsdWdpbiBkYXRhIHJlY2VpdmVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50U2VjdGlvbignUGx1Z2luIFVwbG9hZGVkIFN1Y2Nlc3NmdWxseScpO1xuXG4gICAgICAgIC8vIERpc3BsYXkgcGx1Z2luIGluZm9ybWF0aW9uXG4gICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICdQbHVnaW4gSUQnOiBncmVlbihib2xkKHJlc3BvbnNlLmlkKSksXG4gICAgICAgICAgJ05hbWUnOiByZXNwb25zZS5uYW1lLFxuICAgICAgICAgICdWZXJzaW9uJzogcmVzcG9uc2UudmVyc2lvbixcbiAgICAgICAgICAnT3JnYW5pemF0aW9uJzogcmVzcG9uc2Uub3JnYW5pemF0aW9uLFxuICAgICAgICAgICdEZXNjcmlwdGlvbic6IHJlc3BvbnNlLmRlc2NyaXB0aW9uIHx8ICcobm90IHNldCknLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICdGaWxlIFVSTCc6IHJlc3BvbnNlLmZpbGVVcmwgfHwgJyhub3QgYXZhaWxhYmxlKScsXG4gICAgICAgICAgJ0ZpbGUgU2l6ZSc6IHJlc3BvbnNlLmZpbGVTaXplID8gYCR7KHJlc3BvbnNlLmZpbGVTaXplIC8gMTAyNCkudG9GaXhlZCgyKX0gS0JgIDogJyhub3QgYXZhaWxhYmxlKScsXG4gICAgICAgICAgJ0NoZWNrc3VtJzogcmVzcG9uc2UuY2hlY2tzdW0gPyBgJHtyZXNwb25zZS5jaGVja3N1bS5zdWJzdHJpbmcoMCwgMTYpfS4uLmAgOiAnKG5vdCBhdmFpbGFibGUpJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAnUHVibGljJzogcmVzcG9uc2UuaXNQdWJsaWMgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICAgJ0FjdGl2ZSc6IHJlc3BvbnNlLmlzQWN0aXZlID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgICdDcmVhdGVkIEF0JzogcmVzcG9uc2UuY3JlYXRlZEF0IHx8ICcobm90IGF2YWlsYWJsZSknLFxuICAgICAgICAgICdVcGxvYWRlZCBCeSc6IHJlc3BvbnNlLnVwbG9hZGVkQnkgfHwgJyhub3QgYXZhaWxhYmxlKScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgJ0V4ZWN1dGlvbiBJRCc6IGV4ZWN1dGlvbklkLFxuICAgICAgICAgICdVcGxvYWQgRHVyYXRpb24nOiBgJHsoZHVyYXRpb24gLyAxMDAwKS50b0ZpeGVkKDIpfXNgLFxuICAgICAgICAgICdTdGF0dXMnOiBncmVlbign4pyTIFN1Y2Nlc3MnKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUHJpbnQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpZiBhdmFpbGFibGVcbiAgICAgICAgaWYgKHJlc3BvbnNlLm1ldGFkYXRhKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICAgIHByaW50SW5mbygnUGx1Z2luIG1ldGFkYXRhIGF2YWlsYWJsZScsIHtcbiAgICAgICAgICAgIGtleXM6IE9iamVjdC5rZXlzKHJlc3BvbnNlLm1ldGFkYXRhKS5sZW5ndGgsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcmludCBkZXBsb3ltZW50IGxvZ3MgVVJMIGlmIGF2YWlsYWJsZVxuICAgICAgICBjb25zdCByZXNwID0gcmVzcG9uc2UgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgY29uc3QgcmVxdWVzdElkID0gcmVzcFsnWC1SZXF1ZXN0LUlkJ10gfHwgcmVzcC5yZXF1ZXN0SWQ7XG4gICAgICAgIGlmIChyZXF1ZXN0SWQpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgICAgcHJpbnRJbmZvKCdEZXBsb3ltZW50IGxvZ3MgYXZhaWxhYmxlJywge1xuICAgICAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICAgICAgdXJsOiBgJHtjb25maWcuYXBpLmJhc2VVcmx9L2xvZ3MvJHtyZXF1ZXN0SWR9YCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5leHQgc3RlcHNcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludEluZm8oJ05leHQgc3RlcHMnLCB7XG4gICAgICAgICAgdmlldzogYFVzZSBcImdldC1wbHVnaW4gLS1pZCAke3Jlc3BvbnNlLmlkfVwiIHRvIHZpZXcgcGx1Z2luIGRldGFpbHNgLFxuICAgICAgICAgIGxpc3Q6ICdVc2UgXCJsaXN0LXBsdWdpbnNcIiB0byBzZWUgYWxsIHBsdWdpbnMnLFxuICAgICAgICB9KTtcblxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkFQSV9SRVFVRVNULCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgY29tbWFuZDogJ3VwbG9hZC1wbHVnaW4nLFxuICAgICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgICBmaWxlOiBvcHRpb25zLmZpbGUsXG4gICAgICAgICAgICBvcmdhbml6YXRpb246IG9wdGlvbnMub3JnYW5pemF0aW9uLFxuICAgICAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICAgICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uLFxuICAgICAgICAgICAgcHVibGljOiBvcHRpb25zLnB1YmxpYyxcbiAgICAgICAgICAgIGFjdGl2ZTogb3B0aW9ucy5hY3RpdmUsXG4gICAgICAgICAgICB2ZXJpZnlTc2w6IG9wdGlvbnMudmVyaWZ5U3NsLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoFpC;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuJ9C"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoFpC;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuJ9C"}