@brainfish-ai/devdoc 0.1.29 → 0.1.30

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.
@@ -22,6 +22,7 @@ interface CreateOptions {
22
22
  install?: boolean;
23
23
  url?: string;
24
24
  subdomain?: string;
25
+ ai?: boolean | 'claude' | 'cursor' | 'both';
25
26
  }
26
27
  export declare function create(projectDirectory: string | undefined, options: CreateOptions): Promise<void>;
27
28
  export {};
@@ -290,6 +290,97 @@ function generateDocsConfig(projectName, templateType) {
290
290
  }
291
291
  return baseConfig;
292
292
  }
293
+ // Claude Code skills to create
294
+ const CLAUDE_SKILLS = [
295
+ 'bootstrap-docs',
296
+ 'migrate-docs',
297
+ 'import-api-spec',
298
+ 'sync-docs',
299
+ 'check-docs',
300
+ 'create-doc-page',
301
+ 'update-docs-json',
302
+ 'generate-api-docs',
303
+ 'docs-from-code',
304
+ ];
305
+ // Cursor rules to create
306
+ const CURSOR_RULES = [
307
+ 'devdoc.mdc',
308
+ 'devdoc-bootstrap.mdc',
309
+ 'devdoc-migrate.mdc',
310
+ 'devdoc-sync.mdc',
311
+ ];
312
+ /**
313
+ * Get the AI agents template directory path
314
+ */
315
+ function getAIAgentsDir() {
316
+ // Try relative to compiled dist (packages/devdoc/dist/cli/commands -> packages/devdoc/ai-agents)
317
+ let agentsDir = path_1.default.join(__dirname, '..', '..', '..', 'ai-agents');
318
+ if (fs_extra_1.default.existsSync(agentsDir)) {
319
+ return agentsDir;
320
+ }
321
+ // Try devdoc/templates at repo root (development)
322
+ agentsDir = path_1.default.join(__dirname, '..', '..', '..', '..', '..', 'devdoc', 'templates', 'starter');
323
+ if (fs_extra_1.default.existsSync(agentsDir)) {
324
+ return agentsDir;
325
+ }
326
+ return null;
327
+ }
328
+ /**
329
+ * Install AI agent configuration files
330
+ */
331
+ function installAIAgents(projectPath, tool) {
332
+ const results = {
333
+ claudeMd: false,
334
+ claudeSkills: [],
335
+ cursorRules: [],
336
+ };
337
+ const agentsDir = getAIAgentsDir();
338
+ if (!agentsDir) {
339
+ logger_1.logger.warn('AI agent templates not found');
340
+ return results;
341
+ }
342
+ // Install Claude Code files
343
+ if (tool === 'claude' || tool === 'both') {
344
+ // Copy CLAUDE.md
345
+ const claudeMdSource = path_1.default.join(agentsDir, 'CLAUDE.md');
346
+ const claudeMdDest = path_1.default.join(projectPath, 'CLAUDE.md');
347
+ if (fs_extra_1.default.existsSync(claudeMdSource)) {
348
+ fs_extra_1.default.copySync(claudeMdSource, claudeMdDest);
349
+ results.claudeMd = true;
350
+ }
351
+ // Copy skills
352
+ const sourceSkillsDir = path_1.default.join(agentsDir, '.claude', 'skills');
353
+ const destSkillsDir = path_1.default.join(projectPath, '.claude', 'skills');
354
+ if (fs_extra_1.default.existsSync(sourceSkillsDir)) {
355
+ fs_extra_1.default.ensureDirSync(destSkillsDir);
356
+ for (const skill of CLAUDE_SKILLS) {
357
+ const sourceDir = path_1.default.join(sourceSkillsDir, skill);
358
+ const destDir = path_1.default.join(destSkillsDir, skill);
359
+ if (fs_extra_1.default.existsSync(sourceDir)) {
360
+ fs_extra_1.default.copySync(sourceDir, destDir);
361
+ results.claudeSkills.push(skill);
362
+ }
363
+ }
364
+ }
365
+ }
366
+ // Install Cursor files
367
+ if (tool === 'cursor' || tool === 'both') {
368
+ const sourceRulesDir = path_1.default.join(agentsDir, '.cursor', 'rules');
369
+ const destRulesDir = path_1.default.join(projectPath, '.cursor', 'rules');
370
+ if (fs_extra_1.default.existsSync(sourceRulesDir)) {
371
+ fs_extra_1.default.ensureDirSync(destRulesDir);
372
+ for (const rule of CURSOR_RULES) {
373
+ const sourcePath = path_1.default.join(sourceRulesDir, rule);
374
+ const destPath = path_1.default.join(destRulesDir, rule);
375
+ if (fs_extra_1.default.existsSync(sourcePath)) {
376
+ fs_extra_1.default.copySync(sourcePath, destPath);
377
+ results.cursorRules.push(rule);
378
+ }
379
+ }
380
+ }
381
+ }
382
+ return results;
383
+ }
293
384
  /**
294
385
  * Clean up unused API files based on template type
295
386
  */
@@ -512,6 +603,39 @@ async function create(projectDirectory, options) {
512
603
  logger_1.logger.warn('Could not install dependencies');
513
604
  }
514
605
  }
606
+ // Install AI agents if requested
607
+ let aiTool = null;
608
+ if (options.ai === true) {
609
+ // If --ai flag is passed without value, prompt for selection
610
+ const aiChoices = [
611
+ { value: 'both', label: 'Both - Claude Code and Cursor' },
612
+ { value: 'claude', label: 'Claude Code - Skills and CLAUDE.md' },
613
+ { value: 'cursor', label: 'Cursor - Rules (.cursor/rules/)' },
614
+ { value: 'skip', label: 'Skip - I\'ll set this up later' },
615
+ ];
616
+ const selection = await promptSelect('Set up AI agent configuration?', aiChoices);
617
+ if (selection !== 'skip') {
618
+ aiTool = selection;
619
+ }
620
+ }
621
+ else if (typeof options.ai === 'string') {
622
+ // If --ai=claude, --ai=cursor, or --ai=both is passed
623
+ aiTool = options.ai;
624
+ }
625
+ if (aiTool) {
626
+ console.log();
627
+ logger_1.logger.info('Setting up AI agent configuration...');
628
+ const aiResults = installAIAgents(resolvedPath, aiTool);
629
+ if (aiResults.claudeMd) {
630
+ logger_1.logger.success('Created CLAUDE.md');
631
+ }
632
+ for (const skill of aiResults.claudeSkills) {
633
+ logger_1.logger.success(`Created .claude/skills/${skill}/SKILL.md`);
634
+ }
635
+ for (const rule of aiResults.cursorRules) {
636
+ logger_1.logger.success(`Created .cursor/rules/${rule}`);
637
+ }
638
+ }
515
639
  // Success message
516
640
  console.log();
517
641
  logger_1.logger.success(`Created ${projectName} at ${resolvedPath}`);
@@ -534,7 +658,22 @@ async function create(projectDirectory, options) {
534
658
  console.log(` cd ${projectName}`);
535
659
  console.log(' npm run dev');
536
660
  console.log();
661
+ // Show AI agent tips if installed
662
+ if (aiTool) {
663
+ console.log('AI Agent Quick Start:');
664
+ if (aiTool === 'claude' || aiTool === 'both') {
665
+ console.log(' Claude Code: /bootstrap-docs');
666
+ }
667
+ if (aiTool === 'cursor' || aiTool === 'both') {
668
+ console.log(' Cursor: Ask "generate initial documentation from this repo"');
669
+ }
670
+ console.log();
671
+ }
672
+ else {
673
+ console.log('Tip: Run "devdoc ai" to set up AI agent configuration for Claude Code or Cursor.');
674
+ console.log();
675
+ }
537
676
  console.log('Happy documenting! 📚');
538
677
  console.log();
539
678
  }
