@pipeline-builder/pipeline-manager 3.4.36 → 3.4.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAmCA;;GAEG;AACH,UAAU,UAAU;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAsOD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,UAAe,GAAG,IAAI,CAyD5D;AAiDD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,IAAI,CAAC,OAAO,GAAE,UAAe,GAAG,IAAI,CA0BnD"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAoCA;;GAEG;AACH,UAAU,UAAU;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAwOD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,UAAe,GAAG,IAAI,CAyD5D;AAiDD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,IAAI,CAAC,OAAO,GAAE,UAAe,GAAG,IAAI,CA0BnD"}
package/dist/cli.js CHANGED
@@ -16,6 +16,7 @@ const get_plugin_1 = require("./commands/get-plugin");
16
16
  const list_pipelines_1 = require("./commands/list-pipelines");
17
17
  const list_plugins_1 = require("./commands/list-plugins");
18
18
  const login_1 = require("./commands/login");
19
+ const org_export_1 = require("./commands/org-export");
19
20
  const register_1 = require("./commands/register");
20
21
  const setup_events_1 = require("./commands/setup-events");
21
22
  const status_1 = require("./commands/status");
@@ -98,15 +99,13 @@ function registerCommands() {
98
99
  .option('--quiet', 'Minimal output (errors only)', false)
99
100
  .option('--no-color', 'Disable colored output', false)
100
101
  .addHelpText('after', `
101
- Environment Variables:
102
- ${cli_constants_1.ENV_VARS.PLATFORM_TOKEN} Authentication token (required)
103
- ${cli_constants_1.ENV_VARS.PLATFORM_BASE_URL} API base URL (optional)
104
- ${cli_constants_1.ENV_VARS.CLI_CONFIG_PATH} Config file path (optional)
105
- ${cli_constants_1.ENV_VARS.TLS_REJECT_UNAUTHORIZED} Disable SSL verification if '0'
106
- ${cli_constants_1.ENV_VARS.DEBUG} Enable debug mode if 'true'
102
+ Environment Variables ${cli_constants_1.ENV_VARS.PLATFORM_TOKEN} Authentication token (required)
103
+ ${cli_constants_1.ENV_VARS.PLATFORM_BASE_URL} API base URL (optional)
104
+ ${cli_constants_1.ENV_VARS.CLI_CONFIG_PATH} Config file path (optional)
105
+ ${cli_constants_1.ENV_VARS.TLS_REJECT_UNAUTHORIZED} Disable SSL verification if '0'
106
+ ${cli_constants_1.ENV_VARS.DEBUG} Enable debug mode if 'true'
107
107
 
108
- Examples:
109
- $ ${cli_constants_1.APP_NAME} version
108
+ Examples $ ${cli_constants_1.APP_NAME} version
110
109
  $ ${cli_constants_1.APP_NAME} list-pipelines --project my-app
111
110
  $ ${cli_constants_1.APP_NAME} get-pipeline --id pipe-123 --format json
112
111
  $ ${cli_constants_1.APP_NAME} store-token --days 30 --region us-east-1
@@ -132,6 +131,9 @@ Examples:
132
131
  // Status command
133
132
  (0, output_utils_1.printDebug)('Registering status command');
134
133
  (0, status_1.status)(commander_1.program); // Show environment and connectivity status
134
+ // Org admin commands
135
+ (0, output_utils_1.printDebug)('Registering org admin commands');
136
+ (0, org_export_1.orgExport)(commander_1.program); // GDPR portability export — sysadmin (any org) or org admin (own org)
135
137
  // Deployment commands
136
138
  (0, output_utils_1.printDebug)('Registering deployment commands');
137
139
  (0, store_token_1.storeToken)(commander_1.program); // Generate JWT token and store in Secrets Manager
@@ -144,7 +146,7 @@ Examples:
144
146
  (0, audit_tokens_1.auditTokens)(commander_1.program); // Scan Secrets Manager for expiring platform tokens
145
147
  (0, audit_stacks_1.auditStacks)(commander_1.program); // Diff CFN stacks vs pipeline_registry to find drift
146
148
  (0, synth_1.synth)(commander_1.program); // Run CDK synthesis
147
- (0, validate_templates_1.validateTemplatesCommand)(commander_1.program); // Validate {{ ... }} templates in a pipeline or plugin
149
+ (0, validate_templates_1.validateTemplatesCommand)(commander_1.program); // Validate {{... }} templates in a pipeline or plugin
148
150
  // Shell completions
149
151
  (0, output_utils_1.printDebug)('Registering completions command');
150
152
  commander_1.program
@@ -308,7 +310,7 @@ function parseArguments() {
308
310
  console.log(''); // Empty line
309
311
  (0, output_utils_1.printInfo)('Available commands:');
310
312
  commander_1.program.commands.forEach(cmd => {
311
- console.log(` • ${cmd.name()} - ${cmd.description()}`);
313
+ console.log(` • ${cmd.name()} - ${cmd.description()}`);
312
314
  });
313
315
  console.log(''); // Empty line
314
316
  process.exit(1);
@@ -382,4 +384,4 @@ if (require.main === module) {
382
384
  };
383
385
  main(options);
384
386
  }
385
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLCtDQUErQztBQUMvQyxzQ0FBc0M7O0FBbVR0QyxzQ0F5REM7QUFrRUQsb0JBMEJDO0FBdGNELHlDQUFvQztBQUNwQywwREFBc0Q7QUFDdEQsMERBQXNEO0FBQ3RELG9EQUFpRDtBQUNqRCxnRUFBNEQ7QUFDNUQsOENBQTJDO0FBQzNDLDBEQUFzRDtBQUN0RCxzREFBa0Q7QUFDbEQsOERBQTBEO0FBQzFELDBEQUFzRDtBQUN0RCw0Q0FBeUM7QUFDekMsa0RBQStDO0FBQy9DLDBEQUFzRDtBQUN0RCw4Q0FBMkM7QUFDM0Msd0RBQW9EO0FBQ3BELDRDQUF5QztBQUN6Qyw0REFBd0Q7QUFDeEQsc0VBQXlFO0FBQ3pFLGdEQUE2QztBQUM3QywwREFPZ0M7QUFDaEMsMkNBQW9EO0FBQ3BELHlEQUFpRTtBQUNqRSx1REFBcUc7QUEyQ3JHOztHQUVHO0FBQ0gsU0FBUyxnQkFBZ0I7SUFDdkIsTUFBTSxRQUFRLEdBQWEsRUFBRSxDQUFDO0lBRTlCLDJDQUEyQztJQUMzQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7UUFDMUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1FBQ2hFLFFBQVEsQ0FBQyxJQUFJLENBQUMsNkNBQTZDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQscUJBQXFCO0lBQ3JCLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7SUFDcEMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3RSxJQUFJLFlBQVksR0FBRyxFQUFFLEVB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LEtBQUssR0FBRztLQUM3RSxDQUFDO0lBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG4vLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgcHJvZ3JhbSB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBhdWRpdFN0YWNrcyB9IGZyb20gJy4vY29tbWFuZHMvYXVkaXQtc3RhY2tzJztcbmltcG9ydCB7IGF1ZGl0VG9rZW5zIH0gZnJvbSAnLi9jb21tYW5kcy9hdWRpdC10b2tlbnMnO1xuaW1wb3J0IHsgYm9vdHN0cmFwIH0gZnJvbSAnLi9jb21tYW5kcy9ib290c3RyYXAnO1xuaW1wb3J0IHsgY3JlYXRlUGlwZWxpbmUgfSBmcm9tICcuL2NvbW1hbmRzL2NyZWF0ZS1waXBlbGluZSc7XG5pbXBvcnQgeyBkZXBsb3kgfSBmcm9tICcuL2NvbW1hbmRzL2RlcGxveSc7XG5pbXBvcnQgeyBnZXRQaXBlbGluZSB9IGZyb20gJy4vY29tbWFuZHMvZ2V0LXBpcGVsaW5lJztcbmltcG9ydCB7IGdldFBsdWdpbiB9IGZyb20gJy4vY29tbWFuZHMvZ2V0LXBsdWdpbic7XG5pbXBvcnQgeyBsaXN0UGlwZWxpbmVzIH0gZnJvbSAnLi9jb21tYW5kcy9saXN0LXBpcGVsaW5lcyc7XG5pbXBvcnQgeyBsaXN0UGx1Z2lucyB9IGZyb20gJy4vY29tbWFuZHMvbGlzdC1wbHVnaW5zJztcbmltcG9ydCB7IGxvZ2luIH0gZnJvbSAnLi9jb21tYW5kcy9sb2dpbic7XG5pbXBvcnQgeyByZWdpc3RlciB9IGZyb20gJy4vY29tbWFuZHMvcmVnaXN0ZXInO1xuaW1wb3J0IHsgc2V0dXBFdmVudHMgfSBmcm9tICcuL2NvbW1hbmRzL3NldHVwLWV2ZW50cyc7XG5pbXBvcnQgeyBzdGF0dXMgfSBmcm9tICcuL2NvbW1hbmRzL3N0YXR1cyc7XG5pbXBvcnQgeyBzdG9yZVRva2VuIH0gZnJvbSAnLi9jb21tYW5kcy9zdG9yZS10b2tlbic7XG5pbXBvcnQgeyBzeW50aCB9IGZyb20gJy4vY29tbWFuZHMvc3ludGgnO1xuaW1wb3J0IHsgdXBsb2FkUGx1Z2luIH0gZnJvbSAnLi9jb21tYW5kcy91cGxvYWQtcGx1Z2luJztcbmltcG9ydCB7IHZhbGlkYXRlVGVtcGxhdGVzQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvdmFsaWRhdGUtdGVtcGxhdGVzJztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuL2NvbW1hbmRzL3ZlcnNpb24nO1xuaW1wb3J0IHtcbiAgQVBQX05BTUUsXG4gIEFQUF9ERVNDUklQVElPTixcbiAgQVBQX1ZFUlNJT04sXG4gIEVOVl9WQVJTLFxuICBpc0RlYnVnTW9kZSxcbiAgZ2VuZXJhdGVFeGVjdXRpb25JZCxcbn0gZnJvbSAnLi9jb25maWcvY2xpLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBiYW5uZXIsIG1pbmlCYW5uZXIgfSBmcm9tICcuL3V0aWxzL2Jhbm5lcic7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IgfSBmcm9tICcuL3V0aWxzL2Vycm9yLWhhbmRsZXInO1xuaW1wb3J0IHsgcHJpbnRJbmZvLCBwcmludEVycm9yLCBwcmludFdhcm5pbmcsIHByaW50RGVidWcsIHByaW50U2VjdGlvbiB9IGZyb20gJy4vdXRpbHMvb3V0cHV0LXV0aWxzJztcblxuLyoqXG4gKiBDTEkgaW5pdGlhbGl6YXRpb24gb3B0aW9uc1xuICovXG5pbnRlcmZhY2UgQ2xpT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTaG93IGJhbm5lciBvbiBzdGFydHVwXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHNob3dCYW5uZXI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBNaW5pbWFsIGJhbm5lciAobm8gQVNDSUkgYXJ0KVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbWluaW1hbEJhbm5lcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERlYnVnIG1vZGVcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRlYnVnPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVmVyYm9zZSBvdXRwdXRcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHZlcmJvc2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBRdWlldCBtb2RlIChtaW5pbWFsIG91dHB1dClcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHF1aWV0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTm8gY29sb3Igb3V0cHV0XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBub0NvbG9yPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDaGVjayBlbnZpcm9ubWVudCBhbmQgZGlzcGxheSB3YXJuaW5nc1xuICovXG5mdW5jdGlvbiBjaGVja0Vudmlyb25tZW50KCk6IHZvaWQge1xuICBjb25zdCB3YXJuaW5nczogc3RyaW5nW10gPSBbXTtcblxuICAvLyBDaGVjayBmb3IgcmVxdWlyZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gIGlmICghcHJvY2Vzcy5lbnZbRU5WX1ZBUlMuUExBVEZPUk1fVE9LRU5dKSB7XG4gICAgd2FybmluZ3MucHVzaCgnUExBVEZPUk1fVE9LRU4gZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCcpO1xuICAgIHdhcm5pbmdzLnB1c2goJ0F1dGhlbnRpY2F0aW9uIHdpbGwgZmFpbCBmb3IgQVBJIG9wZXJhdGlvbnMnKTtcbiAgfVxuXG4gIC8vIENoZWNrIE5vZGUgdmVyc2lvblxuICBjb25zdCBub2RlVmVyc2lvbiA9IHByb2Nlc3MudmVyc2lvbjtcbiAgY29uc3QgbWFqb3JWZXJzaW9uID0gcGFyc2VJbnQobm9kZVZlcnNpb24uc2xpY2UoMSkuc3BsaXQoJy4nKVswXSB8fCAnMCcsIDEwKTtcbiAgaWYgKG1ham9yVmVyc2lvbiA8IDE4KSB7XG4gICAgd2FybmluZ3MucHVzaChgTm9kZS5qcyAke25vZGVWZXJzaW9ufSBkZXRlY3RlZCAtIHZlcnNpb24gMTgrIHJlY29tbWVuZGVkYCk7XG4gIH1cblxuICAvLyBEaXNwbGF5IHdhcm5pbmdzXG4gIGlmICh3YXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgcHJpbnRTZWN0aW9uKCdFbnZpcm9ubWVudCBXYXJuaW5ncycpO1xuICAgIHdhcm5pbmdzLmZvckVhY2god2FybmluZyA9PiB7XG4gICAgICBwcmludFdhcm5pbmcod2FybmluZyk7XG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coJycpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGxheSBzdGFydHVwIGluZm9ybWF0aW9uXG4gKi9cbmZ1bmN0aW9uIGRpc3BsYXlTdGFydHVwSW5mbyhvcHRpb25zOiBDbGlPcHRpb25zKTogdm9pZCB7XG4gIGlmIChvcHRpb25zLnF1aWV0KSByZXR1cm47XG5cbiAgY29uc3QgZXhlY3V0aW9uSWQgPSBnZW5lcmF0ZUV4ZWN1dGlvbklkKCk7XG5cbiAgaWYgKG9wdGlvbnMuZGVidWcgfHwgb3B0aW9ucy52ZXJib3NlKSB7XG4gICAgcHJpbnREZWJ1ZygnQ0xJIENvbmZpZ3VyYXRpb24nLCB7XG4gICAgICBuYW1lOiBBUFBfTkFNRSxcbiAgICAgIHZlcnNpb246IEFQUF9WRVJTSU9OLFxuICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICBub2RlOiBwcm9jZXNzLnZlcnNpb24sXG4gICAgICBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSxcbiAgICAgIGFyY2g6IHByb2Nlc3MuYXJjaCxcbiAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgIGVudjoge1xuICAgICAgICBkZWJ1ZzogcHJvY2Vzcy5lbnYuREVCVUcsXG4gICAgICAgIHRva2VuOiBwcm9jZXNzLmVudltFTlZfVkFSUy5QTEFURk9STV9UT0tFTl0gPyAnc2V0JyA6ICdub3Qgc2V0JyxcbiAgICAgICAgdXJsOiBwcm9jZXNzLmVudltFTlZfVkFSUy5QTEFURk9STV9CQVNFX1VSTF0gfHwgJ2RlZmF1bHQnLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBwcmludERlYnVnKCdTdGFydGluZyBDTEknLCB7XG4gICAgICB2ZXJzaW9uOiBBUFBfVkVSU0lPTixcbiAgICAgIGV4ZWN1dGlvbklkLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgYWxsIENMSSBjb21tYW5kc1xuICovXG5mdW5jdGlvbiByZWdpc3RlckNvbW1hbmRzKCk6IHZvaWQge1xuICBwcmludERlYnVnKCdSZWdpc3RlcmluZyBjb21tYW5kcycpO1xuXG4gIC8vIENvbmZpZ3VyZSBwcm9ncmFtXG4gIHByb2dyYW1cbiAgICAubmFtZShBUFBfTkFNRSlcbiAgICAuZGVzY3JpcHRpb24oQVBQX0RFU0NSSVBUSU9OKVxuICAgIC52ZXJzaW9uKEFQUF9WRVJTSU9OLCAnLXYsIC0tdmVyc2lvbicsICdTaG93IENMSSB2ZXJzaW9uJylcbiAgICAub3B0aW9uKCctLWRlYnVnJywgJ0VuYWJsZSBkZWJ1ZyBvdXRwdXQgd2l0aCBzdGFjayB0cmFjZXMnLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXZlcmJvc2UnLCAnU2hvdyBkZXRhaWxlZCBpbmZvcm1hdGlvbicsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tcXVpZXQnLCAnTWluaW1hbCBvdXRwdXQgKGVycm9ycyBvbmx5KScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tbm8tY29sb3InLCAnRGlzYWJsZSBjb2xvcmVkIG91dHB1dCcsIGZhbHNlKVxuICAgIC5hZGRIZWxwVGV4dCgnYWZ0ZXInLCBgXG5FbnZpcm9ubWVudCBWYXJpYWJsZXM6XG4gICR7RU5WX1ZBUlMuUExBVEZPUk1fVE9LRU59ICAgICAgICAgICAgICBBdXRoZW50aWNhdGlvbiB0b2tlbiAocmVxdWlyZWQpXG4gICR7RU5WX1ZBUlMuUExBVEZPUk1fQkFTRV9VUkx9ICAgICAgICAgICAgICAgICBBUEkgYmFzZSBVUkwgKG9wdGlvbmFsKVxuICAke0VOVl9WQVJTLkNMSV9DT05GSUdfUEFUSH0gICAgICAgICAgICAgIENvbmZpZyBmaWxlIHBhdGggKG9wdGlvbmFsKVxuICAke0VOVl9WQVJTLlRMU19SRUpFQ1RfVU5BVVRIT1JJWkVEfSAgICAgIERpc2FibGUgU1NMIHZlcmlmaWNhdGlvbiBpZiAnMCdcbiAgJHtFTlZfVkFSUy5ERUJVR30gICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgZGVidWcgbW9kZSBpZiAndHJ1ZSdcblxuRXhhbXBsZXM6XG4gICQgJHtBUFBfTkFNRX0gdmVyc2lvblxuICAkICR7QVBQX05BTUV9IGxpc3QtcGlwZWxpbmVzIC0tcHJvamVjdCBteS1hcHBcbiAgJCAke0FQUF9OQU1FfSBnZXQtcGlwZWxpbmUgLS1pZCBwaXBlLTEyMyAtLWZvcm1hdCBqc29uXG4gICQgJHtBUFBfTkFNRX0gc3RvcmUtdG9rZW4gLS1kYXlzIDMwIC0tcmVnaW9uIHVzLWVhc3QtMVxuICAkICR7QVBQX05BTUV9IGJvb3RzdHJhcCAtLWFjY291bnQgMTIzNDU2Nzg5MDEyIC0tcmVnaW9uIHVzLWVhc3QtMVxuICAkICR7QVBQX05BTUV9IGRlcGxveSAtLWlkIHBpcGUtMTIzIC0tcHJvZmlsZSBwcm9kdWN0aW9uXG5cbmApO1xuXG4gIC8vIFZlcnNpb24gY29tbWFuZCAoc3BlY2lhbCBoYW5kbGluZylcbiAgdmVyc2lvbihwcm9ncmFtKTtcblxuICAvLyBBdXRoZW50aWNhdGlvbiBjb21tYW5kc1xuICBwcmludERlYnVnKCdSZWdpc3RlcmluZyBhdXRoZW50aWNhdGlvbiBjb21tYW5kcycpO1xuICBsb2dpbihwcm9ncmFtKTsgLy8gTG9naW4gYW5kIG9idGFpbiBQTEFURk9STV9UT0tFTiAoYWxzbyBzdXBwb3J0cyAtLXJlZnJlc2gpXG5cbiAgLy8gUXVlcnkgY29tbWFuZHNcbiAgcHJpbnREZWJ1ZygnUmVnaXN0ZXJpbmcgcXVlcnkgY29tbWFuZHMnKTtcbiAgZ2V0UGx1Z2luKHByb2dyYW0pOyAvLyBTaW5nbGUgcGx1Z2luIGJ5IElEXG4gIGxpc3RQbHVnaW5zKHByb2dyYW0pOyAvLyBNdWx0aXBsZSBwbHVnaW5zIHdpdGggZmlsdGVyc1xuICBnZXRQaXBlbGluZShwcm9ncmFtKTsgLy8gU2luZ2xlIHBpcGVsaW5lIGJ5IElEXG4gIGxpc3RQaXBlbGluZXMocHJvZ3JhbSk7IC8vIE11bHRpcGxlIHBpcGVsaW5lcyB3aXRoIGZpbHRlcnNcblxuICAvLyBDcmVhdGUvVXBsb2FkIGNvbW1hbmRzXG4gIHByaW50RGVidWcoJ1JlZ2lzdGVyaW5nIGNyZWF0ZS91cGxvYWQgY29tbWFuZHMnKTtcbiAgY3JlYXRlUGlwZWxpbmUocHJvZ3JhbSk7IC8vIENyZWF0ZSBwaXBlbGluZSBjb25maWd1cmF0aW9uXG4gIHVwbG9hZFBsdWdpbihwcm9ncmFtKTsgLy8gVXBsb2FkIGFuZCBkZXBsb3kgcGx1Z2luXG5cbiAgLy8gU3RhdHVzIGNvbW1hbmRcbiAgcHJpbnREZWJ1ZygnUmVnaXN0ZXJpbmcgc3RhdHVzIGNvbW1hbmQnKTtcbiAgc3RhdHVzKHByb2dyYW0pOyAvLyBTaG93IGVudmlyb25tZW50IGFuZCBjb25uZWN0aXZpdHkgc3RhdHVzXG5cbiAgLy8gRGVwbG95bWVudCBjb21tYW5kc1xuICBwcmludERlYnVnKCdSZWdpc3RlcmluZyBkZXBsb3ltZW50IGNvbW1hbmRzJyk7XG4gIHN0b3JlVG9rZW4ocHJvZ3JhbSk7IC8vIEdlbmVyYXRlIEpXVCB0b2tlbiBhbmQgc3RvcmUgaW4gU2VjcmV0cyBNYW5hZ2VyXG4gIHNldHVwRXZlbnRzKHByb2dyYW0pOyAvLyBEZXBsb3kgRXZlbnRCcmlkZ2UgZXZlbnQgaW5nZXN0aW9uIGluZnJhc3RydWN0dXJlXG4gIGJvb3RzdHJhcChwcm9ncmFtKTsgLy8gQm9vdHN0cmFwIENESyB0b29sa2l0IHN0YWNrXG4gIGRlcGxveShwcm9ncmFtKTsgLy8gRGVwbG95IHBpcGVsaW5lIHdpdGggQ0RLICgtLWFwcCBwcmludHMgYm9pbGVycGxhdGUgcGF0aClcbiAgcmVnaXN0ZXIocHJvZ3JhbSk7IC8vIFJlLXJlZ2lzdGVyIGEgZGVwbG95ZWQgcGlwZWxpbmUgQVJOICsgZHJhaW4gcGVuZGluZyBpbnRlbnRzIGZyb20gcHJpb3IgZmFpbGVkIGRlcGxveXNcblxuICAvLyBPcGVyYXRvciBhdWRpdCBjb21tYW5kcyAoY3Jvbi1mcmllbmRseTogZXhpdCAxIG9uIGZpbmRpbmdzKVxuICBwcmludERlYnVnKCdSZWdpc3RlcmluZyBhdWRpdCBjb21tYW5kcycpO1xuICBhdWRpdFRva2Vucyhwcm9ncmFtKTsgLy8gU2NhbiBTZWNyZXRzIE1hbmFnZXIgZm9yIGV4cGlyaW5nIHBsYXRmb3JtIHRva2Vuc1xuICBhdWRpdFN0YWNrcyhwcm9ncmFtKTsgLy8gRGlmZiBDRk4gc3RhY2tzIHZzIHBpcGVsaW5lX3JlZ2lzdHJ5IHRvIGZpbmQgZHJpZnRcbiAgc3ludGgocHJvZ3JhbSk7IC8vIFJ1biBDREsgc3ludGhlc2lzXG4gIHZhbGlkYXRlVGVtcGxhdGVzQ29tbWFuZChwcm9ncmFtKTsgLy8gVmFsaWRhdGUge3sgLi4uIH19IHRlbXBsYXRlcyBpbiBhIHBpcGVsaW5lIG9yIHBsdWdpblxuXG4gIC8vIFNoZWxsIGNvbXBsZXRpb25zXG4gIHByaW50RGVidWcoJ1JlZ2lzdGVyaW5nIGNvbXBsZXRpb25zIGNvbW1hbmQnKTtcbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKCdjb21wbGV0aW9ucycpXG4gICAgLmRlc2NyaXB0aW9uKCdHZW5lcmF0ZSBzaGVsbCBjb21wbGV0aW9ucyAoYmFzaCwgenNoLCBmaXNoKScpXG4gICAgLmFyZ3VtZW50KCc8c2hlbGw+JywgJ1NoZWxsIHR5cGU6IGJhc2gsIHpzaCwgb3IgZmlzaCcpXG4gICAgLmFjdGlvbigoc2hlbGw6IHN0cmluZykgPT4ge1xuICAgICAgLy8gUHVsbCBjb21tYW5kIG5hbWVzIGZyb20gY29tbWFuZGVyJ3MgcmVnaXN0ZXJlZCBsaXN0IHNvIGNvbXBsZXRpb25zIG5ldmVyXG4gICAgICAvLyBkcmlmdCBmcm9tIHRoZSBhY3R1YWwgQ0xJIHN1cmZhY2UuIFNvcnRlZCBmb3Igc3RhYmxlIG91dHB1dC5cbiAgICAgIGNvbnN0IGNvbW1hbmRzID0gcHJvZ3JhbS5jb21tYW5kcy5tYXAoYyA9PiBjLm5hbWUoKSkuc29ydCgpLmpvaW4oJyAnKTtcbiAgICAgIHN3aXRjaCAoc2hlbGwpIHtcbiAgICAgICAgY2FzZSAnYmFzaCc6XG4gICAgICAgICAgY29uc29sZS5sb2coYCMgcGlwZWxpbmUtbWFuYWdlciBiYXNoIGNvbXBsZXRpb25zXG5fcGlwZWxpbmVfbWFuYWdlcl9jb21wbGV0aW9ucygpIHtcbiAgbG9jYWwgY3VyPVwiXFwke0NPTVBfV09SRFNbQ09NUF9DV09SRF19XCJcbiAgbG9jYWwgY29tbWFuZHM9XCIke2NvbW1hbmRzfVwiXG4gIENPTVBSRVBMWT0oJChjb21wZ2VuIC1XIFwiXFwke2NvbW1hbmRzfVwiIC0tIFwiXFwke2N1cn1cIikpXG59XG5jb21wbGV0ZSAtRiBfcGlwZWxpbmVfbWFuYWdlcl9jb21wbGV0aW9ucyBwaXBlbGluZS1tYW5hZ2VyYCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3pzaCc6XG4gICAgICAgICAgY29uc29sZS5sb2coYCMgcGlwZWxpbmUtbWFuYWdlciB6c2ggY29tcGxldGlvbnNcbl9waXBlbGluZV9tYW5hZ2VyKCkge1xuICBsb2NhbCBjb21tYW5kcz0oJHtjb21tYW5kc30pXG4gIF9kZXNjcmliZSAnY29tbWFuZCcgY29tbWFuZHNcbn1cbmNvbXBkZWYgX3BpcGVsaW5lX21hbmFnZXIgcGlwZWxpbmUtbWFuYWdlcmApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdmaXNoJzpcbiAgICAgICAgICBjb25zb2xlLmxvZyhgIyBwaXBlbGluZS1tYW5hZ2VyIGZpc2ggY29tcGxldGlvbnNcbmNvbXBsZXRlIC1jIHBpcGVsaW5lLW1hbmFnZXIgLW4gJ19fZmlzaF91c2Vfc3ViY29tbWFuZCcgLWEgJyR7Y29tbWFuZHN9J2ApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFVua25vd24gc2hlbGw6ICR7c2hlbGx9LiBVc2UgYmFzaCwgenNoLCBvciBmaXNoLmApO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICBwcmludERlYnVnKCdBbGwgY29tbWFuZHMgcmVnaXN0ZXJlZCBzdWNjZXNzZnVsbHknKTtcbn1cblxuLyoqXG4gKiBIYW5kbGUgcHJvZ3JhbSBlcnJvcnNcbiAqL1xuZnVuY3Rpb24gc2V0dXBFcnJvckhhbmRsZXJzKCk6IHZvaWQge1xuICAvLyBIYW5kbGUgdW5jYXVnaHQgZXhjZXB0aW9uc1xuICBwcm9jZXNzLm9uKCd1bmNhdWdodEV4Y2VwdGlvbicsIChlcnJvcjogRXJyb3IpID0+IHtcbiAgICBjb25zb2xlLmVycm9yKCcnKTsgLy8gRW1wdHkgbGluZVxuICAgIHByaW50RXJyb3IoJ1VuY2F1Z2h0IGV4Y2VwdGlvbicsIHtcbiAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlLFxuICAgICAgbmFtZTogZXJyb3IubmFtZSxcbiAgICB9KTtcblxuICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5HRU5FUkFMLCB7XG4gICAgICBkZWJ1ZzogaXNEZWJ1Z01vZGUocHJvZ3JhbS5vcHRzKCkpLFxuICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgdHlwZTogJ3VuY2F1Z2h0RXhjZXB0aW9uJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIEhhbmRsZSB1bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb25zXG4gIHByb2Nlc3Mub24oJ3VuaGFuZGxlZFJlamVjdGlvbicsIChyZWFzb246IHVua25vd24pID0+IHtcbiAgICBjb25zb2xlLmVycm9yKCcnKTsgLy8gRW1wdHkgbGluZVxuICAgIHByaW50RXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHtcbiAgICAgIHJlYXNvbjogcmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZWFzb24ubWVzc2FnZSA6IFN0cmluZyhyZWFzb24pLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZXJyb3IgPSByZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHJlYXNvbiA6IG5ldyBFcnJvcihTdHJpbmcocmVhc29uKSk7XG5cbiAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuR0VORVJBTCwge1xuICAgICAgZGVidWc6IGlzRGVidWdNb2RlKHByb2dyYW0ub3B0cygpKSxcbiAgICAgIGV4aXQ6IHRydWUsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIHR5cGU6ICd1bmhhbmRsZWRSZWplY3Rpb24nLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gSGFuZGxlIFNJR0lOVCAoQ3RybCtDKVxuICBwcm9jZXNzLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coJycpOyAvLyBFbXB0eSBsaW5lXG4gICAgcHJpbnRXYXJuaW5nKCdQcm9jZXNzIGludGVycnVwdGVkIGJ5IHVzZXIgKFNJR0lOVCknKTtcbiAgICBjb25zb2xlLmxvZygnJyk7IC8vIEVtcHR5IGxpbmVcbiAgICBwcm9jZXNzLmV4aXQoMTMwKTsgLy8gU3RhbmRhcmQgZXhpdCBjb2RlIGZvciBTSUdJTlRcbiAgfSk7XG5cbiAgLy8gSGFuZGxlIFNJR1RFUk1cbiAgcHJvY2Vzcy5vbignU0lHVEVSTScsICgpID0+IHtcbiAgICBjb25zb2xlLmxvZygnJyk7IC8vIEVtcHR5IGxpbmVcbiAgICBwcmludFdhcm5pbmcoJ1Byb2Nlc3MgdGVybWluYXRlZCAoU0lHVEVSTSknKTtcbiAgICBjb25zb2xlLmxvZygnJyk7IC8vIEVtcHR5IGxpbmVcbiAgICBwcm9jZXNzLmV4aXQoMTQzKTsgLy8gU3RhbmRhcmQgZXhpdCBjb2RlIGZvciBTSUdURVJNXG4gIH0pO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemUgQ0xJIHdpdGggb3B0aW9uc1xuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gQ0xJIGluaXRpYWxpemF0aW9uIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVDbGkob3B0aW9uczogQ2xpT3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gIGNvbnN0IHtcbiAgICBzaG93QmFubmVyID0gdHJ1ZSxcbiAgICBtaW5pbWFsQmFubmVyID0gZmFsc2UsXG4gICAgZGVidWcgPSBmYWxzZSxcbiAgICB2ZXJib3NlID0gZmFsc2UsXG4gICAgcXVpZXQgPSBmYWxzZSxcbiAgICBub0NvbG9yID0gZmFsc2UsXG4gIH0gPSBvcHRpb25zO1xuXG4gIC8vIEhhbmRsZSBjb2xvciBvdXRwdXRcbiAgaWYgKG5vQ29sb3IpIHtcbiAgICBwcm9jZXNzLmVudi5OT19DT0xPUiA9ICcxJztcbiAgfVxuXG4gIC8vIERpc3BsYXkgYmFubmVyXG4gIGlmIChzaG93QmFubmVyICYmICFxdWlldCkge1xuICAgIGlmIChtaW5pbWFsQmFubmVyKSB7XG4gICAgICBtaW5pQmFubmVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhbm5lcih7XG4gICAgICAgIG1pbmltYWw6IGZhbHNlLFxuICAgICAgICBzaG93RGVzY3JpcHRpb246IHRydWUsXG4gICAgICAgIHNob3dUaW1lc3RhbXA6IGRlYnVnIHx8IHZlcmJvc2UsXG4gICAgICAgIHNob3dFeGVjdXRpb25JZDogZGVidWcsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBEaXNwbGF5IHN0YXJ0dXAgaW5mb1xuICBkaXNwbGF5U3RhcnR1cEluZm8oeyBkZWJ1ZywgdmVyYm9zZSwgcXVpZXQgfSk7XG5cbiAgLy8gQ2hlY2sgZW52aXJvbm1lbnRcbiAgaWYgKCFxdWlldCkge1xuICAgIGNoZWNrRW52aXJvbm1lbnQoKTtcbiAgfVxuXG4gIC8vIFNldHVwIGVycm9yIGhhbmRsZXJzXG4gIHNldHVwRXJyb3JIYW5kbGVycygpO1xuXG4gIC8vIFJlZ2lzdGVyIGNvbW1hbmRzXG4gIHRyeSB7XG4gICAgcmVnaXN0ZXJDb21tYW5kcygpO1xuICAgIHByaW50RGVidWcoJ0NMSSBpbml0aWFsaXphdGlvbiBjb21wbGV0ZScpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHByaW50RXJyb3IoJ0NMSSBpbml0aWFsaXphdGlvbiBmYWlsZWQnLCB7XG4gICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgIH0pO1xuXG4gICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkNPTkZJR1VSQVRJT04sIHtcbiAgICAgIGRlYnVnOiBkZWJ1ZyB8fCBpc0RlYnVnTW9kZSgpLFxuICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgc3RhZ2U6ICdpbml0aWFsaXphdGlvbicsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogUGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50c1xuICovXG5mdW5jdGlvbiBwYXJzZUFyZ3VtZW50cygpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBwcm9ncmFtLnBhcnNlKHByb2Nlc3MuYXJndik7XG5cbiAgICAvLyBTaG93IGhlbHAgaWYgbm8gY29tbWFuZCBwcm92aWRlZFxuICAgIGNvbnN0IGFyZ3MgPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMik7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICBwcmludEluZm8oJ05vIGNvbW1hbmQgc3BlY2lmaWVkIC0gZGlzcGxheWluZyBoZWxwJyk7XG4gICAgICBjb25zb2xlLmxvZygnJyk7IC8vIEVtcHR5IGxpbmVcbiAgICAgIHByb2dyYW0ub3V0cHV0SGVscCgpO1xuICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGNvbW1hbmQgZXhpc3RzXG4gICAgY29uc3QgY29tbWFuZCA9IGFyZ3NbMF07XG4gICAgaWYgKGNvbW1hbmQgJiYgIWNvbW1hbmQuc3RhcnRzV2l0aCgnLScpKSB7XG4gICAgICBjb25zdCBjb21tYW5kRXhpc3RzID0gcHJvZ3JhbS5jb21tYW5kcy5zb21lKGNtZCA9PiBjbWQubmFtZSgpID09PSBjb21tYW5kKTtcblxuICAgICAgaWYgKCFjb21tYW5kRXhpc3RzKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTsgLy8gRW1wdHkgbGluZVxuICAgICAgICBwcmludEVycm9yKGBVbmtub3duIGNvbW1hbmQ6ICR7Y29tbWFuZH1gKTtcbiAgICAgICAgY29uc29sZS5sb2coJycpOyAvLyBFbXB0eSBsaW5lXG4gICAgICAgIHByaW50SW5mbygnQXZhaWxhYmxlIGNvbW1hbmRzOicpO1xuICAgICAgICBwcm9ncmFtLmNvbW1hbmRzLmZvckVhY2goY21kID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICDigKIgJHtjbWQubmFtZSgpfSAtICR7Y21kLmRlc2NyaXB0aW9uKCl9YCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zb2xlLmxvZygnJyk7IC8vIEVtcHR5IGxpbmVcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByaW50RGVidWcoJ0NvbW1hbmQgbGluZSBhcmd1bWVudHMgcGFyc2VkIHN1Y2Nlc3NmdWxseScpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5HRU5FUkFMLCB7XG4gICAgICBkZWJ1ZzogaXNEZWJ1Z01vZGUocHJvZ3JhbS5vcHRzKCkpLFxuICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgc3RhZ2U6ICdhcmd1bWVudC1wYXJzaW5nJyxcbiAgICAgICAgYXJndjogcHJvY2Vzcy5hcmd2LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIE1haW4gQ0xJIGVudHJ5IHBvaW50XG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBDTEkgaW5pdGlhbGl6YXRpb24gb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBTdGFuZGFyZCBpbml0aWFsaXphdGlvblxuICogbWFpbigpO1xuICpcbiAqIC8vIE1pbmltYWwgbW9kZVxuICogbWFpbih7IG1pbmltYWxCYW5uZXI6IHRydWUsIHF1aWV0OiB0cnVlIH0pO1xuICpcbiAqIC8vIERlYnVnIG1vZGVcbiAqIG1haW4oeyBkZWJ1ZzogdHJ1ZSwgdmVyYm9zZTogdHJ1ZSB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFpbihvcHRpb25zOiBDbGlPcHRpb25zID0ge30pOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICAvLyBJbml0aWFsaXplIENMSVxuICAgIGluaXRpYWxpemVDbGkob3B0aW9ucyk7XG5cbiAgICAvLyBQYXJzZSBhcmd1bWVudHMgYW5kIGV4ZWN1dGUgY29tbWFuZFxuICAgIHBhcnNlQXJndW1lbnRzKCk7XG5cbiAgICAvLyBJZiB3ZSByZWFjaCBoZXJlLCBjb21tYW5kIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcbiAgICBwcmludERlYnVnKCdDTEkgZXhlY3V0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHknKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBGaW5hbCBjYXRjaC1hbGwgZXJyb3IgaGFuZGxlclxuICAgIGNvbnNvbGUuZXJyb3IoJycpOyAvLyBFbXB0eSBsaW5lXG4gICAgcHJpbnRFcnJvcignRmF0YWwgQ0xJIGVycm9yJywge1xuICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICB9KTtcblxuICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5HRU5FUkFMLCB7XG4gICAgICBkZWJ1ZzogaXNEZWJ1Z01vZGUob3B0aW9ucyksXG4gICAgICBleGl0OiB0cnVlLFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBzdGFnZTogJ21haW4nLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFJ1biBDTEkgaWYgZXhlY3V0ZWQgZGlyZWN0bHlcbiAqL1xuaWYgKHJlcXVpcmUubWFpbiA9PT0gbW9kdWxlKSB7XG4gIC8vIFBhcnNlIENMSSBvcHRpb25zIGZyb20gZW52aXJvbm1lbnQgb3IgY29tbWFuZCBsaW5lXG4gIGNvbnN0IG9wdGlvbnM6IENsaU9wdGlvbnMgPSB7XG4gICAgZGVidWc6IHByb2Nlc3MuZW52LkRFQlVHID09PSAndHJ1ZScsXG4gICAgcXVpZXQ6IHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS1xdWlldCcpLFxuICAgIHZlcmJvc2U6IHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS12ZXJib3NlJyksXG4gICAgbm9Db2xvcjogcHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLW5vLWNvbG9yJykgfHwgcHJvY2Vzcy5lbnYuTk9fQ09MT1IgPT09ICcxJyxcbiAgfTtcblxuICBtYWluKG9wdGlvbnMpO1xufSJdfQ==
387
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLCtDQUErQztBQUMvQyxzQ0FBc0M7O0FBc1R0QyxzQ0F5REM7QUFrRUQsb0JBMEJDO0FBemNELHlDQUFvQztBQUNwQywwREFBc0Q7QUFDdEQsMERBQXNEO0FBQ3RELG9EQUFpRDtBQUNqRCxnRUFBNEQ7QUFDNUQsOENBQTJDO0FBQzNDLDBEQUFzRDtBQUN0RCxzREFBa0Q7QUFDbEQsOERBQTBEO0FBQzFELDBEQUFzRDtBQUN0RCw0Q0FBeUM7QUFDekMsc0RBQWtEO0FBQ2xELGtEQUErQztBQUMvQywwREFBc0Q7QUFDdEQsOENBQTJDO0FBQzNDLHdEQUFvRDtBQUNwRCw0Q0FBeUM7QUFDekMsNERBQXdEO0FBQ3hELHNFQUF5RTtBQUN6RSxnREFBNkM7QUFDN0MsMERBT2dDO0FBQ2hDLDJDQUFvRDtBQUNwRCx5REFBaUU7QUFDakUsdURBQXFHO0FBMkNyRzs7R0FFRztBQUNILFNBQVMsZ0JBQWdCO0lBQ3ZCLE1BQU0sUUFBUSxHQUFhLEVBQUUsQ0FBQztJQUU5QiwyQ0FBMkM7SUFDM0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1FBQzFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZ0RBQWdELENBQUMsQ0FBQztRQUNoRSxRQUFRLENBQUMsSUFBSSxDQUFDLDZDQUE2QyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELHFCQUFxQjtJQUNyQixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQ3BDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDN0UsSUFBSSxZQUFZLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDdEIsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLFdBQVcscUNBQXFDLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsbUJBQW1CO0lBQ25CLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN4QixJQUFBLDJCQUFZLEVBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNyQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3pCLElBQUEsMkJBQVksRUFBQyxPQUFPLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEIsQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsa0JBQWtCLENBQUMsT0FBbUI7SUFDN0MsSUFBSSxPQUFPLENBQUMsS0FBSztRQUFFLE9BQU87SUFFMUIsTUFBTSxXQUFXLEdBQUcsSUFBQSxtQ0FBbUIsR0FBRSxDQUFDO0lBRTFDLElBQUksT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckMsSUFBQSx5QkFBVSxFQUFDLG1CQUFtQixFQUFFO1lBQzlCLElBQUksRUFBRSx3QkFBUTtZQUNkLE9BQU8sRUFBRSwyQkFBVztZQUNwQixXQUFXO1lBQ1gsSUFBSSxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3JCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtZQUMxQixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7WUFDbEIsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDbEIsR0FBRyxFQUFFO2dCQUNILEtBQUssRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUs7Z0JBQ3hCLEtBQUssRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQSxDQUFDLENBQUMsU0FBUztnQkFDOUQsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLFNBQVM7YUFDMUQ7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO1NBQU0sQ0FBQztRQUNOLElBQUEseUJBQVUsRUFBQyxjQUFjLEVBQUU7WUFDekIsT0FBTyxFQUFFLDJCQUFXO1lBQ3BCLFdBQVc7U0FDWixDQUFDLENBQUM7SUFDTCxDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxnQkFBZ0I7SUFDdkIsSUFBQSx5QkFBVSxFQUFDLHNCQUFzQixDQUFDLENBQUM7SUFFbkMsb0JBQW9CO0lBQ3BCLG1CQUFPO1NBQ0YsSUFBSSxDQUFDLHdCQUFRLENBQUM7U0FDZCxXQUFXLENBQUMsK0JBQWUsQ0FBQztTQUM1QixPQUFPLENBQUMsMkJBQVcsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLENBQUM7U0FDekQsTUFBTSxDQUFDLFNBQVMsRUFBRSx1Q0FBdUMsRUFBRSxLQUFLLENBQUM7U0FDakUsTUFBTSxDQUFDLFdBQVcsRUFBRSwyQkFBMkIsRUFBRSxLQUFLLENBQUM7U0FDdkQsTUFBTSxDQUFDLFNBQVMsRUFBRSw4QkFBOEIsRUFBRSxLQUFLLENBQUM7U0FDeEQsTUFBTSxDQUFDLFlBQVksRUFBRSx3QkFBd0IsRUFBRSxLQUFLLENBQUM7U0FDckQsV0FBVyxDQUFDLE9BQU8sRUFBRTt5QkFDSCx3QkFBUSxDQUFDLGNBQWM7SUFDNUMsd0JBQVEsQ0FBQyxpQkFBaUI7SUFDMUIsd0JBQVEsQ0FBQyxlQUFlO0lBQ3hCLHdCQUFRLENBQUMsdUJBQXVCO0lBQ2hDLHdCQUFRLENBQUMsS0FBSzs7Y0FFSix3QkFBUTtNQUNoQix3QkFBUTtNQUNSLHdCQUFRO01BQ1Isd0JBQVE7TUFDUix3QkFBUTtNQUNSLHdCQUFROztDQUViLENBQUMsQ0FBQztJQUVELHFDQUFxQztJQUNyQyxJQUFBLGlCQUFPLEVBQUMsbUJBQU8sQ0FBQyxDQUFDO0lBRWpCLDBCQUEwQjtJQUMxQixJQUFBLHlCQUFVLEVBQUMscUNBQXFDLENBQUMsQ0FBQztJQUNsRCxJQUFBLGFBQUssRUFBQyxtQkFBTyxDQUFDLENBQUMsQ0FBQyw0REFBNEQ7SUFFNUUsaUJBQWlCO0lBQ2pCLElBQUEseUJBQVUsRUFBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQ3pDLElBQUEsc0JBQVMsRUFBQyxtQkFBTyxDQUFDLENBQUMsQ0FBQyxzQkFBc0I7SUFDMUMsSUFBQSwwQkFBVyxFQUFDLG1CQUFPLENBQUMsQ0FBQyxDQUFDLGdDQUFnQztJQUN0RCxJQUFBLDBCQUFXLEVBQUMsbUJBQU8sQ0FBQyxDQUFDLENBQUMsd0JBQXdCO0lBQzlDLElBQUEsOEJBQWEsRUFBQyxtQkFBTyxDQUFDLENBQUMsQ0FBQyxrQ0FBa0M7SUFFMUQseUJBQXlCO0lBQ3pCLElBQUEseUJBQVUsRUFBQyxvQ0FBb0MsQ0FBQyxDQUFDO0lBQ2pELElBQUEsZ0NBQWMsRUFBQyxtQkFBTyxDQUFDLENBQUMsQ0FBQyxnQ0FBZ0M7SUFDekQsSUFBQSw0QkFBWSxFQUFDLG1CQUFPLENBQUMsQ0FBQyxDQUFDLDJCQUEyQjtJQUVsRCxpQkFBaUI7SUFDakIsSUFBQSx5QkFBVSxFQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDekMsSUFBQSxlQUFNLEVBQUMsbUJBQU8sQ0FBQyxDQUFDLENBQUMsMkNBQTJDO0lBRTVELHFCQUFxQjtJQUNyQixJQUFBLHlCQUFVLEVBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUM3QyxJQUFBLHNCQUFTLEVBQUMsbUJBQU8sQ0FBQyxDQUFDLENBQUMsd0VBQXdFO0lBRTVGLHNCQUFzQjtJQUN0QixJQUFBLHlCQUFVLEVBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUM5QyxJQUFBLHdCQUFVLEVBQUMsbUJBQU8sQ0FBQyxDQUFDLENBQUMsa0RBQWtEO0lBQ3ZFLElBQUEsMEJBQVcsRUFBQyxtQkFBTyxDQUFDLENBQUMsQ0FBQyxvREFBb0Q7SUFDMUUsSUFBQSxxQkFBUyxFQUFDLG1CQUFPLENBQUMsQ0FBQyxDQUFDLDhCQUE4QjtJQUNsRCxJQUFBLGVBQU0sRUFBQyxtQkFBTyxDQUFDLENBQUMsQ0FBQywyREFBMkQ7SUFDNUUsSUFBQSxtQkFBUSxFQUFDLG1CQUFPLENBQUMsQ0FBQyxDQUFDLHdGQUF3RjtJQUUzRyw4REFBOEQ7SUFDOUQsSUFBQSx5QkFBVSxFQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDekMsSUFBQSwwQkFBVyxFQUFDLG1CQUFPLENBQUMsQ0FBQyxDQUFDLG9EQUFvRDtJQUMxRSxJQUFBLDBCQUFXLEVBQUMsbUJBQU8sQ0FBQyxDQUFDLENBQUMscURBQXFEO0lBQzNFLElBQUEsYUFBSyxFQUFDLG1CQUFPLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjtJQUNwQyxJQUFBLDZDQUF3QixFQUFDLG1CQUFPLENBQUMsQ0FBQyxDQUFDLHNEQUFzRDtJQUV6RixvQkFBb0I7SUFDcEIsSUFBQSx5QkFBVSxFQUFDLGlDQUFpQyxDQUFDLENBQUM7SUFDOUMsbUJBQU87U0FDRixPQUFPLENBQUMsYUFBYSxDQUFDO1NBQ3RCLFdBQVcsQ0FBQyw4Q0FBOEMsQ0FBQztTQUMzRCxRQUFRLENBQUMsU0FBUyxFQUFFLGdDQUFnQyxDQUFDO1NBQ3JELE1BQU0sQ0FBQyxDQUFDLEtBQWEsRUFBRSxFQUFFO1FBQzFCLDJFQUEyRTtRQUMzRSwrREFBK0Q7UUFDL0QsTUFBTSxRQUFRLEdBQUcsbUJBQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RFLFFBQVEsS0FBSyxFQUFFLENBQUM7WUFDZCxLQUFLLE1BQU07Z0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQzs7O29CQUdGLFFBQVE7OzsyREFHK0IsQ0FBQyxDQUFDO2dCQUNuRCxNQUFNO1lBQ1IsS0FBSyxLQUFLO2dCQUNSLE9BQU8sQ0FBQyxHQUFHLENBQUM7O29CQUVGLFFBQVE7OzsyQ0FHZSxDQUFDLENBQUM7Z0JBQ25DLE1BQU07WUFDUixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQzs4REFDd0MsUUFBUSxHQUFHLENBQUMsQ0FBQztnQkFDakUsTUFBTTtZQUNSO2dCQUNFLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEtBQUssMkJBQTJCLENBQUMsQ0FBQztnQkFDbEUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFTCxJQUFBLHlCQUFVLEVBQUMsc0NBQXNDLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGtCQUFrQjtJQUN6Qiw2QkFBNkI7SUFDN0IsT0FBTyxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEtBQVksRUFBRSxFQUFFO1FBQy9DLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhO1FBQ2hDLElBQUEseUJBQVUsRUFBQyxvQkFBb0IsRUFBRTtZQUMvQixLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDcEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1NBQ2pCLENBQUMsQ0FBQztRQUVILElBQUEsMkJBQVcsRUFBQyxLQUFLLEVBQUUsMkJBQVcsQ0FBQyxPQUFPLEVBQUU7WUFDdEMsS0FBSyxFQUFFLElBQUEsMkJBQVcsRUFBQyxtQkFBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xDLElBQUksRUFBRSxJQUFJO1lBQ1YsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxtQkFBbUI7YUFDMUI7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILHNDQUFzQztJQUN0QyxPQUFPLENBQUMsRUFBRSxDQUFDLG9CQUFvQixFQUFFLENBQUMsTUFBZSxFQUFFLEVBQUU7UUFDbkQsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWE7UUFDaEMsSUFBQSx5QkFBVSxFQUFDLDZCQUE2QixFQUFFO1lBQ3hDLE1BQU0sRUFBRSxNQUFNLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFBLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1NBQ2pFLENBQUMsQ0FBQztRQUVILE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFFMUUsSUFBQSwyQkFBVyxFQUFDLEtBQUssRUFBRSwyQkFBVyxDQUFDLE9BQU8sRUFBRTtZQUN0QyxLQUFLLEVBQUUsSUFBQSwyQkFBVyxFQUFDLG1CQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEMsSUFBSSxFQUFFLElBQUk7WUFDVixPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLG9CQUFvQjthQUMzQjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgseUJBQXlCO0lBQ3pCLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtRQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYTtRQUM5QixJQUFBLDJCQUFZLEVBQUMsc0NBQXNDLENBQUMsQ0FBQztRQUNyRCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYTtRQUM5QixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsZ0NBQWdDO0lBQ3JELENBQUMsQ0FBQyxDQUFDO0lBRUgsaUJBQWlCO0lBQ2pCLE9BQU8sQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtRQUN6QixPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYTtRQUM5QixJQUFBLDJCQUFZLEVBQUMsOEJBQThCLENBQUMsQ0FBQztRQUM3QyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYTtRQUM5QixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsaUNBQWlDO0lBQ3RELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixhQUFhLENBQUMsVUFBc0IsRUFBRTtJQUNwRCxNQUFNLEVBQ0osVUFBVSxHQUFHLElBQUksRUFDakIsYUFBYSxHQUFHLEtBQUssRUFDckIsS0FBSyxHQUFHLEtBQUssRUFDYixPQUFPLEdBQUcsS0FBSyxFQUNmLEtBQUssR0FBRyxLQUFLLEVBQ2IsT0FBTyxHQUFHLEtBQUssR0FDaEIsR0FBRyxPQUFPLENBQUM7SUFFWixzQkFBc0I7SUFDdEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztJQUM3QixDQUFDO0lBRUQsaUJBQWlCO0lBQ2pCLElBQUksVUFBVSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekIsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixJQUFBLG1CQUFVLEdBQUUsQ0FBQztRQUNmLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBQSxlQUFNLEVBQUM7Z0JBQ0wsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsZUFBZSxFQUFFLElBQUk7Z0JBQ3JCLGFBQWEsRUFBRSxLQUFLLElBQUksT0FBTztnQkFDL0IsZUFBZSxFQUFFLEtBQUs7YUFDdkIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCx1QkFBdUI7SUFDdkIsa0JBQWtCLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFOUMsb0JBQW9CO0lBQ3BCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLGdCQUFnQixFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELHVCQUF1QjtJQUN2QixrQkFBa0IsRUFBRSxDQUFDO0lBRXJCLG9CQUFvQjtJQUNwQixJQUFJLENBQUM7UUFDSCxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25CLElBQUEseUJBQVUsRUFBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBQSx5QkFBVSxFQUFDLDJCQUEyQixFQUFFO1lBQ3RDLEtBQUssRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFBLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQzdELENBQUMsQ0FBQztRQUVILElBQUEsMkJBQVcsRUFBQyxLQUFLLEVBQUUsMkJBQVcsQ0FBQyxhQUFhLEVBQUU7WUFDNUMsS0FBSyxFQUFFLEtBQUssSUFBSSxJQUFBLDJCQUFXLEdBQUU7WUFDN0IsSUFBSSxFQUFFLElBQUk7WUFDVixPQUFPLEVBQUU7Z0JBQ1AsS0FBSyxFQUFFLGdCQUFnQjthQUN4QjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGNBQWM7SUFDckIsSUFBSSxDQUFDO1FBQ0gsbUJBQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTVCLG1DQUFtQztRQUNuQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEIsSUFBQSx3QkFBUyxFQUFDLHdDQUF3QyxDQUFDLENBQUM7WUFDcEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWE7WUFDOUIsbUJBQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7UUFFRCwwQkFBMEI7UUFDMUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sYUFBYSxHQUFHLG1CQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQztZQUUzRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhO2dCQUM5QixJQUFBLHlCQUFVLEVBQUMsb0JBQW9CLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQzFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhO2dCQUM5QixJQUFBLHdCQUFTLEVBQUMscUJBQXFCLENBQUMsQ0FBQztnQkFDakMsbUJBQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUM3QixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLEdBQUcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3pELENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhO2dCQUM5QixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBQSx5QkFBVSxFQUFDLDRDQUE0QyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFBLDJCQUFXLEVBQUMsS0FBSyxFQUFFLDJCQUFXLENBQUMsT0FBTyxFQUFFO1lBQ3RDLEtBQUssRUFBRSxJQUFBLDJCQUFXLEVBQUMsbUJBQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsQyxJQUFJLEVBQUUsSUFBSTtZQUNWLE9BQU8sRUFBRTtnQkFDUCxLQUFLLEVBQUUsa0JBQWtCO2dCQUN6QixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7YUFDbkI7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsU0FBZ0IsSUFBSSxDQUFDLFVBQXNCLEVBQUU7SUFDM0MsSUFBSSxDQUFDO1FBQ0gsaUJBQWlCO1FBQ2pCLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV2QixzQ0FBc0M7UUFDdEMsY0FBYyxFQUFFLENBQUM7UUFFakIsbURBQW1EO1FBQ25ELElBQUEseUJBQVUsRUFBQyxzQ0FBc0MsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsZ0NBQWdDO1FBQ2hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhO1FBQ2hDLElBQUEseUJBQVUsRUFBQyxpQkFBaUIsRUFBRTtZQUM1QixLQUFLLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztTQUM3RCxDQUFDLENBQUM7UUFFSCxJQUFBLDJCQUFXLEVBQUMsS0FBSyxFQUFFLDJCQUFXLENBQUMsT0FBTyxFQUFFO1lBQ3RDLEtBQUssRUFBRSxJQUFBLDJCQUFXLEVBQUMsT0FBTyxDQUFDO1lBQzNCLElBQUksRUFBRSxJQUFJO1lBQ1YsT0FBTyxFQUFFO2dCQUNQLEtBQUssRUFBRSxNQUFNO2dCQUNiLE9BQU87YUFDUjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7SUFDNUIscURBQXFEO0lBQ3JELE1BQU0sT0FBTyxHQUFlO1FBQzFCLEtBQUssRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxNQUFNO1FBQ25DLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDdkMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztRQUMzQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssR0FBRztLQUM3RSxDQUFDO0lBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG4vLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgcHJvZ3JhbSB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBhdWRpdFN0YWNrcyB9IGZyb20gJy4vY29tbWFuZHMvYXVkaXQtc3RhY2tzJztcbmltcG9ydCB7IGF1ZGl0VG9rZW5zIH0gZnJvbSAnLi9jb21tYW5kcy9hdWRpdC10b2tlbnMnO1xuaW1wb3J0IHsgYm9vdHN0cmFwIH0gZnJvbSAnLi9jb21tYW5kcy9ib290c3RyYXAnO1xuaW1wb3J0IHsgY3JlYXRlUGlwZWxpbmUgfSBmcm9tICcuL2NvbW1hbmRzL2NyZWF0ZS1waXBlbGluZSc7XG5pbXBvcnQgeyBkZXBsb3kgfSBmcm9tICcuL2NvbW1hbmRzL2RlcGxveSc7XG5pbXBvcnQgeyBnZXRQaXBlbGluZSB9IGZyb20gJy4vY29tbWFuZHMvZ2V0LXBpcGVsaW5lJztcbmltcG9ydCB7IGdldFBsdWdpbiB9IGZyb20gJy4vY29tbWFuZHMvZ2V0LXBsdWdpbic7XG5pbXBvcnQgeyBsaXN0UGlwZWxpbmVzIH0gZnJvbSAnLi9jb21tYW5kcy9saXN0LXBpcGVsaW5lcyc7XG5pbXBvcnQgeyBsaXN0UGx1Z2lucyB9IGZyb20gJy4vY29tbWFuZHMvbGlzdC1wbHVnaW5zJztcbmltcG9ydCB7IGxvZ2luIH0gZnJvbSAnLi9jb21tYW5kcy9sb2dpbic7XG5pbXBvcnQgeyBvcmdFeHBvcnQgfSBmcm9tICcuL2NvbW1hbmRzL29yZy1leHBvcnQnO1xuaW1wb3J0IHsgcmVnaXN0ZXIgfSBmcm9tICcuL2NvbW1hbmRzL3JlZ2lzdGVyJztcbmltcG9ydCB7IHNldHVwRXZlbnRzIH0gZnJvbSAnLi9jb21tYW5kcy9zZXR1cC1ldmVudHMnO1xuaW1wb3J0IHsgc3RhdHVzIH0gZnJvbSAnLi9jb21tYW5kcy9zdGF0dXMnO1xuaW1wb3J0IHsgc3RvcmVUb2tlbiB9IGZyb20gJy4vY29tbWFuZHMvc3RvcmUtdG9rZW4nO1xuaW1wb3J0IHsgc3ludGggfSBmcm9tICcuL2NvbW1hbmRzL3N5bnRoJztcbmltcG9ydCB7IHVwbG9hZFBsdWdpbiB9IGZyb20gJy4vY29tbWFuZHMvdXBsb2FkLXBsdWdpbic7XG5pbXBvcnQgeyB2YWxpZGF0ZVRlbXBsYXRlc0NvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL3ZhbGlkYXRlLXRlbXBsYXRlcyc7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi9jb21tYW5kcy92ZXJzaW9uJztcbmltcG9ydCB7XG4gIEFQUF9OQU1FLFxuICBBUFBfREVTQ1JJUFRJT04sXG4gIEFQUF9WRVJTSU9OLFxuICBFTlZfVkFSUyxcbiAgaXNEZWJ1Z01vZGUsXG4gIGdlbmVyYXRlRXhlY3V0aW9uSWQsXG59IGZyb20gJy4vY29uZmlnL2NsaS5jb25zdGFudHMnO1xuaW1wb3J0IHsgYmFubmVyLCBtaW5pQmFubmVyIH0gZnJvbSAnLi91dGlscy9iYW5uZXInO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi91dGlscy9lcnJvci1oYW5kbGVyJztcbmltcG9ydCB7IHByaW50SW5mbywgcHJpbnRFcnJvciwgcHJpbnRXYXJuaW5nLCBwcmludERlYnVnLCBwcmludFNlY3Rpb24gfSBmcm9tICcuL3V0aWxzL291dHB1dC11dGlscyc7XG5cbi8qKlxuICogQ0xJIGluaXRpYWxpemF0aW9uIG9wdGlvbnNcbiAqL1xuaW50ZXJmYWNlIENsaU9wdGlvbnMge1xuICAvKipcbiAgICogU2hvdyBiYW5uZXIgb24gc3RhcnR1cFxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBzaG93QmFubmVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTWluaW1hbCBiYW5uZXIgKG5vIEFTQ0lJIGFydClcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG1pbmltYWxCYW5uZXI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEZWJ1ZyBtb2RlXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZWJ1Zz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFZlcmJvc2Ugb3V0cHV0XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB2ZXJib3NlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUXVpZXQgbW9kZSAobWluaW1hbCBvdXRwdXQpXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBxdWlldD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE5vIGNvbG9yIG91dHB1dFxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbm9Db2xvcj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ2hlY2sgZW52aXJvbm1lbnQgYW5kIGRpc3BsYXkgd2FybmluZ3NcbiAqL1xuZnVuY3Rpb24gY2hlY2tFbnZpcm9ubWVudCgpOiB2b2lkIHtcbiAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgLy8gQ2hlY2sgZm9yIHJlcXVpcmVkIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICBpZiAoIXByb2Nlc3MuZW52W0VOVl9WQVJTLlBMQVRGT1JNX1RPS0VOXSkge1xuICAgIHdhcm5pbmdzLnB1c2goJ1BMQVRGT1JNX1RPS0VOIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBzZXQnKTtcbiAgICB3YXJuaW5ncy5wdXNoKCdBdXRoZW50aWNhdGlvbiB3aWxsIGZhaWwgZm9yIEFQSSBvcGVyYXRpb25zJyk7XG4gIH1cblxuICAvLyBDaGVjayBOb2RlIHZlcnNpb25cbiAgY29uc3Qgbm9kZVZlcnNpb24gPSBwcm9jZXNzLnZlcnNpb247XG4gIGNvbnN0IG1ham9yVmVyc2lvbiA9IHBhcnNlSW50KG5vZGVWZXJzaW9uLnNsaWNlKDEpLnNwbGl0KCcuJylbMF0gfHwgJzAnLCAxMCk7XG4gIGlmIChtYWpvclZlcnNpb24gPCAxOCkge1xuICAgIHdhcm5pbmdzLnB1c2goYE5vZGUuanMgJHtub2RlVmVyc2lvbn0gZGV0ZWN0ZWQgLSB2ZXJzaW9uIDE4KyByZWNvbW1lbmRlZGApO1xuICB9XG5cbiAgLy8gRGlzcGxheSB3YXJuaW5nc1xuICBpZiAod2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgIHByaW50U2VjdGlvbignRW52aXJvbm1lbnQgV2FybmluZ3MnKTtcbiAgICB3YXJuaW5ncy5mb3JFYWNoKHdhcm5pbmcgPT4ge1xuICAgICAgcHJpbnRXYXJuaW5nKHdhcm5pbmcpO1xuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BsYXkgc3RhcnR1cCBpbmZvcm1hdGlvblxuICovXG5mdW5jdGlvbiBkaXNwbGF5U3RhcnR1cEluZm8ob3B0aW9uczogQ2xpT3B0aW9ucyk6IHZvaWQge1xuICBpZiAob3B0aW9ucy5xdWlldCkgcmV0dXJuO1xuXG4gIGNvbnN0IGV4ZWN1dGlvbklkID0gZ2VuZXJhdGVFeGVjdXRpb25JZCgpO1xuXG4gIGlmIChvcHRpb25zLmRlYnVnIHx8IG9wdGlvbnMudmVyYm9zZSkge1xuICAgIHByaW50RGVidWcoJ0NMSSBDb25maWd1cmF0aW9uJywge1xuICAgICAgbmFtZTogQVBQX05BTUUsXG4gICAgICB2ZXJzaW9uOiBBUFBfVkVSU0lPTixcbiAgICAgIGV4ZWN1dGlvbklkLFxuICAgICAgbm9kZTogcHJvY2Vzcy52ZXJzaW9uLFxuICAgICAgcGxhdGZvcm06IHByb2Nlc3MucGxhdGZvcm0sXG4gICAgICBhcmNoOiBwcm9jZXNzLmFyY2gsXG4gICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgICBlbnY6IHtcbiAgICAgICAgZGVidWc6IHByb2Nlc3MuZW52LkRFQlVHLFxuICAgICAgICB0b2tlbjogcHJvY2Vzcy5lbnZbRU5WX1ZBUlMuUExBVEZPUk1fVE9LRU5dID8gJ3NldCc6ICdub3Qgc2V0JyxcbiAgICAgICAgdXJsOiBwcm9jZXNzLmVudltFTlZfVkFSUy5QTEFURk9STV9CQVNFX1VSTF0gfHwgJ2RlZmF1bHQnLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBwcmludERlYnVnKCdTdGFydGluZyBDTEknLCB7XG4gICAgICB2ZXJzaW9uOiBBUFBfVkVSU0lPTixcbiAgICAgIGV4ZWN1dGlvbklkLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgYWxsIENMSSBjb21tYW5kc1xuICovXG5mdW5jdGlvbiByZWdpc3RlckNvbW1hbmRzKCk6IHZvaWQge1xuICBwcmludERlYnVnKCdSZWdpc3RlcmluZyBjb21tYW5kcycpO1xuXG4gIC8vIENvbmZpZ3VyZSBwcm9ncmFtXG4gIHByb2dyYW1cbiAgICAgIC5uYW1lKEFQUF9OQU1FKVxuICAgICAgLmRlc2NyaXB0aW9uKEFQUF9ERVNDUklQVElPTilcbiAgICAgIC52ZXJzaW9uKEFQUF9WRVJTSU9OLCAnLXYsIC0tdmVyc2lvbicsICdTaG93IENMSSB2ZXJzaW9uJylcbiAgICAgIC5vcHRpb24oJy0tZGVidWcnLCAnRW5hYmxlIGRlYnVnIG91dHB1dCB3aXRoIHN0YWNrIHRyYWNlcycsIGZhbHNlKVxuICAgICAgLm9wdGlvbignLS12ZXJib3NlJywgJ1Nob3cgZGV0YWlsZWQgaW5mb3JtYXRpb24nLCBmYWxzZSlcbiAgICAgIC5vcHRpb24oJy0tcXVpZXQnLCAnTWluaW1hbCBvdXRwdXQgKGVycm9ycyBvbmx5KScsIGZhbHNlKVxuICAgICAgLm9wdGlvbignLS1uby1jb2xvcicsICdEaXNhYmxlIGNvbG9yZWQgb3V0cHV0JywgZmFsc2UpXG4gICAgICAuYWRkSGVscFRleHQoJ2FmdGVyJywgYFxuRW52aXJvbm1lbnQgVmFyaWFibGVzICAke0VOVl9WQVJTLlBMQVRGT1JNX1RPS0VOfSBBdXRoZW50aWNhdGlvbiB0b2tlbiAocmVxdWlyZWQpXG4gICR7RU5WX1ZBUlMuUExBVEZPUk1fQkFTRV9VUkx9IEFQSSBiYXNlIFVSTCAob3B0aW9uYWwpXG4gICR7RU5WX1ZBUlMuQ0xJX0NPTkZJR19QQVRIfSBDb25maWcgZmlsZSBwYXRoIChvcHRpb25hbClcbiAgJHtFTlZfVkFSUy5UTFNfUkVKRUNUX1VOQVVUSE9SSVpFRH0gRGlzYWJsZSBTU0wgdmVyaWZpY2F0aW9uIGlmICcwJ1xuICAke0VOVl9WQVJTLkRFQlVHfSBFbmFibGUgZGVidWcgbW9kZSBpZiAndHJ1ZSdcblxuRXhhbXBsZXMgICQgJHtBUFBfTkFNRX0gdmVyc2lvblxuICAkICR7QVBQX05BTUV9IGxpc3QtcGlwZWxpbmVzIC0tcHJvamVjdCBteS1hcHBcbiAgJCAke0FQUF9OQU1FfSBnZXQtcGlwZWxpbmUgLS1pZCBwaXBlLTEyMyAtLWZvcm1hdCBqc29uXG4gICQgJHtBUFBfTkFNRX0gc3RvcmUtdG9rZW4gLS1kYXlzIDMwIC0tcmVnaW9uIHVzLWVhc3QtMVxuICAkICR7QVBQX05BTUV9IGJvb3RzdHJhcCAtLWFjY291bnQgMTIzNDU2Nzg5MDEyIC0tcmVnaW9uIHVzLWVhc3QtMVxuICAkICR7QVBQX05BTUV9IGRlcGxveSAtLWlkIHBpcGUtMTIzIC0tcHJvZmlsZSBwcm9kdWN0aW9uXG5cbmApO1xuXG4gIC8vIFZlcnNpb24gY29tbWFuZCAoc3BlY2lhbCBoYW5kbGluZylcbiAgdmVyc2lvbihwcm9ncmFtKTtcblxuICAvLyBBdXRoZW50aWNhdGlvbiBjb21tYW5kc1xuICBwcmludERlYnVnKCdSZWdpc3RlcmluZyBhdXRoZW50aWNhdGlvbiBjb21tYW5kcycpO1xuICBsb2dpbihwcm9ncmFtKTsgLy8gTG9naW4gYW5kIG9idGFpbiBQTEFURk9STV9UT0tFTiAoYWxzbyBzdXBwb3J0cyAtLXJlZnJlc2gpXG5cbiAgLy8gUXVlcnkgY29tbWFuZHNcbiAgcHJpbnREZWJ1ZygnUmVnaXN0ZXJpbmcgcXVlcnkgY29tbWFuZHMnKTtcbiAgZ2V0UGx1Z2luKHByb2dyYW0pOyAvLyBTaW5nbGUgcGx1Z2luIGJ5IElEXG4gIGxpc3RQbHVnaW5zKHByb2dyYW0pOyAvLyBNdWx0aXBsZSBwbHVnaW5zIHdpdGggZmlsdGVyc1xuICBnZXRQaXBlbGluZShwcm9ncmFtKTsgLy8gU2luZ2xlIHBpcGVsaW5lIGJ5IElEXG4gIGxpc3RQaXBlbGluZXMocHJvZ3JhbSk7IC8vIE11bHRpcGxlIHBpcGVsaW5lcyB3aXRoIGZpbHRlcnNcblxuICAvLyBDcmVhdGUvVXBsb2FkIGNvbW1hbmRzXG4gIHByaW50RGVidWcoJ1JlZ2lzdGVyaW5nIGNyZWF0ZS91cGxvYWQgY29tbWFuZHMnKTtcbiAgY3JlYXRlUGlwZWxpbmUocHJvZ3JhbSk7IC8vIENyZWF0ZSBwaXBlbGluZSBjb25maWd1cmF0aW9uXG4gIHVwbG9hZFBsdWdpbihwcm9ncmFtKTsgLy8gVXBsb2FkIGFuZCBkZXBsb3kgcGx1Z2luXG5cbiAgLy8gU3RhdHVzIGNvbW1hbmRcbiAgcHJpbnREZWJ1ZygnUmVnaXN0ZXJpbmcgc3RhdHVzIGNvbW1hbmQnKTtcbiAgc3RhdHVzKHByb2dyYW0pOyAvLyBTaG93IGVudmlyb25tZW50IGFuZCBjb25uZWN0aXZpdHkgc3RhdHVzXG5cbiAgLy8gT3JnIGFkbWluIGNvbW1hbmRzXG4gIHByaW50RGVidWcoJ1JlZ2lzdGVyaW5nIG9yZyBhZG1pbiBjb21tYW5kcycpO1xuICBvcmdFeHBvcnQocHJvZ3JhbSk7IC8vIEdEUFIgcG9ydGFiaWxpdHkgZXhwb3J0IMOiwoDClCBzeXNhZG1pbiAoYW55IG9yZykgb3Igb3JnIGFkbWluIChvd24gb3JnKVxuXG4gIC8vIERlcGxveW1lbnQgY29tbWFuZHNcbiAgcHJpbnREZWJ1ZygnUmVnaXN0ZXJpbmcgZGVwbG95bWVudCBjb21tYW5kcycpO1xuICBzdG9yZVRva2VuKHByb2dyYW0pOyAvLyBHZW5lcmF0ZSBKV1QgdG9rZW4gYW5kIHN0b3JlIGluIFNlY3JldHMgTWFuYWdlclxuICBzZXR1cEV2ZW50cyhwcm9ncmFtKTsgLy8gRGVwbG95IEV2ZW50QnJpZGdlIGV2ZW50IGluZ2VzdGlvbiBpbmZyYXN0cnVjdHVyZVxuICBib290c3RyYXAocHJvZ3JhbSk7IC8vIEJvb3RzdHJhcCBDREsgdG9vbGtpdCBzdGFja1xuICBkZXBsb3kocHJvZ3JhbSk7IC8vIERlcGxveSBwaXBlbGluZSB3aXRoIENESyAoLS1hcHAgcHJpbnRzIGJvaWxlcnBsYXRlIHBhdGgpXG4gIHJlZ2lzdGVyKHByb2dyYW0pOyAvLyBSZS1yZWdpc3RlciBhIGRlcGxveWVkIHBpcGVsaW5lIEFSTiArIGRyYWluIHBlbmRpbmcgaW50ZW50cyBmcm9tIHByaW9yIGZhaWxlZCBkZXBsb3lzXG5cbiAgLy8gT3BlcmF0b3IgYXVkaXQgY29tbWFuZHMgKGNyb24tZnJpZW5kbHk6IGV4aXQgMSBvbiBmaW5kaW5ncylcbiAgcHJpbnREZWJ1ZygnUmVnaXN0ZXJpbmcgYXVkaXQgY29tbWFuZHMnKTtcbiAgYXVkaXRUb2tlbnMocHJvZ3JhbSk7IC8vIFNjYW4gU2VjcmV0cyBNYW5hZ2VyIGZvciBleHBpcmluZyBwbGF0Zm9ybSB0b2tlbnNcbiAgYXVkaXRTdGFja3MocHJvZ3JhbSk7IC8vIERpZmYgQ0ZOIHN0YWNrcyB2cyBwaXBlbGluZV9yZWdpc3RyeSB0byBmaW5kIGRyaWZ0XG4gIHN5bnRoKHByb2dyYW0pOyAvLyBSdW4gQ0RLIHN5bnRoZXNpc1xuICB2YWxpZGF0ZVRlbXBsYXRlc0NvbW1hbmQocHJvZ3JhbSk7IC8vIFZhbGlkYXRlIHt7Li4uIH19IHRlbXBsYXRlcyBpbiBhIHBpcGVsaW5lIG9yIHBsdWdpblxuXG4gIC8vIFNoZWxsIGNvbXBsZXRpb25zXG4gIHByaW50RGVidWcoJ1JlZ2lzdGVyaW5nIGNvbXBsZXRpb25zIGNvbW1hbmQnKTtcbiAgcHJvZ3JhbVxuICAgICAgLmNvbW1hbmQoJ2NvbXBsZXRpb25zJylcbiAgICAgIC5kZXNjcmlwdGlvbignR2VuZXJhdGUgc2hlbGwgY29tcGxldGlvbnMgKGJhc2gsIHpzaCwgZmlzaCknKVxuICAgICAgLmFyZ3VtZW50KCc8c2hlbGw+JywgJ1NoZWxsIHR5cGU6IGJhc2gsIHpzaCwgb3IgZmlzaCcpXG4gICAgICAuYWN0aW9uKChzaGVsbDogc3RyaW5nKSA9PiB7XG4gICAgICAvLyBQdWxsIGNvbW1hbmQgbmFtZXMgZnJvbSBjb21tYW5kZXIncyByZWdpc3RlcmVkIGxpc3Qgc28gY29tcGxldGlvbnMgbmV2ZXJcbiAgICAgIC8vIGRyaWZ0IGZyb20gdGhlIGFjdHVhbCBDTEkgc3VyZmFjZS4gU29ydGVkIGZvciBzdGFibGUgb3V0cHV0LlxuICAgICAgY29uc3QgY29tbWFuZHMgPSBwcm9ncmFtLmNvbW1hbmRzLm1hcChjID0+IGMubmFtZSgpKS5zb3J0KCkuam9pbignICcpO1xuICAgICAgc3dpdGNoIChzaGVsbCkge1xuICAgICAgICBjYXNlICdiYXNoJzpcbiAgICAgICAgICBjb25zb2xlLmxvZyhgIyBwaXBlbGluZS1tYW5hZ2VyIGJhc2ggY29tcGxldGlvbnNcbl9waXBlbGluZV9tYW5hZ2VyX2NvbXBsZXRpb25zKCkge1xuICBsb2NhbCBjdXI9XCJcXCR7Q09NUF9XT1JEU1tDT01QX0NXT1JEXX1cIlxuICBsb2NhbCBjb21tYW5kcz1cIiR7Y29tbWFuZHN9XCJcbiAgQ09NUFJFUExZPSgkKGNvbXBnZW4gLVcgXCJcXCR7Y29tbWFuZHN9XCIgLS0gXCJcXCR7Y3VyfVwiKSlcbn1cbmNvbXBsZXRlIC1GIF9waXBlbGluZV9tYW5hZ2VyX2NvbXBsZXRpb25zIHBpcGVsaW5lLW1hbmFnZXJgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnenNoJzpcbiAgICAgICAgICBjb25zb2xlLmxvZyhgIyBwaXBlbGluZS1tYW5hZ2VyIHpzaCBjb21wbGV0aW9uc1xuX3BpcGVsaW5lX21hbmFnZXIoKSB7XG4gIGxvY2FsIGNvbW1hbmRzPSgke2NvbW1hbmRzfSlcbiAgX2Rlc2NyaWJlICdjb21tYW5kJyBjb21tYW5kc1xufVxuY29tcGRlZiBfcGlwZWxpbmVfbWFuYWdlciBwaXBlbGluZS1tYW5hZ2VyYCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2Zpc2gnOlxuICAgICAgICAgIGNvbnNvbGUubG9nKGAjIHBpcGVsaW5lLW1hbmFnZXIgZmlzaCBjb21wbGV0aW9uc1xuY29tcGxldGUgLWMgcGlwZWxpbmUtbWFuYWdlciAtbiAnX19maXNoX3VzZV9zdWJjb21tYW5kJyAtYSAnJHtjb21tYW5kc30nYCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgVW5rbm93biBzaGVsbDogJHtzaGVsbH0uIFVzZSBiYXNoLCB6c2gsIG9yIGZpc2guYCk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIHByaW50RGVidWcoJ0FsbCBjb21tYW5kcyByZWdpc3RlcmVkIHN1Y2Nlc3NmdWxseScpO1xufVxuXG4vKipcbiAqIEhhbmRsZSBwcm9ncmFtIGVycm9yc1xuICovXG5mdW5jdGlvbiBzZXR1cEVycm9ySGFuZGxlcnMoKTogdm9pZCB7XG4gIC8vIEhhbmRsZSB1bmNhdWdodCBleGNlcHRpb25zXG4gIHByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgIGNvbnNvbGUuZXJyb3IoJycpOyAvLyBFbXB0eSBsaW5lXG4gICAgcHJpbnRFcnJvcignVW5jYXVnaHQgZXhjZXB0aW9uJywge1xuICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UsXG4gICAgICBuYW1lOiBlcnJvci5uYW1lLFxuICAgIH0pO1xuXG4gICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkdFTkVSQUwsIHtcbiAgICAgIGRlYnVnOiBpc0RlYnVnTW9kZShwcm9ncmFtLm9wdHMoKSksXG4gICAgICBleGl0OiB0cnVlLFxuICAgICAgY29udGV4dDoge1xuICAgICAgICB0eXBlOiAndW5jYXVnaHRFeGNlcHRpb24nLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gSGFuZGxlIHVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbnNcbiAgcHJvY2Vzcy5vbigndW5oYW5kbGVkUmVqZWN0aW9uJywgKHJlYXNvbjogdW5rbm93bikgPT4ge1xuICAgIGNvbnNvbGUuZXJyb3IoJycpOyAvLyBFbXB0eSBsaW5lXG4gICAgcHJpbnRFcnJvcignVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uJywge1xuICAgICAgcmVhc29uOiByZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHJlYXNvbi5tZXNzYWdlOiBTdHJpbmcocmVhc29uKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGVycm9yID0gcmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZWFzb246IG5ldyBFcnJvcihTdHJpbmcocmVhc29uKSk7XG5cbiAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuR0VORVJBTCwge1xuICAgICAgZGVidWc6IGlzRGVidWdNb2RlKHByb2dyYW0ub3B0cygpKSxcbiAgICAgIGV4aXQ6IHRydWUsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIHR5cGU6ICd1bmhhbmRsZWRSZWplY3Rpb24nLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gSGFuZGxlIFNJR0lOVCAoQ3RybCtDKVxuICBwcm9jZXNzLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coJycpOyAvLyBFbXB0eSBsaW5lXG4gICAgcHJpbnRXYXJuaW5nKCdQcm9jZXNzIGludGVycnVwdGVkIGJ5IHVzZXIgKFNJR0lOVCknKTtcbiAgICBjb25zb2xlLmxvZygnJyk7IC8vIEVtcHR5IGxpbmVcbiAgICBwcm9jZXNzLmV4aXQoMTMwKTsgLy8gU3RhbmRhcmQgZXhpdCBjb2RlIGZvciBTSUdJTlRcbiAgfSk7XG5cbiAgLy8gSGFuZGxlIFNJR1RFUk1cbiAgcHJvY2Vzcy5vbignU0lHVEVSTScsICgpID0+IHtcbiAgICBjb25zb2xlLmxvZygnJyk7IC8vIEVtcHR5IGxpbmVcbiAgICBwcmludFdhcm5pbmcoJ1Byb2Nlc3MgdGVybWluYXRlZCAoU0lHVEVSTSknKTtcbiAgICBjb25zb2xlLmxvZygnJyk7IC8vIEVtcHR5IGxpbmVcbiAgICBwcm9jZXNzLmV4aXQoMTQzKTsgLy8gU3RhbmRhcmQgZXhpdCBjb2RlIGZvciBTSUdURVJNXG4gIH0pO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemUgQ0xJIHdpdGggb3B0aW9uc1xuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gQ0xJIGluaXRpYWxpemF0aW9uIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVDbGkob3B0aW9uczogQ2xpT3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gIGNvbnN0IHtcbiAgICBzaG93QmFubmVyID0gdHJ1ZSxcbiAgICBtaW5pbWFsQmFubmVyID0gZmFsc2UsXG4gICAgZGVidWcgPSBmYWxzZSxcbiAgICB2ZXJib3NlID0gZmFsc2UsXG4gICAgcXVpZXQgPSBmYWxzZSxcbiAgICBub0NvbG9yID0gZmFsc2UsXG4gIH0gPSBvcHRpb25zO1xuXG4gIC8vIEhhbmRsZSBjb2xvciBvdXRwdXRcbiAgaWYgKG5vQ29sb3IpIHtcbiAgICBwcm9jZXNzLmVudi5OT19DT0xPUiA9ICcxJztcbiAgfVxuXG4gIC8vIERpc3BsYXkgYmFubmVyXG4gIGlmIChzaG93QmFubmVyICYmICFxdWlldCkge1xuICAgIGlmIChtaW5pbWFsQmFubmVyKSB7XG4gICAgICBtaW5pQmFubmVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhbm5lcih7XG4gICAgICAgIG1pbmltYWw6IGZhbHNlLFxuICAgICAgICBzaG93RGVzY3JpcHRpb246IHRydWUsXG4gICAgICAgIHNob3dUaW1lc3RhbXA6IGRlYnVnIHx8IHZlcmJvc2UsXG4gICAgICAgIHNob3dFeGVjdXRpb25JZDogZGVidWcsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBEaXNwbGF5IHN0YXJ0dXAgaW5mb1xuICBkaXNwbGF5U3RhcnR1cEluZm8oeyBkZWJ1ZywgdmVyYm9zZSwgcXVpZXQgfSk7XG5cbiAgLy8gQ2hlY2sgZW52aXJvbm1lbnRcbiAgaWYgKCFxdWlldCkge1xuICAgIGNoZWNrRW52aXJvbm1lbnQoKTtcbiAgfVxuXG4gIC8vIFNldHVwIGVycm9yIGhhbmRsZXJzXG4gIHNldHVwRXJyb3JIYW5kbGVycygpO1xuXG4gIC8vIFJlZ2lzdGVyIGNvbW1hbmRzXG4gIHRyeSB7XG4gICAgcmVnaXN0ZXJDb21tYW5kcygpO1xuICAgIHByaW50RGVidWcoJ0NMSSBpbml0aWFsaXphdGlvbiBjb21wbGV0ZScpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHByaW50RXJyb3IoJ0NMSSBpbml0aWFsaXphdGlvbiBmYWlsZWQnLCB7XG4gICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2U6IFN0cmluZyhlcnJvciksXG4gICAgfSk7XG5cbiAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuQ09ORklHVVJBVElPTiwge1xuICAgICAgZGVidWc6IGRlYnVnIHx8IGlzRGVidWdNb2RlKCksXG4gICAgICBleGl0OiB0cnVlLFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBzdGFnZTogJ2luaXRpYWxpemF0aW9uJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQXJndW1lbnRzKCk6IHZvaWQge1xuICB0cnkge1xuICAgIHByb2dyYW0ucGFyc2UocHJvY2Vzcy5hcmd2KTtcblxuICAgIC8vIFNob3cgaGVscCBpZiBubyBjb21tYW5kIHByb3ZpZGVkXG4gICAgY29uc3QgYXJncyA9IHByb2Nlc3MuYXJndi5zbGljZSgyKTtcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHByaW50SW5mbygnTm8gY29tbWFuZCBzcGVjaWZpZWQgLSBkaXNwbGF5aW5nIGhlbHAnKTtcbiAgICAgIGNvbnNvbGUubG9nKCcnKTsgLy8gRW1wdHkgbGluZVxuICAgICAgcHJvZ3JhbS5vdXRwdXRIZWxwKCk7XG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgY29tbWFuZCBleGlzdHNcbiAgICBjb25zdCBjb21tYW5kID0gYXJnc1swXTtcbiAgICBpZiAoY29tbWFuZCAmJiAhY29tbWFuZC5zdGFydHNXaXRoKCctJykpIHtcbiAgICAgIGNvbnN0IGNvbW1hbmRFeGlzdHMgPSBwcm9ncmFtLmNvbW1hbmRzLnNvbWUoY21kID0+IGNtZC5uYW1lKCkgPT09IGNvbW1hbmQpO1xuXG4gICAgICBpZiAoIWNvbW1hbmRFeGlzdHMpIHtcbiAgICAgICAgY29uc29sZS5sb2coJycpOyAvLyBFbXB0eSBsaW5lXG4gICAgICAgIHByaW50RXJyb3IoYFVua25vd24gY29tbWFuZDogJHtjb21tYW5kfWApO1xuICAgICAgICBjb25zb2xlLmxvZygnJyk7IC8vIEVtcHR5IGxpbmVcbiAgICAgICAgcHJpbnRJbmZvKCdBdmFpbGFibGUgY29tbWFuZHM6Jyk7XG4gICAgICAgIHByb2dyYW0uY29tbWFuZHMuZm9yRWFjaChjbWQgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAg4oCiICR7Y21kLm5hbWUoKX0gLSAke2NtZC5kZXNjcmlwdGlvbigpfWApO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc29sZS5sb2coJycpOyAvLyBFbXB0eSBsaW5lXG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcmludERlYnVnKCdDb21tYW5kIGxpbmUgYXJndW1lbnRzIHBhcnNlZCBzdWNjZXNzZnVsbHknKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuR0VORVJBTCwge1xuICAgICAgZGVidWc6IGlzRGVidWdNb2RlKHByb2dyYW0ub3B0cygpKSxcbiAgICAgIGV4aXQ6IHRydWUsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIHN0YWdlOiAnYXJndW1lbnQtcGFyc2luZycsXG4gICAgICAgIGFyZ3Y6IHByb2Nlc3MuYXJndixcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBNYWluIENMSSBlbnRyeSBwb2ludFxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gQ0xJIGluaXRpYWxpemF0aW9uIG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gU3RhbmRhcmQgaW5pdGlhbGl6YXRpb25cbiAqIG1haW4oKTtcbiAqXG4gKiAvLyBNaW5pbWFsIG1vZGVcbiAqIG1haW4oeyBtaW5pbWFsQmFubmVyOiB0cnVlLCBxdWlldDogdHJ1ZSB9KTtcbiAqXG4gKiAvLyBEZWJ1ZyBtb2RlXG4gKiBtYWluKHsgZGVidWc6IHRydWUsIHZlcmJvc2U6IHRydWUgfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1haW4ob3B0aW9uczogQ2xpT3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gIHRyeSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBDTElcbiAgICBpbml0aWFsaXplQ2xpKG9wdGlvbnMpO1xuXG4gICAgLy8gUGFyc2UgYXJndW1lbnRzIGFuZCBleGVjdXRlIGNvbW1hbmRcbiAgICBwYXJzZUFyZ3VtZW50cygpO1xuXG4gICAgLy8gSWYgd2UgcmVhY2ggaGVyZSwgY29tbWFuZCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAgcHJpbnREZWJ1ZygnQ0xJIGV4ZWN1dGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gRmluYWwgY2F0Y2gtYWxsIGVycm9yIGhhbmRsZXJcbiAgICBjb25zb2xlLmVycm9yKCcnKTsgLy8gRW1wdHkgbGluZVxuICAgIHByaW50RXJyb3IoJ0ZhdGFsIENMSSBlcnJvcicsIHtcbiAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZTogU3RyaW5nKGVycm9yKSxcbiAgICB9KTtcblxuICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5HRU5FUkFMLCB7XG4gICAgICBkZWJ1ZzogaXNEZWJ1Z01vZGUob3B0aW9ucyksXG4gICAgICBleGl0OiB0cnVlLFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBzdGFnZTogJ21haW4nLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFJ1biBDTEkgaWYgZXhlY3V0ZWQgZGlyZWN0bHlcbiAqL1xuaWYgKHJlcXVpcmUubWFpbiA9PT0gbW9kdWxlKSB7XG4gIC8vIFBhcnNlIENMSSBvcHRpb25zIGZyb20gZW52aXJvbm1lbnQgb3IgY29tbWFuZCBsaW5lXG4gIGNvbnN0IG9wdGlvbnM6IENsaU9wdGlvbnMgPSB7XG4gICAgZGVidWc6IHByb2Nlc3MuZW52LkRFQlVHID09PSAndHJ1ZScsXG4gICAgcXVpZXQ6IHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS1xdWlldCcpLFxuICAgIHZlcmJvc2U6IHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS12ZXJib3NlJyksXG4gICAgbm9Db2xvcjogcHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLW5vLWNvbG9yJykgfHwgcHJvY2Vzcy5lbnYuTk9fQ09MT1IgPT09ICcxJyxcbiAgfTtcblxuICBtYWluKG9wdGlvbnMpO1xufSJdfQ==
@@ -0,0 +1,25 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * CLI `pipeline-manager org-export --id <orgId> --output <file>`.
4
+ *
5
+ * Fetches the GDPR portability dump from `GET /api/organization/:id/export`
6
+ * on the platform service and writes it to disk (or stdout). The endpoint
7
+ * is gated server-side * • System admins (admin/owner in the `system` org) may export any org.
8
+ * • Org admins / owners may export ONLY their own org.
9
+ * • Everything else gets 403.
10
+ *
11
+ * The CLI itself does no role checking the caller's PLATFORM_TOKEN drives
12
+ * what the server accepts. Run `pipeline-manager status` first to confirm
13
+ * the token's role + org.
14
+ *
15
+ * @example
16
+ * ```bash
17
+ * # Sysadmin: any org
18
+ * pipeline-manager org-export --id org-acme --output acme.json
19
+ *
20
+ * # Org admin: own org only (server rejects other ids with 403)
21
+ * pipeline-manager org-export --id org-acme --output acme.json
22
+ * ```
23
+ */
24
+ export declare function orgExport(program: Command): void;
25
+ //# sourceMappingURL=org-export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org-export.d.ts","sourceRoot":"","sources":["../../src/commands/org-export.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyEhD"}
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ // Copyright 2026 Pipeline Builder Contributors
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
5
+ if (k2 === undefined) k2 = k;
6
+ var desc = Object.getOwnPropertyDescriptor(m, k);
7
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
8
+ desc = { enumerable: true, get: function() { return m[k]; } };
9
+ }
10
+ Object.defineProperty(o, k2, desc);
11
+ }) : (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ o[k2] = m[k];
14
+ }));
15
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
16
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
17
+ }) : function(o, v) {
18
+ o["default"] = v;
19
+ });
20
+ var __importStar = (this && this.__importStar) || (function () {
21
+ var ownKeys = function(o) {
22
+ ownKeys = Object.getOwnPropertyNames || function (o) {
23
+ var ar = [];
24
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
25
+ return ar;
26
+ };
27
+ return ownKeys(o);
28
+ };
29
+ return function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ })();
37
+ var __importDefault = (this && this.__importDefault) || function (mod) {
38
+ return (mod && mod.__esModule) ? mod : { "default": mod };
39
+ };
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.orgExport = orgExport;
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const picocolors_1 = __importDefault(require("picocolors"));
45
+ const command_utils_1 = require("../utils/command-utils");
46
+ const error_handler_1 = require("../utils/error-handler");
47
+ const output_utils_1 = require("../utils/output-utils");
48
+ const { bold, green } = picocolors_1.default;
49
+ /**
50
+ * CLI `pipeline-manager org-export --id <orgId> --output <file>`.
51
+ *
52
+ * Fetches the GDPR portability dump from `GET /api/organization/:id/export`
53
+ * on the platform service and writes it to disk (or stdout). The endpoint
54
+ * is gated server-side * • System admins (admin/owner in the `system` org) may export any org.
55
+ * • Org admins / owners may export ONLY their own org.
56
+ * • Everything else gets 403.
57
+ *
58
+ * The CLI itself does no role checking the caller's PLATFORM_TOKEN drives
59
+ * what the server accepts. Run `pipeline-manager status` first to confirm
60
+ * the token's role + org.
61
+ *
62
+ * @example
63
+ * ```bash
64
+ * # Sysadmin: any org
65
+ * pipeline-manager org-export --id org-acme --output acme.json
66
+ *
67
+ * # Org admin: own org only (server rejects other ids with 403)
68
+ * pipeline-manager org-export --id org-acme --output acme.json
69
+ * ```
70
+ */
71
+ function orgExport(program) {
72
+ program
73
+ .command('org-export')
74
+ .description('Export an organization\'s data as JSON (GDPR portability, ).')
75
+ .requiredOption('-i, --id <id>', 'Organization ID to export')
76
+ .option('-o, --output <file>', 'Output file path (default: org-<id>-export.json in CWD)')
77
+ .option('--verify-ssl', 'Enable SSL certificate verification')
78
+ .option('--no-verify-ssl', 'Disable SSL certificate verification')
79
+ .action(async (options) => {
80
+ const executionId = (0, command_utils_1.printCommandHeader)('Org Export');
81
+ try {
82
+ (0, command_utils_1.printSslWarning)(options.verifySsl);
83
+ const orgId = (0, command_utils_1.validateEntityId)(options.id, 'Organization');
84
+ const outputPath = options.output
85
+ ? path.resolve(options.output)
86
+ : path.resolve(process.cwd(), `org-${orgId}-export.json`);
87
+ (0, output_utils_1.printInfo)('Request parameters', {
88
+ orgId,
89
+ output: outputPath,
90
+ });
91
+ const client = (0, command_utils_1.createAuthenticatedClient)(options);
92
+ console.log('');
93
+ (0, output_utils_1.printSection)('Fetching Export');
94
+ const startTime = Date.now();
95
+ // The endpoint streams a large JSON attachment for orgs with long
96
+ // histories. The ApiClient returns the parsed body directly, which
97
+ // for `application/json` is a JS object we re-serialize to disk.
98
+ const response = await client.get(`${client.getConfig().api.baseUrl}/api/organization/${encodeURIComponent(orgId)}/export`);
99
+ const duration = Date.now() - startTime;
100
+ if (!response || typeof response !== 'object') {
101
+ (0, output_utils_1.printError)('Empty / unparseable export payload');
102
+ throw new Error(`Export returned no data for org ${orgId}`);
103
+ }
104
+ // Re-serialize so we keep the same pretty-printed shape the server
105
+ // produced (2-space indent matches the platform's handler) and so
106
+ // we don't lose Date precision on a round-trip through JSON.parse.
107
+ const json = JSON.stringify(response, null, 2);
108
+ fs.writeFileSync(outputPath, json, 'utf8');
109
+ const sizeKb = (json.length / 1024).toFixed(1);
110
+ const postgresTables = response.postgres && typeof response.postgres === 'object'
111
+ ? Object.keys(response.postgres).length
112
+ : 0;
113
+ console.log('');
114
+ (0, output_utils_1.printSection)('Export Saved');
115
+ (0, output_utils_1.printKeyValue)({
116
+ 'Org ID': green(bold(orgId)),
117
+ 'Output': outputPath,
118
+ 'Size': `${sizeKb} KB`,
119
+ 'Postgres tables': String(postgresTables),
120
+ 'Exported at': typeof response.exportedAt === 'string' ? response.exportedAt : '(not set)',
121
+ });
122
+ (0, command_utils_1.printExecutionSummary)(executionId, duration);
123
+ (0, output_utils_1.printSuccess)('Organization export complete', { path: outputPath });
124
+ }
125
+ catch (error) {
126
+ (0, error_handler_1.handleError)(error, error_handler_1.ERROR_CODES.API_REQUEST, {
127
+ debug: program.opts().debug,
128
+ exit: true,
129
+ context: { command: 'org-export', executionId, orgId: options.id },
130
+ });
131
+ }
132
+ });
133
+ }
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWV4cG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9vcmctZXhwb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtDdEMsOEJBeUVDO0FBekdELHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFFN0IsNERBQThCO0FBQzlCLDBEQUFpSjtBQUNqSiwwREFBa0U7QUFDbEUsd0RBQXlHO0FBRXpHLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsb0JBQUksQ0FBQztBQUU3Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ0gsU0FBZ0IsU0FBUyxDQUFDLE9BQWdCO0lBQ3hDLE9BQU87U0FDRixPQUFPLENBQUMsWUFBWSxDQUFDO1NBQ3JCLFdBQVcsQ0FBQyw4REFBOEQsQ0FBQztTQUMzRSxjQUFjLENBQUMsZUFBZSxFQUFFLDJCQUEyQixDQUFDO1NBQzVELE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSx5REFBeUQsQ0FBQztTQUN4RixNQUFNLENBQUMsY0FBYyxFQUFFLHFDQUFxQyxDQUFDO1NBQzdELE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxzQ0FBc0MsQ0FBQztTQUNqRSxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQzFCLE1BQU0sV0FBVyxHQUFHLElBQUEsa0NBQWtCLEVBQUMsWUFBWSxDQUFDLENBQUM7UUFFckQsSUFBSSxDQUFDO1lBQ0gsSUFBQSwrQkFBZSxFQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUVuQyxNQUFNLEtBQUssR0FBRyxJQUFBLGdDQUFnQixFQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDM0QsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE1BQU07Z0JBQy9CLENBQUMsQ0FBQyxJQUFJLENBQUMs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QUFLO2dCQUMzQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRTthQUNuRSxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCBwaWNvIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHsgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudCwgcHJpbnRDb21tYW5kSGVhZGVyLCBwcmludEV4ZWN1dGlvblN1bW1hcnksIHByaW50U3NsV2FybmluZywgdmFsaWRhdGVFbnRpdHlJZCB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlcic7XG5pbXBvcnQgeyBwcmludEVycm9yLCBwcmludEluZm8sIHByaW50S2V5VmFsdWUsIHByaW50U2VjdGlvbiwgcHJpbnRTdWNjZXNzIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzJztcblxuY29uc3QgeyBib2xkLCBncmVlbiB9ID0gcGljbztcblxuLyoqXG4gKiBDTEkgIGBwaXBlbGluZS1tYW5hZ2VyIG9yZy1leHBvcnQgLS1pZCA8b3JnSWQ+IC0tb3V0cHV0IDxmaWxlPmAuXG4gKlxuICogRmV0Y2hlcyB0aGUgR0RQUiBwb3J0YWJpbGl0eSBkdW1wIGZyb20gYEdFVCAvYXBpL29yZ2FuaXphdGlvbi86aWQvZXhwb3J0YFxuICogb24gdGhlIHBsYXRmb3JtIHNlcnZpY2UgYW5kIHdyaXRlcyBpdCB0byBkaXNrIChvciBzdGRvdXQpLiBUaGUgZW5kcG9pbnRcbiAqIGlzIGdhdGVkIHNlcnZlci1zaWRlICog4oCiIFN5c3RlbSBhZG1pbnMgKGFkbWluL293bmVyIGluIHRoZSBgc3lzdGVtYCBvcmcpIG1heSBleHBvcnQgYW55IG9yZy5cbiAqIOKAoiBPcmcgYWRtaW5zIC8gb3duZXJzIG1heSBleHBvcnQgT05MWSB0aGVpciBvd24gb3JnLlxuICog4oCiIEV2ZXJ5dGhpbmcgZWxzZSBnZXRzIDQwMy5cbiAqXG4gKiBUaGUgQ0xJIGl0c2VsZiBkb2VzIG5vIHJvbGUgY2hlY2tpbmcgIHRoZSBjYWxsZXIncyBQTEFURk9STV9UT0tFTiBkcml2ZXNcbiAqIHdoYXQgdGhlIHNlcnZlciBhY2NlcHRzLiBSdW4gYHBpcGVsaW5lLW1hbmFnZXIgc3RhdHVzYCBmaXJzdCB0byBjb25maXJtXG4gKiB0aGUgdG9rZW4ncyByb2xlICsgb3JnLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBiYXNoXG4gKiAjIFN5c2FkbWluOiBhbnkgb3JnXG4gKiBwaXBlbGluZS1tYW5hZ2VyIG9yZy1leHBvcnQgLS1pZCBvcmctYWNtZSAtLW91dHB1dCBhY21lLmpzb25cbiAqXG4gKiAjIE9yZyBhZG1pbjogb3duIG9yZyBvbmx5IChzZXJ2ZXIgcmVqZWN0cyBvdGhlciBpZHMgd2l0aCA0MDMpXG4gKiBwaXBlbGluZS1tYW5hZ2VyIG9yZy1leHBvcnQgLS1pZCBvcmctYWNtZSAtLW91dHB1dCBhY21lLmpzb25cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gb3JnRXhwb3J0KHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgcHJvZ3JhbVxuICAgICAgLmNvbW1hbmQoJ29yZy1leHBvcnQnKVxuICAgICAgLmRlc2NyaXB0aW9uKCdFeHBvcnQgYW4gb3JnYW5pemF0aW9uXFwncyBkYXRhIGFzIEpTT04gKEdEUFIgcG9ydGFiaWxpdHksICkuJylcbiAgICAgIC5yZXF1aXJlZE9wdGlvbignLWksIC0taWQgPGlkPicsICdPcmdhbml6YXRpb24gSUQgdG8gZXhwb3J0JylcbiAgICAgIC5vcHRpb24oJy1vLCAtLW91dHB1dCA8ZmlsZT4nLCAnT3V0cHV0IGZpbGUgcGF0aCAoZGVmYXVsdDogb3JnLTxpZD4tZXhwb3J0Lmpzb24gaW4gQ1dEKScpXG4gICAgICAub3B0aW9uKCctLXZlcmlmeS1zc2wnLCAnRW5hYmxlIFNTTCBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24nKVxuICAgICAgLm9wdGlvbignLS1uby12ZXJpZnktc3NsJywgJ0Rpc2FibGUgU1NMIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbicpXG4gICAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignT3JnIEV4cG9ydCcpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBwcmludFNzbFdhcm5pbmcob3B0aW9ucy52ZXJpZnlTc2wpO1xuXG4gICAgICAgIGNvbnN0IG9yZ0lkID0gdmFsaWRhdGVFbnRpdHlJZChvcHRpb25zLmlkLCAnT3JnYW5pemF0aW9uJyk7XG4gICAgICAgIGNvbnN0IG91dHB1dFBhdGggPSBvcHRpb25zLm91dHB1dFxuICAgICAgICAgID8gcGF0aC5yZXNvbHZlKG9wdGlvbnMub3V0cHV0KVxuOiBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgYG9yZy0ke29yZ0lkfS1leHBvcnQuanNvbmApO1xuXG4gICAgICAgIHByaW50SW5mbygnUmVxdWVzdCBwYXJhbWV0ZXJzJywge1xuICAgICAgICAgIG9yZ0lkLFxuICAgICAgICAgIG91dHB1dDogb3V0cHV0UGF0aCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgY2xpZW50ID0gY3JlYXRlQXV0aGVudGljYXRlZENsaWVudChvcHRpb25zKTtcblxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50U2VjdGlvbignRmV0Y2hpbmcgRXhwb3J0Jyk7XG5cbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgLy8gVGhlIGVuZHBvaW50IHN0cmVhbXMgYSBsYXJnZSBKU09OIGF0dGFjaG1lbnQgZm9yIG9yZ3Mgd2l0aCBsb25nXG4gICAgICAgIC8vIGhpc3Rvcmllcy4gVGhlIEFwaUNsaWVudCByZXR1cm5zIHRoZSBwYXJzZWQgYm9keSBkaXJlY3RseSwgd2hpY2hcbiAgICAgICAgLy8gZm9yIGBhcHBsaWNhdGlvbi9qc29uYCBpcyBhIEpTIG9iamVjdCB3ZSByZS1zZXJpYWxpemUgdG8gZGlzay5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PFJlY29yZDxzdHJpbmcsIHVua25vd24+PiggICAgICAgICAgYCR7Y2xpZW50LmdldENvbmZpZygpLmFwaS5iYXNlVXJsfS9hcGkvb3JnYW5pemF0aW9uLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG9yZ0lkKX0vZXhwb3J0YCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuXG4gICAgICAgIGlmICghcmVzcG9uc2UgfHwgdHlwZW9mIHJlc3BvbnNlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHByaW50RXJyb3IoJ0VtcHR5IC8gdW5wYXJzZWFibGUgZXhwb3J0IHBheWxvYWQnKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cG9ydCByZXR1cm5lZCBubyBkYXRhIGZvciBvcmcgJHtvcmdJZH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlLXNlcmlhbGl6ZSBzbyB3ZSBrZWVwIHRoZSBzYW1lIHByZXR0eS1wcmludGVkIHNoYXBlIHRoZSBzZXJ2ZXJcbiAgICAgICAgLy8gcHJvZHVjZWQgKDItc3BhY2UgaW5kZW50IG1hdGNoZXMgdGhlIHBsYXRmb3JtJ3MgaGFuZGxlcikgYW5kIHNvXG4gICAgICAgIC8vIHdlIGRvbid0IGxvc2UgRGF0ZSBwcmVjaXNpb24gb24gYSByb3VuZC10cmlwIHRocm91Z2ggSlNPTi5wYXJzZS5cbiAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLCBudWxsLCAyKTtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhvdXRwdXRQYXRoLCBqc29uLCAndXRmOCcpO1xuXG4gICAgICAgIGNvbnN0IHNpemVLYiA9IChqc29uLmxlbmd0aCAvIDEwMjQpLnRvRml4ZWQoMSk7XG4gICAgICAgIGNvbnN0IHBvc3RncmVzVGFibGVzID0gcmVzcG9uc2UucG9zdGdyZXMgJiYgdHlwZW9mIHJlc3BvbnNlLnBvc3RncmVzID09PSAnb2JqZWN0J1xuICAgICAgICAgID8gT2JqZWN0LmtleXMocmVzcG9uc2UucG9zdGdyZXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmxlbmd0aFxuOiAwO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRTZWN0aW9uKCdFeHBvcnQgU2F2ZWQnKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgJ09yZyBJRCc6IGdyZWVuKGJvbGQob3JnSWQpKSxcbiAgICAgICAgICAnT3V0cHV0Jzogb3V0cHV0UGF0aCxcbiAgICAgICAgICAnU2l6ZSc6IGAke3NpemVLYn0gS0JgLFxuICAgICAgICAgICdQb3N0Z3JlcyB0YWJsZXMnOiBTdHJpbmcocG9zdGdyZXNUYWJsZXMpLFxuICAgICAgICAgICdFeHBvcnRlZCBhdCc6IHR5cGVvZiByZXNwb25zZS5leHBvcnRlZEF0ID09PSAnc3RyaW5nJyA/IHJlc3BvbnNlLmV4cG9ydGVkQXQ6ICcobm90IHNldCknLFxuICAgICAgICB9KTtcblxuICAgICAgICBwcmludEV4ZWN1dGlvblN1bW1hcnkoZXhlY3V0aW9uSWQsIGR1cmF0aW9uKTtcbiAgICAgICAgcHJpbnRTdWNjZXNzKCdPcmdhbml6YXRpb24gZXhwb3J0IGNvbXBsZXRlJywgeyBwYXRoOiBvdXRwdXRQYXRoIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkFQSV9SRVFVRVNULCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDogeyBjb21tYW5kOiAnb3JnLWV4cG9ydCcsIGV4ZWN1dGlvbklkLCBvcmdJZDogb3B0aW9ucy5pZCB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pipeline-builder/pipeline-manager",
3
- "description": "CLI for Pipeline Builderself-service AWS CodePipeline platform with 124 reusable containerized plugins, per-org compliance enforcement, and multi-tenant isolation.",
3
+ "description": "CLI for Pipeline Builder self-service AWS CodePipeline platform with 124 reusable containerized plugins, per-org compliance enforcement, and multi-tenant isolation.",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/mwashburn160/pipeline-builder.git"
@@ -11,7 +11,7 @@
11
11
  "devDependencies": {
12
12
  "@stylistic/eslint-plugin": "^2",
13
13
  "@types/figlet": "1.7.0",
14
- "@types/jest": "^30.0.0",
14
+ "@types/jest": "30.0.0",
15
15
  "@types/node": "^24",
16
16
  "@types/progress": "2.0.7",
17
17
  "@typescript-eslint/eslint-plugin": "^8",
@@ -20,9 +20,9 @@
20
20
  "eslint": "^9",
21
21
  "eslint-import-resolver-typescript": "^4.4.4",
22
22
  "eslint-plugin-import": "^2.32.0",
23
- "jest": "^30.2.0",
24
- "jest-junit": "^16",
25
- "ts-jest": "^29.4.6",
23
+ "jest": "30.0.0",
24
+ "jest-junit": "^17",
25
+ "ts-jest": "^29",
26
26
  "typescript": "5.9.3"
27
27
  },
28
28
  "dependencies": {
@@ -30,6 +30,7 @@
30
30
  "@aws-sdk/client-lambda": "3.821.0",
31
31
  "@aws-sdk/client-secrets-manager": "3.821.0",
32
32
  "@aws-sdk/client-sts": "3.821.0",
33
+ "@pipeline-builder/pipeline-core": "3.4.37",
33
34
  "aws-cdk-lib": "2.251.0",
34
35
  "axios": "1.13.5",
35
36
  "commander": "14.0.3",
@@ -39,8 +40,7 @@
39
40
  "picocolors": "1.1.1",
40
41
  "progress": "2.0.3",
41
42
  "typescript": "5.9.3",
42
- "yaml": "2.8.2",
43
- "@pipeline-builder/pipeline-core": "3.4.36"
43
+ "yaml": "2.8.2"
44
44
  },
45
45
  "keywords": [
46
46
  "aws",
@@ -83,7 +83,7 @@
83
83
  "access": "public",
84
84
  "registry": "https://registry.npmjs.org/"
85
85
  },
86
- "version": "3.4.36",
86
+ "version": "3.4.38",
87
87
  "bugs": {
88
88
  "url": "https://github.com/mwashburn160/pipeline-builder/issues"
89
89
  },
@@ -125,7 +125,12 @@
125
125
  "^.+\\.[t]sx?$": [
126
126
  "ts-jest",
127
127
  {
128
- "tsconfig": "tsconfig.dev.json"
128
+ "tsconfig": "tsconfig.dev.json",
129
+ "diagnostics": {
130
+ "ignoreCodes": [
131
+ 151002
132
+ ]
133
+ }
129
134
  }
130
135
  ]
131
136
  },