540
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS9jb21tYW5kcy9jcmVhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnVkEsd0JBb1BDO0FBcGtCRCxpREFBeUM7QUFDekMsZ0RBQXdCO0FBQ3hCLHdEQUEwQjtBQUMxQixpQ0FBeUM7QUFDekMsK0NBQTRDO0FBQzVDLCtDQUFrRDtBQUVsRCx1REFBdUQ7QUFDdkQsTUFBTSxhQUFhLEdBQUcsOENBQThDLENBQUM7QUFFckUsdUZBQXVGO0FBQ3ZGLE1BQU0sU0FBUyxHQUFHO0lBQ2hCLEtBQUssRUFBRTtRQUNMLElBQUksRUFBRSxPQUFPO1FBQ2IsV0FBVyxFQUFFLGlEQUFpRDtRQUM5RCxLQUFLLEVBQUUsU0FBUztLQUNqQjtJQUNELE9BQU8sRUFBRTtRQUNQLElBQUksRUFBRSxTQUFTO1FBQ2YsV0FBVyxFQUFFLHlEQUF5RDtRQUN0RSxLQUFLLEVBQUUsU0FBUztLQUNqQjtJQUNELE9BQU8sRUFBRTtRQUNQLElBQUksRUFBRSxTQUFTO1FBQ2YsV0FBVyxFQUFFLDJDQUEyQztRQUN4RCxLQUFLLEVBQUUsU0FBUztLQUNqQjtDQUNPLENBQUM7QUFrQlgsc0NBQXNDO0FBQ3RDLEtBQUssVUFBVSxNQUFNLENBQUMsUUFBZ0IsRUFBRSxZQUFxQjtJQUMzRCxNQUFNLFFBQVEsR0FBRyx3REFBYSxVQUFVLEdBQUMsQ0FBQztJQUMxQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO1FBQ2xDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztRQUNwQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07S0FDdkIsQ0FBQyxDQUFDO0lBRUgsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQzdCLE1BQU0sZUFBZSxHQUFHLFlBQVk7WUFDbEMsQ0FBQyxDQUFDLEdB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Q0FBQyxHQUFHLENBQUMsUUFBUSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDN0IsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGRvd25sb2FkVGVtcGxhdGUgfSBmcm9tICdnaWdldCc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXInO1xuaW1wb3J0IHsgREVGQVVMVF9BUElfVVJMIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcblxuLy8gUmVtb3RlIHRlbXBsYXRlIHJlcG9zaXRvcnkgLSBzaW5nbGUgc3RhcnRlciB0ZW1wbGF0ZVxuY29uc3QgVEVNUExBVEVfUkVQTyA9ICdnaXRodWI6YnJhaW5maXNoLWFpL2RldmRvYy90ZW1wbGF0ZXMvc3RhcnRlcic7XG5cbi8vIEF2YWlsYWJsZSB0ZW1wbGF0ZSB0eXBlcyAoYWxsIHVzZSB0aGUgc2FtZSBzdGFydGVyIHRlbXBsYXRlLCBqdXN0IGRpZmZlcmVudCBjb25maWdzKVxuY29uc3QgVEVNUExBVEVTID0ge1xuICBiYXNpYzoge1xuICAgIG5hbWU6ICdCYXNpYycsXG4gICAgZGVzY3JpcHRpb246ICdTaW1wbGUgZG9jdW1lbnRhdGlvbiBzaXRlIHdpdGggZ3VpZGVzIGFuZCBwYWdlcycsXG4gICAgY29sb3I6ICcjMTBiOTgxJyxcbiAgfSxcbiAgb3BlbmFwaToge1xuICAgIG5hbWU6ICdPcGVuQVBJJyxcbiAgICBkZXNjcmlwdGlvbjogJ0RvY3VtZW50YXRpb24gd2l0aCBSRVNUIEFQSSByZWZlcmVuY2UgKE9wZW5BUEkvU3dhZ2dlciknLFxuICAgIGNvbG9yOiAnIzEwYjk4MScsXG4gIH0sXG4gIGdyYXBocWw6IHtcbiAgICBuYW1lOiAnR3JhcGhRTCcsXG4gICAgZGVzY3JpcHRpb246ICdEb2N1bWVudGF0aW9uIHdpdGggR3JhcGhRTCBBUEkgcGxheWdyb3VuZCcsXG4gICAgY29sb3I6ICcjZTUzNWFiJyxcbiAgfSxcbn0gYXMgY29uc3Q7XG5cbnR5cGUgVGVtcGxhdGVUeXBlID0ga2V5b2YgdHlwZW9mIFRFTVBMQVRFUztcblxuaW50ZXJmYWNlIENyZWF0ZU9wdGlvbnMge1xuICB0ZW1wbGF0ZT86IFRlbXBsYXRlVHlwZTtcbiAgZ2l0PzogYm9vbGVhbjtcbiAgaW5zdGFsbD86IGJvb2xlYW47XG4gIHVybD86IHN0cmluZztcbiAgc3ViZG9tYWluPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQ2hlY2tTdWJkb21haW5SZXNwb25zZSB7XG4gIGF2YWlsYWJsZTogYm9vbGVhbjtcbiAgZXJyb3I/OiBzdHJpbmc7XG4gIHN1Z2dlc3Rpb24/OiBzdHJpbmc7XG59XG5cbi8vIFNpbXBsZSBwcm9tcHQgaGVscGVyIHVzaW5nIHJlYWRsaW5lXG5hc3luYyBmdW5jdGlvbiBwcm9tcHQocXVlc3Rpb246IHN0cmluZywgZGVmYXVsdFZhbHVlPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVhZGxpbmUgPSBhd2FpdCBpbXBvcnQoJ3JlYWRsaW5lJyk7XG4gIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHtcbiAgICBpbnB1dDogcHJvY2Vzcy5zdGRpbixcbiAgICBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0LFxuICB9KTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBkaXNwbGF5UXVlc3Rpb24gPSBkZWZhdWx0VmFsdWUgXG4gICAgICA/IGAke3F1ZXN0aW9ufSAoJHtkZWZhdWx0VmFsdWV9KTogYFxuICAgICAgOiBgJHtxdWVzdGlvbn06IGA7XG4gICAgXG4gICAgcmwucXVlc3Rpb24oZGlzcGxheVF1ZXN0aW9uLCAoYW5zd2VyKSA9PiB7XG4gICAgICBybC5jbG9zZSgpO1xuICAgICAgcmVzb2x2ZShhbnN3ZXIudHJpbSgpIHx8IGRlZmF1bHRWYWx1ZSB8fCAnJyk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcm9tcHRTZWxlY3QocXVlc3Rpb246IHN0cmluZywgY2hvaWNlczogeyB2YWx1ZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnNvbGUubG9nKGBcXG4ke3F1ZXN0aW9ufVxcbmApO1xuICBjaG9pY2VzLmZvckVhY2goKGNob2ljZSwgaSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAgICR7aSArIDF9LiAke2Nob2ljZS5sYWJlbH1gKTtcbiAgfSk7XG4gIGNvbnNvbGUubG9nKCk7XG4gIFxuICBjb25zdCByZWFkbGluZSA9IGF3YWl0IGltcG9ydCgncmVhZGxpbmUnKTtcbiAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQsXG4gIH0pO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHJsLnF1ZXN0aW9uKCdFbnRlciBudW1iZXI6ICcsIChhbnN3ZXIpID0+IHtcbiAgICAgIHJsLmNsb3NlKCk7XG4gICAgICBjb25zdCBpbmRleCA9IHBhcnNlSW50KGFuc3dlci50cmltKCksIDEwKSAtIDE7XG4gICAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IGNob2ljZXMubGVuZ3RoKSB7XG4gICAgICAgIHJlc29sdmUoY2hvaWNlc1tpbmRleF0udmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRGVmYXVsdCB0byBmaXJzdCBjaG9pY2VcbiAgICAgICAgcmVzb2x2ZShjaG9pY2VzWzBdLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByb21wdENvbmZpcm0ocXVlc3Rpb246IHN0cmluZywgZGVmYXVsdFZhbHVlID0gZmFsc2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgcmVhZGxpbmUgPSBhd2FpdCBpbXBvcnQoJ3JlYWRsaW5lJyk7XG4gIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHtcbiAgICBpbnB1dDogcHJvY2Vzcy5zdGRpbixcbiAgICBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0LFxuICB9KTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBoaW50ID0gZGVmYXVsdFZhbHVlID8gJ1tZL25dJyA6ICdbeS9OXSc7XG4gICAgcmwucXVlc3Rpb24oYCR7cXVlc3Rpb259ICR7aGludH06IGAsIChhbnN3ZXIpID0+IHtcbiAgICAgIHJsLmNsb3NlKCk7XG4gICAgICBjb25zdCBub3JtYWxpemVkID0gYW5zd2VyLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKG5vcm1hbGl6ZWQgPT09ICcnKSB7XG4gICAgICAgIHJlc29sdmUoZGVmYXVsdFZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUobm9ybWFsaXplZCA9PT0gJ3knIHx8IG5vcm1hbGl6ZWQgPT09ICd5ZXMnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvamVjdE5hbWUobmFtZTogc3RyaW5nKTogeyB2YWxpZDogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmcgfSB7XG4gIGlmICghbmFtZSkge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6ICdQcm9qZWN0IG5hbWUgaXMgcmVxdWlyZWQnIH07XG4gIH1cbiAgXG4gIC8vIENoZWNrIGZvciB2YWxpZCBucG0gcGFja2FnZSBuYW1lXG4gIGlmICghL15bYS16MC05XVthLXowLTktLl9dKiQvaS50ZXN0KG5hbWUpKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogJ0ludmFsaWQgcHJvamVjdCBuYW1lLiBVc2UgbG93ZXJjYXNlIGxldHRlcnMsIG51bWJlcnMsIGFuZCBkYXNoZXMuJyB9O1xuICB9XG4gIFxuICByZXR1cm4geyB2YWxpZDogdHJ1ZSB9O1xufVxuXG4vKipcbiAqIEJhc2ljIHN1YmRvbWFpbiBmb3JtYXQgdmFsaWRhdGlvbiAoc2VydmVyIGRvZXMgZnVsbCB2YWxpZGF0aW9uIGluY2x1ZGluZyBibGFja2xpc3QpXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRTdWJkb21haW5Gb3JtYXQoc3ViZG9tYWluOiBzdHJpbmcpOiB7IHZhbGlkOiBib29sZWFuOyBlcnJvcj86IHN0cmluZyB9IHtcbiAgaWYgKCFzdWJkb21haW4pIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiAnU3ViZG9tYWluIGlzIHJlcXVpcmVkJyB9O1xuICB9XG4gIFxuICBpZiAoc3ViZG9tYWluLmxlbmd0aCA8IDMpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiAnU3ViZG9tYWluIG11c3QgYmUgYXQgbGVhc3QgMyBjaGFyYWN0ZXJzJyB9O1xuICB9XG4gIFxuICBpZiAoc3ViZG9tYWluLmxlbmd0aCA+IDYzKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogJ1N1YmRvbWFpbiBtdXN0IGJlIDYzIGNoYXJhY3RlcnMgb3IgbGVzcycgfTtcbiAgfVxuICBcbiAgaWYgKCEvXlthLXowLTldKFthLXowLTktXSpbYS16MC05XSk/JC8udGVzdChzdWJkb21haW4pKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogJ1N1YmRvbWFpbiBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aCBhbHBoYW51bWVyaWMsIGNhbiBjb250YWluIGh5cGhlbnMnIH07XG4gIH1cbiAgXG4gIGlmICgvLS0vLnRlc3Qoc3ViZG9tYWluKSkge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6ICdTdWJkb21haW4gY2Fubm90IGNvbnRhaW4gY29uc2VjdXRpdmUgaHlwaGVucycgfTtcbiAgfVxuICBcbiAgcmV0dXJuIHsgdmFsaWQ6IHRydWUgfTtcbn1cblxuLyoqXG4gKiBDaGVjayBzdWJkb21haW4gYXZhaWxhYmlsaXR5IHZpYSBBUEkgKGFsc28gdmFsaWRhdGVzIGFnYWluc3Qgc2VydmVyIGJsYWNrbGlzdClcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2hlY2tTdWJkb21haW5BdmFpbGFiaWxpdHkoXG4gIHN1YmRvbWFpbjogc3RyaW5nLFxuICBhcGlVcmw6IHN0cmluZ1xuKTogUHJvbWlzZTxDaGVja1N1YmRvbWFpblJlc3BvbnNlPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHthcGlVcmx9L2FwaS9zdWJkb21haW5zL2NoZWNrYCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBzdWJkb21haW4gfSksXG4gICAgfSk7XG4gICAgXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIENoZWNrU3ViZG9tYWluUmVzcG9uc2U7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaCB7XG4gICAgLy8gSWYgQVBJIGlzIHVuYXZhaWxhYmxlLCBhbGxvdyBwcm9jZWVkaW5nICh3aWxsIGZhaWwgYXQgcmVnaXN0cmF0aW9uIGlmIGludmFsaWQpXG4gICAgcmV0dXJuIHsgYXZhaWxhYmxlOiB0cnVlIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0UHJvamVjdE5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5hbWVcbiAgICAucmVwbGFjZSgvLS9nLCAnICcpXG4gICAgLnJlcGxhY2UoL1xcYlxcdy9nLCAoY2hhcikgPT4gY2hhci50b1VwcGVyQ2FzZSgpKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFja2FnZU1hbmFnZXIoKTogc3RyaW5nIHtcbiAgY29uc3QgdXNlckFnZW50ID0gcHJvY2Vzcy5lbnYubnBtX2NvbmZpZ191c2VyX2FnZW50IHx8ICcnO1xuICBcbiAgaWYgKHVzZXJBZ2VudC5zdGFydHNXaXRoKCd5YXJuJykpIHtcbiAgICByZXR1cm4gJ3lhcm4nO1xuICB9XG4gIFxuICBpZiAodXNlckFnZW50LnN0YXJ0c1dpdGgoJ3BucG0nKSkge1xuICAgIHJldHVybiAncG5wbSc7XG4gIH1cbiAgXG4gIHJldHVybiAnbnBtJztcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBkb2NzLmpzb24gY29uZmlndXJhdGlvbiBiYXNlZCBvbiB0ZW1wbGF0ZSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlRG9jc0NvbmZpZyhwcm9qZWN0TmFtZTogc3RyaW5nLCB0ZW1wbGF0ZVR5cGU6IFRlbXBsYXRlVHlwZSk6IG9iamVjdCB7XG4gIGNvbnN0IGZvcm1hdHRlZE5hbWUgPSBmb3JtYXRQcm9qZWN0TmFtZShwcm9qZWN0TmFtZSk7XG4gIGNvbnN0IHRlbXBsYXRlID0gVEVNUExBVEVTW3RlbXBsYXRlVHlwZV07XG4gIFxuICAvLyBCYXNlIGNvbmZpZ3VyYXRpb24gKHNoYXJlZCBhY3Jvc3MgYWxsIHRlbXBsYXRlcylcbiAgY29uc3QgYmFzZUNvbmZpZyA9IHtcbiAgICAkc2NoZW1hOiAnaHR0cHM6Ly9kZXZkb2Muc2gvZG9jcy5qc29uJyxcbiAgICBuYW1lOiBmb3JtYXR0ZWROYW1lLFxuICAgIGZhdmljb246ICcvZmF2aWNvbi5zdmcnLFxuICAgIGxvZ286IHtcbiAgICAgIGxpZ2h0OiAnL2xvZ28uc3ZnJyxcbiAgICAgIGRhcms6ICcvbG9nby5zdmcnLFxuICAgIH0sXG4gICAgY29sb3JzOiB7XG4gICAgICBwcmltYXJ5OiB0ZW1wbGF0ZS5jb2xvcixcbiAgICB9LFxuICAgIG5hdmlnYXRpb246IHtcbiAgICAgIHRhYnM6IFtdIGFzIG9iamVjdFtdLFxuICAgICAgZ2xvYmFsOiB7XG4gICAgICAgIGFuY2hvcnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbmNob3I6ICdHaXRIdWInLFxuICAgICAgICAgICAgaHJlZjogJ2h0dHBzOi8vZ2l0aHViLmNvbS95b3VyLW9yZy95b3VyLXJlcG8nLFxuICAgICAgICAgICAgaWNvbjogJ2dpdGh1Yi1sb2dvJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIC8vIERvY3VtZW50YXRpb24gdGFiIChhbHdheXMgcHJlc2VudClcbiAgY29uc3QgZG9jc1RhYiA9IHtcbiAgICB0YWI6ICdEb2N1bWVudGF0aW9uJyxcbiAgICB0eXBlOiAnZG9jcycsXG4gICAgZ3JvdXBzOiBbXG4gICAgICB7XG4gICAgICAgIGdyb3VwOiAnR2V0dGluZyBTdGFydGVkJyxcbiAgICAgICAgaWNvbjogJ3JvY2tldC1sYXVuY2gnLFxuICAgICAgICBwYWdlczogWydpbmRleCcsICdxdWlja3N0YXJ0J10sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBncm91cDogJ0d1aWRlcycsXG4gICAgICAgIGljb246ICdib29rLW9wZW4nLFxuICAgICAgICBwYWdlczogWydndWlkZXMvb3ZlcnZpZXcnLCAnZ3VpZGVzL2NvbmZpZ3VyYXRpb24nXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcblxuICBiYXNlQ29uZmlnLm5hdmlnYXRpb24udGFicy5wdXNoKGRvY3NUYWIpO1xuXG4gIC8vIEFkZCBBUEkgcmVmZXJlbmNlIHRhYiBiYXNlZCBvbiB0ZW1wbGF0ZSB0eXBlXG4gIGlmICh0ZW1wbGF0ZVR5cGUgPT09ICdvcGVuYXBpJykge1xuICAgIGJhc2VDb25maWcubmF2aWdhdGlvbi50YWJzLnB1c2goe1xuICAgICAgdGFiOiAnQVBJIFJlZmVyZW5jZScsXG4gICAgICB0eXBlOiAnb3BlbmFwaScsXG4gICAgICBwYXRoOiAnL2FwaS1yZWZlcmVuY2UnLFxuICAgICAgdmVyc2lvbnM6IFtcbiAgICAgICAgeyB2ZXJzaW9uOiAndjEnLCBzcGVjOiAnYXBpLXJlZmVyZW5jZS9vcGVuYXBpLmpzb24nLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgICBdLFxuICAgICAgZ3JvdXBzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBncm91cDogJ092ZXJ2aWV3JyxcbiAgICAgICAgICBpY29uOiAnYm9vay1vcGVuJyxcbiAgICAgICAgICBwYWdlczogW1xuICAgICAgICAgICAgJ2FwaS1yZWZlcmVuY2UvaW50cm9kdWN0aW9uJyxcbiAgICAgICAgICAgICdhcGktcmVmZXJlbmNlL2F1dGhlbnRpY2F0aW9uJyxcbiAgICAgICAgICAgICdhcGktcmVmZXJlbmNlL2Vycm9ycycsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgQVBJIHBsYXlncm91bmQgY29uZmlnXG4gICAgKGJhc2VDb25maWcgYXMgYW55KS5hcGkgPSB7XG4gICAgICBiYXNlVXJsOiAnaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20nLFxuICAgICAgcGxheWdyb3VuZDoge1xuICAgICAgICBtb2RlOiAnc2hvdycsXG4gICAgICB9LFxuICAgIH07XG4gIH0gZWxzZSBpZiAodGVtcGxhdGVUeXBlID09PSAnZ3JhcGhxbCcpIHtcbiAgICBiYXNlQ29uZmlnLm5hdmlnYXRpb24udGFicy5wdXNoKHtcbiAgICAgIHRhYjogJ0dyYXBoUUwgQVBJJyxcbiAgICAgIHR5cGU6ICdncmFwaHFsJyxcbiAgICAgIHBhdGg6ICcvZ3JhcGhxbC1hcGknLFxuICAgICAgc2NoZW1hOiAnYXBpLXJlZmVyZW5jZS9zY2hlbWEuZ3JhcGhxbCcsXG4gICAgICBlbmRwb2ludDogJ2h0dHBzOi8vYXBpLmV4YW1wbGUuY29tL2dyYXBocWwnLFxuICAgICAgZ3JvdXBzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBncm91cDogJ092ZXJ2aWV3JyxcbiAgICAgICAgICBpY29uOiAnYm9vay1vcGVuJyxcbiAgICAgICAgICBwYWdlczogW1xuICAgICAgICAgICAgJ2FwaS1yZWZlcmVuY2UvaW50cm9kdWN0aW9uJyxcbiAgICAgICAgICAgICdhcGktcmVmZXJlbmNlL2F1dGhlbnRpY2F0aW9uJyxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBiYXNlQ29uZmlnO1xufVxuXG4vKipcbiAqIENsZWFuIHVwIHVudXNlZCBBUEkgZmlsZXMgYmFzZWQgb24gdGVtcGxhdGUgdHlwZVxuICovXG5mdW5jdGlvbiBjbGVhbnVwVW51c2VkRmlsZXMocmVzb2x2ZWRQYXRoOiBzdHJpbmcsIHRlbXBsYXRlVHlwZTogVGVtcGxhdGVUeXBlKTogdm9pZCB7XG4gIGNvbnN0IGFwaVJlZlBhdGggPSBwYXRoLmpvaW4ocmVzb2x2ZWRQYXRoLCAnYXBpLXJlZmVyZW5jZScpO1xuICBcbiAgaWYgKHRlbXBsYXRlVHlwZSA9PT0gJ2Jhc2ljJykge1xuICAgIC8vIFJlbW92ZSBlbnRpcmUgYXBpLXJlZmVyZW5jZSBmb2xkZXIgZm9yIGJhc2ljIHRlbXBsYXRlXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoYXBpUmVmUGF0aCkpIHtcbiAgICAgIGZzLnJlbW92ZVN5bmMoYXBpUmVmUGF0aCk7XG4gICAgICBsb2dnZXIuZGVidWcoJ1JlbW92ZWQgYXBpLXJlZmVyZW5jZSBmb2xkZXIgKG5vdCBuZWVkZWQgZm9yIGJhc2ljIHRlbXBsYXRlKScpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0ZW1wbGF0ZVR5cGUgPT09ICdvcGVuYXBpJykge1xuICAgIC8vIFJlbW92ZSBHcmFwaFFMIHNjaGVtYSBmb3IgT3BlbkFQSSB0ZW1wbGF0ZVxuICAgIGNvbnN0IGdyYXBocWxTY2hlbWEgPSBwYXRoLmpvaW4oYXBpUmVmUGF0aCwgJ3NjaGVtYS5ncmFwaHFsJyk7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoZ3JhcGhxbFNjaGVtYSkpIHtcbiAgICAgIGZzLnJlbW92ZVN5bmMoZ3JhcGhxbFNjaGVtYSk7XG4gICAgICBsb2dnZXIuZGVidWcoJ1JlbW92ZWQgc2NoZW1hLmdyYXBocWwgKG5vdCBuZWVkZWQgZm9yIE9wZW5BUEkgdGVtcGxhdGUpJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHRlbXBsYXRlVHlwZSA9PT0gJ2dyYXBocWwnKSB7XG4gICAgLy8gUmVtb3ZlIE9wZW5BUEkgc3BlYyBhbmQgZXJyb3JzLm1keCBmb3IgR3JhcGhRTCB0ZW1wbGF0ZVxuICAgIGNvbnN0IG9wZW5hcGlTcGVjID0gcGF0aC5qb2luKGFwaVJlZlBhdGgsICdvcGVuYXBpLmpzb24nKTtcbiAgICBjb25zdCBlcnJvcnNGaWxlID0gcGF0aC5qb2luKGFwaVJlZlBhdGgsICdlcnJvcnMubWR4Jyk7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMob3BlbmFwaVNwZWMpKSB7XG4gICAgICBmcy5yZW1vdmVTeW5jKG9wZW5hcGlTcGVjKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnUmVtb3ZlZCBvcGVuYXBpLmpzb24gKG5vdCBuZWVkZWQgZm9yIEdyYXBoUUwgdGVtcGxhdGUpJyk7XG4gICAgfVxuICAgIGlmIChmcy5leGlzdHNTeW5jKGVycm9yc0ZpbGUpKSB7XG4gICAgICBmcy5yZW1vdmVTeW5jKGVycm9yc0ZpbGUpO1xuICAgICAgbG9nZ2VyLmRlYnVnKCdSZW1vdmVkIGVycm9ycy5tZHggKG5vdCBuZWVkZWQgZm9yIEdyYXBoUUwgdGVtcGxhdGUpJyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGUocHJvamVjdERpcmVjdG9yeTogc3RyaW5nIHwgdW5kZWZpbmVkLCBvcHRpb25zOiBDcmVhdGVPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnNvbGUubG9nKCk7XG4gIGxvZ2dlci5pbmZvKCfwn5CfIENyZWF0ZSBEZXZEb2MgRG9jJyk7XG4gIGNvbnNvbGUubG9nKCk7XG5cbiAgY29uc3QgYXBpVXJsID0gb3B0aW9ucy51cmwgfHwgcHJvY2Vzcy5lbnYuREVWRE9DX0FQSV9VUkwgfHwgREVGQVVMVF9BUElfVVJMO1xuXG4gIC8vIEdldCBwcm9qZWN0IG5hbWUgaWYgbm90IHByb3ZpZGVkXG4gIGxldCBwcm9qZWN0UGF0aCA9IHByb2plY3REaXJlY3Rvcnk7XG5cbiAgaWYgKCFwcm9qZWN0UGF0aCkge1xuICAgIHByb2plY3RQYXRoID0gYXdhaXQgcHJvbXB0KCdXaGF0IGlzIHlvdXIgcHJvamVjdCBuYW1lZD8nLCAnbXktZG9jcycpO1xuICAgIFxuICAgIGlmICghcHJvamVjdFBhdGgpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignUHJvamVjdCBuYW1lIGlzIHJlcXVpcmVkJyk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9XG5cbiAgLy8gVmFsaWRhdGUgcHJvamVjdCBuYW1lXG4gIGNvbnN0IHZhbGlkYXRpb24gPSB2YWxpZGF0ZVByb2plY3ROYW1lKHByb2plY3RQYXRoKTtcbiAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgbG9nZ2VyLmVycm9yKHZhbGlkYXRpb24uZXJyb3IgfHwgJ0ludmFsaWQgcHJvamVjdCBuYW1lJyk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgLy8gR2V0IHRlbXBsYXRlIHNlbGVjdGlvbiBpZiBub3QgcHJvdmlkZWRcbiAgbGV0IHRlbXBsYXRlOiBUZW1wbGF0ZVR5cGUgPSBvcHRpb25zLnRlbXBsYXRlIHx8ICdiYXNpYyc7XG4gIFxuICBpZiAoIW9wdGlvbnMudGVtcGxhdGUpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZUNob2ljZXMgPSBPYmplY3QuZW50cmllcyhURU1QTEFURVMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoe1xuICAgICAgdmFsdWU6IGtleSxcbiAgICAgIGxhYmVsOiBgJHt2YWx1ZS5uYW1lfSAtICR7dmFsdWUuZGVzY3JpcHRpb259YCxcbiAgICB9KSk7XG5cbiAgICB0ZW1wbGF0ZSA9IGF3YWl0IHByb21wdFNlbGVjdCgnV2hpY2ggdGVtcGxhdGUgd291bGQgeW91IGxpa2UgdG8gdXNlPycsIHRlbXBsYXRlQ2hvaWNlcykgYXMgVGVtcGxhdGVUeXBlO1xuICB9XG5cbiAgLy8gUmVzb2x2ZSBmdWxsIHBhdGhcbiAgY29uc3QgcmVzb2x2ZWRQYXRoID0gcGF0aC5yZXNvbHZlKHByb2plY3RQYXRoKTtcbiAgY29uc3QgcHJvamVjdE5hbWUgPSBwYXRoLmJhc2VuYW1lKHJlc29sdmVkUGF0aCk7XG4gIGNvbnN0IHNsdWcgPSBwcm9qZWN0TmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05XSsvZywgJy0nKS5yZXBsYWNlKC9eLXwtJC9nLCAnJyk7XG5cbiAgLy8gR2V0IHN1YmRvbWFpbiAtIHByb21wdCBpZiBub3QgcHJvdmlkZWRcbiAgbGV0IHN1YmRvbWFpbiA9IG9wdGlvbnMuc3ViZG9tYWluO1xuICBcbiAgaWYgKCFzdWJkb21haW4pIHtcbiAgICBjb25zb2xlLmxvZygpO1xuICAgIHN1YmRvbWFpbiA9IGF3YWl0IHByb21wdChgRW50ZXIgc3ViZG9tYWluIGZvciB5b3VyIGRvY3MgKCR7c2x1Z30uZGV2ZG9jLnNoKWAsIHNsdWcpO1xuICAgIHN1YmRvbWFpbiA9IHN1YmRvbWFpbi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05LV0vZywgJy0nKS5yZXBsYWNlKC9eLXwtJC9nLCAnJyk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBzdWJkb21haW4gZm9ybWF0IGxvY2FsbHlcbiAgY29uc3QgZm9ybWF0Q2hlY2sgPSBpc1ZhbGlkU3ViZG9tYWluRm9ybWF0KHN1YmRvbWFpbik7XG4gIGlmICghZm9ybWF0Q2hlY2sudmFsaWQpIHtcbiAgICBsb2dnZXIuZXJyb3IoZm9ybWF0Q2hlY2suZXJyb3IhKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICAvLyBDaGVjayBzdWJkb21haW4gYXZhaWxhYmlsaXR5IHZpYSBBUEkgKHNlcnZlciB2YWxpZGF0ZXMgYmxhY2tsaXN0KVxuICAvLyBMb29wIHVudGlsIHdlIGZpbmQgYW4gYXZhaWxhYmxlIHN1YmRvbWFpblxuICBsZXQgc3ViZG9tYWluQXZhaWxhYmxlID0gZmFsc2U7XG4gIHdoaWxlICghc3ViZG9tYWluQXZhaWxhYmxlKSB7XG4gICAgbG9nZ2VyLmluZm8oYENoZWNraW5nIGlmICR7c3ViZG9tYWlufS5kZXZkb2Muc2ggaXMgYXZhaWxhYmxlLi4uYCk7XG4gICAgY29uc3QgYXZhaWxhYmlsaXR5ID0gYXdhaXQgY2hlY2tTdWJkb21haW5BdmFpbGFiaWxpdHkoc3ViZG9tYWluLCBhcGlVcmwpO1xuICAgIFxuICAgIGlmICghYXZhaWxhYmlsaXR5LmF2YWlsYWJsZSkge1xuICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgIGxvZ2dlci53YXJuKGF2YWlsYWJpbGl0eS5lcnJvciB8fCBgU3ViZG9tYWluIFwiJHtzdWJkb21haW59XCIgaXMgbm90IGF2YWlsYWJsZWApO1xuICAgICAgXG4gICAgICBjb25zdCBzdWdnZXN0aW9uID0gYXZhaWxhYmlsaXR5LnN1Z2dlc3Rpb24gfHwgYCR7c3ViZG9tYWlufS1kb2NzYDtcbiAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICBsb2dnZXIuaW5mbyhgU3VnZ2VzdGlvbjogJHtzdWdnZXN0aW9ufS5kZXZkb2Muc2hgKTtcbiAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICBcbiAgICAgIC8vIFByb21wdCBmb3IgbmV3IHN1YmRvbWFpblxuICAgICAgc3ViZG9tYWluID0gYXdhaXQgcHJvbXB0KCdFbnRlciBhIGRpZmZlcmVudCBzdWJkb21haW4nLCBzdWdnZXN0aW9uKTtcbiAgICAgIHN1YmRvbWFpbiA9IHN1YmRvbWFpbi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05LV0vZywgJy0nKS5yZXBsYWNlKC9eLXwtJC9nLCAnJyk7XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIGZvcm1hdFxuICAgICAgY29uc3QgZm9ybWF0Q2hlY2sgPSBpc1ZhbGlkU3ViZG9tYWluRm9ybWF0KHN1YmRvbWFpbik7XG4gICAgICBpZiAoIWZvcm1hdENoZWNrLnZhbGlkKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihmb3JtYXRDaGVjay5lcnJvciEpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc29sZS5sb2coKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3ViZG9tYWluQXZhaWxhYmxlID0gdHJ1ZTtcbiAgICAgIGxvZ2dlci5zdWNjZXNzKGDinJMgJHtzdWJkb21haW59LmRldmRvYy5zaCBpcyBhdmFpbGFibGUhYCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgZGlyZWN0b3J5IGV4aXN0c1xuICBpZiAoZnMuZXhpc3RzU3luYyhyZXNvbHZlZFBhdGgpKSB7XG4gICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhyZXNvbHZlZFBhdGgpO1xuICAgIGlmIChmaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBvdmVyd3JpdGUgPSBhd2FpdCBwcm9tcHRDb25maXJtKGBEaXJlY3RvcnkgJHtwcm9qZWN0TmFtZX0gaXMgbm90IGVtcHR5LiBDb250aW51ZSBhbnl3YXk/YCwgZmFsc2UpO1xuICAgICAgXG4gICAgICBpZiAoIW92ZXJ3cml0ZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ09wZXJhdGlvbiBjYW5jZWxsZWQnKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNlbGVjdGVkVGVtcGxhdGUgPSBURU1QTEFURVNbdGVtcGxhdGVdO1xuICBjb25zb2xlLmxvZygpO1xuICBsb2dnZXIuaW5mbyhgQ3JlYXRpbmcgYSBuZXcgJHtzZWxlY3RlZFRlbXBsYXRlLm5hbWV9IERldkRvYyBkb2N1bWVudGF0aW9uIHNpdGUgaW4gJHtyZXNvbHZlZFBhdGh9YCk7XG4gIGNvbnNvbGUubG9nKCk7XG5cbiAgLy8gQ3JlYXRlIHByb2plY3QgZGlyZWN0b3J5XG4gIGZzLmVuc3VyZURpclN5bmMocmVzb2x2ZWRQYXRoKTtcblxuICAvLyBEb3dubG9hZCB0ZW1wbGF0ZSBmcm9tIHJlbW90ZSByZXBvc2l0b3J5IChhbHdheXMgdXNlIHN0YXJ0ZXIgdGVtcGxhdGUpXG4gIGxvZ2dlci5pbmZvKCdEb3dubG9hZGluZyB0ZW1wbGF0ZS4uLicpO1xuICBcbiAgdHJ5IHtcbiAgICAvLyBUcnkgdG8gZG93bmxvYWQgZnJvbSByZW1vdGUgcmVwb3NpdG9yeSBmaXJzdFxuICAgIGF3YWl0IGRvd25sb2FkVGVtcGxhdGUoVEVNUExBVEVfUkVQTywge1xuICAgICAgZGlyOiByZXNvbHZlZFBhdGgsXG4gICAgICBmb3JjZTogdHJ1ZSxcbiAgICB9KTtcbiAgICBsb2dnZXIuc3VjY2VzcygnRG93bmxvYWRlZCBzdGFydGVyIHRlbXBsYXRlJyk7XG4gIH0gY2F0Y2ggKGRvd25sb2FkRXJyb3IpIHtcbiAgICAvLyBGYWxsIGJhY2sgdG8gbG9jYWwgdGVtcGxhdGVzIChmb3IgZGV2ZWxvcG1lbnQgb3Igb2ZmbGluZSB1c2FnZSlcbiAgICBsb2dnZXIuZGVidWcoYFJlbW90ZSBkb3dubG9hZCBmYWlsZWQ6ICR7ZG93bmxvYWRFcnJvcn1gKTtcbiAgICBsb2dnZXIuaW5mbygnRmFsbGluZyBiYWNrIHRvIGxvY2FsIHRlbXBsYXRlLi4uJyk7XG4gICAgXG4gICAgY29uc3QgdGVtcGxhdGVEaXIgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnLi4nLCAndGVtcGxhdGVzJywgJ3N0YXJ0ZXInKTtcbiAgICBcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmModGVtcGxhdGVEaXIpKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ1RlbXBsYXRlIFwic3RhcnRlclwiIG5vdCBmb3VuZCcpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBMb29rZWQgZm9yIHRlbXBsYXRlIGF0OiAke3RlbXBsYXRlRGlyfWApO1xuICAgICAgbG9nZ2VyLmRlYnVnKCdSZW1vdGUgc291cmNlOiAnICsgVEVNUExBVEVfUkVQTyk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgZnMuY29weVN5bmModGVtcGxhdGVEaXIsIHJlc29sdmVkUGF0aCwgeyBvdmVyd3JpdGU6IHRydWUgfSk7XG4gICAgbG9nZ2VyLnN1Y2Nlc3MoJ0NvcGllZCBsb2NhbCB0ZW1wbGF0ZScpO1xuICB9XG5cbiAgLy8gVXBkYXRlIHBhY2thZ2UuanNvbiB3aXRoIHByb2plY3QgbmFtZVxuICBjb25zdCBwa2dQYXRoID0gcGF0aC5qb2luKHJlc29sdmVkUGF0aCwgJ3BhY2thZ2UuanNvbicpO1xuICBpZiAoZnMuZXhpc3RzU3luYyhwa2dQYXRoKSkge1xuICAgIGNvbnN0IHBrZyA9IGZzLnJlYWRKc29uU3luYyhwa2dQYXRoKTtcbiAgICBwa2cubmFtZSA9IHByb2plY3ROYW1lO1xuICAgIGZzLndyaXRlSnNvblN5bmMocGtnUGF0aCwgcGtnLCB7IHNwYWNlczogMiB9KTtcbiAgfVxuXG4gIC8vIEdlbmVyYXRlIGRvY3MuanNvbiBiYXNlZCBvbiB0ZW1wbGF0ZSB0eXBlXG4gIGNvbnN0IGRvY3NDb25maWcgPSBnZW5lcmF0ZURvY3NDb25maWcocHJvamVjdE5hbWUsIHRlbXBsYXRlKTtcbiAgY29uc3QgZG9jc1BhdGggPSBwYXRoLmpvaW4ocmVzb2x2ZWRQYXRoLCAnZG9jcy5qc29uJyk7XG4gIGZzLndyaXRlSnNvblN5bmMoZG9jc1BhdGgsIGRvY3NDb25maWcsIHsgc3BhY2VzOiAyIH0pO1xuICBsb2dnZXIuc3VjY2VzcyhgR2VuZXJhdGVkIGRvY3MuanNvbiBmb3IgJHtzZWxlY3RlZFRlbXBsYXRlLm5hbWV9IHRlbXBsYXRlYCk7XG5cbiAgLy8gVXBkYXRlIHRoZW1lLmpzb24gd2l0aCB0ZW1wbGF0ZSBjb2xvclxuICBjb25zdCB0aGVtZVBhdGggPSBwYXRoLmpvaW4ocmVzb2x2ZWRQYXRoLCAndGhlbWUuanNvbicpO1xuICBpZiAoZnMuZXhpc3RzU3luYyh0aGVtZVBhdGgpKSB7XG4gICAgY29uc3QgdGhlbWUgPSBmcy5yZWFkSnNvblN5bmModGhlbWVQYXRoKTtcbiAgICB0aGVtZS5jb2xvcnMgPSB7XG4gICAgICBwcmltYXJ5OiBzZWxlY3RlZFRlbXBsYXRlLmNvbG9yLFxuICAgICAgcHJpbWFyeUxpZ2h0OiBzZWxlY3RlZFRlbXBsYXRlLmNvbG9yLFxuICAgICAgcHJpbWFyeURhcms6IHNlbGVjdGVkVGVtcGxhdGUuY29sb3IsXG4gICAgfTtcbiAgICBmcy53cml0ZUpzb25TeW5jKHRoZW1lUGF0aCwgdGhlbWUsIHsgc3BhY2VzOiAyIH0pO1xuICB9XG5cbiAgLy8gQ2xlYW4gdXAgdW51c2VkIGZpbGVzIGJhc2VkIG9uIHRlbXBsYXRlIHR5cGVcbiAgY2xlYW51cFVudXNlZEZpbGVzKHJlc29sdmVkUGF0aCwgdGVtcGxhdGUpO1xuXG4gIC8vIENyZWF0ZSAuZGV2ZG9jLmpzb24gd2l0aCBzdWJkb21haW4gKG5vdCByZWdpc3RlcmVkIHVudGlsIGRlcGxveSlcbiAgLy8gVGhlIHN1YmRvbWFpbiB3aWxsIG9ubHkgYmUgcmVzZXJ2ZWQgd2hlbiB0aGUgdXNlciBhY3R1YWxseSBkZXBsb3lzXG4gIGNvbnN0IGRldmRvY0NvbmZpZ1BhdGggPSBwYXRoLmpvaW4ocmVzb2x2ZWRQYXRoLCAnLmRldmRvYy5qc29uJyk7XG4gIFxuICBjb25zdCBkZXZkb2NDb25maWcgPSB7XG4gICAgcHJvamVjdElkOiBgJHtzbHVnfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA4KX1gLFxuICAgIG5hbWU6IGZvcm1hdFByb2plY3ROYW1lKHByb2plY3ROYW1lKSxcbiAgICBzbHVnOiBzbHVnLFxuICAgIHN1YmRvbWFpbjogc3ViZG9tYWluLFxuICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIC8vIE5vdGU6IE5vIGFwaUtleSAtIHN1YmRvbWFpbiBpcyBub3QgcmVzZXJ2ZWQgdW50aWwgZGVwbG95XG4gIH07XG4gIGZzLndyaXRlSnNvblN5bmMoZGV2ZG9jQ29uZmlnUGF0aCwgZGV2ZG9jQ29uZmlnLCB7IHNwYWNlczogMiB9KTtcbiAgbG9nZ2VyLnN1Y2Nlc3MoJ0NyZWF0ZWQgLmRldmRvYy5qc29uJyk7XG4gIGNvbnNvbGUubG9nKCk7XG4gIGNvbnNvbGUubG9nKCcgIFN1YmRvbWFpbjonLCBgJHtzdWJkb21haW59LmRldmRvYy5zaGApO1xuICBjb25zb2xlLmxvZygnICBTdGF0dXM6JywgJ05vdCB5ZXQgZGVwbG95ZWQgKHN1YmRvbWFpbiB3aWxsIGJlIHJlc2VydmVkIG9uIGZpcnN0IGRlcGxveSknKTtcblxuICAvLyBJbml0aWFsaXplIGdpdFxuICBpZiAob3B0aW9ucy5naXQgIT09IGZhbHNlKSB7XG4gICAgbG9nZ2VyLmluZm8oJ0luaXRpYWxpemluZyBnaXQgcmVwb3NpdG9yeS4uLicpO1xuICAgIHRyeSB7XG4gICAgICBleGVjU3luYygnZ2l0IGluaXQnLCB7IGN3ZDogcmVzb2x2ZWRQYXRoLCBzdGRpbzogJ2lnbm9yZScgfSk7XG4gICAgICBleGVjU3luYygnZ2l0IGFkZCAtQScsIHsgY3dkOiByZXNvbHZlZFBhdGgsIHN0ZGlvOiAnaWdub3JlJyB9KTtcbiAgICAgIGV4ZWNTeW5jKCdnaXQgY29tbWl0IC1tIFwiSW5pdGlhbCBjb21taXQgZnJvbSBkZXZkb2MgY3JlYXRlXCInLCB7XG4gICAgICAgIGN3ZDogcmVzb2x2ZWRQYXRoLFxuICAgICAgICBzdGRpbzogJ2lnbm9yZScsXG4gICAgICB9KTtcbiAgICAgIGxvZ2dlci5zdWNjZXNzKCdHaXQgcmVwb3NpdG9yeSBpbml0aWFsaXplZCcpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgbG9nZ2VyLndhcm4oJ0NvdWxkIG5vdCBpbml0aWFsaXplIGdpdCByZXBvc2l0b3J5Jyk7XG4gICAgfVxuICB9XG5cbiAgLy8gSW5zdGFsbCBkZXBlbmRlbmNpZXNcbiAgaWYgKG9wdGlvbnMuaW5zdGFsbCAhPT0gZmFsc2UpIHtcbiAgICBsb2dnZXIuaW5mbygnSW5zdGFsbGluZyBkZXBlbmRlbmNpZXMuLi4nKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFja2FnZU1hbmFnZXIgPSBnZXRQYWNrYWdlTWFuYWdlcigpO1xuICAgICAgZXhlY1N5bmMoYCR7cGFja2FnZU1hbmFnZXJ9IGluc3RhbGxgLCB7XG4gICAgICAgIGN3ZDogcmVzb2x2ZWRQYXRoLFxuICAgICAgICBzdGRpbzogJ2luaGVyaXQnLFxuICAgICAgfSk7XG4gICAgICBsb2dnZXIuc3VjY2VzcygnRGVwZW5kZW5jaWVzIGluc3RhbGxlZCcpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgbG9nZ2VyLndhcm4oJ0NvdWxkIG5vdCBpbnN0YWxsIGRlcGVuZGVuY2llcycpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN1Y2Nlc3MgbWVzc2FnZVxuICBjb25zb2xlLmxvZygpO1xuICBsb2dnZXIuc3VjY2VzcyhgQ3JlYXRlZCAke3Byb2plY3ROYW1lfSBhdCAke3Jlc29sdmVkUGF0aH1gKTtcbiAgY29uc29sZS5sb2coKTtcbiAgY29uc29sZS5sb2coJ1lvdXIgZG9jcyB3aWxsIGJlIGF2YWlsYWJsZSBhdDonKTtcbiAgY29uc29sZS5sb2coYCAgaHR0cHM6Ly8ke3N1YmRvbWFpbn0uZGV2ZG9jLnNoYCk7XG4gIGNvbnNvbGUubG9nKCk7XG4gIGxvZ2dlci5pbmZvKCdOb3RlOiBUaGUgc3ViZG9tYWluIHdpbGwgYmUgcmVzZXJ2ZWQgd2hlbiB5b3UgcnVuIFwiZGV2ZG9jIGRlcGxveVwiJyk7XG4gIGNvbnNvbGUubG9nKCk7XG4gIGNvbnNvbGUubG9nKCdJbnNpZGUgdGhhdCBkaXJlY3RvcnksIHlvdSBjYW4gcnVuIHNldmVyYWwgY29tbWFuZHM6Jyk7XG4gIGNvbnNvbGUubG9nKCk7XG4gIGNvbnNvbGUubG9nKCcgIG5wbSBydW4gZGV2Jyk7XG4gIGNvbnNvbGUubG9nKCcgICAgU3RhcnRzIHRoZSBkZXZlbG9wbWVudCBzZXJ2ZXIuJyk7XG4gIGNvbnNvbGUubG9nKCk7XG4gIGNvbnNvbGUubG9nKCcgIGRldmRvYyBkZXBsb3knKTtcbiAgY29uc29sZS5sb2coJyAgICBEZXBsb3lzIGFuZCBjbGFpbXMgeW91ciBzdWJkb21haW4uJyk7XG4gIGNvbnNvbGUubG9nKCk7XG4gIGNvbnNvbGUubG9nKCdXZSBzdWdnZXN0IHRoYXQgeW91IGJlZ2luIGJ5IHR5cGluZzonKTtcbiAgY29uc29sZS5sb2coKTtcbiAgY29uc29sZS5sb2coYCAgY2QgJHtwcm9qZWN0TmFtZX1gKTtcbiAgY29uc29sZS5sb2coJyAgbnBtIHJ1biBkZXYnKTtcbiAgY29uc29sZS5sb2coKTtcbiAgY29uc29sZS5sb2coJ0hhcHB5IGRvY3VtZW50aW5nISDwn5OaJyk7XG4gIGNvbnNvbGUubG9nKCk7XG59XG4iXX0=
679
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS9jb21tYW5kcy9jcmVhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrY0Esd0JBd1NDO0FBMXVCRCxpREFBeUM7QUFDekMsZ0RBQXdCO0FBQ3hCLHdEQUEwQjtBQUMxQixpQ0FBeUM7QUFDekMsK0NBQTRDO0FBQzVDLCtDQUFrRDtBQUVsRCx1REFBdUQ7QUFDdkQsTUFBTSxhQUFhLEdBQUcsOENBQThDLENBQUM7QUFFckUsdUZBQXVGO0FBQ3ZGLE1BQU0sU0FBUyxHQUFHO0lBQ2hCLEtBQUssRUFBRTtRQUNMLElBQUksRUFBRSxPQUFPO1FBQ2IsV0FBVyxFQUFFLGlEQUFpRDtRQUM5RCxLQUFLLEVBQUUsU0FBUztLQUNqQjtJQUNELE9BQU8sRUFBRTtRQUNQLElBQUksRUFBRSxTQUFTO1FBQ2YsV0FBVyxFQUFFLHlEQUF5RDtRQUN0RSxLQUFLLEVBQUUsU0FBUztLQUNqQjtJQUNELE9BQU8sRUFBRTtRQUNQLElBQUksRUFBRSxTQUFTO1FBQ2YsV0FBVyxFQUFFLDJDQUEyQztRQUN4RCxLQUFLLEVBQUUsU0FBUztLQUNqQjtDQUNPLENBQUM7QUFtQlgsc0NBQXNDO0FBQ3RDLEtBQUssVUFBVSxNQUFNLENBQUMsUUFBZ0IsRUFBRSxZQUFxQjtJQUMzRCxNQUFNLFFBQVEsR0FBRyx3REFBYSxVQUFVLEdBQUMsQ0FBQztJQUMxQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO1FBQ2xDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztRQUNwQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07S0FDdkIsQ0FBQyxDQUFDO0lBRUgsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQzdCLE1BQU0sZUFBZSxHQUFHLFlBQVk7WUFDbEMsQ0FBQyxDQUFDLEdB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cnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBkb3dubG9hZFRlbXBsYXRlIH0gZnJvbSAnZ2lnZXQnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyJztcbmltcG9ydCB7IERFRkFVTFRfQVBJX1VSTCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5cbi8vIFJlbW90ZSB0ZW1wbGF0ZSByZXBvc2l0b3J5IC0gc2luZ2xlIHN0YXJ0ZXIgdGVtcGxhdGVcbmNvbnN0IFRFTVBMQVRFX1JFUE8gPSAnZ2l0aHViOmJyYWluZmlzaC1haS9kZXZkb2MvdGVtcGxhdGVzL3N0YXJ0ZXInO1xuXG4vLyBBdmFpbGFibGUgdGVtcGxhdGUgdHlwZXMgKGFsbCB1c2UgdGhlIHNhbWUgc3RhcnRlciB0ZW1wbGF0ZSwganVzdCBkaWZmZXJlbnQgY29uZmlncylcbmNvbnN0IFRFTVBMQVRFUyA9IHtcbiAgYmFzaWM6IHtcbiAgICBuYW1lOiAnQmFzaWMnLFxuICAgIGRlc2NyaXB0aW9uOiAnU2ltcGxlIGRvY3VtZW50YXRpb24gc2l0ZSB3aXRoIGd1aWRlcyBhbmQgcGFnZXMnLFxuICAgIGNvbG9yOiAnIzEwYjk4MScsXG4gIH0sXG4gIG9wZW5hcGk6IHtcbiAgICBuYW1lOiAnT3BlbkFQSScsXG4gICAgZGVzY3JpcHRpb246ICdEb2N1bWVudGF0aW9uIHdpdGggUkVTVCBBUEkgcmVmZXJlbmNlIChPcGVuQVBJL1N3YWdnZXIpJyxcbiAgICBjb2xvcjogJyMxMGI5ODEnLFxuICB9LFxuICBncmFwaHFsOiB7XG4gICAgbmFtZTogJ0dyYXBoUUwnLFxuICAgIGRlc2NyaXB0aW9uOiAnRG9jdW1lbnRhdGlvbiB3aXRoIEdyYXBoUUwgQVBJIHBsYXlncm91bmQnLFxuICAgIGNvbG9yOiAnI2U1MzVhYicsXG4gIH0sXG59IGFzIGNvbnN0O1xuXG50eXBlIFRlbXBsYXRlVHlwZSA9IGtleW9mIHR5cGVvZiBURU1QTEFURVM7XG5cbmludGVyZmFjZSBDcmVhdGVPcHRpb25zIHtcbiAgdGVtcGxhdGU/OiBUZW1wbGF0ZVR5cGU7XG4gIGdpdD86IGJvb2xlYW47XG4gIGluc3RhbGw/OiBib29sZWFuO1xuICB1cmw/OiBzdHJpbmc7XG4gIHN1YmRvbWFpbj86IHN0cmluZztcbiAgYWk/OiBib29sZWFuIHwgJ2NsYXVkZScgfCAnY3Vyc29yJyB8ICdib3RoJztcbn1cblxuaW50ZXJmYWNlIENoZWNrU3ViZG9tYWluUmVzcG9uc2Uge1xuICBhdmFpbGFibGU6IGJvb2xlYW47XG4gIGVycm9yPzogc3RyaW5nO1xuICBzdWdnZXN0aW9uPzogc3RyaW5nO1xufVxuXG4vLyBTaW1wbGUgcHJvbXB0IGhlbHBlciB1c2luZyByZWFkbGluZVxuYXN5bmMgZnVuY3Rpb24gcHJvbXB0KHF1ZXN0aW9uOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlYWRsaW5lID0gYXdhaXQgaW1wb3J0KCdyZWFkbGluZScpO1xuICBjb25zdCBybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XG4gICAgaW5wdXQ6IHByb2Nlc3Muc3RkaW4sXG4gICAgb3V0cHV0OiBwcm9jZXNzLnN0ZG91dCxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgZGlzcGxheVF1ZXN0aW9uID0gZGVmYXVsdFZhbHVlIFxuICAgICAgPyBgJHtxdWVzdGlvbn0gKCR7ZGVmYXVsdFZhbHVlfSk6IGBcbiAgICAgIDogYCR7cXVlc3Rpb259OiBgO1xuICAgIFxuICAgIHJsLnF1ZXN0aW9uKGRpc3BsYXlRdWVzdGlvbiwgKGFuc3dlcikgPT4ge1xuICAgICAgcmwuY2xvc2UoKTtcbiAgICAgIHJlc29sdmUoYW5zd2VyLnRyaW0oKSB8fCBkZWZhdWx0VmFsdWUgfHwgJycpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJvbXB0U2VsZWN0KHF1ZXN0aW9uOiBzdHJpbmcsIGNob2ljZXM6IHsgdmFsdWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9W10pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zb2xlLmxvZyhgXFxuJHtxdWVzdGlvbn1cXG5gKTtcbiAgY2hvaWNlcy5mb3JFYWNoKChjaG9pY2UsIGkpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgICAke2kgKyAxfS4gJHtjaG9pY2UubGFiZWx9YCk7XG4gIH0pO1xuICBjb25zb2xlLmxvZygpO1xuICBcbiAgY29uc3QgcmVhZGxpbmUgPSBhd2FpdCBpbXBvcnQoJ3JlYWRsaW5lJyk7XG4gIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHtcbiAgICBpbnB1dDogcHJvY2Vzcy5zdGRpbixcbiAgICBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0LFxuICB9KTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBybC5xdWVzdGlvbignRW50ZXIgbnVtYmVyOiAnLCAoYW5zd2VyKSA9PiB7XG4gICAgICBybC5jbG9zZSgpO1xuICAgICAgY29uc3QgaW5kZXggPSBwYXJzZUludChhbnN3ZXIudHJpbSgpLCAxMCkgLSAxO1xuICAgICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCBjaG9pY2VzLmxlbmd0aCkge1xuICAgICAgICByZXNvbHZlKGNob2ljZXNbaW5kZXhdLnZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIERlZmF1bHQgdG8gZmlyc3QgY2hvaWNlXG4gICAgICAgIHJlc29sdmUoY2hvaWNlc1swXS52YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcm9tcHRDb25maXJtKHF1ZXN0aW9uOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZSA9IGZhbHNlKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHJlYWRsaW5lID0gYXdhaXQgaW1wb3J0KCdyZWFkbGluZScpO1xuICBjb25zdCBybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XG4gICAgaW5wdXQ6IHByb2Nlc3Muc3RkaW4sXG4gICAgb3V0cHV0OiBwcm9jZXNzLnN0ZG91dCxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgaGludCA9IGRlZmF1bHRWYWx1ZSA/ICdbWS9uXScgOiAnW3kvTl0nO1xuICAgIHJsLnF1ZXN0aW9uKGAke3F1ZXN0aW9ufSAke2hpbnR9OiBgLCAoYW5zd2VyKSA9PiB7XG4gICAgICBybC5jbG9zZSgpO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGFuc3dlci50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChub3JtYWxpemVkID09PSAnJykge1xuICAgICAgICByZXNvbHZlKGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKG5vcm1hbGl6ZWQgPT09ICd5JyB8fCBub3JtYWxpemVkID09PSAneWVzJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb2plY3ROYW1lKG5hbWU6IHN0cmluZyk6IHsgdmFsaWQ6IGJvb2xlYW47IGVycm9yPzogc3RyaW5nIH0ge1xuICBpZiAoIW5hbWUpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiAnUHJvamVjdCBuYW1lIGlzIHJlcXVpcmVkJyB9O1xuICB9XG4gIFxuICAvLyBDaGVjayBmb3IgdmFsaWQgbnBtIHBhY2thZ2UgbmFtZVxuICBpZiAoIS9eW2EtejAtOV1bYS16MC05LS5fXSokL2kudGVzdChuYW1lKSkge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6ICdJbnZhbGlkIHByb2plY3QgbmFtZS4gVXNlIGxvd2VyY2FzZSBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgZGFzaGVzLicgfTtcbiAgfVxuICBcbiAgcmV0dXJuIHsgdmFsaWQ6IHRydWUgfTtcbn1cblxuLyoqXG4gKiBCYXNpYyBzdWJkb21haW4gZm9ybWF0IHZhbGlkYXRpb24gKHNlcnZlciBkb2VzIGZ1bGwgdmFsaWRhdGlvbiBpbmNsdWRpbmcgYmxhY2tsaXN0KVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkU3ViZG9tYWluRm9ybWF0KHN1YmRvbWFpbjogc3RyaW5nKTogeyB2YWxpZDogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmcgfSB7XG4gIGlmICghc3ViZG9tYWluKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogJ1N1YmRvbWFpbiBpcyByZXF1aXJlZCcgfTtcbiAgfVxuICBcbiAgaWYgKHN1YmRvbWFpbi5sZW5ndGggPCAzKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogJ1N1YmRvbWFpbiBtdXN0IGJlIGF0IGxlYXN0IDMgY2hhcmFjdGVycycgfTtcbiAgfVxuICBcbiAgaWYgKHN1YmRvbWFpbi5sZW5ndGggPiA2Mykge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6ICdTdWJkb21haW4gbXVzdCBiZSA2MyBjaGFyYWN0ZXJzIG9yIGxlc3MnIH07XG4gIH1cbiAgXG4gIGlmICghL15bYS16MC05XShbYS16MC05LV0qW2EtejAtOV0pPyQvLnRlc3Qoc3ViZG9tYWluKSkge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6ICdTdWJkb21haW4gbXVzdCBzdGFydCBhbmQgZW5kIHdpdGggYWxwaGFudW1lcmljLCBjYW4gY29udGFpbiBoeXBoZW5zJyB9O1xuICB9XG4gIFxuICBpZiAoLy0tLy50ZXN0KHN1YmRvbWFpbikpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiAnU3ViZG9tYWluIGNhbm5vdCBjb250YWluIGNvbnNlY3V0aXZlIGh5cGhlbnMnIH07XG4gIH1cbiAgXG4gIHJldHVybiB7IHZhbGlkOiB0cnVlIH07XG59XG5cbi8qKlxuICogQ2hlY2sgc3ViZG9tYWluIGF2YWlsYWJpbGl0eSB2aWEgQVBJIChhbHNvIHZhbGlkYXRlcyBhZ2FpbnN0IHNlcnZlciBibGFja2xpc3QpXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNoZWNrU3ViZG9tYWluQXZhaWxhYmlsaXR5KFxuICBzdWJkb21haW46IHN0cmluZyxcbiAgYXBpVXJsOiBzdHJpbmdcbik6IFByb21pc2U8Q2hlY2tTdWJkb21haW5SZXNwb25zZT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7YXBpVXJsfS9hcGkvc3ViZG9tYWlucy9jaGVja2AsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgc3ViZG9tYWluIH0pLFxuICAgIH0pO1xuICAgIFxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBDaGVja1N1YmRvbWFpblJlc3BvbnNlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0gY2F0Y2gge1xuICAgIC8vIElmIEFQSSBpcyB1bmF2YWlsYWJsZSwgYWxsb3cgcHJvY2VlZGluZyAod2lsbCBmYWlsIGF0IHJlZ2lzdHJhdGlvbiBpZiBpbnZhbGlkKVxuICAgIHJldHVybiB7IGF2YWlsYWJsZTogdHJ1ZSB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFByb2plY3ROYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBuYW1lXG4gICAgLnJlcGxhY2UoLy0vZywgJyAnKVxuICAgIC5yZXBsYWNlKC9cXGJcXHcvZywgKGNoYXIpID0+IGNoYXIudG9VcHBlckNhc2UoKSk7XG59XG5cbmZ1bmN0aW9uIGdldFBhY2thZ2VNYW5hZ2VyKCk6IHN0cmluZyB7XG4gIGNvbnN0IHVzZXJBZ2VudCA9IHByb2Nlc3MuZW52Lm5wbV9jb25maWdfdXNlcl9hZ2VudCB8fCAnJztcbiAgXG4gIGlmICh1c2VyQWdlbnQuc3RhcnRzV2l0aCgneWFybicpKSB7XG4gICAgcmV0dXJuICd5YXJuJztcbiAgfVxuICBcbiAgaWYgKHVzZXJBZ2VudC5zdGFydHNXaXRoKCdwbnBtJykpIHtcbiAgICByZXR1cm4gJ3BucG0nO1xuICB9XG4gIFxuICByZXR1cm4gJ25wbSc7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgZG9jcy5qc29uIGNvbmZpZ3VyYXRpb24gYmFzZWQgb24gdGVtcGxhdGUgdHlwZVxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZURvY3NDb25maWcocHJvamVjdE5hbWU6IHN0cmluZywgdGVtcGxhdGVUeXBlOiBUZW1wbGF0ZVR5cGUpOiBvYmplY3Qge1xuICBjb25zdCBmb3JtYXR0ZWROYW1lID0gZm9ybWF0UHJvamVjdE5hbWUocHJvamVjdE5hbWUpO1xuICBjb25zdCB0ZW1wbGF0ZSA9IFRFTVBMQVRFU1t0ZW1wbGF0ZVR5cGVdO1xuICBcbiAgLy8gQmFzZSBjb25maWd1cmF0aW9uIChzaGFyZWQgYWNyb3NzIGFsbCB0ZW1wbGF0ZXMpXG4gIGNvbnN0IGJhc2VDb25maWcgPSB7XG4gICAgJHNjaGVtYTogJ2h0dHBzOi8vZGV2ZG9jLnNoL2RvY3MuanNvbicsXG4gICAgbmFtZTogZm9ybWF0dGVkTmFtZSxcbiAgICBmYXZpY29uOiAnL2Zhdmljb24uc3ZnJyxcbiAgICBsb2dvOiB7XG4gICAgICBsaWdodDogJy9sb2dvLnN2ZycsXG4gICAgICBkYXJrOiAnL2xvZ28uc3ZnJyxcbiAgICB9LFxuICAgIGNvbG9yczoge1xuICAgICAgcHJpbWFyeTogdGVtcGxhdGUuY29sb3IsXG4gICAgfSxcbiAgICBuYXZpZ2F0aW9uOiB7XG4gICAgICB0YWJzOiBbXSBhcyBvYmplY3RbXSxcbiAgICAgIGdsb2JhbDoge1xuICAgICAgICBhbmNob3JzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYW5jaG9yOiAnR2l0SHViJyxcbiAgICAgICAgICAgIGhyZWY6ICdodHRwczovL2dpdGh1Yi5jb20veW91ci1vcmcveW91ci1yZXBvJyxcbiAgICAgICAgICAgIGljb246ICdnaXRodWItbG9nbycsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICAvLyBEb2N1bWVudGF0aW9uIHRhYiAoYWx3YXlzIHByZXNlbnQpXG4gIGNvbnN0IGRvY3NUYWIgPSB7XG4gICAgdGFiOiAnRG9jdW1lbnRhdGlvbicsXG4gICAgdHlwZTogJ2RvY3MnLFxuICAgIGdyb3VwczogW1xuICAgICAge1xuICAgICAgICBncm91cDogJ0dldHRpbmcgU3RhcnRlZCcsXG4gICAgICAgIGljb246ICdyb2NrZXQtbGF1bmNoJyxcbiAgICAgICAgcGFnZXM6IFsnaW5kZXgnLCAncXVpY2tzdGFydCddLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZ3JvdXA6ICdHdWlkZXMnLFxuICAgICAgICBpY29uOiAnYm9vay1vcGVuJyxcbiAgICAgICAgcGFnZXM6IFsnZ3VpZGVzL292ZXJ2aWV3JywgJ2d1aWRlcy9jb25maWd1cmF0aW9uJ10sXG4gICAgICB9LFxuICAgIF0sXG4gIH07XG5cbiAgYmFzZUNvbmZpZy5uYXZpZ2F0aW9uLnRhYnMucHVzaChkb2NzVGFiKTtcblxuICAvLyBBZGQgQVBJIHJlZmVyZW5jZSB0YWIgYmFzZWQgb24gdGVtcGxhdGUgdHlwZVxuICBpZiAodGVtcGxhdGVUeXBlID09PSAnb3BlbmFwaScpIHtcbiAgICBiYXNlQ29uZmlnLm5hdmlnYXRpb24udGFicy5wdXNoKHtcbiAgICAgIHRhYjogJ0FQSSBSZWZlcmVuY2UnLFxuICAgICAgdHlwZTogJ29wZW5hcGknLFxuICAgICAgcGF0aDogJy9hcGktcmVmZXJlbmNlJyxcbiAgICAgIHZlcnNpb25zOiBbXG4gICAgICAgIHsgdmVyc2lvbjogJ3YxJywgc3BlYzogJ2FwaS1yZWZlcmVuY2Uvb3BlbmFwaS5qc29uJywgZGVmYXVsdDogdHJ1ZSB9LFxuICAgICAgXSxcbiAgICAgIGdyb3VwczogW1xuICAgICAgICB7XG4gICAgICAgICAgZ3JvdXA6ICdPdmVydmlldycsXG4gICAgICAgICAgaWNvbjogJ2Jvb2stb3BlbicsXG4gICAgICAgICAgcGFnZXM6IFtcbiAgICAgICAgICAgICdhcGktcmVmZXJlbmNlL2ludHJvZHVjdGlvbicsXG4gICAgICAgICAgICAnYXBpLXJlZmVyZW5jZS9hdXRoZW50aWNhdGlvbicsXG4gICAgICAgICAgICAnYXBpLXJlZmVyZW5jZS9lcnJvcnMnLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gQWRkIEFQSSBwbGF5Z3JvdW5kIGNvbmZpZ1xuICAgIChiYXNlQ29uZmlnIGFzIGFueSkuYXBpID0ge1xuICAgICAgYmFzZVVybDogJ2h0dHBzOi8vYXBpLmV4YW1wbGUuY29tJyxcbiAgICAgIHBsYXlncm91bmQ6IHtcbiAgICAgICAgbW9kZTogJ3Nob3cnLFxuICAgICAgfSxcbiAgICB9O1xuICB9IGVsc2UgaWYgKHRlbXBsYXRlVHlwZSA9PT0gJ2dyYXBocWwnKSB7XG4gICAgYmFzZUNvbmZpZy5uYXZpZ2F0aW9uLnRhYnMucHVzaCh7XG4gICAgICB0YWI6ICdHcmFwaFFMIEFQSScsXG4gICAgICB0eXBlOiAnZ3JhcGhxbCcsXG4gICAgICBwYXRoOiAnL2dyYXBocWwtYXBpJyxcbiAgICAgIHNjaGVtYTogJ2FwaS1yZWZlcmVuY2Uvc2NoZW1hLmdyYXBocWwnLFxuICAgICAgZW5kcG9pbnQ6ICdodHRwczovL2FwaS5leGFtcGxlLmNvbS9ncmFwaHFsJyxcbiAgICAgIGdyb3VwczogW1xuICAgICAgICB7XG4gICAgICAgICAgZ3JvdXA6ICdPdmVydmlldycsXG4gICAgICAgICAgaWNvbjogJ2Jvb2stb3BlbicsXG4gICAgICAgICAgcGFnZXM6IFtcbiAgICAgICAgICAgICdhcGktcmVmZXJlbmNlL2ludHJvZHVjdGlvbicsXG4gICAgICAgICAgICAnYXBpLXJlZmVyZW5jZS9hdXRoZW50aWNhdGlvbicsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gYmFzZUNvbmZpZztcbn1cblxuLy8gQ2xhdWRlIENvZGUgc2tpbGxzIHRvIGNyZWF0ZVxuY29uc3QgQ0xBVURFX1NLSUxMUyA9IFtcbiAgJ2Jvb3RzdHJhcC1kb2NzJyxcbiAgJ21pZ3JhdGUtZG9jcycsXG4gICdpbXBvcnQtYXBpLXNwZWMnLFxuICAnc3luYy1kb2NzJyxcbiAgJ2NoZWNrLWRvY3MnLFxuICAnY3JlYXRlLWRvYy1wYWdlJyxcbiAgJ3VwZGF0ZS1kb2NzLWpzb24nLFxuICAnZ2VuZXJhdGUtYXBpLWRvY3MnLFxuICAnZG9jcy1mcm9tLWNvZGUnLFxuXTtcblxuLy8gQ3Vyc29yIHJ1bGVzIHRvIGNyZWF0ZVxuY29uc3QgQ1VSU09SX1JVTEVTID0gW1xuICAnZGV2ZG9jLm1kYycsXG4gICdkZXZkb2MtYm9vdHN0cmFwLm1kYycsXG4gICdkZXZkb2MtbWlncmF0ZS5tZGMnLFxuICAnZGV2ZG9jLXN5bmMubWRjJyxcbl07XG5cbi8qKlxuICogR2V0IHRoZSBBSSBhZ2VudHMgdGVtcGxhdGUgZGlyZWN0b3J5IHBhdGhcbiAqL1xuZnVuY3Rpb24gZ2V0QUlBZ2VudHNEaXIoKTogc3RyaW5nIHwgbnVsbCB7XG4gIC8vIFRyeSByZWxhdGl2ZSB0byBjb21waWxlZCBkaXN0IChwYWNrYWdlcy9kZXZkb2MvZGlzdC9jbGkvY29tbWFuZHMgLT4gcGFja2FnZXMvZGV2ZG9jL2FpLWFnZW50cylcbiAgbGV0IGFnZW50c0RpciA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsICcuLicsICdhaS1hZ2VudHMnKTtcbiAgXG4gIGlmIChmcy5leGlzdHNTeW5jKGFnZW50c0RpcikpIHtcbiAgICByZXR1cm4gYWdlbnRzRGlyO1xuICB9XG4gIFxuICAvLyBUcnkgZGV2ZG9jL3RlbXBsYXRlcyBhdCByZXBvIHJvb3QgKGRldmVsb3BtZW50KVxuICBhZ2VudHNEaXIgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnLi4nLCAnLi4nLCAnLi4nLCAnZGV2ZG9jJywgJ3RlbXBsYXRlcycsICdzdGFydGVyJyk7XG4gIFxuICBpZiAoZnMuZXhpc3RzU3luYyhhZ2VudHNEaXIpKSB7XG4gICAgcmV0dXJuIGFnZW50c0RpcjtcbiAgfVxuICBcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogSW5zdGFsbCBBSSBhZ2VudCBjb25maWd1cmF0aW9uIGZpbGVzXG4gKi9cbmZ1bmN0aW9uIGluc3RhbGxBSUFnZW50cyhcbiAgcHJvamVjdFBhdGg6IHN0cmluZywgXG4gIHRvb2w6ICdjbGF1ZGUnIHwgJ2N1cnNvcicgfCAnYm90aCdcbik6IHsgY2xhdWRlTWQ6IGJvb2xlYW47IGNsYXVkZVNraWxsczogc3RyaW5nW107IGN1cnNvclJ1bGVzOiBzdHJpbmdbXSB9IHtcbiAgY29uc3QgcmVzdWx0cyA9IHtcbiAgICBjbGF1ZGVNZDogZmFsc2UsXG4gICAgY2xhdWRlU2tpbGxzOiBbXSBhcyBzdHJpbmdbXSxcbiAgICBjdXJzb3JSdWxlczogW10gYXMgc3RyaW5nW10sXG4gIH07XG5cbiAgY29uc3QgYWdlbnRzRGlyID0gZ2V0QUlBZ2VudHNEaXIoKTtcbiAgaWYgKCFhZ2VudHNEaXIpIHtcbiAgICBsb2dnZXIud2FybignQUkgYWdlbnQgdGVtcGxhdGVzIG5vdCBmb3VuZCcpO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgLy8gSW5zdGFsbCBDbGF1ZGUgQ29kZSBmaWxlc1xuICBpZiAodG9vbCA9PT0gJ2NsYXVkZScgfHwgdG9vbCA9PT0gJ2JvdGgnKSB7XG4gICAgLy8gQ29weSBDTEFVREUubWRcbiAgICBjb25zdCBjbGF1ZGVNZFNvdXJjZSA9IHBhdGguam9pbihhZ2VudHNEaXIsICdDTEFVREUubWQnKTtcbiAgICBjb25zdCBjbGF1ZGVNZERlc3QgPSBwYXRoLmpvaW4ocHJvamVjdFBhdGgsICdDTEFVREUubWQnKTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhjbGF1ZGVNZFNvdXJjZSkpIHtcbiAgICAgIGZzLmNvcHlTeW5jKGNsYXVkZU1kU291cmNlLCBjbGF1ZGVNZERlc3QpO1xuICAgICAgcmVzdWx0cy5jbGF1ZGVNZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gQ29weSBza2lsbHNcbiAgICBjb25zdCBzb3VyY2VTa2lsbHNEaXIgPSBwYXRoLmpvaW4oYWdlbnRzRGlyLCAnLmNsYXVkZScsICdza2lsbHMnKTtcbiAgICBjb25zdCBkZXN0U2tpbGxzRGlyID0gcGF0aC5qb2luKHByb2plY3RQYXRoLCAnLmNsYXVkZScsICdza2lsbHMnKTtcbiAgICBcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhzb3VyY2VTa2lsbHNEaXIpKSB7XG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRlc3RTa2lsbHNEaXIpO1xuICAgICAgXG4gICAgICBmb3IgKGNvbnN0IHNraWxsIG9mIENMQVVERV9TS0lMTFMpIHtcbiAgICAgICAgY29uc3Qgc291cmNlRGlyID0gcGF0aC5qb2luKHNvdXJjZVNraWxsc0Rpciwgc2tpbGwpO1xuICAgICAgICBjb25zdCBkZXN0RGlyID0gcGF0aC5qb2luKGRlc3RTa2lsbHNEaXIsIHNraWxsKTtcbiAgICAgICAgXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKHNvdXJjZURpcikpIHtcbiAgICAgICAgICBmcy5jb3B5U3luYyhzb3VyY2VEaXIsIGRlc3REaXIpO1xuICAgICAgICAgIHJlc3VsdHMuY2xhdWRlU2tpbGxzLnB1c2goc2tpbGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gSW5zdGFsbCBDdXJzb3IgZmlsZXNcbiAgaWYgKHRvb2wgPT09ICdjdXJzb3InIHx8IHRvb2wgPT09ICdib3RoJykge1xuICAgIGNvbnN0IHNvdXJjZVJ1bGVzRGlyID0gcGF0aC5qb2luKGFnZW50c0RpciwgJy5jdXJzb3InLCAncnVsZXMnKTtcbiAgICBjb25zdCBkZXN0UnVsZXNEaXIgPSBwYXRoLmpvaW4ocHJvamVjdFBhdGgsICcuY3Vyc29yJywgJ3J1bGVzJyk7XG4gICAgXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoc291cmNlUnVsZXNEaXIpKSB7XG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRlc3RSdWxlc0Rpcik7XG4gICAgICBcbiAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBDVVJTT1JfUlVMRVMpIHtcbiAgICAgICAgY29uc3Qgc291cmNlUGF0aCA9IHBhdGguam9pbihzb3VyY2VSdWxlc0RpciwgcnVsZSk7XG4gICAgICAgIGNvbnN0IGRlc3RQYXRoID0gcGF0aC5qb2luKGRlc3RSdWxlc0RpciwgcnVsZSk7XG4gICAgICAgIFxuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhzb3VyY2VQYXRoKSkge1xuICAgICAgICAgIGZzLmNvcHlTeW5jKHNvdXJjZVBhdGgsIGRlc3RQYXRoKTtcbiAgICAgICAgICByZXN1bHRzLmN1cnNvclJ1bGVzLnB1c2gocnVsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuLyoqXG4gKiBDbGVhbiB1cCB1bnVzZWQgQVBJIGZpbGVzIGJhc2VkIG9uIHRlbXBsYXRlIHR5cGVcbiAqL1xuZnVuY3Rpb24gY2xlYW51cFVudXNlZEZpbGVzKHJlc29sdmVkUGF0aDogc3RyaW5nLCB0ZW1wbGF0ZVR5cGU6IFRlbXBsYXRlVHlwZSk6IHZvaWQge1xuICBjb25zdCBhcGlSZWZQYXRoID0gcGF0aC5qb2luKHJlc29sdmVkUGF0aCwgJ2FwaS1yZWZlcmVuY2UnKTtcbiAgXG4gIGlmICh0ZW1wbGF0ZVR5cGUgPT09ICdiYXNpYycpIHtcbiAgICAvLyBSZW1vdmUgZW50aXJlIGFwaS1yZWZlcmVuY2UgZm9sZGVyIGZvciBiYXNpYyB0ZW1wbGF0ZVxuICAgIGlmIChmcy5leGlzdHNTeW5jKGFwaVJlZlBhdGgpKSB7XG4gICAgICBmcy5yZW1vdmVTeW5jKGFwaVJlZlBhdGgpO1xuICAgICAgbG9nZ2VyLmRlYnVnKCdSZW1vdmVkIGFwaS1yZWZlcmVuY2UgZm9sZGVyIChub3QgbmVlZGVkIGZvciBiYXNpYyB0ZW1wbGF0ZSknKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodGVtcGxhdGVUeXBlID09PSAnb3BlbmFwaScpIHtcbiAgICAvLyBSZW1vdmUgR3JhcGhRTCBzY2hlbWEgZm9yIE9wZW5BUEkgdGVtcGxhdGVcbiAgICBjb25zdCBncmFwaHFsU2NoZW1hID0gcGF0aC5qb2luKGFwaVJlZlBhdGgsICdzY2hlbWEuZ3JhcGhxbCcpO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGdyYXBocWxTY2hlbWEpKSB7XG4gICAgICBmcy5yZW1vdmVTeW5jKGdyYXBocWxTY2hlbWEpO1xuICAgICAgbG9nZ2VyLmRlYnVnKCdSZW1vdmVkIHNjaGVtYS5ncmFwaHFsIChub3QgbmVlZGVkIGZvciBPcGVuQVBJIHRlbXBsYXRlKScpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0ZW1wbGF0ZVR5cGUgPT09ICdncmFwaHFsJykge1xuICAgIC8vIFJlbW92ZSBPcGVuQVBJIHNwZWMgYW5kIGVycm9ycy5tZHggZm9yIEdyYXBoUUwgdGVtcGxhdGVcbiAgICBjb25zdCBvcGVuYXBpU3BlYyA9IHBhdGguam9pbihhcGlSZWZQYXRoLCAnb3BlbmFwaS5qc29uJyk7XG4gICAgY29uc3QgZXJyb3JzRmlsZSA9IHBhdGguam9pbihhcGlSZWZQYXRoLCAnZXJyb3JzLm1keCcpO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKG9wZW5hcGlTcGVjKSkge1xuICAgICAgZnMucmVtb3ZlU3luYyhvcGVuYXBpU3BlYyk7XG4gICAgICBsb2dnZXIuZGVidWcoJ1JlbW92ZWQgb3BlbmFwaS5qc29uIChub3QgbmVlZGVkIGZvciBHcmFwaFFMIHRlbXBsYXRlKScpO1xuICAgIH1cbiAgICBpZiAoZnMuZXhpc3RzU3luYyhlcnJvcnNGaWxlKSkge1xuICAgICAgZnMucmVtb3ZlU3luYyhlcnJvcnNGaWxlKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnUmVtb3ZlZCBlcnJvcnMubWR4IChub3QgbmVlZGVkIGZvciBHcmFwaFFMIHRlbXBsYXRlKScpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlKHByb2plY3REaXJlY3Rvcnk6IHN0cmluZyB8IHVuZGVmaW5lZCwgb3B0aW9uczogQ3JlYXRlT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zb2xlLmxvZygpO1xuICBsb2dnZXIuaW5mbygn8J+QnyBDcmVhdGUgRGV2RG9jIERvYycpO1xuICBjb25zb2xlLmxvZygpO1xuXG4gIGNvbnN0IGFwaVVybCA9IG9wdGlvbnMudXJsIHx8IHByb2Nlc3MuZW52LkRFVkRPQ19BUElfVVJMIHx8IERFRkFVTFRfQVBJX1VSTDtcblxuICAvLyBHZXQgcHJvamVjdCBuYW1lIGlmIG5vdCBwcm92aWRlZFxuICBsZXQgcHJvamVjdFBhdGggPSBwcm9qZWN0RGlyZWN0b3J5O1xuXG4gIGlmICghcHJvamVjdFBhdGgpIHtcbiAgICBwcm9qZWN0UGF0aCA9IGF3YWl0IHByb21wdCgnV2hhdCBpcyB5b3VyIHByb2plY3QgbmFtZWQ/JywgJ215LWRvY3MnKTtcbiAgICBcbiAgICBpZiAoIXByb2plY3RQYXRoKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ1Byb2plY3QgbmFtZSBpcyByZXF1aXJlZCcpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHByb2plY3QgbmFtZVxuICBjb25zdCB2YWxpZGF0aW9uID0gdmFsaWRhdGVQcm9qZWN0TmFtZShwcm9qZWN0UGF0aCk7XG4gIGlmICghdmFsaWRhdGlvbi52YWxpZCkge1xuICAgIGxvZ2dlci5lcnJvcih2YWxpZGF0aW9uLmVycm9yIHx8ICdJbnZhbGlkIHByb2plY3QgbmFtZScpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIC8vIEdldCB0ZW1wbGF0ZSBzZWxlY3Rpb24gaWYgbm90IHByb3ZpZGVkXG4gIGxldCB0ZW1wbGF0ZTogVGVtcGxhdGVUeXBlID0gb3B0aW9ucy50ZW1wbGF0ZSB8fCAnYmFzaWMnO1xuICBcbiAgaWYgKCFvcHRpb25zLnRlbXBsYXRlKSB7XG4gICAgY29uc3QgdGVtcGxhdGVDaG9pY2VzID0gT2JqZWN0LmVudHJpZXMoVEVNUExBVEVTKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgIHZhbHVlOiBrZXksXG4gICAgICBsYWJlbDogYCR7dmFsdWUubmFtZX0gLSAke3ZhbHVlLmRlc2NyaXB0aW9ufWAsXG4gICAgfSkpO1xuXG4gICAgdGVtcGxhdGUgPSBhd2FpdCBwcm9tcHRTZWxlY3QoJ1doaWNoIHRlbXBsYXRlIHdvdWxkIHlvdSBsaWtlIHRvIHVzZT8nLCB0ZW1wbGF0ZUNob2ljZXMpIGFzIFRlbXBsYXRlVHlwZTtcbiAgfVxuXG4gIC8vIFJlc29sdmUgZnVsbCBwYXRoXG4gIGNvbnN0IHJlc29sdmVkUGF0aCA9IHBhdGgucmVzb2x2ZShwcm9qZWN0UGF0aCk7XG4gIGNvbnN0IHByb2plY3ROYW1lID0gcGF0aC5iYXNlbmFtZShyZXNvbHZlZFBhdGgpO1xuICBjb25zdCBzbHVnID0gcHJvamVjdE5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOV0rL2csICctJykucmVwbGFjZSgvXi18LSQvZywgJycpO1xuXG4gIC8vIEdldCBzdWJkb21haW4gLSBwcm9tcHQgaWYgbm90IHByb3ZpZGVkXG4gIGxldCBzdWJkb21haW4gPSBvcHRpb25zLnN1YmRvbWFpbjtcbiAgXG4gIGlmICghc3ViZG9tYWluKSB7XG4gICAgY29uc29sZS5sb2coKTtcbiAgICBzdWJkb21haW4gPSBhd2FpdCBwcm9tcHQoYEVudGVyIHN1YmRvbWFpbiBmb3IgeW91ciBkb2NzICgke3NsdWd9LmRldmRvYy5zaClgLCBzbHVnKTtcbiAgICBzdWJkb21haW4gPSBzdWJkb21haW4udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOS1dL2csICctJykucmVwbGFjZSgvXi18LSQvZywgJycpO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgc3ViZG9tYWluIGZvcm1hdCBsb2NhbGx5XG4gIGNvbnN0IGZvcm1hdENoZWNrID0gaXNWYWxpZFN1YmRvbWFpbkZvcm1hdChzdWJkb21haW4pO1xuICBpZiAoIWZvcm1hdENoZWNrLnZhbGlkKSB7XG4gICAgbG9nZ2VyLmVycm9yKGZvcm1hdENoZWNrLmVycm9yISk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgLy8gQ2hlY2sgc3ViZG9tYWluIGF2YWlsYWJpbGl0eSB2aWEgQVBJIChzZXJ2ZXIgdmFsaWRhdGVzIGJsYWNrbGlzdClcbiAgLy8gTG9vcCB1bnRpbCB3ZSBmaW5kIGFuIGF2YWlsYWJsZSBzdWJkb21haW5cbiAgbGV0IHN1YmRvbWFpbkF2YWlsYWJsZSA9IGZhbHNlO1xuICB3aGlsZSAoIXN1YmRvbWFpbkF2YWlsYWJsZSkge1xuICAgIGxvZ2dlci5pbmZvKGBDaGVja2luZyBpZiAke3N1YmRvbWFpbn0uZGV2ZG9jLnNoIGlzIGF2YWlsYWJsZS4uLmApO1xuICAgIGNvbnN0IGF2YWlsYWJpbGl0eSA9IGF3YWl0IGNoZWNrU3ViZG9tYWluQXZhaWxhYmlsaXR5KHN1YmRvbWFpbiwgYXBpVXJsKTtcbiAgICBcbiAgICBpZiAoIWF2YWlsYWJpbGl0eS5hdmFpbGFibGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICBsb2dnZXIud2FybihhdmFpbGFiaWxpdHkuZXJyb3IgfHwgYFN1YmRvbWFpbiBcIiR7c3ViZG9tYWlufVwiIGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgICAgIFxuICAgICAgY29uc3Qgc3VnZ2VzdGlvbiA9IGF2YWlsYWJpbGl0eS5zdWdnZXN0aW9uIHx8IGAke3N1YmRvbWFpbn0tZG9jc2A7XG4gICAgICBjb25zb2xlLmxvZygpO1xuICAgICAgbG9nZ2VyLmluZm8oYFN1Z2dlc3Rpb246ICR7c3VnZ2VzdGlvbn0uZGV2ZG9jLnNoYCk7XG4gICAgICBjb25zb2xlLmxvZygpO1xuICAgICAgXG4gICAgICAvLyBQcm9tcHQgZm9yIG5ldyBzdWJkb21haW5cbiAgICAgIHN1YmRvbWFpbiA9IGF3YWl0IHByb21wdCgnRW50ZXIgYSBkaWZmZXJlbnQgc3ViZG9tYWluJywgc3VnZ2VzdGlvbik7XG4gICAgICBzdWJkb21haW4gPSBzdWJkb21haW4udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOS1dL2csICctJykucmVwbGFjZSgvXi18LSQvZywgJycpO1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSBmb3JtYXRcbiAgICAgIGNvbnN0IGZvcm1hdENoZWNrID0gaXNWYWxpZFN1YmRvbWFpbkZvcm1hdChzdWJkb21haW4pO1xuICAgICAgaWYgKCFmb3JtYXRDaGVjay52YWxpZCkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoZm9ybWF0Q2hlY2suZXJyb3IhKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1YmRvbWFpbkF2YWlsYWJsZSA9IHRydWU7XG4gICAgICBsb2dnZXIuc3VjY2Vzcyhg4pyTICR7c3ViZG9tYWlufS5kZXZkb2Muc2ggaXMgYXZhaWxhYmxlIWApO1xuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIGlmIGRpcmVjdG9yeSBleGlzdHNcbiAgaWYgKGZzLmV4aXN0c1N5bmMocmVzb2x2ZWRQYXRoKSkge1xuICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMocmVzb2x2ZWRQYXRoKTtcbiAgICBpZiAoZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgb3ZlcndyaXRlID0gYXdhaXQgcHJvbXB0Q29uZmlybShgRGlyZWN0b3J5ICR7cHJvamVjdE5hbWV9IGlzIG5vdCBlbXB0eS4gQ29udGludWUgYW55d2F5P2AsIGZhbHNlKTtcbiAgICAgIFxuICAgICAgaWYgKCFvdmVyd3JpdGUpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdPcGVyYXRpb24gY2FuY2VsbGVkJyk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBzZWxlY3RlZFRlbXBsYXRlID0gVEVNUExBVEVTW3RlbXBsYXRlXTtcbiAgY29uc29sZS5sb2coKTtcbiAgbG9nZ2VyLmluZm8oYENyZWF0aW5nIGEgbmV3ICR7c2VsZWN0ZWRUZW1wbGF0ZS5uYW1lfSBEZXZEb2MgZG9jdW1lbnRhdGlvbiBzaXRlIGluICR7cmVzb2x2ZWRQYXRofWApO1xuICBjb25zb2xlLmxvZygpO1xuXG4gIC8vIENyZWF0ZSBwcm9qZWN0IGRpcmVjdG9yeVxuICBmcy5lbnN1cmVEaXJTeW5jKHJlc29sdmVkUGF0aCk7XG5cbiAgLy8gRG93bmxvYWQgdGVtcGxhdGUgZnJvbSByZW1vdGUgcmVwb3NpdG9yeSAoYWx3YXlzIHVzZSBzdGFydGVyIHRlbXBsYXRlKVxuICBsb2dnZXIuaW5mbygnRG93bmxvYWRpbmcgdGVtcGxhdGUuLi4nKTtcbiAgXG4gIHRyeSB7XG4gICAgLy8gVHJ5IHRvIGRvd25sb2FkIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkgZmlyc3RcbiAgICBhd2FpdCBkb3dubG9hZFRlbXBsYXRlKFRFTVBMQVRFX1JFUE8sIHtcbiAgICAgIGRpcjogcmVzb2x2ZWRQYXRoLFxuICAgICAgZm9yY2U6IHRydWUsXG4gICAgfSk7XG4gICAgbG9nZ2VyLnN1Y2Nlc3MoJ0Rvd25sb2FkZWQgc3RhcnRlciB0ZW1wbGF0ZScpO1xuICB9IGNhdGNoIChkb3dubG9hZEVycm9yKSB7XG4gICAgLy8gRmFsbCBiYWNrIHRvIGxvY2FsIHRlbXBsYXRlcyAoZm9yIGRldmVsb3BtZW50IG9yIG9mZmxpbmUgdXNhZ2UpXG4gICAgbG9nZ2VyLmRlYnVnKGBSZW1vdGUgZG93bmxvYWQgZmFpbGVkOiAke2Rvd25sb2FkRXJyb3J9YCk7XG4gICAgbG9nZ2VyLmluZm8oJ0ZhbGxpbmcgYmFjayB0byBsb2NhbCB0ZW1wbGF0ZS4uLicpO1xuICAgIFxuICAgIGNvbnN0IHRlbXBsYXRlRGlyID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJy4uJywgJ3RlbXBsYXRlcycsICdzdGFydGVyJyk7XG4gICAgXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHRlbXBsYXRlRGlyKSkge1xuICAgICAgbG9nZ2VyLmVycm9yKCdUZW1wbGF0ZSBcInN0YXJ0ZXJcIiBub3QgZm91bmQnKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgTG9va2VkIGZvciB0ZW1wbGF0ZSBhdDogJHt0ZW1wbGF0ZURpcn1gKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnUmVtb3RlIHNvdXJjZTogJyArIFRFTVBMQVRFX1JFUE8pO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGZzLmNvcHlTeW5jKHRlbXBsYXRlRGlyLCByZXNvbHZlZFBhdGgsIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xuICAgIGxvZ2dlci5zdWNjZXNzKCdDb3BpZWQgbG9jYWwgdGVtcGxhdGUnKTtcbiAgfVxuXG4gIC8vIFVwZGF0ZSBwYWNrYWdlLmpzb24gd2l0aCBwcm9qZWN0IG5hbWVcbiAgY29uc3QgcGtnUGF0aCA9IHBhdGguam9pbihyZXNvbHZlZFBhdGgsICdwYWNrYWdlLmpzb24nKTtcbiAgaWYgKGZzLmV4aXN0c1N5bmMocGtnUGF0aCkpIHtcbiAgICBjb25zdCBwa2cgPSBmcy5yZWFkSnNvblN5bmMocGtnUGF0aCk7XG4gICAgcGtnLm5hbWUgPSBwcm9qZWN0TmFtZTtcbiAgICBmcy53cml0ZUpzb25TeW5jKHBrZ1BhdGgsIHBrZywgeyBzcGFjZXM6IDIgfSk7XG4gIH1cblxuICAvLyBHZW5lcmF0ZSBkb2NzLmpzb24gYmFzZWQgb24gdGVtcGxhdGUgdHlwZVxuICBjb25zdCBkb2NzQ29uZmlnID0gZ2VuZXJhdGVEb2NzQ29uZmlnKHByb2plY3ROYW1lLCB0ZW1wbGF0ZSk7XG4gIGNvbnN0IGRvY3NQYXRoID0gcGF0aC5qb2luKHJlc29sdmVkUGF0aCwgJ2RvY3MuanNvbicpO1xuICBmcy53cml0ZUpzb25TeW5jKGRvY3NQYXRoLCBkb2NzQ29uZmlnLCB7IHNwYWNlczogMiB9KTtcbiAgbG9nZ2VyLnN1Y2Nlc3MoYEdlbmVyYXRlZCBkb2NzLmpzb24gZm9yICR7c2VsZWN0ZWRUZW1wbGF0ZS5uYW1lfSB0ZW1wbGF0ZWApO1xuXG4gIC8vIFVwZGF0ZSB0aGVtZS5qc29uIHdpdGggdGVtcGxhdGUgY29sb3JcbiAgY29uc3QgdGhlbWVQYXRoID0gcGF0aC5qb2luKHJlc29sdmVkUGF0aCwgJ3RoZW1lLmpzb24nKTtcbiAgaWYgKGZzLmV4aXN0c1N5bmModGhlbWVQYXRoKSkge1xuICAgIGNvbnN0IHRoZW1lID0gZnMucmVhZEpzb25TeW5jKHRoZW1lUGF0aCk7XG4gICAgdGhlbWUuY29sb3JzID0ge1xuICAgICAgcHJpbWFyeTogc2VsZWN0ZWRUZW1wbGF0ZS5jb2xvcixcbiAgICAgIHByaW1hcnlMaWdodDogc2VsZWN0ZWRUZW1wbGF0ZS5jb2xvcixcbiAgICAgIHByaW1hcnlEYXJrOiBzZWxlY3RlZFRlbXBsYXRlLmNvbG9yLFxuICAgIH07XG4gICAgZnMud3JpdGVKc29uU3luYyh0aGVtZVBhdGgsIHRoZW1lLCB7IHNwYWNlczogMiB9KTtcbiAgfVxuXG4gIC8vIENsZWFuIHVwIHVudXNlZCBmaWxlcyBiYXNlZCBvbiB0ZW1wbGF0ZSB0eXBlXG4gIGNsZWFudXBVbnVzZWRGaWxlcyhyZXNvbHZlZFBhdGgsIHRlbXBsYXRlKTtcblxuICAvLyBDcmVhdGUgLmRldmRvYy5qc29uIHdpdGggc3ViZG9tYWluIChub3QgcmVnaXN0ZXJlZCB1bnRpbCBkZXBsb3kpXG4gIC8vIFRoZSBzdWJkb21haW4gd2lsbCBvbmx5IGJlIHJlc2VydmVkIHdoZW4gdGhlIHVzZXIgYWN0dWFsbHkgZGVwbG95c1xuICBjb25zdCBkZXZkb2NDb25maWdQYXRoID0gcGF0aC5qb2luKHJlc29sdmVkUGF0aCwgJy5kZXZkb2MuanNvbicpO1xuICBcbiAgY29uc3QgZGV2ZG9jQ29uZmlnID0ge1xuICAgIHByb2plY3RJZDogYCR7c2x1Z30tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOCl9YCxcbiAgICBuYW1lOiBmb3JtYXRQcm9qZWN0TmFtZShwcm9qZWN0TmFtZSksXG4gICAgc2x1Zzogc2x1ZyxcbiAgICBzdWJkb21haW46IHN1YmRvbWFpbixcbiAgICBjcmVhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAvLyBOb3RlOiBObyBhcGlLZXkgLSBzdWJkb21haW4gaXMgbm90IHJlc2VydmVkIHVudGlsIGRlcGxveVxuICB9O1xuICBmcy53cml0ZUpzb25TeW5jKGRldmRvY0NvbmZpZ1BhdGgsIGRldmRvY0NvbmZpZywgeyBzcGFjZXM6IDIgfSk7XG4gIGxvZ2dlci5zdWNjZXNzKCdDcmVhdGVkIC5kZXZkb2MuanNvbicpO1xuICBjb25zb2xlLmxvZygpO1xuICBjb25zb2xlLmxvZygnICBTdWJkb21haW46JywgYCR7c3ViZG9tYWlufS5kZXZkb2Muc2hgKTtcbiAgY29uc29sZS5sb2coJyAgU3RhdHVzOicsICdOb3QgeWV0IGRlcGxveWVkIChzdWJkb21haW4gd2lsbCBiZSByZXNlcnZlZCBvbiBmaXJzdCBkZXBsb3kpJyk7XG5cbiAgLy8gSW5pdGlhbGl6ZSBnaXRcbiAgaWYgKG9wdGlvbnMuZ2l0ICE9PSBmYWxzZSkge1xuICAgIGxvZ2dlci5pbmZvKCdJbml0aWFsaXppbmcgZ2l0IHJlcG9zaXRvcnkuLi4nKTtcbiAgICB0cnkge1xuICAgICAgZXhlY1N5bmMoJ2dpdCBpbml0JywgeyBjd2Q6IHJlc29sdmVkUGF0aCwgc3RkaW86ICdpZ25vcmUnIH0pO1xuICAgICAgZXhlY1N5bmMoJ2dpdCBhZGQgLUEnLCB7IGN3ZDogcmVzb2x2ZWRQYXRoLCBzdGRpbzogJ2lnbm9yZScgfSk7XG4gICAgICBleGVjU3luYygnZ2l0IGNvbW1pdCAtbSBcIkluaXRpYWwgY29tbWl0IGZyb20gZGV2ZG9jIGNyZWF0ZVwiJywge1xuICAgICAgICBjd2Q6IHJlc29sdmVkUGF0aCxcbiAgICAgICAgc3RkaW86ICdpZ25vcmUnLFxuICAgICAgfSk7XG4gICAgICBsb2dnZXIuc3VjY2VzcygnR2l0IHJlcG9zaXRvcnkgaW5pdGlhbGl6ZWQnKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGxvZ2dlci53YXJuKCdDb3VsZCBub3QgaW5pdGlhbGl6ZSBnaXQgcmVwb3NpdG9yeScpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEluc3RhbGwgZGVwZW5kZW5jaWVzXG4gIGlmIChvcHRpb25zLmluc3RhbGwgIT09IGZhbHNlKSB7XG4gICAgbG9nZ2VyLmluZm8oJ0luc3RhbGxpbmcgZGVwZW5kZW5jaWVzLi4uJyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhY2thZ2VNYW5hZ2VyID0gZ2V0UGFja2FnZU1hbmFnZXIoKTtcbiAgICAgIGV4ZWNTeW5jKGAke3BhY2thZ2VNYW5hZ2VyfSBpbnN0YWxsYCwge1xuICAgICAgICBjd2Q6IHJlc29sdmVkUGF0aCxcbiAgICAgICAgc3RkaW86ICdpbmhlcml0JyxcbiAgICAgIH0pO1xuICAgICAgbG9nZ2VyLnN1Y2Nlc3MoJ0RlcGVuZGVuY2llcyBpbnN0YWxsZWQnKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGxvZ2dlci53YXJuKCdDb3VsZCBub3QgaW5zdGFsbCBkZXBlbmRlbmNpZXMnKTtcbiAgICB9XG4gIH1cblxuICAvLyBJbnN0YWxsIEFJIGFnZW50cyBpZiByZXF1ZXN0ZWRcbiAgbGV0IGFpVG9vbDogJ2NsYXVkZScgfCAnY3Vyc29yJyB8ICdib3RoJyB8IG51bGwgPSBudWxsO1xuICBcbiAgaWYgKG9wdGlvbnMuYWkgPT09IHRydWUpIHtcbiAgICAvLyBJZiAtLWFpIGZsYWcgaXMgcGFzc2VkIHdpdGhvdXQgdmFsdWUsIHByb21wdCBmb3Igc2VsZWN0aW9uXG4gICAgY29uc3QgYWlDaG9pY2VzID0gW1xuICAgICAgeyB2YWx1ZTogJ2JvdGgnLCBsYWJlbDogJ0JvdGggLSBDbGF1ZGUgQ29kZSBhbmQgQ3Vyc29yJyB9LFxuICAgICAgeyB2YWx1ZTogJ2NsYXVkZScsIGxhYmVsOiAnQ2xhdWRlIENvZGUgLSBTa2lsbHMgYW5kIENMQVVERS5tZCcgfSxcbiAgICAgIHsgdmFsdWU6ICdjdXJzb3InLCBsYWJlbDogJ0N1cnNvciAtIFJ1bGVzICguY3Vyc29yL3J1bGVzLyknIH0sXG4gICAgICB7IHZhbHVlOiAnc2tpcCcsIGxhYmVsOiAnU2tpcCAtIElcXCdsbCBzZXQgdGhpcyB1cCBsYXRlcicgfSxcbiAgICBdO1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IGF3YWl0IHByb21wdFNlbGVjdCgnU2V0IHVwIEFJIGFnZW50IGNvbmZpZ3VyYXRpb24/JywgYWlDaG9pY2VzKTtcbiAgICBpZiAoc2VsZWN0aW9uICE9PSAnc2tpcCcpIHtcbiAgICAgIGFpVG9vbCA9IHNlbGVjdGlvbiBhcyAnY2xhdWRlJyB8ICdjdXJzb3InIHwgJ2JvdGgnO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucy5haSA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBJZiAtLWFpPWNsYXVkZSwgLS1haT1jdXJzb3IsIG9yIC0tYWk9Ym90aCBpcyBwYXNzZWRcbiAgICBhaVRvb2wgPSBvcHRpb25zLmFpIGFzICdjbGF1ZGUnIHwgJ2N1cnNvcicgfCAnYm90aCc7XG4gIH1cblxuICBpZiAoYWlUb29sKSB7XG4gICAgY29uc29sZS5sb2coKTtcbiAgICBsb2dnZXIuaW5mbygnU2V0dGluZyB1cCBBSSBhZ2VudCBjb25maWd1cmF0aW9uLi4uJyk7XG4gICAgY29uc3QgYWlSZXN1bHRzID0gaW5zdGFsbEFJQWdlbnRzKHJlc29sdmVkUGF0aCwgYWlUb29sKTtcbiAgICBcbiAgICBpZiAoYWlSZXN1bHRzLmNsYXVkZU1kKSB7XG4gICAgICBsb2dnZXIuc3VjY2VzcygnQ3JlYXRlZCBDTEFVREUubWQnKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBza2lsbCBvZiBhaVJlc3VsdHMuY2xhdWRlU2tpbGxzKSB7XG4gICAgICBsb2dnZXIuc3VjY2VzcyhgQ3JlYXRlZCAuY2xhdWRlL3NraWxscy8ke3NraWxsfS9TS0lMTC5tZGApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgYWlSZXN1bHRzLmN1cnNvclJ1bGVzKSB7XG4gICAgICBsb2dnZXIuc3VjY2VzcyhgQ3JlYXRlZCAuY3Vyc29yL3J1bGVzLyR7cnVsZX1gKTtcbiAgICB9XG4gIH1cblxuICAvLyBTdWNjZXNzIG1lc3NhZ2VcbiAgY29uc29sZS5sb2coKTtcbiAgbG9nZ2VyLnN1Y2Nlc3MoYENyZWF0ZWQgJHtwcm9qZWN0TmFtZX0gYXQgJHtyZXNvbHZlZFBhdGh9YCk7XG4gIGNvbnNvbGUubG9nKCk7XG4gIGNvbnNvbGUubG9nKCdZb3VyIGRvY3Mgd2lsbCBiZSBhdmFpbGFibGUgYXQ6Jyk7XG4gIGNvbnNvbGUubG9nKGAgIGh0dHBzOi8vJHtzdWJkb21haW59LmRldmRvYy5zaGApO1xuICBjb25zb2xlLmxvZygpO1xuICBsb2dnZXIuaW5mbygnTm90ZTogVGhlIHN1YmRvbWFpbiB3aWxsIGJlIHJlc2VydmVkIHdoZW4geW91IHJ1biBcImRldmRvYyBkZXBsb3lcIicpO1xuICBjb25zb2xlLmxvZygpO1xuICBjb25zb2xlLmxvZygnSW5zaWRlIHRoYXQgZGlyZWN0b3J5LCB5b3UgY2FuIHJ1biBzZXZlcmFsIGNvbW1hbmRzOicpO1xuICBjb25zb2xlLmxvZygpO1xuICBjb25zb2xlLmxvZygnICBucG0gcnVuIGRldicpO1xuICBjb25zb2xlLmxvZygnICAgIFN0YXJ0cyB0aGUgZGV2ZWxvcG1lbnQgc2VydmVyLicpO1xuICBjb25zb2xlLmxvZygpO1xuICBjb25zb2xlLmxvZygnICBkZXZkb2MgZGVwbG95Jyk7XG4gIGNvbnNvbGUubG9nKCcgICAgRGVwbG95cyBhbmQgY2xhaW1zIHlvdXIgc3ViZG9tYWluLicpO1xuICBjb25zb2xlLmxvZygpO1xuICBjb25zb2xlLmxvZygnV2Ugc3VnZ2VzdCB0aGF0IHlvdSBiZWdpbiBieSB0eXBpbmc6Jyk7XG4gIGNvbnNvbGUubG9nKCk7XG4gIGNvbnNvbGUubG9nKGAgIGNkICR7cHJvamVjdE5hbWV9YCk7XG4gIGNvbnNvbGUubG9nKCcgIG5wbSBydW4gZGV2Jyk7XG4gIGNvbnNvbGUubG9nKCk7XG5cbiAgLy8gU2hvdyBBSSBhZ2VudCB0aXBzIGlmIGluc3RhbGxlZFxuICBpZiAoYWlUb29sKSB7XG4gICAgY29uc29sZS5sb2coJ0FJIEFnZW50IFF1aWNrIFN0YXJ0OicpO1xuICAgIGlmIChhaVRvb2wgPT09ICdjbGF1ZGUnIHx8IGFpVG9vbCA9PT0gJ2JvdGgnKSB7XG4gICAgICBjb25zb2xlLmxvZygnICBDbGF1ZGUgQ29kZTogL2Jvb3RzdHJhcC1kb2NzJyk7XG4gICAgfVxuICAgIGlmIChhaVRvb2wgPT09ICdjdXJzb3InIHx8IGFpVG9vbCA9PT0gJ2JvdGgnKSB7XG4gICAgICBjb25zb2xlLmxvZygnICBDdXJzb3I6IEFzayBcImdlbmVyYXRlIGluaXRpYWwgZG9jdW1lbnRhdGlvbiBmcm9tIHRoaXMgcmVwb1wiJyk7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coJ1RpcDogUnVuIFwiZGV2ZG9jIGFpXCIgdG8gc2V0IHVwIEFJIGFnZW50IGNvbmZpZ3VyYXRpb24gZm9yIENsYXVkZSBDb2RlIG9yIEN1cnNvci4nKTtcbiAgICBjb25zb2xlLmxvZygpO1xuICB9XG5cbiAgY29uc29sZS5sb2coJ0hhcHB5IGRvY3VtZW50aW5nISDwn5OaJyk7XG4gIGNvbnNvbGUubG9nKCk7XG59XG4iXX0=
@@ -3,6 +3,7 @@ interface InitOptions {
3
3
  subdomain?: string;
4
4
  force?: boolean;
5
5
  url?: string;
6
+ ai?: boolean | 'claude' | 'cursor' | 'both';
6
7
  }
7
8
  /**
8
9
  * Initialize a DevDoc project with .devdoc.json
@@ -42,6 +42,25 @@ const fs_extra_1 = __importDefault(require("fs-extra"));
42
42
  const config_1 = require("../../config");
43
43
  const logger_1 = require("../../utils/logger");
44
44
  const constants_1 = require("../../constants");
45
+ // Claude Code skills to create
46
+ const CLAUDE_SKILLS = [
47
+ 'bootstrap-docs',
48
+ 'migrate-docs',
49
+ 'import-api-spec',
50
+ 'sync-docs',
51
+ 'check-docs',
52
+ 'create-doc-page',
53
+ 'update-docs-json',
54
+ 'generate-api-docs',
55
+ 'docs-from-code',
56
+ ];
57
+ // Cursor rules to create
58
+ const CURSOR_RULES = [
59
+ 'devdoc.mdc',
60
+ 'devdoc-bootstrap.mdc',
61
+ 'devdoc-migrate.mdc',
62
+ 'devdoc-sync.mdc',
63
+ ];
45
64
  // Simple prompt helper using readline
46
65
  async function prompt(question, defaultValue) {
47
66
  const readline = await Promise.resolve().then(() => __importStar(require('readline')));
@@ -57,6 +76,115 @@ async function prompt(question, defaultValue) {
57
76
  });
58
77
  });
59
78
  }
79
+ async function promptSelect(question, choices) {
80
+ console.log(`\n${question}\n`);
81
+ choices.forEach((choice, i) => {
82
+ console.log(` ${i + 1}. ${choice.label}`);
83
+ });
84
+ console.log();
85
+ const readline = await Promise.resolve().then(() => __importStar(require('readline')));
86
+ const rl = readline.createInterface({
87
+ input: process.stdin,
88
+ output: process.stdout,
89
+ });
90
+ return new Promise((resolve) => {
91
+ rl.question('Enter number: ', (answer) => {
92
+ rl.close();
93
+ const index = parseInt(answer.trim(), 10) - 1;
94
+ if (index >= 0 && index < choices.length) {
95
+ resolve(choices[index].value);
96
+ }
97
+ else {
98
+ // Default to first choice
99
+ resolve(choices[0].value);
100
+ }
101
+ });
102
+ });
103
+ }
104
+ /**
105
+ * Get the AI agents template directory path
106
+ */
107
+ function getAIAgentsDir() {
108
+ // Try relative to compiled dist
109
+ let agentsDir = path_1.default.join(__dirname, '..', '..', '..', 'ai-agents');
110
+ if (fs_extra_1.default.existsSync(agentsDir)) {
111
+ return agentsDir;
112
+ }
113
+ // Try devdoc/templates at repo root (development)
114
+ agentsDir = path_1.default.join(__dirname, '..', '..', '..', '..', '..', 'devdoc', 'templates', 'starter');
115
+ if (fs_extra_1.default.existsSync(agentsDir)) {
116
+ return agentsDir;
117
+ }
118
+ return null;
119
+ }
120
+ /**
121
+ * Check if AI agents are already configured
122
+ */
123
+ function hasAIAgentsConfigured(projectPath) {
124
+ const claudeMd = fs_extra_1.default.existsSync(path_1.default.join(projectPath, 'CLAUDE.md'));
125
+ const claudeSkills = fs_extra_1.default.existsSync(path_1.default.join(projectPath, '.claude', 'skills'));
126
+ const cursorRules = fs_extra_1.default.existsSync(path_1.default.join(projectPath, '.cursor', 'rules'));
127
+ return {
128
+ claude: claudeMd || claudeSkills,
129
+ cursor: cursorRules,
130
+ };
131
+ }
132
+ /**
133
+ * Install AI agent configuration files
134
+ */
135
+ function installAIAgents(projectPath, tool) {
136
+ const results = {
137
+ claudeMd: false,
138
+ claudeSkills: [],
139
+ cursorRules: [],
140
+ };
141
+ const agentsDir = getAIAgentsDir();
142
+ if (!agentsDir) {
143
+ logger_1.logger.warn('AI agent templates not found');
144
+ return results;
145
+ }
146
+ // Install Claude Code files
147
+ if (tool === 'claude' || tool === 'both') {
148
+ // Copy CLAUDE.md
149
+ const claudeMdSource = path_1.default.join(agentsDir, 'CLAUDE.md');
150
+ const claudeMdDest = path_1.default.join(projectPath, 'CLAUDE.md');
151
+ if (fs_extra_1.default.existsSync(claudeMdSource)) {
152
+ fs_extra_1.default.copySync(claudeMdSource, claudeMdDest);
153
+ results.claudeMd = true;
154
+ }
155
+ // Copy skills
156
+ const sourceSkillsDir = path_1.default.join(agentsDir, '.claude', 'skills');
157
+ const destSkillsDir = path_1.default.join(projectPath, '.claude', 'skills');
158
+ if (fs_extra_1.default.existsSync(sourceSkillsDir)) {
159
+ fs_extra_1.default.ensureDirSync(destSkillsDir);
160
+ for (const skill of CLAUDE_SKILLS) {
161
+ const sourceDir = path_1.default.join(sourceSkillsDir, skill);
162
+ const destDir = path_1.default.join(destSkillsDir, skill);
163
+ if (fs_extra_1.default.existsSync(sourceDir)) {
164
+ fs_extra_1.default.copySync(sourceDir, destDir);
165
+ results.claudeSkills.push(skill);
166
+ }
167
+ }
168
+ }
169
+ }
170
+ // Install Cursor files
171
+ if (tool === 'cursor' || tool === 'both') {
172
+ const sourceRulesDir = path_1.default.join(agentsDir, '.cursor', 'rules');
173
+ const destRulesDir = path_1.default.join(projectPath, '.cursor', 'rules');
174
+ if (fs_extra_1.default.existsSync(sourceRulesDir)) {
175
+ fs_extra_1.default.ensureDirSync(destRulesDir);
176
+ for (const rule of CURSOR_RULES) {
177
+ const sourcePath = path_1.default.join(sourceRulesDir, rule);
178
+ const destPath = path_1.default.join(destRulesDir, rule);
179
+ if (fs_extra_1.default.existsSync(sourcePath)) {
180
+ fs_extra_1.default.copySync(sourcePath, destPath);
181
+ results.cursorRules.push(rule);
182
+ }
183
+ }
184
+ }
185
+ }
186
+ return results;
187
+ }
60
188
  /**
61
189
  * Basic subdomain format validation (server does full validation)
62
190
  */
@@ -195,9 +323,68 @@ async function init(options) {
195
323
  console.log('');
196
324
  console.log(' Subdomain:', `${subdomain}.devdoc.sh`);
197
325
  console.log(' Status:', 'Not yet deployed');
326
+ // Check if AI agents should be set up
327
+ const existingAI = hasAIAgentsConfigured(projectRoot);
328
+ let aiTool = null;
329
+ // Determine if we should set up AI agents
330
+ if (options.ai === true) {
331
+ // --ai flag passed, prompt for selection
332
+ const aiChoices = [
333
+ { value: 'both', label: 'Both - Claude Code and Cursor' },
334
+ { value: 'claude', label: 'Claude Code - Skills and CLAUDE.md' },
335
+ { value: 'cursor', label: 'Cursor - Rules (.cursor/rules/)' },
336
+ { value: 'skip', label: 'Skip - I\'ll set this up later' },
337
+ ];
338
+ const selection = await promptSelect('Set up AI agent configuration?', aiChoices);
339
+ if (selection !== 'skip') {
340
+ aiTool = selection;
341
+ }
342
+ }
343
+ else if (typeof options.ai === 'string') {
344
+ // --ai=claude, --ai=cursor, or --ai=both
345
+ aiTool = options.ai;
346
+ }
347
+ else if (!existingAI.claude && !existingAI.cursor) {
348
+ // No AI config exists and no --ai flag, prompt user
349
+ const aiChoices = [
350
+ { value: 'both', label: 'Both - Claude Code and Cursor' },
351
+ { value: 'claude', label: 'Claude Code - Skills and CLAUDE.md' },
352
+ { value: 'cursor', label: 'Cursor - Rules (.cursor/rules/)' },
353
+ { value: 'skip', label: 'Skip - I\'ll set this up later (run "devdoc ai" anytime)' },
354
+ ];
355
+ const selection = await promptSelect('Set up AI agent configuration?', aiChoices);
356
+ if (selection !== 'skip') {
357
+ aiTool = selection;
358
+ }
359
+ }
360
+ if (aiTool) {
361
+ console.log('');
362
+ logger_1.logger.info('Setting up AI agent configuration...');
363
+ const aiResults = installAIAgents(projectRoot, aiTool);
364
+ if (aiResults.claudeMd) {
365
+ logger_1.logger.success('Created CLAUDE.md');
366
+ }
367
+ for (const skill of aiResults.claudeSkills) {
368
+ logger_1.logger.success(`Created .claude/skills/${skill}/SKILL.md`);
369
+ }
370
+ for (const rule of aiResults.cursorRules) {
371
+ logger_1.logger.success(`Created .cursor/rules/${rule}`);
372
+ }
373
+ }
198
374
  console.log('');
199
375
  logger_1.logger.info('Note: The subdomain is not reserved until you deploy.');
200
376
  logger_1.logger.info('Run "devdoc deploy" to deploy and claim your subdomain.');
377
+ // Show AI agent tips if installed
378
+ if (aiTool) {
379
+ console.log('');
380
+ console.log('AI Agent Quick Start:');
381
+ if (aiTool === 'claude' || aiTool === 'both') {
382
+ console.log(' Claude Code: /bootstrap-docs');
383
+ }
384
+ if (aiTool === 'cursor' || aiTool === 'both') {
385
+ console.log(' Cursor: Ask "generate initial documentation from this repo"');
386
+ }
387
+ }
201
388
  }
202
389
  /**
203
390
  * Generate a URL-friendly slug from a name
@@ -215,4 +402,4 @@ function generateSlug(name) {
215
402
  function generateId() {
216
403
  return Math.random().toString(36).substring(2, 8);
217
404
  }
218
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGkvY29tbWFuZHMvaW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9HQSxvQkErR0M7QUFuTkQsZ0RBQXVCO0FBQ3ZCLHdEQUF5QjtBQUN6Qix5Q0FBeUM7QUFDekMsK0NBQTJDO0FBQzNDLCtDQUFpRDtBQXdCakQsc0NBQXNDO0FBQ3RDLEtBQUssVUFBVSxNQUFNLENBQUMsUUFBZ0IsRUFBRSxZQUFxQjtJQUMzRCxNQUFNLFFBQVEsR0FBRyx3REFBYSxVQUFVLEdBQUMsQ0FBQTtJQUN6QyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO1FBQ2xDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztRQUNwQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07S0FDdkIsQ0FBQyxDQUFBO0lBRUYsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQzdCLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBQzVELEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLEdBQUcsV0FBVyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNwRCxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUE7WUFDVixPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUM5QyxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FBQyxTQUFpQjtJQUMvQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUss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Q0FBQyxDQUFBO0FBQ3hFLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsWUFBWSxDQUFDLElBQVk7SUFDaEMsT0FBTyxJQUFJO1NBQ1IsV0FBVyxFQUFFO1NBQ2IsT0FBTyxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUM7U0FDM0IsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7U0FDckIsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtBQUNyQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLFVBQVU7SUFDakIsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7QUFDbkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgeyBsb2FkQ29uZmlnIH0gZnJvbSAnLi4vLi4vY29uZmlnJ1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyJ1xuaW1wb3J0IHsgREVGQVVMVF9BUElfVVJMIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJ1xuXG5pbnRlcmZhY2UgSW5pdE9wdGlvbnMge1xuICBzbHVnPzogc3RyaW5nXG4gIHN1YmRvbWFpbj86IHN0cmluZ1xuICBmb3JjZT86IGJvb2xlYW5cbiAgdXJsPzogc3RyaW5nXG59XG5cbmludGVyZmFjZSBEZXZEb2NDb25maWcge1xuICBwcm9qZWN0SWQ6IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbiAgc2x1Zzogc3RyaW5nXG4gIHN1YmRvbWFpbjogc3RyaW5nXG4gIGFwaUtleT86IHN0cmluZ1xuICBjcmVhdGVkQXQ6IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgQ2hlY2tTdWJkb21haW5SZXNwb25zZSB7XG4gIGF2YWlsYWJsZTogYm9vbGVhblxuICBlcnJvcj86IHN0cmluZ1xuICBzdWdnZXN0aW9uPzogc3RyaW5nXG59XG5cbi8vIFNpbXBsZSBwcm9tcHQgaGVscGVyIHVzaW5nIHJlYWRsaW5lXG5hc3luYyBmdW5jdGlvbiBwcm9tcHQocXVlc3Rpb246IHN0cmluZywgZGVmYXVsdFZhbHVlPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVhZGxpbmUgPSBhd2FpdCBpbXBvcnQoJ3JlYWRsaW5lJylcbiAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQsXG4gIH0pXG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgZGVmYXVsdEhpbnQgPSBkZWZhdWx0VmFsdWUgPyBgICgke2RlZmF1bHRWYWx1ZX0pYCA6ICcnXG4gICAgcmwucXVlc3Rpb24oYCR7cXVlc3Rpb259JHtkZWZhdWx0SGludH06IGAsIChhbnN3ZXIpID0+IHtcbiAgICAgIHJsLmNsb3NlKClcbiAgICAgIHJlc29sdmUoYW5zd2VyLnRyaW0oKSB8fCBkZWZhdWx0VmFsdWUgfHwgJycpXG4gICAgfSlcbiAgfSlcbn1cblxuLyoqXG4gKiBCYXNpYyBzdWJkb21haW4gZm9ybWF0IHZhbGlkYXRpb24gKHNlcnZlciBkb2VzIGZ1bGwgdmFsaWRhdGlvbilcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZFN1YmRvbWFpbkZvcm1hdChzdWJkb21haW46IHN0cmluZyk6IHsgdmFsaWQ6IGJvb2xlYW47IGVycm9yPzogc3RyaW5nIH0ge1xuICBpZiAoIXN1YmRvbWFpbikge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6ICdTdWJkb21haW4gaXMgcmVxdWlyZWQnIH1cbiAgfVxuICBcbiAgaWYgKHN1YmRvbWFpbi5sZW5ndGggPCAzKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogJ1N1YmRvbWFpbiBtdXN0IGJlIGF0IGxlYXN0IDMgY2hhcmFjdGVycycgfVxuICB9XG4gIFxuICBpZiAoc3ViZG9tYWluLmxlbmd0aCA+IDYzKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogJ1N1YmRvbWFpbiBtdXN0IGJlIDYzIGNoYXJhY3RlcnMgb3IgbGVzcycgfVxuICB9XG4gIFxuICBpZiAoIS9eW2EtejAtOV0oW2EtejAtOS1dKlthLXowLTldKT8kLy50ZXN0KHN1YmRvbWFpbikpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiAnU3ViZG9tYWluIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoIGFscGhhbnVtZXJpYywgY2FuIGNvbnRhaW4gaHlwaGVucycgfVxuICB9XG4gIFxuICBpZiAoLy0tLy50ZXN0KHN1YmRvbWFpbikpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiAnU3ViZG9tYWluIGNhbm5vdCBjb250YWluIGNvbnNlY3V0aXZlIGh5cGhlbnMnIH1cbiAgfVxuICBcbiAgcmV0dXJuIHsgdmFsaWQ6IHRydWUgfVxufVxuXG4vKipcbiAqIENoZWNrIHN1YmRvbWFpbiBhdmFpbGFiaWxpdHkgdmlhIEFQSSAoYWxzbyB2YWxpZGF0ZXMgYWdhaW5zdCBzZXJ2ZXIgYmxhY2tsaXN0KVxuICovXG5hc3luYyBmdW5jdGlvbiBjaGVja1N1YmRvbWFpbkF2YWlsYWJpbGl0eShcbiAgc3ViZG9tYWluOiBzdHJpbmcsXG4gIGFwaVVybDogc3RyaW5nXG4pOiBQcm9taXNlPENoZWNrU3ViZG9tYWluUmVzcG9uc2U+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2FwaVVybH0vYXBpL3N1YmRvbWFpbnMvY2hlY2tgLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHN1YmRvbWFpbiB9KSxcbiAgICB9KVxuICAgIFxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBDaGVja1N1YmRvbWFpblJlc3BvbnNlXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9IGNhdGNoIHtcbiAgICAvLyBJZiBBUEkgaXMgdW5hdmFpbGFibGUsIGFsbG93IHByb2NlZWRpbmcgKHdpbGwgZmFpbCBhdCByZWdpc3RyYXRpb24gaWYgaW52YWxpZClcbiAgICByZXR1cm4geyBhdmFpbGFibGU6IHRydWUgfVxuICB9XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhIERldkRvYyBwcm9qZWN0IHdpdGggLmRldmRvYy5qc29uXG4gKiBOb3RlOiBTdWJkb21haW4gaXMgb25seSByZXNlcnZlZCB3aGVuIGRvY3VtZW50YXRpb24gaXMgYWN0dWFsbHkgZGVwbG95ZWQgKGRldmRvYyBkZXBsb3kpXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0KG9wdGlvbnM6IEluaXRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByb2plY3RSb290ID0gcHJvY2Vzcy5jd2QoKVxuICBjb25zdCBhcGlVcmwgPSBvcHRpb25zLnVybCB8fCBwcm9jZXNzLmVudi5ERVZET0NfQVBJX1VSTCB8fCBERUZBVUxUX0FQSV9VUkxcbiAgXG4gIGxvZ2dlci5pbmZvKCdJbml0aWFsaXppbmcgRGV2RG9jIHByb2plY3QuLi5cXG4nKVxuICBcbiAgLy8gQ2hlY2sgZm9yIGRvY3MuanNvblxuICBjb25zdCBjb25maWdQYXRoID0gcGF0aC5qb2luKHByb2plY3RSb290LCAnZG9jcy5qc29uJylcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGNvbmZpZ1BhdGgpKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdkb2NzLmpzb24gbm90IGZvdW5kIGluIGN1cnJlbnQgZGlyZWN0b3J5JylcbiAgICBsb2dnZXIuaW5mbygnTWFrZSBzdXJlIHlvdSBhcmUgaW4gYSBEZXZEb2MgZG9jdW1lbnRhdGlvbiBwcm9qZWN0IGRpcmVjdG9yeScpXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cbiAgXG4gIC8vIENoZWNrIGlmIC5kZXZkb2MuanNvbiBhbHJlYWR5IGV4aXN0cyB3aXRoIEFQSSBrZXkgKGFscmVhZHkgZGVwbG95ZWQpXG4gIGNvbnN0IGRldmRvY0NvbmZpZ1BhdGggPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsICcuZGV2ZG9jLmpzb24nKVxuICBpZiAoZnMuZXhpc3RzU3luYyhkZXZkb2NDb25maWdQYXRoKSAmJiAhb3B0aW9ucy5mb3JjZSkge1xuICAgIGNvbnN0IGV4aXN0aW5nQ29uZmlnID0gZnMucmVhZEpzb25TeW5jKGRldmRvY0NvbmZpZ1BhdGgpIGFzIERldkRvY0NvbmZpZ1xuICAgIGlmIChleGlzdGluZ0NvbmZpZy5hcGlLZXkpIHtcbiAgICAgIGxvZ2dlci53YXJuKCcuZGV2ZG9jLmpzb24gYWxyZWFkeSBleGlzdHMgd2l0aCBBUEkga2V5IChwcm9qZWN0IGlzIGRlcGxveWVkKScpXG4gICAgICBsb2dnZXIuaW5mbygnVXNlIC0tZm9yY2UgdG8gb3ZlcndyaXRlIGFuZCBjcmVhdGUgYSBuZXcgcHJvamVjdCcpXG4gICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICB9XG4gIH1cbiAgXG4gIC8vIExvYWQgZG9jcy5qc29uIHRvIGdldCBwcm9qZWN0IG5hbWVcbiAgbGV0IHByb2plY3ROYW1lID0gJ015IERvY3VtZW50YXRpb24nXG4gIHRyeSB7XG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgbG9hZENvbmZpZyhwcm9qZWN0Um9vdClcbiAgICBwcm9qZWN0TmFtZSA9IGNvbmZpZy5uYW1lIHx8IHByb2plY3ROYW1lXG4gIH0gY2F0Y2gge1xuICAgIC8vIFVzZSBkZWZhdWx0IG5hbWVcbiAgfVxuICBcbiAgLy8gR2VuZXJhdGUgc2x1ZyBmcm9tIHByb2plY3QgbmFtZSBvciB1c2UgcHJvdmlkZWQgc2x1Z1xuICBjb25zdCBzbHVnID0gb3B0aW9ucy5zbHVnIHx8IGdlbmVyYXRlU2x1Zyhwcm9qZWN0TmFtZSlcbiAgXG4gIC8vIEdldCBzdWJkb21haW4gLSBwcm9tcHQgaWYgbm90IHByb3ZpZGVkXG4gIGxldCBzdWJkb21haW4gPSBvcHRpb25zLnN1YmRvbWFpblxuICBcbiAgaWYgKCFzdWJkb21haW4pIHtcbiAgICBjb25zdCBzdWdnZXN0ZWRTdWJkb21haW4gPSBzbHVnXG4gICAgY29uc29sZS5sb2coJycpXG4gICAgc3ViZG9tYWluID0gYXdhaXQgcHJvbXB0KGBFbnRlciBzdWJkb21haW4gZm9yICR7c3VnZ2VzdGVkU3ViZG9tYWlufS5kZXZkb2Muc2hgLCBzdWdnZXN0ZWRTdWJkb21haW4pXG4gICAgc3ViZG9tYWluID0gc3ViZG9tYWluLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTktXS9nLCAnLScpLnJlcGxhY2UoL14tfC0kL2csICcnKVxuICB9XG4gIFxuICAvLyBWYWxpZGF0ZSBzdWJkb21haW4gZm9ybWF0IGxvY2FsbHlcbiAgbGV0IGZvcm1hdENoZWNrID0gaXNWYWxpZFN1YmRvbWFpbkZvcm1hdChzdWJkb21haW4pXG4gIGlmICghZm9ybWF0Q2hlY2sudmFsaWQpIHtcbiAgICBsb2dnZXIuZXJyb3IoZm9ybWF0Q2hlY2suZXJyb3IhKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG4gIFxuICAvLyBDaGVjayBzdWJkb21haW4gYXZhaWxhYmlsaXR5IHZpYSBBUEkgKHNlcnZlciB2YWxpZGF0ZXMgYmxhY2tsaXN0KVxuICAvLyBOb3RlOiBUaGlzIG9ubHkgY2hlY2tzIGF2YWlsYWJpbGl0eSwgaXQgZG9lcyBOT1QgcmVzZXJ2ZSB0aGUgc3ViZG9tYWluXG4gIC8vIExvb3AgdW50aWwgd2UgZmluZCBhbiBhdmFpbGFibGUgc3ViZG9tYWluXG4gIGxldCBzdWJkb21haW5BdmFpbGFibGUgPSBmYWxzZVxuICB3aGlsZSAoIXN1YmRvbWFpbkF2YWlsYWJsZSkge1xuICAgIGxvZ2dlci5pbmZvKGBDaGVja2luZyBpZiAke3N1YmRvbWFpbn0uZGV2ZG9jLnNoIGlzIGF2YWlsYWJsZS4uLmApXG4gICAgY29uc3QgYXZhaWxhYmlsaXR5ID0gYXdhaXQgY2hlY2tTdWJkb21haW5BdmFpbGFiaWxpdHkoc3ViZG9tYWluLCBhcGlVcmwpXG4gICAgXG4gICAgaWYgKCFhdmFpbGFiaWxpdHkuYXZhaWxhYmxlKSB7XG4gICAgICBjb25zb2xlLmxvZygnJylcbiAgICAgIGxvZ2dlci53YXJuKGF2YWlsYWJpbGl0eS5lcnJvciB8fCBgU3ViZG9tYWluIFwiJHtzdWJkb21haW59XCIgaXMgbm90IGF2YWlsYWJsZWApXG4gICAgICBcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBhdmFpbGFiaWxpdHkuc3VnZ2VzdGlvbiB8fCBgJHtzdWJkb21haW59LWRvY3NgXG4gICAgICBjb25zb2xlLmxvZygnJylcbiAgICAgIGxvZ2dlci5pbmZvKGBTdWdnZXN0aW9uOiAke3N1Z2dlc3Rpb259LmRldmRvYy5zaGApXG4gICAgICBjb25zb2xlLmxvZygnJylcbiAgICAgIFxuICAgICAgLy8gUHJvbXB0IGZvciBuZXcgc3ViZG9tYWluXG4gICAgICBzdWJkb21haW4gPSBhd2FpdCBwcm9tcHQoJ0VudGVyIGEgZGlmZmVyZW50IHN1YmRvbWFpbicsIHN1Z2dlc3Rpb24pXG4gICAgICBzdWJkb21haW4gPSBzdWJkb21haW4udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOS1dL2csICctJykucmVwbGFjZSgvXi18LSQvZywgJycpXG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIGZvcm1hdFxuICAgICAgZm9ybWF0Q2hlY2sgPSBpc1ZhbGlkU3ViZG9tYWluRm9ybWF0KHN1YmRvbWFpbilcbiAgICAgIGlmICghZm9ybWF0Q2hlY2sudmFsaWQpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGZvcm1hdENoZWNrLmVycm9yISlcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc29sZS5sb2coJycpXG4gICAgfSBlbHNlIHtcbiAgICAgIHN1YmRvbWFpbkF2YWlsYWJsZSA9IHRydWVcbiAgICAgIGxvZ2dlci5zdWNjZXNzKGDinJMgJHtzdWJkb21haW59LmRldmRvYy5zaCBpcyBhdmFpbGFibGUhYClcbiAgICAgIGNvbnNvbGUubG9nKCcnKVxuICAgIH1cbiAgfVxuICBcbiAgLy8gQ3JlYXRlIC5kZXZkb2MuanNvbiB3aXRoIHN1YmRvbWFpbiAoYnV0IE5PIEFQSSBrZXkgLSBub3QgcmVnaXN0ZXJlZCB5ZXQpXG4gIC8vIFRoZSBzdWJkb21haW4gd2lsbCBvbmx5IGJlIHJlc2VydmVkIHdoZW4gdGhlIHVzZXIgYWN0dWFsbHkgZGVwbG95c1xuICBjb25zdCBwcm9qZWN0SWQgPSBgJHtzbHVnfS0ke2dlbmVyYXRlSWQoKX1gXG4gIGNvbnN0IGRldmRvY0NvbmZpZzogRGV2RG9jQ29uZmlnID0ge1xuICAgIHByb2plY3RJZCxcbiAgICBuYW1lOiBwcm9qZWN0TmFtZSxcbiAgICBzbHVnLFxuICAgIHN1YmRvbWFpbixcbiAgICBjcmVhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAvLyBOb3RlOiBObyBhcGlLZXkgLSBzdWJkb21haW4gaXMgbm90IHJlc2VydmVkIHVudGlsIGRlcGxveVxuICB9XG4gIFxuICBmcy53cml0ZUpzb25TeW5jKGRldmRvY0NvbmZpZ1BhdGgsIGRldmRvY0NvbmZpZywgeyBzcGFjZXM6IDIgfSlcbiAgXG4gIGxvZ2dlci5zdWNjZXNzKCfinJMgUHJvamVjdCBpbml0aWFsaXplZCcpXG4gIGNvbnNvbGUubG9nKCcnKVxuICBjb25zb2xlLmxvZygnICBTdWJkb21haW46JywgYCR7c3ViZG9tYWlufS5kZXZkb2Muc2hgKVxuICBjb25zb2xlLmxvZygnICBTdGF0dXM6JywgJ05vdCB5ZXQgZGVwbG95ZWQnKVxuICBjb25zb2xlLmxvZygnJylcbiAgbG9nZ2VyLmluZm8oJ05vdGU6IFRoZSBzdWJkb21haW4gaXMgbm90IHJlc2VydmVkIHVudGlsIHlvdSBkZXBsb3kuJylcbiAgbG9nZ2VyLmluZm8oJ1J1biBcImRldmRvYyBkZXBsb3lcIiB0byBkZXBsb3kgYW5kIGNsYWltIHlvdXIgc3ViZG9tYWluLicpXG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBVUkwtZnJpZW5kbHkgc2x1ZyBmcm9tIGEgbmFtZVxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZVNsdWcobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5hbWVcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC9bXmEtejAtOV0rL2csICctJylcbiAgICAucmVwbGFjZSgvXi18LSQvZywgJycpXG4gICAgLnN1YnN0cmluZygwLCA1MClcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHNob3J0IHJhbmRvbSBJRFxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUlkKCk6IHN0cmluZyB7XG4gIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOClcbn1cbiJdfQ==
405
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGkvY29tbWFuZHMvaW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQStQQSxvQkE4S0M7QUE3YUQsZ0RBQXVCO0FBQ3ZCLHdEQUF5QjtBQUN6Qix5Q0FBeUM7QUFDekMsK0NBQTJDO0FBQzNDLCtDQUFpRDtBQVVqRCwrQkFBK0I7QUFDL0IsTUFBTSxhQUFhLEdBQUc7SUFDcEIsZ0JBQWdCO0lBQ2hCLGNBQWM7SUFDZCxpQkFBaUI7SUFDakIsV0FBVztJQUNYLFlBQVk7SUFDWixpQkFBaUI7SUFDakIsa0JBQWtCO0lBQ2xCLG1CQUFtQjtJQUNuQixnQkFBZ0I7Q0FDakIsQ0FBQTtBQUVELHlCQUF5QjtBQUN6QixNQUFNLFlBQVksR0FBRztJQUNuQixZQUFZO0lBQ1osc0JBQXNCO0lBQ3RCLG9CQUFvQjtJQUNwQixpQkFBaUI7Q0FDbEIsQ0FBQTtBQWlCRCxzQ0FBc0M7QUFDdEMsS0FBSyxVQUFVLE1BQU0sQ0FBQyxRQUFnQixFQUFFLFlBQXFCO0lBQzNELE1BQU0sUUFBUSxHQUFHLHdEQUFhLFVBQVUsR0FBQyxDQUFBO0lBQ3pDLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUM7UUFDbEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1FBQ3BCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtLQUN2QixDQUFDLENBQUE7SUFFRixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDN0IsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFDNUQsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsR0FBRyxXQUFXLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3BELEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtZQUNWLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQzlDLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQsS0FBSyxVQUFVLFlBQVksQ0FBQyxRQUFnQixFQUFFLE9BQTJDO0lBQ3ZGLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFBO0lBQzlCLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDNUMsQ0FBQyxDQUFDLENBQUE7SUFDRixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUE7SUFFYixNQUFNLFFBQVEsR0FBRyx3REFBYSxVQUFVLEdBQUMsQ0FBQTtJQUN6QyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO1FBQ2xDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztRQUNwQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07S0FDdkIsQ0FBQyxDQUFBO0lBRUYsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQzdCLEVBQUUsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUN2QyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUE7WUFDVixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUM3QyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDekMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUMvQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sMEJBQTBCO2dCQUMxQixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQzNCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxjQUFjO0lBQ3JCLGdDQUFnQztJQUNoQyxJQUFJLFNBQVMsR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUVuRSxJQUFJLGtCQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDN0IsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUVELGtEQUFrRDtJQUNsRCxTQUFTLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBRWhHLElBQUksa0JBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUM3QixPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLHFCQUFxQixDQUFDLFdBQW1CO0lBQ2hELE1BQU0sUUFBUSxHQUFHLGtCQUFFLENBQUMsVUFBVSxDQUFDLGNBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUE7SUFDbkUsTUFBTSxZQUFZLEdBQUcsa0JBQUUsQ0FBQyxVQUFVLENBQUMsY0FBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7SUFDL0UsTUFBTSxXQUFXLEdBQUcsa0JBQUUsQ0FBQyxVQUFVLENBQUMsY0FBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUE7SUFFN0UsT0FBTztRQUNMLE1BQU0sRUFBRSxRQUFRLElBQUksWUFBWTtRQUNoQyxNQUFNLEVBQUUsV0FBVztLQUNwQixDQUFBO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxlQUFlLENBQ3RCLFdBQW1CLEVBQ25CLElBQWtDO0lBRWxDLE1BQU0sT0FBTyxHQUFHO1FBQ2QsUUFBUSxFQUFFLEtBQUs7UUFDZixZQUFZLEVBQUUsRUFBYztRQUM1QixXQUFXLEVBQUUsRUFBYztLQUM1QixDQUFBO0lBRUQsTUFBTSxTQUFTLEdBQUcsY0FBYyxFQUFFLENBQUE7SUFDbEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2YsZUFBTSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO1FBQzNDLE9BQU8sT0FBTyxDQUFBO0lBQ2hCLENBQUM7SUFFRCw0QkFBNEI7SUFDNUIsSUFBSSxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUN6QyxpQkFBaUI7UUFDakIsTUFBTSxjQUFjLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUE7UUFDeEQsTUFBTSxZQUFZLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUE7UUFDeEQsSUFBSSxrQkFBRSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ2xDLGtCQUFFLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQTtZQUN6QyxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQTtRQUN6QixDQUFDO1FBRUQsY0FBYztRQUNkLE1BQU0sZUFBZSxHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUNqRSxNQUFNLGFBQWEsR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFFakUsSUFBSSxrQkFBRSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1lBQ25DLGtCQUFFLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1lBRS9CLEtBQUssTUFBTSxLQUFLLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2xDLE1BQU0sU0FBUyxHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFBO2dCQUNuRCxNQUFNLE9BQU8sR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQTtnQkFFL0MsSUFBSSxrQkFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO29CQUM3QixrQkFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUE7b0JBQy9CLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUNsQyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsdUJBQXVCO0lBQ3ZCLElBQUksSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDekMsTUFBTSxjQUFjLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQy9ELE1BQU0sWUFBWSxHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUUvRCxJQUFJLGtCQUFFLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDbEMsa0JBQUUsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUE7WUFFOUIsS0FBSyxNQUFNLElBQUksSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxVQUFVLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUE7Z0JBQ2xELE1BQU0sUUFBUSxHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFBO2dCQUU5QyxJQUFJLGtCQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQzlCLGtCQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQTtvQkFDakMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ2hDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQTtBQUNoQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLHNCQUFzQixDQUFDLFNBQWlCO0lBQy9DLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSx1QkFBdUIsRUFBRSxDQUFBO0lBQ3pELENBQUM7SUFFRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDekIsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLHlDQUF5QyxFQUFFLENBQUE7SUFDM0UsQ0FBQztJQUVELElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUMxQixPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUseUNBQXlDLEVBQUUsQ0FBQTtJQUMzRSxDQUFDO0lBRUQsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ3ZELE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxxRUFBcUUsRUFBRSxDQUFBO0lBQ3ZHLENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsOENBQThDLEVBQUUsQ0FBQTtJQUNoRixDQUFDO0lBRUQsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQTtBQUN4QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxLQUFLLFVBQVUsMEJBQTBCLENBQ3ZDLFNBQWlCLEVBQ2pCLE1BQWM7SUFFZCxJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLE1BQU0sdUJBQXVCLEVBQUU7WUFDN0QsTUFBTSxFQUFFLE1BQU07WUFDZCxPQUFPLEVBQUU7Z0JBQ1AsY0FBYyxFQUFFLGtCQUFrQjthQUNuQztZQUNELElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUM7U0FDcEMsQ0FBQyxDQUFBO1FBRUYsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUE0QixDQUFBO1FBQzlELE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLGlGQUFpRjtRQUNqRixPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFBO0lBQzVCLENBQUM7QUFDSCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0ksS0FBSyxVQUFVLElBQUksQ0FBQyxPQUFvQjtJQUM3QyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUE7SUFDakMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsSUFBSSwyQkFBZSxDQUFBO0lBRTNFLGVBQU0sQ0FBQyxJQUFJLENBQUMsa0NBQWtDLENBQUMsQ0FBQTtJQUUvQyxzQkFBc0I7SUFDdEIsTUFBTSxVQUFVLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUE7SUFDdEQsSUFBSSxDQUFDLGtCQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDL0IsZUFBTSxDQUFDLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFBO1FBQ3hELGVBQU0sQ0FBQyxJQUFJLENBQUMsK0RBQStELENBQUMsQ0FBQTtRQUM1RSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pCLENBQUM7SUFFRCx1RUFBdUU7SUFDdkUsTUFBTSxnQkFBZ0IsR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsQ0FBQTtJQUMvRCxJQUFJLGtCQUFFLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEQsTUFBTSxjQUFjLEdBQUcsa0JBQUUsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQWlCLENBQUE7UUFDeEUsSUFBSSxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDMUIsZUFBTSxDQUFDLElBQUksQ0FBQyxnRUFBZ0UsQ0FBQyxDQUFBO1lBQzdFLGVBQU0sQ0FBQyxJQUFJLENBQUMsbURBQW1ELENBQUMsQ0FBQTtZQUNoRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBRUQscUNBQXFDO0lBQ3JDLElBQUksV0FBVyxHQUFHLGtCQUFrQixDQUFBO0lBQ3BDLElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBQSxtQkFBVSxFQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQzVDLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQTtJQUMxQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsbUJBQW1CO0lBQ3JCLENBQUM7SUFFRCx1REFBdUQ7SUFDdkQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUE7SUFFdEQseUNBQXlDO0lBQ3pDLElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUE7SUFFakMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2YsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUE7UUFDL0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNmLFNBQVMsR0FBRyxNQUFNLE1BQU0sQ0FBQyx1QkFBdUIsa0JBQWtCLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxDQUFBO1FBQ25HLFNBQVMsR0FBRyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ3ZGLENBQUM7SUFFRCxvQ0FBb0M7SUFDcEMsSUFBSSxXQUFXLEdBQUcsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDbkQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2QixlQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFNLENBQUMsQ0FBQTtRQUNoQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pCLENBQUM7SUFFRCxvRUFBb0U7SUFDcEUseUVBQXlFO0lBQ3pFLDRDQUE0QztJQUM1QyxJQUFJLGtCQUFrQixHQUFHLEtBQUssQ0FBQTtJQUM5QixPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMzQixlQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsU0FBUyw0QkFBNEIsQ0FBQyxDQUFBO1FBQ2pFLE1BQU0sWUFBWSxHQUFHLE1BQU0sMEJBQTBCLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBRXhFLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUNmLGVBQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxjQUFjLFNBQVMsb0JBQW9CLENBQUMsQ0FBQTtZQUU5RSxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsVUFBVSxJQUFJLEdBQUcsU0FBUyxPQUFPLENBQUE7WUFDakUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUNmLGVBQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxVQUFVLFlBQVksQ0FBQyxDQUFBO1lBQ2xELE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7WUFFZiwyQkFBMkI7WUFDM0IsU0FBUyxHQUFHLE1BQU0sTUFBTSxDQUFDLDZCQUE2QixFQUFFLFVBQVUsQ0FBQyxDQUFBO1lBQ25FLFNBQVMsR0FBRyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFBO1lBRXJGLGtCQUFrQjtZQUNsQixXQUFXLEdBQUcsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDdkIsZUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBTSxDQUFDLENBQUE7Z0JBQ2hDLFNBQVE7WUFDVixDQUFDO1lBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNqQixDQUFDO2FBQU0sQ0FBQztZQUNOLGtCQUFrQixHQUFHLElBQUksQ0FBQTtZQUN6QixlQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssU0FBUywwQkFBMEIsQ0FBQyxDQUFBO1lBQ3hELE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDakIsQ0FBQztJQUNILENBQUM7SUFFRCwyRUFBMkU7SUFDM0UscUVBQXFFO0lBQ3JFLE1BQU0sU0FBUyxHQUFHLEdBQUcsSUFBSSxJQUFJLFVBQVUsRUFBRSxFQUFFLENBQUE7SUFDM0MsTUFBTSxZQUFZLEdBQWlCO1FBQ2pDLFNBQVM7UUFDVCxJQUFJLEVBQUUsV0FBVztRQUNqQixJQUFJO1FBQ0osU0FBUztRQUNULFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtRQUNuQywyREFBMkQ7S0FDNUQsQ0FBQTtJQUVELGtCQUFFLENBQUMsYUFBYSxDQUFDLGdCQUFnQixFQUFFLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBRS9ELGVBQU0sQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtJQUN2QyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsR0FBRyxTQUFTLFlBQVksQ0FBQyxDQUFBO0lBQ3JELE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLGtCQUFrQixDQUFDLENBQUE7SUFFNUMsc0NBQXNDO0lBQ3RDLE1BQU0sVUFBVSxHQUFHLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQ3JELElBQUksTUFBTSxHQUF3QyxJQUFJLENBQUE7SUFFdEQsMENBQTBDO0lBQzFDLElBQUksT0FBTyxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUN4Qix5Q0FBeUM7UUFDekMsTUFBTSxTQUFTLEdBQUc7WUFDaEIsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSwrQkFBK0IsRUFBRTtZQUN6RCxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLG9DQUFvQyxFQUFFO1lBQ2hFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsaUNBQWlDLEVBQUU7WUFDN0QsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxnQ0FBZ0MsRUFBRTtTQUMzRCxDQUFBO1FBQ0QsTUFBTSxTQUFTLEdBQUcsTUFBTSxZQUFZLENBQUMsZ0NBQWdDLEVBQUUsU0FBUyxDQUFDLENBQUE7UUFDakYsSUFBSSxTQUFTLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDekIsTUFBTSxHQUFHLFNBQXlDLENBQUE7UUFDcEQsQ0FBQztJQUNILENBQUM7U0FBTSxJQUFJLE9BQU8sT0FBTyxDQUFDLEVBQUUsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMxQyx5Q0FBeUM7UUFDekMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxFQUFrQyxDQUFBO0lBQ3JELENBQUM7U0FBTSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNwRCxvREFBb0Q7UUFDcEQsTUFBTSxTQUFTLEdBQUc7WUFDaEIsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSwrQkFBK0IsRUFBRTtZQUN6RCxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLG9DQUFvQyxFQUFFO1lBQ2hFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsaUNBQWlDLEVBQUU7WUFDN0QsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSwwREFBMEQsRUFBRTtTQUNyRixDQUFBO1FBQ0QsTUFBTSxTQUFTLEdBQUcsTUFBTSxZQUFZLENBQUMsZ0NBQWdDLEVBQUUsU0FBUyxDQUFDLENBQUE7UUFDakYsSUFBSSxTQUFTLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDekIsTUFBTSxHQUFHLFNBQXlDLENBQUE7UUFDcEQsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNmLGVBQU0sQ0FBQyxJQUFJLENBQUMsc0NBQXNDLENBQUMsQ0FBQTtRQUNuRCxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBRXRELElBQUksU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3ZCLGVBQU0sQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtRQUNyQyxDQUFDO1FBQ0QsS0FBSyxNQUFNLEtBQUssSUFBSSxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDM0MsZUFBTSxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsS0FBSyxXQUFXLENBQUMsQ0FBQTtRQUM1RCxDQUFDO1FBQ0QsS0FBSyxNQUFNLElBQUksSUFBSSxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDekMsZUFBTSxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUNqRCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDZixlQUFNLENBQUMsSUFBSSxDQUFDLHVEQUF1RCxDQUFDLENBQUE7SUFDcEUsZUFBTSxDQUFDLElBQUksQ0FBQyx5REFBeUQsQ0FBQyxDQUFBO0lBRXRFLGtDQUFrQztJQUNsQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtRQUNwQyxJQUFJLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQzdDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLENBQUMsQ0FBQTtRQUMvQyxDQUFDO1FBQ0QsSUFBSSxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUM3QyxPQUFPLENBQUMsR0FBRyxDQUFDLCtEQUErRCxDQUFDLENBQUE7UUFDOUUsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLFlBQVksQ0FBQyxJQUFZO0lBQ2hDLE9BQU8sSUFBSTtTQUNSLFdBQVcsRUFBRTtTQUNiLE9BQU8sQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDO1NBQzNCLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1NBQ3JCLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7QUFDckIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxVQUFVO0lBQ2pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBQ25ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHsgbG9hZENvbmZpZyB9IGZyb20gJy4uLy4uL2NvbmZpZydcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlcidcbmltcG9ydCB7IERFRkFVTFRfQVBJX1VSTCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cydcblxuaW50ZXJmYWNlIEluaXRPcHRpb25zIHtcbiAgc2x1Zz86IHN0cmluZ1xuICBzdWJkb21haW4/OiBzdHJpbmdcbiAgZm9yY2U/OiBib29sZWFuXG4gIHVybD86IHN0cmluZ1xuICBhaT86IGJvb2xlYW4gfCAnY2xhdWRlJyB8ICdjdXJzb3InIHwgJ2JvdGgnXG59XG5cbi8vIENsYXVkZSBDb2RlIHNraWxscyB0byBjcmVhdGVcbmNvbnN0IENMQVVERV9TS0lMTFMgPSBbXG4gICdib290c3RyYXAtZG9jcycsXG4gICdtaWdyYXRlLWRvY3MnLFxuICAnaW1wb3J0LWFwaS1zcGVjJyxcbiAgJ3N5bmMtZG9jcycsXG4gICdjaGVjay1kb2NzJyxcbiAgJ2NyZWF0ZS1kb2MtcGFnZScsXG4gICd1cGRhdGUtZG9jcy1qc29uJyxcbiAgJ2dlbmVyYXRlLWFwaS1kb2NzJyxcbiAgJ2RvY3MtZnJvbS1jb2RlJyxcbl1cblxuLy8gQ3Vyc29yIHJ1bGVzIHRvIGNyZWF0ZVxuY29uc3QgQ1VSU09SX1JVTEVTID0gW1xuICAnZGV2ZG9jLm1kYycsXG4gICdkZXZkb2MtYm9vdHN0cmFwLm1kYycsXG4gICdkZXZkb2MtbWlncmF0ZS5tZGMnLFxuICAnZGV2ZG9jLXN5bmMubWRjJyxcbl1cblxuaW50ZXJmYWNlIERldkRvY0NvbmZpZyB7XG4gIHByb2plY3RJZDogc3RyaW5nXG4gIG5hbWU6IHN0cmluZ1xuICBzbHVnOiBzdHJpbmdcbiAgc3ViZG9tYWluOiBzdHJpbmdcbiAgYXBpS2V5Pzogc3RyaW5nXG4gIGNyZWF0ZWRBdDogc3RyaW5nXG59XG5cbmludGVyZmFjZSBDaGVja1N1YmRvbWFpblJlc3BvbnNlIHtcbiAgYXZhaWxhYmxlOiBib29sZWFuXG4gIGVycm9yPzogc3RyaW5nXG4gIHN1Z2dlc3Rpb24/OiBzdHJpbmdcbn1cblxuLy8gU2ltcGxlIHByb21wdCBoZWxwZXIgdXNpbmcgcmVhZGxpbmVcbmFzeW5jIGZ1bmN0aW9uIHByb21wdChxdWVzdGlvbjogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZWFkbGluZSA9IGF3YWl0IGltcG9ydCgncmVhZGxpbmUnKVxuICBjb25zdCBybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XG4gICAgaW5wdXQ6IHByb2Nlc3Muc3RkaW4sXG4gICAgb3V0cHV0OiBwcm9jZXNzLnN0ZG91dCxcbiAgfSlcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBkZWZhdWx0SGludCA9IGRlZmF1bHRWYWx1ZSA/IGAgKCR7ZGVmYXVsdFZhbHVlfSlgIDogJydcbiAgICBybC5xdWVzdGlvbihgJHtxdWVzdGlvbn0ke2RlZmF1bHRIaW50fTogYCwgKGFuc3dlcikgPT4ge1xuICAgICAgcmwuY2xvc2UoKVxuICAgICAgcmVzb2x2ZShhbnN3ZXIudHJpbSgpIHx8IGRlZmF1bHRWYWx1ZSB8fCAnJylcbiAgICB9KVxuICB9KVxufVxuXG5hc3luYyBmdW5jdGlvbiBwcm9tcHRTZWxlY3QocXVlc3Rpb246IHN0cmluZywgY2hvaWNlczogeyB2YWx1ZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnNvbGUubG9nKGBcXG4ke3F1ZXN0aW9ufVxcbmApXG4gIGNob2ljZXMuZm9yRWFjaCgoY2hvaWNlLCBpKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCAgJHtpICsgMX0uICR7Y2hvaWNlLmxhYmVsfWApXG4gIH0pXG4gIGNvbnNvbGUubG9nKClcbiAgXG4gIGNvbnN0IHJlYWRsaW5lID0gYXdhaXQgaW1wb3J0KCdyZWFkbGluZScpXG4gIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHtcbiAgICBpbnB1dDogcHJvY2Vzcy5zdGRpbixcbiAgICBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0LFxuICB9KVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHJsLnF1ZXN0aW9uKCdFbnRlciBudW1iZXI6ICcsIChhbnN3ZXIpID0+IHtcbiAgICAgIHJsLmNsb3NlKClcbiAgICAgIGNvbnN0IGluZGV4ID0gcGFyc2VJbnQoYW5zd2VyLnRyaW0oKSwgMTApIC0gMVxuICAgICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCBjaG9pY2VzLmxlbmd0aCkge1xuICAgICAgICByZXNvbHZlKGNob2ljZXNbaW5kZXhdLnZhbHVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRGVmYXVsdCB0byBmaXJzdCBjaG9pY2VcbiAgICAgICAgcmVzb2x2ZShjaG9pY2VzWzBdLnZhbHVlKVxuICAgICAgfVxuICAgIH0pXG4gIH0pXG59XG5cbi8qKlxuICogR2V0IHRoZSBBSSBhZ2VudHMgdGVtcGxhdGUgZGlyZWN0b3J5IHBhdGhcbiAqL1xuZnVuY3Rpb24gZ2V0QUlBZ2VudHNEaXIoKTogc3RyaW5nIHwgbnVsbCB7XG4gIC8vIFRyeSByZWxhdGl2ZSB0byBjb21waWxlZCBkaXN0XG4gIGxldCBhZ2VudHNEaXIgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnLi4nLCAnYWktYWdlbnRzJylcbiAgXG4gIGlmIChmcy5leGlzdHNTeW5jKGFnZW50c0RpcikpIHtcbiAgICByZXR1cm4gYWdlbnRzRGlyXG4gIH1cbiAgXG4gIC8vIFRyeSBkZXZkb2MvdGVtcGxhdGVzIGF0IHJlcG8gcm9vdCAoZGV2ZWxvcG1lbnQpXG4gIGFnZW50c0RpciA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsICcuLicsICcuLicsICcuLicsICdkZXZkb2MnLCAndGVtcGxhdGVzJywgJ3N0YXJ0ZXInKVxuICBcbiAgaWYgKGZzLmV4aXN0c1N5bmMoYWdlbnRzRGlyKSkge1xuICAgIHJldHVybiBhZ2VudHNEaXJcbiAgfVxuICBcbiAgcmV0dXJuIG51bGxcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBBSSBhZ2VudHMgYXJlIGFscmVhZHkgY29uZmlndXJlZFxuICovXG5mdW5jdGlvbiBoYXNBSUFnZW50c0NvbmZpZ3VyZWQocHJvamVjdFBhdGg6IHN0cmluZyk6IHsgY2xhdWRlOiBib29sZWFuOyBjdXJzb3I6IGJvb2xlYW4gfSB7XG4gIGNvbnN0IGNsYXVkZU1kID0gZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4ocHJvamVjdFBhdGgsICdDTEFVREUubWQnKSlcbiAgY29uc3QgY2xhdWRlU2tpbGxzID0gZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4ocHJvamVjdFBhdGgsICcuY2xhdWRlJywgJ3NraWxscycpKVxuICBjb25zdCBjdXJzb3JSdWxlcyA9IGZzLmV4aXN0c1N5bmMocGF0aC5qb2luKHByb2plY3RQYXRoLCAnLmN1cnNvcicsICdydWxlcycpKVxuICBcbiAgcmV0dXJuIHtcbiAgICBjbGF1ZGU6IGNsYXVkZU1kIHx8IGNsYXVkZVNraWxscyxcbiAgICBjdXJzb3I6IGN1cnNvclJ1bGVzLFxuICB9XG59XG5cbi8qKlxuICogSW5zdGFsbCBBSSBhZ2VudCBjb25maWd1cmF0aW9uIGZpbGVzXG4gKi9cbmZ1bmN0aW9uIGluc3RhbGxBSUFnZW50cyhcbiAgcHJvamVjdFBhdGg6IHN0cmluZywgXG4gIHRvb2w6ICdjbGF1ZGUnIHwgJ2N1cnNvcicgfCAnYm90aCdcbik6IHsgY2xhdWRlTWQ6IGJvb2xlYW47IGNsYXVkZVNraWxsczogc3RyaW5nW107IGN1cnNvclJ1bGVzOiBzdHJpbmdbXSB9IHtcbiAgY29uc3QgcmVzdWx0cyA9IHtcbiAgICBjbGF1ZGVNZDogZmFsc2UsXG4gICAgY2xhdWRlU2tpbGxzOiBbXSBhcyBzdHJpbmdbXSxcbiAgICBjdXJzb3JSdWxlczogW10gYXMgc3RyaW5nW10sXG4gIH1cblxuICBjb25zdCBhZ2VudHNEaXIgPSBnZXRBSUFnZW50c0RpcigpXG4gIGlmICghYWdlbnRzRGlyKSB7XG4gICAgbG9nZ2VyLndhcm4oJ0FJIGFnZW50IHRlbXBsYXRlcyBub3QgZm91bmQnKVxuICAgIHJldHVybiByZXN1bHRzXG4gIH1cblxuICAvLyBJbnN0YWxsIENsYXVkZSBDb2RlIGZpbGVzXG4gIGlmICh0b29sID09PSAnY2xhdWRlJyB8fCB0b29sID09PSAnYm90aCcpIHtcbiAgICAvLyBDb3B5IENMQVVERS5tZFxuICAgIGNvbnN0IGNsYXVkZU1kU291cmNlID0gcGF0aC5qb2luKGFnZW50c0RpciwgJ0NMQVVERS5tZCcpXG4gICAgY29uc3QgY2xhdWRlTWREZXN0ID0gcGF0aC5qb2luKHByb2plY3RQYXRoLCAnQ0xBVURFLm1kJylcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhjbGF1ZGVNZFNvdXJjZSkpIHtcbiAgICAgIGZzLmNvcHlTeW5jKGNsYXVkZU1kU291cmNlLCBjbGF1ZGVNZERlc3QpXG4gICAgICByZXN1bHRzLmNsYXVkZU1kID0gdHJ1ZVxuICAgIH1cblxuICAgIC8vIENvcHkgc2tpbGxzXG4gICAgY29uc3Qgc291cmNlU2tpbGxzRGlyID0gcGF0aC5qb2luKGFnZW50c0RpciwgJy5jbGF1ZGUnLCAnc2tpbGxzJylcbiAgICBjb25zdCBkZXN0U2tpbGxzRGlyID0gcGF0aC5qb2luKHByb2plY3RQYXRoLCAnLmNsYXVkZScsICdza2lsbHMnKVxuICAgIFxuICAgIGlmIChmcy5leGlzdHNTeW5jKHNvdXJjZVNraWxsc0RpcikpIHtcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGVzdFNraWxsc0RpcilcbiAgICAgIFxuICAgICAgZm9yIChjb25zdCBza2lsbCBvZiBDTEFVREVfU0tJTExTKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZURpciA9IHBhdGguam9pbihzb3VyY2VTa2lsbHNEaXIsIHNraWxsKVxuICAgICAgICBjb25zdCBkZXN0RGlyID0gcGF0aC5qb2luKGRlc3RTa2lsbHNEaXIsIHNraWxsKVxuICAgICAgICBcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoc291cmNlRGlyKSkge1xuICAgICAgICAgIGZzLmNvcHlTeW5jKHNvdXJjZURpciwgZGVzdERpcilcbiAgICAgICAgICByZXN1bHRzLmNsYXVkZVNraWxscy5wdXNoKHNraWxsKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gSW5zdGFsbCBDdXJzb3IgZmlsZXNcbiAgaWYgKHRvb2wgPT09ICdjdXJzb3InIHx8IHRvb2wgPT09ICdib3RoJykge1xuICAgIGNvbnN0IHNvdXJjZVJ1bGVzRGlyID0gcGF0aC5qb2luKGFnZW50c0RpciwgJy5jdXJzb3InLCAncnVsZXMnKVxuICAgIGNvbnN0IGRlc3RSdWxlc0RpciA9IHBhdGguam9pbihwcm9qZWN0UGF0aCwgJy5jdXJzb3InLCAncnVsZXMnKVxuICAgIFxuICAgIGlmIChmcy5leGlzdHNTeW5jKHNvdXJjZVJ1bGVzRGlyKSkge1xuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkZXN0UnVsZXNEaXIpXG4gICAgICBcbiAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBDVVJTT1JfUlVMRVMpIHtcbiAgICAgICAgY29uc3Qgc291cmNlUGF0aCA9IHBhdGguam9pbihzb3VyY2VSdWxlc0RpciwgcnVsZSlcbiAgICAgICAgY29uc3QgZGVzdFBhdGggPSBwYXRoLmpvaW4oZGVzdFJ1bGVzRGlyLCBydWxlKVxuICAgICAgICBcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoc291cmNlUGF0aCkpIHtcbiAgICAgICAgICBmcy5jb3B5U3luYyhzb3VyY2VQYXRoLCBkZXN0UGF0aClcbiAgICAgICAgICByZXN1bHRzLmN1cnNvclJ1bGVzLnB1c2gocnVsZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHRzXG59XG5cbi8qKlxuICogQmFzaWMgc3ViZG9tYWluIGZvcm1hdCB2YWxpZGF0aW9uIChzZXJ2ZXIgZG9lcyBmdWxsIHZhbGlkYXRpb24pXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRTdWJkb21haW5Gb3JtYXQoc3ViZG9tYWluOiBzdHJpbmcpOiB7IHZhbGlkOiBib29sZWFuOyBlcnJvcj86IHN0cmluZyB9IHtcbiAgaWYgKCFzdWJkb21haW4pIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiAnU3ViZG9tYWluIGlzIHJlcXVpcmVkJyB9XG4gIH1cbiAgXG4gIGlmIChzdWJkb21haW4ubGVuZ3RoIDwgMykge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6ICdTdWJkb21haW4gbXVzdCBiZSBhdCBsZWFzdCAzIGNoYXJhY3RlcnMnIH1cbiAgfVxuICBcbiAgaWYgKHN1YmRvbWFpbi5sZW5ndGggPiA2Mykge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6ICdTdWJkb21haW4gbXVzdCBiZSA2MyBjaGFyYWN0ZXJzIG9yIGxlc3MnIH1cbiAgfVxuICBcbiAgaWYgKCEvXlthLXowLTldKFthLXowLTktXSpbYS16MC05XSk/JC8udGVzdChzdWJkb21haW4pKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogJ1N1YmRvbWFpbiBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aCBhbHBoYW51bWVyaWMsIGNhbiBjb250YWluIGh5cGhlbnMnIH1cbiAgfVxuICBcbiAgaWYgKC8tLS8udGVzdChzdWJkb21haW4pKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogJ1N1YmRvbWFpbiBjYW5ub3QgY29udGFpbiBjb25zZWN1dGl2ZSBoeXBoZW5zJyB9XG4gIH1cbiAgXG4gIHJldHVybiB7IHZhbGlkOiB0cnVlIH1cbn1cblxuLyoqXG4gKiBDaGVjayBzdWJkb21haW4gYXZhaWxhYmlsaXR5IHZpYSBBUEkgKGFsc28gdmFsaWRhdGVzIGFnYWluc3Qgc2VydmVyIGJsYWNrbGlzdClcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2hlY2tTdWJkb21haW5BdmFpbGFiaWxpdHkoXG4gIHN1YmRvbWFpbjogc3RyaW5nLFxuICBhcGlVcmw6IHN0cmluZ1xuKTogUHJvbWlzZTxDaGVja1N1YmRvbWFpblJlc3BvbnNlPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHthcGlVcmx9L2FwaS9zdWJkb21haW5zL2NoZWNrYCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBzdWJkb21haW4gfSksXG4gICAgfSlcbiAgICBcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgQ2hlY2tTdWJkb21haW5SZXNwb25zZVxuICAgIHJldHVybiByZXN1bHRcbiAgfSBjYXRjaCB7XG4gICAgLy8gSWYgQVBJIGlzIHVuYXZhaWxhYmxlLCBhbGxvdyBwcm9jZWVkaW5nICh3aWxsIGZhaWwgYXQgcmVnaXN0cmF0aW9uIGlmIGludmFsaWQpXG4gICAgcmV0dXJuIHsgYXZhaWxhYmxlOiB0cnVlIH1cbiAgfVxufVxuXG4vKipcbiAqIEluaXRpYWxpemUgYSBEZXZEb2MgcHJvamVjdCB3aXRoIC5kZXZkb2MuanNvblxuICogTm90ZTogU3ViZG9tYWluIGlzIG9ubHkgcmVzZXJ2ZWQgd2hlbiBkb2N1bWVudGF0aW9uIGlzIGFjdHVhbGx5IGRlcGxveWVkIChkZXZkb2MgZGVwbG95KVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5pdChvcHRpb25zOiBJbml0T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwcm9qZWN0Um9vdCA9IHByb2Nlc3MuY3dkKClcbiAgY29uc3QgYXBpVXJsID0gb3B0aW9ucy51cmwgfHwgcHJvY2Vzcy5lbnYuREVWRE9DX0FQSV9VUkwgfHwgREVGQVVMVF9BUElfVVJMXG4gIFxuICBsb2dnZXIuaW5mbygnSW5pdGlhbGl6aW5nIERldkRvYyBwcm9qZWN0Li4uXFxuJylcbiAgXG4gIC8vIENoZWNrIGZvciBkb2NzLmpzb25cbiAgY29uc3QgY29uZmlnUGF0aCA9IHBhdGguam9pbihwcm9qZWN0Um9vdCwgJ2RvY3MuanNvbicpXG4gIGlmICghZnMuZXhpc3RzU3luYyhjb25maWdQYXRoKSkge1xuICAgIGxvZ2dlci5lcnJvcignZG9jcy5qc29uIG5vdCBmb3VuZCBpbiBjdXJyZW50IGRpcmVjdG9yeScpXG4gICAgbG9nZ2VyLmluZm8oJ01ha2Ugc3VyZSB5b3UgYXJlIGluIGEgRGV2RG9jIGRvY3VtZW50YXRpb24gcHJvamVjdCBkaXJlY3RvcnknKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG4gIFxuICAvLyBDaGVjayBpZiAuZGV2ZG9jLmpzb24gYWxyZWFkeSBleGlzdHMgd2l0aCBBUEkga2V5IChhbHJlYWR5IGRlcGxveWVkKVxuICBjb25zdCBkZXZkb2NDb25maWdQYXRoID0gcGF0aC5qb2luKHByb2plY3RSb290LCAnLmRldmRvYy5qc29uJylcbiAgaWYgKGZzLmV4aXN0c1N5bmMoZGV2ZG9jQ29uZmlnUGF0aCkgJiYgIW9wdGlvbnMuZm9yY2UpIHtcbiAgICBjb25zdCBleGlzdGluZ0NvbmZpZyA9IGZzLnJlYWRKc29uU3luYyhkZXZkb2NDb25maWdQYXRoKSBhcyBEZXZEb2NDb25maWdcbiAgICBpZiAoZXhpc3RpbmdDb25maWcuYXBpS2V5KSB7XG4gICAgICBsb2dnZXIud2FybignLmRldmRvYy5qc29uIGFscmVhZHkgZXhpc3RzIHdpdGggQVBJIGtleSAocHJvamVjdCBpcyBkZXBsb3llZCknKVxuICAgICAgbG9nZ2VyLmluZm8oJ1VzZSAtLWZvcmNlIHRvIG92ZXJ3cml0ZSBhbmQgY3JlYXRlIGEgbmV3IHByb2plY3QnKVxuICAgICAgcHJvY2Vzcy5leGl0KDEpXG4gICAgfVxuICB9XG4gIFxuICAvLyBMb2FkIGRvY3MuanNvbiB0byBnZXQgcHJvamVjdCBuYW1lXG4gIGxldCBwcm9qZWN0TmFtZSA9ICdNeSBEb2N1bWVudGF0aW9uJ1xuICB0cnkge1xuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IGxvYWRDb25maWcocHJvamVjdFJvb3QpXG4gICAgcHJvamVjdE5hbWUgPSBjb25maWcubmFtZSB8fCBwcm9qZWN0TmFtZVxuICB9IGNhdGNoIHtcbiAgICAvLyBVc2UgZGVmYXVsdCBuYW1lXG4gIH1cbiAgXG4gIC8vIEdlbmVyYXRlIHNsdWcgZnJvbSBwcm9qZWN0IG5hbWUgb3IgdXNlIHByb3ZpZGVkIHNsdWdcbiAgY29uc3Qgc2x1ZyA9IG9wdGlvbnMuc2x1ZyB8fCBnZW5lcmF0ZVNsdWcocHJvamVjdE5hbWUpXG4gIFxuICAvLyBHZXQgc3ViZG9tYWluIC0gcHJvbXB0IGlmIG5vdCBwcm92aWRlZFxuICBsZXQgc3ViZG9tYWluID0gb3B0aW9ucy5zdWJkb21haW5cbiAgXG4gIGlmICghc3ViZG9tYWluKSB7XG4gICAgY29uc3Qgc3VnZ2VzdGVkU3ViZG9tYWluID0gc2x1Z1xuICAgIGNvbnNvbGUubG9nKCcnKVxuICAgIHN1YmRvbWFpbiA9IGF3YWl0IHByb21wdChgRW50ZXIgc3ViZG9tYWluIGZvciAke3N1Z2dlc3RlZFN1YmRvbWFpbn0uZGV2ZG9jLnNoYCwgc3VnZ2VzdGVkU3ViZG9tYWluKVxuICAgIHN1YmRvbWFpbiA9IHN1YmRvbWFpbi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05LV0vZywgJy0nKS5yZXBsYWNlKC9eLXwtJC9nLCAnJylcbiAgfVxuICBcbiAgLy8gVmFsaWRhdGUgc3ViZG9tYWluIGZvcm1hdCBsb2NhbGx5XG4gIGxldCBmb3JtYXRDaGVjayA9IGlzVmFsaWRTdWJkb21haW5Gb3JtYXQoc3ViZG9tYWluKVxuICBpZiAoIWZvcm1hdENoZWNrLnZhbGlkKSB7XG4gICAgbG9nZ2VyLmVycm9yKGZvcm1hdENoZWNrLmVycm9yISlcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxuICBcbiAgLy8gQ2hlY2sgc3ViZG9tYWluIGF2YWlsYWJpbGl0eSB2aWEgQVBJIChzZXJ2ZXIgdmFsaWRhdGVzIGJsYWNrbGlzdClcbiAgLy8gTm90ZTogVGhpcyBvbmx5IGNoZWNrcyBhdmFpbGFiaWxpdHksIGl0IGRvZXMgTk9UIHJlc2VydmUgdGhlIHN1YmRvbWFpblxuICAvLyBMb29wIHVudGlsIHdlIGZpbmQgYW4gYXZhaWxhYmxlIHN1YmRvbWFpblxuICBsZXQgc3ViZG9tYWluQXZhaWxhYmxlID0gZmFsc2VcbiAgd2hpbGUgKCFzdWJkb21haW5BdmFpbGFibGUpIHtcbiAgICBsb2dnZXIuaW5mbyhgQ2hlY2tpbmcgaWYgJHtzdWJkb21haW59LmRldmRvYy5zaCBpcyBhdmFpbGFibGUuLi5gKVxuICAgIGNvbnN0IGF2YWlsYWJpbGl0eSA9IGF3YWl0IGNoZWNrU3ViZG9tYWluQXZhaWxhYmlsaXR5KHN1YmRvbWFpbiwgYXBpVXJsKVxuICAgIFxuICAgIGlmICghYXZhaWxhYmlsaXR5LmF2YWlsYWJsZSkge1xuICAgICAgY29uc29sZS5sb2coJycpXG4gICAgICBsb2dnZXIud2FybihhdmFpbGFiaWxpdHkuZXJyb3IgfHwgYFN1YmRvbWFpbiBcIiR7c3ViZG9tYWlufVwiIGlzIG5vdCBhdmFpbGFibGVgKVxuICAgICAgXG4gICAgICBjb25zdCBzdWdnZXN0aW9uID0gYXZhaWxhYmlsaXR5LnN1Z2dlc3Rpb24gfHwgYCR7c3ViZG9tYWlufS1kb2NzYFxuICAgICAgY29uc29sZS5sb2coJycpXG4gICAgICBsb2dnZXIuaW5mbyhgU3VnZ2VzdGlvbjogJHtzdWdnZXN0aW9ufS5kZXZkb2Muc2hgKVxuICAgICAgY29uc29sZS5sb2coJycpXG4gICAgICBcbiAgICAgIC8vIFByb21wdCBmb3IgbmV3IHN1YmRvbWFpblxuICAgICAgc3ViZG9tYWluID0gYXdhaXQgcHJvbXB0KCdFbnRlciBhIGRpZmZlcmVudCBzdWJkb21haW4nLCBzdWdnZXN0aW9uKVxuICAgICAgc3ViZG9tYWluID0gc3ViZG9tYWluLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTktXS9nLCAnLScpLnJlcGxhY2UoL14tfC0kL2csICcnKVxuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSBmb3JtYXRcbiAgICAgIGZvcm1hdENoZWNrID0gaXNWYWxpZFN1YmRvbWFpbkZvcm1hdChzdWJkb21haW4pXG4gICAgICBpZiAoIWZvcm1hdENoZWNrLnZhbGlkKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihmb3JtYXRDaGVjay5lcnJvciEpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnNvbGUubG9nKCcnKVxuICAgIH0gZWxzZSB7XG4gICAgICBzdWJkb21haW5BdmFpbGFibGUgPSB0cnVlXG4gICAgICBsb2dnZXIuc3VjY2Vzcyhg4pyTICR7c3ViZG9tYWlufS5kZXZkb2Muc2ggaXMgYXZhaWxhYmxlIWApXG4gICAgICBjb25zb2xlLmxvZygnJylcbiAgICB9XG4gIH1cbiAgXG4gIC8vIENyZWF0ZSAuZGV2ZG9jLmpzb24gd2l0aCBzdWJkb21haW4gKGJ1dCBOTyBBUEkga2V5IC0gbm90IHJlZ2lzdGVyZWQgeWV0KVxuICAvLyBUaGUgc3ViZG9tYWluIHdpbGwgb25seSBiZSByZXNlcnZlZCB3aGVuIHRoZSB1c2VyIGFjdHVhbGx5IGRlcGxveXNcbiAgY29uc3QgcHJvamVjdElkID0gYCR7c2x1Z30tJHtnZW5lcmF0ZUlkKCl9YFxuICBjb25zdCBkZXZkb2NDb25maWc6IERldkRvY0NvbmZpZyA9IHtcbiAgICBwcm9qZWN0SWQsXG4gICAgbmFtZTogcHJvamVjdE5hbWUsXG4gICAgc2x1ZyxcbiAgICBzdWJkb21haW4sXG4gICAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgLy8gTm90ZTogTm8gYXBpS2V5IC0gc3ViZG9tYWluIGlzIG5vdCByZXNlcnZlZCB1bnRpbCBkZXBsb3lcbiAgfVxuICBcbiAgZnMud3JpdGVKc29uU3luYyhkZXZkb2NDb25maWdQYXRoLCBkZXZkb2NDb25maWcsIHsgc3BhY2VzOiAyIH0pXG4gIFxuICBsb2dnZXIuc3VjY2Vzcygn4pyTIFByb2plY3QgaW5pdGlhbGl6ZWQnKVxuICBjb25zb2xlLmxvZygnJylcbiAgY29uc29sZS5sb2coJyAgU3ViZG9tYWluOicsIGAke3N1YmRvbWFpbn0uZGV2ZG9jLnNoYClcbiAgY29uc29sZS5sb2coJyAgU3RhdHVzOicsICdOb3QgeWV0IGRlcGxveWVkJylcblxuICAvLyBDaGVjayBpZiBBSSBhZ2VudHMgc2hvdWxkIGJlIHNldCB1cFxuICBjb25zdCBleGlzdGluZ0FJID0gaGFzQUlBZ2VudHNDb25maWd1cmVkKHByb2plY3RSb290KVxuICBsZXQgYWlUb29sOiAnY2xhdWRlJyB8ICdjdXJzb3InIHwgJ2JvdGgnIHwgbnVsbCA9IG51bGxcblxuICAvLyBEZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIHNldCB1cCBBSSBhZ2VudHNcbiAgaWYgKG9wdGlvbnMuYWkgPT09IHRydWUpIHtcbiAgICAvLyAtLWFpIGZsYWcgcGFzc2VkLCBwcm9tcHQgZm9yIHNlbGVjdGlvblxuICAgIGNvbnN0IGFpQ2hvaWNlcyA9IFtcbiAgICAgIHsgdmFsdWU6ICdib3RoJywgbGFiZWw6ICdCb3RoIC0gQ2xhdWRlIENvZGUgYW5kIEN1cnNvcicgfSxcbiAgICAgIHsgdmFsdWU6ICdjbGF1ZGUnLCBsYWJlbDogJ0NsYXVkZSBDb2RlIC0gU2tpbGxzIGFuZCBDTEFVREUubWQnIH0sXG4gICAgICB7IHZhbHVlOiAnY3Vyc29yJywgbGFiZWw6ICdDdXJzb3IgLSBSdWxlcyAoLmN1cnNvci9ydWxlcy8pJyB9LFxuICAgICAgeyB2YWx1ZTogJ3NraXAnLCBsYWJlbDogJ1NraXAgLSBJXFwnbGwgc2V0IHRoaXMgdXAgbGF0ZXInIH0sXG4gICAgXVxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IGF3YWl0IHByb21wdFNlbGVjdCgnU2V0IHVwIEFJIGFnZW50IGNvbmZpZ3VyYXRpb24/JywgYWlDaG9pY2VzKVxuICAgIGlmIChzZWxlY3Rpb24gIT09ICdza2lwJykge1xuICAgICAgYWlUb29sID0gc2VsZWN0aW9uIGFzICdjbGF1ZGUnIHwgJ2N1cnNvcicgfCAnYm90aCdcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMuYWkgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gLS1haT1jbGF1ZGUsIC0tYWk9Y3Vyc29yLCBvciAtLWFpPWJvdGhcbiAgICBhaVRvb2wgPSBvcHRpb25zLmFpIGFzICdjbGF1ZGUnIHwgJ2N1cnNvcicgfCAnYm90aCdcbiAgfSBlbHNlIGlmICghZXhpc3RpbmdBSS5jbGF1ZGUgJiYgIWV4aXN0aW5nQUkuY3Vyc29yKSB7XG4gICAgLy8gTm8gQUkgY29uZmlnIGV4aXN0cyBhbmQgbm8gLS1haSBmbGFnLCBwcm9tcHQgdXNlclxuICAgIGNvbnN0IGFpQ2hvaWNlcyA9IFtcbiAgICAgIHsgdmFsdWU6ICdib3RoJywgbGFiZWw6ICdCb3RoIC0gQ2xhdWRlIENvZGUgYW5kIEN1cnNvcicgfSxcbiAgICAgIHsgdmFsdWU6ICdjbGF1ZGUnLCBsYWJlbDogJ0NsYXVkZSBDb2RlIC0gU2tpbGxzIGFuZCBDTEFVREUubWQnIH0sXG4gICAgICB7IHZhbHVlOiAnY3Vyc29yJywgbGFiZWw6ICdDdXJzb3IgLSBSdWxlcyAoLmN1cnNvci9ydWxlcy8pJyB9LFxuICAgICAgeyB2YWx1ZTogJ3NraXAnLCBsYWJlbDogJ1NraXAgLSBJXFwnbGwgc2V0IHRoaXMgdXAgbGF0ZXIgKHJ1biBcImRldmRvYyBhaVwiIGFueXRpbWUpJyB9LFxuICAgIF1cbiAgICBjb25zdCBzZWxlY3Rpb24gPSBhd2FpdCBwcm9tcHRTZWxlY3QoJ1NldCB1cCBBSSBhZ2VudCBjb25maWd1cmF0aW9uPycsIGFpQ2hvaWNlcylcbiAgICBpZiAoc2VsZWN0aW9uICE9PSAnc2tpcCcpIHtcbiAgICAgIGFpVG9vbCA9IHNlbGVjdGlvbiBhcyAnY2xhdWRlJyB8ICdjdXJzb3InIHwgJ2JvdGgnXG4gICAgfVxuICB9XG5cbiAgaWYgKGFpVG9vbCkge1xuICAgIGNvbnNvbGUubG9nKCcnKVxuICAgIGxvZ2dlci5pbmZvKCdTZXR0aW5nIHVwIEFJIGFnZW50IGNvbmZpZ3VyYXRpb24uLi4nKVxuICAgIGNvbnN0IGFpUmVzdWx0cyA9IGluc3RhbGxBSUFnZW50cyhwcm9qZWN0Um9vdCwgYWlUb29sKVxuICAgIFxuICAgIGlmIChhaVJlc3VsdHMuY2xhdWRlTWQpIHtcbiAgICAgIGxvZ2dlci5zdWNjZXNzKCdDcmVhdGVkIENMQVVERS5tZCcpXG4gICAgfVxuICAgIGZvciAoY29uc3Qgc2tpbGwgb2YgYWlSZXN1bHRzLmNsYXVkZVNraWxscykge1xuICAgICAgbG9nZ2VyLnN1Y2Nlc3MoYENyZWF0ZWQgLmNsYXVkZS9za2lsbHMvJHtza2lsbH0vU0tJTEwubWRgKVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgYWlSZXN1bHRzLmN1cnNvclJ1bGVzKSB7XG4gICAgICBsb2dnZXIuc3VjY2VzcyhgQ3JlYXRlZCAuY3Vyc29yL3J1bGVzLyR7cnVsZX1gKVxuICAgIH1cbiAgfVxuXG4gIGNvbnNvbGUubG9nKCcnKVxuICBsb2dnZXIuaW5mbygnTm90ZTogVGhlIHN1YmRvbWFpbiBpcyBub3QgcmVzZXJ2ZWQgdW50aWwgeW91IGRlcGxveS4nKVxuICBsb2dnZXIuaW5mbygnUnVuIFwiZGV2ZG9jIGRlcGxveVwiIHRvIGRlcGxveSBhbmQgY2xhaW0geW91ciBzdWJkb21haW4uJylcbiAgXG4gIC8vIFNob3cgQUkgYWdlbnQgdGlwcyBpZiBpbnN0YWxsZWRcbiAgaWYgKGFpVG9vbCkge1xuICAgIGNvbnNvbGUubG9nKCcnKVxuICAgIGNvbnNvbGUubG9nKCdBSSBBZ2VudCBRdWljayBTdGFydDonKVxuICAgIGlmIChhaVRvb2wgPT09ICdjbGF1ZGUnIHx8IGFpVG9vbCA9PT0gJ2JvdGgnKSB7XG4gICAgICBjb25zb2xlLmxvZygnICBDbGF1ZGUgQ29kZTogL2Jvb3RzdHJhcC1kb2NzJylcbiAgICB9XG4gICAgaWYgKGFpVG9vbCA9PT0gJ2N1cnNvcicgfHwgYWlUb29sID09PSAnYm90aCcpIHtcbiAgICAgIGNvbnNvbGUubG9nKCcgIEN1cnNvcjogQXNrIFwiZ2VuZXJhdGUgaW5pdGlhbCBkb2N1bWVudGF0aW9uIGZyb20gdGhpcyByZXBvXCInKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgVVJMLWZyaWVuZGx5IHNsdWcgZnJvbSBhIG5hbWVcbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVTbHVnKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBuYW1lXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAucmVwbGFjZSgvW15hLXowLTldKy9nLCAnLScpXG4gICAgLnJlcGxhY2UoL14tfC0kL2csICcnKVxuICAgIC5zdWJzdHJpbmcoMCwgNTApXG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBzaG9ydCByYW5kb20gSURcbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVJZCgpOiBzdHJpbmcge1xuICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDgpXG59XG4iXX0=
package/dist/cli/index.js CHANGED
@@ -25,6 +25,7 @@ program
25
25
  .option('-s, --subdomain <subdomain>', 'Subdomain for your docs (e.g., my-docs.devdoc.sh)')
26
26
  .option('--no-git', 'Skip git initialization')
27
27
  .option('--no-install', 'Skip installing dependencies')
28
+ .option('--ai [tool]', 'Set up AI agents (claude, cursor, both, or just --ai to choose)')
28
29
  .option('-u, --url <url>', 'API URL (default: https://devdoc.sh)')
29
30
  .action(create_1.create);
30
31
  program
@@ -33,6 +34,7 @@ program
33
34
  .option('-s, --slug <slug>', 'Project slug')
34
35
  .option('--subdomain <subdomain>', 'Subdomain for your docs (e.g., my-docs.devdoc.sh)')
35
36
  .option('-f, --force', 'Overwrite existing .devdoc.json')
37
+ .option('--ai [tool]', 'Set up AI agents (claude, cursor, both, or just --ai to choose)')
36
38
  .option('-u, --url <url>', 'API URL (default: https://devdoc.sh)')
37
39
  .action(init_1.init);
38
40
  program
@@ -111,4 +113,4 @@ program
111
113
  .option('-k, --api-key <key>', 'API key for authentication')
112
114
  .action(upload_1.upload);
113
115
  program.parse(process.argv);
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUNBQW9DO0FBQ3BDLDhDQUEyQztBQUMzQywwQ0FBdUM7QUFDdkMsd0NBQXFDO0FBQ3JDLDRDQUF5QztBQUN6Qyw0Q0FBeUM7QUFDekMsNENBQXlDO0FBQ3pDLDhDQUEyQztBQUMzQywwQ0FBMEQ7QUFDMUQsOENBQTJDO0FBQzNDLDhDQUF1RDtBQUN2RCxzQ0FBbUM7QUFFbkMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFFbEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxtQkFBTyxFQUFFLENBQUM7QUFFOUIsT0FBTztLQUNKLElBQUksQ0FBQyxRQUFRLENBQUM7S0FDZCxXQUFXLENBQUMsd0NBQXdDLENBQUM7S0FDckQsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUVoQyxPQUFPO0tBQ0osT0FBTyxDQUFDLDRCQUE0QixDQUFDO0tBQ3JDLFdBQVcsQ0FBQyx3Q0FBd0MsQ0FBQztLQUNyRCxNQUFNLENBQUMsdUJBQXVCLEVBQUUsMkNBQTJDLENBQUM7S0FDNUUsTUFBTSxDQUFDLDZCQUE2QixFQUFFLG1EQUFtRCxDQUFDO0tBQzFGLE1BQU0sQ0FBQyxVQUFVLEVBQUUseUJBQXlCLENBQUM7S0FDN0MsTUFBTSxDQUFDLGNBQWMsRUFBRSw4QkFBOEIsQ0FBQztLQUN0RCxNQUFNLENBQUMsaUJBQWlCLEVBQUUsc0NBQXNDLENBQUM7S0FDakUsTUFBTSxDQUFDLGVBQU0sQ0FBQyxDQUFDO0FBRWxCLE9BQU87S0FDSixPQUFPLENBQUMsTUFBTSxDQUFDO0tBQ2YsV0FBVyxDQUFDLDRDQUE0QyxDQUFDO0tBQ3pELE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxjQUFjLENBQUM7S0FDM0MsTUFBTSxDQUFDLHlCQUF5QixFQUFFLG1EQUFtRCxDQUFDO0tBQ3RGLE1B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QkFBNEIsQ0FBQztLQUMzRCxNQUFNLENBQUMsZUFBTSxDQUFDLENBQUM7QUFFbEIsU0FBUztLQUNOLE9BQU8sQ0FBQyxNQUFNLENBQUM7S0FDZixXQUFXLENBQUMsc0JBQXNCLENBQUM7S0FDbkMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQztLQUNwQyxNQUFNLENBQUMscUJBQXFCLEVBQUUsNEJBQTRCLENBQUM7S0FDM0QsTUFBTSxDQUFDLG1CQUFVLENBQUMsQ0FBQztBQUV0QixzQkFBc0I7QUFDdEIsT0FBTztLQUNKLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztLQUM1QixXQUFXLENBQUMsZ0VBQWdFLENBQUM7S0FDN0UsTUFBTSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQztLQUNwQyxNQUFNLENBQUMscUJBQXFCLEVBQUUsNEJBQTRCLENBQUM7S0FDM0QsTUFBTSxDQUFDLGVBQU0sQ0FBQyxDQUFDO0FBRWxCLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBjcmVhdGUgfSBmcm9tICcuL2NvbW1hbmRzL2NyZWF0ZSc7XG5pbXBvcnQgeyBpbml0IH0gZnJvbSAnLi9jb21tYW5kcy9pbml0JztcbmltcG9ydCB7IGRldiB9IGZyb20gJy4vY29tbWFuZHMvZGV2JztcbmltcG9ydCB7IGJ1aWxkIH0gZnJvbSAnLi9jb21tYW5kcy9idWlsZCc7XG5pbXBvcnQgeyBzdGFydCB9IGZyb20gJy4vY29tbWFuZHMvc3RhcnQnO1xuaW1wb3J0IHsgY2hlY2sgfSBmcm9tICcuL2NvbW1hbmRzL2NoZWNrJztcbmltcG9ydCB7IGRlcGxveSB9IGZyb20gJy4vY29tbWFuZHMvZGVwbG95JztcbmltcG9ydCB7IGxpc3RLZXlzLCByZWdlbmVyYXRlS2V5IH0gZnJvbSAnLi9jb21tYW5kcy9rZXlzJztcbmltcG9ydCB7IHdob2FtaSB9IGZyb20gJy4vY29tbWFuZHMvd2hvYW1pJztcbmltcG9ydCB7IHVwbG9hZCwgbGlzdEFzc2V0cyB9IGZyb20gJy4vY29tbWFuZHMvdXBsb2FkJztcbmltcG9ydCB7IGFpIH0gZnJvbSAnLi9jb21tYW5kcy9haSc7XG5cbmNvbnN0IHBhY2thZ2VKc29uID0gcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJyk7XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5wcm9ncmFtXG4gIC5uYW1lKCdkZXZkb2MnKVxuICAuZGVzY3JpcHRpb24oJ0RvY3VtZW50YXRpb24gZnJhbWV3b3JrIGZvciBkZXZlbG9wZXJzJylcbiAgLnZlcnNpb24ocGFja2FnZUpzb24udmVyc2lvbik7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2NyZWF0ZSBbcHJvamVjdC1kaXJlY3RvcnldJylcbiAgLmRlc2NyaXB0aW9uKCdDcmVhdGUgYSBuZXcgRGV2RG9jIGRvY3VtZW50YXRpb24gc2l0ZScpXG4gIC5vcHRpb24oJy10LCAtLXRlbXBsYXRlIDx0eXBlPicsICdUZW1wbGF0ZSB0byB1c2UgKGJhc2ljLCBvcGVuYXBpLCBncmFwaHFsKScpXG4gIC5vcHRpb24oJy1zLCAtLXN1YmRvbWFpbiA8c3ViZG9tYWluPicsICdTdWJkb21haW4gZm9yIHlvdXIgZG9jcyAoZS5nLiwgbXktZG9jcy5kZXZkb2Muc2gpJylcbiAgLm9wdGlvbignLS1uby1naXQnLCAnU2tpcCBnaXQgaW5pdGlhbGl6YXRpb24nKVxuICAub3B0aW9uKCctLW5vLWluc3RhbGwnLCAnU2tpcCBpbnN0YWxsaW5nIGRlcGVuZGVuY2llcycpXG4gIC5vcHRpb24oJy11LCAtLXVybCA8dXJsPicsICdBUEkgVVJMIChkZWZhdWx0OiBodHRwczovL2RldmRvYy5zaCknKVxuICAuYWN0aW9uKGNyZWF0ZSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2luaXQnKVxuICAuZGVzY3JpcHRpb24oJ0luaXRpYWxpemUvcmVnaXN0ZXIgcHJvamVjdCB3aXRoIEJyYWluZmlzaCcpXG4gIC5vcHRpb24oJy1zLCAtLXNsdWcgPHNsdWc+JywgJ1Byb2plY3Qgc2x1ZycpXG4gIC5vcHRpb24oJy0tc3ViZG9tYWluIDxzdWJkb21haW4+JywgJ1N1YmRvbWFpbiBmb3IgeW91ciBkb2NzIChlLmcuLCBteS1kb2NzLmRldmRvYy5zaCknKVxuICAub3B0aW9uKCctZiwgLS1mb3JjZScsICdPdmVyd3JpdGUgZXhpc3RpbmcgLmRldmRvYy5qc29uJylcbiAgLm9wdGlvbignLXUsIC0tdXJsIDx1cmw+JywgJ0FQSSBVUkwgKGRlZmF1bHQ6IGh0dHBzOi8vZGV2ZG9jLnNoKScpXG4gIC5hY3Rpb24oaW5pdCk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2RldicpXG4gIC5kZXNjcmlwdGlvbignU3RhcnQgZGV2ZWxvcG1lbnQgc2VydmVyIHdpdGggaG90IHJlbG9hZCcpXG4gIC5vcHRpb24oJy1wLCAtLXBvcnQgPHBvcnQ+JywgJ1BvcnQgdG8gcnVuIHRoZSBzZXJ2ZXIgb24nLCAnMzMzMycpXG4gIC5vcHRpb24oJy1ILCAtLWhvc3QgPGhvc3Q+JywgJ0hvc3QgdG8gYmluZCB0aGUgc2VydmVyIHRvJywgJ2xvY2FsaG9zdCcpXG4gIC5vcHRpb24oJy1vLCAtLW9wZW4nLCAnT3BlbiBicm93c2VyIGF1dG9tYXRpY2FsbHknLCB0cnVlKVxuICAub3B0aW9uKCctLW5vLW9wZW4nLCAnRG8gbm90IG9wZW4gYnJvd3NlciBhdXRvbWF0aWNhbGx5JylcbiAgLmFjdGlvbihkZXYpO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdidWlsZCcpXG4gIC5kZXNjcmlwdGlvbignQnVpbGQgZG9jdW1lbnRhdGlvbiBmb3IgcHJvZHVjdGlvbicpXG4gIC5vcHRpb24oJy1vLCAtLW91dHB1dCA8ZGlyPicsICdPdXRwdXQgZGlyZWN0b3J5JywgJ2Rpc3QnKVxuICAuYWN0aW9uKGJ1aWxkKTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnc3RhcnQnKVxuICAuZGVzY3JpcHRpb24oJ1N0YXJ0IHByb2R1Y3Rpb24gc2VydmVyJylcbiAgLm9wdGlvbignLXAsIC0tcG9ydCA8cG9ydD4nLCAnUG9ydCB0byBydW4gdGhlIHNlcnZlciBvbicsICczMDAwJylcbiAgLmFjdGlvbihzdGFydCk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2NoZWNrJylcbiAgLmRlc2NyaXB0aW9uKCdWYWxpZGF0ZSBkb2NzLmpzb24gYW5kIE1EWCBmaWxlcycpXG4gIC5hY3Rpb24oY2hlY2spO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdhaScpXG4gIC5kZXNjcmlwdGlvbignU2V0IHVwIEFJIGFnZW50IGNvbmZpZ3VyYXRpb24gKENsYXVkZSBDb2RlIHNraWxscywgQ3Vyc29yIHJ1bGVzKScpXG4gIC5vcHRpb24oJy10LCAtLXRvb2wgPHRvb2w+JywgJ0FJIHRvb2wgdG8gY29uZmlndXJlIChjbGF1ZGUsIGN1cnNvciwgYm90aCknKVxuICAuYWN0aW9uKGFpKTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnZGVwbG95JylcbiAgLmRlc2NyaXB0aW9uKCdEZXBsb3kgZG9jdW1lbnRhdGlvbiB0byBEZXZEb2MgcGxhdGZvcm0nKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCAoZGVmYXVsdDogaHR0cHM6Ly9kZXZkb2Muc2gpJylcbiAgLm9wdGlvbignLWssIC0tYXBpLWtleSA8a2V5PicsICdBUEkga2V5IGZvciBhdXRoZW50aWNhdGlvbicpXG4gIC5hY3Rpb24oZGVwbG95KTtcblxuLy8gS2V5cyBtYW5hZ2VtZW50XG5jb25zdCBrZXlzQ21kID0gcHJvZ3JhbVxuICAuY29tbWFuZCgna2V5cycpXG4gIC5kZXNjcmlwdGlvbignTWFuYWdlIEFQSSBrZXlzIGZvciB5b3VyIHByb2plY3QnKTtcblxua2V5c0NtZFxuICAuY29tbWFuZCgnbGlzdCcpXG4gIC5kZXNjcmlwdGlvbignU2hvdyBjdXJyZW50IEFQSSBrZXkgaW5mbycpXG4gIC5vcHRpb24oJy11LCAtLXVybCA8dXJsPicsICdBUEkgVVJMJylcbiAgLmFjdGlvbihsaXN0S2V5cyk7XG5cbmtleXNDbWRcbiAgLmNvbW1hbmQoJ3JlZ2VuZXJhdGUnKVxuICAuZGVzY3JpcHRpb24oJ0dlbmVyYXRlIGEgbmV3IEFQSSBrZXkgKGludmFsaWRhdGVzIHRoZSBvbGQgb25lKScpXG4gIC5vcHRpb24oJy11LCAtLXVybCA8dXJsPicsICdBUEkgVVJMJylcbiAgLmFjdGlvbihyZWdlbmVyYXRlS2V5KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnd2hvYW1pJylcbiAgLmRlc2NyaXB0aW9uKCdTaG93IGN1cnJlbnQgcHJvamVjdCBpbmZvcm1hdGlvbicpXG4gIC5vcHRpb24oJy11LCAtLXVybCA8dXJsPicsICdBUEkgVVJMJylcbiAgLmFjdGlvbih3aG9hbWkpO1xuXG4vLyBBc3NldHMgbWFuYWdlbWVudFxuY29uc3QgYXNzZXRzQ21kID0gcHJvZ3JhbVxuICAuY29tbWFuZCgnYXNzZXRzJylcbiAgLmRlc2NyaXB0aW9uKCdNYW5hZ2UgcHJvamVjdCBhc3NldHMgKGltYWdlcywgZmlsZXMpJyk7XG5cbmFzc2V0c0NtZFxuICAuY29tbWFuZCgndXBsb2FkIDxmaWxlcy4uLj4nKVxuICAuZGVzY3JpcHRpb24oJ1VwbG9hZCBhc3NldHMgdG8gc3RvcmFnZSAobWF4IDI1TUIgcGVyIGZpbGUpJylcbiAgLm9wdGlvbignLXUsIC0tdXJsIDx1cmw+JywgJ0FQSSBVUkwnKVxuICAub3B0aW9uKCctaywgLS1hcGkta2V5IDxrZXk+JywgJ0FQSSBrZXkgZm9yIGF1dGhlbnRpY2F0aW9uJylcbiAgLmFjdGlvbih1cGxvYWQpO1xuXG5hc3NldHNDbWRcbiAgLmNvbW1hbmQoJ2xpc3QnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgdXBsb2FkZWQgYXNzZXRzJylcbiAgLm9wdGlvbignLXUsIC0tdXJsIDx1cmw+JywgJ0FQSSBVUkwnKVxuICAub3B0aW9uKCctaywgLS1hcGkta2V5IDxrZXk+JywgJ0FQSSBrZXkgZm9yIGF1dGhlbnRpY2F0aW9uJylcbiAgLmFjdGlvbihsaXN0QXNzZXRzKTtcblxuLy8gU2hvcnRjdXQgZm9yIHVwbG9hZFxucHJvZ3JhbVxuICAuY29tbWFuZCgndXBsb2FkIDxmaWxlcy4uLj4nKVxuICAuZGVzY3JpcHRpb24oJ1VwbG9hZCBhc3NldHMgdG8gc3RvcmFnZSAoc2hvcnRjdXQgZm9yIFwiZGV2ZG9jIGFzc2V0cyB1cGxvYWRcIiknKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCcpXG4gIC5vcHRpb24oJy1rLCAtLWFwaS1rZXkgPGtleT4nLCAnQVBJIGtleSBmb3IgYXV0aGVudGljYXRpb24nKVxuICAuYWN0aW9uKHVwbG9hZCk7XG5cbnByb2dyYW0ucGFyc2UocHJvY2Vzcy5hcmd2KTtcbiJdfQ==
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUNBQW9DO0FBQ3BDLDhDQUEyQztBQUMzQywwQ0FBdUM7QUFDdkMsd0NBQXFDO0FBQ3JDLDRDQUF5QztBQUN6Qyw0Q0FBeUM7QUFDekMsNENBQXlDO0FBQ3pDLDhDQUEyQztBQUMzQywwQ0FBMEQ7QUFDMUQsOENBQTJDO0FBQzNDLDhDQUF1RDtBQUN2RCxzQ0FBbUM7QUFFbkMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFFbEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxtQkFBTyxFQUFFLENBQUM7QUFFOUIsT0FBTztLQUNKLElBQUksQ0FBQyxRQUFRLENBQUM7S0FDZCxXQUFXLENBQUMsd0NBQXdDLENBQUM7S0FDckQsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUVoQyxPQUFPO0tBQ0osT0FBTyxDQUFDLDRCQUE0QixDQUFDO0tBQ3JDLFdBQVcsQ0FBQyx3Q0FBd0MsQ0FBQztLQUNyRCxNQUFNLENBQUMsdUJBQXVCLEVBQUUsMkNBQTJDLENBQUM7S0FDNUUsTUFBTSxDQUFDLDZCQUE2QixFQUFFLG1EQUFtRCxDQUFDO0tBQzFGLE1BQU0sQ0FBQyxVQUFVLEVBQUUseUJBQXlCLENBQUM7S0FDN0MsTUFBTSxDQUFDLGNBQWMsRUFBRSw4QkFBOEIsQ0FBQztLQUN0RCxNQUFNLENBQUMsYUFBYSxFQUFFLGlFQUFpRSxDQUFDO0tBQ3hGLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxzQ0FBc0MsQ0FBQztLQUNqRSxNQUFNLENBQUMsZUFBTSxDQUFDLENBQUM7QUFFbEIsT0FBTztLQUNKLE9BQU8sQ0FBQyxNQUFNLENBQUM7S0FDZixXQUFXLENBQUMsNENBQTRDLENBQUM7S0FDekQsTUFBTSxDQUFDLG1CQUFtQixFQUFFLGNBQWMsQ0FBQztLQUMzQyxNQUFNLENBQUMseUJBQXlCLEVBQUUsbURBQW1ELENBQUM7S0FDdEYsTUFBTSxDQUFDLGFBQWEsRUFBRSxpQ0FBaUMsQ0FBQztLQUN4RCxNQUFNLENBQUMsYUFBYSxFQUFFLGlFQUFpRSxDQUFDO0tBQ3hGLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxzQ0FBc0MsQ0FBQztLQUNqRSxNQUFNLENBQUMsV0FBSSxDQUFDLENBQUM7QUFFaEIsT0FBTztLQUNKLE9BQU8sQ0FBQyxLQUFLLENBQUM7S0FDZCxXQUFXLENBQUMsMENBQTBDLENBQUM7S0FDdkQsTUFBTSxDQUFDLG1CQUFtQixFQUFFLDJCQUEyQixFQUFFLE1BQU0sQ0FBQztLQUNoRSxNQUFNLENBQUMsbUJBQW1CLEVBQUUsNEJBQTRCLEVBQUUsV0FBVyxDQUFDO0tBQ3RFLE1BQU0sQ0FBQyxZQUFZLEVBQUUsNEJBQTRCLEVBQUUsSUFBSSxDQUFDO0tBQ3hELE1BQU0sQ0FBQyxXQUFXLEVBQUUsbUNBQW1DLENBQUM7S0FDeEQsTUFBTSxDQUFDLFNBQUcsQ0FBQyxDQUFDO0FBRWYsT0FBTztLQUNKLE9BQU8sQ0FBQyxPQUFPLENBQUM7S0FDaEIsV0FBVyxDQUFDLG9DQUFvQyxDQUFDO0tBQ2pELE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLENBQUM7S0FDeEQsTUFBTSxDQUFDLGFBQUssQ0FBQyxDQUFDO0FBRWpCLE9BQU87S0FDSixPQUFPLENBQUMsT0FBTyxDQUFDO0tBQ2hCLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQztLQUN0QyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxDQUFDO0tBQ2hFLE1BQU0sQ0FBQyxhQUFLLENBQUMsQ0FBQztBQUVqQixPQUFPO0tBQ0osT0FBTyxDQUFDLE9BQU8sQ0FBQztLQUNoQixXQUFXLENBQUMsa0NBQWtDLENBQUM7S0FDL0MsTUFBTSxDQUFDLGFBQUssQ0FBQyxDQUFDO0FBRWpCLE9BQU87S0FDSixPQUFPLENBQUMsSUFBSSxDQUFDO0tBQ2IsV0FBVyxDQUFDLGtFQUFrRSxDQUFDO0tBQy9FLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSw2Q0FBNkMsQ0FBQztLQUMxRSxNQUFNLENBQUMsT0FBRSxDQUFDLENBQUM7QUFFZCxPQUFPO0tBQ0osT0FBTyxDQUFDLFFBQVEsQ0FBQztLQUNqQixXQUFXLENBQUMseUNBQXlDLENBQUM7S0FDdEQsTUFBTSxDQUFDLGlCQUFpQixFQUFFLHNDQUFzQyxDQUFDO0tBQ2pFLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSw0QkFBNEIsQ0FBQztLQUMzRCxNQUFNLENBQUMsZUFBTSxDQUFDLENBQUM7QUFFbEIsa0JBQWtCO0FBQ2xCLE1BQU0sT0FBTyxHQUFHLE9BQU87S0FDcEIsT0FBTyxDQUFDLE1BQU0sQ0FBQztLQUNmLFdBQVcsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0FBRW5ELE9BQU87S0FDSixPQUFPLENBQUMsTUFBTSxDQUFDO0tBQ2YsV0FBVyxDQUFDLDJCQUEyQixDQUFDO0tBQ3hDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLENBQUM7S0FDcEMsTUFBTSxDQUFDLGVBQVEsQ0FBQyxDQUFDO0FBRXBCLE9BQU87S0FDSixPQUFPLENBQUMsWUFBWSxDQUFDO0tBQ3JCLFdBQVcsQ0FBQyxrREFBa0QsQ0FBQztLQUMvRCxNQUFNLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxDQUFDO0tBQ3BDLE1BQU0sQ0FBQyxvQkFBYSxDQUFDLENBQUM7QUFFekIsT0FBTztLQUNKLE9BQU8sQ0FBQyxRQUFRLENBQUM7S0FDakIsV0FBVyxDQUFDLGtDQUFrQyxDQUFDO0tBQy9DLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLENBQUM7S0FDcEMsTUFBTSxDQUFDLGVBQU0sQ0FBQyxDQUFDO0FBRWxCLG9CQUFvQjtBQUNwQixNQUFNLFNBQVMsR0FBRyxPQUFPO0tBQ3RCLE9BQU8sQ0FBQyxRQUFRLENBQUM7S0FDakIsV0FBVyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7QUFFeEQsU0FBUztLQUNOLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztLQUM1QixXQUFXLENBQUMsOENBQThDLENBQUM7S0FDM0QsTUFBTSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQztLQUNwQyxNQUFNLENBQUMscUJBQXFCLEVBQUUsNEJBQTRCLENBQUM7S0FDM0QsTUFBTSxDQUFDLGVBQU0sQ0FBQyxDQUFDO0FBRWxCLFNBQVM7S0FDTixPQUFPLENBQUMsTUFBTSxDQUFDO0tBQ2YsV0FBVyxDQUFDLHNCQUFzQixDQUFDO0tBQ25DLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLENBQUM7S0FDcEMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLDRCQUE0QixDQUFDO0tBQzNELE1BQU0sQ0FBQyxtQkFBVSxDQUFDLENBQUM7QUFFdEIsc0JBQXNCO0FBQ3RCLE9BQU87S0FDSixPQUFPLENBQUMsbUJBQW1CLENBQUM7S0FDNUIsV0FBVyxDQUFDLGdFQUFnRSxDQUFDO0tBQzdFLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLENBQUM7S0FDcEMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLDRCQUE0QixDQUFDO0tBQzNELE1BQU0sQ0FBQyxlQUFNLENBQUMsQ0FBQztBQUVsQixPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgY3JlYXRlIH0gZnJvbSAnLi9jb21tYW5kcy9jcmVhdGUnO1xuaW1wb3J0IHsgaW5pdCB9IGZyb20gJy4vY29tbWFuZHMvaW5pdCc7XG5pbXBvcnQgeyBkZXYgfSBmcm9tICcuL2NvbW1hbmRzL2Rldic7XG5pbXBvcnQgeyBidWlsZCB9IGZyb20gJy4vY29tbWFuZHMvYnVpbGQnO1xuaW1wb3J0IHsgc3RhcnQgfSBmcm9tICcuL2NvbW1hbmRzL3N0YXJ0JztcbmltcG9ydCB7IGNoZWNrIH0gZnJvbSAnLi9jb21tYW5kcy9jaGVjayc7XG5pbXBvcnQgeyBkZXBsb3kgfSBmcm9tICcuL2NvbW1hbmRzL2RlcGxveSc7XG5pbXBvcnQgeyBsaXN0S2V5cywgcmVnZW5lcmF0ZUtleSB9IGZyb20gJy4vY29tbWFuZHMva2V5cyc7XG5pbXBvcnQgeyB3aG9hbWkgfSBmcm9tICcuL2NvbW1hbmRzL3dob2FtaSc7XG5pbXBvcnQgeyB1cGxvYWQsIGxpc3RBc3NldHMgfSBmcm9tICcuL2NvbW1hbmRzL3VwbG9hZCc7XG5pbXBvcnQgeyBhaSB9IGZyb20gJy4vY29tbWFuZHMvYWknO1xuXG5jb25zdCBwYWNrYWdlSnNvbiA9IHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpO1xuXG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblxucHJvZ3JhbVxuICAubmFtZSgnZGV2ZG9jJylcbiAgLmRlc2NyaXB0aW9uKCdEb2N1bWVudGF0aW9uIGZyYW1ld29yayBmb3IgZGV2ZWxvcGVycycpXG4gIC52ZXJzaW9uKHBhY2thZ2VKc29uLnZlcnNpb24pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdjcmVhdGUgW3Byb2plY3QtZGlyZWN0b3J5XScpXG4gIC5kZXNjcmlwdGlvbignQ3JlYXRlIGEgbmV3IERldkRvYyBkb2N1bWVudGF0aW9uIHNpdGUnKVxuICAub3B0aW9uKCctdCwgLS10ZW1wbGF0ZSA8dHlwZT4nLCAnVGVtcGxhdGUgdG8gdXNlIChiYXNpYywgb3BlbmFwaSwgZ3JhcGhxbCknKVxuICAub3B0aW9uKCctcywgLS1zdWJkb21haW4gPHN1YmRvbWFpbj4nLCAnU3ViZG9tYWluIGZvciB5b3VyIGRvY3MgKGUuZy4sIG15LWRvY3MuZGV2ZG9jLnNoKScpXG4gIC5vcHRpb24oJy0tbm8tZ2l0JywgJ1NraXAgZ2l0IGluaXRpYWxpemF0aW9uJylcbiAgLm9wdGlvbignLS1uby1pbnN0YWxsJywgJ1NraXAgaW5zdGFsbGluZyBkZXBlbmRlbmNpZXMnKVxuICAub3B0aW9uKCctLWFpIFt0b29sXScsICdTZXQgdXAgQUkgYWdlbnRzIChjbGF1ZGUsIGN1cnNvciwgYm90aCwgb3IganVzdCAtLWFpIHRvIGNob29zZSknKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCAoZGVmYXVsdDogaHR0cHM6Ly9kZXZkb2Muc2gpJylcbiAgLmFjdGlvbihjcmVhdGUpO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdpbml0JylcbiAgLmRlc2NyaXB0aW9uKCdJbml0aWFsaXplL3JlZ2lzdGVyIHByb2plY3Qgd2l0aCBCcmFpbmZpc2gnKVxuICAub3B0aW9uKCctcywgLS1zbHVnIDxzbHVnPicsICdQcm9qZWN0IHNsdWcnKVxuICAub3B0aW9uKCctLXN1YmRvbWFpbiA8c3ViZG9tYWluPicsICdTdWJkb21haW4gZm9yIHlvdXIgZG9jcyAoZS5nLiwgbXktZG9jcy5kZXZkb2Muc2gpJylcbiAgLm9wdGlvbignLWYsIC0tZm9yY2UnLCAnT3ZlcndyaXRlIGV4aXN0aW5nIC5kZXZkb2MuanNvbicpXG4gIC5vcHRpb24oJy0tYWkgW3Rvb2xdJywgJ1NldCB1cCBBSSBhZ2VudHMgKGNsYXVkZSwgY3Vyc29yLCBib3RoLCBvciBqdXN0IC0tYWkgdG8gY2hvb3NlKScpXG4gIC5vcHRpb24oJy11LCAtLXVybCA8dXJsPicsICdBUEkgVVJMIChkZWZhdWx0OiBodHRwczovL2RldmRvYy5zaCknKVxuICAuYWN0aW9uKGluaXQpO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdkZXYnKVxuICAuZGVzY3JpcHRpb24oJ1N0YXJ0IGRldmVsb3BtZW50IHNlcnZlciB3aXRoIGhvdCByZWxvYWQnKVxuICAub3B0aW9uKCctcCwgLS1wb3J0IDxwb3J0PicsICdQb3J0IHRvIHJ1biB0aGUgc2VydmVyIG9uJywgJzMzMzMnKVxuICAub3B0aW9uKCctSCwgLS1ob3N0IDxob3N0PicsICdIb3N0IHRvIGJpbmQgdGhlIHNlcnZlciB0bycsICdsb2NhbGhvc3QnKVxuICAub3B0aW9uKCctbywgLS1vcGVuJywgJ09wZW4gYnJvd3NlciBhdXRvbWF0aWNhbGx5JywgdHJ1ZSlcbiAgLm9wdGlvbignLS1uby1vcGVuJywgJ0RvIG5vdCBvcGVuIGJyb3dzZXIgYXV0b21hdGljYWxseScpXG4gIC5hY3Rpb24oZGV2KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnYnVpbGQnKVxuICAuZGVzY3JpcHRpb24oJ0J1aWxkIGRvY3VtZW50YXRpb24gZm9yIHByb2R1Y3Rpb24nKVxuICAub3B0aW9uKCctbywgLS1vdXRwdXQgPGRpcj4nLCAnT3V0cHV0IGRpcmVjdG9yeScsICdkaXN0JylcbiAgLmFjdGlvbihidWlsZCk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3N0YXJ0JylcbiAgLmRlc2NyaXB0aW9uKCdTdGFydCBwcm9kdWN0aW9uIHNlcnZlcicpXG4gIC5vcHRpb24oJy1wLCAtLXBvcnQgPHBvcnQ+JywgJ1BvcnQgdG8gcnVuIHRoZSBzZXJ2ZXIgb24nLCAnMzAwMCcpXG4gIC5hY3Rpb24oc3RhcnQpO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdjaGVjaycpXG4gIC5kZXNjcmlwdGlvbignVmFsaWRhdGUgZG9jcy5qc29uIGFuZCBNRFggZmlsZXMnKVxuICAuYWN0aW9uKGNoZWNrKTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnYWknKVxuICAuZGVzY3JpcHRpb24oJ1NldCB1cCBBSSBhZ2VudCBjb25maWd1cmF0aW9uIChDbGF1ZGUgQ29kZSBza2lsbHMsIEN1cnNvciBydWxlcyknKVxuICAub3B0aW9uKCctdCwgLS10b29sIDx0b29sPicsICdBSSB0b29sIHRvIGNvbmZpZ3VyZSAoY2xhdWRlLCBjdXJzb3IsIGJvdGgpJylcbiAgLmFjdGlvbihhaSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2RlcGxveScpXG4gIC5kZXNjcmlwdGlvbignRGVwbG95IGRvY3VtZW50YXRpb24gdG8gRGV2RG9jIHBsYXRmb3JtJylcbiAgLm9wdGlvbignLXUsIC0tdXJsIDx1cmw+JywgJ0FQSSBVUkwgKGRlZmF1bHQ6IGh0dHBzOi8vZGV2ZG9jLnNoKScpXG4gIC5vcHRpb24oJy1rLCAtLWFwaS1rZXkgPGtleT4nLCAnQVBJIGtleSBmb3IgYXV0aGVudGljYXRpb24nKVxuICAuYWN0aW9uKGRlcGxveSk7XG5cbi8vIEtleXMgbWFuYWdlbWVudFxuY29uc3Qga2V5c0NtZCA9IHByb2dyYW1cbiAgLmNvbW1hbmQoJ2tleXMnKVxuICAuZGVzY3JpcHRpb24oJ01hbmFnZSBBUEkga2V5cyBmb3IgeW91ciBwcm9qZWN0Jyk7XG5cbmtleXNDbWRcbiAgLmNvbW1hbmQoJ2xpc3QnKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgY3VycmVudCBBUEkga2V5IGluZm8nKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCcpXG4gIC5hY3Rpb24obGlzdEtleXMpO1xuXG5rZXlzQ21kXG4gIC5jb21tYW5kKCdyZWdlbmVyYXRlJylcbiAgLmRlc2NyaXB0aW9uKCdHZW5lcmF0ZSBhIG5ldyBBUEkga2V5IChpbnZhbGlkYXRlcyB0aGUgb2xkIG9uZSknKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCcpXG4gIC5hY3Rpb24ocmVnZW5lcmF0ZUtleSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3dob2FtaScpXG4gIC5kZXNjcmlwdGlvbignU2hvdyBjdXJyZW50IHByb2plY3QgaW5mb3JtYXRpb24nKVxuICAub3B0aW9uKCctdSwgLS11cmwgPHVybD4nLCAnQVBJIFVSTCcpXG4gIC5hY3Rpb24od2hvYW1pKTtcblxuLy8gQXNzZXRzIG1hbmFnZW1lbnRcbmNvbnN0IGFzc2V0c0NtZCA9IHByb2dyYW1cbiAgLmNvbW1hbmQoJ2Fzc2V0cycpXG4gIC5kZXNjcmlwdGlvbignTWFuYWdlIHByb2plY3QgYXNzZXRzIChpbWFnZXMsIGZpbGVzKScpO1xuXG5hc3NldHNDbWRcbiAgLmNvbW1hbmQoJ3VwbG9hZCA8ZmlsZXMuLi4+JylcbiAgLmRlc2NyaXB0aW9uKCdVcGxvYWQgYXNzZXRzIHRvIHN0b3JhZ2UgKG1heCAyNU1CIHBlciBmaWxlKScpXG4gIC5vcHRpb24oJy11LCAtLXVybCA8dXJsPicsICdBUEkgVVJMJylcbiAgLm9wdGlvbignLWssIC0tYXBpLWtleSA8a2V5PicsICdBUEkga2V5IGZvciBhdXRoZW50aWNhdGlvbicpXG4gIC5hY3Rpb24odXBsb2FkKTtcblxuYXNzZXRzQ21kXG4gIC5jb21tYW5kKCdsaXN0JylcbiAgLmRlc2NyaXB0aW9uKCdMaXN0IHVwbG9hZGVkIGFzc2V0cycpXG4gIC5vcHRpb24oJy11LCAtLXVybCA8dXJsPicsICdBUEkgVVJMJylcbiAgLm9wdGlvbignLWssIC0tYXBpLWtleSA8a2V5PicsICdBUEkga2V5IGZvciBhdXRoZW50aWNhdGlvbicpXG4gIC5hY3Rpb24obGlzdEFzc2V0cyk7XG5cbi8vIFNob3J0Y3V0IGZvciB1cGxvYWRcbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3VwbG9hZCA8ZmlsZXMuLi4+JylcbiAgLmRlc2NyaXB0aW9uKCdVcGxvYWQgYXNzZXRzIHRvIHN0b3JhZ2UgKHNob3J0Y3V0IGZvciBcImRldmRvYyBhc3NldHMgdXBsb2FkXCIpJylcbiAgLm9wdGlvbignLXUsIC0tdXJsIDx1cmw+JywgJ0FQSSBVUkwnKVxuICAub3B0aW9uKCctaywgLS1hcGkta2V5IDxrZXk+JywgJ0FQSSBrZXkgZm9yIGF1dGhlbnRpY2F0aW9uJylcbiAgLmFjdGlvbih1cGxvYWQpO1xuXG5wcm9ncmFtLnBhcnNlKHByb2Nlc3MuYXJndik7XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brainfish-ai/devdoc",
3
- "version": "0.1.29",
3
+ "version": "0.1.30",
4
4
  "description": "Documentation framework for developers. Write docs in MDX, preview locally, deploy to Brainfish.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",