@dollhousemcp/mcp-server 1.7.4 → 1.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/CHANGELOG.md +118 -0
  2. package/README.github.md +90 -1
  3. package/README.md +1 -1
  4. package/README.md.backup +90 -1
  5. package/README.npm.md +1 -1
  6. package/dist/collection/CollectionBrowser.js +2 -2
  7. package/dist/collection/CollectionSearch.js +3 -3
  8. package/dist/collection/PersonaDetails.js +2 -2
  9. package/dist/config/ConfigManager.d.ts +20 -0
  10. package/dist/config/ConfigManager.d.ts.map +1 -1
  11. package/dist/config/ConfigManager.js +48 -4
  12. package/dist/generated/version.d.ts +2 -2
  13. package/dist/generated/version.js +3 -3
  14. package/dist/handlers/ConfigHandler.d.ts +30 -0
  15. package/dist/handlers/ConfigHandler.d.ts.map +1 -1
  16. package/dist/handlers/ConfigHandler.js +149 -21
  17. package/dist/index.d.ts +4 -6
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +73 -52
  20. package/dist/portfolio/GitHubPortfolioIndexer.d.ts.map +1 -1
  21. package/dist/portfolio/GitHubPortfolioIndexer.js +8 -5
  22. package/dist/portfolio/PortfolioIndexManager.d.ts +1 -1
  23. package/dist/portfolio/PortfolioIndexManager.js +2 -2
  24. package/dist/portfolio/PortfolioRepoManager.d.ts +16 -2
  25. package/dist/portfolio/PortfolioRepoManager.d.ts.map +1 -1
  26. package/dist/portfolio/PortfolioRepoManager.js +95 -18
  27. package/dist/portfolio/PortfolioSyncManager.d.ts.map +1 -1
  28. package/dist/portfolio/PortfolioSyncManager.js +23 -15
  29. package/dist/security/audit/config/suppressions.d.ts.map +1 -1
  30. package/dist/security/audit/config/suppressions.js +11 -1
  31. package/dist/server/ServerSetup.d.ts.map +1 -1
  32. package/dist/server/ServerSetup.js +11 -6
  33. package/dist/server/tools/CollectionTools.js +6 -6
  34. package/dist/server/tools/ConfigTools.js +2 -2
  35. package/dist/server/tools/ConfigToolsV2.js +5 -5
  36. package/dist/server/tools/PortfolioTools.d.ts.map +1 -1
  37. package/dist/server/tools/PortfolioTools.js +16 -5
  38. package/dist/server/types.d.ts +2 -0
  39. package/dist/server/types.d.ts.map +1 -1
  40. package/dist/server/types.js +1 -1
  41. package/dist/tools/portfolio/submitToPortfolioTool.d.ts.map +1 -1
  42. package/dist/tools/portfolio/submitToPortfolioTool.js +6 -5
  43. package/package.json +7 -6
package/dist/index.js CHANGED
@@ -35,8 +35,10 @@ import { PortfolioManager, ElementType } from './portfolio/PortfolioManager.js';
35
35
  import { MigrationManager } from './portfolio/MigrationManager.js';
36
36
  import { SkillManager } from './elements/skills/index.js';
37
37
  import { TemplateManager } from './elements/templates/TemplateManager.js';
38
+ import { TemplateRenderer } from './utils/TemplateRenderer.js';
38
39
  import { AgentManager } from './elements/agents/AgentManager.js';
39
40
  import { ConfigManager } from './config/ConfigManager.js';
41
+ // ConfigWizard imports removed - not included in hotfix
40
42
  import { spawn } from 'child_process';
41
43
  import { fileURLToPath } from 'url';
42
44
  import { homedir } from 'os';
@@ -79,7 +81,9 @@ export class DollhouseMCPServer {
79
81
  migrationManager;
80
82
  skillManager;
81
83
  templateManager;
84
+ templateRenderer;
82
85
  agentManager;
86
+ // ConfigWizardCheck removed - not included in hotfix
83
87
  constructor() {
84
88
  this.server = new Server({
85
89
  name: "dollhousemcp",
@@ -89,6 +93,7 @@ export class DollhouseMCPServer {
89
93
  tools: {},
90
94
  },
91
95
  });
96
+ // ConfigWizardCheck initialization removed - not included in hotfix
92
97
  // Initialize portfolio system
93
98
  this.portfolioManager = PortfolioManager.getInstance();
94
99
  this.migrationManager = new MigrationManager(this.portfolioManager);
@@ -100,6 +105,7 @@ export class DollhouseMCPServer {
100
105
  // Initialize element managers
101
106
  this.skillManager = new SkillManager();
102
107
  this.templateManager = new TemplateManager();
108
+ this.templateRenderer = new TemplateRenderer(this.templateManager);
103
109
  this.agentManager = new AgentManager(this.portfolioManager.getBaseDir());
104
110
  // Log resolved path for debugging
105
111
  logger.info(`Personas directory resolved to: ${this.personasDir}`);
@@ -547,8 +553,16 @@ export class DollhouseMCPServer {
547
553
  // Try to find persona by filename first, then by name
548
554
  let persona = this.personas.get(personaIdentifier);
549
555
  if (!persona) {
550
- // Search by name
551
- persona = Array.from(this.personas.values()).find(p => p.metadata.name.toLowerCase() === personaIdentifier.toLowerCase());
556
+ // Search by name with slugify normalization (fixes Debug Detective's identified issue)
557
+ const searchNameSlug = slugify(personaIdentifier);
558
+ const searchNameLower = personaIdentifier.toLowerCase();
559
+ persona = Array.from(this.personas.values()).find(p => {
560
+ const personaNameLower = p.metadata.name?.toLowerCase();
561
+ const personaNameSlug = slugify(p.metadata.name || '');
562
+ // Try both exact match and slug match for flexibility
563
+ return personaNameLower === searchNameLower ||
564
+ personaNameSlug === searchNameSlug;
565
+ });
552
566
  }
553
567
  if (!persona) {
554
568
  throw new McpError(ErrorCode.InvalidParams, `Persona not found: ${personaIdentifier}`);
@@ -1105,35 +1119,21 @@ export class DollhouseMCPServer {
1105
1119
  }
1106
1120
  // Element-specific methods
1107
1121
  async renderTemplate(name, variables) {
1108
- try {
1109
- const template = await this.templateManager.find(t => t.metadata.name === name);
1110
- if (!template) {
1111
- return {
1112
- content: [{
1113
- type: "text",
1114
- text: `❌ Template '${name}' not found`
1115
- }]
1116
- };
1117
- }
1118
- // Simple template rendering - replace variables in content
1119
- let rendered = template.content;
1120
- for (const [key, value] of Object.entries(variables)) {
1121
- const regex = new RegExp(`\\{\\{\\s*${key}\\s*\\}\\}`, 'g');
1122
- rendered = rendered.replace(regex, String(value));
1123
- }
1122
+ // Use the new TemplateRenderer utility for cleaner code and better validation
1123
+ const result = await this.templateRenderer.render(name, variables);
1124
+ if (result.success && result.content) {
1124
1125
  return {
1125
1126
  content: [{
1126
1127
  type: "text",
1127
- text: `📄 Rendered template '${name}':\n\n${rendered}`
1128
+ text: `📄 Rendered template '${name}':\n\n${result.content}`
1128
1129
  }]
1129
1130
  };
1130
1131
  }
1131
- catch (error) {
1132
- logger.error(`Failed to render template '${name}':`, error);
1132
+ else {
1133
1133
  return {
1134
1134
  content: [{
1135
1135
  type: "text",
1136
- text: `❌ Failed to render template: ${error instanceof Error ? error.message : 'Unknown error'}`
1136
+ text: `❌ ${result.error || 'Failed to render template'}`
1137
1137
  }]
1138
1138
  };
1139
1139
  }
@@ -2098,7 +2098,7 @@ export class DollhouseMCPServer {
2098
2098
  errorMessage += `🛠️ **Step-by-step troubleshooting**:\n`;
2099
2099
  errorMessage += `1. 📝 **List all content**: Use \`list_portfolio\` to see what's available\n`;
2100
2100
  errorMessage += `2. 🔍 **Check spelling**: Verify the exact name and try variations\n`;
2101
- errorMessage += `3. 🎯 **Specify type**: Try \`submit_content "${contentIdentifier}" --type=personas\`\n`;
2101
+ errorMessage += `3. 🎯 **Specify type**: Try \`submit_collection_content "${contentIdentifier}" --type=personas\`\n`;
2102
2102
  errorMessage += `4. 📁 **Browse files**: Check your portfolio directory manually\n\n`;
2103
2103
  errorMessage += `📝 **Tip**: The system searches both filenames and display names with fuzzy matching.`;
2104
2104
  return {
@@ -3260,7 +3260,7 @@ ${sanitizedInstructions}
3260
3260
  `📄 Saved as: ${filename}\n` +
3261
3261
  `📊 Total personas: ${this.personas.size}\n\n` +
3262
3262
  `🎯 **Ready to use:** \`activate_persona "${sanitizedName}"\`\n` +
3263
- `📤 **Share it:** \`submit_content "${sanitizedName}"\`\n` +
3263
+ `📤 **Share it:** \`submit_collection_content "${sanitizedName}"\`\n` +
3264
3264
  `✏️ **Edit it:** \`edit_persona "${sanitizedName}" "field" "new value"\``,
3265
3265
  },
3266
3266
  ],
@@ -3313,11 +3313,21 @@ ${sanitizedInstructions}
3313
3313
  };
3314
3314
  }
3315
3315
  // Find the persona
3316
+ // First try exact match (with or without .md extension)
3316
3317
  let persona = this.personas.get(personaIdentifier);
3318
+ if (!persona && !personaIdentifier.endsWith('.md')) {
3319
+ // Try adding .md extension
3320
+ persona = this.personas.get(`${personaIdentifier}.md`);
3321
+ }
3317
3322
  if (!persona) {
3318
- // Search by name
3323
+ // Search by name (case-insensitive)
3319
3324
  persona = Array.from(this.personas.values()).find(p => p.metadata.name.toLowerCase() === personaIdentifier.toLowerCase());
3320
3325
  }
3326
+ if (!persona) {
3327
+ // Search by name with hyphen-to-space conversion (e.g., "debug-detective" -> "Debug Detective")
3328
+ const nameWithSpaces = personaIdentifier.replace(/-/g, ' ');
3329
+ persona = Array.from(this.personas.values()).find(p => p.metadata.name.toLowerCase() === nameWithSpaces.toLowerCase());
3330
+ }
3321
3331
  if (!persona) {
3322
3332
  return {
3323
3333
  content: [
@@ -3493,11 +3503,21 @@ ${sanitizedInstructions}
3493
3503
  };
3494
3504
  }
3495
3505
  // Find the persona
3506
+ // First try exact match (with or without .md extension)
3496
3507
  let persona = this.personas.get(personaIdentifier);
3508
+ if (!persona && !personaIdentifier.endsWith('.md')) {
3509
+ // Try adding .md extension
3510
+ persona = this.personas.get(`${personaIdentifier}.md`);
3511
+ }
3497
3512
  if (!persona) {
3498
- // Search by name
3513
+ // Search by name (case-insensitive)
3499
3514
  persona = Array.from(this.personas.values()).find(p => p.metadata.name.toLowerCase() === personaIdentifier.toLowerCase());
3500
3515
  }
3516
+ if (!persona) {
3517
+ // Search by name with hyphen-to-space conversion (e.g., "debug-detective" -> "Debug Detective")
3518
+ const nameWithSpaces = personaIdentifier.replace(/-/g, ' ');
3519
+ persona = Array.from(this.personas.values()).find(p => p.metadata.name.toLowerCase() === nameWithSpaces.toLowerCase());
3520
+ }
3501
3521
  if (!persona) {
3502
3522
  return {
3503
3523
  content: [
@@ -3745,7 +3765,7 @@ Note: Configuration is temporary for this session. To make permanent, set enviro
3745
3765
  const autoSubmitEnabled = process.env.DOLLHOUSE_AUTO_SUBMIT_TO_COLLECTION === 'true';
3746
3766
  const message = `**Collection Submission Configuration**\n\n` +
3747
3767
  `• **Auto-submit**: ${autoSubmitEnabled ? '✅ Enabled' : '❌ Disabled'}\n\n` +
3748
- `When auto-submit is enabled, the \`submit_content\` tool will:\n` +
3768
+ `When auto-submit is enabled, the \`submit_collection_content\` tool will:\n` +
3749
3769
  `1. Upload content to your GitHub portfolio\n` +
3750
3770
  `2. Automatically create a submission issue in DollhouseMCP/collection\n\n` +
3751
3771
  `To change this setting, use:\n` +
@@ -3968,12 +3988,13 @@ Placeholders for custom format:
3968
3988
  }
3969
3989
  // Check if portfolio exists
3970
3990
  const { PortfolioRepoManager } = await import('./portfolio/PortfolioRepoManager.js');
3971
- const portfolioManager = new PortfolioRepoManager();
3991
+ const { getPortfolioRepositoryName } = await import('./config/portfolioConfig.js');
3992
+ const portfolioManager = new PortfolioRepoManager(getPortfolioRepositoryName());
3972
3993
  const portfolioExists = await portfolioManager.checkPortfolioExists(targetUsername);
3973
3994
  let statusText = `${this.getPersonaIndicator()}📊 **Portfolio Status for ${targetUsername}**\n\n`;
3974
3995
  if (portfolioExists) {
3975
- statusText += `✅ **Repository**: dollhouse-portfolio exists\n`;
3976
- statusText += `🔗 **URL**: https://github.com/${targetUsername}/dollhouse-portfolio\n\n`;
3996
+ statusText += `✅ **Repository**: ${portfolioManager.getRepositoryName()} exists\n`;
3997
+ statusText += `🔗 **URL**: https://github.com/${targetUsername}/${portfolioManager.getRepositoryName()}\n\n`;
3977
3998
  // Get local elements count
3978
3999
  const localPortfolioManager = PortfolioManager.getInstance();
3979
4000
  const personasPath = localPortfolioManager.getElementDir(ElementType.PERSONA);
@@ -4052,13 +4073,14 @@ Placeholders for custom format:
4052
4073
  const username = authStatus.username;
4053
4074
  // Check if portfolio already exists
4054
4075
  const { PortfolioRepoManager } = await import('./portfolio/PortfolioRepoManager.js');
4055
- const portfolioManager = new PortfolioRepoManager();
4076
+ const { getPortfolioRepositoryName } = await import('./config/portfolioConfig.js');
4077
+ const portfolioManager = new PortfolioRepoManager(getPortfolioRepositoryName());
4056
4078
  const portfolioExists = await portfolioManager.checkPortfolioExists(username);
4057
4079
  if (portfolioExists) {
4058
4080
  return {
4059
4081
  content: [{
4060
4082
  type: "text",
4061
- text: `${this.getPersonaIndicator()}✅ Portfolio already exists at https://github.com/${username}/dollhouse-portfolio\n\nUse portfolio_status to see details or sync_portfolio to update it.`
4083
+ text: `${this.getPersonaIndicator()}✅ Portfolio already exists at https://github.com/${username}/${portfolioManager.getRepositoryName()}\n\nUse portfolio_status to see details or sync_portfolio to update it.`
4062
4084
  }]
4063
4085
  };
4064
4086
  }
@@ -4068,7 +4090,7 @@ Placeholders for custom format:
4068
4090
  content: [{
4069
4091
  type: "text",
4070
4092
  text: `${this.getPersonaIndicator()}🎉 **Portfolio Created Successfully!**\n\n` +
4071
- `✅ **Repository**: https://github.com/${username}/dollhouse-portfolio\n` +
4093
+ `✅ **Repository**: https://github.com/${username}/${portfolioManager.getRepositoryName()}\n` +
4072
4094
  `📁 **Structure**: Organized folders for all element types\n` +
4073
4095
  `📝 **README**: Usage instructions included\n` +
4074
4096
  `🔄 **Next Step**: Use sync_portfolio to upload your elements\n\n` +
@@ -4112,7 +4134,8 @@ Placeholders for custom format:
4112
4134
  // Show current configuration
4113
4135
  statusText += `\n📋 **Current Settings**:\n`;
4114
4136
  statusText += ` • Auto-submit: Disabled (Coming soon)\n`;
4115
- statusText += ` • Repository name: dollhouse-portfolio (default)\n`;
4137
+ const { getPortfolioRepositoryName } = await import('./config/portfolioConfig.js');
4138
+ statusText += ` • Repository name: ${getPortfolioRepositoryName()}\n`;
4116
4139
  statusText += ` • Default visibility: public\n`;
4117
4140
  return {
4118
4141
  content: [{
@@ -4156,8 +4179,9 @@ Placeholders for custom format:
4156
4179
  const username = authStatus.username;
4157
4180
  // Check if portfolio exists
4158
4181
  const { PortfolioRepoManager } = await import('./portfolio/PortfolioRepoManager.js');
4159
- const portfolioManager = new PortfolioRepoManager();
4160
- // CRITICAL FIX: Set GitHub token like submit_content does
4182
+ const { getPortfolioRepositoryName } = await import('./config/portfolioConfig.js');
4183
+ const portfolioManager = new PortfolioRepoManager(getPortfolioRepositoryName());
4184
+ // CRITICAL FIX: Set GitHub token like submit_collection_content does
4161
4185
  // Without this, checkPortfolioExists fails because it can't authenticate to GitHub
4162
4186
  const { TokenManager } = await import('./security/tokenManager.js');
4163
4187
  const token = await TokenManager.getGitHubTokenAsync();
@@ -4178,7 +4202,7 @@ Placeholders for custom format:
4178
4202
  text: `${this.getPersonaIndicator()}❌ **No Portfolio Repository Found**\n\n` +
4179
4203
  `🏠 **Quick Setup**:\n` +
4180
4204
  `1. Run: \`init_portfolio\` to create your GitHub portfolio\n` +
4181
- `2. This creates: https://github.com/[username]/dollhouse-portfolio\n\n` +
4205
+ `2. This creates: https://github.com/[username]/${portfolioManager.getRepositoryName()}\n\n` +
4182
4206
  `📝 **What you'll get**:\n` +
4183
4207
  `• Public repository to showcase your AI elements\n` +
4184
4208
  `• Organized structure for personas, skills, templates, and agents\n` +
@@ -4218,7 +4242,7 @@ Placeholders for custom format:
4218
4242
  }
4219
4243
  dryRunText += `\n`;
4220
4244
  }
4221
- dryRunText += `🎯 **Target**: https://github.com/${username}/dollhouse-portfolio\n`;
4245
+ dryRunText += `🎯 **Target**: https://github.com/${username}/${portfolioManager.getRepositoryName()}\n`;
4222
4246
  dryRunText += `⚠️ **Note**: This is a preview. Remove dry_run=true to perform actual sync.`;
4223
4247
  return {
4224
4248
  content: [{
@@ -4343,7 +4367,7 @@ Placeholders for custom format:
4343
4367
  const summaryIcon = successRate === 100 ? '🎉' : successRate >= 80 ? '✅' : successRate >= 50 ? '⚠️' : '❌';
4344
4368
  syncText += `${summaryIcon} **Sync Complete!**\n`;
4345
4369
  syncText += `📊 **Overall Results**: ${syncCount}/${totalElements} elements synced (${successRate}%)\n`;
4346
- syncText += `🏠 **Portfolio**: https://github.com/${username}/dollhouse-portfolio\n\n`;
4370
+ syncText += `🏠 **Portfolio**: https://github.com/${username}/${portfolioManager.getRepositoryName()}\n\n`;
4347
4371
  // Include failed elements information with actionable suggestions
4348
4372
  if (failedElements.length > 0) {
4349
4373
  syncText += `⚠️ **Issues Encountered** (${failedElements.length} problems):\n\n`;
@@ -4386,7 +4410,7 @@ Placeholders for custom format:
4386
4410
  }
4387
4411
  // General tips
4388
4412
  syncText += ` • Check element file formats and metadata\n`;
4389
- syncText += ` • Try syncing individual elements with \`submit_content\`\n`;
4413
+ syncText += ` • Try syncing individual elements with \`portfolio_element_manager\` (upload operation)\n`;
4390
4414
  syncText += ` • Use \`sync_portfolio\` with \`dry_run=true\` to preview issues\n\n`;
4391
4415
  // Add error code legend if we found any
4392
4416
  if (uniqueErrorCodes.length > 0) {
@@ -4412,8 +4436,8 @@ Placeholders for custom format:
4412
4436
  // UX IMPROVEMENT: Add next steps and helpful links
4413
4437
  if (syncCount > 0) {
4414
4438
  syncText += `🚀 **Next Steps**:\n`;
4415
- syncText += ` • View your portfolio: https://github.com/${username}/dollhouse-portfolio\n`;
4416
- syncText += ` • Share individual elements using \`submit_content <name>\`\n`;
4439
+ syncText += ` • View your portfolio: https://github.com/${username}/${portfolioManager.getRepositoryName()}\n`;
4440
+ syncText += ` • Share individual elements using \`submit_collection_content <name>\`\n`;
4417
4441
  syncText += ` • Keep portfolio updated with \`sync_portfolio\` regularly\n\n`;
4418
4442
  }
4419
4443
  syncText += `Your elements are now available on GitHub!`;
@@ -4424,13 +4448,10 @@ Placeholders for custom format:
4424
4448
  }]
4425
4449
  };
4426
4450
  }
4427
- if (options.direction === 'pull') {
4428
- return {
4429
- content: [{
4430
- type: "text",
4431
- text: `${this.getPersonaIndicator()}⚠️ Pull sync is coming soon. Currently only push sync is supported.`
4432
- }]
4433
- };
4451
+ if (options.direction === 'pull' || options.direction === 'both') {
4452
+ const { PortfolioPullHandler } = await import('./handlers/PortfolioPullHandler.js');
4453
+ const handler = new PortfolioPullHandler();
4454
+ return handler.executePull(options, this.getPersonaIndicator());
4434
4455
  }
4435
4456
  return {
4436
4457
  content: [{
@@ -4551,7 +4572,7 @@ Placeholders for custom format:
4551
4572
  text += `💡 **Next steps:**\n`;
4552
4573
  text += `• Use get_element_details to see full content\n`;
4553
4574
  text += `• Use activate_element to activate elements\n`;
4554
- text += `• Use submit_content to share with the community`;
4575
+ text += `• Use submit_collection_content to share with the community`;
4555
4576
  }
4556
4577
  return {
4557
4578
  content: [{
@@ -4675,7 +4696,7 @@ Placeholders for custom format:
4675
4696
  }
4676
4697
  text += `💡 **Next steps:**\n`;
4677
4698
  text += `• Use get_element_details to see full content\n`;
4678
- text += `• Use install_content for collection items\n`;
4699
+ text += `• Use install_collection_content for collection items\n`;
4679
4700
  text += `• Use activate_element for local elements\n`;
4680
4701
  text += `• Check for duplicates before submitting new content`;
4681
4702
  }
@@ -5006,4 +5027,4 @@ if ((isDirectExecution || isNpxExecution || isCliExecution) && !isTest) {
5006
5027
  process.exit(1);
5007
5028
  });
5008
5029
  }
5009
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLGlEQUFpRDtBQUNqRCxPQUFPLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7SUFDeEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0lBQ3RELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsQ0FBQyxDQUFDLENBQUM7QUFFSCxPQUFPLENBQUMsRUFBRSxDQUFDLG9CQUFvQixFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQ25ELE9BQU8sQ0FBQyxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUN0RCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLENBQUMsQ0FBQyxDQUFDO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBd0IsTUFBTSw4QkFBOEIsQ0FBQztBQUNoSSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFlBQVksRUFBaUIsTUFBTSx5QkFBeUIs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QXNDLENBQUMsQ0FBQztRQUN0RCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuLy8gRGVmZW5zaXZlIGVycm9yIGhhbmRsaW5nIGZvciBucHgvQ0xJIGV4ZWN1dGlvblxucHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCAoZXJyb3IpID0+IHtcbiAgY29uc29sZS5lcnJvcignW0RvbGxob3VzZU1DUF0gU2VydmVyIHN0YXJ0dXAgZmFpbGVkJyk7XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn0pO1xuXG5wcm9jZXNzLm9uKCd1bmhhbmRsZWRSZWplY3Rpb24nLCAocmVhc29uLCBwcm9taXNlKSA9PiB7XG4gIGNvbnNvbGUuZXJyb3IoJ1tEb2xsaG91c2VNQ1BdIFNlcnZlciBzdGFydHVwIGZhaWxlZCcpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59KTtcblxuaW1wb3J0IHsgU2VydmVyIH0gZnJvbSBcIkBtb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc2VydmVyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBTdGRpb1NlcnZlclRyYW5zcG9ydCB9IGZyb20gXCJAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NlcnZlci9zdGRpby5qc1wiO1xuaW1wb3J0IHsgTWNwRXJyb3IsIEVycm9yQ29kZSB9IGZyb20gXCJAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3R5cGVzLmpzXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGxvYWRJbmRpY2F0b3JDb25maWcsIGZvcm1hdEluZGljYXRvciwgdmFsaWRhdGVDdXN0b21Gb3JtYXQsIHR5cGUgSW5kaWNhdG9yQ29uZmlnIH0gZnJvbSAnLi9jb25maWcvaW5kaWNhdG9yLWNvbmZpZy5qcyc7XG5pbXBvcnQgeyBTZWN1cmVZYW1sUGFyc2VyIH0gZnJvbSAnLi9zZWN1cml0eS9zZWN1cmVZYW1sUGFyc2VyLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5RXJyb3IgfSBmcm9tICcuL2Vycm9ycy9TZWN1cml0eUVycm9yLmpzJztcbmltcG9ydCB7IFNlY3VyZUVycm9ySGFuZGxlciB9IGZyb20gJy4vc2VjdXJpdHkvZXJyb3JIYW5kbGVyLmpzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlciwgRXJyb3JDYXRlZ29yeSB9IGZyb20gJy4vdXRpbHMvRXJyb3JIYW5kbGVyLmpzJztcblxuLy8gSW1wb3J0IG1vZHVsYXJpemVkIGNvbXBvbmVudHNcbmltcG9ydCB7IFBlcnNvbmEsIFBlcnNvbmFNZXRhZGF0YSB9IGZyb20gJy4vdHlwZXMvcGVyc29uYS5qcyc7XG5pbXBvcnQgeyBBUElDYWNoZSwgQ29sbGVjdGlvbkNhY2hlIH0gZnJvbSAnLi9jYWNoZS9pbmRleC5qcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUZpbGVuYW1lLCBzYW5pdGl6ZUlucHV0LCB2YWxpZGF0ZUNvbnRlbnRTaXplLCB2YWxpZGF0ZVVzZXJuYW1lLCBNQ1BJbnB1dFZhbGlkYXRvciB9IGZyb20gJy4vc2VjdXJpdHkvSW5wdXRWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgU0VDVVJJVFlfTElNSVRTLCBWQUxJREFUSU9OX1BBVFRFUk5TIH0gZnJvbSAnLi9zZWN1cml0eS9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgQ29udGVudFZhbGlkYXRvciB9IGZyb20gJy4vc2VjdXJpdHkvY29udGVudFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBQYXRoVmFsaWRhdG9yIH0gZnJvbSAnLi9zZWN1cml0eS9wYXRoVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IEZpbGVMb2NrTWFuYWdlciB9IGZyb20gJy4vc2VjdXJpdHkvZmlsZUxvY2tNYW5hZ2VyLmpzJztcbmltcG9ydCB7IGdlbmVyYXRlQW5vbnltb3VzSWQsIGdlbmVyYXRlVW5pcXVlSWQsIHNsdWdpZnkgfSBmcm9tICcuL3V0aWxzL2ZpbGVzeXN0ZW0uanMnO1xuaW1wb3J0IHsgR2l0SHViQ2xpZW50LCBDb2xsZWN0aW9uQnJvd3NlciwgQ29sbGVjdGlvbkluZGV4TWFuYWdlciwgQ29sbGVjdGlvblNlYXJjaCwgUGVyc29uYURldGFpbHMsIFBlcnNvbmFTdWJtaXR0ZXIsIEVsZW1lbnRJbnN0YWxsZXIgfSBmcm9tICcuL2NvbGxlY3Rpb24vaW5kZXguanMnO1xuaW1wb3J0IHsgU2VydmVyU2V0dXAsIElUb29sSGFuZGxlciB9IGZyb20gJy4vc2VydmVyL2luZGV4LmpzJztcbmltcG9ydCB7IEdpdEh1YkF1dGhNYW5hZ2VyLCB0eXBlIERldmljZUNvZGVSZXNwb25zZSB9IGZyb20gJy4vYXV0aC9HaXRIdWJBdXRoTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBQZXJzb25hRXhwb3J0ZXIsIFBlcnNvbmFJbXBvcnRlciB9IGZyb20gJy4vcGVyc29uYS9leHBvcnQtaW1wb3J0L2luZGV4LmpzJztcbmltcG9ydCB7IGlzRGVmYXVsdFBlcnNvbmEgfSBmcm9tICcuL2NvbnN0YW50cy9kZWZhdWx0UGVyc29uYXMuanMnO1xuaW1wb3J0IHsgUG9ydGZvbGlvTWFuYWdlciwgRWxlbWVudFR5cGUgfSBmcm9tICcuL3BvcnRmb2xpby9Qb3J0Zm9saW9NYW5hZ2VyLmpzJztcbmltcG9ydCB7IE1pZ3JhdGlvbk1hbmFnZXIgfSBmcm9tICcuL3BvcnRmb2xpby9NaWdyYXRpb25NYW5hZ2VyLmpzJztcbmltcG9ydCB7IFNraWxsTWFuYWdlciB9IGZyb20gJy4vZWxlbWVudHMvc2tpbGxzL2luZGV4LmpzJztcbmltcG9ydCB7IFNraWxsIH0gZnJvbSAnLi9lbGVtZW50cy9za2lsbHMvU2tpbGwuanMnO1xuaW1wb3J0IHsgVGVtcGxhdGVNYW5hZ2VyIH0gZnJvbSAnLi9lbGVtZW50cy90ZW1wbGF0ZXMvVGVtcGxhdGVNYW5hZ2VyLmpzJztcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSAnLi9lbGVtZW50cy90ZW1wbGF0ZXMvVGVtcGxhdGUuanMnO1xuaW1wb3J0IHsgQWdlbnRNYW5hZ2VyIH0gZnJvbSAnLi9lbGVtZW50cy9hZ2VudHMvQWdlbnRNYW5hZ2VyLmpzJztcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi9lbGVtZW50cy9hZ2VudHMvQWdlbnQuanMnO1xuaW1wb3J0IHsgQ29uZmlnTWFuYWdlciB9IGZyb20gJy4vY29uZmlnL0NvbmZpZ01hbmFnZXIuanMnO1xuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICd1cmwnO1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJztcblxuXG5cbi8vIERldGVjdCBleGVjdXRpb24gZW52aXJvbm1lbnRcbmNvbnN0IEVYRUNVVElPTl9FTlYgPSB7XG4gIGlzTnB4OiBwcm9jZXNzLmVudi5ucG1fZXhlY3BhdGg/LmluY2x1ZGVzKCducHgnKSB8fCBmYWxzZSxcbiAgaXNDbGk6IHByb2Nlc3MuYXJndlsxXT8uZW5kc1dpdGgoJy9kb2xsaG91c2VtY3AnKSB8fCBmYWxzZSxcbiAgaXNEaXJlY3Q6ICFwcm9jZXNzLmVudi5ucG1fZXhlY3BhdGgsXG4gIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgc2NyaXB0UGF0aDogcHJvY2Vzcy5hcmd2WzFdLFxufTtcblxuLy8gT25seSBsb2cgZXhlY3V0aW9uIGVudmlyb25tZW50IGluIGRlYnVnIG1vZGVcbmlmIChwcm9jZXNzLmVudi5ET0xMSE9VU0VfREVCVUcpIHtcbiAgY29uc29sZS5lcnJvcignW0RvbGxob3VzZU1DUF0gRGVidWcgbW9kZSBlbmFibGVkJyk7XG59XG5cbmV4cG9ydCBjbGFzcyBEb2xsaG91c2VNQ1BTZXJ2ZXIgaW1wbGVtZW50cyBJVG9vbEhhbmRsZXIge1xuICBwcml2YXRlIHNlcnZlcjogU2VydmVyO1xuICBwdWJsaWMgcGVyc29uYXNEaXI6IHN0cmluZyB8IG51bGw7XG4gIHByaXZhdGUgcGVyc29uYXM6IE1hcDxzdHJpbmcsIFBlcnNvbmE+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIGFjdGl2ZVBlcnNvbmE6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGN1cnJlbnRVc2VyOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBpc0luaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaW5pdGlhbGl6YXRpb25Qcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgYXBpQ2FjaGU6IEFQSUNhY2hlID0gbmV3IEFQSUNhY2hlKCk7XG4gIHByaXZhdGUgY29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUgPSBuZXcgQ29sbGVjdGlvbkNhY2hlKCk7XG4gIHByaXZhdGUgcmF0ZUxpbWl0VHJhY2tlciA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXJbXT4oKTtcbiAgcHJpdmF0ZSBpbmRpY2F0b3JDb25maWc6IEluZGljYXRvckNvbmZpZztcbiAgcHJpdmF0ZSBnaXRodWJDbGllbnQ6IEdpdEh1YkNsaWVudDtcbiAgcHJpdmF0ZSBnaXRodWJBdXRoTWFuYWdlcjogR2l0SHViQXV0aE1hbmFnZXI7XG4gIHByaXZhdGUgY29sbGVjdGlvbkluZGV4TWFuYWdlcjogQ29sbGVjdGlvbkluZGV4TWFuYWdlcjtcbiAgcHJpdmF0ZSBjb2xsZWN0aW9uQnJvd3NlcjogQ29sbGVjdGlvbkJyb3dzZXI7XG4gIHByaXZhdGUgY29sbGVjdGlvblNlYXJjaDogQ29sbGVjdGlvblNlYXJjaDtcbiAgcHJpdmF0ZSBwZXJzb25hRGV0YWlsczogUGVyc29uYURldGFpbHM7XG4gIHByaXZhdGUgZWxlbWVudEluc3RhbGxlcjogRWxlbWVudEluc3RhbGxlcjtcbiAgcHJpdmF0ZSBwZXJzb25hU3VibWl0dGVyOiBQZXJzb25hU3VibWl0dGVyO1xuICBwcml2YXRlIHNlcnZlclNldHVwOiBTZXJ2ZXJTZXR1cDtcbiAgcHJpdmF0ZSBwZXJzb25hRXhwb3J0ZXI6IFBlcnNvbmFFeHBvcnRlcjtcbiAgcHJpdmF0ZSBwZXJzb25hSW1wb3J0ZXI/OiBQZXJzb25hSW1wb3J0ZXI7XG4gIHByaXZhdGUgcG9ydGZvbGlvTWFuYWdlcjogUG9ydGZvbGlvTWFuYWdlcjtcbiAgcHJpdmF0ZSBtaWdyYXRpb25NYW5hZ2VyOiBNaWdyYXRpb25NYW5hZ2VyO1xuICBwcml2YXRlIHNraWxsTWFuYWdlcjogU2tpbGxNYW5hZ2VyO1xuICBwcml2YXRlIHRlbXBsYXRlTWFuYWdlcjogVGVtcGxhdGVNYW5hZ2VyO1xuICBwcml2YXRlIGFnZW50TWFuYWdlcjogQWdlbnRNYW5hZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2VydmVyID0gbmV3IFNlcnZlcihcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJkb2xsaG91c2VtY3BcIixcbiAgICAgICAgdmVyc2lvbjogXCIxLjAuMC1idWlsZC0yMDI1MDgxNy0xNjMwLXByNjA2XCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjYXBhYmlsaXRpZXM6IHtcbiAgICAgICAgICB0b29sczoge30sXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIEluaXRpYWxpemUgcG9ydGZvbGlvIHN5c3RlbVxuICAgIHRoaXMucG9ydGZvbGlvTWFuYWdlciA9IFBvcnRmb2xpb01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICB0aGlzLm1pZ3JhdGlvbk1hbmFnZXIgPSBuZXcgTWlncmF0aW9uTWFuYWdlcih0aGlzLnBvcnRmb2xpb01hbmFnZXIpO1xuICAgIFxuICAgIC8vIENSSVRJQ0FMIEZJWDogRG9uJ3QgYWNjZXNzIGRpcmVjdG9yaWVzIHVudGlsIGFmdGVyIG1pZ3JhdGlvbiBydW5zXG4gICAgLy8gUHJldmlvdXNseTogdGhpcy5wZXJzb25hc0RpciB3YXMgc2V0IGhlcmUsIGNyZWF0aW5nIGRpcmVjdG9yaWVzIGJlZm9yZSBtaWdyYXRpb24gY291bGQgZml4IHRoZW1cbiAgICAvLyBOb3c6IFdlIGRlbGF5IGRpcmVjdG9yeSBhY2Nlc3MgdW50aWwgaW5pdGlhbGl6ZVBvcnRmb2xpbygpIGNvbXBsZXRlc1xuICAgIC8vIFVzaW5nIG51bGwgdG8gbWFrZSB0aGUgdW5pbml0aWFsaXplZCBzdGF0ZSBleHBsaWNpdCAocGVyIFBSIHJldmlldyBmZWVkYmFjaylcbiAgICB0aGlzLnBlcnNvbmFzRGlyID0gbnVsbDsgLy8gV2lsbCBiZSBwcm9wZXJseSBpbml0aWFsaXplZCBpbiBjb21wbGV0ZUluaXRpYWxpemF0aW9uKClcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIGVsZW1lbnQgbWFuYWdlcnNcbiAgICB0aGlzLnNraWxsTWFuYWdlciA9IG5ldyBTa2lsbE1hbmFnZXIoKTtcbiAgICB0aGlzLnRlbXBsYXRlTWFuYWdlciA9IG5ldyBUZW1wbGF0ZU1hbmFnZXIoKTtcbiAgICB0aGlzLmFnZW50TWFuYWdlciA9IG5ldyBBZ2VudE1hbmFnZXIodGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldEJhc2VEaXIoKSk7XG4gICAgXG4gICAgLy8gTG9nIHJlc29sdmVkIHBhdGggZm9yIGRlYnVnZ2luZ1xuICAgIGxvZ2dlci5pbmZvKGBQZXJzb25hcyBkaXJlY3RvcnkgcmVzb2x2ZWQgdG86ICR7dGhpcy5wZXJzb25hc0Rpcn1gKTtcbiAgICBcbiAgICAvLyBQYXRoVmFsaWRhdG9yIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYWZ0ZXIgbWlncmF0aW9uIGNvbXBsZXRlc1xuICAgIFxuICAgIC8vIExvYWQgdXNlciBpZGVudGl0eSBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgIHRoaXMuY3VycmVudFVzZXIgPSBwcm9jZXNzLmVudi5ET0xMSE9VU0VfVVNFUiB8fCBudWxsO1xuICAgIFxuICAgIC8vIExvYWQgaW5kaWNhdG9yIGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLmluZGljYXRvckNvbmZpZyA9IGxvYWRJbmRpY2F0b3JDb25maWcoKTtcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIHBlcnNvbmEgbWFuYWdlclxuICAgIFxuICAgIC8vIEluaXRpYWxpemUgY29sbGVjdGlvbiBtb2R1bGVzXG4gICAgdGhpcy5naXRodWJDbGllbnQgPSBuZXcgR2l0SHViQ2xpZW50KHRoaXMuYXBpQ2FjaGUsIHRoaXMucmF0ZUxpbWl0VHJhY2tlcik7XG4gICAgdGhpcy5naXRodWJBdXRoTWFuYWdlciA9IG5ldyBHaXRIdWJBdXRoTWFuYWdlcih0aGlzLmFwaUNhY2hlKTtcbiAgICB0aGlzLmNvbGxlY3Rpb25JbmRleE1hbmFnZXIgPSBuZXcgQ29sbGVjdGlvbkluZGV4TWFuYWdlcigpO1xuICAgIHRoaXMuY29sbGVjdGlvbkJyb3dzZXIgPSBuZXcgQ29sbGVjdGlvbkJyb3dzZXIodGhpcy5naXRodWJDbGllbnQsIHRoaXMuY29sbGVjdGlvbkNhY2hlLCB0aGlzLmNvbGxlY3Rpb25JbmRleE1hbmFnZXIpO1xuICAgIHRoaXMuY29sbGVjdGlvblNlYXJjaCA9IG5ldyBDb2xsZWN0aW9uU2VhcmNoKHRoaXMuZ2l0aHViQ2xpZW50LCB0aGlzLmNvbGxlY3Rpb25DYWNoZSk7XG4gICAgdGhpcy5wZXJzb25hRGV0YWlscyA9IG5ldyBQZXJzb25hRGV0YWlscyh0aGlzLmdpdGh1YkNsaWVudCk7XG4gICAgdGhpcy5lbGVtZW50SW5zdGFsbGVyID0gbmV3IEVsZW1lbnRJbnN0YWxsZXIodGhpcy5naXRodWJDbGllbnQpO1xuICAgIHRoaXMucGVyc29uYVN1Ym1pdHRlciA9IG5ldyBQZXJzb25hU3VibWl0dGVyKCk7XG4gICAgXG4gICAgLy8gVXBkYXRlIG1hbmFnZXIgd2lsbCBiZSBpbml0aWFsaXplZCBhZnRlciBtaWdyYXRpb24gY29tcGxldGVzIHRvIGF2b2lkIGpzZG9tIGNyYXNoXG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBleHBvcnQvaW1wb3J0L3NoYXJlIG1vZHVsZXNcbiAgICB0aGlzLnBlcnNvbmFFeHBvcnRlciA9IG5ldyBQZXJzb25hRXhwb3J0ZXIodGhpcy5jdXJyZW50VXNlcik7XG4gICAgLy8gUGVyc29uYUltcG9ydGVyIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYWZ0ZXIgbWlncmF0aW9uIGNvbXBsZXRlc1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgc2VydmVyIHNldHVwXG4gICAgdGhpcy5zZXJ2ZXJTZXR1cCA9IG5ldyBTZXJ2ZXJTZXR1cCgpO1xuICAgIHRoaXMuc2VydmVyU2V0dXAuc2V0dXBTZXJ2ZXIodGhpcy5zZXJ2ZXIsIHRoaXMpO1xuICAgIFxuICAgIC8vIEZJWCAjNjEwOiBQb3J0Zm9saW8gaW5pdGlhbGl6YXRpb24gbW92ZWQgdG8gcnVuKCkgbWV0aG9kIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25cbiAgICAvLyBQcmV2aW91c2x5OiB0aGlzLmluaXRpYWxpemVQb3J0Zm9saW8oKS50aGVuKCkgcmFuIGFzeW5jIGluIGNvbnN0cnVjdG9yXG4gICAgLy8gTm93OiBJbml0aWFsaXphdGlvbiBoYXBwZW5zIHN5bmNocm9ub3VzbHkgaW4gcnVuKCkgYmVmb3JlIE1DUCBjb25uZWN0aW9uXG4gIH1cbiAgXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZVBvcnRmb2xpbygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBDaGVjayBpZiBtaWdyYXRpb24gaXMgbmVlZGVkXG4gICAgY29uc3QgbmVlZHNNaWdyYXRpb24gPSBhd2FpdCB0aGlzLm1pZ3JhdGlvbk1hbmFnZXIubmVlZHNNaWdyYXRpb24oKTtcbiAgICBcbiAgICBpZiAobmVlZHNNaWdyYXRpb24pIHtcbiAgICAgIGxvZ2dlci5pbmZvKCdMZWdhY3kgcGVyc29uYXMgZGV0ZWN0ZWQuIFN0YXJ0aW5nIG1pZ3JhdGlvbi4uLicpO1xuICAgICAgXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm1pZ3JhdGlvbk1hbmFnZXIubWlncmF0ZSh7IGJhY2t1cDogdHJ1ZSB9KTtcbiAgICAgIFxuICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBTdWNjZXNzZnVsbHkgbWlncmF0ZWQgJHtyZXN1bHQubWlncmF0ZWRDb3VudH0gcGVyc29uYXNgKTtcbiAgICAgICAgaWYgKHJlc3VsdC5iYWNrZWRVcCAmJiByZXN1bHQuYmFja3VwUGF0aCkge1xuICAgICAgICAgIGxvZ2dlci5pbmZvKGBCYWNrdXAgY3JlYXRlZCBhdDogJHtyZXN1bHQuYmFja3VwUGF0aH1gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdNaWdyYXRpb24gY29tcGxldGVkIHdpdGggZXJyb3JzOicpO1xuICAgICAgICByZXN1bHQuZXJyb3JzLmZvckVhY2goZXJyID0+IGxvZ2dlci5lcnJvcihgICAtICR7ZXJyfWApKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gRW5zdXJlIHBvcnRmb2xpbyBzdHJ1Y3R1cmUgZXhpc3RzXG4gICAgY29uc3QgcG9ydGZvbGlvRXhpc3RzID0gYXdhaXQgdGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmV4aXN0cygpO1xuICAgIGlmICghcG9ydGZvbGlvRXhpc3RzKSB7XG4gICAgICBsb2dnZXIuaW5mbygnQ3JlYXRpbmcgcG9ydGZvbGlvIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuLi4nKTtcbiAgICAgIGF3YWl0IHRoaXMucG9ydGZvbGlvTWFuYWdlci5pbml0aWFsaXplKCk7XG4gICAgfVxuICAgIFxuICAgIC8vIEluaXRpYWxpemUgY29sbGVjdGlvbiBjYWNoZSBmb3IgYW5vbnltb3VzIGFjY2Vzc1xuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZUNvbGxlY3Rpb25DYWNoZSgpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ29tcGxldGUgaW5pdGlhbGl6YXRpb24gYWZ0ZXIgcG9ydGZvbGlvIGlzIHJlYWR5XG4gICAqIEZJWCAjNjEwOiBUaGlzIHdhcyBwcmV2aW91c2x5IGluIGEgLnRoZW4oKSBjYWxsYmFjayBpbiB0aGUgY29uc3RydWN0b3JcbiAgICogTm93IGNhbGxlZCBzeW5jaHJvbm91c2x5IGZyb20gcnVuKCkgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjb21wbGV0ZUluaXRpYWxpemF0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIE5PVyBzYWZlIHRvIGFjY2VzcyBkaXJlY3RvcmllcyBhZnRlciBtaWdyYXRpb25cbiAgICB0aGlzLnBlcnNvbmFzRGlyID0gdGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuUEVSU09OQSk7XG4gICAgXG4gICAgLy8gTG9nIHJlc29sdmVkIHBhdGggZm9yIGRlYnVnZ2luZ1xuICAgIGxvZ2dlci5pbmZvKGBQZXJzb25hcyBkaXJlY3RvcnkgcmVzb2x2ZWQgdG86ICR7dGhpcy5wZXJzb25hc0Rpcn1gKTtcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIFBhdGhWYWxpZGF0b3Igd2l0aCB0aGUgcGVyc29uYXMgZGlyZWN0b3J5XG4gICAgUGF0aFZhbGlkYXRvci5pbml0aWFsaXplKHRoaXMucGVyc29uYXNEaXIpO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgdXBkYXRlIG1hbmFnZXIgd2l0aCBzYWZlIGRpcmVjdG9yeVxuICAgIFxuICAgIC8vIEluaXRpYWxpemUgaW1wb3J0IG1vZHVsZSB0aGF0IGRlcGVuZHMgb24gcGVyc29uYXNEaXJcbiAgICB0aGlzLnBlcnNvbmFJbXBvcnRlciA9IG5ldyBQZXJzb25hSW1wb3J0ZXIodGhpcy5wZXJzb25hc0RpciwgdGhpcy5jdXJyZW50VXNlcik7XG4gICAgXG4gICAgdGhpcy5sb2FkUGVyc29uYXMoKTtcbiAgICBcbiAgICAvLyBNYXJrIGluaXRpYWxpemF0aW9uIGFzIGNvbXBsZXRlXG4gICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEVuc3VyZSBzZXJ2ZXIgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIGFueSBvcGVyYXRpb25cbiAgICogRklYICM2MTA6IEFkZGVkIGZvciB0ZXN0IGNvbXBhdGliaWxpdHkgLSB0ZXN0cyBkb24ndCBjYWxsIHJ1bigpXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGVuc3VyZUluaXRpYWxpemVkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gSWYgaW5pdGlhbGl6YXRpb24gaXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2FpdCBmb3IgaXRcbiAgICBpZiAodGhpcy5pbml0aWFsaXphdGlvblByb21pc2UpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6YXRpb25Qcm9taXNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBTdGFydCBpbml0aWFsaXphdGlvblxuICAgIHRoaXMuaW5pdGlhbGl6YXRpb25Qcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVBvcnRmb2xpbygpO1xuICAgICAgICBhd2FpdCB0aGlzLmNvbXBsZXRlSW5pdGlhbGl6YXRpb24oKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oXCJQb3J0Zm9saW8gYW5kIHBlcnNvbmFzIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseSAobGF6eSlcIik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5lbnN1cmVJbml0aWFsaXplZCcsIGVycm9yKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgICBcbiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemF0aW9uUHJvbWlzZTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEluaXRpYWxpemUgY29sbGVjdGlvbiBjYWNoZSB3aXRoIHNlZWQgZGF0YSBmb3IgYW5vbnltb3VzIGJyb3dzaW5nXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGluaXRpYWxpemVDb2xsZWN0aW9uQ2FjaGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGlzQ2FjaGVWYWxpZCA9IGF3YWl0IHRoaXMuY29sbGVjdGlvbkNhY2hlLmlzQ2FjaGVWYWxpZCgpO1xuICAgICAgaWYgKCFpc0NhY2hlVmFsaWQpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ0luaXRpYWxpemluZyBjb2xsZWN0aW9uIGNhY2hlIHdpdGggc2VlZCBkYXRhLi4uJyk7XG4gICAgICAgIGNvbnN0IHsgQ29sbGVjdGlvblNlZWRlciB9ID0gYXdhaXQgaW1wb3J0KCcuL2NvbGxlY3Rpb24vQ29sbGVjdGlvblNlZWRlci5qcycpO1xuICAgICAgICBjb25zdCBzZWVkRGF0YSA9IENvbGxlY3Rpb25TZWVkZXIuZ2V0U2VlZERhdGEoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0aW9uQ2FjaGUuc2F2ZUNhY2hlKHNlZWREYXRhKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYENvbGxlY3Rpb24gY2FjaGUgaW5pdGlhbGl6ZWQgd2l0aCAke3NlZWREYXRhLmxlbmd0aH0gaXRlbXNgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uQ2FjaGUuZ2V0Q2FjaGVTdGF0cygpO1xuICAgICAgICBsb2dnZXIuZGVidWcoYENvbGxlY3Rpb24gY2FjaGUgYWxyZWFkeSB2YWxpZCB3aXRoICR7c3RhdHMuaXRlbUNvdW50fSBpdGVtc2ApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5pbml0aWFsaXplQ29sbGVjdGlvbkNhY2hlJywgZXJyb3IpO1xuICAgICAgLy8gRG9uJ3QgdGhyb3cgLSBjYWNoZSBmYWlsdXJlcyBzaG91bGRuJ3QgcHJldmVudCBzZXJ2ZXIgc3RhcnR1cFxuICAgIH1cbiAgfVxuXG4gIC8vIFRvb2wgaGFuZGxlciBtZXRob2RzIC0gbm93IHB1YmxpYyBmb3IgYWNjZXNzIGZyb20gdG9vbCBtb2R1bGVzXG4gIFxuICBwcml2YXRlIGdldFBlcnNvbmFJbmRpY2F0b3IoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuYWN0aXZlUGVyc29uYSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgY29uc3QgcGVyc29uYSA9IHRoaXMucGVyc29uYXMuZ2V0KHRoaXMuYWN0aXZlUGVyc29uYSk7XG4gICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybWF0SW5kaWNhdG9yKHRoaXMuaW5kaWNhdG9yQ29uZmlnLCB7XG4gICAgICBuYW1lOiBwZXJzb25hLm1ldGFkYXRhLm5hbWUsXG4gICAgICB2ZXJzaW9uOiBwZXJzb25hLm1ldGFkYXRhLnZlcnNpb24sXG4gICAgICBhdXRob3I6IHBlcnNvbmEubWV0YWRhdGEuYXV0aG9yLFxuICAgICAgY2F0ZWdvcnk6IHBlcnNvbmEubWV0YWRhdGEuY2F0ZWdvcnlcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpemUgZWxlbWVudCB0eXBlIHRvIGhhbmRsZSBib3RoIHNpbmd1bGFyIChuZXcpIGFuZCBwbHVyYWwgKGxlZ2FjeSkgZm9ybXNcbiAgICogVGhpcyBwcm92aWRlcyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGR1cmluZyB0aGUgdHJhbnNpdGlvbiB0byB2MS40LjBcbiAgICovXG4gIHByaXZhdGUgbm9ybWFsaXplRWxlbWVudFR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBNYXAgcGx1cmFsIGZvcm1zIHRvIHNpbmd1bGFyIEVsZW1lbnRUeXBlIHZhbHVlc1xuICAgIGNvbnN0IHBsdXJhbFRvU2luZ3VsYXJNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAncGVyc29uYXMnOiBFbGVtZW50VHlwZS5QRVJTT05BLFxuICAgICAgJ3NraWxscyc6IEVsZW1lbnRUeXBlLlNLSUxMLFxuICAgICAgJ3RlbXBsYXRlcyc6IEVsZW1lbnRUeXBlLlRFTVBMQVRFLFxuICAgICAgJ2FnZW50cyc6IEVsZW1lbnRUeXBlLkFHRU5ULFxuICAgICAgJ21lbW9yaWVzJzogRWxlbWVudFR5cGUuTUVNT1JZLFxuICAgICAgJ2Vuc2VtYmxlcyc6IEVsZW1lbnRUeXBlLkVOU0VNQkxFXG4gICAgfTtcbiAgICBcbiAgICAvLyBJZiBpdCdzIGFscmVhZHkgYSB2YWxpZCBFbGVtZW50VHlwZSB2YWx1ZSwgcmV0dXJuIGFzLWlzXG4gICAgaWYgKE9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmluY2x1ZGVzKHR5cGUgYXMgRWxlbWVudFR5cGUpKSB7XG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gICAgXG4gICAgLy8gSWYgaXQncyBhIHBsdXJhbCBmb3JtLCBjb252ZXJ0IHRvIHNpbmd1bGFyXG4gICAgaWYgKHBsdXJhbFRvU2luZ3VsYXJNYXBbdHlwZV0pIHtcbiAgICAgIC8vIExvZyBkZXByZWNhdGlvbiB3YXJuaW5nXG4gICAgICBsb2dnZXIud2FybihgVXNpbmcgcGx1cmFsIGVsZW1lbnQgdHlwZSAnJHt0eXBlfScgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBzaW5ndWxhciBmb3JtICcke3BsdXJhbFRvU2luZ3VsYXJNYXBbdHlwZV19JyBpbnN0ZWFkLmApO1xuICAgICAgcmV0dXJuIHBsdXJhbFRvU2luZ3VsYXJNYXBbdHlwZV07XG4gICAgfVxuICAgIFxuICAgIC8vIFVua25vd24gdHlwZSAtIHJldHVybiBhcy1pcyBhbmQgbGV0IHZhbGlkYXRpb24gaGFuZGxlIGl0XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhbiBlbGVtZW50IGJ5IG5hbWUsIHN1cHBvcnRpbmcgYm90aCBleGFjdCBkaXNwbGF5IG5hbWUgYW5kIGZpbGVuYW1lIChzbHVnKSBtYXRjaGluZ1xuICAgKiBUaGlzIHByb3ZpZGVzIGJldHRlciBVWCBieSBhbGxvd2luZyB1c2VycyB0byByZWZlcmVuY2UgZWxlbWVudHMgYnkgZWl0aGVyIGZvcm1hdFxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIHRvIHNlYXJjaCBmb3IgKGNhbiBiZSBkaXNwbGF5IG5hbWUgb3IgZmlsZW5hbWUgd2l0aG91dCBleHRlbnNpb24pXG4gICAqIEBwYXJhbSBlbGVtZW50TGlzdCAtIFRoZSBsaXN0IG9mIGVsZW1lbnRzIHRvIHNlYXJjaCB0aHJvdWdoXG4gICAqIEByZXR1cm5zIFRoZSBmb3VuZCBlbGVtZW50IG9yIHVuZGVmaW5lZFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBmaW5kRWxlbWVudEZsZXhpYmx5KG5hbWU6IHN0cmluZywgZWxlbWVudExpc3Q6IGFueVtdKTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAoIW5hbWUgfHwgIWVsZW1lbnRMaXN0IHx8IGVsZW1lbnRMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgXG4gICAgLy8gTm9ybWFsaXplIHRoZSBzZWFyY2ggbmFtZSBmb3IgY29tcGFyaXNvblxuICAgIGNvbnN0IHNlYXJjaE5hbWVMb3dlciA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBzZWFyY2hOYW1lU2x1ZyA9IHNsdWdpZnkobmFtZSk7XG4gICAgXG4gICAgLy8gRmlyc3QgdHJ5IGV4YWN0IG5hbWUgbWF0Y2ggKGNhc2UtaW5zZW5zaXRpdmUpXG4gICAgbGV0IGVsZW1lbnQgPSBlbGVtZW50TGlzdC5maW5kKGUgPT4gXG4gICAgICBlLm1ldGFkYXRhPy5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSBzZWFyY2hOYW1lTG93ZXJcbiAgICApO1xuICAgIFxuICAgIC8vIElmIG5vdCBmb3VuZCwgdHJ5IHNsdWcgbWF0Y2ggKGZpbGVuYW1lIHdpdGhvdXQgZXh0ZW5zaW9uKVxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgZWxlbWVudCA9IGVsZW1lbnRMaXN0LmZpbmQoZSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRTbHVnID0gc2x1Z2lmeShlLm1ldGFkYXRhPy5uYW1lIHx8ICcnKTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRTbHVnID09PSBzZWFyY2hOYW1lU2x1ZyB8fCBlbGVtZW50U2x1ZyA9PT0gc2VhcmNoTmFtZUxvd2VyO1xuICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIC8vIElmIHN0aWxsIG5vdCBmb3VuZCwgdHJ5IHBhcnRpYWwgbWF0Y2ggb24gZmlsZW5hbWVcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBlbGVtZW50TGlzdC5maW5kKGUgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50TmFtZSA9IGUubWV0YWRhdGE/Lm5hbWUgfHwgJyc7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRTbHVnID0gc2x1Z2lmeShlbGVtZW50TmFtZSk7XG4gICAgICAgIHJldHVybiBlbGVtZW50U2x1Zy5pbmNsdWRlcyhzZWFyY2hOYW1lU2x1ZykgfHwgXG4gICAgICAgICAgICAgICBlbGVtZW50TmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaE5hbWVMb3dlcik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgc2x1ZyBmb3JtYXQgKGxvd2VyY2FzZSB3aXRoIGh5cGhlbnMpXG4gICAqIE1hdGNoZXMgdGhlIGZvcm1hdCB1c2VkIGZvciBlbGVtZW50IGZpbGVuYW1lc1xuICAgKi9cbiAgXG4gIC8qKlxuICAgKiBTYW5pdGl6ZSBtZXRhZGF0YSBvYmplY3QgdG8gcHJldmVudCBwcm90b3R5cGUgcG9sbHV0aW9uXG4gICAqIFJlbW92ZXMgYW55IGRhbmdlcm91cyBwcm9wZXJ0aWVzIHRoYXQgY291bGQgYWZmZWN0IE9iamVjdC5wcm90b3R5cGVcbiAgICovXG4gIHByaXZhdGUgc2FuaXRpemVNZXRhZGF0YShtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55Pik6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGlmICghbWV0YWRhdGEgfHwgdHlwZW9mIG1ldGFkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBkYW5nZXJvdXNQcm9wZXJ0aWVzID0gWydfX3Byb3RvX18nLCAnY29uc3RydWN0b3InLCAncHJvdG90eXBlJ107XG4gICAgY29uc3Qgc2FuaXRpemVkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobWV0YWRhdGEpKSB7XG4gICAgICBpZiAoIWRhbmdlcm91c1Byb3BlcnRpZXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBzYW5pdGl6ZSBuZXN0ZWQgb2JqZWN0c1xuICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICBzYW5pdGl6ZWRba2V5XSA9IHRoaXMuc2FuaXRpemVNZXRhZGF0YSh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2FuaXRpemVkW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4gc2FuaXRpemVkO1xuICB9XG5cblxuICBwcml2YXRlIGFzeW5jIGxvYWRQZXJzb25hcygpIHtcbiAgICAvLyBWYWxpZGF0ZSB0aGUgcGVyc29uYXMgZGlyZWN0b3J5IHBhdGhcbiAgICAvLyBwZXJzb25hc0RpciBpcyBndWFyYW50ZWVkIHRvIGJlIHNldCBieSBjb21wbGV0ZUluaXRpYWxpemF0aW9uIGJlZm9yZSB0aGlzIGlzIGNhbGxlZFxuICAgIGlmICghcGF0aC5pc0Fic29sdXRlKHRoaXMucGVyc29uYXNEaXIhKSkge1xuICAgICAgbG9nZ2VyLndhcm4oYFBlcnNvbmFzIGRpcmVjdG9yeSBwYXRoIGlzIG5vdCBhYnNvbHV0ZTogJHt0aGlzLnBlcnNvbmFzRGlyfWApO1xuICAgIH1cbiAgICBcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMuYWNjZXNzKHRoaXMucGVyc29uYXNEaXIhKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gQ3JlYXRlIHBlcnNvbmFzIGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy5ta2Rpcih0aGlzLnBlcnNvbmFzRGlyISwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBDcmVhdGVkIHBlcnNvbmFzIGRpcmVjdG9yeSBhdDogJHt0aGlzLnBlcnNvbmFzRGlyfWApO1xuICAgICAgICAvLyBDb250aW51ZSB0byB0cnkgbG9hZGluZyAoZGlyZWN0b3J5IHdpbGwgYmUgZW1wdHkpXG4gICAgICB9IGNhdGNoIChta2RpckVycm9yKSB7XG4gICAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLmxvYWRQZXJzb25hcy5ta2RpcicsIG1rZGlyRXJyb3IsIHsgcGVyc29uYXNEaXI6IHRoaXMucGVyc29uYXNEaXIgfSk7XG4gICAgICAgIC8vIERvbid0IHRocm93IC0gZW1wdHkgcG9ydGZvbGlvIGlzIHZhbGlkXG4gICAgICAgIHRoaXMucGVyc29uYXMuY2xlYXIoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBwZXJzb25hc0RpciBpcyBndWFyYW50ZWVkIHRvIGJlIHNldCBieSBjb21wbGV0ZUluaXRpYWxpemF0aW9uIGJlZm9yZSB0aGlzIGlzIGNhbGxlZFxuICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKHRoaXMucGVyc29uYXNEaXIhKTtcbiAgICAgIGNvbnN0IG1hcmtkb3duRmlsZXMgPSBmaWxlc1xuICAgICAgICAuZmlsdGVyKGZpbGUgPT4gZmlsZS5lbmRzV2l0aCgnLm1kJykpXG4gICAgICAgIC5maWx0ZXIoZmlsZSA9PiAhdGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmlzVGVzdEVsZW1lbnQoZmlsZSkpO1xuXG4gICAgICB0aGlzLnBlcnNvbmFzLmNsZWFyKCk7XG4gICAgICBcbiAgICAgIGlmIChtYXJrZG93bkZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBsb2dnZXIuaW5mbygnW0RvbGxob3VzZU1DUF0gTm8gcGVyc29uYXMgZm91bmQgaW4gcG9ydGZvbGlvLiBVc2UgYnJvd3NlX2NvbGxlY3Rpb24gdG8gaW5zdGFsbCBzb21lIScpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgbWFya2Rvd25GaWxlcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIhLCBmaWxlKTtcbiAgICAgICAgICBjb25zdCBmaWxlQ29udGVudCA9IGF3YWl0IFBhdGhWYWxpZGF0b3Iuc2FmZVJlYWRGaWxlKGZpbGVQYXRoKTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBVc2Ugc2VjdXJlIFlBTUwgcGFyc2VyXG4gICAgICAgICAgbGV0IHBhcnNlZDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcGFyc2VkID0gU2VjdXJlWWFtbFBhcnNlci5zYWZlTWF0dGVyKGZpbGVDb250ZW50KTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2VjdXJpdHlFcnJvcikge1xuICAgICAgICAgICAgICBsb2dnZXIud2FybihgU2VjdXJpdHkgdGhyZWF0IGRldGVjdGVkIGluIHBlcnNvbmEgJHtmaWxlfTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHBhcnNlZC5kYXRhIGFzIFBlcnNvbmFNZXRhZGF0YTtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gcGFyc2VkLmNvbnRlbnQ7XG5cbiAgICAgICAgICBpZiAoIW1ldGFkYXRhLm5hbWUpIHtcbiAgICAgICAgICAgIG1ldGFkYXRhLm5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGUsICcubWQnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBHZW5lcmF0ZSB1bmlxdWUgSUQgaWYgbm90IHByZXNlbnRcbiAgICAgICAgICBsZXQgdW5pcXVlSWQgPSBtZXRhZGF0YS51bmlxdWVfaWQ7XG4gICAgICAgICAgaWYgKCF1bmlxdWVJZCkge1xuICAgICAgICAgICAgY29uc3QgYXV0aG9yRm9ySWQgPSBtZXRhZGF0YS5hdXRob3IgfHwgdGhpcy5nZXRDdXJyZW50VXNlckZvckF0dHJpYnV0aW9uKCk7XG4gICAgICAgICAgICB1bmlxdWVJZCA9IGdlbmVyYXRlVW5pcXVlSWQobWV0YWRhdGEubmFtZSwgYXV0aG9yRm9ySWQpO1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBHZW5lcmF0ZWQgdW5pcXVlIElEIGZvciAke21ldGFkYXRhLm5hbWV9OiAke3VuaXF1ZUlkfWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgbmV3IG1ldGFkYXRhIGZpZWxkc1xuICAgICAgICAgIGlmICghbWV0YWRhdGEuY2F0ZWdvcnkpIG1ldGFkYXRhLmNhdGVnb3J5ID0gJ2dlbmVyYWwnO1xuICAgICAgICAgIGlmICghbWV0YWRhdGEuYWdlX3JhdGluZykgbWV0YWRhdGEuYWdlX3JhdGluZyA9ICdhbGwnO1xuICAgICAgICAgIGlmICghbWV0YWRhdGEuY29udGVudF9mbGFncykgbWV0YWRhdGEuY29udGVudF9mbGFncyA9IFtdO1xuICAgICAgICAgIGlmIChtZXRhZGF0YS5haV9nZW5lcmF0ZWQgPT09IHVuZGVmaW5lZCkgbWV0YWRhdGEuYWlfZ2VuZXJhdGVkID0gZmFsc2U7XG4gICAgICAgICAgaWYgKCFtZXRhZGF0YS5nZW5lcmF0aW9uX21ldGhvZCkgbWV0YWRhdGEuZ2VuZXJhdGlvbl9tZXRob2QgPSAnaHVtYW4nO1xuICAgICAgICAgIGlmICghbWV0YWRhdGEucHJpY2UpIG1ldGFkYXRhLnByaWNlID0gJ2ZyZWUnO1xuICAgICAgICAgIGlmICghbWV0YWRhdGEubGljZW5zZSkgbWV0YWRhdGEubGljZW5zZSA9ICdDQy1CWS1TQS00LjAnO1xuXG4gICAgICAgICAgY29uc3QgcGVyc29uYTogUGVyc29uYSA9IHtcbiAgICAgICAgICAgIG1ldGFkYXRhLFxuICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgIGZpbGVuYW1lOiBmaWxlLFxuICAgICAgICAgICAgdW5pcXVlX2lkOiB1bmlxdWVJZCxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgdGhpcy5wZXJzb25hcy5zZXQoZmlsZSwgcGVyc29uYSk7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKGBMb2FkZWQgcGVyc29uYTogJHttZXRhZGF0YS5uYW1lfSAoJHt1bmlxdWVJZH1gKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5sb2FkUGVyc29uYXMubG9hZEZpbGUnLCBlcnJvciwgeyBmaWxlIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBFTk9FTlQgZ3JhY2VmdWxseSAtIGRpcmVjdG9yeSBtaWdodCBub3QgZXhpc3QgeWV0XG4gICAgICBpZiAoKGVycm9yIGFzIGFueSkuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1tEb2xsaG91c2VNQ1BdIFBlcnNvbmFzIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCB5ZXQgLSBwb3J0Zm9saW8gaXMgZW1wdHknKTtcbiAgICAgICAgdGhpcy5wZXJzb25hcy5jbGVhcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5sb2FkUGVyc29uYXMnLCBlcnJvcik7XG4gICAgICB0aGlzLnBlcnNvbmFzLmNsZWFyKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbGlzdFBlcnNvbmFzKCkge1xuICAgIGNvbnN0IHBlcnNvbmFMaXN0ID0gQXJyYXkuZnJvbSh0aGlzLnBlcnNvbmFzLnZhbHVlcygpKS5tYXAocGVyc29uYSA9PiAoe1xuICAgICAgZmlsZW5hbWU6IHBlcnNvbmEuZmlsZW5hbWUsXG4gICAgICB1bmlxdWVfaWQ6IHBlcnNvbmEudW5pcXVlX2lkLFxuICAgICAgbmFtZTogcGVyc29uYS5tZXRhZGF0YS5uYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHBlcnNvbmEubWV0YWRhdGEuZGVzY3JpcHRpb24sXG4gICAgICB0cmlnZ2VyczogcGVyc29uYS5tZXRhZGF0YS50cmlnZ2VycyB8fCBbXSxcbiAgICAgIHZlcnNpb246IHBlcnNvbmEubWV0YWRhdGEudmVyc2lvbiB8fCBcIjEuMFwiLFxuICAgICAgYXV0aG9yOiBwZXJzb25hLm1ldGFkYXRhLmF1dGhvciB8fCBcIlVua25vd25cIixcbiAgICAgIGNhdGVnb3J5OiBwZXJzb25hLm1ldGFkYXRhLmNhdGVnb3J5IHx8ICdnZW5lcmFsJyxcbiAgICAgIGFnZV9yYXRpbmc6IHBlcnNvbmEubWV0YWRhdGEuYWdlX3JhdGluZyB8fCAnYWxsJyxcbiAgICAgIHByaWNlOiBwZXJzb25hLm1ldGFkYXRhLnByaWNlIHx8ICdmcmVlJyxcbiAgICAgIGFpX2dlbmVyYXRlZDogcGVyc29uYS5tZXRhZGF0YS5haV9nZW5lcmF0ZWQgfHwgZmFsc2UsXG4gICAgICBhY3RpdmU6IHRoaXMuYWN0aXZlUGVyc29uYSA9PT0gcGVyc29uYS5maWxlbmFtZSxcbiAgICB9KSk7XG5cbiAgICBpZiAocGVyc29uYUxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX1Zb3UgZG9uJ3QgaGF2ZSBhbnkgcGVyc29uYXMgaW5zdGFsbGVkIHlldC4gV291bGQgeW91IGxpa2UgdG8gYnJvd3NlIHRoZSBEb2xsaG91c2VNQ1AgY29sbGVjdGlvbiBvbiBHaXRIdWIgdG8gc2VlIHdoYXQncyBhdmFpbGFibGU/IEkgY2FuIHNob3cgeW91IHBlcnNvbmFzIGZvciBjcmVhdGl2ZSB3cml0aW5nLCB0ZWNobmljYWwgYW5hbHlzaXMsIGFuZCBtb3JlLiBKdXN0IHNheSBcInllc1wiIG9yIHVzZSAnYnJvd3NlX2NvbGxlY3Rpb24nLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfUF2YWlsYWJsZSBQZXJzb25hcyAoJHtwZXJzb25hTGlzdC5sZW5ndGh9KTpcXG5cXG5gICtcbiAgICAgICAgICAgIHBlcnNvbmFMaXN0Lm1hcChwID0+IFxuICAgICAgICAgICAgICBgJHtwLmFjdGl2ZSA/ICfwn5S5ICcgOiAn4par77iPICd9Kioke3AubmFtZX0qKiAoJHtwLnVuaXF1ZV9pZH0pXFxuYCArXG4gICAgICAgICAgICAgIGAgICAke3AuZGVzY3JpcHRpb259XFxuYCArXG4gICAgICAgICAgICAgIGAgICDwn5OBICR7cC5jYXRlZ29yeX0gfCDwn46tICR7cC5hdXRob3J9IHwg8J+UliAke3AucHJpY2V9IHwgJHtwLmFpX2dlbmVyYXRlZCA/ICfwn6SWIEFJJyA6ICfwn5GkIEh1bWFuJ31cXG5gICtcbiAgICAgICAgICAgICAgYCAgIEFnZTogJHtwLmFnZV9yYXRpbmd9IHwgVmVyc2lvbjogJHtwLnZlcnNpb259XFxuYCArXG4gICAgICAgICAgICAgIGAgICBUcmlnZ2VyczogJHtwLnRyaWdnZXJzLmpvaW4oJywgJykgfHwgJ05vbmUnfVxcbmBcbiAgICAgICAgICAgICkuam9pbignXFxuJyksXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBhY3RpdmF0ZVBlcnNvbmEocGVyc29uYUlkZW50aWZpZXI6IHN0cmluZykge1xuICAgIC8vIEVuaGFuY2VkIGlucHV0IHZhbGlkYXRpb24gZm9yIHBlcnNvbmEgaWRlbnRpZmllclxuICAgIGNvbnN0IHZhbGlkYXRlZElkZW50aWZpZXIgPSBNQ1BJbnB1dFZhbGlkYXRvci52YWxpZGF0ZVBlcnNvbmFJZGVudGlmaWVyKHBlcnNvbmFJZGVudGlmaWVyKTtcbiAgICBcbiAgICAvLyBUcnkgdG8gZmluZCBwZXJzb25hIGJ5IGZpbGVuYW1lIGZpcnN0LCB0aGVuIGJ5IG5hbWVcbiAgICBsZXQgcGVyc29uYSA9IHRoaXMucGVyc29uYXMuZ2V0KHZhbGlkYXRlZElkZW50aWZpZXIpO1xuICAgIFxuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgLy8gU2VhcmNoIGJ5IG5hbWVcbiAgICAgIHBlcnNvbmEgPSBBcnJheS5mcm9tKHRoaXMucGVyc29uYXMudmFsdWVzKCkpLmZpbmQocCA9PiBcbiAgICAgICAgcC5tZXRhZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IHZhbGlkYXRlZElkZW50aWZpZXIudG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgIHRocm93IG5ldyBNY3BFcnJvcihcbiAgICAgICAgRXJyb3JDb2RlLkludmFsaWRQYXJhbXMsXG4gICAgICAgIGBQZXJzb25hIG5vdCBmb3VuZDogJHtwZXJzb25hSWRlbnRpZmllcn1gXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aXZlUGVyc29uYSA9IHBlcnNvbmEuZmlsZW5hbWU7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl9UGVyc29uYSBBY3RpdmF0ZWQ6ICoqJHtwZXJzb25hLm1ldGFkYXRhLm5hbWV9KipcXG5cXG5gICtcbiAgICAgICAgICAgIGAke3BlcnNvbmEubWV0YWRhdGEuZGVzY3JpcHRpb259XFxuXFxuYCArXG4gICAgICAgICAgICBgKipJbnN0cnVjdGlvbnM6KipcXG4ke3BlcnNvbmEuY29udGVudH1gLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZ2V0QWN0aXZlUGVyc29uYSgpIHtcbiAgICBpZiAoIXRoaXMuYWN0aXZlUGVyc29uYSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl9Tm8gcGVyc29uYSBpcyBjdXJyZW50bHkgYWN0aXZlLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgcGVyc29uYSA9IHRoaXMucGVyc29uYXMuZ2V0KHRoaXMuYWN0aXZlUGVyc29uYSk7XG4gICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICB0aGlzLmFjdGl2ZVBlcnNvbmEgPSBudWxsO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl9QWN0aXZlIHBlcnNvbmEgbm90IGZvdW5kLiBEZWFjdGl2YXRlZC5gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX1BY3RpdmUgUGVyc29uYTogKioke3BlcnNvbmEubWV0YWRhdGEubmFtZX0qKlxcblxcbmAgK1xuICAgICAgICAgICAgYCR7cGVyc29uYS5tZXRhZGF0YS5kZXNjcmlwdGlvbn1cXG5cXG5gICtcbiAgICAgICAgICAgIGBGaWxlOiAke3BlcnNvbmEuZmlsZW5hbWV9XFxuYCArXG4gICAgICAgICAgICBgVmVyc2lvbjogJHtwZXJzb25hLm1ldGFkYXRhLnZlcnNpb24gfHwgJzEuMCd9XFxuYCArXG4gICAgICAgICAgICBgQXV0aG9yOiAke3BlcnNvbmEubWV0YWRhdGEuYXV0aG9yIHx8ICdVbmtub3duJ31gLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVhY3RpdmF0ZVBlcnNvbmEoKSB7XG4gICAgY29uc3Qgd2FzQWN0aXZlID0gdGhpcy5hY3RpdmVQZXJzb25hICE9PSBudWxsO1xuICAgIGNvbnN0IGluZGljYXRvciA9IHRoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpO1xuICAgIHRoaXMuYWN0aXZlUGVyc29uYSA9IG51bGw7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogd2FzQWN0aXZlIFxuICAgICAgICAgICAgPyBgJHtpbmRpY2F0b3J94pyFIFBlcnNvbmEgZGVhY3RpdmF0ZWQuIEJhY2sgdG8gZGVmYXVsdCBtb2RlLmBcbiAgICAgICAgICAgIDogXCJObyBwZXJzb25hIHdhcyBhY3RpdmUuXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBnZXRQZXJzb25hRGV0YWlscyhwZXJzb25hSWRlbnRpZmllcjogc3RyaW5nKSB7XG4gICAgLy8gVHJ5IHRvIGZpbmQgcGVyc29uYSBieSBmaWxlbmFtZSBmaXJzdCwgdGhlbiBieSBuYW1lXG4gICAgbGV0IHBlcnNvbmEgPSB0aGlzLnBlcnNvbmFzLmdldChwZXJzb25hSWRlbnRpZmllcik7XG4gICAgXG4gICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICAvLyBTZWFyY2ggYnkgbmFtZVxuICAgICAgcGVyc29uYSA9IEFycmF5LmZyb20odGhpcy5wZXJzb25hcy52YWx1ZXMoKSkuZmluZChwID0+IFxuICAgICAgICBwLm1ldGFkYXRhLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gcGVyc29uYUlkZW50aWZpZXIudG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgIHRocm93IG5ldyBNY3BFcnJvcihcbiAgICAgICAgRXJyb3JDb2RlLkludmFsaWRQYXJhbXMsXG4gICAgICAgIGBQZXJzb25hIG5vdCBmb3VuZDogJHtwZXJzb25hSWRlbnRpZmllcn1gXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5OLICoqJHtwZXJzb25hLm1ldGFkYXRhLm5hbWV9KiogRGV0YWlsc1xcblxcbmAgK1xuICAgICAgICAgICAgYCoqRGVzY3JpcHRpb246KiogJHtwZXJzb25hLm1ldGFkYXRhLmRlc2NyaXB0aW9ufVxcbmAgK1xuICAgICAgICAgICAgYCoqRmlsZToqKiAke3BlcnNvbmEuZmlsZW5hbWV9XFxuYCArXG4gICAgICAgICAgICBgKipWZXJzaW9uOioqICR7cGVyc29uYS5tZXRhZGF0YS52ZXJzaW9uIHx8ICcxLjAnfVxcbmAgK1xuICAgICAgICAgICAgYCoqQXV0aG9yOioqICR7cGVyc29uYS5tZXRhZGF0YS5hdXRob3IgfHwgJ1Vua25vd24nfVxcbmAgK1xuICAgICAgICAgICAgYCoqVHJpZ2dlcnM6KiogJHtwZXJzb25hLm1ldGFkYXRhLnRyaWdnZXJzPy5qb2luKCcsICcpIHx8ICdOb25lJ31cXG5cXG5gICtcbiAgICAgICAgICAgIGAqKkZ1bGwgQ29udGVudDoqKlxcblxcYFxcYFxcYFxcbiR7cGVyc29uYS5jb250ZW50fVxcblxcYFxcYFxcYGAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBhc3luYyByZWxvYWRQZXJzb25hcygpIHtcbiAgICBhd2FpdCB0aGlzLmxvYWRQZXJzb25hcygpO1xuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5SEIFJlbG9hZGVkICR7dGhpcy5wZXJzb25hcy5zaXplfSBwZXJzb25hcyBmcm9tICR7dGhpcy5wZXJzb25hc0Rpcn1gLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgLy8gPT09PT0gRWxlbWVudCBNZXRob2RzIChHZW5lcmljIGZvciBhbGwgZWxlbWVudCB0eXBlcykgPT09PT1cbiAgXG4gIGFzeW5jIGxpc3RFbGVtZW50cyh0eXBlOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gTm9ybWFsaXplIHRoZSB0eXBlIHRvIGhhbmRsZSBib3RoIHBsdXJhbCBhbmQgc2luZ3VsYXIgZm9ybXNcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcbiAgICAgIFxuICAgICAgc3dpdGNoIChub3JtYWxpemVkVHlwZSkge1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlBFUlNPTkE6XG4gICAgICAgICAgcmV0dXJuIHRoaXMubGlzdFBlcnNvbmFzKCk7XG4gICAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuU0tJTEw6IHtcbiAgICAgICAgICBjb25zdCBza2lsbHMgPSBhd2FpdCB0aGlzLnNraWxsTWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgaWYgKHNraWxscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogXCJObyBza2lsbHMgYXJlIGN1cnJlbnRseSBpbnN0YWxsZWQuIFRoZSBEb2xsaG91c2VNQ1AgY29sbGVjdGlvbiBoYXMgc2tpbGxzIGZvciBjb2RlIHJldmlldywgZGF0YSBhbmFseXNpcywgY3JlYXRpdmUgd3JpdGluZyBhbmQgbW9yZS4gV291bGQgeW91IGxpa2UgbWUgdG8gc2hvdyB5b3Ugd2hhdCdzIGF2YWlsYWJsZT8gSnVzdCBzYXkgXFxcInllc1xcXCIgb3IgSSBjYW4gaGVscCB5b3UgY3JlYXRlIGEgY3VzdG9tIHNraWxsLlwiXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBza2lsbExpc3QgPSBza2lsbHMubWFwKHNraWxsID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBsZXhpdHkgPSBza2lsbC5tZXRhZGF0YS5jb21wbGV4aXR5IHx8ICdiZWdpbm5lcic7XG4gICAgICAgICAgICBjb25zdCBkb21haW5zID0gc2tpbGwubWV0YWRhdGEuZG9tYWlucz8uam9pbignLCAnKSB8fCAnZ2VuZXJhbCc7XG4gICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gc2tpbGwudmVyc2lvbiB8fCBza2lsbC5tZXRhZGF0YS52ZXJzaW9uIHx8ICcxLjAuMCc7XG4gICAgICAgICAgICByZXR1cm4gYPCfm6DvuI8gJHtza2lsbC5tZXRhZGF0YS5uYW1lfSAodiR7dmVyc2lvbn0pIC0gJHtza2lsbC5tZXRhZGF0YS5kZXNjcmlwdGlvbn1cXG4gICBDb21wbGV4aXR5OiAke2NvbXBsZXhpdHl9IHwgRG9tYWluczogJHtkb21haW5zfWA7XG4gICAgICAgICAgfSkuam9pbignXFxuXFxuJyk7XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg8J+TmiBBdmFpbGFibGUgU2tpbGxzOlxcblxcbiR7c2tpbGxMaXN0fWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURToge1xuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlcyA9IGF3YWl0IHRoaXMudGVtcGxhdGVNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICBpZiAodGVtcGxhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIllvdSBoYXZlbid0IGluc3RhbGxlZCBhbnkgdGVtcGxhdGVzIHlldC4gV291bGQgeW91IGxpa2UgdG8gc2VlIGF2YWlsYWJsZSB0ZW1wbGF0ZXMgZm9yIGVtYWlscywgcmVwb3J0cywgYW5kIGRvY3VtZW50YXRpb24/IEkgY2FuIHNob3cgeW91IGV4YW1wbGVzIGZyb20gdGhlIGNvbGxlY3Rpb24gb3IgaGVscCB5b3UgY3JlYXRlIHlvdXIgb3duLiBXaGF0IHdvdWxkIHlvdSBwcmVmZXI/XCJcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlTGlzdCA9IHRlbXBsYXRlcy5tYXAodGVtcGxhdGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFyaWFibGVzID0gdGVtcGxhdGUubWV0YWRhdGEudmFyaWFibGVzPy5tYXAodiA9PiB2Lm5hbWUpLmpvaW4oJywgJykgfHwgJ25vbmUnO1xuICAgICAgICAgICAgY29uc3QgdmVyc2lvbiA9IHRlbXBsYXRlLnZlcnNpb24gfHwgdGVtcGxhdGUubWV0YWRhdGEudmVyc2lvbiB8fCAnMS4wLjAnO1xuICAgICAgICAgICAgcmV0dXJuIGDwn5OEICR7dGVtcGxhdGUubWV0YWRhdGEubmFtZX0gKHYke3ZlcnNpb259KSAtICR7dGVtcGxhdGUubWV0YWRhdGEuZGVzY3JpcHRpb259XFxuICAgVmFyaWFibGVzOiAke3ZhcmlhYmxlc31gO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcblxcbicpO1xuICAgICAgICAgIFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYPCfk50gQXZhaWxhYmxlIFRlbXBsYXRlczpcXG5cXG4ke3RlbXBsYXRlTGlzdH1gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6IHtcbiAgICAgICAgICBjb25zdCBhZ2VudHMgPSBhd2FpdCB0aGlzLmFnZW50TWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgaWYgKGFnZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogXCJObyBhZ2VudHMgaW5zdGFsbGVkIHlldC4gQWdlbnRzIGFyZSBhdXRvbm9tb3VzIGhlbHBlcnMgdGhhdCBjYW4gd29yayBvbiB0YXNrcyBpbmRlcGVuZGVudGx5LiBUaGUgRG9sbGhvdXNlTUNQIGNvbGxlY3Rpb24gaW5jbHVkZXMgdGFzayBtYW5hZ2VycywgcmVzZWFyY2ggYXNzaXN0YW50cywgYW5kIG1vcmUuIFdvdWxkIHlvdSBsaWtlIHRvIGJyb3dzZSBhdmFpbGFibGUgYWdlbnRzIG9yIGxlYXJuIGhvdyB0byBjcmVhdGUgeW91ciBvd24/XCJcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IGFnZW50TGlzdCA9IGFnZW50cy5tYXAoYWdlbnQgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3BlY2lhbGl6YXRpb25zID0gKGFnZW50Lm1ldGFkYXRhIGFzIGFueSkuc3BlY2lhbGl6YXRpb25zPy5qb2luKCcsICcpIHx8ICdnZW5lcmFsJztcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IGFnZW50LmdldFN0YXR1cygpO1xuICAgICAgICAgICAgY29uc3QgdmVyc2lvbiA9IGFnZW50LnZlcnNpb24gfHwgYWdlbnQubWV0YWRhdGEudmVyc2lvbiB8fCAnMS4wLjAnO1xuICAgICAgICAgICAgcmV0dXJuIGDwn6SWICR7YWdlbnQubWV0YWRhdGEubmFtZX0gKHYke3ZlcnNpb259KSAtICR7YWdlbnQubWV0YWRhdGEuZGVzY3JpcHRpb259XFxuICAgU3RhdHVzOiAke3N0YXR1c30gfCBTcGVjaWFsaXphdGlvbnM6ICR7c3BlY2lhbGl6YXRpb25zfWA7XG4gICAgICAgICAgfSkuam9pbignXFxuXFxuJyk7XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg8J+kliBBdmFpbGFibGUgQWdlbnRzOlxcblxcbiR7YWdlbnRMaXN0fWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinYwgVW5rbm93biBlbGVtZW50IHR5cGUgJyR7dHlwZX0nLiBBdmFpbGFibGUgdHlwZXM6ICR7T2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSkuam9pbignLCAnKX0gKG9yIGxlZ2FjeSBwbHVyYWwgZm9ybXM6IHBlcnNvbmFzLCBza2lsbHMsIHRlbXBsYXRlcywgYWdlbnRzKWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIuaGFuZGxlTGlzdEVsZW1lbnRzJywgZXJyb3IsIHsgdHlwZSB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gbGlzdCAke3R5cGV9OiAke0Vycm9ySGFuZGxlci5nZXRVc2VyTWVzc2FnZShlcnJvcil9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIGFjdGl2YXRlRWxlbWVudChuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAvLyBOb3JtYWxpemUgdGhlIHR5cGUgdG8gaGFuZGxlIGJvdGggcGx1cmFsIGFuZCBzaW5ndWxhciBmb3Jtc1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGUpO1xuICAgICAgXG4gICAgICBzd2l0Y2ggKG5vcm1hbGl6ZWRUeXBlKSB7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuUEVSU09OQTpcbiAgICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmF0ZVBlcnNvbmEobmFtZSk7XG4gICAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuU0tJTEw6IHtcbiAgICAgICAgICAvLyBVc2UgZmxleGlibGUgZmluZGluZyB0byBzdXBwb3J0IGJvdGggZGlzcGxheSBuYW1lIGFuZCBmaWxlbmFtZVxuICAgICAgICAgIGNvbnN0IGFsbFNraWxscyA9IGF3YWl0IHRoaXMuc2tpbGxNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICBjb25zdCBza2lsbCA9IGF3YWl0IHRoaXMuZmluZEVsZW1lbnRGbGV4aWJseShuYW1lLCBhbGxTa2lsbHMpO1xuICAgICAgICAgIGlmICghc2tpbGwpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogYOKdjCBTa2lsbCAnJHtuYW1lfScgbm90IGZvdW5kYFxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQWN0aXZhdGUgdGhlIHNraWxsXG4gICAgICAgICAgYXdhaXQgc2tpbGwuYWN0aXZhdGU/LigpO1xuICAgICAgICAgIFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IGDinIUgU2tpbGwgJyR7bmFtZX0nIGFjdGl2YXRlZFxcblxcbiR7c2tpbGwuaW5zdHJ1Y3Rpb25zfWBcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlRFTVBMQVRFOiB7XG4gICAgICAgICAgLy8gVXNlIGZsZXhpYmxlIGZpbmRpbmcgdG8gc3VwcG9ydCBib3RoIGRpc3BsYXkgbmFtZSBhbmQgZmlsZW5hbWVcbiAgICAgICAgICBjb25zdCBhbGxUZW1wbGF0ZXMgPSBhd2FpdCB0aGlzLnRlbXBsYXRlTWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBhd2FpdCB0aGlzLmZpbmRFbGVtZW50RmxleGlibHkobmFtZSwgYWxsVGVtcGxhdGVzKTtcbiAgICAgICAgICBpZiAoIXRlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IGDinYwgVGVtcGxhdGUgJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IHRlbXBsYXRlLm1ldGFkYXRhLnZhcmlhYmxlcz8ubWFwKCh2OiBhbnkpID0+IHYubmFtZSkuam9pbignLCAnKSB8fCAnbm9uZSc7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4pyFIFRlbXBsYXRlICcke25hbWV9JyByZWFkeSB0byB1c2VcXG5WYXJpYWJsZXM6ICR7dmFyaWFibGVzfVxcblxcblVzZSAncmVuZGVyX3RlbXBsYXRlJyB0byBnZW5lcmF0ZSBjb250ZW50IHdpdGggdGhpcyB0ZW1wbGF0ZS5gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6IHtcbiAgICAgICAgICAvLyBVc2UgZmxleGlibGUgZmluZGluZyB0byBzdXBwb3J0IGJvdGggZGlzcGxheSBuYW1lIGFuZCBmaWxlbmFtZVxuICAgICAgICAgIGNvbnN0IGFsbEFnZW50cyA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICBjb25zdCBhZ2VudCA9IGF3YWl0IHRoaXMuZmluZEVsZW1lbnRGbGV4aWJseShuYW1lLCBhbGxBZ2VudHMpO1xuICAgICAgICAgIGlmICghYWdlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogYOKdjCBBZ2VudCAnJHtuYW1lfScgbm90IGZvdW5kYFxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQWN0aXZhdGUgdGhlIGFnZW50XG4gICAgICAgICAgYXdhaXQgYWdlbnQuYWN0aXZhdGUoKTtcbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinIUgQWdlbnQgJyR7bmFtZX0nIGFjdGl2YXRlZCBhbmQgcmVhZHlcXG5TcGVjaWFsaXphdGlvbnM6ICR7KGFnZW50Lm1ldGFkYXRhIGFzIGFueSkuc3BlY2lhbGl6YXRpb25zPy5qb2luKCcsICcpIHx8ICdnZW5lcmFsJ31cXG5cXG5Vc2UgJ2V4ZWN1dGVfYWdlbnQnIHRvIGdpdmUgdGhpcyBhZ2VudCBhIGdvYWwuYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBVbmtub3duIGVsZW1lbnQgdHlwZSAnJHt0eXBlfSdgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLmhhbmRsZUFjdGl2YXRlRWxlbWVudCcsIGVycm9yLCB7IHR5cGUsIG5hbWUgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGFjdGl2YXRlICR7dHlwZX0gJyR7bmFtZX0nOiAke0Vycm9ySGFuZGxlci5nZXRVc2VyTWVzc2FnZShlcnJvcil9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIGdldEFjdGl2ZUVsZW1lbnRzKHR5cGU6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAvLyBOb3JtYWxpemUgdGhlIHR5cGUgdG8gaGFuZGxlIGJvdGggcGx1cmFsIGFuZCBzaW5ndWxhciBmb3Jtc1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGUpO1xuICAgICAgXG4gICAgICBzd2l0Y2ggKG5vcm1hbGl6ZWRUeXBlKSB7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuUEVSU09OQTpcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBY3RpdmVQZXJzb25hKCk7XG4gICAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuU0tJTEw6IHtcbiAgICAgICAgICBjb25zdCBza2lsbHMgPSBhd2FpdCB0aGlzLnNraWxsTWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgY29uc3QgYWN0aXZlU2tpbGxzID0gc2tpbGxzLmZpbHRlcihzID0+IHMuZ2V0U3RhdHVzKCkgPT09ICdhY3RpdmUnKTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoYWN0aXZlU2tpbGxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIvCfk4sgTm8gYWN0aXZlIHNraWxsc1wiXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBza2lsbExpc3QgPSBhY3RpdmVTa2lsbHMubWFwKHMgPT4gYPCfm6DvuI8gJHtzLm1ldGFkYXRhLm5hbWV9YCkuam9pbignLCAnKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGBBY3RpdmUgc2tpbGxzOiAke3NraWxsTGlzdH1gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IFwi8J+TnSBUZW1wbGF0ZXMgYXJlIHN0YXRlbGVzcyBhbmQgYWN0aXZhdGVkIG9uLWRlbWFuZCB3aGVuIHJlbmRlcmluZ1wiXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6IHtcbiAgICAgICAgICBjb25zdCBhZ2VudHMgPSBhd2FpdCB0aGlzLmFnZW50TWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgY29uc3QgYWN0aXZlQWdlbnRzID0gYWdlbnRzLmZpbHRlcihhID0+IGEuZ2V0U3RhdHVzKCkgPT09ICdhY3RpdmUnKTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoYWN0aXZlQWdlbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIvCfpJYgTm8gYWN0aXZlIGFnZW50c1wiXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBhZ2VudExpc3QgPSBhY3RpdmVBZ2VudHMubWFwKGEgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ29hbHMgPSAoYSBhcyBhbnkpLnN0YXRlPy5nb2Fscz8ubGVuZ3RoIHx8IDA7XG4gICAgICAgICAgICByZXR1cm4gYPCfpJYgJHthLm1ldGFkYXRhLm5hbWV9ICgke2dvYWxzfSBhY3RpdmUgZ29hbHMpYDtcbiAgICAgICAgICB9KS5qb2luKCdcXG4nKTtcbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGBBY3RpdmUgYWdlbnRzOlxcbiR7YWdlbnRMaXN0fWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinYwgVW5rbm93biBlbGVtZW50IHR5cGUgJyR7dHlwZX0nYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBnZXQgYWN0aXZlICR7dHlwZX06YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBnZXQgYWN0aXZlICR7dHlwZX06ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIGRlYWN0aXZhdGVFbGVtZW50KG5hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgdHlwZSB0byBoYW5kbGUgYm90aCBwbHVyYWwgYW5kIHNpbmd1bGFyIGZvcm1zXG4gICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMubm9ybWFsaXplRWxlbWVudFR5cGUodHlwZSk7XG4gICAgICBcbiAgICAgIHN3aXRjaCAobm9ybWFsaXplZFR5cGUpIHtcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5QRVJTT05BOlxuICAgICAgICAgIHJldHVybiB0aGlzLmRlYWN0aXZhdGVQZXJzb25hKCk7XG4gICAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuU0tJTEw6IHtcbiAgICAgICAgICAvLyBVc2UgZmxleGlibGUgZmluZGluZyB0byBzdXBwb3J0IGJvdGggZGlzcGxheSBuYW1lIGFuZCBmaWxlbmFtZVxuICAgICAgICAgIGNvbnN0IGFsbFNraWxscyA9IGF3YWl0IHRoaXMuc2tpbGxNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICBjb25zdCBza2lsbCA9IGF3YWl0IHRoaXMuZmluZEVsZW1lbnRGbGV4aWJseShuYW1lLCBhbGxTa2lsbHMpO1xuICAgICAgICAgIGlmICghc2tpbGwpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogYOKdjCBTa2lsbCAnJHtuYW1lfScgbm90IGZvdW5kYFxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgYXdhaXQgc2tpbGwuZGVhY3RpdmF0ZT8uKCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4pyFIFNraWxsICcke3NraWxsLm1ldGFkYXRhLm5hbWV9JyBkZWFjdGl2YXRlZGBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURToge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogXCLwn5OdIFRlbXBsYXRlcyBhcmUgc3RhdGVsZXNzIC0gbm90aGluZyB0byBkZWFjdGl2YXRlXCJcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5BR0VOVDoge1xuICAgICAgICAgIC8vIFVzZSBmbGV4aWJsZSBmaW5kaW5nIHRvIHN1cHBvcnQgYm90aCBkaXNwbGF5IG5hbWUgYW5kIGZpbGVuYW1lXG4gICAgICAgICAgY29uc3QgYWxsQWdlbnRzID0gYXdhaXQgdGhpcy5hZ2VudE1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIGNvbnN0IGFnZW50ID0gYXdhaXQgdGhpcy5maW5kRWxlbWVudEZsZXhpYmx5KG5hbWUsIGFsbEFnZW50cyk7XG4gICAgICAgICAgaWYgKCFhZ2VudCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBg4p2MIEFnZW50ICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBhd2FpdCBhZ2VudC5kZWFjdGl2YXRlKCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4pyFIEFnZW50ICcke2FnZW50Lm1ldGFkYXRhLm5hbWV9JyBkZWFjdGl2YXRlZGBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinYwgVW5rbm93biBlbGVtZW50IHR5cGUgJyR7dHlwZX0nYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBkZWFjdGl2YXRlICR7dHlwZX0gJyR7bmFtZX0nOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gZGVhY3RpdmF0ZSAke3R5cGV9ICcke25hbWV9JzogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgZ2V0RWxlbWVudERldGFpbHMobmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gTm9ybWFsaXplIHRoZSB0eXBlIHRvIGhhbmRsZSBib3RoIHBsdXJhbCBhbmQgc2luZ3VsYXIgZm9ybXNcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcbiAgICAgIFxuICAgICAgc3dpdGNoIChub3JtYWxpemVkVHlwZSkge1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlBFUlNPTkE6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGVyc29uYURldGFpbHMobmFtZSk7XG4gICAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuU0tJTEw6IHtcbiAgICAgICAgICAvLyBVc2UgZmxleGlibGUgZmluZGluZyB0byBzdXBwb3J0IGJvdGggZGlzcGxheSBuYW1lIGFuZCBmaWxlbmFtZVxuICAgICAgICAgIGNvbnN0IGFsbFNraWxscyA9IGF3YWl0IHRoaXMuc2tpbGxNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICBjb25zdCBza2lsbCA9IGF3YWl0IHRoaXMuZmluZEVsZW1lbnRGbGV4aWJseShuYW1lLCBhbGxTa2lsbHMpO1xuICAgICAgICAgIGlmICghc2tpbGwpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogYOKdjCBTa2lsbCAnJHtuYW1lfScgbm90IGZvdW5kYFxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgZGV0YWlscyA9IFtcbiAgICAgICAgICAgIGDwn5ug77iPICoqJHtza2lsbC5tZXRhZGF0YS5uYW1lfSoqYCxcbiAgICAgICAgICAgIGAke3NraWxsLm1ldGFkYXRhLmRlc2NyaXB0aW9ufWAsXG4gICAgICAgICAgICBgYCxcbiAgICAgICAgICAgIGAqKkNvbXBsZXhpdHkqKjogJHtza2lsbC5tZXRhZGF0YS5jb21wbGV4aXR5IHx8ICdiZWdpbm5lcid9YCxcbiAgICAgICAgICAgIGAqKkRvbWFpbnMqKjogJHtza2lsbC5tZXRhZGF0YS5kb21haW5zPy5qb2luKCcsICcpIHx8ICdnZW5lcmFsJ31gLFxuICAgICAgICAgICAgYCoqTGFuZ3VhZ2VzKio6ICR7c2tpbGwubWV0YWRhdGEubGFuZ3VhZ2VzPy5qb2luKCcsICcpIHx8ICdhbnknfWAsXG4gICAgICAgICAgICBgKipQcmVyZXF1aXNpdGVzKio6ICR7c2tpbGwubWV0YWRhdGEucHJlcmVxdWlzaXRlcz8uam9pbignLCAnKSB8fCAnbm9uZSd9YCxcbiAgICAgICAgICAgIGBgLFxuICAgICAgICAgICAgYCoqSW5zdHJ1Y3Rpb25zKio6YCxcbiAgICAgICAgICAgIHNraWxsLmluc3RydWN0aW9uc1xuICAgICAgICAgIF07XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKHNraWxsLm1ldGFkYXRhLnBhcmFtZXRlcnMgJiYgc2tpbGwubWV0YWRhdGEucGFyYW1ldGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBkZXRhaWxzLnB1c2goJycsICcqKlBhcmFtZXRlcnMqKjonKTtcbiAgICAgICAgICAgIHNraWxsLm1ldGFkYXRhLnBhcmFtZXRlcnMuZm9yRWFjaCgocDogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGRldGFpbHMucHVzaChgLSAke3AubmFtZX0gKCR7cC50eXBlfSk6ICR7cC5kZXNjcmlwdGlvbn1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGRldGFpbHMuam9pbignXFxuJylcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURToge1xuICAgICAgICAgIC8vIFVzZSBmbGV4aWJsZSBmaW5kaW5nIHRvIHN1cHBvcnQgYm90aCBkaXNwbGF5IG5hbWUgYW5kIGZpbGVuYW1lXG4gICAgICAgICAgY29uc3QgYWxsVGVtcGxhdGVzID0gYXdhaXQgdGhpcy50ZW1wbGF0ZU1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlID0gYXdhaXQgdGhpcy5maW5kRWxlbWVudEZsZXhpYmx5KG5hbWUsIGFsbFRlbXBsYXRlcyk7XG4gICAgICAgICAgaWYgKCF0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBg4p2MIFRlbXBsYXRlICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBkZXRhaWxzID0gW1xuICAgICAgICAgICAgYPCfk4QgKioke3RlbXBsYXRlLm1ldGFkYXRhLm5hbWV9KipgLFxuICAgICAgICAgICAgYCR7dGVtcGxhdGUubWV0YWRhdGEuZGVzY3JpcHRpb259YCxcbiAgICAgICAgICAgIGBgLFxuICAgICAgICAgICAgYCoqT3V0cHV0IEZvcm1hdCoqOiAkeyh0ZW1wbGF0ZS5tZXRhZGF0YSBhcyBhbnkpLm91dHB1dF9mb3JtYXQgfHwgJ3RleHQnfWAsXG4gICAgICAgICAgICBgKipUZW1wbGF0ZSBDb250ZW50Kio6YCxcbiAgICAgICAgICAgICdgYGAnLFxuICAgICAgICAgICAgdGVtcGxhdGUuY29udGVudCxcbiAgICAgICAgICAgICdgYGAnXG4gICAgICAgICAgXTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAodGVtcGxhdGUubWV0YWRhdGEudmFyaWFibGVzICYmIHRlbXBsYXRlLm1ldGFkYXRhLnZhcmlhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBkZXRhaWxzLnB1c2goJycsICcqKlZhcmlhYmxlcyoqOicpO1xuICAgICAgICAgICAgdGVtcGxhdGUubWV0YWRhdGEudmFyaWFibGVzLmZvckVhY2goKHY6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBkZXRhaWxzLnB1c2goYC0gJHt2Lm5hbWV9ICgke3YudHlwZX0pOiAke3YuZGVzY3JpcHRpb259YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBkZXRhaWxzLmpvaW4oJ1xcbicpXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6IHtcbiAgICAgICAgICAvLyBVc2UgZmxleGlibGUgZmluZGluZyB0byBzdXBwb3J0IGJvdGggZGlzcGxheSBuYW1lIGFuZCBmaWxlbmFtZVxuICAgICAgICAgIGNvbnN0IGFsbEFnZW50cyA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICBjb25zdCBhZ2VudCA9IGF3YWl0IHRoaXMuZmluZEVsZW1lbnRGbGV4aWJseShuYW1lLCBhbGxBZ2VudHMpO1xuICAgICAgICAgIGlmICghYWdlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogYOKdjCBBZ2VudCAnJHtuYW1lfScgbm90IGZvdW5kYFxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgZGV0YWlscyA9IFtcbiAgICAgICAgICAgIGDwn6SWICoqJHthZ2VudC5tZXRhZGF0YS5uYW1lfSoqYCxcbiAgICAgICAgICAgIGAke2FnZW50Lm1ldGFkYXRhLmRlc2NyaXB0aW9ufWAsXG4gICAgICAgICAgICBgYCxcbiAgICAgICAgICAgIGAqKlN0YXR1cyoqOiAke2FnZW50LmdldFN0YXR1cygpfWAsXG4gICAgICAgICAgICBgKipTcGVjaWFsaXphdGlvbnMqKjogJHsoYWdlbnQubWV0YWRhdGEgYXMgYW55KS5zcGVjaWFsaXphdGlvbnM/LmpvaW4oJywgJykgfHwgJ2dlbmVyYWwnfWAsXG4gICAgICAgICAgICBgKipEZWNpc2lvbiBGcmFtZXdvcmsqKjogJHsoYWdlbnQubWV0YWRhdGEgYXMgYW55KS5kZWNpc2lvbkZyYW1ld29yayB8fCAncnVsZS1iYXNlZCd9YCxcbiAgICAgICAgICAgIGAqKlJpc2sgVG9sZXJhbmNlKio6ICR7KGFnZW50Lm1ldGFkYXRhIGFzIGFueSkucmlza1RvbGVyYW5jZSB8fCAnbG93J31gLFxuICAgICAgICAgICAgYGAsXG4gICAgICAgICAgICBgKipJbnN0cnVjdGlvbnMqKjpgLFxuICAgICAgICAgICAgKGFnZW50IGFzIGFueSkuaW5zdHJ1Y3Rpb25zIHx8ICdObyBpbnN0cnVjdGlvbnMgYXZhaWxhYmxlJ1xuICAgICAgICAgIF07XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgYWdlbnRTdGF0ZSA9IChhZ2VudCBhcyBhbnkpLnN0YXRlO1xuICAgICAgICAgIGlmIChhZ2VudFN0YXRlPy5nb2FscyAmJiBhZ2VudFN0YXRlLmdvYWxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGRldGFpbHMucHVzaCgnJywgJyoqQ3VycmVudCBHb2FscyoqOicpO1xuICAgICAgICAgICAgYWdlbnRTdGF0ZS5nb2Fscy5mb3JFYWNoKChnOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgZGV0YWlscy5wdXNoKGAtICR7Zy5kZXNjcmlwdGlvbn0gKCR7Zy5zdGF0dXN9KWApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogZGV0YWlscy5qb2luKCdcXG4nKVxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBVbmtub3duIGVsZW1lbnQgdHlwZSAnJHt0eXBlfSdgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGdldCAke3R5cGV9IGRldGFpbHMgZm9yICcke25hbWV9JzpgLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGdldCAke3R5cGV9IGRldGFpbHM6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIHJlbG9hZEVsZW1lbnRzKHR5cGU6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAvLyBOb3JtYWxpemUgdGhlIHR5cGUgdG8gaGFuZGxlIGJvdGggcGx1cmFsIGFuZCBzaW5ndWxhciBmb3Jtc1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGUpO1xuICAgICAgXG4gICAgICBzd2l0Y2ggKG5vcm1hbGl6ZWRUeXBlKSB7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuUEVSU09OQTpcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZWxvYWRQZXJzb25hcygpO1xuICAgICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOiB7XG4gICAgICAgICAgdGhpcy5za2lsbE1hbmFnZXIuY2xlYXJDYWNoZSgpO1xuICAgICAgICAgIGNvbnN0IHNraWxscyA9IGF3YWl0IHRoaXMuc2tpbGxNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDwn5SEIFJlbG9hZGVkICR7c2tpbGxzLmxlbmd0aH0gc2tpbGxzIGZyb20gcG9ydGZvbGlvYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlRFTVBMQVRFOiB7XG4gICAgICAgICAgLy8gVGVtcGxhdGUgbWFuYWdlciBkb2Vzbid0IGhhdmUgY2xlYXJDYWNoZSwganVzdCBsaXN0XG4gICAgICAgICAgY29uc3QgdGVtcGxhdGVzID0gYXdhaXQgdGhpcy50ZW1wbGF0ZU1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYPCflIQgUmVsb2FkZWQgJHt0ZW1wbGF0ZXMubGVuZ3RofSB0ZW1wbGF0ZXMgZnJvbSBwb3J0Zm9saW9gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6IHtcbiAgICAgICAgICAvLyBBZ2VudCBtYW5hZ2VyIGRvZXNuJ3QgaGF2ZSBjbGVhckNhY2hlLCBqdXN0IGxpc3RcbiAgICAgICAgICBjb25zdCBhZ2VudHMgPSBhd2FpdCB0aGlzLmFnZW50TWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg8J+UhCBSZWxvYWRlZCAke2FnZW50cy5sZW5ndGh9IGFnZW50cyBmcm9tIHBvcnRmb2xpb2BcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinYwgVW5rbm93biBlbGVtZW50IHR5cGUgJyR7dHlwZX0nYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byByZWxvYWQgJHt0eXBlfTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIHJlbG9hZCAke3R5cGV9OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICAvLyBFbGVtZW50LXNwZWNpZmljIG1ldGhvZHNcbiAgYXN5bmMgcmVuZGVyVGVtcGxhdGUobmFtZTogc3RyaW5nLCB2YXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdGVtcGxhdGUgPSBhd2FpdCB0aGlzLnRlbXBsYXRlTWFuYWdlci5maW5kKHQgPT4gdC5tZXRhZGF0YS5uYW1lID09PSBuYW1lKTtcbiAgICAgIGlmICghdGVtcGxhdGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBg4p2MIFRlbXBsYXRlICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gU2ltcGxlIHRlbXBsYXRlIHJlbmRlcmluZyAtIHJlcGxhY2UgdmFyaWFibGVzIGluIGNvbnRlbnRcbiAgICAgIGxldCByZW5kZXJlZCA9IHRlbXBsYXRlLmNvbnRlbnQ7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YXJpYWJsZXMpKSB7XG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChgXFxcXHtcXFxce1xcXFxzKiR7a2V5fVxcXFxzKlxcXFx9XFxcXH1gLCAnZycpO1xuICAgICAgICByZW5kZXJlZCA9IHJlbmRlcmVkLnJlcGxhY2UocmVnZXgsIFN0cmluZyh2YWx1ZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg8J+ThCBSZW5kZXJlZCB0ZW1wbGF0ZSAnJHtuYW1lfSc6XFxuXFxuJHtyZW5kZXJlZH1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byByZW5kZXIgdGVtcGxhdGUgJyR7bmFtZX0nOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gcmVuZGVyIHRlbXBsYXRlOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBleGVjdXRlQWdlbnQobmFtZTogc3RyaW5nLCBnb2FsOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYWdlbnQgPSBhd2FpdCB0aGlzLmFnZW50TWFuYWdlci5maW5kKGEgPT4gYS5tZXRhZGF0YS5uYW1lID09PSBuYW1lKTtcbiAgICAgIGlmICghYWdlbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBg4p2MIEFnZW50ICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gU2ltcGxlIGFnZW50IGV4ZWN1dGlvbiBzaW11bGF0aW9uXG4gICAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAgIHN1bW1hcnk6IGBBZ2VudCAnJHtuYW1lfScgaXMgbm93IHdvcmtpbmcgb246ICR7Z29hbH1gLFxuICAgICAgICBzdGF0dXM6ICdpbi1wcm9ncmVzcycsXG4gICAgICAgIGFjdGlvbnNUYWtlbjogMVxuICAgICAgfTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg8J+kliBBZ2VudCAnJHtuYW1lfScgZXhlY3V0aW9uIHJlc3VsdDpcXG5cXG4ke3Jlc3VsdC5zdW1tYXJ5fVxcblxcblN0YXR1czogJHtyZXN1bHQuc3RhdHVzfVxcbkFjdGlvbnMgdGFrZW46ICR7cmVzdWx0LmFjdGlvbnNUYWtlbiB8fCAwfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGV4ZWN1dGUgYWdlbnQgJyR7bmFtZX0nOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gZXhlY3V0ZSBhZ2VudDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgY3JlYXRlRWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGRlc2NyaXB0aW9uOiBzdHJpbmc7IGNvbnRlbnQ/OiBzdHJpbmc7IG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55Pn0pIHtcbiAgICAvLyBFbnN1cmUgaW5pdGlhbGl6YXRpb24gZm9yIHRlc3QgY29tcGF0aWJpbGl0eVxuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBuYW1lLCB0eXBlLCBkZXNjcmlwdGlvbiwgY29udGVudCwgbWV0YWRhdGEgfSA9IGFyZ3M7XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIGVsZW1lbnQgdHlwZVxuICAgICAgaWYgKCFPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5pbmNsdWRlcyh0eXBlIGFzIEVsZW1lbnRUeXBlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGDinYwgSW52YWxpZCBlbGVtZW50IHR5cGUgJyR7dHlwZX0nLiBWYWxpZCB0eXBlczogJHtPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5qb2luKCcsICcpfSAob3IgbGVnYWN5IHBsdXJhbCBmb3JtczogcGVyc29uYXMsIHNraWxscywgdGVtcGxhdGVzLCBhZ2VudHMpYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIGlucHV0c1xuICAgICAgY29uc3QgdmFsaWRhdGVkTmFtZSA9IHZhbGlkYXRlRmlsZW5hbWUobmFtZSk7XG4gICAgICBjb25zdCB2YWxpZGF0ZWREZXNjcmlwdGlvbiA9IHNhbml0aXplSW5wdXQoZGVzY3JpcHRpb24sIFNFQ1VSSVRZX0xJTUlUUy5NQVhfTUVUQURBVEFfRklFTERfTEVOR1RIKTtcbiAgICAgIFxuICAgICAgLy8gQ1JJVElDQUwgRklYOiBWYWxpZGF0ZSBjb250ZW50IHNpemUgQkVGT1JFIHByb2Nlc3NpbmcgdG8gcHJldmVudCBtZW1vcnkgZXhoYXVzdGlvblxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyBDbGF1ZGUgZnJvbSB0cnlpbmcgdG8gb3V0cHV0IG1hc3NpdmUgY29udGVudCBpbiByZXNwb25zZXNcbiAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFsaWRhdGVDb250ZW50U2l6ZShjb250ZW50LCBTRUNVUklUWV9MSU1JVFMuTUFYX0NPTlRFTlRfTEVOR1RIKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBDb250ZW50IHRvbyBsYXJnZTogJHtlcnJvci5tZXNzYWdlfS4gTWF4aW11bSBhbGxvd2VkIHNpemUgaXMgJHtTRUNVUklUWV9MSU1JVFMuTUFYX0NPTlRFTlRfTEVOR1RIfSBjaGFyYWN0ZXJzICgke01hdGguZmxvb3IoU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCAvIDEwMjQpfUtCKS5gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gU0VDVVJJVFkgRklYOiBTYW5pdGl6ZSBtZXRhZGF0YSB0byBwcmV2ZW50IHByb3RvdHlwZSBwb2xsdXRpb25cbiAgICAgIGNvbnN0IHNhbml0aXplZE1ldGFkYXRhID0gdGhpcy5zYW5pdGl6ZU1ldGFkYXRhKG1ldGFkYXRhIHx8IHt9KTtcbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIGVsZW1lbnQgYmFzZWQgb24gdHlwZVxuICAgICAgc3dpdGNoICh0eXBlIGFzIEVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuUEVSU09OQTpcbiAgICAgICAgICAvLyBVc2UgZXhpc3RpbmcgcGVyc29uYSBjcmVhdGlvbiBsb2dpY1xuICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVBlcnNvbmEoXG4gICAgICAgICAgICB2YWxpZGF0ZWROYW1lLCBcbiAgICAgICAgICAgIHZhbGlkYXRlZERlc2NyaXB0aW9uLCBcbiAgICAgICAgICAgIGNvbnRlbnQgfHwgJycsXG4gICAgICAgICAgICBzYW5pdGl6ZWRNZXRhZGF0YT8udHJpZ2dlcnNcbiAgICAgICAgICApO1xuICAgICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOlxuICAgICAgICAgIGNvbnN0IHNraWxsID0gYXdhaXQgdGhpcy5za2lsbE1hbmFnZXIuY3JlYXRlKHtcbiAgICAgICAgICAgIG5hbWU6IHZhbGlkYXRlZE5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogdmFsaWRhdGVkRGVzY3JpcHRpb24sXG4gICAgICAgICAgICAuLi5zYW5pdGl6ZWRNZXRhZGF0YSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQgfHwgJydcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinIUgQ3JlYXRlZCBza2lsbCAnJHtza2lsbC5tZXRhZGF0YS5uYW1lfScgc3VjY2Vzc2Z1bGx5YFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlRFTVBMQVRFOlxuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlID0gYXdhaXQgdGhpcy50ZW1wbGF0ZU1hbmFnZXIuY3JlYXRlKHtcbiAgICAgICAgICAgIG5hbWU6IHZhbGlkYXRlZE5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogdmFsaWRhdGVkRGVzY3JpcHRpb24sXG4gICAgICAgICAgICBjb250ZW50OiBjb250ZW50IHx8ICcnLFxuICAgICAgICAgICAgLi4uc2FuaXRpemVkTWV0YWRhdGFcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinIUgQ3JlYXRlZCB0ZW1wbGF0ZSAnJHt0ZW1wbGF0ZS5tZXRhZGF0YS5uYW1lfScgc3VjY2Vzc2Z1bGx5YFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLkFHRU5UOlxuICAgICAgICAgIGNvbnN0IGFnZW50UmVzdWx0ID0gYXdhaXQgdGhpcy5hZ2VudE1hbmFnZXIuY3JlYXRlKFxuICAgICAgICAgICAgdmFsaWRhdGVkTmFtZSxcbiAgICAgICAgICAgIHZhbGlkYXRlZERlc2NyaXB0aW9uLFxuICAgICAgICAgICAgY29udGVudCB8fCAnJyxcbiAgICAgICAgICAgIHNhbml0aXplZE1ldGFkYXRhXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIWFnZW50UmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogYOKdjCAke2FnZW50UmVzdWx0Lm1lc3NhZ2V9YFxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4pyFIENyZWF0ZWQgYWdlbnQgJyR7dmFsaWRhdGVkTmFtZX0nIHN1Y2Nlc3NmdWxseWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgICBcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinYwgRWxlbWVudCB0eXBlICcke3R5cGV9JyBpcyBub3QgeWV0IHN1cHBvcnRlZCBmb3IgY3JlYXRpb25gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBlbGVtZW50OmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gY3JlYXRlIGVsZW1lbnQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIGVkaXRFbGVtZW50KGFyZ3M6IHtuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgZmllbGQ6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgYW55W119KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgdHlwZSwgZmllbGQsIHZhbHVlIH0gPSBhcmdzO1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSBlbGVtZW50IHR5cGVcbiAgICAgIGlmICghT2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSkuaW5jbHVkZXModHlwZSBhcyBFbGVtZW50VHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBg4p2MIEludmFsaWQgZWxlbWVudCB0eXBlICcke3R5cGV9Jy4gVmFsaWQgdHlwZXM6ICR7T2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSkuam9pbignLCAnKX0gKG9yIGxlZ2FjeSBwbHVyYWwgZm9ybXM6IHBlcnNvbmFzLCBza2lsbHMsIHRlbXBsYXRlcywgYWdlbnRzKWBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBGb3IgcGVyc29uYXMsIHVzZSBleGlzdGluZyBlZGl0IGxvZ2ljXG4gICAgICBpZiAodHlwZSA9PT0gRWxlbWVudFR5cGUuUEVSU09OQSkge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0UGVyc29uYShuYW1lLCBmaWVsZCwgU3RyaW5nKHZhbHVlKSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFRZUEUgU0FGRVRZOiBEZWZpbmUgYSBjb21tb24gaW50ZXJmYWNlIGZvciBlbGVtZW50IG1hbmFnZXJzXG4gICAgICBpbnRlcmZhY2UgRWxlbWVudE1hbmFnZXJCYXNlPFQ+IHtcbiAgICAgICAgZmluZChwcmVkaWNhdGU6IChlbGVtZW50OiBUKSA9PiBib29sZWFuKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPjtcbiAgICAgICAgc2F2ZShlbGVtZW50OiBULCBmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gR2V0IHRoZSBhcHByb3ByaWF0ZSBtYW5hZ2VyIGJhc2VkIG9uIHR5cGUgd2l0aCBwcm9wZXIgdHlwaW5nXG4gICAgICBsZXQgbWFuYWdlcjogRWxlbWVudE1hbmFnZXJCYXNlPFNraWxsIHwgVGVtcGxhdGUgfCBBZ2VudD4gfCBudWxsID0gbnVsbDtcbiAgICAgIGxldCBlbGVtZW50OiBTa2lsbCB8IFRlbXBsYXRlIHwgQWdlbnQgfCB1bmRlZmluZWQ7XG4gICAgICBcbiAgICAgIHN3aXRjaCAodHlwZSBhcyBFbGVtZW50VHlwZSkge1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOlxuICAgICAgICAgIG1hbmFnZXIgPSB0aGlzLnNraWxsTWFuYWdlciBhcyBFbGVtZW50TWFuYWdlckJhc2U8U2tpbGw+O1xuICAgICAgICAgIGVsZW1lbnQgPSBhd2FpdCB0aGlzLnNraWxsTWFuYWdlci5maW5kKChlOiBTa2lsbCkgPT4gZS5tZXRhZGF0YS5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURTpcbiAgICAgICAgICBtYW5hZ2VyID0gdGhpcy50ZW1wbGF0ZU1hbmFnZXIgYXMgRWxlbWVudE1hbmFnZXJCYXNlPFRlbXBsYXRlPjtcbiAgICAgICAgICBlbGVtZW50ID0gYXdhaXQgdGhpcy50ZW1wbGF0ZU1hbmFnZXIuZmluZCgoZTogVGVtcGxhdGUpID0+IGUubWV0YWRhdGEubmFtZSA9PT0gbmFtZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6XG4gICAgICAgICAgbWFuYWdlciA9IHRoaXMuYWdlbnRNYW5hZ2VyIGFzIEVsZW1lbnRNYW5hZ2VyQmFzZTxBZ2VudD47XG4gICAgICAgICAgZWxlbWVudCA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmZpbmQoKGU6IEFnZW50KSA9PiBlLm1ldGFkYXRhLm5hbWUgPT09IG5hbWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBFbGVtZW50IHR5cGUgJyR7dHlwZX0nIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGZvciBlZGl0aW5nYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiBlbGVtZW50IHdhcyBmb3VuZFxuICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCAke3R5cGV9ICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSGFuZGxlIG5lc3RlZCBmaWVsZCB1cGRhdGVzIChlLmcuLCBcIm1ldGFkYXRhLmF1dGhvclwiKVxuICAgICAgY29uc3QgZmllbGRQYXJ0cyA9IGZpZWxkLnNwbGl0KCcuJyk7XG4gICAgICBcbiAgICAgIC8vIFNFQ1VSSVRZIEZJWDogVmFsaWRhdGUgZmllbGQgbmFtZXMgdG8gcHJldmVudCBwcm90b3R5cGUgcG9sbHV0aW9uXG4gICAgICBjb25zdCBkYW5nZXJvdXNQcm9wZXJ0aWVzID0gWydfX3Byb3RvX18nLCAnY29uc3RydWN0b3InLCAncHJvdG90eXBlJ107XG4gICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgZmllbGRQYXJ0cykge1xuICAgICAgICBpZiAoZGFuZ2Vyb3VzUHJvcGVydGllcy5pbmNsdWRlcyhwYXJ0KSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBJbnZhbGlkIGZpZWxkIG5hbWU6ICcke3BhcnR9JyBpcyBub3QgYWxsb3dlZCBmb3Igc2VjdXJpdHkgcmVhc29uc2BcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICBsZXQgdGFyZ2V0OiBhbnkgPSBlbGVtZW50O1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZFBhcnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAvLyBTRUNVUklUWTogQWRkaXRpb25hbCBjaGVjayB0byBwcmV2ZW50IHByb3RvdHlwZSBwb2xsdXRpb25cbiAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09ICdvYmplY3QnIHx8IHRhcmdldCA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBDYW5ub3Qgc2V0IHByb3BlcnR5ICcke2ZpZWxkUGFydHNbaV19JyBvbiBub24tb2JqZWN0YFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAoIXRhcmdldFtmaWVsZFBhcnRzW2ldXSkge1xuICAgICAgICAgIC8vIFNFQ1VSSVRZOiBVc2UgT2JqZWN0LmRlZmluZVByb3BlcnR5IHRvIGF2b2lkIHByb3RvdHlwZSBjaGFpbiBwb2xsdXRpb25cbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBmaWVsZFBhcnRzW2ldLCB7XG4gICAgICAgICAgICB2YWx1ZToge30sXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXQgPSB0YXJnZXRbZmllbGRQYXJ0c1tpXV07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFVwZGF0ZSB0aGUgZmllbGRcbiAgICAgIGNvbnN0IGxhc3RGaWVsZCA9IGZpZWxkUGFydHNbZmllbGRQYXJ0cy5sZW5ndGggLSAxXTtcbiAgICAgIC8vIFNFQ1VSSVRZOiBVc2UgT2JqZWN0LmRlZmluZVByb3BlcnR5IGZvciB0aGUgZmluYWwgYXNzaWdubWVudCB0b29cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGxhc3RGaWVsZCwge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBWRVJTSU9OIEZJWDogSGFuZGxlIHZlcnNpb24gZmllbGQgdXBkYXRlcyBkaWZmZXJlbnRseVxuICAgICAgLy8gSWYgdXNlciBpcyBkaXJlY3RseSBlZGl0aW5nIHZlcnNpb24gZmllbGQsIGRvbid0IGF1dG8taW5jcmVtZW50XG4gICAgICBpZiAoZmllbGQgPT09ICd2ZXJzaW9uJyB8fCBmaWVsZCA9PT0gJ21ldGFkYXRhLnZlcnNpb24nKSB7XG4gICAgICAgIGNvbnN0IHZlcnNpb25TdHJpbmcgPSBTdHJpbmcodmFsdWUpO1xuICAgICAgICBcbiAgICAgICAgLy8gVkVSU0lPTiBWQUxJREFUSU9OOiBWYWxpZGF0ZSB2ZXJzaW9uIGZvcm1hdFxuICAgICAgICAvLyBBY2NlcHQgc2VtdmVyICgxLjAuMCksIHR3by1wYXJ0ICgxLjApLCBvciBzaW5nbGUgZGlnaXQgKDEpXG4gICAgICAgIC8vIEFsc28gYWNjZXB0cyBwcmUtcmVsZWFzZSB2ZXJzaW9ucyAoMS4wLjAtYmV0YSwgMS4wLjAtYWxwaGEuMSlcbiAgICAgICAgY29uc3QgaXNWYWxpZFZlcnNpb24gPSAvXihcXGQrKShcXC5cXGQrKT8oXFwuXFxkKyk/KC1bYS16QS1aMC05Li1dKyk/JC8udGVzdCh2ZXJzaW9uU3RyaW5nKTtcbiAgICAgICAgaWYgKCFpc1ZhbGlkVmVyc2lvbikge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBJbnZhbGlkIHZlcnNpb24gZm9ybWF0OiAnJHt2ZXJzaW9uU3RyaW5nfScuIFBsZWFzZSB1c2UgZm9ybWF0IGxpa2UgMS4wLjAsIDEuMCwgb3IgMWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gRVJST1IgSEFORExJTkc6IFdyYXAgdmVyc2lvbiB1cGRhdGUgaW4gdHJ5LWNhdGNoXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVXBkYXRlIGJvdGggbG9jYXRpb25zIHRvIGVuc3VyZSBjb25zaXN0ZW5jeVxuICAgICAgICAgIGVsZW1lbnQudmVyc2lvbiA9IHZlcnNpb25TdHJpbmc7XG4gICAgICAgICAgaWYgKGVsZW1lbnQubWV0YWRhdGEpIHtcbiAgICAgICAgICAgIGVsZW1lbnQubWV0YWRhdGEudmVyc2lvbiA9IHZlcnNpb25TdHJpbmc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHVwZGF0ZSB2ZXJzaW9uIGZvciAke25hbWV9OmAsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIHVwZGF0ZSB2ZXJzaW9uOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIG90aGVyIGZpZWxkIGVkaXRzLCBhdXRvLWluY3JlbWVudCB2ZXJzaW9uXG4gICAgICAgIC8vIFZFUlNJT04gRklYOiBVcGRhdGUgYm90aCBlbGVtZW50LnZlcnNpb24gQU5EIGVsZW1lbnQubWV0YWRhdGEudmVyc2lvblxuICAgICAgICAvLyBQcmV2aW91c2x5OiBPbmx5IGVsZW1lbnQudmVyc2lvbiB3YXMgdXBkYXRlZCwgYnV0IHNvbWUgbWFuYWdlcnMgcmVhZCBmcm9tIG1ldGFkYXRhLnZlcnNpb25cbiAgICAgICAgLy8gTm93OiBLZWVwIGJvdGggaW4gc3luYyB0byBlbnN1cmUgdmVyc2lvbiBwZXJzaXN0cyBjb3JyZWN0bHlcbiAgICAgICAgXG4gICAgICAgIC8vIEVSUk9SIEhBTkRMSU5HOiBXcmFwIGF1dG8taW5jcmVtZW50IGluIHRyeS1jYXRjaFxuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChlbGVtZW50LnZlcnNpb24pIHtcbiAgICAgICAgICAgIC8vIFBSRS1SRUxFQVNFIEhBTkRMSU5HOiBDaGVjayBmb3IgcHJlLXJlbGVhc2UgdmVyc2lvbnNcbiAgICAgICAgICAgIGNvbnN0IHByZVJlbGVhc2VNYXRjaCA9IGVsZW1lbnQudmVyc2lvbi5tYXRjaCgvXihcXGQrXFwuXFxkK1xcLlxcZCspKC0oW2EtekEtWjAtOS4tXSspKT8kLyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChwcmVSZWxlYXNlTWF0Y2gpIHtcbiAgICAgICAgICAgICAgLy8gSGFuZGxlIHByZS1yZWxlYXNlIHZlcnNpb25zIChlLmcuLCAxLjAuMC1iZXRhLjEpXG4gICAgICAgICAgICAgIGNvbnN0IGJhc2VWZXJzaW9uID0gcHJlUmVsZWFzZU1hdGNoWzFdO1xuICAgICAgICAgICAgICBjb25zdCBwcmVSZWxlYXNlVGFnID0gcHJlUmVsZWFzZU1hdGNoWzNdO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgaWYgKHByZVJlbGVhc2VUYWcpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBpdCBoYXMgYSBwcmUtcmVsZWFzZSB0YWcsIGluY3JlbWVudCB0aGUgcHJlLXJlbGVhc2UgbnVtYmVyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJlUmVsZWFzZU51bWJlck1hdGNoID0gcHJlUmVsZWFzZVRhZy5tYXRjaCgvXihbYS16QS1aXSspXFwuPyhcXGQrKT8kLyk7XG4gICAgICAgICAgICAgICAgaWYgKHByZVJlbGVhc2VOdW1iZXJNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcHJlUmVsZWFzZVR5cGUgPSBwcmVSZWxlYXNlTnVtYmVyTWF0Y2hbMV07XG4gICAgICAgICAgICAgICAgICBjb25zdCBwcmVSZWxlYXNlTnVtYmVyID0gcGFyc2VJbnQocHJlUmVsZWFzZU51bWJlck1hdGNoWzJdIHx8ICcwJykgKyAxO1xuICAgICAgICAgICAgICAgICAgZWxlbWVudC52ZXJzaW9uID0gYCR7YmFzZVZlcnNpb259LSR7cHJlUmVsZWFzZVR5cGV9LiR7cHJlUmVsZWFzZU51bWJlcn1gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAvLyBDb21wbGV4IHByZS1yZWxlYXNlLCBqdXN0IGluY3JlbWVudCBwYXRjaFxuICAgICAgICAgICAgICAgICAgY29uc3QgW21ham9yLCBtaW5vciwgcGF0Y2hdID0gYmFzZVZlcnNpb24uc3BsaXQoJy4nKS5tYXAoTnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQudmVyc2lvbiA9IGAke21ham9yfS4ke21pbm9yfS4ke3BhdGNoICsgMX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBSZWd1bGFyIHNlbXZlciwgaW5jcmVtZW50IHBhdGNoXG4gICAgICAgICAgICAgICAgY29uc3QgW21ham9yLCBtaW5vciwgcGF0Y2hdID0gYmFzZVZlcnNpb24uc3BsaXQoJy4nKS5tYXAoTnVtYmVyKTtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnZlcnNpb24gPSBgJHttYWpvcn0uJHttaW5vcn0uJHtwYXRjaCArIDF9YDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gSGFuZGxlIG5vbi1zZW12ZXIgdmVyc2lvbnNcbiAgICAgICAgICAgICAgY29uc3QgdmVyc2lvblBhcnRzID0gZWxlbWVudC52ZXJzaW9uLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICAgIGlmICh2ZXJzaW9uUGFydHMubGVuZ3RoID49IDMpIHtcbiAgICAgICAgICAgICAgICAvLyBTdGFuZGFyZCBzZW12ZXIgZm9ybWF0IChlLmcuLCAxLjAuMClcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRjaCA9IHBhcnNlSW50KHZlcnNpb25QYXJ0c1syXSkgfHwgMDtcbiAgICAgICAgICAgICAgICB2ZXJzaW9uUGFydHNbMl0gPSBTdHJpbmcocGF0Y2ggKyAxKTtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnZlcnNpb24gPSB2ZXJzaW9uUGFydHMuam9pbignLicpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZlcnNpb25QYXJ0cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICAvLyBUd28tcGFydCB2ZXJzaW9uIChlLmcuLCAxLjApIC0gYWRkIHBhdGNoIHZlcnNpb25cbiAgICAgICAgICAgICAgICBlbGVtZW50LnZlcnNpb24gPSBgJHtlbGVtZW50LnZlcnNpb259LjFgO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZlcnNpb25QYXJ0cy5sZW5ndGggPT09IDEgJiYgL15cXGQrJC8udGVzdCh2ZXJzaW9uUGFydHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgLy8gU2luZ2xlIG51bWJlciB2ZXJzaW9uIChlLmcuLCAxKSAtIGNvbnZlcnQgdG8gc2VtdmVyXG4gICAgICAgICAgICAgICAgZWxlbWVudC52ZXJzaW9uID0gYCR7ZWxlbWVudC52ZXJzaW9ufS4wLjFgO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIE5vbi1zdGFuZGFyZCB2ZXJzaW9uIC0gYXBwZW5kIG9yIHJlcGxhY2Ugd2l0aCBzdGFuZGFyZCBmb3JtYXRcbiAgICAgICAgICAgICAgICBlbGVtZW50LnZlcnNpb24gPSAnMS4wLjEnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vIHZlcnNpb24gLSBzZXQgaW5pdGlhbCB2ZXJzaW9uXG4gICAgICAgICAgICBlbGVtZW50LnZlcnNpb24gPSAnMS4wLjAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLyBFbnN1cmUgbWV0YWRhdGEudmVyc2lvbiBpcyBhbHNvIHVwZGF0ZWQgZm9yIG1hbmFnZXJzIHRoYXQgdXNlIGl0XG4gICAgICAgICAgaWYgKGVsZW1lbnQubWV0YWRhdGEpIHtcbiAgICAgICAgICAgIGVsZW1lbnQubWV0YWRhdGEudmVyc2lvbiA9IGVsZW1lbnQudmVyc2lvbjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gYXV0by1pbmNyZW1lbnQgdmVyc2lvbiBmb3IgJHtuYW1lfTpgLCBlcnJvcik7XG4gICAgICAgICAgLy8gRG9uJ3QgZmFpbCB0aGUgZW50aXJlIG9wZXJhdGlvbiwganVzdCBsb2cgdGhlIGVycm9yXG4gICAgICAgICAgLy8gVmVyc2lvbiB3aWxsIHJlbWFpbiB1bmNoYW5nZWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBTYXZlIHRoZSBlbGVtZW50IC0gbmVlZCB0byBkZXRlcm1pbmUgZmlsZW5hbWVcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gYCR7ZWxlbWVudC5tZXRhZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTktXS9nLCAnLScpfS5tZGA7XG4gICAgICAvLyBUWVBFIFNBRkVUWTogTm8gbmVlZCBmb3IgJ2FzIGFueScgY2FzdCBhbnltb3JlIHdpdGggcHJvcGVyIHR5cGluZ1xuICAgICAgYXdhaXQgbWFuYWdlciEuc2F2ZShlbGVtZW50LCBmaWxlbmFtZSk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKchSBVcGRhdGVkICR7dHlwZX0gJyR7bmFtZX0nIC0gJHtmaWVsZH0gc2V0IHRvOiAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBlZGl0IGVsZW1lbnQ6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBlZGl0IGVsZW1lbnQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIHZhbGlkYXRlRWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IHN0cmljdD86IGJvb2xlYW59KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgdHlwZSwgc3RyaWN0ID0gZmFsc2UgfSA9IGFyZ3M7XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIGVsZW1lbnQgdHlwZVxuICAgICAgaWYgKCFPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5pbmNsdWRlcyh0eXBlIGFzIEVsZW1lbnRUeXBlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGDinYwgSW52YWxpZCBlbGVtZW50IHR5cGUgJyR7dHlwZX0nLiBWYWxpZCB0eXBlczogJHtPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5qb2luKCcsICcpfSAob3IgbGVnYWN5IHBsdXJhbCBmb3JtczogcGVyc29uYXMsIHNraWxscywgdGVtcGxhdGVzLCBhZ2VudHMpYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEZvciBwZXJzb25hcywgdXNlIGV4aXN0aW5nIHZhbGlkYXRpb24gbG9naWNcbiAgICAgIGlmICh0eXBlID09PSBFbGVtZW50VHlwZS5QRVJTT05BKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUGVyc29uYShuYW1lKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gR2V0IHRoZSBhcHByb3ByaWF0ZSBtYW5hZ2VyIGJhc2VkIG9uIHR5cGVcbiAgICAgIGxldCBtYW5hZ2VyOiBTa2lsbE1hbmFnZXIgfCBUZW1wbGF0ZU1hbmFnZXIgfCBBZ2VudE1hbmFnZXIgfCBudWxsID0gbnVsbDtcbiAgICAgIHN3aXRjaCAodHlwZSBhcyBFbGVtZW50VHlwZSkge1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOlxuICAgICAgICAgIG1hbmFnZXIgPSB0aGlzLnNraWxsTWFuYWdlcjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURTpcbiAgICAgICAgICBtYW5hZ2VyID0gdGhpcy50ZW1wbGF0ZU1hbmFnZXI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6XG4gICAgICAgICAgbWFuYWdlciA9IHRoaXMuYWdlbnRNYW5hZ2VyO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBFbGVtZW50IHR5cGUgJyR7dHlwZX0nIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGZvciB2YWxpZGF0aW9uYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBGaW5kIHRoZSBlbGVtZW50XG4gICAgICBjb25zdCBlbGVtZW50ID0gYXdhaXQgbWFuYWdlciEuZmluZCgoZTogYW55KSA9PiBlLm1ldGFkYXRhLm5hbWUgPT09IG5hbWUpO1xuICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCAke3R5cGV9ICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gUGVyZm9ybSB2YWxpZGF0aW9uXG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gZWxlbWVudC52YWxpZGF0ZSgpO1xuICAgICAgXG4gICAgICAvLyBGb3JtYXQgdmFsaWRhdGlvbiByZXBvcnRcbiAgICAgIGxldCByZXBvcnQgPSBg8J+UjSBWYWxpZGF0aW9uIFJlcG9ydCBmb3IgJHt0eXBlfSAnJHtuYW1lfSc6XFxuYDtcbiAgICAgIHJlcG9ydCArPSBgJHt2YWxpZGF0aW9uUmVzdWx0LnZhbGlkID8gJ+KchScgOiAn4p2MJ30gU3RhdHVzOiAke3ZhbGlkYXRpb25SZXN1bHQudmFsaWQgPyAnVmFsaWQnIDogJ0ludmFsaWQnfVxcblxcbmA7XG4gICAgICBcbiAgICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0LmVycm9ycyAmJiB2YWxpZGF0aW9uUmVzdWx0LmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlcG9ydCArPSBg4p2MIEVycm9ycyAoJHt2YWxpZGF0aW9uUmVzdWx0LmVycm9ycy5sZW5ndGh9KTpcXG5gO1xuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0LmVycm9ycy5mb3JFYWNoKChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgcmVwb3J0ICs9IGAgICDigKIgJHtlcnJvci5maWVsZCB8fCAnR2VuZXJhbCd9OiAke2Vycm9yLm1lc3NhZ2V9XFxuYDtcbiAgICAgICAgICBpZiAoZXJyb3IuZml4KSB7XG4gICAgICAgICAgICByZXBvcnQgKz0gYCAgICAg8J+SoSBGaXg6ICR7ZXJyb3IuZml4fVxcbmA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmVwb3J0ICs9ICdcXG4nO1xuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAodmFsaWRhdGlvblJlc3VsdC53YXJuaW5ncyAmJiB2YWxpZGF0aW9uUmVzdWx0Lndhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVwb3J0ICs9IGDimqDvuI8gIFdhcm5pbmdzICgke3ZhbGlkYXRpb25SZXN1bHQud2FybmluZ3MubGVuZ3RofSk6XFxuYDtcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdC53YXJuaW5ncy5mb3JFYWNoKCh3YXJuaW5nOiBhbnkpID0+IHtcbiAgICAgICAgICByZXBvcnQgKz0gYCAgIOKAoiAke3dhcm5pbmcuZmllbGQgfHwgJ0dlbmVyYWwnfTogJHt3YXJuaW5nLm1lc3NhZ2V9XFxuYDtcbiAgICAgICAgICBpZiAod2FybmluZy5zdWdnZXN0aW9uKSB7XG4gICAgICAgICAgICByZXBvcnQgKz0gYCAgICAg8J+SoSBTdWdnZXN0aW9uOiAke3dhcm5pbmcuc3VnZ2VzdGlvbn1cXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJlcG9ydCArPSAnXFxuJztcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKHZhbGlkYXRpb25SZXN1bHQuc3VnZ2VzdGlvbnMgJiYgdmFsaWRhdGlvblJlc3VsdC5zdWdnZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlcG9ydCArPSBg8J+SoSBTdWdnZXN0aW9uczpcXG5gO1xuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0LnN1Z2dlc3Rpb25zLmZvckVhY2goKHN1Z2dlc3Rpb246IHN0cmluZykgPT4ge1xuICAgICAgICAgIHJlcG9ydCArPSBgICAg4oCiICR7c3VnZ2VzdGlvbn1cXG5gO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQWRkIHN0cmljdCBtb2RlIGFkZGl0aW9uYWwgY2hlY2tzIGlmIHJlcXVlc3RlZFxuICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICByZXBvcnQgKz0gJ1xcbvCfk4sgU3RyaWN0IE1vZGU6IEFkZGl0aW9uYWwgcXVhbGl0eSBjaGVja3MgYXBwbGllZCc7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogcmVwb3J0XG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byB2YWxpZGF0ZSBlbGVtZW50OmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gdmFsaWRhdGUgZWxlbWVudDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgZGVsZXRlRWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGRlbGV0ZURhdGE/OiBib29sZWFufSkge1xuICAgIC8vIEVuc3VyZSBpbml0aWFsaXphdGlvbiBmb3IgdGVzdCBjb21wYXRpYmlsaXR5XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IG5hbWUsIHR5cGUsIGRlbGV0ZURhdGEgfSA9IGFyZ3M7XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIGVsZW1lbnQgdHlwZVxuICAgICAgaWYgKCFPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5pbmNsdWRlcyh0eXBlIGFzIEVsZW1lbnRUeXBlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGDinYwgSW52YWxpZCBlbGVtZW50IHR5cGU6ICR7dHlwZX1cXG5WYWxpZCB0eXBlczogJHtPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5qb2luKCcsICcpfSAob3IgbGVnYWN5IHBsdXJhbCBmb3JtczogcGVyc29uYXMsIHNraWxscywgdGVtcGxhdGVzLCBhZ2VudHMpYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEdldCB0aGUgYXBwcm9wcmlhdGUgbWFuYWdlciBiYXNlZCBvbiB0eXBlXG4gICAgICBsZXQgbWFuYWdlcjogU2tpbGxNYW5hZ2VyIHwgVGVtcGxhdGVNYW5hZ2VyIHwgQWdlbnRNYW5hZ2VyIHwgbnVsbCA9IG51bGw7XG4gICAgICBzd2l0Y2ggKHR5cGUgYXMgRWxlbWVudFR5cGUpIHtcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5TS0lMTDpcbiAgICAgICAgICBtYW5hZ2VyID0gdGhpcy5za2lsbE1hbmFnZXI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6XG4gICAgICAgICAgbWFuYWdlciA9IHRoaXMudGVtcGxhdGVNYW5hZ2VyO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLkFHRU5UOlxuICAgICAgICAgIG1hbmFnZXIgPSB0aGlzLmFnZW50TWFuYWdlcjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5QRVJTT05BOlxuICAgICAgICAgIC8vIEZvciBwZXJzb25hcywgdXNlIGEgZGlmZmVyZW50IGFwcHJvYWNoXG4gICAgICAgICAgLy8gcGVyc29uYXNEaXIgaXMgZ3VhcmFudGVlZCB0byBiZSBzZXQgYWZ0ZXIgZW5zdXJlSW5pdGlhbGl6ZWQoKVxuICAgICAgICAgIGNvbnN0IHBlcnNvbmFQYXRoID0gcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIhLCBgJHtuYW1lfS5tZGApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBmcy5hY2Nlc3MocGVyc29uYVBhdGgpO1xuICAgICAgICAgICAgYXdhaXQgZnMudW5saW5rKHBlcnNvbmFQYXRoKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gUmVsb2FkIHBlcnNvbmFzIHRvIHVwZGF0ZSB0aGUgY2FjaGVcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFBlcnNvbmFzKCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogYOKchSBTdWNjZXNzZnVsbHkgZGVsZXRlZCBwZXJzb25hICcke25hbWV9J2BcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgIHRleHQ6IGDinYwgJHt0eXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zbGljZSgxKX0gJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBFbGVtZW50IHR5cGUgJyR7dHlwZX0nIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGZvciBkZWxldGlvbmBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRW5zdXJlIG1hbmFnZXIgd2FzIGFzc2lnbmVkIChUeXBlU2NyaXB0IHR5cGUgc2FmZXR5KVxuICAgICAgaWYgKCFtYW5hZ2VyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCBFbGVtZW50IHR5cGUgJyR7dHlwZX0nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRlbGV0aW9uYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEZpbmQgdGhlIGVsZW1lbnQgZmlyc3QgdG8gY2hlY2sgaWYgaXQgZXhpc3RzXG4gICAgICBjb25zdCBlbGVtZW50ID0gYXdhaXQgbWFuYWdlciEuZmluZCgoZTogYW55KSA9PiBlLm1ldGFkYXRhLm5hbWUgPT09IG5hbWUpO1xuICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCAke3R5cGV9ICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgZm9yIGFzc29jaWF0ZWQgZGF0YSBmaWxlc1xuICAgICAgbGV0IGRhdGFGaWxlczogc3RyaW5nW10gPSBbXTtcbiAgICAgIFxuICAgICAgLy8gQWdlbnQtc3BlY2lmaWM6IENoZWNrIGZvciBzdGF0ZSBmaWxlc1xuICAgICAgaWYgKHR5cGUgPT09IEVsZW1lbnRUeXBlLkFHRU5UKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gcGF0aC5qb2luKHRoaXMucG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLkFHRU5UKSwgJy5zdGF0ZScpO1xuICAgICAgICBjb25zdCBzdGF0ZUZpbGUgPSBwYXRoLmpvaW4oc3RhdGVEaXIsIGAke25hbWV9LXN0YXRlLmpzb25gKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzdGF0ID0gYXdhaXQgZnMuc3RhdChzdGF0ZUZpbGUpO1xuICAgICAgICAgIGRhdGFGaWxlcy5wdXNoKGAtIC5zdGF0ZS8ke25hbWV9LXN0YXRlLmpzb24gKCR7KHN0YXQuc2l6ZSAvIDEwMjQpLnRvRml4ZWQoMil9IEtCKWApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIE5vIHN0YXRlIGZpbGUgZXhpc3RzLCB3aGljaCBpcyBmaW5lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gTWVtb3J5LXNwZWNpZmljOiBDaGVjayBmb3Igc3RvcmFnZSBmaWxlc1xuICAgICAgaWYgKHR5cGUgPT09IEVsZW1lbnRUeXBlLk1FTU9SWSkge1xuICAgICAgICBjb25zdCBzdG9yYWdlRGlyID0gcGF0aC5qb2luKHRoaXMucG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLk1FTU9SWSksICcuc3RvcmFnZScpO1xuICAgICAgICBjb25zdCBzdG9yYWdlRmlsZSA9IHBhdGguam9pbihzdG9yYWdlRGlyLCBgJHtuYW1lfS1tZW1vcnkuanNvbmApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHN0YXQgPSBhd2FpdCBmcy5zdGF0KHN0b3JhZ2VGaWxlKTtcbiAgICAgICAgICBkYXRhRmlsZXMucHVzaChgLSAuc3RvcmFnZS8ke25hbWV9LW1lbW9yeS5qc29uICgkeyhzdGF0LnNpemUgLyAxMDI0KS50b0ZpeGVkKDIpfSBLQilgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBObyBzdG9yYWdlIGZpbGUgZXhpc3RzLCB3aGljaCBpcyBmaW5lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRW5zZW1ibGUtc3BlY2lmaWM6IENoZWNrIGZvciBjb25maWcgZmlsZXNcbiAgICAgIGlmICh0eXBlID09PSBFbGVtZW50VHlwZS5FTlNFTUJMRSkge1xuICAgICAgICBjb25zdCBjb25maWdEaXIgPSBwYXRoLmpvaW4odGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuRU5TRU1CTEUpLCAnLmNvbmZpZ3MnKTtcbiAgICAgICAgY29uc3QgY29uZmlnRmlsZSA9IHBhdGguam9pbihjb25maWdEaXIsIGAke25hbWV9LWNvbmZpZy5qc29uYCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc3RhdCA9IGF3YWl0IGZzLnN0YXQoY29uZmlnRmlsZSk7XG4gICAgICAgICAgZGF0YUZpbGVzLnB1c2goYC0gLmNvbmZpZ3MvJHtuYW1lfS1jb25maWcuanNvbiAoJHsoc3RhdC5zaXplIC8gMTAyNCkudG9GaXhlZCgyKX0gS0IpYCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gTm8gY29uZmlnIGZpbGUgZXhpc3RzLCB3aGljaCBpcyBmaW5lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSWYgZGF0YSBmaWxlcyBleGlzdCBhbmQgZGVsZXRlRGF0YSBpcyBub3Qgc3BlY2lmaWVkLCB3ZSBuZWVkIHRvIGluZm9ybSB0aGUgdXNlclxuICAgICAgaWYgKGRhdGFGaWxlcy5sZW5ndGggPiAwICYmIGRlbGV0ZURhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGDimqDvuI8gIFRoaXMgJHt0eXBlfSBoYXMgYXNzb2NpYXRlZCBkYXRhIGZpbGVzOlxcbiR7ZGF0YUZpbGVzLmpvaW4oJ1xcbicpfVxcblxcbldvdWxkIHlvdSBsaWtlIHRvIGRlbGV0ZSB0aGVzZSBkYXRhIGZpbGVzIGFzIHdlbGw/XFxuXFxu4oCiIFRvIGRlbGV0ZSBldmVyeXRoaW5nIChlbGVtZW50ICsgZGF0YSksIHNheTogXCJZZXMsIGRlbGV0ZSBhbGwgZGF0YVwiXFxu4oCiIFRvIGtlZXAgdGhlIGRhdGEgZmlsZXMsIHNheTogXCJObywga2VlcCB0aGUgZGF0YVwiXFxu4oCiIFRvIGNhbmNlbCwgc2F5OiBcIkNhbmNlbFwiYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIERlbGV0ZSB0aGUgbWFpbiBlbGVtZW50IGZpbGVcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gYCR7c2x1Z2lmeShuYW1lKX0ubWRgO1xuICAgICAgY29uc3QgZmlsZXBhdGggPSBwYXRoLmpvaW4odGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIodHlwZSBhcyBFbGVtZW50VHlwZSksIGZpbGVuYW1lKTtcbiAgICAgIFxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMudW5saW5rKGZpbGVwYXRoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCAke3R5cGV9IGZpbGUgJyR7ZmlsZW5hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIERlbGV0ZSBhc3NvY2lhdGVkIGRhdGEgZmlsZXMgaWYgcmVxdWVzdGVkXG4gICAgICBpZiAoZGVsZXRlRGF0YSAmJiBkYXRhRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB1cGRhdGVkRGF0YUZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGUgPT09IEVsZW1lbnRUeXBlLkFHRU5UKSB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVGaWxlID0gcGF0aC5qb2luKHRoaXMucG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLkFHRU5UKSwgJy5zdGF0ZScsIGAke25hbWV9LXN0YXRlLmpzb25gKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZnMudW5saW5rKHN0YXRlRmlsZSk7XG4gICAgICAgICAgICB1cGRhdGVkRGF0YUZpbGVzLnB1c2goYCR7ZGF0YUZpbGVzWzBdfSDinJMgZGVsZXRlZGApO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBMb2cgYnV0IGRvbid0IGZhaWwgaWYgc3RhdGUgZmlsZSBkZWxldGlvbiBmYWlsc1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBkZWxldGUgYWdlbnQgc3RhdGUgZmlsZTogJHtlcnJvcn1gKTtcbiAgICAgICAgICAgIHVwZGF0ZWREYXRhRmlsZXMucHVzaChgJHtkYXRhRmlsZXNbMF19IOKaoO+4jyBkZWxldGlvbiBmYWlsZWRgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRWxlbWVudFR5cGUuTUVNT1JZKSB7XG4gICAgICAgICAgY29uc3Qgc3RvcmFnZUZpbGUgPSBwYXRoLmpvaW4odGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuTUVNT1JZKSwgJy5zdG9yYWdlJywgYCR7bmFtZX0tbWVtb3J5Lmpzb25gKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZnMudW5saW5rKHN0b3JhZ2VGaWxlKTtcbiAgICAgICAgICAgIHVwZGF0ZWREYXRhRmlsZXMucHVzaChgJHtkYXRhRmlsZXNbMF19IOKckyBkZWxldGVkYCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIExvZyBidXQgZG9uJ3QgZmFpbCBpZiBzdG9yYWdlIGZpbGUgZGVsZXRpb24gZmFpbHNcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gZGVsZXRlIG1lbW9yeSBzdG9yYWdlIGZpbGU6ICR7ZXJyb3J9YCk7XG4gICAgICAgICAgICB1cGRhdGVkRGF0YUZpbGVzLnB1c2goYCR7ZGF0YUZpbGVzWzBdfSDimqDvuI8gZGVsZXRpb24gZmFpbGVkYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEVsZW1lbnRUeXBlLkVOU0VNQkxFKSB7XG4gICAgICAgICAgY29uc3QgY29uZmlnRmlsZSA9IHBhdGguam9pbih0aGlzLnBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihFbGVtZW50VHlwZS5FTlNFTUJMRSksICcuY29uZmlncycsIGAke25hbWV9LWNvbmZpZy5qc29uYCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGZzLnVubGluayhjb25maWdGaWxlKTtcbiAgICAgICAgICAgIHVwZGF0ZWREYXRhRmlsZXMucHVzaChgJHtkYXRhRmlsZXNbMF19IOKckyBkZWxldGVkYCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIExvZyBidXQgZG9uJ3QgZmFpbCBpZiBjb25maWcgZmlsZSBkZWxldGlvbiBmYWlsc1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBkZWxldGUgZW5zZW1ibGUgY29uZmlnIGZpbGU6ICR7ZXJyb3J9YCk7XG4gICAgICAgICAgICB1cGRhdGVkRGF0YUZpbGVzLnB1c2goYCR7ZGF0YUZpbGVzWzBdfSDimqDvuI8gZGVsZXRpb24gZmFpbGVkYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBkYXRhRmlsZXMgPSB1cGRhdGVkRGF0YUZpbGVzO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBCdWlsZCBzdWNjZXNzIG1lc3NhZ2VcbiAgICAgIGxldCBtZXNzYWdlID0gYOKchSBTdWNjZXNzZnVsbHkgZGVsZXRlZCAke3R5cGV9ICcke25hbWV9J2A7XG4gICAgICBpZiAoZGF0YUZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKGRlbGV0ZURhdGEpIHtcbiAgICAgICAgICBtZXNzYWdlICs9IGBcXG5cXG5Bc3NvY2lhdGVkIGRhdGEgZmlsZXM6XFxuJHtkYXRhRmlsZXMuam9pbignXFxuJyl9YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZXNzYWdlICs9IGBcXG5cXG7imqDvuI8gQXNzb2NpYXRlZCBkYXRhIGZpbGVzIHdlcmUgcHJlc2VydmVkOlxcbiR7ZGF0YUZpbGVzLmpvaW4oJ1xcbicpfWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBtZXNzYWdlXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGRlbGV0ZSBlbGVtZW50OmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gZGVsZXRlIGVsZW1lbnQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBjaGVja1JhdGVMaW1pdCBhbmQgZmV0Y2hGcm9tR2l0SHViIGFyZSBub3cgaGFuZGxlZCBieSBHaXRIdWJDbGllbnRcblxuICBhc3luYyBicm93c2VDb2xsZWN0aW9uKHNlY3Rpb24/OiBzdHJpbmcsIHR5cGU/OiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gRklYICM0NzE6IFJlcGxhY2UgbGVnYWN5IGNhdGVnb3J5IHZhbGlkYXRpb24gd2l0aCBwcm9wZXIgc2VjdGlvbi90eXBlIHZhbGlkYXRpb25cbiAgICAgIC8vIFZhbGlkIHNlY3Rpb25zOiBsaWJyYXJ5LCBzaG93Y2FzZSwgY2F0YWxvZ1xuICAgICAgLy8gVmFsaWQgdHlwZXMgZm9yIE1DUDogcGVyc29uYXMsIHNraWxscywgYWdlbnRzLCB0ZW1wbGF0ZXMgKG90aGVycyBmaWx0ZXJlZCBwZXIgSXNzdWUgIzE0NClcbiAgICAgIC8vIE5vdGU6IHRvb2xzLCBwcm9tcHRzLCBlbnNlbWJsZXMsIG1lbW9yaWVzIGV4aXN0IGluIGNvbGxlY3Rpb24gYnV0IGFyZSBmaWx0ZXJlZCBmcm9tIE1DUFxuICAgICAgY29uc3QgdmFsaWRTZWN0aW9ucyA9IFsnbGlicmFyeScsICdzaG93Y2FzZScsICdjYXRhbG9nJ107XG4gICAgICBcbiAgICAgIC8vIOKaoO+4jyBDUklUSUNBTDogV2hlbiBhZGRpbmcgbmV3IGVsZW1lbnQgdHlwZXMsIHlvdSBNVVNUIHVwZGF0ZSB0aGlzIGFycmF5IVxuICAgICAgLy8gU2VlIGRvY3MvZGV2ZWxvcG1lbnQvQURESU5HX05FV19FTEVNRU5UX1RZUEVTX0NIRUNLTElTVC5tZCBmb3IgY29tcGxldGUgY2hlY2tsaXN0XG4gICAgICAvLyBUaGlzIGFycmF5IGlzIG9mdGVuIGZvcmdvdHRlbiBhbmQgY2F1c2VzIHZhbGlkYXRpb24gZmFpbHVyZXMgZm9yIG5ldyB0eXBlc1xuICAgICAgY29uc3QgdmFsaWRUeXBlcyA9IFsncGVyc29uYXMnLCAnc2tpbGxzJywgJ2FnZW50cycsICd0ZW1wbGF0ZXMnXTsgIC8vIE9ubHkgTUNQLXN1cHBvcnRlZCB0eXBlc1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSBzZWN0aW9uIGlmIHByb3ZpZGVkXG4gICAgICBjb25zdCB2YWxpZGF0ZWRTZWN0aW9uID0gc2VjdGlvbiA/IHNhbml0aXplSW5wdXQoc2VjdGlvbi50b0xvd2VyQ2FzZSgpLCAxMDApIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKHZhbGlkYXRlZFNlY3Rpb24gJiYgIXZhbGlkU2VjdGlvbnMuaW5jbHVkZXModmFsaWRhdGVkU2VjdGlvbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNlY3Rpb24gJyR7dmFsaWRhdGVkU2VjdGlvbn0nLiBNdXN0IGJlIG9uZSBvZjogJHt2YWxpZFNlY3Rpb25zLmpvaW4oJywgJyl9YCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIHR5cGUgaWYgcHJvdmlkZWQgKG9ubHkgdmFsaWQgd2hlbiBzZWN0aW9uIGlzICdsaWJyYXJ5JylcbiAgICAgIGNvbnN0IHZhbGlkYXRlZFR5cGUgPSB0eXBlID8gc2FuaXRpemVJbnB1dCh0eXBlLnRvTG93ZXJDYXNlKCksIDEwMCkgOiB1bmRlZmluZWQ7XG4gICAgICBpZiAodmFsaWRhdGVkVHlwZSAmJiB2YWxpZGF0ZWRTZWN0aW9uID09PSAnbGlicmFyeScgJiYgIXZhbGlkVHlwZXMuaW5jbHVkZXModmFsaWRhdGVkVHlwZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHR5cGUgJyR7dmFsaWRhdGVkVHlwZX0nLiBNdXN0IGJlIG9uZSBvZjogJHt2YWxpZFR5cGVzLmpvaW4oJywgJyl9YCk7XG4gICAgICB9XG4gICAgICBpZiAodmFsaWRhdGVkVHlwZSAmJiB2YWxpZGF0ZWRTZWN0aW9uICE9PSAnbGlicmFyeScpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUeXBlIHBhcmFtZXRlciBpcyBvbmx5IHZhbGlkIHdoZW4gc2VjdGlvbiBpcyBcImxpYnJhcnlcIicpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb25Ccm93c2VyLmJyb3dzZUNvbGxlY3Rpb24odmFsaWRhdGVkU2VjdGlvbiwgdmFsaWRhdGVkVHlwZSk7XG4gICAgICBcbiAgICAgIC8vIEhhbmRsZSBzZWN0aW9ucyB2aWV3XG4gICAgICBjb25zdCBpdGVtcyA9IHJlc3VsdC5pdGVtcztcbiAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSByZXN1bHQuc2VjdGlvbnMgfHwgcmVzdWx0LmNhdGVnb3JpZXM7XG4gICAgICBcbiAgICAgIGNvbnN0IHRleHQgPSB0aGlzLmNvbGxlY3Rpb25Ccm93c2VyLmZvcm1hdEJyb3dzZVJlc3VsdHMoXG4gICAgICAgIGl0ZW1zLCBcbiAgICAgICAgY2F0ZWdvcmllcywgXG4gICAgICAgIHZhbGlkYXRlZFNlY3Rpb24sIFxuICAgICAgICB2YWxpZGF0ZWRUeXBlLCBcbiAgICAgICAgdGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKClcbiAgICAgICk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IHRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IHNhbml0aXplZCA9IFNlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBDb2xsZWN0aW9uIGJyb3dzaW5nIGZhaWxlZDogJHtzYW5pdGl6ZWQubWVzc2FnZX1gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlYXJjaENvbGxlY3Rpb24ocXVlcnk6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAvLyBFbmhhbmNlZCBpbnB1dCB2YWxpZGF0aW9uIGZvciBzZWFyY2ggcXVlcnlcbiAgICAgIGNvbnN0IHZhbGlkYXRlZFF1ZXJ5ID0gTUNQSW5wdXRWYWxpZGF0b3IudmFsaWRhdGVTZWFyY2hRdWVyeShxdWVyeSk7XG4gICAgICBcbiAgICAgIGNvbnN0IGl0ZW1zID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uU2VhcmNoLnNlYXJjaENvbGxlY3Rpb24odmFsaWRhdGVkUXVlcnkpO1xuICAgICAgY29uc3QgdGV4dCA9IHRoaXMuY29sbGVjdGlvblNlYXJjaC5mb3JtYXRTZWFyY2hSZXN1bHRzKGl0ZW1zLCB2YWxpZGF0ZWRRdWVyeSwgdGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCkpO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBzYW5pdGl6ZWQgPSBTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgRXJyb3Igc2VhcmNoaW5nIGNvbGxlY3Rpb246ICR7c2FuaXRpemVkLm1lc3NhZ2V9YCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZWFyY2hDb2xsZWN0aW9uRW5oYW5jZWQocXVlcnk6IHN0cmluZywgb3B0aW9uczogYW55ID0ge30pIHtcbiAgICB0cnkge1xuICAgICAgLy8gRW5oYW5jZWQgaW5wdXQgdmFsaWRhdGlvbiBmb3Igc2VhcmNoIHF1ZXJ5XG4gICAgICBjb25zdCB2YWxpZGF0ZWRRdWVyeSA9IE1DUElucHV0VmFsaWRhdG9yLnZhbGlkYXRlU2VhcmNoUXVlcnkocXVlcnkpO1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSBhbmQgc2FuaXRpemUgb3B0aW9uc1xuICAgICAgY29uc3QgdmFsaWRhdGVkT3B0aW9ucyA9IHtcbiAgICAgICAgZWxlbWVudFR5cGU6IG9wdGlvbnMuZWxlbWVudFR5cGUgPyBTdHJpbmcob3B0aW9ucy5lbGVtZW50VHlwZSkgOiB1bmRlZmluZWQsXG4gICAgICAgIGNhdGVnb3J5OiBvcHRpb25zLmNhdGVnb3J5ID8gU3RyaW5nKG9wdGlvbnMuY2F0ZWdvcnkpIDogdW5kZWZpbmVkLFxuICAgICAgICBwYWdlOiBvcHRpb25zLnBhZ2UgPyBNYXRoLm1heCgxLCBwYXJzZUludChvcHRpb25zLnBhZ2UpIHx8IDEpIDogMSxcbiAgICAgICAgcGFnZVNpemU6IG9wdGlvbnMucGFnZVNpemUgPyBNYXRoLm1pbigxMDAsIE1hdGgubWF4KDEsIHBhcnNlSW50KG9wdGlvbnMucGFnZVNpemUpIHx8IDI1KSkgOiAyNSxcbiAgICAgICAgc29ydEJ5OiBvcHRpb25zLnNvcnRCeSAmJiBbJ3JlbGV2YW5jZScsICduYW1lJywgJ2RhdGUnXS5pbmNsdWRlcyhvcHRpb25zLnNvcnRCeSkgPyBvcHRpb25zLnNvcnRCeSA6ICdyZWxldmFuY2UnXG4gICAgICB9O1xuICAgICAgXG4gICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uU2VhcmNoLnNlYXJjaENvbGxlY3Rpb25XaXRoT3B0aW9ucyh2YWxpZGF0ZWRRdWVyeSwgdmFsaWRhdGVkT3B0aW9ucyk7XG4gICAgICBjb25zdCB0ZXh0ID0gdGhpcy5jb2xsZWN0aW9uU2VhcmNoLmZvcm1hdFNlYXJjaFJlc3VsdHNXaXRoUGFnaW5hdGlvbihyZXN1bHRzLCB0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKSk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IHRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IHNhbml0aXplZCA9IFNlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBFcnJvciBzZWFyY2hpbmcgY29sbGVjdGlvbjogJHtzYW5pdGl6ZWQubWVzc2FnZX1gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldENvbGxlY3Rpb25Db250ZW50KHBhdGg6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IG1ldGFkYXRhLCBjb250ZW50IH0gPSBhd2FpdCB0aGlzLnBlcnNvbmFEZXRhaWxzLmdldENvbGxlY3Rpb25Db250ZW50KHBhdGgpO1xuICAgICAgY29uc3QgdGV4dCA9IHRoaXMucGVyc29uYURldGFpbHMuZm9ybWF0UGVyc29uYURldGFpbHMobWV0YWRhdGEsIGNvbnRlbnQsIHBhdGgsIHRoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogdGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3Qgc2FuaXRpemVkID0gU2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEVycm9yIGZldGNoaW5nIGNvbnRlbnQ6ICR7c2FuaXRpemVkLm1lc3NhZ2V9YCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbnN0YWxsQ29udGVudChpbnB1dFBhdGg6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmVsZW1lbnRJbnN0YWxsZXIuaW5zdGFsbENvbnRlbnQoaW5wdXRQYXRoKTtcbiAgICAgIFxuICAgICAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDimqDvuI8gJHtyZXN1bHQubWVzc2FnZX1gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBJZiBpdCdzIGEgcGVyc29uYSwgcmVsb2FkIHBlcnNvbmFzXG4gICAgICBpZiAocmVzdWx0LmVsZW1lbnRUeXBlID09PSBFbGVtZW50VHlwZS5QRVJTT05BKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZFBlcnNvbmFzKCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IHRleHQgPSB0aGlzLmVsZW1lbnRJbnN0YWxsZXIuZm9ybWF0SW5zdGFsbFN1Y2Nlc3MoXG4gICAgICAgIHJlc3VsdC5tZXRhZGF0YSEsIFxuICAgICAgICByZXN1bHQuZmlsZW5hbWUhLFxuICAgICAgICByZXN1bHQuZWxlbWVudFR5cGUhXG4gICAgICApO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBzYW5pdGl6ZWQgPSBTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgRXJyb3IgaW5zdGFsbGluZyBBSSBjdXN0b21pemF0aW9uIGVsZW1lbnQ6ICR7c2FuaXRpemVkLm1lc3NhZ2V9YCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdWJtaXRDb250ZW50KGNvbnRlbnRJZGVudGlmaWVyOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gVXNlIHRoZSBuZXcgcG9ydGZvbGlvLWJhc2VkIHN1Ym1pc3Npb24gdG9vbFxuICAgICAgY29uc3QgeyBTdWJtaXRUb1BvcnRmb2xpb1Rvb2wgfSA9IGF3YWl0IGltcG9ydCgnLi90b29scy9wb3J0Zm9saW8vc3VibWl0VG9Qb3J0Zm9saW9Ub29sLmpzJyk7XG4gICAgICBjb25zdCB7IEZpbGVEaXNjb3ZlcnlVdGlsIH0gPSBhd2FpdCBpbXBvcnQoJy4vdXRpbHMvRmlsZURpc2NvdmVyeVV0aWwuanMnKTtcbiAgICAgIGNvbnN0IHN1Ym1pdFRvb2wgPSBuZXcgU3VibWl0VG9Qb3J0Zm9saW9Ub29sKHRoaXMuYXBpQ2FjaGUpO1xuICAgIFxuICAgIC8vIFRyeSB0byBmaW5kIHRoZSBjb250ZW50IGFjcm9zcyBhbGwgZWxlbWVudCB0eXBlc1xuICAgIGNvbnN0IHBvcnRmb2xpb01hbmFnZXIgPSBQb3J0Zm9saW9NYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgbGV0IGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgZm91bmRQYXRoOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBcbiAgICAvLyBQRVJGT1JNQU5DRSBPUFRJTUlaQVRJT046IFNlYXJjaCBhbGwgZWxlbWVudCBkaXJlY3RvcmllcyBpbiBwYXJhbGxlbFxuICAgIC8vIE5PVEU6IFRoaXMgZHluYW1pY2FsbHkgaGFuZGxlcyBBTEwgZWxlbWVudCB0eXBlcyBmcm9tIHRoZSBFbGVtZW50VHlwZSBlbnVtXG4gICAgLy8gTm8gaGFyZGNvZGVkIGNvdW50IC0gaWYgeW91IGFkZCAxMCBtb3JlIGVsZW1lbnQgdHlwZXMgdG9tb3Jyb3csIHRoaXMgY29kZVxuICAgIC8vIHdpbGwgYXV0b21hdGljYWxseSBzZWFyY2ggYWxsIDE2IHR5cGVzIHdpdGhvdXQgYW55IGNoYW5nZXMgbmVlZGVkIGhlcmVcbiAgICBjb25zdCBzZWFyY2hQcm9taXNlcyA9IE9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLm1hcChhc3luYyAodHlwZSkgPT4ge1xuICAgICAgY29uc3QgZGlyID0gcG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKHR5cGUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IEZpbGVEaXNjb3ZlcnlVdGlsLmZpbmRGaWxlKGRpciwgY29udGVudElkZW50aWZpZXIsIHtcbiAgICAgICAgICBleHRlbnNpb25zOiBbJy5tZCcsICcuanNvbicsICcueWFtbCcsICcueW1sJ10sXG4gICAgICAgICAgcGFydGlhbE1hdGNoOiB0cnVlLFxuICAgICAgICAgIGNhY2hlUmVzdWx0czogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiBmaWxlID8geyB0eXBlOiB0eXBlIGFzIEVsZW1lbnRUeXBlLCBmaWxlIH0gOiBudWxsO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAvLyBJTVBST1ZFRCBFUlJPUiBIQU5ETElORzogTG9nIHdhcm5pbmdzIGZvciB1bmV4cGVjdGVkIGVycm9yc1xuICAgICAgICBpZiAoZXJyb3I/LmNvZGUgIT09ICdFTk9FTlQnICYmIGVycm9yPy5jb2RlICE9PSAnRU5PVERJUicpIHtcbiAgICAgICAgICAvLyBOb3QganVzdCBhIG1pc3NpbmcgZGlyZWN0b3J5IC0gdGhpcyBjb3VsZCBiZSBhIHBlcm1pc3Npb24gaXNzdWUgb3Igb3RoZXIgcHJvYmxlbVxuICAgICAgICAgIGxvZ2dlci53YXJuKGBVbmV4cGVjdGVkIGVycm9yIHNlYXJjaGluZyAke3R5cGV9IGRpcmVjdG9yeWAsIHsgXG4gICAgICAgICAgICBjb250ZW50SWRlbnRpZmllcixcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3I/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVycm9yKSxcbiAgICAgICAgICAgIGNvZGU6IGVycm9yPy5jb2RlIFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERpcmVjdG9yeSBkb2Vzbid0IGV4aXN0IC0gdGhpcyBpcyBleHBlY3RlZCBmb3IgdW51c2VkIGVsZW1lbnQgdHlwZXNcbiAgICAgICAgICBsb2dnZXIuZGVidWcoYCR7dHlwZX0gZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LCBza2lwcGluZ2AsIHsgdHlwZSB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvLyBXYWl0IGZvciBhbGwgc2VhcmNoZXMgdG8gY29tcGxldGUgYW5kIGZpbmQgdGhlIGZpcnN0IG1hdGNoXG4gICAgY29uc3Qgc2VhcmNoUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChzZWFyY2hQcm9taXNlcyk7XG4gICAgXG4gICAgLy8gTk9URTogRmlsZSB2YWxpZGF0aW9uIC0gd2UgcmVseSBvbiB0aGUgcG9ydGZvbGlvIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgdG8gZW5zdXJlXG4gICAgLy8gZmlsZXMgYXJlIGluIHRoZSBjb3JyZWN0IGVsZW1lbnQgdHlwZSBkaXJlY3RvcnkuIEFkZGl0aW9uYWwgc2NoZW1hIHZhbGlkYXRpb25cbiAgICAvLyBjb3VsZCBiZSBhZGRlZCBoZXJlIGlmIG5lZWRlZCwgYnV0IHRoZSBjdXJyZW50IGFwcHJvYWNoIGlzIHN1ZmZpY2llbnQgYXM6XG4gICAgLy8gMS4gRmlsZURpc2NvdmVyeVV0aWwgYWxyZWFkeSB2YWxpZGF0ZXMgZmlsZSBleHRlbnNpb25zXG4gICAgLy8gMi4gUG9ydGZvbGlvIHN0cnVjdHVyZSBlbmZvcmNlcyBwcm9wZXIgb3JnYW5pemF0aW9uXG4gICAgLy8gMy4gc3VibWl0VG9Qb3J0Zm9saW9Ub29sIHBlcmZvcm1zIGFkZGl0aW9uYWwgdmFsaWRhdGlvbiBkb3duc3RyZWFtXG4gICAgZm9yIChjb25zdCByZXN1bHQgb2Ygc2VhcmNoUmVzdWx0cykge1xuICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnICYmIHJlc3VsdC52YWx1ZSkge1xuICAgICAgICBmb3VuZFBhdGggPSByZXN1bHQudmFsdWUuZmlsZTtcbiAgICAgICAgZWxlbWVudFR5cGUgPSByZXN1bHQudmFsdWUudHlwZTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBGb3VuZCBjb250ZW50IGluICR7ZWxlbWVudFR5cGV9IGRpcmVjdG9yeWAsIHsgXG4gICAgICAgICAgY29udGVudElkZW50aWZpZXIsIFxuICAgICAgICAgIHR5cGU6IGVsZW1lbnRUeXBlLCBcbiAgICAgICAgICBmaWxlOiBmb3VuZFBhdGggXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gQ1JJVElDQUwgRklYOiBOZXZlciBkZWZhdWx0IHRvIGFueSBlbGVtZW50IHR5cGUgd2hlbiBjb250ZW50IGlzIG5vdCBmb3VuZFxuICAgIC8vIFRoaXMgcHJldmVudHMgaW5jb3JyZWN0IHN1Ym1pc3Npb25zIGFuZCBmb3JjZXMgcHJvcGVyIHR5cGUgZGV0ZWN0aW9uIG9yIHVzZXIgc3BlY2lmaWNhdGlvblxuICAgIGlmICghZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIENvbnRlbnQgbm90IGZvdW5kIGluIGFueSBlbGVtZW50IGRpcmVjdG9yeSAtIHByb3ZpZGUgaGVscGZ1bCBlcnJvciB3aXRoIHN1Z2dlc3Rpb25zXG4gICAgICBjb25zdCBhdmFpbGFibGVUeXBlcyA9IE9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmpvaW4oJywgJyk7XG4gICAgICBsb2dnZXIud2FybihgQ29udGVudCBcIiR7Y29udGVudElkZW50aWZpZXJ9XCIgbm90IGZvdW5kIGluIGFueSBwb3J0Zm9saW8gZGlyZWN0b3J5YCwgeyBcbiAgICAgICAgY29udGVudElkZW50aWZpZXIsXG4gICAgICAgIHNlYXJjaGVkVHlwZXM6IE9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpIFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIFVYIElNUFJPVkVNRU5UOiBFbmhhbmNlZCBlcnJvciBtZXNzYWdlIHdpdGggc21hcnQgc3VnZ2VzdGlvbnNcbiAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBg4p2MIENvbnRlbnQgXCIke2NvbnRlbnRJZGVudGlmaWVyfVwiIG5vdCBmb3VuZCBpbiBwb3J0Zm9saW8uXFxuXFxuYDtcbiAgICAgIGVycm9yTWVzc2FnZSArPSBg8J+UjSAqKlNlYXJjaGVkIGFjcm9zcyBhbGwgZWxlbWVudCB0eXBlcyoqOiAke2F2YWlsYWJsZVR5cGVzfVxcblxcbmA7XG4gICAgICBcbiAgICAgIC8vIFRyeSB0byBwcm92aWRlIHNtYXJ0IHN1Z2dlc3Rpb25zIGJhc2VkIG9uIHBhcnRpYWwgbWF0Y2hlc1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBGaWxlRGlzY292ZXJ5VXRpbCB9ID0gYXdhaXQgaW1wb3J0KCcuL3V0aWxzL0ZpbGVEaXNjb3ZlcnlVdGlsLmpzJyk7XG4gICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBcbiAgICAgICAgLy8gU2VhcmNoIGZvciBzaW1pbGFyIG5hbWVzIGFjcm9zcyBhbGwgZWxlbWVudCB0eXBlc1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnRUeXBlIG9mIE9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpKSB7XG4gICAgICAgICAgY29uc3QgZGlyID0gcG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKGVsZW1lbnRUeXBlKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcGFydGlhbE1hdGNoZXMgPSBhd2FpdCBGaWxlRGlzY292ZXJ5VXRpbC5maW5kRmlsZShkaXIsIGNvbnRlbnRJZGVudGlmaWVyLCB7XG4gICAgICAgICAgICAgIGV4dGVuc2lvbnM6IFsnLm1kJywgJy5qc29uJywgJy55YW1sJywgJy55bWwnXSxcbiAgICAgICAgICAgICAgcGFydGlhbE1hdGNoOiB0cnVlLFxuICAgICAgICAgICAgICBjYWNoZVJlc3VsdHM6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFydGlhbE1hdGNoZXMpICYmIHBhcnRpYWxNYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBtYXRjaCBvZiBwYXJ0aWFsTWF0Y2hlcy5zbGljZSgwLCAyKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2VuYW1lID0gcGF0aC5iYXNlbmFtZShtYXRjaCwgcGF0aC5leHRuYW1lKG1hdGNoKSk7XG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMucHVzaChgXCIke2Jhc2VuYW1lfVwiICgke2VsZW1lbnRUeXBlfSlgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0aWFsTWF0Y2hlcykge1xuICAgICAgICAgICAgICBjb25zdCBiYXNlbmFtZSA9IHBhdGguYmFzZW5hbWUocGFydGlhbE1hdGNoZXMsIHBhdGguZXh0bmFtZShwYXJ0aWFsTWF0Y2hlcykpO1xuICAgICAgICAgICAgICBzdWdnZXN0aW9ucy5wdXNoKGBcIiR7YmFzZW5hbWV9XCIgKCR7ZWxlbWVudFR5cGV9KWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBTa2lwIHRoaXMgdHlwZSBpZiB0aGVyZSdzIGFuIGVycm9yXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmIChzdWdnZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZXJyb3JNZXNzYWdlICs9IGDwn5KhICoqRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZT8qKlxcbmA7XG4gICAgICAgICAgZm9yIChjb25zdCBzdWdnZXN0aW9uIG9mIHN1Z2dlc3Rpb25zLnNsaWNlKDAsIDUpKSB7XG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gYCAg4oCiICR7c3VnZ2VzdGlvbn1cXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gYFxcbmA7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKHN1Z2dlc3Rpb25FcnJvcikge1xuICAgICAgICAvLyBJZiBzdWdnZXN0aW9ucyBmYWlsLCBjb250aW51ZSB3aXRob3V0IHRoZW1cbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdGYWlsZWQgdG8gZ2VuZXJhdGUgc3VnZ2VzdGlvbnMnLCB7IHN1Z2dlc3Rpb25FcnJvciB9KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgZXJyb3JNZXNzYWdlICs9IGDwn5ug77iPICoqU3RlcC1ieS1zdGVwIHRyb3VibGVzaG9vdGluZyoqOlxcbmA7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYDEuIPCfk50gKipMaXN0IGFsbCBjb250ZW50Kio6IFVzZSBcXGBsaXN0X3BvcnRmb2xpb1xcYCB0byBzZWUgd2hhdCdzIGF2YWlsYWJsZVxcbmA7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYDIuIPCflI0gKipDaGVjayBzcGVsbGluZyoqOiBWZXJpZnkgdGhlIGV4YWN0IG5hbWUgYW5kIHRyeSB2YXJpYXRpb25zXFxuYDtcbiAgICAgIGVycm9yTWVzc2FnZSArPSBgMy4g8J+OryAqKlNwZWNpZnkgdHlwZSoqOiBUcnkgXFxgc3VibWl0X2NvbnRlbnQgXCIke2NvbnRlbnRJZGVudGlmaWVyfVwiIC0tdHlwZT1wZXJzb25hc1xcYFxcbmA7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYDQuIPCfk4EgKipCcm93c2UgZmlsZXMqKjogQ2hlY2sgeW91ciBwb3J0Zm9saW8gZGlyZWN0b3J5IG1hbnVhbGx5XFxuXFxuYDtcbiAgICAgIGVycm9yTWVzc2FnZSArPSBg8J+TnSAqKlRpcCoqOiBUaGUgc3lzdGVtIHNlYXJjaGVzIGJvdGggZmlsZW5hbWVzIGFuZCBkaXNwbGF5IG5hbWVzIHdpdGggZnV6enkgbWF0Y2hpbmcuYDtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogZXJyb3JNZXNzYWdlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBmb3IgZHVwbGljYXRlcyBhY3Jvc3MgYWxsIHNvdXJjZXMgYmVmb3JlIHN1Ym1pc3Npb25cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBVbmlmaWVkSW5kZXhNYW5hZ2VyIH0gPSBhd2FpdCBpbXBvcnQoJy4vcG9ydGZvbGlvL1VuaWZpZWRJbmRleE1hbmFnZXIuanMnKTtcbiAgICAgIGNvbnN0IHVuaWZpZWRNYW5hZ2VyID0gVW5pZmllZEluZGV4TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgICAgXG4gICAgICAvLyBFeHRyYWN0IHRoZSBhY3R1YWwgZWxlbWVudCBuYW1lIGZyb20gdGhlIGNvbnRlbnQgcGF0aFxuICAgICAgY29uc3QgYmFzZW5hbWUgPSBwYXRoLmJhc2VuYW1lKGZvdW5kUGF0aCEsIHBhdGguZXh0bmFtZShmb3VuZFBhdGghKSk7XG4gICAgICBjb25zdCBkdXBsaWNhdGVzID0gYXdhaXQgdW5pZmllZE1hbmFnZXIuY2hlY2tEdXBsaWNhdGVzKGJhc2VuYW1lKTtcbiAgICAgIFxuICAgICAgaWYgKGR1cGxpY2F0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBkdXBsaWNhdGUgPSBkdXBsaWNhdGVzWzBdO1xuICAgICAgICBsZXQgd2FybmluZ1RleHQgPSBg4pqg77iPICoqRHVwbGljYXRlIERldGVjdGlvbiBBbGVydCoqXFxuXFxuYDtcbiAgICAgICAgd2FybmluZ1RleHQgKz0gYEZvdW5kIFwiJHtkdXBsaWNhdGUubmFtZX1cIiBpbiBtdWx0aXBsZSBzb3VyY2VzOlxcblxcbmA7XG4gICAgICAgIFxuICAgICAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBkdXBsaWNhdGUuc291cmNlcykge1xuICAgICAgICAgIGNvbnN0IHNvdXJjZUljb24gPSB0aGlzLmdldFNvdXJjZUljb24oc291cmNlLnNvdXJjZSk7XG4gICAgICAgICAgd2FybmluZ1RleHQgKz0gYCR7c291cmNlSWNvbn0gKioke3NvdXJjZS5zb3VyY2V9Kio6ICR7c291cmNlLnZlcnNpb24gfHwgJ3Vua25vd24gdmVyc2lvbid9ICgke3NvdXJjZS5sYXN0TW9kaWZpZWQudG9Mb2NhbGVEYXRlU3RyaW5nKCl9KVxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHdhcm5pbmdUZXh0ICs9IGBcXG5gO1xuICAgICAgICBcbiAgICAgICAgaWYgKGR1cGxpY2F0ZS5oYXNWZXJzaW9uQ29uZmxpY3QgJiYgZHVwbGljYXRlLnZlcnNpb25Db25mbGljdCkge1xuICAgICAgICAgIHdhcm5pbmdUZXh0ICs9IGDwn5SEICoqVmVyc2lvbiBDb25mbGljdCBEZXRlY3RlZCoqXFxuYDtcbiAgICAgICAgICB3YXJuaW5nVGV4dCArPSBgUmVjb21tZW5kZWQgc291cmNlOiAqKiR7ZHVwbGljYXRlLnZlcnNpb25Db25mbGljdC5yZWNvbW1lbmRlZH0qKlxcbmA7XG4gICAgICAgICAgd2FybmluZ1RleHQgKz0gYFJlYXNvbjogJHtkdXBsaWNhdGUudmVyc2lvbkNvbmZsaWN0LnJlYXNvbn1cXG5cXG5gO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB3YXJuaW5nVGV4dCArPSBgKipSZWNvbW1lbmRhdGlvbnM6KipcXG5gO1xuICAgICAgICB3YXJuaW5nVGV4dCArPSBg4oCiIFJldmlldyBleGlzdGluZyB2ZXJzaW9ucyBiZWZvcmUgc3VibWl0dGluZ1xcbmA7XG4gICAgICAgIHdhcm5pbmdUZXh0ICs9IGDigKIgQ29uc2lkZXIgdXBkYXRpbmcgbG9jYWwgdmVyc2lvbiBpbnN0ZWFkIG9mIGNyZWF0aW5nIGR1cGxpY2F0ZVxcbmA7XG4gICAgICAgIHdhcm5pbmdUZXh0ICs9IGDigKIgRW5zdXJlIHlvdXIgdmVyc2lvbiBhZGRzIG1lYW5pbmdmdWwgaW1wcm92ZW1lbnRzXFxuYDtcbiAgICAgICAgd2FybmluZ1RleHQgKz0gYOKAoiBVcGRhdGUgdmVyc2lvbiBudW1iZXIgaW4gbWV0YWRhdGEgaWYgc3VibWl0dGluZyBlbmhhbmNlbWVudFxcblxcbmA7XG4gICAgICAgIHdhcm5pbmdUZXh0ICs9IGAqKlByb2NlZWRpbmcgd2l0aCBzdWJtaXNzaW9uIGFueXdheS4uLioqXFxuXFxuYDtcbiAgICAgICAgXG4gICAgICAgIC8vIExvZyB0aGUgZHVwbGljYXRlIGRldGVjdGlvbiBmb3IgbW9uaXRvcmluZ1xuICAgICAgICBsb2dnZXIud2FybignRHVwbGljYXRlIGNvbnRlbnQgZGV0ZWN0ZWQgZHVyaW5nIHN1Ym1pc3Npb24nLCB7XG4gICAgICAgICAgY29udGVudElkZW50aWZpZXIsXG4gICAgICAgICAgZWxlbWVudFR5cGUsXG4gICAgICAgICAgZHVwbGljYXRlSW5mbzogZHVwbGljYXRlXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gQ29udGludWUgd2l0aCBzdWJtaXNzaW9uIGJ1dCBzaG93IHdhcm5pbmdcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3VibWl0VG9vbC5leGVjdXRlKHtcbiAgICAgICAgICBuYW1lOiBjb250ZW50SWRlbnRpZmllcixcbiAgICAgICAgICB0eXBlOiBlbGVtZW50VHlwZVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIENvbWJpbmUgd2FybmluZyB3aXRoIHN1Ym1pc3Npb24gcmVzdWx0XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlVGV4dCA9IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfSR7cmVzdWx0LnN1Y2Nlc3MgPyAn4pqg77iPJyA6ICfinYwnfSAke3dhcm5pbmdUZXh0fSR7cmVzdWx0Lm1lc3NhZ2V9YDtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogcmVzcG9uc2VUZXh0LFxuICAgICAgICAgIH1dLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGR1cGxpY2F0ZUVycm9yKSB7XG4gICAgICAvLyBJZiBkdXBsaWNhdGUgY2hlY2tpbmcgZmFpbHMsIGxvZyBidXQgY29udGludWUgd2l0aCBzdWJtaXNzaW9uXG4gICAgICBsb2dnZXIud2FybignRHVwbGljYXRlIGNoZWNraW5nIGZhaWxlZCBkdXJpbmcgc3VibWlzc2lvbicsIHtcbiAgICAgICAgY29udGVudElkZW50aWZpZXIsXG4gICAgICAgIGVycm9yOiBkdXBsaWNhdGVFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZHVwbGljYXRlRXJyb3IubWVzc2FnZSA6IFN0cmluZyhkdXBsaWNhdGVFcnJvcilcbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICAvLyBFeGVjdXRlIHRoZSBzdWJtaXNzaW9uIHdpdGggdGhlIGRldGVjdGVkIGVsZW1lbnQgdHlwZVxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN1Ym1pdFRvb2wuZXhlY3V0ZSh7XG4gICAgICBuYW1lOiBjb250ZW50SWRlbnRpZmllcixcbiAgICAgIHR5cGU6IGVsZW1lbnRUeXBlXG4gICAgfSk7XG4gICAgXG4gICAgLy8gRm9ybWF0IHRoZSByZXNwb25zZSAtIHRoZSBtZXNzYWdlIGFscmVhZHkgY29udGFpbnMgYWxsIGRldGFpbHNcbiAgICBsZXQgcmVzcG9uc2VUZXh0ID0gcmVzdWx0Lm1lc3NhZ2U7XG4gICAgXG4gICAgLy8gQWRkIHBlcnNvbmEgaW5kaWNhdG9yIGZvciBjb25zaXN0ZW5jeVxuICAgIHJlc3BvbnNlVGV4dCA9IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfSR7cmVzdWx0LnN1Y2Nlc3MgPyAn4pyFJyA6ICfinYwnfSAke3Jlc3BvbnNlVGV4dH1gO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiByZXNwb25zZVRleHQsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gICAgXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgLy8gVVggSU1QUk9WRU1FTlQ6IENvbXByZWhlbnNpdmUgZXJyb3IgaGFuZGxpbmcgd2l0aCBmYWxsYmFjayBzdWdnZXN0aW9uc1xuICAgICAgbG9nZ2VyLmVycm9yKCdVbmV4cGVjdGVkIGVycm9yIGluIHN1Ym1pdENvbnRlbnQnLCB7XG4gICAgICAgIGNvbnRlbnRJZGVudGlmaWVyLFxuICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgc3RhY2s6IGVycm9yLnN0YWNrXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKlN1Ym1pc3Npb24gRmFpbGVkKipcXG5cXG5gO1xuICAgICAgZXJyb3JNZXNzYWdlICs9IGDwn5qoICoqRXJyb3IqKjogJHtlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yIG9jY3VycmVkJ31cXG5cXG5gO1xuICAgICAgXG4gICAgICAvLyBQcm92aWRlIGNvbnRleHR1YWwgdHJvdWJsZXNob290aW5nIGJhc2VkIG9uIGVycm9yIHR5cGVcbiAgICAgIGlmIChlcnJvci5tZXNzYWdlPy5pbmNsdWRlcygnYXV0aCcpIHx8IGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCd0b2tlbicpKSB7XG4gICAgICAgIGVycm9yTWVzc2FnZSArPSBg8J+UkCAqKkF1dGhlbnRpY2F0aW9uIElzc3VlKio6XFxuYDtcbiAgICAgICAgZXJyb3JNZXNzYWdlICs9IGDigKIgUnVuOiBcXGBzZXR1cF9naXRodWJfYXV0aFxcYCB0byByZS1hdXRoZW50aWNhdGVcXG5gO1xuICAgICAgICBlcnJvck1lc3NhZ2UgKz0gYOKAoiBDaGVjazogXFxgZ2ggYXV0aCBzdGF0dXNcXGAgaWYgeW91IGhhdmUgR2l0SHViIENMSVxcblxcbmA7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmIChlcnJvci5tZXNzYWdlPy5pbmNsdWRlcygnbmV0d29yaycpIHx8IGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCdjb25uZWN0aW9uJykpIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlICs9IGDwn4yQICoqTmV0d29yayBJc3N1ZSoqOlxcbmA7XG4gICAgICAgIGVycm9yTWVzc2FnZSArPSBg4oCiIENoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvblxcbmA7XG4gICAgICAgIGVycm9yTWVzc2FnZSArPSBg4oCiIFRyeSBhZ2FpbiBpbiBhIGZldyBtaW51dGVzXFxuYDtcbiAgICAgICAgZXJyb3JNZXNzYWdlICs9IGDigKIgQ2hlY2sgR2l0SHViIHN0YXR1czogaHR0cHM6Ly9zdGF0dXMuZ2l0aHViLmNvbVxcblxcbmA7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGVycm9yTWVzc2FnZSArPSBg8J+akSAqKkVtZXJnZW5jeSBBbHRlcm5hdGl2ZXMqKjpcXG5gO1xuICAgICAgZXJyb3JNZXNzYWdlICs9IGAxLiDwn5SEICoqUmV0cnkqKjogVHJ5IHRoZSBzYW1lIGNvbW1hbmQgYWdhaW5cXG5gO1xuICAgICAgZXJyb3JNZXNzYWdlICs9IGAyLiDwn5OdICoqQ2hlY2sgY29udGVudCoqOiBVc2UgXFxgbGlzdF9wb3J0Zm9saW9cXGAgdG8gdmVyaWZ5IHRoZSBlbGVtZW50IGV4aXN0c1xcbmA7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYDMuIPCfjq8gKipTcGVjaWZ5IHR5cGUqKjogQWRkIFxcYC0tdHlwZT1wZXJzb25hc1xcYCBpZiB5b3Uga25vdyB0aGUgZWxlbWVudCB0eXBlXFxuYDtcbiAgICAgIGVycm9yTWVzc2FnZSArPSBgNC4g8J+akSAqKk1hbnVhbCB1cGxvYWQqKjogQ29weSBjb250ZW50IGRpcmVjdGx5IHRvIEdpdEh1YiB2aWEgd2ViIGludGVyZmFjZVxcblxcbmA7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYPCfk54gKipOZWVkIGhlbHA/KiogVGhpcyBsb29rcyBsaWtlIGEgc3lzdGVtIGlzc3VlLiBQbGVhc2UgcmVwb3J0IGl0IHdpdGggdGhlIGVycm9yIGRldGFpbHMgYWJvdmUuYDtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogZXJyb3JNZXNzYWdlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldENvbGxlY3Rpb25DYWNoZUhlYWx0aCgpIHtcbiAgICB0cnkge1xuICAgICAgLy8gR2V0IGNhY2hlIHN0YXRpc3RpY3MgZnJvbSBib3RoIGNhY2hlc1xuICAgICAgY29uc3QgY29sbGVjdGlvblN0YXRzID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uQ2FjaGUuZ2V0Q2FjaGVTdGF0cygpO1xuICAgICAgY29uc3Qgc2VhcmNoU3RhdHMgPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb25TZWFyY2guZ2V0Q2FjaGVTdGF0cygpO1xuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiBjYWNoZSBkaXJlY3RvcnkgZXhpc3RzXG4gICAgICBjb25zdCBjYWNoZURpciA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnLmRvbGxob3VzZW1jcCcsICdjYWNoZScpO1xuICAgICAgbGV0IGNhY2hlRmlsZUV4aXN0cyA9IGZhbHNlO1xuICAgICAgbGV0IGNhY2hlRmlsZVNpemUgPSAwO1xuICAgICAgXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjYWNoZUZpbGUgPSBwYXRoLmpvaW4oY2FjaGVEaXIsICdjb2xsZWN0aW9uLWNhY2hlLmpzb24nKTtcbiAgICAgICAgY29uc3QgZmlsZVN0YXRzID0gYXdhaXQgZnMuc3RhdChjYWNoZUZpbGUpO1xuICAgICAgICBjYWNoZUZpbGVFeGlzdHMgPSB0cnVlO1xuICAgICAgICBjYWNoZUZpbGVTaXplID0gZmlsZVN0YXRzLnNpemU7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBDYWNoZSBmaWxlIGRvZXNuJ3QgZXhpc3QgeWV0XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEZvcm1hdCBjYWNoZSBhZ2VcbiAgICAgIGNvbnN0IGZvcm1hdEFnZSA9IChhZ2VNczogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgICAgICAgaWYgKGFnZU1zID09PSAwKSByZXR1cm4gJ05vdCBjYWNoZWQnO1xuICAgICAgICBjb25zdCBob3VycyA9IE1hdGguZmxvb3IoYWdlTXMgLyAoMTAwMCAqIDYwICogNjApKTtcbiAgICAgICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IoKGFnZU1zICUgKDEwMDAgKiA2MCAqIDYwKSkgLyAoMTAwMCAqIDYwKSk7XG4gICAgICAgIGlmIChob3VycyA+IDApIHtcbiAgICAgICAgICByZXR1cm4gYCR7aG91cnN9aCAke21pbnV0ZXN9bSBvbGRgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHttaW51dGVzfW0gb2xkYDtcbiAgICAgIH07XG4gICAgICBcbiAgICAgIC8vIEJ1aWxkIGhlYWx0aCByZXBvcnQgd2l0aCBib3RoIGNhY2hlIHN5c3RlbXNcbiAgICAgIGNvbnN0IGhlYWx0aFJlcG9ydCA9IHtcbiAgICAgICAgY29sbGVjdGlvbjoge1xuICAgICAgICAgIHN0YXR1czogY29sbGVjdGlvblN0YXRzLmlzVmFsaWQgPyAnaGVhbHRoeScgOiAoY2FjaGVGaWxlRXhpc3RzID8gJ2V4cGlyZWQnIDogJ2VtcHR5JyksXG4gICAgICAgICAgY2FjaGVFeGlzdHM6IGNhY2hlRmlsZUV4aXN0cyxcbiAgICAgICAgICBpdGVtQ291bnQ6IGNvbGxlY3Rpb25TdGF0cy5pdGVtQ291bnQsXG4gICAgICAgICAgY2FjaGVBZ2U6IGZvcm1hdEFnZShjb2xsZWN0aW9uU3RhdHMuY2FjaGVBZ2UpLFxuICAgICAgICAgIGNhY2hlQWdlTXM6IGNvbGxlY3Rpb25TdGF0cy5jYWNoZUFnZSxcbiAgICAgICAgICBpc1ZhbGlkOiBjb2xsZWN0aW9uU3RhdHMuaXNWYWxpZCxcbiAgICAgICAgICBjYWNoZUZpbGVTaXplOiBjYWNoZUZpbGVTaXplLFxuICAgICAgICAgIGNhY2hlRmlsZVNpemVGb3JtYXR0ZWQ6IGNhY2hlRmlsZVNpemUgPiAwID8gYCR7KGNhY2hlRmlsZVNpemUgLyAxMDI0KS50b0ZpeGVkKDIpfSBLQmAgOiAnMCBLQicsXG4gICAgICAgICAgdHRsUmVtYWluaW5nOiBjb2xsZWN0aW9uU3RhdHMuaXNWYWxpZCA/IGZvcm1hdEFnZSgyNCAqIDYwICogNjAgKiAxMDAwIC0gY29sbGVjdGlvblN0YXRzLmNhY2hlQWdlKSA6ICdFeHBpcmVkJ1xuICAgICAgICB9LFxuICAgICAgICBpbmRleDoge1xuICAgICAgICAgIHN0YXR1czogc2VhcmNoU3RhdHMuaW5kZXguaXNWYWxpZCA/ICdoZWFsdGh5JyA6IChzZWFyY2hTdGF0cy5pbmRleC5oYXNDYWNoZSA/ICdleHBpcmVkJyA6ICdlbXB0eScpLFxuICAgICAgICAgIGhhc0NhY2hlOiBzZWFyY2hTdGF0cy5pbmRleC5oYXNDYWNoZSxcbiAgICAgICAgICBlbGVtZW50czogc2VhcmNoU3RhdHMuaW5kZXguZWxlbWVudHMsXG4gICAgICAgICAgY2FjaGVBZ2U6IGZvcm1hdEFnZShzZWFyY2hTdGF0cy5pbmRleC5hZ2UpLFxuICAgICAgICAgIGlzVmFsaWQ6IHNlYXJjaFN0YXRzLmluZGV4LmlzVmFsaWQsXG4gICAgICAgICAgdHRsUmVtYWluaW5nOiBzZWFyY2hTdGF0cy5pbmRleC5pc1ZhbGlkID8gZm9ybWF0QWdlKDE1ICogNjAgKiAxMDAwIC0gc2VhcmNoU3RhdHMuaW5kZXguYWdlKSA6ICdFeHBpcmVkJ1xuICAgICAgICB9LFxuICAgICAgICBvdmVyYWxsOiB7XG4gICAgICAgICAgcmVjb21tZW5kYXRpb246IChjb2xsZWN0aW9uU3RhdHMuaXNWYWxpZCB8fCBzZWFyY2hTdGF0cy5pbmRleC5pc1ZhbGlkKVxuICAgICAgICAgICAgPyAnQ2FjaGUgc3lzdGVtIGlzIG9wZXJhdGlvbmFsIGFuZCBzZXJ2aW5nIGNvbnRlbnQgZWZmaWNpZW50bHknXG4gICAgICAgICAgICA6ICdDYWNoZSBzeXN0ZW0gd2lsbCByZWZyZXNoIG9uIG5leHQgYWNjZXNzIGZvciBvcHRpbWFsIHBlcmZvcm1hbmNlJ1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5OKICoqQ29sbGVjdGlvbiBDYWNoZSBIZWFsdGggQ2hlY2sqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBgIyMg8J+XhO+4jyBDb2xsZWN0aW9uIENhY2hlIChMZWdhY3kpXFxuYCArXG4gICAgICAgICAgICAgIGAqKlN0YXR1cyoqOiAke2hlYWx0aFJlcG9ydC5jb2xsZWN0aW9uLnN0YXR1cyA9PT0gJ2hlYWx0aHknID8gJ+KchScgOiBoZWFsdGhSZXBvcnQuY29sbGVjdGlvbi5zdGF0dXMgPT09ICdleHBpcmVkJyA/ICfimqDvuI8nIDogJ/Cfk6YnfSAke2hlYWx0aFJlcG9ydC5jb2xsZWN0aW9uLnN0YXR1cy50b1VwcGVyQ2FzZSgpfVxcbmAgK1xuICAgICAgICAgICAgICBgKipJdGVtcyBDYWNoZWQqKjogJHtoZWFsdGhSZXBvcnQuY29sbGVjdGlvbi5pdGVtQ291bnR9XFxuYCArXG4gICAgICAgICAgICAgIGAqKkNhY2hlIEFnZSoqOiAke2hlYWx0aFJlcG9ydC5jb2xsZWN0aW9uLmNhY2hlQWdlfVxcbmAgK1xuICAgICAgICAgICAgICBgKipDYWNoZSBTaXplKio6ICR7aGVhbHRoUmVwb3J0LmNvbGxlY3Rpb24uY2FjaGVGaWxlU2l6ZUZvcm1hdHRlZH1cXG5gICtcbiAgICAgICAgICAgICAgYCoqVFRMIFJlbWFpbmluZyoqOiAke2hlYWx0aFJlcG9ydC5jb2xsZWN0aW9uLnR0bFJlbWFpbmluZ31cXG5cXG5gICtcbiAgICAgICAgICAgICAgYCMjIPCfmoAgSW5kZXggQ2FjaGUgKEVuaGFuY2VkIFNlYXJjaClcXG5gICtcbiAgICAgICAgICAgICAgYCoqU3RhdHVzKio6ICR7aGVhbHRoUmVwb3J0LmluZGV4LnN0YXR1cyA9PT0gJ2hlYWx0aHknID8gJ+KchScgOiBoZWFsdGhSZXBvcnQuaW5kZXguc3RhdHVzID09PSAnZXhwaXJlZCcgPyAn4pqg77iPJyA6ICfwn5OmJ30gJHtoZWFsdGhSZXBvcnQuaW5kZXguc3RhdHVzLnRvVXBwZXJDYXNlKCl9XFxuYCArXG4gICAgICAgICAgICAgIGAqKkVsZW1lbnRzIEluZGV4ZWQqKjogJHtoZWFsdGhSZXBvcnQuaW5kZXguZWxlbWVudHN9XFxuYCArXG4gICAgICAgICAgICAgIGAqKkNhY2hlIEFnZSoqOiAke2hlYWx0aFJlcG9ydC5pbmRleC5jYWNoZUFnZX1cXG5gICtcbiAgICAgICAgICAgICAgYCoqVFRMIFJlbWFpbmluZyoqOiAke2hlYWx0aFJlcG9ydC5pbmRleC50dGxSZW1haW5pbmd9XFxuXFxuYCArXG4gICAgICAgICAgICAgIGAqKk92ZXJhbGwgU3RhdHVzKio6ICR7aGVhbHRoUmVwb3J0Lm92ZXJhbGwucmVjb21tZW5kYXRpb259XFxuXFxuYCArXG4gICAgICAgICAgICAgIGBUaGUgZW5oYW5jZWQgaW5kZXggY2FjaGUgcHJvdmlkZXMgZmFzdCBzZWFyY2ggd2l0aCBwYWdpbmF0aW9uLCBmaWx0ZXJpbmcsIGFuZCBzb3J0aW5nLiBgICtcbiAgICAgICAgICAgICAgYFRoZSBjb2xsZWN0aW9uIGNhY2hlIHNlcnZlcyBhcyBhIGZhbGxiYWNrIGZvciBvZmZsaW5lIGJyb3dzaW5nLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGdldCBjYWNoZSBoZWFsdGg6ICR7ZXJyb3JNZXNzYWdlfWApO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgRmFpbGVkIHRvIGdldCBjYWNoZSBoZWFsdGg6ICR7ZXJyb3JNZXNzYWdlfWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLy8gVXNlciBpZGVudGl0eSBtYW5hZ2VtZW50XG4gIGFzeW5jIHNldFVzZXJJZGVudGl0eSh1c2VybmFtZTogc3RyaW5nLCBlbWFpbD86IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIXVzZXJuYW1lIHx8IHVzZXJuYW1lLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgVXNlcm5hbWUgY2Fubm90IGJlIGVtcHR5YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgYW5kIHNhbml0aXplIHVzZXJuYW1lXG4gICAgICBjb25zdCB2YWxpZGF0ZWRVc2VybmFtZSA9IHZhbGlkYXRlVXNlcm5hbWUodXNlcm5hbWUpO1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSBlbWFpbCBpZiBwcm92aWRlZFxuICAgICAgbGV0IHZhbGlkYXRlZEVtYWlsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoZW1haWwpIHtcbiAgICAgICAgY29uc3Qgc2FuaXRpemVkRW1haWwgPSBzYW5pdGl6ZUlucHV0KGVtYWlsLCAxMDApO1xuICAgICAgICBpZiAoIVZBTElEQVRJT05fUEFUVEVSTlMuU0FGRV9FTUFJTC50ZXN0KHNhbml0aXplZEVtYWlsKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBlbWFpbCBmb3JtYXQnKTtcbiAgICAgICAgfVxuICAgICAgICB2YWxpZGF0ZWRFbWFpbCA9IHNhbml0aXplZEVtYWlsO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgdGhlIHZhbGlkYXRlZCB1c2VyIGlkZW50aXR5XG4gICAgICB0aGlzLmN1cnJlbnRVc2VyID0gdmFsaWRhdGVkVXNlcm5hbWU7XG4gICAgICBpZiAodmFsaWRhdGVkRW1haWwpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0VNQUlMID0gdmFsaWRhdGVkRW1haWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKchSAqKlVzZXIgSWRlbnRpdHkgU2V0KipcXG5cXG5gICtcbiAgICAgICAgICAgIGDwn5GkICoqVXNlcm5hbWU6KiogJHt2YWxpZGF0ZWRVc2VybmFtZX1cXG5gICtcbiAgICAgICAgICAgIGAke3ZhbGlkYXRlZEVtYWlsID8gYPCfk6cgKipFbWFpbDoqKiAke3ZhbGlkYXRlZEVtYWlsfVxcbmAgOiAnJ31gICtcbiAgICAgICAgICAgIGBcXG7wn46vICoqTmV4dCBTdGVwczoqKlxcbmAgK1xuICAgICAgICAgICAgYOKAoiBOZXcgcGVyc29uYXMgeW91IGNyZWF0ZSB3aWxsIGJlIGF0dHJpYnV0ZWQgdG8gXCIke3ZhbGlkYXRlZFVzZXJuYW1lfVwiXFxuYCArXG4gICAgICAgICAgICBg4oCiIFNldCBlbnZpcm9ubWVudCB2YXJpYWJsZSBcXGBET0xMSE9VU0VfVVNFUj0ke3ZhbGlkYXRlZFVzZXJuYW1lfVxcYCB0byBwZXJzaXN0IHRoaXMgc2V0dGluZ1xcbmAgK1xuICAgICAgICAgICAgYCR7dmFsaWRhdGVkRW1haWwgPyBg4oCiIFNldCBlbnZpcm9ubWVudCB2YXJpYWJsZSBcXGBET0xMSE9VU0VfRU1BSUw9JHt2YWxpZGF0ZWRFbWFpbH1cXGAgZm9yIGNvbnRhY3QgaW5mb1xcbmAgOiAnJ31gICtcbiAgICAgICAgICAgIGDigKIgVXNlIFxcYGNsZWFyX3VzZXJfaWRlbnRpdHlcXGAgdG8gcmV0dXJuIHRvIGFub255bW91cyBtb2RlYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3Qgc2FuaXRpemVkID0gU2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqVmFsaWRhdGlvbiBFcnJvcioqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGAke3Nhbml0aXplZC5tZXNzYWdlfVxcblxcbmAgK1xuICAgICAgICAgICAgICBgUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCB1c2VybmFtZSAoYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsIGh5cGhlbnMsIHVuZGVyc2NvcmVzLCBkb3RzIG9ubHkpLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0VXNlcklkZW50aXR5KCkge1xuICAgIGNvbnN0IGVtYWlsID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0VNQUlMO1xuICAgIFxuICAgIGlmICghdGhpcy5jdXJyZW50VXNlcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+RpCAqKlVzZXIgSWRlbnRpdHk6IEFub255bW91cyoqXFxuXFxuYCArXG4gICAgICAgICAgICBg8J+UkiAqKlN0YXR1czoqKiBBbm9ueW1vdXMgbW9kZVxcbmAgK1xuICAgICAgICAgICAgYPCfk50gKipBdHRyaWJ1dGlvbjoqKiBQZXJzb25hcyB3aWxsIHVzZSBhbm9ueW1vdXMgSURzXFxuXFxuYCArXG4gICAgICAgICAgICBgKipUbyBzZXQgeW91ciBpZGVudGl0eToqKlxcbmAgK1xuICAgICAgICAgICAgYOKAoiBVc2U6IFxcYHNldF91c2VyX2lkZW50aXR5IFwieW91ci11c2VybmFtZVwiXFxgXFxuYCArXG4gICAgICAgICAgICBg4oCiIE9yIHNldCBlbnZpcm9ubWVudCB2YXJpYWJsZTogXFxgRE9MTEhPVVNFX1VTRVI9eW91ci11c2VybmFtZVxcYGAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCfkaQgKipVc2VyIElkZW50aXR5OiAke3RoaXMuY3VycmVudFVzZXJ9KipcXG5cXG5gICtcbiAgICAgICAgICBg4pyFICoqU3RhdHVzOioqIEF1dGhlbnRpY2F0ZWRcXG5gICtcbiAgICAgICAgICBg8J+RpCAqKlVzZXJuYW1lOioqICR7dGhpcy5jdXJyZW50VXNlcn1cXG5gICtcbiAgICAgICAgICBgJHtlbWFpbCA/IGDwn5OnICoqRW1haWw6KiogJHtlbWFpbH1cXG5gIDogJyd9YCArXG4gICAgICAgICAgYPCfk50gKipBdHRyaWJ1dGlvbjoqKiBOZXcgcGVyc29uYXMgd2lsbCBiZSBjcmVkaXRlZCB0byBcIiR7dGhpcy5jdXJyZW50VXNlcn1cIlxcblxcbmAgK1xuICAgICAgICAgIGAqKkVudmlyb25tZW50IFZhcmlhYmxlczoqKlxcbmAgK1xuICAgICAgICAgIGDigKIgXFxgRE9MTEhPVVNFX1VTRVI9JHt0aGlzLmN1cnJlbnRVc2VyfVxcYFxcbmAgK1xuICAgICAgICAgIGAke2VtYWlsID8gYOKAoiBcXGBET0xMSE9VU0VfRU1BSUw9JHtlbWFpbH1cXGBcXG5gIDogJyd9YCArXG4gICAgICAgICAgYFxcbioqTWFuYWdlbWVudDoqKlxcbmAgK1xuICAgICAgICAgIGDigKIgVXNlIFxcYGNsZWFyX3VzZXJfaWRlbnRpdHlcXGAgdG8gcmV0dXJuIHRvIGFub255bW91cyBtb2RlXFxuYCArXG4gICAgICAgICAgYOKAoiBVc2UgXFxgc2V0X3VzZXJfaWRlbnRpdHkgXCJuZXctdXNlcm5hbWVcIlxcYCB0byBjaGFuZ2UgdXNlcm5hbWVgLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgY2xlYXJVc2VySWRlbnRpdHkoKSB7XG4gICAgY29uc3Qgd2FzU2V0ID0gdGhpcy5jdXJyZW50VXNlciAhPT0gbnVsbDtcbiAgICBjb25zdCBwcmV2aW91c1VzZXIgPSB0aGlzLmN1cnJlbnRVc2VyO1xuICAgIHRoaXMuY3VycmVudFVzZXIgPSBudWxsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IHdhc1NldCBcbiAgICAgICAgICAgID8gYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pyFICoqVXNlciBJZGVudGl0eSBDbGVhcmVkKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYPCfkaQgKipQcmV2aW91czoqKiAke3ByZXZpb3VzVXNlcn1cXG5gICtcbiAgICAgICAgICAgICAgYPCflJIgKipDdXJyZW50OioqIEFub255bW91cyBtb2RlXFxuXFxuYCArXG4gICAgICAgICAgICAgIGDwn5OdICoqRWZmZWN0OioqIE5ldyBwZXJzb25hcyB3aWxsIHVzZSBhbm9ueW1vdXMgSURzXFxuXFxuYCArXG4gICAgICAgICAgICAgIGDimqDvuI8gKipOb3RlOioqIFRoaXMgb25seSBhZmZlY3RzIHRoZSBjdXJyZW50IHNlc3Npb24uXFxuYCArXG4gICAgICAgICAgICAgIGBUbyBwZXJzaXN0IHRoaXMgY2hhbmdlLCB1bnNldCB0aGUgXFxgRE9MTEhPVVNFX1VTRVJcXGAgZW52aXJvbm1lbnQgdmFyaWFibGUuYFxuICAgICAgICAgICAgOiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3ihLnvuI8gKipBbHJlYWR5IGluIEFub255bW91cyBNb2RlKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYPCfkaQgTm8gdXNlciBpZGVudGl0eSB3YXMgc2V0LlxcblxcbmAgK1xuICAgICAgICAgICAgICBgVXNlIFxcYHNldF91c2VyX2lkZW50aXR5IFwidXNlcm5hbWVcIlxcYCB0byBzZXQgeW91ciBpZGVudGl0eS5gLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDdXJyZW50VXNlckZvckF0dHJpYnV0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFVzZXIgfHwgZ2VuZXJhdGVBbm9ueW1vdXNJZCgpO1xuICB9XG5cbiAgLy8gR2l0SHViIGF1dGhlbnRpY2F0aW9uIG1hbmFnZW1lbnRcbiAgYXN5bmMgc2V0dXBHaXRIdWJBdXRoKCkge1xuICAgIHRyeSB7XG4gICAgICAvLyBDaGVjayBjdXJyZW50IGF1dGggc3RhdHVzIGZpcnN0XG4gICAgICBjb25zdCBjdXJyZW50U3RhdHVzID0gYXdhaXQgdGhpcy5naXRodWJBdXRoTWFuYWdlci5nZXRBdXRoU3RhdHVzKCk7XG4gICAgICBcbiAgICAgIGlmIChjdXJyZW50U3RhdHVzLmlzQXV0aGVudGljYXRlZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKchSAqKkFscmVhZHkgQ29ubmVjdGVkIHRvIEdpdEh1YioqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBg8J+RpCAqKlVzZXJuYW1lOioqICR7Y3VycmVudFN0YXR1cy51c2VybmFtZX1cXG5gICtcbiAgICAgICAgICAgICAgICAgIGDwn5SRICoqUGVybWlzc2lvbnM6KiogJHtjdXJyZW50U3RhdHVzLnNjb3Blcz8uam9pbignLCAnKSB8fCAnYmFzaWMgYWNjZXNzJ31cXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBZb3UncmUgYWxsIHNldCEgWW91IGNhbjpcXG5gICtcbiAgICAgICAgICAgICAgICAgIGDigKIgQnJvd3NlIHRoZSBjb2xsZWN0aW9uXFxuYCArXG4gICAgICAgICAgICAgICAgICBg4oCiIEluc3RhbGwgY29udGVudFxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKAoiBTdWJtaXQgeW91ciBjcmVhdGlvbnNcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBUbyBkaXNjb25uZWN0LCBzYXkgXCJkaXNjb25uZWN0IGZyb20gR2l0SHViXCJgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSW5pdGlhdGUgZGV2aWNlIGZsb3dcbiAgICAgIGxldCBkZXZpY2VSZXNwb25zZTogRGV2aWNlQ29kZVJlc3BvbnNlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZGV2aWNlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdpdGh1YkF1dGhNYW5hZ2VyLmluaXRpYXRlRGV2aWNlRmxvdygpO1xuICAgICAgfSBjYXRjaCAoZGV2aWNlRmxvd0Vycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignT0FVVEhfSU5ERVhfMjY4MTogRmFpbGVkIHRvIGluaXRpYXRlIGRldmljZSBmbG93JywgeyBlcnJvcjogZGV2aWNlRmxvd0Vycm9yIH0pO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9BVVRIX0lOREVYXzI2ODE6IERldmljZSBmbG93IGluaXRpYXRpb24gZmFpbGVkIC0gJHtkZXZpY2VGbG93RXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGRldmljZUZsb3dFcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWApO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDUklUSUNBTCBGSVg6IFVzZSBoZWxwZXIgcHJvY2VzcyBhcHByb2FjaCBmcm9tIFBSICM1MThcbiAgICAgIC8vIE1DUCBzZXJ2ZXJzIGFyZSBzdGF0ZWxlc3MgYW5kIHRlcm1pbmF0ZSBhZnRlciByZXR1cm5pbmcgcmVzcG9uc2VcbiAgICAgIC8vIFRoZSBoZWxwZXIgcHJvY2VzcyBzdXJ2aXZlcyBNQ1AgdGVybWluYXRpb24gYW5kIGNhbiBjb21wbGV0ZSBPQXV0aCBwb2xsaW5nXG4gICAgICBcbiAgICAgIC8vIEdldCB0aGUgT0F1dGggY2xpZW50IElEIC0gdXNlIHRoZSBzYW1lIG1ldGhvZCB0aGF0IGhhcyB0aGUgZGVmYXVsdCBmYWxsYmFja1xuICAgICAgLy8gVGhpcyBlbnN1cmVzIHdlIGdldCB0aGUgZGVmYXVsdCBjbGllbnQgSUQgaWYgbm8gZW52L2NvbmZpZyBpcyBzZXRcbiAgICAgIGxvZ2dlci5kZWJ1ZygnT0FVVEhfU1RFUF80OiBHZXR0aW5nIGNsaWVudCBJRCBmb3IgaGVscGVyIHByb2Nlc3MnKTtcbiAgICAgIGNvbnN0IGNsaWVudElkID0gYXdhaXQgR2l0SHViQXV0aE1hbmFnZXIuZ2V0Q2xpZW50SWQoKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnT0FVVEhfU1RFUF81OiBDbGllbnQgSUQgb2J0YWluZWQnLCB7IGNsaWVudElkOiBjbGllbnRJZD8uc3Vic3RyaW5nKDAsIDgpICsgJy4uLicgfSk7XG4gICAgICBcbiAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiBub3cgc2luY2UgZ2V0Q2xpZW50SWQoKSBhbHdheXMgcmV0dXJucyBhIHZhbHVlXG4gICAgICAvLyAoZW52LCBjb25maWcsIG9yIGRlZmF1bHQpLCBidXQga2VlcGluZyBmb3Igc2FmZXR5XG4gICAgICBpZiAoIWNsaWVudElkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqR2l0SHViIE9BdXRoIENvbmZpZ3VyYXRpb24gRXJyb3IqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYFVuYWJsZSB0byBvYnRhaW4gR2l0SHViIE9BdXRoIGNsaWVudCBJRC5cXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBUaGlzIGlzIHVuZXhwZWN0ZWQgLSBwbGVhc2UgcmVwb3J0IHRoaXMgaXNzdWUuXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgKipXb3JrYXJvdW5kOioqXFxuYCArXG4gICAgICAgICAgICAgICAgICBg4oCiIFNldCBlbnZpcm9ubWVudCB2YXJpYWJsZTogRE9MTEhPVVNFX0dJVEhVQl9DTElFTlRfSURcXG5gICtcbiAgICAgICAgICAgICAgICAgIGDigKIgT3IgdXNlIEdpdEh1YiBDTEk6IGdoIGF1dGggbG9naW4gLS13ZWJgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gU3Bhd24gdGhlIE9BdXRoIGhlbHBlciBwcm9jZXNzXG4gICAgICAvLyBUaGUgaGVscGVyIHJ1bnMgaW5kZXBlbmRlbnRseSBhbmQgc3Vydml2ZXMgTUNQIHNlcnZlciB0ZXJtaW5hdGlvblxuICAgICAgbGV0IGhlbHBlclBhdGg6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gR2V0IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGNvbXBpbGVkIEpTIGZpbGUgaXNcbiAgICAgICAgY29uc3QgX19maWxlbmFtZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKTtcbiAgICAgICAgY29uc3QgX19kaXJuYW1lID0gcGF0aC5kaXJuYW1lKF9fZmlsZW5hbWUpO1xuICAgICAgICBcbiAgICAgICAgLy8gRmluZCB0aGUgb2F1dGgtaGVscGVyLm1qcyBmaWxlXG4gICAgICAgIC8vIEl0IHNob3VsZCBiZSBpbiB0aGUgcm9vdCBkaXJlY3RvcnkgKG9uZSBsZXZlbCB1cCBmcm9tIGRpc3QvKVxuICAgICAgICBjb25zdCBwb3NzaWJsZVBhdGhzID0gW1xuICAgICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICdvYXV0aC1oZWxwZXIubWpzJyksICAvLyBGcm9tIGRpc3QvaW5kZXguanNcbiAgICAgICAgICBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJ29hdXRoLWhlbHBlci5tanMnKSwgICAgLy8gRnJvbSBDV0RcbiAgICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCAnb2F1dGgtaGVscGVyLm1qcycpLCAgICAgICAgLy8gU2FtZSBkaXJlY3RvcnlcbiAgICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnb2F1dGgtaGVscGVyLm1qcycpIC8vIE5QTSBwYWNrYWdlIHJvb3RcbiAgICAgICAgXTtcbiAgICAgICAgXG4gICAgICAgIGhlbHBlclBhdGggPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IHRlc3RQYXRoIG9mIHBvc3NpYmxlUGF0aHMpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZnMuYWNjZXNzKHRlc3RQYXRoKTtcbiAgICAgICAgICAgIGhlbHBlclBhdGggPSB0ZXN0UGF0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gVHJ5IG5leHQgcGF0aFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKCFoZWxwZXJQYXRoKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCdPQVVUSF9JTkRFWF8yNzM0OiBvYXV0aC1oZWxwZXIubWpzIG5vdCBmb3VuZCcsIHsgXG4gICAgICAgICAgICBzZWFyY2hlZFBhdGhzOiBwb3NzaWJsZVBhdGhzLFxuICAgICAgICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICAgICAgZGlybmFtZTogX19kaXJuYW1lXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPQVVUSF9IRUxQRVJfTk9UX0ZPVU5EOiBvYXV0aC1oZWxwZXIubWpzIG5vdCBmb3VuZCBhdCBsaW5lIDI3MzQuIFNlYXJjaGVkOiAke3Bvc3NpYmxlUGF0aHMuam9pbignLCAnKX1gKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdPQVVUSF9TVEVQXzY6IFNwYXduaW5nIGhlbHBlciBwcm9jZXNzJywgeyBcbiAgICAgICAgICBoZWxwZXJQYXRoLFxuICAgICAgICAgIGNsaWVudElkOiBjbGllbnRJZD8uc3Vic3RyaW5nKDAsIDgpICsgJy4uLicsXG4gICAgICAgICAgZGV2aWNlQ29kZTogZGV2aWNlUmVzcG9uc2UuZGV2aWNlX2NvZGUuc3Vic3RyaW5nKDAsIDgpICsgJy4uLidcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBTcGF3biB0aGUgaGVscGVyIGFzIGEgZGV0YWNoZWQgcHJvY2Vzc1xuICAgICAgICBjb25zdCBoZWxwZXIgPSBzcGF3bignbm9kZScsIFtcbiAgICAgICAgICBoZWxwZXJQYXRoLFxuICAgICAgICAgIGRldmljZVJlc3BvbnNlLmRldmljZV9jb2RlLFxuICAgICAgICAgIChkZXZpY2VSZXNwb25zZS5pbnRlcnZhbCB8fCA1KS50b1N0cmluZygpLFxuICAgICAgICAgIGRldmljZVJlc3BvbnNlLmV4cGlyZXNfaW4udG9TdHJpbmcoKSxcbiAgICAgICAgICBjbGllbnRJZFxuICAgICAgICBdLCB7XG4gICAgICAgICAgZGV0YWNoZWQ6IHRydWUsXG4gICAgICAgICAgc3RkaW86ICdpZ25vcmUnLCAvLyBDb21wbGV0ZWx5IGRldGFjaCBJL09cbiAgICAgICAgICB3aW5kb3dzSGlkZTogdHJ1ZSAvLyBIaWRlIGNvbnNvbGUgb24gV2luZG93c1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIEFsbG93IHRoZSBwYXJlbnQgcHJvY2VzcyB0byBleGl0IHdpdGhvdXQgd2FpdGluZyBmb3IgdGhlIGhlbHBlclxuICAgICAgICBoZWxwZXIudW5yZWYoKTtcbiAgICAgICAgXG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnT0FVVEhfU1RFUF83OiBIZWxwZXIgcHJvY2VzcyBzcGF3bmVkIHN1Y2Nlc3NmdWxseScsIHsgcGlkOiBoZWxwZXIucGlkIH0pO1xuICAgICAgICBcbiAgICAgICAgbG9nZ2VyLmluZm8oJ09BdXRoIGhlbHBlciBwcm9jZXNzIHNwYXduZWQnLCB7XG4gICAgICAgICAgcGlkOiBoZWxwZXIucGlkLFxuICAgICAgICAgIGV4cGlyZXNJbjogZGV2aWNlUmVzcG9uc2UuZXhwaXJlc19pbixcbiAgICAgICAgICB1c2VyQ29kZTogZGV2aWNlUmVzcG9uc2UudXNlcl9jb2RlXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gV3JpdGUgc3RhdGUgZmlsZSBmb3IgbW9uaXRvcmluZ1xuICAgICAgICBjb25zdCBzdGF0ZUZpbGUgPSBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICcuYXV0aCcsICdvYXV0aC1oZWxwZXItc3RhdGUuanNvbicpO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IHBhdGguZGlybmFtZShzdGF0ZUZpbGUpO1xuICAgICAgICBhd2FpdCBmcy5ta2RpcihzdGF0ZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBzdGF0ZSA9IHtcbiAgICAgICAgICBwaWQ6IGhlbHBlci5waWQsXG4gICAgICAgICAgZGV2aWNlQ29kZTogZGV2aWNlUmVzcG9uc2UuZGV2aWNlX2NvZGUsXG4gICAgICAgICAgdXNlckNvZGU6IGRldmljZVJlc3BvbnNlLnVzZXJfY29kZSxcbiAgICAgICAgICBzdGFydFRpbWU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICBleHBpcmVzQXQ6IG5ldyBEYXRlKERhdGUubm93KCkgKyBkZXZpY2VSZXNwb25zZS5leHBpcmVzX2luICogMTAwMCkudG9JU09TdHJpbmcoKVxuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHN0YXRlRmlsZSwgSlNPTi5zdHJpbmdpZnkoc3RhdGUsIG51bGwsIDIpKTtcbiAgICAgICAgXG4gICAgICB9IGNhdGNoIChzcGF3bkVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignT0FVVEhfSU5ERVhfMjc3NDogRmFpbGVkIHRvIHNwYXduIE9BdXRoIGhlbHBlciBwcm9jZXNzJywgeyBcbiAgICAgICAgICBlcnJvcjogc3Bhd25FcnJvcixcbiAgICAgICAgICBoZWxwZXJQYXRoLFxuICAgICAgICAgIGNsaWVudElkOiBjbGllbnRJZD8uc3Vic3RyaW5nKDAsIDgpICsgJy4uLicsXG4gICAgICAgICAgZXJyb3JDb2RlOiAoc3Bhd25FcnJvciBhcyBhbnkpPy5jb2RlLFxuICAgICAgICAgIHN5c2NhbGw6IChzcGF3bkVycm9yIGFzIGFueSk/LnN5c2NhbGxcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBQcm92aWRlIHNwZWNpZmljIGVycm9yIG1lc3NhZ2UgYmFzZWQgb24gZXJyb3IgdHlwZVxuICAgICAgICBsZXQgZXJyb3JEZXRhaWwgPSAnJztcbiAgICAgICAgaWYgKHNwYXduRXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIGlmIChzcGF3bkVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ0VOT0VOVCcpKSB7XG4gICAgICAgICAgICBlcnJvckRldGFpbCA9IGBPQVVUSF9IRUxQRVJfU1BBV05fRU5PRU5UOiBOb2RlLmpzIGV4ZWN1dGFibGUgbm90IGZvdW5kIG9yIGhlbHBlciBzY3JpcHQgbWlzc2luZyBhdCAke2hlbHBlclBhdGh9YDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHNwYXduRXJyb3IubWVzc2FnZS5pbmNsdWRlcygnRUFDQ0VTJykpIHtcbiAgICAgICAgICAgIGVycm9yRGV0YWlsID0gYE9BVVRIX0hFTFBFUl9TUEFXTl9FQUNDRVM6IFBlcm1pc3Npb24gZGVuaWVkIHdoZW4gdHJ5aW5nIHRvIGV4ZWN1dGUgJHtoZWxwZXJQYXRofWA7XG4gICAgICAgICAgfSBlbHNlIGlmIChzcGF3bkVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ0UyQklHJykpIHtcbiAgICAgICAgICAgIGVycm9yRGV0YWlsID0gYE9BVVRIX0hFTFBFUl9TUEFXTl9FMkJJRzogQXJndW1lbnQgbGlzdCB0b28gbG9uZyBmb3IgaGVscGVyIHByb2Nlc3NgO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvckRldGFpbCA9IGBPQVVUSF9IRUxQRVJfU1BBV05fRkFJTEVEOiBDb3VsZCBub3Qgc3RhcnQgYmFja2dyb3VuZCBhdXRoZW50aWNhdGlvbiBwcm9jZXNzIGF0IGxpbmUgMjc3NCAtICR7c3Bhd25FcnJvci5tZXNzYWdlfWA7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVycm9yRGV0YWlsID0gYE9BVVRIX0hFTFBFUl9TUEFXTl9VTktOT1dOOiBVbmtub3duIHNwYXduIGVycm9yIGF0IGxpbmUgMjc3NGA7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIEZhbGwgYmFjayB0byBpbmZvcm1pbmcgdXNlciBhYm91dCB0aGUgaXNzdWVcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3imqDvuI8gKipPQXV0aCBIZWxwZXIgTGF1bmNoIEZhaWxlZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgJHtlcnJvckRldGFpbH1cXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGAqKkFsdGVybmF0aXZlIE9wdGlvbnM6KipcXG5gICtcbiAgICAgICAgICAgICAgICAgIGAxLiBUcnkgYWdhaW46IFJ1biBzZXR1cF9naXRodWJfYXV0aCBhZ2FpblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYDIuIFVzZSBHaXRIdWIgQ0xJOiBnaCBhdXRoIGxvZ2luIC0td2ViXFxuYCArXG4gICAgICAgICAgICAgICAgICBgMy4gU2V0IHRva2VuIG1hbnVhbGx5OiBleHBvcnQgR0lUSFVCX1RPS0VOPXlvdXJfdG9rZW5gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gUmV0dXJuIGluc3RydWN0aW9ucyB0byB1c2VyXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IHRoaXMuZ2l0aHViQXV0aE1hbmFnZXIuZm9ybWF0QXV0aEluc3RydWN0aW9ucyhkZXZpY2VSZXNwb25zZSkgK1xuICAgICAgICAgICAgICAgICdcXG5cXG7wn5OdICoqTm90ZSoqOiBBdXRoZW50aWNhdGlvbiB3aWxsIGNvbXBsZXRlIGF1dG9tYXRpY2FsbHkgb25jZSB5b3UgYXV0aG9yaXplLiAnICtcbiAgICAgICAgICAgICAgICAnWW91ciB0b2tlbiB3aWxsIGJlIHN0b3JlZCBzZWN1cmVseSBmb3IgZnV0dXJlIHVzZSEnXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ09BVVRIX0lOREVYXzI4MDY6IE1haW4gY2F0Y2ggYmxvY2sgLSBhdXRoZW50aWNhdGlvbiBzZXR1cCBmYWlsZWQnLCB7IFxuICAgICAgICBlcnJvcixcbiAgICAgICAgZXJyb3JUeXBlOiBlcnJvcj8uY29uc3RydWN0b3I/Lm5hbWUsXG4gICAgICAgIGVycm9yTWVzc2FnZTogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93bidcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBJZiBlcnJvciBhbHJlYWR5IGhhcyBvdXIgZXJyb3IgY29kZSwgcGFzcyBpdCB0aHJvdWdoXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJztcbiAgICAgIGNvbnN0IGhhc0Vycm9yQ29kZSA9IGVycm9yTWVzc2FnZS5pbmNsdWRlcygnT0FVVEhfJyk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqQXV0aGVudGljYXRpb24gU2V0dXAgRmFpbGVkKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgJHtoYXNFcnJvckNvZGUgPyBlcnJvck1lc3NhZ2UgOiBgT0FVVEhfSU5ERVhfMjgwNjogVW5hYmxlIHRvIHN0YXJ0IEdpdEh1YiBhdXRoZW50aWNhdGlvbiAtICR7ZXJyb3JNZXNzYWdlfWB9XFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYCR7IWVycm9yTWVzc2FnZS5pbmNsdWRlcygnT0FVVEhfTkVUV09SSycpID8gJ1BsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24gYW5kIHRyeSBhZ2Fpbi4nIDogJyd9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIGNoZWNrR2l0SHViQXV0aCgpIHtcbiAgICB0cnkge1xuICAgICAgLy8gRmlyc3QgY2hlY2sgZm9yIE9BdXRoIGhlbHBlciBwcm9jZXNzIGhlYWx0aFxuICAgICAgY29uc3QgaGVscGVySGVhbHRoID0gYXdhaXQgdGhpcy5jaGVja09BdXRoSGVscGVySGVhbHRoKCk7XG4gICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCB0aGlzLmdpdGh1YkF1dGhNYW5hZ2VyLmdldEF1dGhTdGF0dXMoKTtcbiAgICAgIFxuICAgICAgaWYgKHN0YXR1cy5pc0F1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgLy8gQ2xlYW4gdXAgaGVscGVyIHN0YXRlIGZpbGUgaWYgYXV0aCBpcyBzdWNjZXNzZnVsXG4gICAgICAgIGlmIChoZWxwZXJIZWFsdGguZXhpc3RzKSB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVGaWxlID0gcGF0aC5qb2luKGhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAnLmF1dGgnLCAnb2F1dGgtaGVscGVyLXN0YXRlLmpzb24nKTtcbiAgICAgICAgICBhd2FpdCBmcy51bmxpbmsoc3RhdGVGaWxlKS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pyFICoqR2l0SHViIENvbm5lY3RlZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBg8J+RpCAqKlVzZXJuYW1lOioqICR7c3RhdHVzLnVzZXJuYW1lfVxcbmAgK1xuICAgICAgICAgICAgICAgICAgYPCflJEgKipQZXJtaXNzaW9uczoqKiAke3N0YXR1cy5zY29wZXM/LmpvaW4oJywgJykgfHwgJ2Jhc2ljIGFjY2Vzcyd9XFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgKipBdmFpbGFibGUgQWN0aW9uczoqKlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKchSBCcm93c2UgY29sbGVjdGlvblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKchSBJbnN0YWxsIGNvbnRlbnRcXG5gICtcbiAgICAgICAgICAgICAgICAgIGDinIUgU3VibWl0IGNvbnRlbnRcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBFdmVyeXRoaW5nIGlzIHdvcmtpbmcgcHJvcGVybHkhYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGhlbHBlckhlYWx0aC5pc0FjdGl2ZSkge1xuICAgICAgICAvLyBPQXV0aCBoZWxwZXIgaXMgYWN0aXZlbHkgcG9sbGluZ1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKPsyAqKkdpdEh1YiBBdXRoZW50aWNhdGlvbiBJbiBQcm9ncmVzcyoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBg8J+UkSAqKlVzZXIgQ29kZToqKiAke2hlbHBlckhlYWx0aC51c2VyQ29kZX1cXG5gICtcbiAgICAgICAgICAgICAgICAgIGDij7HvuI8gKipUaW1lIFJlbWFpbmluZzoqKiAke01hdGguZmxvb3IoaGVscGVySGVhbHRoLnRpbWVSZW1haW5pbmcgLyA2MCl9bSAke2hlbHBlckhlYWx0aC50aW1lUmVtYWluaW5nICUgNjB9c1xcbmAgK1xuICAgICAgICAgICAgICAgICAgYPCflIQgKipQcm9jZXNzIFN0YXR1czoqKiAke2hlbHBlckhlYWx0aC5wcm9jZXNzQWxpdmUgPyAn4pyFIFJ1bm5pbmcnIDogJ+KaoO+4jyBNYXkgaGF2ZSBzdG9wcGVkJ31cXG5gICtcbiAgICAgICAgICAgICAgICAgIGDwn5OBICoqTG9nIEF2YWlsYWJsZToqKiAke2hlbHBlckhlYWx0aC5oYXNMb2cgPyAnWWVzJyA6ICdObyd9XFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgKipXYWl0aW5nIGZvciB5b3UgdG86KipcXG5gICtcbiAgICAgICAgICAgICAgICAgIGAxLiBHbyB0bzogaHR0cHM6Ly9naXRodWIuY29tL2xvZ2luL2RldmljZVxcbmAgK1xuICAgICAgICAgICAgICAgICAgYDIuIEVudGVyIGNvZGU6ICoqJHtoZWxwZXJIZWFsdGgudXNlckNvZGV9KipcXG5gICtcbiAgICAgICAgICAgICAgICAgIGAzLiBBdXRob3JpemUgdGhlIGFwcGxpY2F0aW9uXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgVGhlIGF1dGhlbnRpY2F0aW9uIHdpbGwgY29tcGxldGUgYXV0b21hdGljYWxseSBvbmNlIHlvdSBhdXRob3JpemUuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgUnVuIHRoaXMgY29tbWFuZCBhZ2FpbiB0byBjaGVjayBzdGF0dXMuYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGhlbHBlckhlYWx0aC5leGlzdHMgJiYgaGVscGVySGVhbHRoLmV4cGlyZWQpIHtcbiAgICAgICAgLy8gSGVscGVyIHN0YXRlIGV4aXN0cyBidXQgZXhwaXJlZFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKPse+4jyAqKkF1dGhlbnRpY2F0aW9uIEV4cGlyZWQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYFRoZSBHaXRIdWIgYXV0aGVudGljYXRpb24gcmVxdWVzdCBoYXMgZXhwaXJlZC5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBVc2VyIGNvZGU6ICR7aGVscGVySGVhbHRoLnVzZXJDb2RlfSAoZXhwaXJlZClcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGAqKlRvIHRyeSBhZ2FpbjoqKlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYFJ1bjogXFxgc2V0dXBfZ2l0aHViX2F1dGhcXGAgdG8gZ2V0IGEgbmV3IGNvZGVcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGAke2hlbHBlckhlYWx0aC5lcnJvckxvZyA/IGAqKkVycm9yIExvZzoqKlxcblxcYFxcYFxcYFxcbiR7aGVscGVySGVhbHRoLmVycm9yTG9nfVxcblxcYFxcYFxcYFxcbmAgOiAnJ31gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdHVzLmhhc1Rva2VuKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pqg77iPICoqR2l0SHViIFRva2VuIEludmFsaWQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYEEgR2l0SHViIHRva2VuIHdhcyBmb3VuZCBidXQgaXQgYXBwZWFycyB0byBiZSBpbnZhbGlkIG9yIGV4cGlyZWQuXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgKipUbyBmaXggdGhpczoqKlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYDEuIFNheSBcInNldCB1cCBHaXRIdWJcIiB0byBhdXRoZW50aWNhdGUgYWdhaW5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGAyLiBPciBjaGVjayB5b3VyIEdJVEhVQl9UT0tFTiBlbnZpcm9ubWVudCB2YXJpYWJsZVxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYE5vdGU6IEJyb3dzZSBhbmQgaW5zdGFsbCBzdGlsbCB3b3JrIHdpdGhvdXQgYXV0aGVudGljYXRpb24hYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCflJIgKipOb3QgQ29ubmVjdGVkIHRvIEdpdEh1YioqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgWW91J3JlIG5vdCBjdXJyZW50bHkgYXV0aGVudGljYXRlZCB3aXRoIEdpdEh1Yi5cXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGAqKldoYXQgd29ya3Mgd2l0aG91dCBhdXRoOioqXFxuYCArXG4gICAgICAgICAgICAgICAgICBg4pyFIEJyb3dzZSB0aGUgcHVibGljIGNvbGxlY3Rpb25cXG5gICtcbiAgICAgICAgICAgICAgICAgIGDinIUgSW5zdGFsbCBjb21tdW5pdHkgY29udGVudFxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKdjCBTdWJtaXQgeW91ciBvd24gY29udGVudCAocmVxdWlyZXMgYXV0aClcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBUbyBjb25uZWN0LCBqdXN0IHNheSBcInNldCB1cCBHaXRIdWJcIiBvciBcImNvbm5lY3QgdG8gR2l0SHViXCJgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gY2hlY2sgR2l0SHViIGF1dGgnLCB7IGVycm9yIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipVbmFibGUgdG8gQ2hlY2sgQXV0aGVudGljYXRpb24qKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGBFcnJvcjogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgLy8gUHVibGljIG1ldGhvZCBmb3Igb2F1dGhfaGVscGVyX3N0YXR1cyB0b29sXG4gIGFzeW5jIGdldE9BdXRoSGVscGVyU3RhdHVzKHZlcmJvc2U6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBoZWFsdGggPSBhd2FpdCB0aGlzLmNoZWNrT0F1dGhIZWxwZXJIZWFsdGgoKTtcbiAgICAgIGNvbnN0IHN0YXRlRmlsZSA9IHBhdGguam9pbihob21lZGlyKCksICcuZG9sbGhvdXNlJywgJy5hdXRoJywgJ29hdXRoLWhlbHBlci1zdGF0ZS5qc29uJyk7XG4gICAgICBjb25zdCBsb2dGaWxlID0gcGF0aC5qb2luKGhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAnb2F1dGgtaGVscGVyLmxvZycpO1xuICAgICAgY29uc3QgcGlkRmlsZSA9IHBhdGguam9pbihob21lZGlyKCksICcuZG9sbGhvdXNlJywgJy5hdXRoJywgJ29hdXRoLWhlbHBlci5waWQnKTtcbiAgICAgIFxuICAgICAgbGV0IHN0YXR1c1RleHQgPSBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5OKICoqT0F1dGggSGVscGVyIFByb2Nlc3MgRGlhZ25vc3RpY3MqKlxcblxcbmA7XG4gICAgICBcbiAgICAgIC8vIEJhc2ljIHN0YXR1c1xuICAgICAgaWYgKCFoZWFsdGguZXhpc3RzKSB7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoqU3RhdHVzOioqIE5vIE9BdXRoIHByb2Nlc3MgZGV0ZWN0ZWRcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKlN0YXRlIEZpbGU6KiogTm90IGZvdW5kXFxuXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgTm8gYWN0aXZlIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MuIFJ1biBcXGBzZXR1cF9naXRodWJfYXV0aFxcYCB0byBzdGFydCBvbmUuXFxuYDtcbiAgICAgIH0gZWxzZSBpZiAoaGVhbHRoLmlzQWN0aXZlKSB7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoqU3RhdHVzOioqIPCfn6IgQUNUSVZFIC0gQXV0aGVudGljYXRpb24gaW4gcHJvZ3Jlc3NcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKlVzZXIgQ29kZToqKiAke2hlYWx0aC51c2VyQ29kZX1cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKlByb2Nlc3MgSUQ6KiogJHtoZWFsdGgucGlkfVxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoqUHJvY2VzcyBBbGl2ZToqKiAke2hlYWx0aC5wcm9jZXNzQWxpdmUgPyAn4pyFIFllcycgOiAn4p2MIE5vIChtYXkgaGF2ZSBjcmFzaGVkKSd9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKipTdGFydGVkOioqICR7aGVhbHRoLnN0YXJ0VGltZT8udG9Mb2NhbGVTdHJpbmcoKX1cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKkV4cGlyZXM6KiogJHtoZWFsdGguZXhwaXJlc0F0Py50b0xvY2FsZVN0cmluZygpfVxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoqVGltZSBSZW1haW5pbmc6KiogJHtNYXRoLmZsb29yKGhlYWx0aC50aW1lUmVtYWluaW5nIC8gNjApfW0gJHtoZWFsdGgudGltZVJlbWFpbmluZyAlIDYwfXNcXG5cXG5gO1xuICAgICAgICBcbiAgICAgICAgaWYgKCFoZWFsdGgucHJvY2Vzc0FsaXZlKSB7XG4gICAgICAgICAgc3RhdHVzVGV4dCArPSBg4pqg77iPICoqV0FSTklORzoqKiBQcm9jZXNzIGFwcGVhcnMgdG8gaGF2ZSBzdG9wcGVkIVxcbmA7XG4gICAgICAgICAgc3RhdHVzVGV4dCArPSBgVGhlIGhlbHBlciBwcm9jZXNzIChQSUQgJHtoZWFsdGgucGlkfSkgaXMgbm90IHJlc3BvbmRpbmcuXFxuYDtcbiAgICAgICAgICBzdGF0dXNUZXh0ICs9IGBZb3UgbWF5IG5lZWQgdG8gcnVuIFxcYHNldHVwX2dpdGh1Yl9hdXRoXFxgIGFnYWluLlxcblxcbmA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaGVhbHRoLmV4cGlyZWQpIHtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKipTdGF0dXM6Kiog8J+UtCBFWFBJUkVEXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKipVc2VyIENvZGU6KiogJHtoZWFsdGgudXNlckNvZGV9IChleHBpcmVkKVxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoqUHJvY2VzcyBJRDoqKiAke2hlYWx0aC5waWR9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKipTdGFydGVkOioqICR7aGVhbHRoLnN0YXJ0VGltZT8udG9Mb2NhbGVTdHJpbmcoKX1cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKkV4cGlyZWQ6KiogJHtoZWFsdGguZXhwaXJlc0F0Py50b0xvY2FsZVN0cmluZygpfVxcblxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYFRoZSBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGhhcyBleHBpcmVkLiBSdW4gXFxgc2V0dXBfZ2l0aHViX2F1dGhcXGAgdG8gdHJ5IGFnYWluLlxcblxcbmA7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEZpbGUgbG9jYXRpb25zXG4gICAgICBzdGF0dXNUZXh0ICs9IGAqKvCfk4EgRmlsZSBMb2NhdGlvbnM6KipcXG5gO1xuICAgICAgc3RhdHVzVGV4dCArPSBg4oCiIFN0YXRlOiAke3N0YXRlRmlsZX1cXG5gO1xuICAgICAgc3RhdHVzVGV4dCArPSBg4oCiIExvZzogJHtsb2dGaWxlfSAke2hlYWx0aC5oYXNMb2cgPyAnKGV4aXN0cyknIDogJyhub3QgZm91bmQpJ31cXG5gO1xuICAgICAgc3RhdHVzVGV4dCArPSBg4oCiIFBJRDogJHtwaWRGaWxlfVxcblxcbmA7XG4gICAgICBcbiAgICAgIC8vIEVycm9yIGxvZyBpZiBhdmFpbGFibGVcbiAgICAgIGlmIChoZWFsdGguZXJyb3JMb2cpIHtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKirimqDvuI8gUmVjZW50IEVycm9yczoqKlxcblxcYFxcYFxcYFxcbiR7aGVhbHRoLmVycm9yTG9nfVxcblxcYFxcYFxcYFxcblxcbmA7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFZlcmJvc2UgbG9nIG91dHB1dFxuICAgICAgaWYgKHZlcmJvc2UgJiYgaGVhbHRoLmhhc0xvZykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGZ1bGxMb2cgPSBhd2FpdCBmcy5yZWFkRmlsZShsb2dGaWxlLCAndXRmLTgnKTtcbiAgICAgICAgICBjb25zdCBsaW5lcyA9IGZ1bGxMb2cuc3BsaXQoJ1xcbicpLmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpKTtcbiAgICAgICAgICBjb25zdCByZWNlbnRMaW5lcyA9IGxpbmVzLnNsaWNlKC0yMCk7IC8vIExhc3QgMjAgbGluZXNcbiAgICAgICAgICBcbiAgICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKvCfk5wgUmVjZW50IExvZyBPdXRwdXQgKGxhc3QgMjAgbGluZXMpOioqXFxuXFxgXFxgXFxgXFxuYDtcbiAgICAgICAgICBzdGF0dXNUZXh0ICs9IHJlY2VudExpbmVzLmpvaW4oJ1xcbicpO1xuICAgICAgICAgIHN0YXR1c1RleHQgKz0gYFxcblxcYFxcYFxcYFxcblxcbmA7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgc3RhdHVzVGV4dCArPSBgKirwn5OcIExvZzoqKiBVbmFibGUgdG8gcmVhZCBsb2cgZmlsZVxcblxcbmA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gVHJvdWJsZXNob290aW5nIHRpcHNcbiAgICAgIGlmIChoZWFsdGguZXhpc3RzICYmICFoZWFsdGgucHJvY2Vzc0FsaXZlICYmICFoZWFsdGguZXhwaXJlZCkge1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKvCflKcgVHJvdWJsZXNob290aW5nIFRpcHM6KipcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAxLiBUaGUgaGVscGVyIHByb2Nlc3MgbWF5IGhhdmUgY3Jhc2hlZFxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYDIuIENoZWNrIHRoZSBsb2cgZmlsZSBmb3IgZXJyb3JzOiAke2xvZ0ZpbGV9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgMy4gVHJ5IHJ1bm5pbmcgXFxgc2V0dXBfZ2l0aHViX2F1dGhcXGAgYWdhaW5cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGA0LiBFbnN1cmUgRE9MTEhPVVNFX0dJVEhVQl9DTElFTlRfSUQgaXMgc2V0XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgNS4gQ2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uXFxuYDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gTWFudWFsIGNsZWFudXAgaW5zdHJ1Y3Rpb25zXG4gICAgICBpZiAoaGVhbHRoLmV4aXN0cyAmJiAoaGVhbHRoLmV4cGlyZWQgfHwgIWhlYWx0aC5wcm9jZXNzQWxpdmUpKSB7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYFxcbioq8J+nuSBNYW51YWwgQ2xlYW51cCAoaWYgbmVlZGVkKToqKlxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYFxcYFxcYFxcYGJhc2hcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGBybSBcIiR7c3RhdGVGaWxlfVwiXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgcm0gXCIke2xvZ0ZpbGV9XCJcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGBybSBcIiR7cGlkRmlsZX1cIlxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYFxcYFxcYFxcYFxcbmA7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogc3RhdHVzVGV4dFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgT0F1dGggaGVscGVyIHN0YXR1cycsIHsgZXJyb3IgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKkZhaWxlZCB0byBHZXQgT0F1dGggSGVscGVyIFN0YXR1cyoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYEVycm9yOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIGNoZWNrIE9BdXRoIGhlbHBlciBwcm9jZXNzIGhlYWx0aFxuICBwcml2YXRlIGFzeW5jIGNoZWNrT0F1dGhIZWxwZXJIZWFsdGgoKSB7XG4gICAgY29uc3Qgc3RhdGVGaWxlID0gcGF0aC5qb2luKGhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAnLmF1dGgnLCAnb2F1dGgtaGVscGVyLXN0YXRlLmpzb24nKTtcbiAgICBjb25zdCBsb2dGaWxlID0gcGF0aC5qb2luKGhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAnb2F1dGgtaGVscGVyLmxvZycpO1xuICAgIFxuICAgIGNvbnN0IGhlYWx0aCA9IHtcbiAgICAgIGV4aXN0czogZmFsc2UsXG4gICAgICBpc0FjdGl2ZTogZmFsc2UsXG4gICAgICBleHBpcmVkOiBmYWxzZSxcbiAgICAgIHByb2Nlc3NBbGl2ZTogZmFsc2UsXG4gICAgICBoYXNMb2c6IGZhbHNlLFxuICAgICAgdXNlckNvZGU6ICcnLFxuICAgICAgdGltZVJlbWFpbmluZzogMCxcbiAgICAgIHBpZDogMCxcbiAgICAgIHN0YXJ0VGltZTogbnVsbCBhcyBEYXRlIHwgbnVsbCxcbiAgICAgIGV4cGlyZXNBdDogbnVsbCBhcyBEYXRlIHwgbnVsbCxcbiAgICAgIGVycm9yTG9nOiAnJ1xuICAgIH07XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIC8vIENoZWNrIGlmIHN0YXRlIGZpbGUgZXhpc3RzXG4gICAgICBjb25zdCBzdGF0ZURhdGEgPSBhd2FpdCBmcy5yZWFkRmlsZShzdGF0ZUZpbGUsICd1dGYtOCcpO1xuICAgICAgY29uc3Qgc3RhdGUgPSBKU09OLnBhcnNlKHN0YXRlRGF0YSk7XG4gICAgICBoZWFsdGguZXhpc3RzID0gdHJ1ZTtcbiAgICAgIGhlYWx0aC5waWQgPSBzdGF0ZS5waWQ7XG4gICAgICBoZWFsdGgudXNlckNvZGUgPSBzdGF0ZS51c2VyQ29kZTtcbiAgICAgIGhlYWx0aC5zdGFydFRpbWUgPSBuZXcgRGF0ZShzdGF0ZS5zdGFydFRpbWUpO1xuICAgICAgaGVhbHRoLmV4cGlyZXNBdCA9IG5ldyBEYXRlKHN0YXRlLmV4cGlyZXNBdCk7XG4gICAgICBcbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICBpZiAoaGVhbHRoLmV4cGlyZXNBdCA+IG5vdykge1xuICAgICAgICBoZWFsdGguaXNBY3RpdmUgPSB0cnVlO1xuICAgICAgICBoZWFsdGgudGltZVJlbWFpbmluZyA9IE1hdGguY2VpbCgoaGVhbHRoLmV4cGlyZXNBdC5nZXRUaW1lKCkgLSBub3cuZ2V0VGltZSgpKSAvIDEwMDApO1xuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgaWYgcHJvY2VzcyBpcyBzdGlsbCBhbGl2ZSAoVW5peC9MaW51eC9NYWMpXG4gICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtICE9PSAnd2luMzInKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFNlbmQgc2lnbmFsIDAgdG8gY2hlY2sgaWYgcHJvY2VzcyBleGlzdHNcbiAgICAgICAgICAgIHByb2Nlc3Mua2lsbChoZWFsdGgucGlkLCAwKTtcbiAgICAgICAgICAgIGhlYWx0aC5wcm9jZXNzQWxpdmUgPSB0cnVlO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgaGVhbHRoLnByb2Nlc3NBbGl2ZSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPbiBXaW5kb3dzLCB3ZSBjYW4ndCBlYXNpbHkgY2hlY2ssIHNvIGFzc3VtZSBpdCdzIGFsaXZlIGlmIG5vdCBleHBpcmVkXG4gICAgICAgICAgaGVhbHRoLnByb2Nlc3NBbGl2ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhlYWx0aC5leHBpcmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgZm9yIGxvZyBmaWxlXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy5hY2Nlc3MobG9nRmlsZSk7XG4gICAgICAgIGhlYWx0aC5oYXNMb2cgPSB0cnVlO1xuICAgICAgICBcbiAgICAgICAgLy8gUmVhZCBsYXN0IGZldyBsaW5lcyBvZiBsb2cgaWYgdGhlcmUncyBhbiBlcnJvclxuICAgICAgICBpZiAoIWhlYWx0aC5wcm9jZXNzQWxpdmUgfHwgaGVhbHRoLmV4cGlyZWQpIHtcbiAgICAgICAgICBjb25zdCBsb2dDb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUobG9nRmlsZSwgJ3V0Zi04Jyk7XG4gICAgICAgICAgY29uc3QgbGluZXMgPSBsb2dDb250ZW50LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAvLyBHZXQgbGFzdCAxMCBsaW5lcyB0aGF0IGNvbnRhaW4gZXJyb3JzIG9yIGltcG9ydGFudCBpbmZvXG4gICAgICAgICAgY29uc3QgaW1wb3J0YW50TGluZXMgPSBsaW5lcy5maWx0ZXIobGluZSA9PiBcbiAgICAgICAgICAgIGxpbmUuaW5jbHVkZXMoJ2Vycm9yJykgfHwgXG4gICAgICAgICAgICBsaW5lLmluY2x1ZGVzKCdFcnJvcicpIHx8IFxuICAgICAgICAgICAgbGluZS5pbmNsdWRlcygnZmFpbGVkJykgfHxcbiAgICAgICAgICAgIGxpbmUuaW5jbHVkZXMoJ0ZhaWxlZCcpIHx8XG4gICAgICAgICAgICBsaW5lLmluY2x1ZGVzKCfinYwnKSB8fFxuICAgICAgICAgICAgbGluZS5pbmNsdWRlcygn4o+x77iPJylcbiAgICAgICAgICApLnNsaWNlKC0xMCk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKGltcG9ydGFudExpbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGhlYWx0aC5lcnJvckxvZyA9IGltcG9ydGFudExpbmVzLmpvaW4oJ1xcbicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIExvZyBmaWxlIGRvZXNuJ3QgZXhpc3RcbiAgICAgIH1cbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBTdGF0ZSBmaWxlIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgaW52YWxpZFxuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnRU5PRU5UJykpIHtcbiAgICAgICAgLy8gRmlsZSBkb2Vzbid0IGV4aXN0LCB0aGF0J3Mgb2tcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnRXJyb3IgcmVhZGluZyBPQXV0aCBoZWxwZXIgc3RhdGUnLCB7IGVycm9yIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4gaGVhbHRoO1xuICB9XG4gIFxuICBhc3luYyBjbGVhckdpdEh1YkF1dGgoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZ2l0aHViQXV0aE1hbmFnZXIuY2xlYXJBdXRoZW50aWNhdGlvbigpO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKchSAqKkdpdEh1YiBEaXNjb25uZWN0ZWQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGBZb3VyIEdpdEh1YiBjb25uZWN0aW9uIGhhcyBiZWVuIGNsZWFyZWQuXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYCoqV2hhdCBzdGlsbCB3b3JrczoqKlxcbmAgK1xuICAgICAgICAgICAgICAgIGDinIUgQnJvd3NlIHRoZSBwdWJsaWMgY29sbGVjdGlvblxcbmAgK1xuICAgICAgICAgICAgICAgIGDinIUgSW5zdGFsbCBjb21tdW5pdHkgY29udGVudFxcbmAgK1xuICAgICAgICAgICAgICAgIGDinYwgU3VibWl0IGNvbnRlbnQgKHJlcXVpcmVzIHJlY29ubmVjdGlvbilcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgVG8gcmVjb25uZWN0IGxhdGVyLCBqdXN0IHNheSBcImNvbm5lY3QgdG8gR2l0SHViXCJcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBg4pqg77iPICoqTm90ZToqKiBUbyBmdWxseSByZW1vdmUgYXV0aGVudGljYXRpb24sIGFsc28gdW5zZXQgdGhlIEdJVEhVQl9UT0tFTiBlbnZpcm9ubWVudCB2YXJpYWJsZS5gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBjbGVhciBHaXRIdWIgYXV0aCcsIHsgZXJyb3IgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKkZhaWxlZCB0byBDbGVhciBBdXRoZW50aWNhdGlvbioqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYEVycm9yOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLy8gT0F1dGggY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50XG4gIGFzeW5jIGNvbmZpZ3VyZU9BdXRoKGNsaWVudF9pZD86IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWdNYW5hZ2VyID0gQ29uZmlnTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgICAgYXdhaXQgY29uZmlnTWFuYWdlci5pbml0aWFsaXplKCk7XG4gICAgICBcbiAgICAgIC8vIElmIG5vIGNsaWVudF9pZCBwcm92aWRlZCwgc2hvdyBjdXJyZW50IGNvbmZpZ3VyYXRpb24gc3RhdHVzXG4gICAgICBpZiAoIWNsaWVudF9pZCkge1xuICAgICAgICAvLyBDaGVjayB3aGF0IE9BdXRoIGNsaWVudCBJRCB3aWxsIGFjdHVhbGx5IGJlIHVzZWRcbiAgICAgICAgLy8gVGhpcyBtYXRjaGVzIHRoZSBsb2dpYyBpbiBHaXRIdWJBdXRoTWFuYWdlci5nZXRDbGllbnRJZCgpXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDbGllbnRJZCA9IGF3YWl0IEdpdEh1YkF1dGhNYW5hZ2VyLmdldENsaWVudElkKCk7XG4gICAgICAgIFxuICAgICAgICBpZiAoY3VycmVudENsaWVudElkKSB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyB1c2luZyB0aGUgZGVmYXVsdCBvciBhIGN1c3RvbSBjb25maWdcbiAgICAgICAgICBjb25zdCBjb25maWd1cmVkQ2xpZW50SWQgPSBjb25maWdNYW5hZ2VyLmdldEdpdEh1YkNsaWVudElkKCk7XG4gICAgICAgICAgY29uc3QgaXNVc2luZ0RlZmF1bHQgPSAhY29uZmlndXJlZENsaWVudElkO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIFNob3cgZmlyc3QgMTAgY2hhcmFjdGVycyBmb3Igc2VjdXJpdHlcbiAgICAgICAgICBjb25zdCBtYXNrZWRDbGllbnRJZCA9IGN1cnJlbnRDbGllbnRJZC5zdWJzdHJpbmcoMCwgMTApICsgJy4uLic7XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgKipHaXRIdWIgT0F1dGggQ29uZmlndXJhdGlvbioqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGAqKkN1cnJlbnQgU3RhdHVzOioqICR7aXNVc2luZ0RlZmF1bHQgPyAnVXNpbmcgRGVmYXVsdCcgOiAnQ29uZmlndXJlZCd9XFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGAqKkNsaWVudCBJRDoqKiAke21hc2tlZENsaWVudElkfVxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBgKipTb3VyY2U6KiogJHtpc1VzaW5nRGVmYXVsdCA/ICdCdWlsdC1pbiBEb2xsaG91c2VNQ1AgT0F1dGggQXBwJyA6ICdDdXN0b20gQ29uZmlndXJhdGlvbid9XFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGBZb3VyIEdpdEh1YiBPQXV0aCBpcyByZWFkeSB0byB1c2UhIFlvdSBjYW4gbm93OlxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBg4oCiIFJ1biBzZXR1cF9naXRodWJfYXV0aCB0byBjb25uZWN0XFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGDigKIgU3VibWl0IGNvbnRlbnQgdG8gdGhlIGNvbGxlY3Rpb25cXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYOKAoiBBY2Nlc3MgYXV0aGVudGljYXRlZCBmZWF0dXJlc1xcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgICAoaXNVc2luZ0RlZmF1bHQgPyBcbiAgICAgICAgICAgICAgICAgICAgICBgKipOb3RlOioqIFVzaW5nIHRoZSBkZWZhdWx0IERvbGxob3VzZU1DUCBPQXV0aCBhcHAuXFxuYCArXG4gICAgICAgICAgICAgICAgICAgICAgYFRvIHVzZSB5b3VyIG93biBPQXV0aCBhcHAsIHByb3ZpZGUgYSBjbGllbnRfaWQgcGFyYW1ldGVyLlxcblxcbmAgOiBcbiAgICAgICAgICAgICAgICAgICAgICBgVG8gdXBkYXRlIHRoZSBjb25maWd1cmF0aW9uLCBwcm92aWRlIGEgbmV3IGNsaWVudF9pZCBwYXJhbWV0ZXIuXFxuXFxuYClcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gc2luY2UgR2l0SHViQXV0aE1hbmFnZXIuZ2V0Q2xpZW50SWQoKSBhbHdheXMgcmV0dXJucyBzb21ldGhpbmdcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKaoO+4jyAqKkdpdEh1YiBPQXV0aCBOb3QgQ29uZmlndXJlZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGBObyBHaXRIdWIgT0F1dGggY2xpZW50IElEIGlzIGN1cnJlbnRseSBjb25maWd1cmVkLlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBgKipUbyBzZXQgdXAgT0F1dGg6KipcXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYDEuIENyZWF0ZSBhIEdpdEh1YiBPQXV0aCBhcHAgYXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9zZXR0aW5ncy9hcHBsaWNhdGlvbnMvbmV3XFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGAyLiBVc2UgdGhlc2Ugc2V0dGluZ3M6XFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGAgICDigKIgSG9tZXBhZ2UgVVJMOiBodHRwczovL2dpdGh1Yi5jb20vRG9sbGhvdXNlTUNQXFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGAgICDigKIgQXV0aG9yaXphdGlvbiBjYWxsYmFjayBVUkw6IGh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9jYWxsYmFja1xcbmAgK1xuICAgICAgICAgICAgICAgICAgICBgMy4gQ29weSB5b3VyIENsaWVudCBJRCAoc3RhcnRzIHdpdGggXCJPdjIzbGlcIilcXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYDQuIFJ1bjogY29uZmlndXJlX29hdXRoIHdpdGggeW91ciBjbGllbnRfaWQgcGFyYW1ldGVyXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGAqKk5lZWQgaGVscD8qKiBDaGVjayB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlsZWQgc2V0dXAgaW5zdHJ1Y3Rpb25zLmBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSBjbGllbnQgSUQgZm9ybWF0XG4gICAgICBpZiAoIUNvbmZpZ01hbmFnZXIudmFsaWRhdGVDbGllbnRJZChjbGllbnRfaWQpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqSW52YWxpZCBDbGllbnQgSUQgRm9ybWF0KipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBHaXRIdWIgT0F1dGggQ2xpZW50IElEcyBtdXN0OlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKAoiBTdGFydCB3aXRoIFwiT3YyM2xpXCJcXG5gICtcbiAgICAgICAgICAgICAgICAgIGDigKIgQmUgZm9sbG93ZWQgYnkgYXQgbGVhc3QgMTQgYWxwaGFudW1lcmljIGNoYXJhY3RlcnNcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGAqKkV4YW1wbGU6KiogT3YyM2xpQUJDREVGR0hJSktMTU5cXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBQbGVhc2UgY2hlY2sgeW91ciBjbGllbnQgSUQgYW5kIHRyeSBhZ2Fpbi5gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gU2F2ZSB0aGUgY2xpZW50IElEXG4gICAgICBhd2FpdCBjb25maWdNYW5hZ2VyLnNldEdpdEh1YkNsaWVudElkKGNsaWVudF9pZCk7XG4gICAgICBcbiAgICAgIC8vIFNob3cgc3VjY2VzcyBtZXNzYWdlIHdpdGggbWFza2VkIElEXG4gICAgICBjb25zdCBtYXNrZWRDbGllbnRJZCA9IGNsaWVudF9pZC5zdWJzdHJpbmcoMCwgMTApICsgJy4uLic7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKchSAqKkdpdEh1YiBPQXV0aCBDb25maWd1cmVkIFN1Y2Nlc3NmdWxseSoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYCoqQ2xpZW50IElEOioqICR7bWFza2VkQ2xpZW50SWR9XFxuYCArXG4gICAgICAgICAgICAgICAgYCoqU2F2ZWQgdG86Kiogfi8uZG9sbGhvdXNlL2NvbmZpZy5qc29uXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYFlvdXIgR2l0SHViIE9BdXRoIGlzIG5vdyByZWFkeSEgTmV4dCBzdGVwczpcXG5gICtcbiAgICAgICAgICAgICAgICBg4oCiIFJ1biBzZXR1cF9naXRodWJfYXV0aCB0byBjb25uZWN0IHlvdXIgYWNjb3VudFxcbmAgK1xuICAgICAgICAgICAgICAgIGDigKIgU3RhcnQgc3VibWl0dGluZyBjb250ZW50IHRvIHRoZSBjb2xsZWN0aW9uXFxuYCArXG4gICAgICAgICAgICAgICAgYOKAoiBBY2Nlc3MgYWxsIGF1dGhlbnRpY2F0ZWQgZmVhdHVyZXNcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgKipOb3RlOioqIFlvdXIgY2xpZW50IElEIGlzIHNlY3VyZWx5IHN0b3JlZCBpbiB5b3VyIGxvY2FsIGNvbmZpZyBmaWxlLmBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gY29uZmlndXJlIE9BdXRoJywgeyBlcnJvciB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqT0F1dGggQ29uZmlndXJhdGlvbiBGYWlsZWQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGBFcnJvcjogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31cXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgUGxlYXNlIGNoZWNrOlxcbmAgK1xuICAgICAgICAgICAgICAgIGDigKIgRmlsZSBwZXJtaXNzaW9ucyBmb3Igfi8uZG9sbGhvdXNlL2NvbmZpZy5qc29uXFxuYCArXG4gICAgICAgICAgICAgICAgYOKAoiBWYWxpZCBjbGllbnQgSUQgZm9ybWF0IChzdGFydHMgd2l0aCBcIk92MjNsaVwiKVxcbmAgK1xuICAgICAgICAgICAgICAgIGDigKIgQXZhaWxhYmxlIGRpc2sgc3BhY2VgXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIENoYXQtYmFzZWQgcGVyc29uYSBtYW5hZ2VtZW50IHRvb2xzXG4gIGFzeW5jIGNyZWF0ZVBlcnNvbmEobmFtZTogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nLCBpbnN0cnVjdGlvbnM6IHN0cmluZywgdHJpZ2dlcnM/OiBzdHJpbmcpIHtcbiAgICAvLyBFbnN1cmUgaW5pdGlhbGl6YXRpb24gZm9yIHRlc3QgY29tcGF0aWJpbGl0eVxuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgLy8gVmFsaWRhdGUgcmVxdWlyZWQgZmllbGRzXG4gICAgICBpZiAoIW5hbWUgfHwgIWRlc2NyaXB0aW9uIHx8ICFpbnN0cnVjdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipNaXNzaW5nIFJlcXVpcmVkIEZpZWxkcyoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYFBsZWFzZSBwcm92aWRlIGFsbCByZXF1aXJlZCBmaWVsZHM6XFxuYCArXG4gICAgICAgICAgICAgICAgYOKAoiAqKm5hbWUqKjogRGlzcGxheSBuYW1lIGZvciB0aGUgcGVyc29uYVxcbmAgK1xuICAgICAgICAgICAgICAgIGDigKIgKipkZXNjcmlwdGlvbioqOiBCcmllZiBkZXNjcmlwdGlvbiBvZiB3aGF0IGl0IGRvZXNcXG5gICtcbiAgICAgICAgICAgICAgICBg4oCiICoqaW5zdHJ1Y3Rpb25zKio6IFRoZSBwZXJzb25hJ3MgYmVoYXZpb3JhbCBndWlkZWxpbmVzXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYCoqT3B0aW9uYWw6KipcXG5gICtcbiAgICAgICAgICAgICAgICBg4oCiICoqdHJpZ2dlcnMqKjogQ29tbWEtc2VwYXJhdGVkIGtleXdvcmRzIGZvciBhY3RpdmF0aW9uYCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gU2FuaXRpemUgYW5kIHZhbGlkYXRlIGlucHV0c1xuICAgICAgY29uc3Qgc2FuaXRpemVkTmFtZSA9IHNhbml0aXplSW5wdXQobmFtZSwgMTAwKTtcbiAgICAgIGNvbnN0IHNhbml0aXplZERlc2NyaXB0aW9uID0gc2FuaXRpemVJbnB1dChkZXNjcmlwdGlvbiwgNTAwKTtcbiAgICAgIC8vIEZJWDogUGFzcyBNQVhfQ09OVEVOVF9MRU5HVEggdG8gcHJldmVudCB0cnVuY2F0aW9uIGF0IGRlZmF1bHQgMTAwMCBjaGFyc1xuICAgICAgY29uc3Qgc2FuaXRpemVkSW5zdHJ1Y3Rpb25zID0gc2FuaXRpemVJbnB1dChpbnN0cnVjdGlvbnMsIFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEgpO1xuICAgICAgY29uc3Qgc2FuaXRpemVkVHJpZ2dlcnMgPSB0cmlnZ2VycyA/IHNhbml0aXplSW5wdXQodHJpZ2dlcnMsIDIwMCkgOiAnJztcblxuICAgICAgLy8gVmFsaWRhdGUgbmFtZSBsZW5ndGggYW5kIGZvcm1hdFxuICAgICAgaWYgKHNhbml0aXplZE5hbWUubGVuZ3RoIDwgMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BlcnNvbmEgbmFtZSBtdXN0IGJlIGF0IGxlYXN0IDIgY2hhcmFjdGVycyBsb25nJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vIGNhdGVnb3J5IHZhbGlkYXRpb24gbmVlZGVkIC0gY2F0ZWdvcmllcyBhcmUgZGVwcmVjYXRlZFxuXG4gICAgICAvLyBWYWxpZGF0ZSBjb250ZW50IHNpemVzXG4gICAgICB2YWxpZGF0ZUNvbnRlbnRTaXplKHNhbml0aXplZEluc3RydWN0aW9ucywgU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCk7XG4gICAgICB2YWxpZGF0ZUNvbnRlbnRTaXplKHNhbml0aXplZERlc2NyaXB0aW9uLCAyMDAwKTsgLy8gMktCIG1heCBmb3IgZGVzY3JpcHRpb25cblxuICAgICAgLy8gVmFsaWRhdGUgY29udGVudCBmb3Igc2VjdXJpdHkgdGhyZWF0c1xuICAgICAgY29uc3QgbmFtZVZhbGlkYXRpb24gPSBDb250ZW50VmFsaWRhdG9yLnZhbGlkYXRlQW5kU2FuaXRpemUoc2FuaXRpemVkTmFtZSk7XG4gICAgICBpZiAoIW5hbWVWYWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOYW1lIGNvbnRhaW5zIHByb2hpYml0ZWQgY29udGVudDogJHtuYW1lVmFsaWRhdGlvbi5kZXRlY3RlZFBhdHRlcm5zPy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZXNjVmFsaWRhdGlvbiA9IENvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVBbmRTYW5pdGl6ZShzYW5pdGl6ZWREZXNjcmlwdGlvbik7XG4gICAgICBpZiAoIWRlc2NWYWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEZXNjcmlwdGlvbiBjb250YWlucyBwcm9oaWJpdGVkIGNvbnRlbnQ6ICR7ZGVzY1ZhbGlkYXRpb24uZGV0ZWN0ZWRQYXR0ZXJucz8uam9pbignLCAnKX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25zVmFsaWRhdGlvbiA9IENvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVBbmRTYW5pdGl6ZShzYW5pdGl6ZWRJbnN0cnVjdGlvbnMpO1xuICAgICAgaWYgKCFpbnN0cnVjdGlvbnNWYWxpZGF0aW9uLmlzVmFsaWQgJiYgaW5zdHJ1Y3Rpb25zVmFsaWRhdGlvbi5zZXZlcml0eSA9PT0gJ2NyaXRpY2FsJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3RydWN0aW9ucyBjb250YWluIHNlY3VyaXR5IHRocmVhdHM6ICR7aW5zdHJ1Y3Rpb25zVmFsaWRhdGlvbi5kZXRlY3RlZFBhdHRlcm5zPy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuXG4gICAgICAvLyBHZW5lcmF0ZSBtZXRhZGF0YVxuICAgICAgY29uc3QgYXV0aG9yID0gdGhpcy5nZXRDdXJyZW50VXNlckZvckF0dHJpYnV0aW9uKCk7XG4gICAgICBjb25zdCB1bmlxdWVJZCA9IGdlbmVyYXRlVW5pcXVlSWQoc2FuaXRpemVkTmFtZSwgdGhpcy5jdXJyZW50VXNlciB8fCB1bmRlZmluZWQpO1xuICAgICAgY29uc3QgZmlsZW5hbWUgPSB2YWxpZGF0ZUZpbGVuYW1lKGAke3NsdWdpZnkoc2FuaXRpemVkTmFtZSl9Lm1kYCk7XG4gICAgICAvLyBwZXJzb25hc0RpciBpcyBndWFyYW50ZWVkIHRvIGJlIHNldCBhZnRlciBlbnN1cmVJbml0aWFsaXplZCgpXG4gICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLnBlcnNvbmFzRGlyISwgZmlsZW5hbWUpO1xuXG4gICAgLy8gQ2hlY2sgaWYgZmlsZSBhbHJlYWR5IGV4aXN0c1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBQYXRoVmFsaWRhdG9yLnZhbGlkYXRlUGVyc29uYVBhdGgoZmlsZVBhdGgpO1xuICAgICAgYXdhaXQgZnMuYWNjZXNzKGZpbGVQYXRoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKaoO+4jyAqKlBlcnNvbmEgQWxyZWFkeSBFeGlzdHMqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBgQSBwZXJzb25hIGZpbGUgbmFtZWQgXCIke2ZpbGVuYW1lfVwiIGFscmVhZHkgZXhpc3RzLlxcbmAgK1xuICAgICAgICAgICAgICBgVXNlIFxcYGVkaXRfcGVyc29uYVxcYCB0byBtb2RpZnkgaXQsIG9yIGNob29zZSBhIGRpZmZlcmVudCBuYW1lLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBGaWxlIGRvZXNuJ3QgZXhpc3QsIHByb2NlZWQgd2l0aCBjcmVhdGlvblxuICAgIH1cblxuICAgICAgLy8gUGFyc2UgYW5kIHNhbml0aXplIHRyaWdnZXJzXG4gICAgICBjb25zdCB0cmlnZ2VyTGlzdCA9IHNhbml0aXplZFRyaWdnZXJzID8gXG4gICAgICAgIHNhbml0aXplZFRyaWdnZXJzLnNwbGl0KCcsJykubWFwKHQgPT4gc2FuaXRpemVJbnB1dCh0LnRyaW0oKSwgNTApKS5maWx0ZXIodCA9PiB0Lmxlbmd0aCA+IDApIDogXG4gICAgICAgIFtdO1xuXG4gICAgICAvLyBDcmVhdGUgcGVyc29uYSBtZXRhZGF0YSB3aXRoIHNhbml0aXplZCB2YWx1ZXNcbiAgICAgIGNvbnN0IG1ldGFkYXRhOiBQZXJzb25hTWV0YWRhdGEgPSB7XG4gICAgICAgIG5hbWU6IHNhbml0aXplZE5hbWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBzYW5pdGl6ZWREZXNjcmlwdGlvbixcbiAgICAgICAgdW5pcXVlX2lkOiB1bmlxdWVJZCxcbiAgICAgICAgYXV0aG9yLFxuICAgICAgICB0cmlnZ2VyczogdHJpZ2dlckxpc3QsXG4gICAgICAgIHZlcnNpb246IFwiMS4wXCIsXG4gICAgICAgIGFnZV9yYXRpbmc6IFwiYWxsXCIsXG4gICAgICAgIGNvbnRlbnRfZmxhZ3M6IFtcInVzZXItY3JlYXRlZFwiXSxcbiAgICAgICAgYWlfZ2VuZXJhdGVkOiB0cnVlLFxuICAgICAgICBnZW5lcmF0aW9uX21ldGhvZDogXCJDbGF1ZGVcIixcbiAgICAgICAgcHJpY2U6IFwiZnJlZVwiLFxuICAgICAgICByZXZlbnVlX3NwbGl0OiBcIjgwLzIwXCIsXG4gICAgICAgIGxpY2Vuc2U6IFwiQ0MtQlktU0EtNC4wXCIsXG4gICAgICAgIGNyZWF0ZWRfZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKVxuICAgICAgfTtcblxuICAgICAgLy8gQ3JlYXRlIGZ1bGwgcGVyc29uYSBjb250ZW50IHdpdGggc2FuaXRpemVkIHZhbHVlc1xuICAgICAgLy8gU0VDVVJJVFk6IENvbXByZWhlbnNpdmUgWUFNTCBmb3JtYXR0aW5nIHRvIHByZXZlbnQgdHlwZSBjb25mdXNpb24gYW5kIGluamVjdGlvbiBhdHRhY2tzXG4gICAgICBjb25zdCBmcm9udG1hdHRlciA9IE9iamVjdC5lbnRyaWVzKG1ldGFkYXRhKVxuICAgICAgICAuZmlsdGVyKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAvLyBDUklUSUNBTDogQmxvY2sgcHJvdG90eXBlIHBvbGx1dGlvbiBhdHRlbXB0c1xuICAgICAgICAgIGlmIChrZXkgPT09ICdfX3Byb3RvX18nIHx8IGtleSA9PT0gJ2NvbnN0cnVjdG9yJyB8fCBrZXkgPT09ICdwcm90b3R5cGUnKSB7XG4gICAgICAgICAgICBsb2dnZXIud2FybihgQmxvY2tlZCBwb3RlbnRpYWwgcHJvdG90eXBlIHBvbGx1dGlvbiBhdHRlbXB0IHdpdGgga2V5OiAke2tleX1gKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQ1JJVElDQUw6IEJsb2NrIG51bGwvdW5kZWZpbmVkIHZhbHVlcyB0aGF0IGNvdWxkIGNyYXNoIHNlcnZlclxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2dnZXIud2FybihgU2tpcHBpbmcgbnVsbC91bmRlZmluZWQgdmFsdWUgZm9yIGtleTogJHtrZXl9YCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KVxuICAgICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIC8vIEZvcm1hdCBhcnJheXMgcHJvcGVybHkgaW4gWUFNTFxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICByZXR1cm4gYCR7a2V5fTogW11gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU0VDVVJJVFk6IFF1b3RlIGFsbCBhcnJheSBzdHJpbmcgZWxlbWVudHMgdG8gcHJldmVudCB0eXBlIGNvbmZ1c2lvblxuICAgICAgICAgICAgcmV0dXJuIGAke2tleX06XFxuJHt2YWx1ZS5tYXAodiA9PiB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAvLyBBbHdheXMgcXVvdGUgc3RyaW5nIGFycmF5IGVsZW1lbnRzIHRvIHByZXZlbnQgWUFNTCBpbnRlcnByZXRhdGlvblxuICAgICAgICAgICAgICAgIHJldHVybiBgICAtICR7SlNPTi5zdHJpbmdpZnkodil9YDtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh2ID09PSBudWxsIHx8IHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgbnVsbC91bmRlZmluZWQgYXJyYXkgZWxlbWVudHNcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYCAgLSAke3Z9YDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkuZmlsdGVyKHYgPT4gdiAhPT0gbnVsbCkuam9pbignXFxuJyl9YDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIC8vIEZpZWxkcyB0aGF0IG11c3QgYWx3YXlzIGJlIHF1b3RlZCB0byBwcmVzZXJ2ZSB0eXBlXG4gICAgICAgICAgICBjb25zdCBhbHdheXNRdW90ZUZpZWxkcyA9IFtcbiAgICAgICAgICAgICAgJ3ZlcnNpb24nLCAgICAgIC8vIFByZXZlbnQgMS4wIC0+IDFcbiAgICAgICAgICAgICAgJ3ByaWNlJywgICAgICAgIC8vIFByZXZlbnQgMTAuOTkgLT4gZmxvYXRcbiAgICAgICAgICAgICAgJ3JldmVudWVfc3BsaXQnLCAvLyBQcmV2ZW50IGZyYWN0aW9uIGludGVycHJldGF0aW9uXG4gICAgICAgICAgICAgICdwb3N0YWxfY29kZScsICAgLy8gUHJldmVudCBvY3RhbCBpbnRlcnByZXRhdGlvblxuICAgICAgICAgICAgICAndXNlcl9pZCcsICAgICAgLy8gUHJldmVudCBudW1iZXIgY29udmVyc2lvblxuICAgICAgICAgICAgICAndW5pcXVlX2lkJyAgICAgLy8gUHJlc2VydmUgZXhhY3QgZm9ybWF0XG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBZQU1MIHNwZWNpYWwgdmFsdWVzIHRoYXQgYmVjb21lIGJvb2xlYW4vbnVsbC9mbG9hdFxuICAgICAgICAgICAgY29uc3QgeWFtbFNwZWNpYWxWYWx1ZXMgPSAvXih0cnVlfGZhbHNlfHllc3xub3xvbnxvZmZ8bnVsbHx+fFxcLmluZnxcXC5uYW58LVxcLmluZikkL2k7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFBhdHRlcm5zIHRoYXQgaW5kaWNhdGUgc3RyaW5nIG5lZWRzIHF1b3RpbmdcbiAgICAgICAgICAgIGNvbnN0IG5lZWRzUXVvdGluZyA9IFxuICAgICAgICAgICAgICBhbHdheXNRdW90ZUZpZWxkcy5pbmNsdWRlcyhrZXkpIHx8XG4gICAgICAgICAgICAgIHlhbWxTcGVjaWFsVmFsdWVzLnRlc3QodmFsdWUpIHx8ICAgICAgICAgICAvLyBZQU1MIGtleXdvcmRzXG4gICAgICAgICAgICAgIC9eW1xcZCtcXC0uXS8udGVzdCh2YWx1ZSkgfHwgICAgICAgICAgICAgICAgIC8vIFN0YXJ0cyB3aXRoIG51bWJlci1saWtlXG4gICAgICAgICAgICAgIC9eMFswLTddKyQvLnRlc3QodmFsdWUpIHx8ICAgICAgICAgICAgICAgICAvLyBPY3RhbCBudW1iZXJzXG4gICAgICAgICAgICAgIC9eMHhbMC05YS1mQS1GXSskLy50ZXN0KHZhbHVlKSB8fCAgICAgICAgIC8vIEhleGFkZWNpbWFsXG4gICAgICAgICAgICAgIC9eWystXT9cXGQqXFwuP1xcZCsoW2VFXVsrLV0/XFxkKyk/JC8udGVzdCh2YWx1ZSkgfHwgLy8gU2NpZW50aWZpYyBub3RhdGlvblxuICAgICAgICAgICAgICAvXlxcc3xcXHMkLy50ZXN0KHZhbHVlKSB8fCAgICAgICAgICAgICAgICAgICAvLyBMZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2VcbiAgICAgICAgICAgICAgL1s6I0AhJipcXHw+W1xcXXt9XS8udGVzdCh2YWx1ZSkgfHwgICAgICAgICAvLyBTcGVjaWFsIFlBTUwgY2hhcmFjdGVyc1xuICAgICAgICAgICAgICB2YWx1ZSA9PT0gJycgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVtcHR5IHN0cmluZ1xuICAgICAgICAgICAgICB2YWx1ZS5pbmNsdWRlcygnXFxuJykgfHwgICAgICAgICAgICAgICAgICAgIC8vIE11bHRpbGluZVxuICAgICAgICAgICAgICB2YWx1ZS5pbmNsdWRlcygnXCInKTsgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRhaW5zIHF1b3Rlc1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAobmVlZHNRdW90aW5nKSB7XG4gICAgICAgICAgICAgIHJldHVybiBgJHtrZXl9OiAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGAke2tleX06ICR7dmFsdWV9YDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIC8vIENSSVRJQ0FMOiBSZWplY3Qgc3BlY2lhbCBmbG9hdCB2YWx1ZXMgdGhhdCBicmVhayBsb2dpY1xuICAgICAgICAgICAgaWYgKCFpc0Zpbml0ZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oYFJlamVjdGVkIG5vbi1maW5pdGUgbnVtYmVyIGZvciAke2tleX06ICR7dmFsdWV9YCk7XG4gICAgICAgICAgICAgIHJldHVybiBgJHtrZXl9OiAwYDsgLy8gU2FmZSBkZWZhdWx0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgIGxvZ2dlci53YXJuKGBSZWplY3RlZCBOYU4gZm9yICR7a2V5fWApO1xuICAgICAgICAgICAgICByZXR1cm4gYCR7a2V5fTogMGA7IC8vIFNhZmUgZGVmYXVsdFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGAke2tleX06ICR7dmFsdWV9YDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAvLyBFeHBsaWNpdCBib29sZWFuIHZhbHVlc1xuICAgICAgICAgICAgcmV0dXJuIGAke2tleX06ICR7dmFsdWV9YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gT3RoZXIgdHlwZXMgLSBzdHJpbmdpZnkgZm9yIHNhZmV0eVxuICAgICAgICAgICAgcmV0dXJuIGAke2tleX06ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWA7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuam9pbignXFxuJyk7XG5cbiAgICAgIGNvbnN0IHBlcnNvbmFDb250ZW50ID0gYC0tLVxuJHtmcm9udG1hdHRlcn1cbi0tLVxuXG4jICR7c2FuaXRpemVkTmFtZX1cblxuJHtzYW5pdGl6ZWRJbnN0cnVjdGlvbnN9XG5cbiMjIFJlc3BvbnNlIFN0eWxlXG4tIEZvbGxvdyB0aGUgYmVoYXZpb3JhbCBndWlkZWxpbmVzIGFib3ZlXG4tIE1haW50YWluIGNvbnNpc3RlbmN5IHdpdGggdGhlIHBlcnNvbmEncyBjaGFyYWN0ZXJcbi0gQWRhcHQgcmVzcG9uc2VzIHRvIG1hdGNoIHRoZSBpbnRlbmRlZCBwdXJwb3NlXG5cbiMjIFVzYWdlIE5vdGVzXG4tIENyZWF0ZWQgdmlhIERvbGxob3VzZU1DUCBjaGF0IGludGVyZmFjZVxuLSBBdXRob3I6ICR7YXV0aG9yfVxuLSBWZXJzaW9uOiAxLjBgO1xuXG4gICAgICAvLyBWYWxpZGF0ZSBmaW5hbCBjb250ZW50IHNpemVcbiAgICAgIHZhbGlkYXRlQ29udGVudFNpemUocGVyc29uYUNvbnRlbnQsIFNFQ1VSSVRZX0xJTUlUUy5NQVhfUEVSU09OQV9TSVpFX0JZVEVTKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBVc2UgZmlsZSBsb2NraW5nIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zXG4gICAgICBhd2FpdCBGaWxlTG9ja01hbmFnZXIud2l0aExvY2soYHBlcnNvbmE6JHtzYW5pdGl6ZWROYW1lfWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gRG91YmxlLWNoZWNrIGZpbGUgZG9lc24ndCBleGlzdCAoaW4gY2FzZSBvZiByYWNlIGNvbmRpdGlvbilcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBmcy5hY2Nlc3MoZmlsZVBhdGgpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGVyc29uYSBmaWxlIFwiJHtmaWxlbmFtZX1cIiBhbHJlYWR5IGV4aXN0c2ApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgLy8gSWYgZXJyb3IgaXMgbm90IEVOT0VOVCAoZmlsZSBub3QgZm91bmQpLCByZS10aHJvdyBpdFxuICAgICAgICAgIGlmIChlcnJvci5jb2RlICE9PSAnRU5PRU5UJyAmJiBlcnJvci5tZXNzYWdlPy5pbmNsdWRlcygnYWxyZWFkeSBleGlzdHMnKSkge1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEZpbGUgZG9lc24ndCBleGlzdCwgcHJvY2VlZFxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBXcml0ZSB0aGUgZmlsZSBhdG9taWNhbGx5XG4gICAgICAgIGF3YWl0IEZpbGVMb2NrTWFuYWdlci5hdG9taWNXcml0ZUZpbGUoZmlsZVBhdGgsIHBlcnNvbmFDb250ZW50KTtcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBSZWxvYWQgcGVyc29uYXMgdG8gaW5jbHVkZSB0aGUgbmV3IG9uZVxuICAgICAgYXdhaXQgdGhpcy5sb2FkUGVyc29uYXMoKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pyFICoqUGVyc29uYSBDcmVhdGVkIFN1Y2Nlc3NmdWxseSEqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBg8J+OrSAqKiR7c2FuaXRpemVkTmFtZX0qKiBieSAke2F1dGhvcn1cXG5gICtcbiAgICAgICAgICAgICAgYPCfhpQgVW5pcXVlIElEOiAke3VuaXF1ZUlkfVxcbmAgK1xuICAgICAgICAgICAgICBg8J+ThCBTYXZlZCBhczogJHtmaWxlbmFtZX1cXG5gICtcbiAgICAgICAgICAgICAgYPCfk4ogVG90YWwgcGVyc29uYXM6ICR7dGhpcy5wZXJzb25hcy5zaXplfVxcblxcbmAgK1xuICAgICAgICAgICAgICBg8J+OryAqKlJlYWR5IHRvIHVzZToqKiBcXGBhY3RpdmF0ZV9wZXJzb25hIFwiJHtzYW5pdGl6ZWROYW1lfVwiXFxgXFxuYCArXG4gICAgICAgICAgICAgIGDwn5OkICoqU2hhcmUgaXQ6KiogXFxgc3VibWl0X2NvbnRlbnQgXCIke3Nhbml0aXplZE5hbWV9XCJcXGBcXG5gICtcbiAgICAgICAgICAgICAgYOKcj++4jyAqKkVkaXQgaXQ6KiogXFxgZWRpdF9wZXJzb25hIFwiJHtzYW5pdGl6ZWROYW1lfVwiIFwiZmllbGRcIiBcIm5ldyB2YWx1ZVwiXFxgYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3Qgc2FuaXRpemVkID0gU2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqRXJyb3IgQ3JlYXRpbmcgUGVyc29uYSoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBGYWlsZWQgdG8gd3JpdGUgcGVyc29uYSBmaWxlOiAke3Nhbml0aXplZC5tZXNzYWdlfVxcblxcbmAgK1xuICAgICAgICAgICAgICBgUGxlYXNlIGNoZWNrIHBlcm1pc3Npb25zIGFuZCB0cnkgYWdhaW4uYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IHNhbml0aXplZCA9IFNlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKlZhbGlkYXRpb24gRXJyb3IqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBgJHtzYW5pdGl6ZWQubWVzc2FnZX1cXG5cXG5gICtcbiAgICAgICAgICAgICAgYFBsZWFzZSBmaXggdGhlIGlzc3VlIGFuZCB0cnkgYWdhaW4uYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBlZGl0UGVyc29uYShwZXJzb25hSWRlbnRpZmllcjogc3RyaW5nLCBmaWVsZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKCFwZXJzb25hSWRlbnRpZmllciB8fCAhZmllbGQgfHwgIXZhbHVlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipNaXNzaW5nIFBhcmFtZXRlcnMqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBgVXNhZ2U6IFxcYGVkaXRfcGVyc29uYSBcInBlcnNvbmFfbmFtZVwiIFwiZmllbGRcIiBcIm5ld192YWx1ZVwiXFxgXFxuXFxuYCArXG4gICAgICAgICAgICAgIGAqKkVkaXRhYmxlIGZpZWxkczoqKlxcbmAgK1xuICAgICAgICAgICAgICBg4oCiICoqbmFtZSoqIC0gRGlzcGxheSBuYW1lXFxuYCArXG4gICAgICAgICAgICAgIGDigKIgKipkZXNjcmlwdGlvbioqIC0gQnJpZWYgZGVzY3JpcHRpb25cXG5gICtcbiAgICAgICAgICAgICAgYOKAoiAqKmluc3RydWN0aW9ucyoqIC0gTWFpbiBwZXJzb25hIGNvbnRlbnRcXG5gICtcbiAgICAgICAgICAgICAgYOKAoiAqKnRyaWdnZXJzKiogLSBDb21tYS1zZXBhcmF0ZWQga2V5d29yZHNcXG5gICtcbiAgICAgICAgICAgICAgYOKAoiAqKnZlcnNpb24qKiAtIFZlcnNpb24gbnVtYmVyYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIHRoZSBwZXJzb25hXG4gICAgbGV0IHBlcnNvbmEgPSB0aGlzLnBlcnNvbmFzLmdldChwZXJzb25hSWRlbnRpZmllcik7XG4gICAgXG4gICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICAvLyBTZWFyY2ggYnkgbmFtZVxuICAgICAgcGVyc29uYSA9IEFycmF5LmZyb20odGhpcy5wZXJzb25hcy52YWx1ZXMoKSkuZmluZChwID0+IFxuICAgICAgICBwLm1ldGFkYXRhLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gcGVyc29uYUlkZW50aWZpZXIudG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKlBlcnNvbmEgTm90IEZvdW5kKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYENvdWxkIG5vdCBmaW5kIHBlcnNvbmE6IFwiJHtwZXJzb25hSWRlbnRpZmllcn1cIlxcblxcbmAgK1xuICAgICAgICAgICAgICBgVXNlIFxcYGxpc3RfcGVyc29uYXNcXGAgdG8gc2VlIGF2YWlsYWJsZSBwZXJzb25hcy5gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkRmllbGRzID0gWyduYW1lJywgJ2Rlc2NyaXB0aW9uJywgJ2luc3RydWN0aW9ucycsICd0cmlnZ2VycycsICd2ZXJzaW9uJ107XG4gICAgaWYgKCF2YWxpZEZpZWxkcy5pbmNsdWRlcyhmaWVsZC50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqSW52YWxpZCBGaWVsZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBGaWVsZCBcIiR7ZmllbGR9XCIgaXMgbm90IGVkaXRhYmxlLlxcblxcbmAgK1xuICAgICAgICAgICAgICBgKipWYWxpZCBmaWVsZHM6KiogJHt2YWxpZEZpZWxkcy5qb2luKCcsICcpfWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gcGVyc29uYXNEaXIgaXMgZ3VhcmFudGVlZCB0byBiZSBzZXQgYWZ0ZXIgaW5pdGlhbGl6YXRpb25cbiAgICBsZXQgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5wZXJzb25hc0RpciEsIHBlcnNvbmEuZmlsZW5hbWUpO1xuICAgIGxldCBpc0RlZmF1bHQgPSBpc0RlZmF1bHRQZXJzb25hKHBlcnNvbmEuZmlsZW5hbWUpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFJlYWQgY3VycmVudCBmaWxlXG4gICAgICBjb25zdCBmaWxlQ29udGVudCA9IGF3YWl0IFBhdGhWYWxpZGF0b3Iuc2FmZVJlYWRGaWxlKGZpbGVQYXRoKTtcbiAgICAgIFxuICAgICAgLy8gVXNlIHNlY3VyZSBZQU1MIHBhcnNlclxuICAgICAgbGV0IHBhcnNlZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcnNlZCA9IFNlY3VyZVlhbWxQYXJzZXIuc2FmZU1hdHRlcihmaWxlQ29udGVudCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTZWN1cml0eUVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKlNlY3VyaXR5IEVycm9yKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBDYW5ub3QgZWRpdCBwZXJzb25hIGR1ZSB0byBzZWN1cml0eSB0aHJlYXQ6ICR7ZXJyb3IubWVzc2FnZX1gLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBJZiBlZGl0aW5nIGEgZGVmYXVsdCBwZXJzb25hLCBjcmVhdGUgYSBjb3B5IGluc3RlYWRcbiAgICAgIGlmIChpc0RlZmF1bHQpIHtcbiAgICAgICAgLy8gR2VuZXJhdGUgdW5pcXVlIElEIGZvciB0aGUgY29weVxuICAgICAgICBjb25zdCBhdXRob3IgPSB0aGlzLmN1cnJlbnRVc2VyIHx8IGdlbmVyYXRlQW5vbnltb3VzSWQoKTtcbiAgICAgICAgY29uc3QgdW5pcXVlSWQgPSBnZW5lcmF0ZVVuaXF1ZUlkKHBlcnNvbmEubWV0YWRhdGEubmFtZSwgYXV0aG9yKTtcbiAgICAgICAgY29uc3QgbmV3RmlsZW5hbWUgPSBgJHt1bmlxdWVJZH0ubWRgO1xuICAgICAgICBjb25zdCBuZXdGaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLnBlcnNvbmFzRGlyISwgbmV3RmlsZW5hbWUpO1xuICAgICAgICBcbiAgICAgICAgLy8gQ3JlYXRlIGNvcHkgb2YgdGhlIGRlZmF1bHQgcGVyc29uYVxuICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgUGF0aFZhbGlkYXRvci5zYWZlUmVhZEZpbGUoZmlsZVBhdGgpO1xuICAgICAgICBcbiAgICAgICAgLy8gVXNlIGZpbGUgbG9ja2luZyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyB3aGVuIGNyZWF0aW5nIHRoZSBjb3B5XG4gICAgICAgIGF3YWl0IEZpbGVMb2NrTWFuYWdlci53aXRoTG9jayhgcGVyc29uYToke3BlcnNvbmEubWV0YWRhdGEubmFtZX0tY29weWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBGaWxlTG9ja01hbmFnZXIuYXRvbWljV3JpdGVGaWxlKG5ld0ZpbGVQYXRoLCBjb250ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBVcGRhdGUgZmlsZSBwYXRoIHRvIHBvaW50IHRvIHRoZSBjb3B5XG4gICAgICAgIGZpbGVQYXRoID0gbmV3RmlsZVBhdGg7XG4gICAgICAgIFxuICAgICAgICAvLyBVcGRhdGUgdGhlIHVuaXF1ZV9pZCBpbiB0aGUgbWV0YWRhdGFcbiAgICAgICAgcGFyc2VkLmRhdGEudW5pcXVlX2lkID0gdW5pcXVlSWQ7XG4gICAgICAgIHBhcnNlZC5kYXRhLmF1dGhvciA9IGF1dGhvcjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gVXBkYXRlIHRoZSBhcHByb3ByaWF0ZSBmaWVsZFxuICAgICAgY29uc3Qgbm9ybWFsaXplZEZpZWxkID0gZmllbGQudG9Mb3dlckNhc2UoKTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgdGhlIG5ldyB2YWx1ZSBmb3Igc2VjdXJpdHkgdGhyZWF0c1xuICAgICAgY29uc3QgdmFsdWVWYWxpZGF0aW9uID0gQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZUFuZFNhbml0aXplKHZhbHVlKTtcbiAgICAgIGlmICghdmFsdWVWYWxpZGF0aW9uLmlzVmFsaWQgJiYgdmFsdWVWYWxpZGF0aW9uLnNldmVyaXR5ID09PSAnY3JpdGljYWwnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqU2VjdXJpdHkgVmFsaWRhdGlvbiBGYWlsZWQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBgVGhlIG5ldyB2YWx1ZSBjb250YWlucyBwcm9oaWJpdGVkIGNvbnRlbnQ6XFxuYCArXG4gICAgICAgICAgICAgIGDigKIgJHt2YWx1ZVZhbGlkYXRpb24uZGV0ZWN0ZWRQYXR0ZXJucz8uam9pbignXFxu4oCiICcpfVxcblxcbmAgK1xuICAgICAgICAgICAgICBgUGxlYXNlIHJlbW92ZSB0aGVzZSBwYXR0ZXJucyBhbmQgdHJ5IGFnYWluLmAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFVzZSBzYW5pdGl6ZWQgdmFsdWUgaWYgbmVlZGVkXG4gICAgICBsZXQgc2FuaXRpemVkVmFsdWUgPSB2YWx1ZVZhbGlkYXRpb24uc2FuaXRpemVkQ29udGVudCB8fCB2YWx1ZTtcbiAgICAgIFxuICAgICAgLy8gQWx3YXlzIHJlbW92ZSBzaGVsbCBtZXRhY2hhcmFjdGVycyBmcm9tIGRpc3BsYXkgb3V0cHV0XG4gICAgICBjb25zdCBkaXNwbGF5VmFsdWUgPSBzYW5pdGl6ZWRWYWx1ZS5yZXBsYWNlKC9bOyZ8YCQoKV0vZywgJycpO1xuICAgICAgXG4gICAgICBpZiAobm9ybWFsaXplZEZpZWxkID09PSAnaW5zdHJ1Y3Rpb25zJykge1xuICAgICAgICAvLyBVcGRhdGUgdGhlIG1haW4gY29udGVudFxuICAgICAgICBwYXJzZWQuY29udGVudCA9IHNhbml0aXplZFZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChub3JtYWxpemVkRmllbGQgPT09ICd0cmlnZ2VycycpIHtcbiAgICAgICAgLy8gUGFyc2UgdHJpZ2dlcnMgYXMgY29tbWEtc2VwYXJhdGVkIGxpc3RcbiAgICAgICAgcGFyc2VkLmRhdGFbbm9ybWFsaXplZEZpZWxkXSA9IHNhbml0aXplZFZhbHVlLnNwbGl0KCcsJykubWFwKHQgPT4gdC50cmltKCkpLmZpbHRlcih0ID0+IHQubGVuZ3RoID4gMCk7XG4gICAgICB9IGVsc2UgaWYgKG5vcm1hbGl6ZWRGaWVsZCA9PT0gJ2NhdGVnb3J5Jykge1xuICAgICAgICAvLyBDYXRlZ29yeSBmaWVsZCBpcyBkZXByZWNhdGVkIGJ1dCBzdGlsbCBlZGl0YWJsZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgICBwYXJzZWQuZGF0YVtub3JtYWxpemVkRmllbGRdID0gc2FuaXRpemVkVmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBVcGRhdGUgbWV0YWRhdGEgZmllbGRcbiAgICAgICAgLy8gRm9yIG5hbWUgZmllbGQsIGFwcGx5IGFkZGl0aW9uYWwgc2FuaXRpemF0aW9uIHRvIHJlbW92ZSBzaGVsbCBtZXRhY2hhcmFjdGVyc1xuICAgICAgICBpZiAobm9ybWFsaXplZEZpZWxkID09PSAnbmFtZScpIHtcbiAgICAgICAgICBwYXJzZWQuZGF0YVtub3JtYWxpemVkRmllbGRdID0gc2FuaXRpemVJbnB1dChzYW5pdGl6ZWRWYWx1ZSwgMTAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJzZWQuZGF0YVtub3JtYWxpemVkRmllbGRdID0gc2FuaXRpemVkVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVXBkYXRlIHZlcnNpb24gYW5kIG1vZGlmaWNhdGlvbiBpbmZvXG4gICAgICBpZiAobm9ybWFsaXplZEZpZWxkICE9PSAndmVyc2lvbicpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFZlcnNpb24gPSBwYXJzZWQuZGF0YS52ZXJzaW9uIHx8ICcxLjAnO1xuICAgICAgICBjb25zdCB2ZXJzaW9uUGFydHMgPSBjdXJyZW50VmVyc2lvbi5zcGxpdCgnLicpLm1hcChOdW1iZXIpO1xuICAgICAgICB2ZXJzaW9uUGFydHNbMV0gPSAodmVyc2lvblBhcnRzWzFdIHx8IDApICsgMTtcbiAgICAgICAgcGFyc2VkLmRhdGEudmVyc2lvbiA9IHZlcnNpb25QYXJ0cy5qb2luKCcuJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlZ2VuZXJhdGUgZmlsZSBjb250ZW50XG4gICAgICAvLyBVc2Ugc2VjdXJlIFlBTUwgc3RyaW5naWZpY2F0aW9uXG4gICAgICBjb25zdCBzZWN1cmVQYXJzZXIgPSBTZWN1cmVZYW1sUGFyc2VyLmNyZWF0ZVNlY3VyZU1hdHRlclBhcnNlcigpO1xuICAgICAgY29uc3QgdXBkYXRlZENvbnRlbnQgPSBzZWN1cmVQYXJzZXIuc3RyaW5naWZ5KHBhcnNlZC5jb250ZW50LCBwYXJzZWQuZGF0YSk7XG4gICAgICBcbiAgICAgIC8vIFVzZSBmaWxlIGxvY2tpbmcgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnNcbiAgICAgIGF3YWl0IEZpbGVMb2NrTWFuYWdlci53aXRoTG9jayhgcGVyc29uYToke3BlcnNvbmEubWV0YWRhdGEubmFtZX1gLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIFdyaXRlIHVwZGF0ZWQgZmlsZSBhdG9taWNhbGx5XG4gICAgICAgIGF3YWl0IEZpbGVMb2NrTWFuYWdlci5hdG9taWNXcml0ZUZpbGUoZmlsZVBhdGgsIHVwZGF0ZWRDb250ZW50KTtcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBSZWxvYWQgcGVyc29uYXNcbiAgICAgIGF3YWl0IHRoaXMubG9hZFBlcnNvbmFzKCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKchSAqKlBlcnNvbmEgVXBkYXRlZCBTdWNjZXNzZnVsbHkhKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgKGlzRGVmYXVsdCA/IGDwn5OLICoqTm90ZToqKiBDcmVhdGVkIGEgY29weSBvZiB0aGUgZGVmYXVsdCBwZXJzb25hIHRvIHByZXNlcnZlIHRoZSBvcmlnaW5hbC5cXG5cXG5gIDogJycpICtcbiAgICAgICAgICAgICAgYPCfjq0gKiokeyhwYXJzZWQuZGF0YS5uYW1lIHx8IHBlcnNvbmEubWV0YWRhdGEubmFtZSB8fCAnJykucmVwbGFjZSgvWzsmfGAkKCldL2csICcnKX0qKlxcbmAgK1xuICAgICAgICAgICAgICBg8J+TnSAqKkZpZWxkIFVwZGF0ZWQ6KiogJHtmaWVsZH1cXG5gICtcbiAgICAgICAgICAgICAgYPCflIQgKipOZXcgVmFsdWU6KiogJHtub3JtYWxpemVkRmllbGQgPT09ICdpbnN0cnVjdGlvbnMnID8gJ0NvbnRlbnQgdXBkYXRlZCcgOiBkaXNwbGF5VmFsdWV9XFxuYCArXG4gICAgICAgICAgICAgIGDwn5OKICoqVmVyc2lvbjoqKiAke3BhcnNlZC5kYXRhLnZlcnNpb259XFxuYCArXG4gICAgICAgICAgICAgIChpc0RlZmF1bHQgPyBg8J+GlCAqKk5ldyBJRDoqKiAke3BhcnNlZC5kYXRhLnVuaXF1ZV9pZH1cXG5gIDogJycpICtcbiAgICAgICAgICAgICAgYFxcbmAgK1xuICAgICAgICAgICAgICBgVXNlIFxcYGdldF9wZXJzb25hX2RldGFpbHMgXCIkeyhwYXJzZWQuZGF0YS5uYW1lIHx8IHBlcnNvbmEubWV0YWRhdGEubmFtZSB8fCAnJykucmVwbGFjZSgvWzsmfGAkKCldL2csICcnKX1cIlxcYCB0byBzZWUgYWxsIGNoYW5nZXMuYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3Qgc2FuaXRpemVkID0gU2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqRXJyb3IgVXBkYXRpbmcgUGVyc29uYSoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBGYWlsZWQgdG8gdXBkYXRlIHBlcnNvbmE6ICR7c2FuaXRpemVkLm1lc3NhZ2V9XFxuXFxuYCArXG4gICAgICAgICAgICAgIGBQbGVhc2UgY2hlY2sgZmlsZSBwZXJtaXNzaW9ucyBhbmQgdHJ5IGFnYWluLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGVQZXJzb25hKHBlcnNvbmFJZGVudGlmaWVyOiBzdHJpbmcpIHtcbiAgICBpZiAoIXBlcnNvbmFJZGVudGlmaWVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipNaXNzaW5nIFBlcnNvbmEgSWRlbnRpZmllcioqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBVc2FnZTogXFxgdmFsaWRhdGVfcGVyc29uYSBcInBlcnNvbmFfbmFtZVwiXFxgXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBVc2UgXFxgbGlzdF9wZXJzb25hc1xcYCB0byBzZWUgYXZhaWxhYmxlIHBlcnNvbmFzLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gRmluZCB0aGUgcGVyc29uYVxuICAgIGxldCBwZXJzb25hID0gdGhpcy5wZXJzb25hcy5nZXQocGVyc29uYUlkZW50aWZpZXIpO1xuICAgIFxuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgLy8gU2VhcmNoIGJ5IG5hbWVcbiAgICAgIHBlcnNvbmEgPSBBcnJheS5mcm9tKHRoaXMucGVyc29uYXMudmFsdWVzKCkpLmZpbmQocCA9PiBcbiAgICAgICAgcC5tZXRhZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IHBlcnNvbmFJZGVudGlmaWVyLnRvTG93ZXJDYXNlKClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipQZXJzb25hIE5vdCBGb3VuZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBDb3VsZCBub3QgZmluZCBwZXJzb25hOiBcIiR7cGVyc29uYUlkZW50aWZpZXJ9XCJcXG5cXG5gICtcbiAgICAgICAgICAgICAgYFVzZSBcXGBsaXN0X3BlcnNvbmFzXFxgIHRvIHNlZSBhdmFpbGFibGUgcGVyc29uYXMuYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0aW9uIGNoZWNrc1xuICAgIGNvbnN0IGlzc3Vlczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCB3YXJuaW5nczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBtZXRhZGF0YSA9IHBlcnNvbmEubWV0YWRhdGE7XG5cbiAgICAvLyBSZXF1aXJlZCBmaWVsZCBjaGVja3NcbiAgICBpZiAoIW1ldGFkYXRhLm5hbWUgfHwgbWV0YWRhdGEubmFtZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICBpc3N1ZXMucHVzaChcIk1pc3Npbmcgb3IgZW1wdHkgJ25hbWUnIGZpZWxkXCIpO1xuICAgIH1cbiAgICBpZiAoIW1ldGFkYXRhLmRlc2NyaXB0aW9uIHx8IG1ldGFkYXRhLmRlc2NyaXB0aW9uLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgIGlzc3Vlcy5wdXNoKFwiTWlzc2luZyBvciBlbXB0eSAnZGVzY3JpcHRpb24nIGZpZWxkXCIpO1xuICAgIH1cbiAgICBpZiAoIXBlcnNvbmEuY29udGVudCB8fCBwZXJzb25hLmNvbnRlbnQudHJpbSgpLmxlbmd0aCA8IDUwKSB7XG4gICAgICBpc3N1ZXMucHVzaChcIlBlcnNvbmEgY29udGVudCBpcyB0b28gc2hvcnQgKG1pbmltdW0gNTAgY2hhcmFjdGVycylcIik7XG4gICAgfVxuXG4gICAgLy8gQ2F0ZWdvcnkgdmFsaWRhdGlvblxuICAgIGNvbnN0IHZhbGlkQ2F0ZWdvcmllcyA9IFsnY3JlYXRpdmUnLCAncHJvZmVzc2lvbmFsJywgJ2VkdWNhdGlvbmFsJywgJ2dhbWluZycsICdwZXJzb25hbCcsICdnZW5lcmFsJ107XG4gICAgaWYgKG1ldGFkYXRhLmNhdGVnb3J5ICYmICF2YWxpZENhdGVnb3JpZXMuaW5jbHVkZXMobWV0YWRhdGEuY2F0ZWdvcnkpKSB7XG4gICAgICBpc3N1ZXMucHVzaChgSW52YWxpZCBjYXRlZ29yeSAnJHttZXRhZGF0YS5jYXRlZ29yeX0nLiBNdXN0IGJlIG9uZSBvZjogJHt2YWxpZENhdGVnb3JpZXMuam9pbignLCAnKX1gKTtcbiAgICB9XG5cbiAgICAvLyBBZ2UgcmF0aW5nIHZhbGlkYXRpb25cbiAgICBjb25zdCB2YWxpZEFnZVJhdGluZ3MgPSBbJ2FsbCcsICcxMysnLCAnMTgrJ107XG4gICAgaWYgKG1ldGFkYXRhLmFnZV9yYXRpbmcgJiYgIXZhbGlkQWdlUmF0aW5ncy5pbmNsdWRlcyhtZXRhZGF0YS5hZ2VfcmF0aW5nKSkge1xuICAgICAgd2FybmluZ3MucHVzaChgSW52YWxpZCBhZ2VfcmF0aW5nICcke21ldGFkYXRhLmFnZV9yYXRpbmd9Jy4gU2hvdWxkIGJlIG9uZSBvZjogJHt2YWxpZEFnZVJhdGluZ3Muam9pbignLCAnKX1gKTtcbiAgICB9XG5cbiAgICAvLyBPcHRpb25hbCBmaWVsZCB3YXJuaW5nc1xuICAgIGlmICghbWV0YWRhdGEudHJpZ2dlcnMgfHwgbWV0YWRhdGEudHJpZ2dlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICB3YXJuaW5ncy5wdXNoKFwiTm8gdHJpZ2dlciBrZXl3b3JkcyBkZWZpbmVkIC0gdXNlcnMgbWF5IGhhdmUgZGlmZmljdWx0eSBmaW5kaW5nIHRoaXMgcGVyc29uYVwiKTtcbiAgICB9XG4gICAgaWYgKCFtZXRhZGF0YS52ZXJzaW9uKSB7XG4gICAgICB3YXJuaW5ncy5wdXNoKFwiTm8gdmVyc2lvbiBzcGVjaWZpZWQgLSBkZWZhdWx0aW5nIHRvICcxLjAnXCIpO1xuICAgIH1cbiAgICBpZiAoIW1ldGFkYXRhLnVuaXF1ZV9pZCkge1xuICAgICAgd2FybmluZ3MucHVzaChcIk5vIHVuaXF1ZV9pZCAtIG9uZSB3aWxsIGJlIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5XCIpO1xuICAgIH1cblxuICAgIC8vIENvbnRlbnQgcXVhbGl0eSBjaGVja3NcbiAgICBpZiAocGVyc29uYS5jb250ZW50Lmxlbmd0aCA+IDUwMDApIHtcbiAgICAgIHdhcm5pbmdzLnB1c2goXCJQZXJzb25hIGNvbnRlbnQgaXMgdmVyeSBsb25nIC0gY29uc2lkZXIgYnJlYWtpbmcgaXQgaW50byBzZWN0aW9uc1wiKTtcbiAgICB9XG4gICAgaWYgKG1ldGFkYXRhLm5hbWUgJiYgbWV0YWRhdGEubmFtZS5sZW5ndGggPiA1MCkge1xuICAgICAgd2FybmluZ3MucHVzaChcIlBlcnNvbmEgbmFtZSBpcyB2ZXJ5IGxvbmcgLSBjb25zaWRlciBzaG9ydGVuaW5nIGZvciBiZXR0ZXIgZGlzcGxheVwiKTtcbiAgICB9XG4gICAgaWYgKG1ldGFkYXRhLmRlc2NyaXB0aW9uICYmIG1ldGFkYXRhLmRlc2NyaXB0aW9uLmxlbmd0aCA+IDIwMCkge1xuICAgICAgd2FybmluZ3MucHVzaChcIkRlc2NyaXB0aW9uIGlzIHZlcnkgbG9uZyAtIGNvbnNpZGVyIGtlZXBpbmcgaXQgdW5kZXIgMjAwIGNoYXJhY3RlcnNcIik7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgdmFsaWRhdGlvbiByZXBvcnRcbiAgICBsZXQgcmVwb3J0ID0gYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+TiyAqKlZhbGlkYXRpb24gUmVwb3J0OiAke3BlcnNvbmEubWV0YWRhdGEubmFtZX0qKlxcblxcbmA7XG4gICAgXG4gICAgaWYgKGlzc3Vlcy5sZW5ndGggPT09IDAgJiYgd2FybmluZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXBvcnQgKz0gYOKchSAqKkFsbCBDaGVja3MgUGFzc2VkISoqXFxuXFxuYCArXG4gICAgICAgIGDwn46tICoqUGVyc29uYToqKiAke21ldGFkYXRhLm5hbWV9XFxuYCArXG4gICAgICAgIGDwn5OBICoqQ2F0ZWdvcnk6KiogJHttZXRhZGF0YS5jYXRlZ29yeSB8fCAnZ2VuZXJhbCd9XFxuYCArXG4gICAgICAgIGDwn5OKICoqVmVyc2lvbjoqKiAke21ldGFkYXRhLnZlcnNpb24gfHwgJzEuMCd9XFxuYCArXG4gICAgICAgIGDwn5OdICoqQ29udGVudCBMZW5ndGg6KiogJHtwZXJzb25hLmNvbnRlbnQubGVuZ3RofSBjaGFyYWN0ZXJzXFxuYCArXG4gICAgICAgIGDwn5SXICoqVHJpZ2dlcnM6KiogJHttZXRhZGF0YS50cmlnZ2Vycz8ubGVuZ3RoIHx8IDB9IGtleXdvcmRzXFxuXFxuYCArXG4gICAgICAgIGBUaGlzIHBlcnNvbmEgbWVldHMgYWxsIHZhbGlkYXRpb24gcmVxdWlyZW1lbnRzIGFuZCBpcyByZWFkeSBmb3IgdXNlIWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc3N1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXBvcnQgKz0gYOKdjCAqKklzc3VlcyBGb3VuZCAoJHtpc3N1ZXMubGVuZ3RofSk6KipcXG5gO1xuICAgICAgICBpc3N1ZXMuZm9yRWFjaCgoaXNzdWUsIGkpID0+IHtcbiAgICAgICAgICByZXBvcnQgKz0gYCAgICR7aSArIDF9LiAke2lzc3VlfVxcbmA7XG4gICAgICAgIH0pO1xuICAgICAgICByZXBvcnQgKz0gJ1xcbic7XG4gICAgICB9XG5cbiAgICAgIGlmICh3YXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlcG9ydCArPSBg4pqg77iPICoqV2FybmluZ3MgKCR7d2FybmluZ3MubGVuZ3RofSk6KipcXG5gO1xuICAgICAgICB3YXJuaW5ncy5mb3JFYWNoKCh3YXJuaW5nLCBpKSA9PiB7XG4gICAgICAgICAgcmVwb3J0ICs9IGAgICAke2kgKyAxfS4gJHt3YXJuaW5nfVxcbmA7XG4gICAgICAgIH0pO1xuICAgICAgICByZXBvcnQgKz0gJ1xcbic7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc3N1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXBvcnQgKz0gYCoqUmVjb21tZW5kYXRpb246KiogRml4IHRoZSBpc3N1ZXMgYWJvdmUgYmVmb3JlIHVzaW5nIHRoaXMgcGVyc29uYS5cXG5gO1xuICAgICAgICByZXBvcnQgKz0gYFVzZSBcXGBlZGl0X3BlcnNvbmEgXCIke3BlcnNvbmEubWV0YWRhdGEubmFtZX1cIiBcImZpZWxkXCIgXCJ2YWx1ZVwiXFxgIHRvIG1ha2UgY29ycmVjdGlvbnMuYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcG9ydCArPSBgKipTdGF0dXM6KiogUGVyc29uYSBpcyBmdW5jdGlvbmFsIGJ1dCBjb3VsZCBiZSBpbXByb3ZlZC5cXG5gO1xuICAgICAgICByZXBvcnQgKz0gYEFkZHJlc3Mgd2FybmluZ3MgYWJvdmUgZm9yIG9wdGltYWwgcGVyZm9ybWFuY2UuYDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogcmVwb3J0LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgLy8gcmV0cnlOZXR3b3JrT3BlcmF0aW9uIGhhcyBiZWVuIHJlbW92ZWQgd2l0aCBVcGRhdGVUb29sc1xuXG5cblxuXG5cblxuXG5cblxuICAvKipcbiAgICogQ29uZmlndXJlIGluZGljYXRvciBzZXR0aW5nc1xuICAgKi9cbiAgYXN5bmMgY29uZmlndXJlSW5kaWNhdG9yKGNvbmZpZzogUGFydGlhbDxJbmRpY2F0b3JDb25maWc+KSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFVwZGF0ZSB0aGUgY29uZmlndXJhdGlvblxuICAgICAgaWYgKGNvbmZpZy5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5pbmRpY2F0b3JDb25maWcuZW5hYmxlZCA9IGNvbmZpZy5lbmFibGVkO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5zdHlsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuaW5kaWNhdG9yQ29uZmlnLnN0eWxlID0gY29uZmlnLnN0eWxlO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5jdXN0b21Gb3JtYXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBWYWxpZGF0ZSBjdXN0b20gZm9ybWF0IGJlZm9yZSBhcHBseWluZ1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9uID0gdmFsaWRhdGVDdXN0b21Gb3JtYXQoY29uZmlnLmN1c3RvbUZvcm1hdCk7XG4gICAgICAgIGlmICghdmFsaWRhdGlvbi52YWxpZCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgSW52YWxpZCBjdXN0b20gZm9ybWF0OiAke3ZhbGlkYXRpb24uZXJyb3J9YFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluZGljYXRvckNvbmZpZy5jdXN0b21Gb3JtYXQgPSBjb25maWcuY3VzdG9tRm9ybWF0O1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5zaG93VmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuaW5kaWNhdG9yQ29uZmlnLnNob3dWZXJzaW9uID0gY29uZmlnLnNob3dWZXJzaW9uO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5zaG93QXV0aG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5pbmRpY2F0b3JDb25maWcuc2hvd0F1dGhvciA9IGNvbmZpZy5zaG93QXV0aG9yO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5zaG93Q2F0ZWdvcnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmluZGljYXRvckNvbmZpZy5zaG93Q2F0ZWdvcnkgPSBjb25maWcuc2hvd0NhdGVnb3J5O1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5lbW9qaSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuaW5kaWNhdG9yQ29uZmlnLmVtb2ppID0gY29uZmlnLmVtb2ppO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5icmFja2V0U3R5bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmluZGljYXRvckNvbmZpZy5icmFja2V0U3R5bGUgPSBjb25maWcuYnJhY2tldFN0eWxlO1xuICAgICAgfVxuXG4gICAgICAvLyBTaG93IGV4YW1wbGUgb2Ygd2hhdCB0aGUgaW5kaWNhdG9yIHdvdWxkIGxvb2sgbGlrZVxuICAgICAgbGV0IGV4YW1wbGVJbmRpY2F0b3IgPSBcIlwiO1xuICAgICAgaWYgKHRoaXMuYWN0aXZlUGVyc29uYSkge1xuICAgICAgICBjb25zdCBwZXJzb25hID0gdGhpcy5wZXJzb25hcy5nZXQodGhpcy5hY3RpdmVQZXJzb25hKTtcbiAgICAgICAgaWYgKHBlcnNvbmEpIHtcbiAgICAgICAgICBleGFtcGxlSW5kaWNhdG9yID0gZm9ybWF0SW5kaWNhdG9yKHRoaXMuaW5kaWNhdG9yQ29uZmlnLCB7XG4gICAgICAgICAgICBuYW1lOiBwZXJzb25hLm1ldGFkYXRhLm5hbWUsXG4gICAgICAgICAgICB2ZXJzaW9uOiBwZXJzb25hLm1ldGFkYXRhLnZlcnNpb24sXG4gICAgICAgICAgICBhdXRob3I6IHBlcnNvbmEubWV0YWRhdGEuYXV0aG9yLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IHBlcnNvbmEubWV0YWRhdGEuY2F0ZWdvcnlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2hvdyBleGFtcGxlIHdpdGggc2FtcGxlIGRhdGFcbiAgICAgICAgZXhhbXBsZUluZGljYXRvciA9IGZvcm1hdEluZGljYXRvcih0aGlzLmluZGljYXRvckNvbmZpZywge1xuICAgICAgICAgIG5hbWU6IFwiRXhhbXBsZSBQZXJzb25hXCIsXG4gICAgICAgICAgdmVyc2lvbjogXCIxLjBcIixcbiAgICAgICAgICBhdXRob3I6IFwiQHVzZXJuYW1lXCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwiY3JlYXRpdmVcIlxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pyFIEluZGljYXRvciBjb25maWd1cmF0aW9uIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IVxuXG5DdXJyZW50IHNldHRpbmdzOlxuLSBFbmFibGVkOiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLmVuYWJsZWR9XG4tIFN0eWxlOiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLnN0eWxlfVxuLSBTaG93IFZlcnNpb246ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuc2hvd1ZlcnNpb259XG4tIFNob3cgQXV0aG9yOiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLnNob3dBdXRob3J9XG4tIFNob3cgQ2F0ZWdvcnk6ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuc2hvd0NhdGVnb3J5fVxuLSBFbW9qaTogJHt0aGlzLmluZGljYXRvckNvbmZpZy5lbW9qaX1cbi0gQnJhY2tldHM6ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuYnJhY2tldFN0eWxlfVxuJHt0aGlzLmluZGljYXRvckNvbmZpZy5jdXN0b21Gb3JtYXQgPyBgLSBDdXN0b20gRm9ybWF0OiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLmN1c3RvbUZvcm1hdH1gIDogJyd9XG5cbkV4YW1wbGUgaW5kaWNhdG9yOiAke2V4YW1wbGVJbmRpY2F0b3IgfHwgXCIobm9uZSAtIGluZGljYXRvcnMgZGlzYWJsZWQpXCJ9XG5cbk5vdGU6IENvbmZpZ3VyYXRpb24gaXMgdGVtcG9yYXJ5IGZvciB0aGlzIHNlc3Npb24uIFRvIG1ha2UgcGVybWFuZW50LCBzZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzOlxuLSBET0xMSE9VU0VfSU5ESUNBVE9SX0VOQUJMRUQ9dHJ1ZS9mYWxzZVxuLSBET0xMSE9VU0VfSU5ESUNBVE9SX1NUWUxFPWZ1bGwvbWluaW1hbC9jb21wYWN0L2N1c3RvbVxuLSBET0xMSE9VU0VfSU5ESUNBVE9SX0ZPUk1BVD1cImN1c3RvbSBmb3JtYXQgdGVtcGxhdGVcIlxuLSBET0xMSE9VU0VfSU5ESUNBVE9SX1NIT1dfVkVSU0lPTj10cnVlL2ZhbHNlXG4tIERPTExIT1VTRV9JTkRJQ0FUT1JfU0hPV19BVVRIT1I9dHJ1ZS9mYWxzZVxuLSBET0xMSE9VU0VfSU5ESUNBVE9SX1NIT1dfQ0FURUdPUlk9dHJ1ZS9mYWxzZVxuLSBET0xMSE9VU0VfSU5ESUNBVE9SX0VNT0pJPfCfjq1cbi0gRE9MTEhPVVNFX0lORElDQVRPUl9CUkFDS0VUUz1zcXVhcmUvcm91bmQvY3VybHkvYW5nbGUvbm9uZWBcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBFcnJvciBjb25maWd1cmluZyBpbmRpY2F0b3I6ICR7U2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpLm1lc3NhZ2V9YFxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgaW5kaWNhdG9yIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGFzeW5jIGNvbmZpZ3VyZUNvbGxlY3Rpb25TdWJtaXNzaW9uKGF1dG9TdWJtaXQ6IGJvb2xlYW4pIHtcbiAgICB0cnkge1xuICAgICAgLy8gU3RvcmUgdGhlIGNvbmZpZ3VyYXRpb24gaW4gZW52aXJvbm1lbnQgdmFyaWFibGVcbiAgICAgIGlmIChhdXRvU3VibWl0KSB7XG4gICAgICAgIHByb2Nlc3MuZW52LkRPTExIT1VTRV9BVVRPX1NVQk1JVF9UT19DT0xMRUNUSU9OID0gJ3RydWUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHByb2Nlc3MuZW52LkRPTExIT1VTRV9BVVRPX1NVQk1JVF9UT19DT0xMRUNUSU9OO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXNzYWdlID0gYXV0b1N1Ym1pdCBcbiAgICAgICAgPyBcIuKchSBDb2xsZWN0aW9uIHN1Ym1pc3Npb24gZW5hYmxlZCEgQ29udGVudCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc3VibWl0dGVkIHRvIHRoZSBEb2xsaG91c2VNQ1AgY29sbGVjdGlvbiBhZnRlciBwb3J0Zm9saW8gdXBsb2FkLlwiXG4gICAgICAgIDogXCLinIUgQ29sbGVjdGlvbiBzdWJtaXNzaW9uIGRpc2FibGVkLiBDb250ZW50IHdpbGwgb25seSBiZSB1cGxvYWRlZCB0byB5b3VyIHBlcnNvbmFsIHBvcnRmb2xpby5cIjtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl9JHttZXNzYWdlfWBcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgY29uZmlndXJpbmcgY29sbGVjdGlvbiBzdWJtaXNzaW9uJywgeyBlcnJvciB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBGYWlsZWQgdG8gY29uZmlndXJlIGNvbGxlY3Rpb24gc3VibWlzc2lvbjogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldENvbGxlY3Rpb25TdWJtaXNzaW9uQ29uZmlnKCkge1xuICAgIGNvbnN0IGF1dG9TdWJtaXRFbmFibGVkID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0FVVE9fU1VCTUlUX1RPX0NPTExFQ1RJT04gPT09ICd0cnVlJztcbiAgICBcbiAgICBjb25zdCBtZXNzYWdlID0gYCoqQ29sbGVjdGlvbiBTdWJtaXNzaW9uIENvbmZpZ3VyYXRpb24qKlxcblxcbmAgK1xuICAgICAgYOKAoiAqKkF1dG8tc3VibWl0Kio6ICR7YXV0b1N1Ym1pdEVuYWJsZWQgPyAn4pyFIEVuYWJsZWQnIDogJ+KdjCBEaXNhYmxlZCd9XFxuXFxuYCArXG4gICAgICBgV2hlbiBhdXRvLXN1Ym1pdCBpcyBlbmFibGVkLCB0aGUgXFxgc3VibWl0X2NvbnRlbnRcXGAgdG9vbCB3aWxsOlxcbmAgK1xuICAgICAgYDEuIFVwbG9hZCBjb250ZW50IHRvIHlvdXIgR2l0SHViIHBvcnRmb2xpb1xcbmAgK1xuICAgICAgYDIuIEF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgc3VibWlzc2lvbiBpc3N1ZSBpbiBEb2xsaG91c2VNQ1AvY29sbGVjdGlvblxcblxcbmAgK1xuICAgICAgYFRvIGNoYW5nZSB0aGlzIHNldHRpbmcsIHVzZTpcXG5gICtcbiAgICAgIGBcXGBcXGBcXGBcXG5jb25maWd1cmVfY29sbGVjdGlvbl9zdWJtaXNzaW9uIGF1dG9TdWJtaXQ6IHRydWUvZmFsc2VcXG5cXGBcXGBcXGBgO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfSR7bWVzc2FnZX1gXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZ2V0SW5kaWNhdG9yQ29uZmlnKCkge1xuICAgIC8vIFNob3cgY3VycmVudCBjb25maWd1cmF0aW9uIGFuZCBleGFtcGxlXG4gICAgbGV0IGV4YW1wbGVJbmRpY2F0b3IgPSBcIlwiO1xuICAgIGlmICh0aGlzLmFjdGl2ZVBlcnNvbmEpIHtcbiAgICAgIGNvbnN0IHBlcnNvbmEgPSB0aGlzLnBlcnNvbmFzLmdldCh0aGlzLmFjdGl2ZVBlcnNvbmEpO1xuICAgICAgaWYgKHBlcnNvbmEpIHtcbiAgICAgICAgZXhhbXBsZUluZGljYXRvciA9IGZvcm1hdEluZGljYXRvcih0aGlzLmluZGljYXRvckNvbmZpZywge1xuICAgICAgICAgIG5hbWU6IHBlcnNvbmEubWV0YWRhdGEubmFtZSxcbiAgICAgICAgICB2ZXJzaW9uOiBwZXJzb25hLm1ldGFkYXRhLnZlcnNpb24sXG4gICAgICAgICAgYXV0aG9yOiBwZXJzb25hLm1ldGFkYXRhLmF1dGhvcixcbiAgICAgICAgICBjYXRlZ29yeTogcGVyc29uYS5tZXRhZGF0YS5jYXRlZ29yeVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2hvdyBleGFtcGxlIHdpdGggc2FtcGxlIGRhdGFcbiAgICAgIGV4YW1wbGVJbmRpY2F0b3IgPSBmb3JtYXRJbmRpY2F0b3IodGhpcy5pbmRpY2F0b3JDb25maWcsIHtcbiAgICAgICAgbmFtZTogXCJFeGFtcGxlIFBlcnNvbmFcIixcbiAgICAgICAgdmVyc2lvbjogXCIxLjBcIixcbiAgICAgICAgYXV0aG9yOiBcIkB1c2VybmFtZVwiLFxuICAgICAgICBjYXRlZ29yeTogXCJjcmVhdGl2ZVwiXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+TiiBDdXJyZW50IEluZGljYXRvciBDb25maWd1cmF0aW9uOlxuXG5TZXR0aW5nczpcbi0gRW5hYmxlZDogJHt0aGlzLmluZGljYXRvckNvbmZpZy5lbmFibGVkfVxuLSBTdHlsZTogJHt0aGlzLmluZGljYXRvckNvbmZpZy5zdHlsZX1cbi0gU2hvdyBWZXJzaW9uOiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLnNob3dWZXJzaW9ufVxuLSBTaG93IEF1dGhvcjogJHt0aGlzLmluZGljYXRvckNvbmZpZy5zaG93QXV0aG9yfVxuLSBTaG93IENhdGVnb3J5OiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLnNob3dDYXRlZ29yeX1cbi0gRW1vamk6ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuZW1vaml9XG4tIEJyYWNrZXRzOiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLmJyYWNrZXRTdHlsZX1cbi0gU2VwYXJhdG9yOiBcIiR7dGhpcy5pbmRpY2F0b3JDb25maWcuc2VwYXJhdG9yfVwiXG4ke3RoaXMuaW5kaWNhdG9yQ29uZmlnLmN1c3RvbUZvcm1hdCA/IGAtIEN1c3RvbSBGb3JtYXQ6ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuY3VzdG9tRm9ybWF0fWAgOiAnJ31cblxuQXZhaWxhYmxlIHN0eWxlczpcbi0gZnVsbDogW/Cfjq0gUGVyc29uYSBOYW1lIHYxLjAgYnkgQGF1dGhvcl1cbi0gbWluaW1hbDog8J+OrSBQZXJzb25hIE5hbWVcbi0gY29tcGFjdDogW1BlcnNvbmEgTmFtZSB2MS4wXVxuLSBjdXN0b206IFVzZSB5b3VyIG93biBmb3JtYXQgd2l0aCBwbGFjZWhvbGRlcnNcblxuRXhhbXBsZSB3aXRoIGN1cnJlbnQgc2V0dGluZ3M6ICR7ZXhhbXBsZUluZGljYXRvciB8fCBcIihub25lIC0gaW5kaWNhdG9ycyBkaXNhYmxlZClcIn1cblxuUGxhY2Vob2xkZXJzIGZvciBjdXN0b20gZm9ybWF0OlxuLSB7ZW1vaml9IC0gVGhlIGNvbmZpZ3VyZWQgZW1vamlcbi0ge25hbWV9IC0gUGVyc29uYSBuYW1lXG4tIHt2ZXJzaW9ufSAtIFBlcnNvbmEgdmVyc2lvblxuLSB7YXV0aG9yfSAtIFBlcnNvbmEgYXV0aG9yXG4tIHtjYXRlZ29yeX0gLSBQZXJzb25hIGNhdGVnb3J5YFxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEV4cG9ydCBhIHNpbmdsZSBwZXJzb25hXG4gICAqL1xuICBhc3luYyBleHBvcnRQZXJzb25hKHBlcnNvbmFOYW1lOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gVXNlIGEgc2luZ2xlIGxvb2t1cCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnNcbiAgICAgIGxldCBwZXJzb25hID0gdGhpcy5wZXJzb25hcy5nZXQocGVyc29uYU5hbWUpO1xuICAgICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICAgIC8vIFRyeSBieSBmaWxlbmFtZVxuICAgICAgICBwZXJzb25hID0gQXJyYXkuZnJvbSh0aGlzLnBlcnNvbmFzLnZhbHVlcygpKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PT0gcGVyc29uYU5hbWUpO1xuICAgICAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBQZXJzb25hIG5vdCBmb3VuZDogJHtwZXJzb25hTmFtZX1gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgZXhwb3J0RGF0YSA9IHRoaXMucGVyc29uYUV4cG9ydGVyLmV4cG9ydFBlcnNvbmEocGVyc29uYSk7XG4gICAgICBjb25zdCBiYXNlNjQgPSB0aGlzLnBlcnNvbmFFeHBvcnRlci50b0Jhc2U2NChleHBvcnREYXRhKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucGVyc29uYUV4cG9ydGVyLmZvcm1hdEV4cG9ydFJlc3VsdChwZXJzb25hLCBiYXNlNjQpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfSR7cmVzdWx0fWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEV4cG9ydCBmYWlsZWQ6ICR7U2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpLm1lc3NhZ2V9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IGFsbCBwZXJzb25hc1xuICAgKi9cbiAgYXN5bmMgZXhwb3J0QWxsUGVyc29uYXMoaW5jbHVkZURlZmF1bHRzID0gdHJ1ZSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwZXJzb25hc0FycmF5ID0gQXJyYXkuZnJvbSh0aGlzLnBlcnNvbmFzLnZhbHVlcygpKTtcbiAgICAgIGNvbnN0IGJ1bmRsZSA9IHRoaXMucGVyc29uYUV4cG9ydGVyLmV4cG9ydEJ1bmRsZShwZXJzb25hc0FycmF5LCBpbmNsdWRlRGVmYXVsdHMpO1xuICAgICAgY29uc3QgYmFzZTY0ID0gdGhpcy5wZXJzb25hRXhwb3J0ZXIudG9CYXNlNjQoYnVuZGxlKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucGVyc29uYUV4cG9ydGVyLmZvcm1hdEJ1bmRsZVJlc3VsdChidW5kbGUsIGJhc2U2NCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl9JHtyZXN1bHR9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgRXhwb3J0IGZhaWxlZDogJHtTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcikubWVzc2FnZX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYSBwZXJzb25hXG4gICAqL1xuICBhc3luYyBpbXBvcnRQZXJzb25hKHNvdXJjZTogc3RyaW5nLCBvdmVyd3JpdGUgPSBmYWxzZSkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIXRoaXMucGVyc29uYUltcG9ydGVyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEltcG9ydCBmdW5jdGlvbmFsaXR5IG5vdCBhdmFpbGFibGUgKGluaXRpYWxpemF0aW9uIGluIHByb2dyZXNzKWBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5wZXJzb25hSW1wb3J0ZXIuaW1wb3J0UGVyc29uYShzb3VyY2UsIHRoaXMucGVyc29uYXMsIG92ZXJ3cml0ZSk7XG4gICAgICBcbiAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAvLyBSZWxvYWQgcGVyc29uYXMgdG8gaW5jbHVkZSB0aGUgbmV3IG9uZVxuICAgICAgICBhd2FpdCB0aGlzLmxvYWRQZXJzb25hcygpO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgJHtyZXN1bHQubWVzc2FnZX1cXG5cXG5QZXJzb25hIFwiJHtyZXN1bHQucGVyc29uYT8ubWV0YWRhdGEubmFtZX1cIiBpcyBub3cgYXZhaWxhYmxlLlxcblRvdGFsIHBlcnNvbmFzOiAke3RoaXMucGVyc29uYXMuc2l6ZX1gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICR7cmVzdWx0Lm1lc3NhZ2V9YFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEltcG9ydCBmYWlsZWQ6ICR7U2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpLm1lc3NhZ2V9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBQb3J0Zm9saW8gbWFuYWdlbWVudCBtZXRob2RzXG4gICAqL1xuXG4gIC8qKlxuICAgKiBDaGVjayBwb3J0Zm9saW8gc3RhdHVzIGluY2x1ZGluZyByZXBvc2l0b3J5IGV4aXN0ZW5jZSBhbmQgc3luYyBpbmZvcm1hdGlvblxuICAgKi9cbiAgYXN5bmMgcG9ydGZvbGlvU3RhdHVzKHVzZXJuYW1lPzogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFZhbGlkYXRlIHVzZXJuYW1lIHBhcmFtZXRlciBpZiBwcm92aWRlZFxuICAgICAgaWYgKHVzZXJuYW1lICYmIHR5cGVvZiB1c2VybmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YWxpZGF0ZVVzZXJuYW1lKHVzZXJuYW1lKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBJbnZhbGlkIHVzZXJuYW1lOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1ZhbGlkYXRpb24gZmFpbGVkJ31gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gR2V0IGN1cnJlbnQgdXNlciBpZiB1c2VybmFtZSBub3QgcHJvdmlkZWRcbiAgICAgIGxldCB0YXJnZXRVc2VybmFtZSA9IHVzZXJuYW1lO1xuICAgICAgaWYgKCF0YXJnZXRVc2VybmFtZSkge1xuICAgICAgICBjb25zdCBhdXRoU3RhdHVzID0gYXdhaXQgdGhpcy5naXRodWJBdXRoTWFuYWdlci5nZXRBdXRoU3RhdHVzKCk7XG4gICAgICAgIGlmICghYXV0aFN0YXR1cy5pc0F1dGhlbnRpY2F0ZWQgfHwgIWF1dGhTdGF0dXMudXNlcm5hbWUpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKkdpdEh1YiBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZCoqXFxuXFxuYCArXG4gICAgICAgICAgICBg8J+UkCAqKlF1aWNrIFNldHVwKio6XFxuYCArXG4gICAgICAgICAgICBgMS4gUnVuOiBcXGBzZXR1cF9naXRodWJfYXV0aFxcYCB0byBhdXRoZW50aWNhdGVcXG5gICtcbiAgICAgICAgICAgIGAyLiBPciB1c2U6IFxcYGdoIGF1dGggbG9naW4gLS13ZWJcXGAgaWYgeW91IGhhdmUgR2l0SHViIENMSVxcblxcbmAgK1xuICAgICAgICAgICAgYPCfk50gKipXaGF0IHRoaXMgZW5hYmxlcyoqOlxcbmAgK1xuICAgICAgICAgICAgYOKAoiBVcGxvYWQgZWxlbWVudHMgdG8geW91ciBHaXRIdWIgcG9ydGZvbGlvXFxuYCArXG4gICAgICAgICAgICBg4oCiIFN5bmMgeW91ciBsb2NhbCBwb3J0Zm9saW8gd2l0aCBHaXRIdWJcXG5gICtcbiAgICAgICAgICAgIGDigKIgU2hhcmUgZWxlbWVudHMgd2l0aCB0aGUgY29tbXVuaXR5XFxuXFxuYCArXG4gICAgICAgICAgICBg8J+MkCAqKk5lZWQgaGVscD8qKiBWaXNpdDogaHR0cHM6Ly9kb2NzLmFudGhyb3BpYy5jb20vZW4vZG9jcy9jbGF1ZGUtY29kZS9vYXV0aC1zZXR1cGBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXRVc2VybmFtZSA9IGF1dGhTdGF0dXMudXNlcm5hbWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIHBvcnRmb2xpbyBleGlzdHNcbiAgICAgIGNvbnN0IHsgUG9ydGZvbGlvUmVwb01hbmFnZXIgfSA9IGF3YWl0IGltcG9ydCgnLi9wb3J0Zm9saW8vUG9ydGZvbGlvUmVwb01hbmFnZXIuanMnKTtcbiAgICAgIGNvbnN0IHBvcnRmb2xpb01hbmFnZXIgPSBuZXcgUG9ydGZvbGlvUmVwb01hbmFnZXIoKTtcbiAgICAgIGNvbnN0IHBvcnRmb2xpb0V4aXN0cyA9IGF3YWl0IHBvcnRmb2xpb01hbmFnZXIuY2hlY2tQb3J0Zm9saW9FeGlzdHModGFyZ2V0VXNlcm5hbWUpO1xuXG4gICAgICBsZXQgc3RhdHVzVGV4dCA9IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCfk4ogKipQb3J0Zm9saW8gU3RhdHVzIGZvciAke3RhcmdldFVzZXJuYW1lfSoqXFxuXFxuYDtcblxuICAgICAgaWYgKHBvcnRmb2xpb0V4aXN0cykge1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGDinIUgKipSZXBvc2l0b3J5Kio6IGRvbGxob3VzZS1wb3J0Zm9saW8gZXhpc3RzXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBg8J+UlyAqKlVSTCoqOiBodHRwczovL2dpdGh1Yi5jb20vJHt0YXJnZXRVc2VybmFtZX0vZG9sbGhvdXNlLXBvcnRmb2xpb1xcblxcbmA7XG4gICAgICAgIFxuICAgICAgICAvLyBHZXQgbG9jYWwgZWxlbWVudHMgY291bnRcbiAgICAgICAgY29uc3QgbG9jYWxQb3J0Zm9saW9NYW5hZ2VyID0gUG9ydGZvbGlvTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgICAgICBjb25zdCBwZXJzb25hc1BhdGggPSBsb2NhbFBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihFbGVtZW50VHlwZS5QRVJTT05BKTtcbiAgICAgICAgY29uc3Qgc2tpbGxzUGF0aCA9IGxvY2FsUG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLlNLSUxMKTtcbiAgICAgICAgY29uc3QgdGVtcGxhdGVzUGF0aCA9IGxvY2FsUG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLlRFTVBMQVRFKTtcbiAgICAgICAgY29uc3QgYWdlbnRzUGF0aCA9IGxvY2FsUG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLkFHRU5UKTtcbiAgICAgICAgY29uc3QgbWVtb3JpZXNQYXRoID0gbG9jYWxQb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuTUVNT1JZKTtcbiAgICAgICAgY29uc3QgZW5zZW1ibGVzUGF0aCA9IGxvY2FsUG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLkVOU0VNQkxFKTtcblxuICAgICAgICBjb25zdCBbcGVyc29uYXMsIHNraWxscywgdGVtcGxhdGVzLCBhZ2VudHMsIG1lbW9yaWVzLCBlbnNlbWJsZXNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgIHRoaXMuY291bnRFbGVtZW50c0luRGlyKHBlcnNvbmFzUGF0aCksXG4gICAgICAgICAgdGhpcy5jb3VudEVsZW1lbnRzSW5EaXIoc2tpbGxzUGF0aCksXG4gICAgICAgICAgdGhpcy5jb3VudEVsZW1lbnRzSW5EaXIodGVtcGxhdGVzUGF0aCksXG4gICAgICAgICAgdGhpcy5jb3VudEVsZW1lbnRzSW5EaXIoYWdlbnRzUGF0aCksXG4gICAgICAgICAgdGhpcy5jb3VudEVsZW1lbnRzSW5EaXIobWVtb3JpZXNQYXRoKSxcbiAgICAgICAgICB0aGlzLmNvdW50RWxlbWVudHNJbkRpcihlbnNlbWJsZXNQYXRoKVxuICAgICAgICBdKTtcblxuICAgICAgICBjb25zdCB0b3RhbEVsZW1lbnRzID0gcGVyc29uYXMgKyBza2lsbHMgKyB0ZW1wbGF0ZXMgKyBhZ2VudHMgKyBtZW1vcmllcyArIGVuc2VtYmxlcztcbiAgICAgICAgc3RhdHVzVGV4dCArPSBg8J+TiCAqKkxvY2FsIEVsZW1lbnRzKio6XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgUGVyc29uYXM6ICR7cGVyc29uYXN9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgU2tpbGxzOiAke3NraWxsc31cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiBUZW1wbGF0ZXM6ICR7dGVtcGxhdGVzfVxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCAg4oCiIEFnZW50czogJHthZ2VudHN9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgTWVtb3JpZXM6ICR7bWVtb3JpZXN9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgRW5zZW1ibGVzOiAke2Vuc2VtYmxlc31cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiAqKlRvdGFsKio6ICR7dG90YWxFbGVtZW50c31cXG5cXG5gO1xuXG4gICAgICAgIHN0YXR1c1RleHQgKz0gYPCflIQgKipTeW5jIFN0YXR1cyoqOiBVc2Ugc3luY19wb3J0Zm9saW8gdG8gdXBkYXRlIEdpdEh1YlxcbmA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGDinYwgKipSZXBvc2l0b3J5Kio6IE5vIHBvcnRmb2xpbyBmb3VuZFxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYPCfkqEgKipOZXh0IFN0ZXAqKjogVXNlIGluaXRfcG9ydGZvbGlvIHRvIGNyZWF0ZSBvbmVcXG5cXG5gO1xuICAgICAgICBcbiAgICAgICAgc3RhdHVzVGV4dCArPSBg8J+TnSAqKldoYXQgeW91J2xsIGdldCoqOlxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCAg4oCiIEdpdEh1YiByZXBvc2l0b3J5IGZvciB5b3VyIGVsZW1lbnRzXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgT3JnYW5pemVkIGZvbGRlciBzdHJ1Y3R1cmVcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiBSRUFETUUgd2l0aCB1c2FnZSBpbnN0cnVjdGlvbnNcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiBFYXN5IHNoYXJpbmcgYW5kIGJhY2t1cFxcbmA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogc3RhdHVzVGV4dFxuICAgICAgICB9XVxuICAgICAgfTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBGYWlsZWQgdG8gY2hlY2sgcG9ydGZvbGlvIHN0YXR1czogJHtTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcikubWVzc2FnZX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGEgbmV3IEdpdEh1YiBwb3J0Zm9saW8gcmVwb3NpdG9yeVxuICAgKi9cbiAgYXN5bmMgaW5pdFBvcnRmb2xpbyhvcHRpb25zOiB7cmVwb3NpdG9yeU5hbWU/OiBzdHJpbmc7IHByaXZhdGU/OiBib29sZWFuOyBkZXNjcmlwdGlvbj86IHN0cmluZ30pIHtcbiAgICB0cnkge1xuICAgICAgLy8gQ2hlY2sgYXV0aGVudGljYXRpb25cbiAgICAgIGNvbnN0IGF1dGhTdGF0dXMgPSBhd2FpdCB0aGlzLmdpdGh1YkF1dGhNYW5hZ2VyLmdldEF1dGhTdGF0dXMoKTtcbiAgICAgIGlmICghYXV0aFN0YXR1cy5pc0F1dGhlbnRpY2F0ZWQgfHwgIWF1dGhTdGF0dXMudXNlcm5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipHaXRIdWIgQXV0aGVudGljYXRpb24gUmVxdWlyZWQqKlxcblxcbmAgK1xuICAgICAgICAgICAgYPCflJAgKipRdWljayBTZXR1cCoqOlxcbmAgK1xuICAgICAgICAgICAgYDEuIFJ1bjogXFxgc2V0dXBfZ2l0aHViX2F1dGhcXGAgdG8gYXV0aGVudGljYXRlXFxuYCArXG4gICAgICAgICAgICBgMi4gT3IgdXNlOiBcXGBnaCBhdXRoIGxvZ2luIC0td2ViXFxgIGlmIHlvdSBoYXZlIEdpdEh1YiBDTElcXG5cXG5gICtcbiAgICAgICAgICAgIGDwn5OdICoqV2hhdCB0aGlzIGVuYWJsZXMqKjpcXG5gICtcbiAgICAgICAgICAgIGDigKIgVXBsb2FkIGVsZW1lbnRzIHRvIHlvdXIgR2l0SHViIHBvcnRmb2xpb1xcbmAgK1xuICAgICAgICAgICAgYOKAoiBTeW5jIHlvdXIgbG9jYWwgcG9ydGZvbGlvIHdpdGggR2l0SHViXFxuYCArXG4gICAgICAgICAgICBg4oCiIFNoYXJlIGVsZW1lbnRzIHdpdGggdGhlIGNvbW11bml0eVxcblxcbmAgK1xuICAgICAgICAgICAgYPCfjJAgKipOZWVkIGhlbHA/KiogVmlzaXQ6IGh0dHBzOi8vZG9jcy5hbnRocm9waWMuY29tL2VuL2RvY3MvY2xhdWRlLWNvZGUvb2F1dGgtc2V0dXBgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdXNlcm5hbWUgPSBhdXRoU3RhdHVzLnVzZXJuYW1lO1xuXG4gICAgICAvLyBDaGVjayBpZiBwb3J0Zm9saW8gYWxyZWFkeSBleGlzdHNcbiAgICAgIGNvbnN0IHsgUG9ydGZvbGlvUmVwb01hbmFnZXIgfSA9IGF3YWl0IGltcG9ydCgnLi9wb3J0Zm9saW8vUG9ydGZvbGlvUmVwb01hbmFnZXIuanMnKTtcbiAgICAgIGNvbnN0IHBvcnRmb2xpb01hbmFnZXIgPSBuZXcgUG9ydGZvbGlvUmVwb01hbmFnZXIoKTtcbiAgICAgIGNvbnN0IHBvcnRmb2xpb0V4aXN0cyA9IGF3YWl0IHBvcnRmb2xpb01hbmFnZXIuY2hlY2tQb3J0Zm9saW9FeGlzdHModXNlcm5hbWUpO1xuXG4gICAgICBpZiAocG9ydGZvbGlvRXhpc3RzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pyFIFBvcnRmb2xpbyBhbHJlYWR5IGV4aXN0cyBhdCBodHRwczovL2dpdGh1Yi5jb20vJHt1c2VybmFtZX0vZG9sbGhvdXNlLXBvcnRmb2xpb1xcblxcblVzZSBwb3J0Zm9saW9fc3RhdHVzIHRvIHNlZSBkZXRhaWxzIG9yIHN5bmNfcG9ydGZvbGlvIHRvIHVwZGF0ZSBpdC5gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIHBvcnRmb2xpbyB3aXRoIGV4cGxpY2l0IGNvbnNlbnRcbiAgICAgIGNvbnN0IHBvcnRmb2xpb1VybCA9IGF3YWl0IHBvcnRmb2xpb01hbmFnZXIuY3JlYXRlUG9ydGZvbGlvKHVzZXJuYW1lLCB0cnVlKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn46JICoqUG9ydGZvbGlvIENyZWF0ZWQgU3VjY2Vzc2Z1bGx5ISoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYOKchSAqKlJlcG9zaXRvcnkqKjogaHR0cHM6Ly9naXRodWIuY29tLyR7dXNlcm5hbWV9L2RvbGxob3VzZS1wb3J0Zm9saW9cXG5gICtcbiAgICAgICAgICAgICAgICBg8J+TgSAqKlN0cnVjdHVyZSoqOiBPcmdhbml6ZWQgZm9sZGVycyBmb3IgYWxsIGVsZW1lbnQgdHlwZXNcXG5gICtcbiAgICAgICAgICAgICAgICBg8J+TnSAqKlJFQURNRSoqOiBVc2FnZSBpbnN0cnVjdGlvbnMgaW5jbHVkZWRcXG5gICtcbiAgICAgICAgICAgICAgICBg8J+UhCAqKk5leHQgU3RlcCoqOiBVc2Ugc3luY19wb3J0Zm9saW8gdG8gdXBsb2FkIHlvdXIgZWxlbWVudHNcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgWW91ciBwb3J0Zm9saW8gaXMgcmVhZHkgZm9yIHNoYXJpbmcgeW91ciBEb2xsaG91c2VNQ1AgY3JlYXRpb25zIWBcbiAgICAgICAgfV1cbiAgICAgIH07XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgRmFpbGVkIHRvIGluaXRpYWxpemUgcG9ydGZvbGlvOiAke1NlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKS5tZXNzYWdlfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZSBwb3J0Zm9saW8gc2V0dGluZ3NcbiAgICovXG4gIGFzeW5jIHBvcnRmb2xpb0NvbmZpZyhvcHRpb25zOiB7YXV0b1N5bmM/OiBib29sZWFuOyBkZWZhdWx0VmlzaWJpbGl0eT86IHN0cmluZzsgYXV0b1N1Ym1pdD86IGJvb2xlYW47IHJlcG9zaXRvcnlOYW1lPzogc3RyaW5nfSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWdNYW5hZ2VyID0gQ29uZmlnTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgICAgYXdhaXQgY29uZmlnTWFuYWdlci5pbml0aWFsaXplKCk7XG5cbiAgICAgIGxldCBzdGF0dXNUZXh0ID0gYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pqZ77iPICoqUG9ydGZvbGlvIENvbmZpZ3VyYXRpb24qKlxcblxcbmA7XG5cbiAgICAgIC8vIFVwZGF0ZSBzZXR0aW5ncyBpZiBwcm92aWRlZFxuICAgICAgaWYgKG9wdGlvbnMuYXV0b1N5bmMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBUaGlzIHdvdWxkIGJlIGltcGxlbWVudGVkIHdoZW4gYXV0by1zeW5jIGZlYXR1cmUgaXMgYWRkZWRcbiAgICAgICAgc3RhdHVzVGV4dCArPSBg8J+UhCBBdXRvLXN5bmM6ICR7b3B0aW9ucy5hdXRvU3luYyA/ICdFbmFibGVkJyA6ICdEaXNhYmxlZCd9IChDb21pbmcgc29vbilcXG5gO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5kZWZhdWx0VmlzaWJpbGl0eSkge1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGDwn5SSIERlZmF1bHQgdmlzaWJpbGl0eTogJHtvcHRpb25zLmRlZmF1bHRWaXNpYmlsaXR5fVxcbmA7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmF1dG9TdWJtaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBOb3RlOiBBdXRvLXN1Ym1pdCBjb25maWd1cmF0aW9uIHdvdWxkIGJlIGltcGxlbWVudGVkIGhlcmVcbiAgICAgICAgLy8gRm9yIG5vdywgd2UnbGwganVzdCBzaG93IHRoZSBzdGF0dXNcbiAgICAgICAgc3RhdHVzVGV4dCArPSBg8J+TpCBBdXRvLXN1Ym1pdCB0byBjb2xsZWN0aW9uOiAke29wdGlvbnMuYXV0b1N1Ym1pdCA/ICdFbmFibGVkJyA6ICdEaXNhYmxlZCd9IChDb21pbmcgc29vbilcXG5gO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5yZXBvc2l0b3J5TmFtZSkge1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGDwn5OBIFJlcG9zaXRvcnkgbmFtZTogJHtvcHRpb25zLnJlcG9zaXRvcnlOYW1lfSAoQ3VzdG9tIG5hbWVzIGNvbWluZyBzb29uKVxcbmA7XG4gICAgICB9XG5cbiAgICAgIC8vIFNob3cgY3VycmVudCBjb25maWd1cmF0aW9uXG4gICAgICBzdGF0dXNUZXh0ICs9IGBcXG7wn5OLICoqQ3VycmVudCBTZXR0aW5ncyoqOlxcbmA7XG4gICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiBBdXRvLXN1Ym1pdDogRGlzYWJsZWQgKENvbWluZyBzb29uKVxcbmA7XG4gICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiBSZXBvc2l0b3J5IG5hbWU6IGRvbGxob3VzZS1wb3J0Zm9saW8gKGRlZmF1bHQpXFxuYDtcbiAgICAgIHN0YXR1c1RleHQgKz0gYCAg4oCiIERlZmF1bHQgdmlzaWJpbGl0eTogcHVibGljXFxuYDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBzdGF0dXNUZXh0XG4gICAgICAgIH1dXG4gICAgICB9O1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEZhaWxlZCB0byBjb25maWd1cmUgcG9ydGZvbGlvOiAke1NlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKS5tZXNzYWdlfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN5bmMgcG9ydGZvbGlvIHdpdGggR2l0SHViXG4gICAqL1xuICBhc3luYyBzeW5jUG9ydGZvbGlvKG9wdGlvbnM6IHtkaXJlY3Rpb246IHN0cmluZzsgZm9yY2U6IGJvb2xlYW47IGRyeVJ1bjogYm9vbGVhbn0pIHtcbiAgICB0cnkge1xuICAgICAgLy8gQ2hlY2sgYXV0aGVudGljYXRpb25cbiAgICAgIGNvbnN0IGF1dGhTdGF0dXMgPSBhd2FpdCB0aGlzLmdpdGh1YkF1dGhNYW5hZ2VyLmdldEF1dGhTdGF0dXMoKTtcbiAgICAgIGlmICghYXV0aFN0YXR1cy5pc0F1dGhlbnRpY2F0ZWQgfHwgIWF1dGhTdGF0dXMudXNlcm5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipHaXRIdWIgQXV0aGVudGljYXRpb24gUmVxdWlyZWQqKlxcblxcbmAgK1xuICAgICAgICAgICAgYPCflJAgKipRdWljayBTZXR1cCoqOlxcbmAgK1xuICAgICAgICAgICAgYDEuIFJ1bjogXFxgc2V0dXBfZ2l0aHViX2F1dGhcXGAgdG8gYXV0aGVudGljYXRlXFxuYCArXG4gICAgICAgICAgICBgMi4gT3IgdXNlOiBcXGBnaCBhdXRoIGxvZ2luIC0td2ViXFxgIGlmIHlvdSBoYXZlIEdpdEh1YiBDTElcXG5cXG5gICtcbiAgICAgICAgICAgIGDwn5OdICoqV2hhdCB0aGlzIGVuYWJsZXMqKjpcXG5gICtcbiAgICAgICAgICAgIGDigKIgVXBsb2FkIGVsZW1lbnRzIHRvIHlvdXIgR2l0SHViIHBvcnRmb2xpb1xcbmAgK1xuICAgICAgICAgICAgYOKAoiBTeW5jIHlvdXIgbG9jYWwgcG9ydGZvbGlvIHdpdGggR2l0SHViXFxuYCArXG4gICAgICAgICAgICBg4oCiIFNoYXJlIGVsZW1lbnRzIHdpdGggdGhlIGNvbW11bml0eVxcblxcbmAgK1xuICAgICAgICAgICAgYPCfjJAgKipOZWVkIGhlbHA/KiogVmlzaXQ6IGh0dHBzOi8vZG9jcy5hbnRocm9waWMuY29tL2VuL2RvY3MvY2xhdWRlLWNvZGUvb2F1dGgtc2V0dXBgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdXNlcm5hbWUgPSBhdXRoU3RhdHVzLnVzZXJuYW1lO1xuXG4gICAgICAvLyBDaGVjayBpZiBwb3J0Zm9saW8gZXhpc3RzXG4gICAgICBjb25zdCB7IFBvcnRmb2xpb1JlcG9NYW5hZ2VyIH0gPSBhd2FpdCBpbXBvcnQoJy4vcG9ydGZvbGlvL1BvcnRmb2xpb1JlcG9NYW5hZ2VyLmpzJyk7XG4gICAgICBjb25zdCBwb3J0Zm9saW9NYW5hZ2VyID0gbmV3IFBvcnRmb2xpb1JlcG9NYW5hZ2VyKCk7XG4gICAgICBcbiAgICAgIC8vIENSSVRJQ0FMIEZJWDogU2V0IEdpdEh1YiB0b2tlbiBsaWtlIHN1Ym1pdF9jb250ZW50IGRvZXNcbiAgICAgIC8vIFdpdGhvdXQgdGhpcywgY2hlY2tQb3J0Zm9saW9FeGlzdHMgZmFpbHMgYmVjYXVzZSBpdCBjYW4ndCBhdXRoZW50aWNhdGUgdG8gR2l0SHViXG4gICAgICBjb25zdCB7IFRva2VuTWFuYWdlciB9ID0gYXdhaXQgaW1wb3J0KCcuL3NlY3VyaXR5L3Rva2VuTWFuYWdlci5qcycpO1xuICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCBUb2tlbk1hbmFnZXIuZ2V0R2l0SHViVG9rZW5Bc3luYygpO1xuICAgICAgaWYgKCF0b2tlbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBHaXRIdWIgYXV0aGVudGljYXRpb24gcmVxdWlyZWQuIFBsZWFzZSBhdXRoZW50aWNhdGUgZmlyc3QgdXNpbmcgc2V0dXBfZ2l0aHViX2F1dGguYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBwb3J0Zm9saW9NYW5hZ2VyLnNldFRva2VuKHRva2VuKTtcbiAgICAgIFxuICAgICAgY29uc3QgcG9ydGZvbGlvRXhpc3RzID0gYXdhaXQgcG9ydGZvbGlvTWFuYWdlci5jaGVja1BvcnRmb2xpb0V4aXN0cyh1c2VybmFtZSk7XG5cbiAgICAgIGlmICghcG9ydGZvbGlvRXhpc3RzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqTm8gUG9ydGZvbGlvIFJlcG9zaXRvcnkgRm91bmQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYPCfj6AgKipRdWljayBTZXR1cCoqOlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYDEuIFJ1bjogXFxgaW5pdF9wb3J0Zm9saW9cXGAgdG8gY3JlYXRlIHlvdXIgR2l0SHViIHBvcnRmb2xpb1xcbmAgK1xuICAgICAgICAgICAgICAgICAgYDIuIFRoaXMgY3JlYXRlczogaHR0cHM6Ly9naXRodWIuY29tL1t1c2VybmFtZV0vZG9sbGhvdXNlLXBvcnRmb2xpb1xcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYPCfk50gKipXaGF0IHlvdSdsbCBnZXQqKjpcXG5gICtcbiAgICAgICAgICAgICAgICAgIGDigKIgUHVibGljIHJlcG9zaXRvcnkgdG8gc2hvd2Nhc2UgeW91ciBBSSBlbGVtZW50c1xcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKAoiBPcmdhbml6ZWQgc3RydWN0dXJlIGZvciBwZXJzb25hcywgc2tpbGxzLCB0ZW1wbGF0ZXMsIGFuZCBhZ2VudHNcXG5gICtcbiAgICAgICAgICAgICAgICAgIGDigKIgQXV0b21hdGljIHN5bmNpbmcgb2YgeW91ciBsb2NhbCBwb3J0Zm9saW9cXG5gICtcbiAgICAgICAgICAgICAgICAgIGDigKIgQ29tbXVuaXR5IHNoYXJpbmcgY2FwYWJpbGl0aWVzXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBg8J+agCAqKkFmdGVyIHNldHVwKio6IFVzZSBcXGBzeW5jX3BvcnRmb2xpb1xcYCB0byB1cGxvYWQgeW91ciBjb250ZW50IWBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5kcnlSdW4pIHtcbiAgICAgICAgLy8gU2hvdyB3aGF0IHdvdWxkIGJlIHN5bmNlZFxuICAgICAgICBjb25zdCBsb2NhbFBvcnRmb2xpb01hbmFnZXIgPSBQb3J0Zm9saW9NYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBlbGVtZW50VHlwZUNvdW50czogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nPiA9IHt9O1xuICAgICAgICBjb25zdCBlbGVtZW50VHlwZUVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgXG4gICAgICAgIC8vIEdldCBlbGVtZW50IGNvdW50cyB3aXRoIGJldHRlciBlcnJvciBoYW5kbGluZ1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnRUeXBlIG9mIFsncGVyc29uYXMnLCAnc2tpbGxzJywgJ3RlbXBsYXRlcycsICdhZ2VudHMnXSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGF3YWl0IHRoaXMuZ2V0RWxlbWVudHNMaXN0KGVsZW1lbnRUeXBlKTtcbiAgICAgICAgICAgIGVsZW1lbnRUeXBlQ291bnRzW2VsZW1lbnRUeXBlXSA9IGVsZW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgICBlbGVtZW50VHlwZUNvdW50c1tlbGVtZW50VHlwZV0gPSAnRVJST1InO1xuICAgICAgICAgICAgZWxlbWVudFR5cGVFcnJvcnMucHVzaChgJHtlbGVtZW50VHlwZX06ICR7ZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcid9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRyeVJ1blRleHQgPSBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5SNICoqRHJ5IFJ1biAtIFBvcnRmb2xpbyBTeW5jIFByZXZpZXcqKlxcblxcbmA7XG4gICAgICAgIGRyeVJ1blRleHQgKz0gYPCfk6QgKipFbGVtZW50cyB0byBzeW5jKiogKCR7b3B0aW9ucy5kaXJlY3Rpb259KTpcXG5gO1xuICAgICAgICBkcnlSdW5UZXh0ICs9IGAgIOKAoiBQZXJzb25hczogJHtlbGVtZW50VHlwZUNvdW50cy5wZXJzb25hc31cXG5gO1xuICAgICAgICBkcnlSdW5UZXh0ICs9IGAgIOKAoiBTa2lsbHM6ICR7ZWxlbWVudFR5cGVDb3VudHMuc2tpbGxzfVxcbmA7XG4gICAgICAgIGRyeVJ1blRleHQgKz0gYCAg4oCiIFRlbXBsYXRlczogJHtlbGVtZW50VHlwZUNvdW50cy50ZW1wbGF0ZXN9XFxuYDtcbiAgICAgICAgZHJ5UnVuVGV4dCArPSBgICDigKIgQWdlbnRzOiAke2VsZW1lbnRUeXBlQ291bnRzLmFnZW50c31cXG5cXG5gO1xuICAgICAgICBcbiAgICAgICAgLy8gSW5jbHVkZSBhbnkgZXJyb3JzIGVuY291bnRlcmVkIGR1cmluZyBkcnkgcnVuXG4gICAgICAgIGlmIChlbGVtZW50VHlwZUVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZHJ5UnVuVGV4dCArPSBg4pqg77iPICoqRXJyb3JzIGZvdW5kIGR1cmluZyBwcmV2aWV3OioqXFxuYDtcbiAgICAgICAgICBmb3IgKGNvbnN0IGVycm9yIG9mIGVsZW1lbnRUeXBlRXJyb3JzKSB7XG4gICAgICAgICAgICBkcnlSdW5UZXh0ICs9IGAgIOKAoiAke2Vycm9yfVxcbmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRyeVJ1blRleHQgKz0gYFxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGRyeVJ1blRleHQgKz0gYPCfjq8gKipUYXJnZXQqKjogaHR0cHM6Ly9naXRodWIuY29tLyR7dXNlcm5hbWV9L2RvbGxob3VzZS1wb3J0Zm9saW9cXG5gO1xuICAgICAgICBkcnlSdW5UZXh0ICs9IGDimqDvuI8gICoqTm90ZSoqOiBUaGlzIGlzIGEgcHJldmlldy4gUmVtb3ZlIGRyeV9ydW49dHJ1ZSB0byBwZXJmb3JtIGFjdHVhbCBzeW5jLmA7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBkcnlSdW5UZXh0XG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gRm9yIG5vdywgaW1wbGVtZW50IGJhc2ljIHB1c2ggZnVuY3Rpb25hbGl0eVxuICAgICAgaWYgKG9wdGlvbnMuZGlyZWN0aW9uID09PSAncHVzaCcgfHwgb3B0aW9ucy5kaXJlY3Rpb24gPT09ICdib3RoJykge1xuICAgICAgICBsZXQgc3luY0NvdW50ID0gMDtcbiAgICAgICAgbGV0IHRvdGFsRWxlbWVudHMgPSAwO1xuICAgICAgICBsZXQgc3luY1RleHQgPSBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5SEICoqU3luY2luZyBQb3J0Zm9saW8uLi4qKlxcblxcbmA7XG5cbiAgICAgICAgLy8gVVggSU1QUk9WRU1FTlQ6IENhbGN1bGF0ZSB0b3RhbCBlbGVtZW50cyBmb3IgcHJvZ3Jlc3MgdHJhY2tpbmdcbiAgICAgICAgY29uc3QgZWxlbWVudFR5cGVzID0gWydwZXJzb25hcycsICdza2lsbHMnLCAndGVtcGxhdGVzJywgJ2FnZW50cyddIGFzIGNvbnN0O1xuICAgICAgICBjb25zdCBlbGVtZW50Q291bnRzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG4gICAgICAgIGNvbnN0IGZhaWxlZEVsZW1lbnRzOiBBcnJheTx7dHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGVycm9yOiBzdHJpbmd9PiA9IFtdO1xuICAgICAgICBcbiAgICAgICAgLy8gUHJlLWNhbGN1bGF0ZSB0b3RhbHMgZm9yIGJldHRlciBwcm9ncmVzcyBpbmRpY2F0b3JzXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc3luY1RleHQgKz0gYPCfk4ogKipDYWxjdWxhdGluZyBzeW5jIHNjb3BlLi4uKipcXG5gO1xuICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudFR5cGUgb2YgZWxlbWVudFR5cGVzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGF3YWl0IHRoaXMuZ2V0RWxlbWVudHNMaXN0KGVsZW1lbnRUeXBlKTtcbiAgICAgICAgICAgICAgZWxlbWVudENvdW50c1tlbGVtZW50VHlwZV0gPSBlbGVtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgIHRvdGFsRWxlbWVudHMgKz0gZWxlbWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgICAgICBlbGVtZW50Q291bnRzW2VsZW1lbnRUeXBlXSA9IDA7XG4gICAgICAgICAgICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gY291bnQgJHtlbGVtZW50VHlwZX1gLCB7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBzeW5jVGV4dCArPSBgXFxu8J+OryAqKlJlYWR5IHRvIHN5bmMgJHt0b3RhbEVsZW1lbnRzfSBlbGVtZW50czoqKlxcbmA7XG4gICAgICAgICAgZm9yIChjb25zdCBbdHlwZSwgY291bnRdIG9mIE9iamVjdC5lbnRyaWVzKGVsZW1lbnRDb3VudHMpKSB7XG4gICAgICAgICAgICBjb25zdCBpY29uID0gY291bnQgPiAwID8gJ+KchScgOiAn4pqqJztcbiAgICAgICAgICAgIHN5bmNUZXh0ICs9IGAgICR7aWNvbn0gJHt0eXBlfTogJHtjb3VudH0gZWxlbWVudHNcXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzeW5jVGV4dCArPSBgXFxu8J+agCAqKlN0YXJ0aW5nIHN5bmMgcHJvY2Vzcy4uLioqXFxuXFxuYDtcbiAgICAgICAgICBcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGBcXG7imqDvuI8gKipXYXJuaW5nKio6IENvdWxkIG5vdCBjYWxjdWxhdGUgc3luYyBzY29wZTogJHtlcnJvci5tZXNzYWdlfVxcblxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIFVYIElNUFJPVkVNRU5UOiBQcm9jZXNzIGVhY2ggZWxlbWVudCB0eXBlIHdpdGggcHJvZ3Jlc3MgdHJhY2tpbmdcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50VHlwZSBvZiBlbGVtZW50VHlwZXMpIHtcbiAgICAgICAgICBjb25zdCB0eXBlQ291bnQgPSBlbGVtZW50Q291bnRzW2VsZW1lbnRUeXBlXSB8fCAwO1xuICAgICAgICAgIGlmICh0eXBlQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHN5bmNUZXh0ICs9IGDij6kgKipTa2lwcGluZyAke2VsZW1lbnRUeXBlfSoqIChubyBlbGVtZW50cyBmb3VuZClcXG5gO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIHN5bmNUZXh0ICs9IGDwn5OBICoqUHJvY2Vzc2luZyAke2VsZW1lbnRUeXBlfSoqICgke3R5cGVDb3VudH0gZWxlbWVudHMpOlxcbmA7XG4gICAgICAgICAgbGV0IHR5cGVTdWNjZXNzQ291bnQgPSAwO1xuICAgICAgICAgIFxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGF3YWl0IHRoaXMuZ2V0RWxlbWVudHNMaXN0KGVsZW1lbnRUeXBlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBjb25zdCBlbGVtZW50TmFtZSA9IGVsZW1lbnRzW2ldO1xuICAgICAgICAgICAgICBjb25zdCBwcm9ncmVzcyA9IGBbJHtpICsgMX0vJHtlbGVtZW50cy5sZW5ndGh9XWA7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIFVYIElNUFJPVkVNRU5UOiBTaG93IGluZGl2aWR1YWwgZWxlbWVudCBwcm9ncmVzc1xuICAgICAgICAgICAgICAgIHN5bmNUZXh0ICs9IGAgICR7cHJvZ3Jlc3N9IPCflIQgU3luY2luZyBcIiR7ZWxlbWVudE5hbWV9XCIuLi5gO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIExvYWQgZWxlbWVudCBhbmQgc2F2ZSB0byBwb3J0Zm9saW9cbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gYXdhaXQgdGhpcy5sb2FkRWxlbWVudEJ5VHlwZShlbGVtZW50TmFtZSwgZWxlbWVudFR5cGUpO1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBwb3J0Zm9saW9NYW5hZ2VyLnNhdmVFbGVtZW50KGVsZW1lbnQsIHRydWUpOyAvLyBFeHBsaWNpdCBjb25zZW50XG4gICAgICAgICAgICAgICAgICBzeW5jQ291bnQrKztcbiAgICAgICAgICAgICAgICAgIHR5cGVTdWNjZXNzQ291bnQrKztcbiAgICAgICAgICAgICAgICAgIHN5bmNUZXh0ICs9IGAg4pyFXFxuYDtcbiAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgU3VjY2Vzc2Z1bGx5IHN5bmNlZCAke2VsZW1lbnRUeXBlfS8ke2VsZW1lbnROYW1lfWApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBzeW5jVGV4dCArPSBgIOKdjCAobnVsbCBlbGVtZW50KVxcbmA7XG4gICAgICAgICAgICAgICAgICBmYWlsZWRFbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogZWxlbWVudFR5cGUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGVsZW1lbnROYW1lLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogJ0VsZW1lbnQgbG9hZGVkIGFzIG51bGwvdW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGNhdGNoIChlbGVtZW50RXJyb3I6IGFueSkge1xuICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZXJyb3IgY29kZSBpZiBwcmVzZW50XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZWxlbWVudEVycm9yLmNvZGUgfHwgKGVsZW1lbnRFcnJvci5tZXNzYWdlPy5tYXRjaCgvXFxbKFtBLVpfXStfXFxkKylcXF0vKT8uWzFdKSB8fCAnJztcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlbGVtZW50RXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvciBkdXJpbmcgZWxlbWVudCBzeW5jJztcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBDbGVhbiB1cCBlcnJvciBtZXNzYWdlIGZvciBkaXNwbGF5IChyZW1vdmUgY29kZSBpZiBhbHJlYWR5IGV4dHJhY3RlZClcbiAgICAgICAgICAgICAgICBjb25zdCBkaXNwbGF5TWVzc2FnZSA9IGVycm9yQ29kZSBcbiAgICAgICAgICAgICAgICAgID8gZXJyb3JNZXNzYWdlLnJlcGxhY2UoL1xcW1tBLVpfXStfXFxkK1xcXVxccyovLCAnJylcbiAgICAgICAgICAgICAgICAgIDogZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIFNob3cgZXJyb3IgY29kZSBpbiBvdXRwdXQgZm9yIGJldHRlciBkaWFnbm9zdGljc1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yT3V0cHV0ID0gZXJyb3JDb2RlIFxuICAgICAgICAgICAgICAgICAgPyBgJHtlcnJvckNvZGV9OiAke2Rpc3BsYXlNZXNzYWdlfWBcbiAgICAgICAgICAgICAgICAgIDogZGlzcGxheU1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgc3luY1RleHQgKz0gYCDinYwgKCR7ZXJyb3JPdXRwdXR9KVxcbmA7XG4gICAgICAgICAgICAgICAgZmFpbGVkRWxlbWVudHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBlbGVtZW50VHlwZSxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGVsZW1lbnROYW1lLFxuICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yT3V0cHV0XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBzeW5jICR7ZWxlbWVudFR5cGV9LyR7ZWxlbWVudE5hbWV9YCwgeyBcbiAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICBlcnJvckNvZGUsXG4gICAgICAgICAgICAgICAgICBlbGVtZW50TmFtZSxcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRUeXBlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gVVggSU1QUk9WRU1FTlQ6IFNob3cgY29tcGxldGlvbiBzdW1tYXJ5IGZvciBlYWNoIHR5cGVcbiAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NSYXRlID0gZWxlbWVudHMubGVuZ3RoID4gMCA/IE1hdGgucm91bmQoKHR5cGVTdWNjZXNzQ291bnQgLyBlbGVtZW50cy5sZW5ndGgpICogMTAwKSA6IDA7XG4gICAgICAgICAgICBjb25zdCBzdGF0dXNJY29uID0gc3VjY2Vzc1JhdGUgPT09IDEwMCA/ICfwn46JJyA6IHN1Y2Nlc3NSYXRlID4gNTAgPyAn4pqg77iPJyA6ICfinYwnO1xuICAgICAgICAgICAgc3luY1RleHQgKz0gYCAgJHtzdGF0dXNJY29ufSAqKiR7ZWxlbWVudFR5cGV9IGNvbXBsZXRlKio6ICR7dHlwZVN1Y2Nlc3NDb3VudH0vJHtlbGVtZW50cy5sZW5ndGh9IHN5bmNlZCAoJHtzdWNjZXNzUmF0ZX0lKVxcblxcbmA7XG4gICAgICAgICAgfSBjYXRjaCAobGlzdEVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgIC8vIFVYIElNUFJPVkVNRU5UOiBCZXR0ZXIgZXJyb3IgcmVwb3J0aW5nIGZvciBsaXN0IGZhaWx1cmVzXG4gICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBsaXN0RXJyb3IubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGdldCBlbGVtZW50cyBsaXN0JztcbiAgICAgICAgICAgIHN5bmNUZXh0ICs9IGAgIOKdjCAqKkZhaWxlZCB0byBsaXN0ICR7ZWxlbWVudFR5cGV9Kio6ICR7ZXJyb3JNZXNzYWdlfVxcblxcbmA7XG4gICAgICAgICAgICBmYWlsZWRFbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgdHlwZTogZWxlbWVudFR5cGUsXG4gICAgICAgICAgICAgIG5hbWU6ICdBTEwnLFxuICAgICAgICAgICAgICBlcnJvcjogYEZhaWxlZCB0byBsaXN0ICR7ZWxlbWVudFR5cGV9OiAke2Vycm9yTWVzc2FnZX1gXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gZ2V0ICR7ZWxlbWVudFR5cGV9IGxpc3RgLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVVggSU1QUk9WRU1FTlQ6IEVuaGFuY2VkIGZpbmFsIHN1bW1hcnkgd2l0aCBhY3Rpb25hYmxlIGluc2lnaHRzXG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NSYXRlID0gdG90YWxFbGVtZW50cyA+IDAgPyBNYXRoLnJvdW5kKChzeW5jQ291bnQgLyB0b3RhbEVsZW1lbnRzKSAqIDEwMCkgOiAwO1xuICAgICAgICBjb25zdCBzdW1tYXJ5SWNvbiA9IHN1Y2Nlc3NSYXRlID09PSAxMDAgPyAn8J+OiScgOiBzdWNjZXNzUmF0ZSA+PSA4MCA/ICfinIUnIDogc3VjY2Vzc1JhdGUgPj0gNTAgPyAn4pqg77iPJyA6ICfinYwnO1xuICAgICAgICBcbiAgICAgICAgc3luY1RleHQgKz0gYCR7c3VtbWFyeUljb259ICoqU3luYyBDb21wbGV0ZSEqKlxcbmA7XG4gICAgICAgIHN5bmNUZXh0ICs9IGDwn5OKICoqT3ZlcmFsbCBSZXN1bHRzKio6ICR7c3luY0NvdW50fS8ke3RvdGFsRWxlbWVudHN9IGVsZW1lbnRzIHN5bmNlZCAoJHtzdWNjZXNzUmF0ZX0lKVxcbmA7XG4gICAgICAgIHN5bmNUZXh0ICs9IGDwn4+gICoqUG9ydGZvbGlvKio6IGh0dHBzOi8vZ2l0aHViLmNvbS8ke3VzZXJuYW1lfS9kb2xsaG91c2UtcG9ydGZvbGlvXFxuXFxuYDtcbiAgICAgICAgXG4gICAgICAgIC8vIEluY2x1ZGUgZmFpbGVkIGVsZW1lbnRzIGluZm9ybWF0aW9uIHdpdGggYWN0aW9uYWJsZSBzdWdnZXN0aW9uc1xuICAgICAgICBpZiAoZmFpbGVkRWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGDimqDvuI8gKipJc3N1ZXMgRW5jb3VudGVyZWQqKiAoJHtmYWlsZWRFbGVtZW50cy5sZW5ndGh9IHByb2JsZW1zKTpcXG5cXG5gO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIEdyb3VwIGZhaWx1cmVzIGJ5IHR5cGUgZm9yIGJldHRlciBvcmdhbml6YXRpb25cbiAgICAgICAgICBjb25zdCBmYWlsdXJlc0J5VHlwZTogUmVjb3JkPHN0cmluZywgQXJyYXk8e25hbWU6IHN0cmluZywgZXJyb3I6IHN0cmluZ30+PiA9IHt9O1xuICAgICAgICAgIGZvciAoY29uc3QgZmFpbGVkIG9mIGZhaWxlZEVsZW1lbnRzKSB7XG4gICAgICAgICAgICBpZiAoIWZhaWx1cmVzQnlUeXBlW2ZhaWxlZC50eXBlXSkge1xuICAgICAgICAgICAgICBmYWlsdXJlc0J5VHlwZVtmYWlsZWQudHlwZV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZhaWx1cmVzQnlUeXBlW2ZhaWxlZC50eXBlXS5wdXNoKHsgbmFtZTogZmFpbGVkLm5hbWUsIGVycm9yOiBmYWlsZWQuZXJyb3IgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGZvciAoY29uc3QgW3R5cGUsIGZhaWx1cmVzXSBvZiBPYmplY3QuZW50cmllcyhmYWlsdXJlc0J5VHlwZSkpIHtcbiAgICAgICAgICAgIHN5bmNUZXh0ICs9IGDwn5OBICoqJHt0eXBlfSoqICgke2ZhaWx1cmVzLmxlbmd0aH0gaXNzdWVzKTpcXG5gO1xuICAgICAgICAgICAgZm9yIChjb25zdCBmYWlsdXJlIG9mIGZhaWx1cmVzKSB7XG4gICAgICAgICAgICAgIGlmIChmYWlsdXJlLm5hbWUgPT09ICdBTEwnKSB7XG4gICAgICAgICAgICAgICAgc3luY1RleHQgKz0gYCAg4p2MICR7ZmFpbHVyZS5lcnJvcn1cXG5gO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN5bmNUZXh0ICs9IGAgIOKdjCBcIiR7ZmFpbHVyZS5uYW1lfVwiOiAke2ZhaWx1cmUuZXJyb3J9XFxuYDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3luY1RleHQgKz0gYFxcbmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIFVYIElNUFJPVkVNRU5UOiBBZGQgaGVscGZ1bCBzdWdnZXN0aW9ucyBiYXNlZCBvbiBlcnJvciBjb2RlcyBmb3VuZFxuICAgICAgICAgIHN5bmNUZXh0ICs9IGDwn5KhICoqVHJvdWJsZXNob290aW5nIFRpcHMqKjpcXG5gO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIENoZWNrIGZvciBzcGVjaWZpYyBlcnJvciBjb2RlcyBhbmQgcHJvdmlkZSB0YXJnZXRlZCBhZHZpY2VcbiAgICAgICAgICBjb25zdCBlcnJvckNvZGVzID0gZmFpbGVkRWxlbWVudHMubWFwKGYgPT4gZi5lcnJvci5tYXRjaCgvXihbQS1aX10rX1xcZCspOi8pPy5bMV0pLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgICBjb25zdCB1bmlxdWVFcnJvckNvZGVzID0gWy4uLm5ldyBTZXQoZXJyb3JDb2RlcyldO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmICh1bmlxdWVFcnJvckNvZGVzLmluY2x1ZGVzKCdQT1JURk9MSU9fU1lOQ18wMDEnKSkge1xuICAgICAgICAgICAgc3luY1RleHQgKz0gYCAg4oCiIPCflJAgKipBdXRoIEVycm9yKio6IFJ1biBcXGBzZXR1cF9naXRodWJfYXV0aFxcYCB0byByZS1hdXRoZW50aWNhdGVcXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodW5pcXVlRXJyb3JDb2Rlcy5pbmNsdWRlcygnUE9SVEZPTElPX1NZTkNfMDAyJykpIHtcbiAgICAgICAgICAgIHN5bmNUZXh0ICs9IGAgIOKAoiDwn5OBICoqUmVwbyBNaXNzaW5nKio6IFJ1biBcXGBpbml0X3BvcnRmb2xpb1xcYCB0byBjcmVhdGUgeW91ciByZXBvc2l0b3J5XFxuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVuaXF1ZUVycm9yQ29kZXMuaW5jbHVkZXMoJ1BPUlRGT0xJT19TWU5DXzAwNCcpKSB7XG4gICAgICAgICAgICBzeW5jVGV4dCArPSBgICDigKIg8J+UpyAqKkFQSSBFcnJvcioqOiBHaXRIdWIgcmVzcG9uc2UgZm9ybWF0IGlzc3VlIC0gcGxlYXNlIHJlcG9ydCB0aGlzIGJ1Z1xcbmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1bmlxdWVFcnJvckNvZGVzLmluY2x1ZGVzKCdQT1JURk9MSU9fU1lOQ18wMDYnKSkge1xuICAgICAgICAgICAgc3luY1RleHQgKz0gYCAg4oCiIOKPsyAqKlJhdGUgTGltaXRlZCoqOiBXYWl0IGEgZmV3IG1pbnV0ZXMgYW5kIHRyeSBhZ2FpblxcbmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIEdlbmVyYWwgdGlwc1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGAgIOKAoiBDaGVjayBlbGVtZW50IGZpbGUgZm9ybWF0cyBhbmQgbWV0YWRhdGFcXG5gO1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGAgIOKAoiBUcnkgc3luY2luZyBpbmRpdmlkdWFsIGVsZW1lbnRzIHdpdGggXFxgc3VibWl0X2NvbnRlbnRcXGBcXG5gO1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGAgIOKAoiBVc2UgXFxgc3luY19wb3J0Zm9saW9cXGAgd2l0aCBcXGBkcnlfcnVuPXRydWVcXGAgdG8gcHJldmlldyBpc3N1ZXNcXG5cXG5gO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIEFkZCBlcnJvciBjb2RlIGxlZ2VuZCBpZiB3ZSBmb3VuZCBhbnlcbiAgICAgICAgICBpZiAodW5pcXVlRXJyb3JDb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzeW5jVGV4dCArPSBg8J+TiyAqKkVycm9yIENvZGVzIERldGVjdGVkKio6XFxuYDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29kZSBvZiB1bmlxdWVFcnJvckNvZGVzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yRGVzY3JpcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgICAgICAgICAgICdQT1JURk9MSU9fU1lOQ18wMDEnOiAnQXV0aGVudGljYXRpb24gZmFpbHVyZScsXG4gICAgICAgICAgICAgICAgJ1BPUlRGT0xJT19TWU5DXzAwMic6ICdSZXBvc2l0b3J5IG5vdCBmb3VuZCcsXG4gICAgICAgICAgICAgICAgJ1BPUlRGT0xJT19TWU5DXzAwMyc6ICdGaWxlIGNyZWF0aW9uIGZhaWxlZCcsXG4gICAgICAgICAgICAgICAgJ1BPUlRGT0xJT19TWU5DXzAwNCc6ICdBUEkgcmVzcG9uc2UgcGFyc2luZyBlcnJvcicsXG4gICAgICAgICAgICAgICAgJ1BPUlRGT0xJT19TWU5DXzAwNSc6ICdOZXR3b3JrIGVycm9yJyxcbiAgICAgICAgICAgICAgICAnUE9SVEZPTElPX1NZTkNfMDA2JzogJ1JhdGUgbGltaXQgZXhjZWVkZWQnXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gZXJyb3JEZXNjcmlwdGlvbnNbY29kZSBhcyBzdHJpbmddIHx8ICdVbmtub3duIGVycm9yJztcbiAgICAgICAgICAgICAgc3luY1RleHQgKz0gYCAg4oCiICR7Y29kZX06ICR7ZGVzY3JpcHRpb259XFxuYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN5bmNUZXh0ICs9IGBcXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzeW5jVGV4dCArPSBg8J+OiSAqKlBlcmZlY3QgU3luYyEqKiBBbGwgZWxlbWVudHMgdXBsb2FkZWQgc3VjY2Vzc2Z1bGx5IVxcblxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIFVYIElNUFJPVkVNRU5UOiBBZGQgbmV4dCBzdGVwcyBhbmQgaGVscGZ1bCBsaW5rc1xuICAgICAgICBpZiAoc3luY0NvdW50ID4gMCkge1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGDwn5qAICoqTmV4dCBTdGVwcyoqOlxcbmA7XG4gICAgICAgICAgc3luY1RleHQgKz0gYCAg4oCiIFZpZXcgeW91ciBwb3J0Zm9saW86IGh0dHBzOi8vZ2l0aHViLmNvbS8ke3VzZXJuYW1lfS9kb2xsaG91c2UtcG9ydGZvbGlvXFxuYDtcbiAgICAgICAgICBzeW5jVGV4dCArPSBgICDigKIgU2hhcmUgaW5kaXZpZHVhbCBlbGVtZW50cyB1c2luZyBcXGBzdWJtaXRfY29udGVudCA8bmFtZT5cXGBcXG5gO1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGAgIOKAoiBLZWVwIHBvcnRmb2xpbyB1cGRhdGVkIHdpdGggXFxgc3luY19wb3J0Zm9saW9cXGAgcmVndWxhcmx5XFxuXFxuYDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgc3luY1RleHQgKz0gYFlvdXIgZWxlbWVudHMgYXJlIG5vdyBhdmFpbGFibGUgb24gR2l0SHViIWA7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBzeW5jVGV4dFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmRpcmVjdGlvbiA9PT0gJ3B1bGwnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pqg77iPIFB1bGwgc3luYyBpcyBjb21pbmcgc29vbi4gQ3VycmVudGx5IG9ubHkgcHVzaCBzeW5jIGlzIHN1cHBvcnRlZC5gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgSW52YWxpZCBzeW5jIGRpcmVjdGlvbi4gVXNlICdwdXNoJywgJ3B1bGwnLCBvciAnYm90aCcuYFxuICAgICAgICB9XVxuICAgICAgfTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBJTVBST1ZFRCBFUlJPUiBIQU5ETElORzogRW5zdXJlIHdlIGFsd2F5cyBoYXZlIGEgbWVhbmluZ2Z1bCBlcnJvciBtZXNzYWdlXG4gICAgICBjb25zdCBzYW5pdGl6ZWRFcnJvciA9IFNlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKTtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHNhbml0aXplZEVycm9yPy5tZXNzYWdlIHx8IChlcnJvciBhcyBhbnkpPy5tZXNzYWdlIHx8IFN0cmluZyhlcnJvcikgfHwgJ1Vua25vd24gZXJyb3Igb2NjdXJyZWQnO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBGYWlsZWQgdG8gc3luYyBwb3J0Zm9saW86ICR7ZXJyb3JNZXNzYWdlfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMgLSBkZWxlZ2F0ZXMgdG8gQ29uZmlnSGFuZGxlclxuICAgKi9cbiAgYXN5bmMgaGFuZGxlQ29uZmlnT3BlcmF0aW9uKG9wdGlvbnM6IGFueSkge1xuICAgIGNvbnN0IHsgQ29uZmlnSGFuZGxlciB9ID0gYXdhaXQgaW1wb3J0KCcuL2hhbmRsZXJzL0NvbmZpZ0hhbmRsZXIuanMnKTtcbiAgICBjb25zdCBoYW5kbGVyID0gbmV3IENvbmZpZ0hhbmRsZXIoKTtcbiAgICByZXR1cm4gaGFuZGxlci5oYW5kbGVDb25maWdPcGVyYXRpb24ob3B0aW9ucywgdGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBzeW5jIG9wZXJhdGlvbnMgLSBkZWxlZ2F0ZXMgdG8gU3luY0hhbmRsZXJcbiAgICovXG4gIGFzeW5jIGhhbmRsZVN5bmNPcGVyYXRpb24ob3B0aW9uczogYW55KSB7XG4gICAgY29uc3QgeyBTeW5jSGFuZGxlciB9ID0gYXdhaXQgaW1wb3J0KCcuL2hhbmRsZXJzL1N5bmNIYW5kbGVyVjIuanMnKTtcbiAgICBjb25zdCBoYW5kbGVyID0gbmV3IFN5bmNIYW5kbGVyKCk7XG4gICAgcmV0dXJuIGhhbmRsZXIuaGFuZGxlU3luY09wZXJhdGlvbihvcHRpb25zLCB0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKSk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIGxvY2FsIHBvcnRmb2xpbyB1c2luZyB0aGUgbWV0YWRhdGEgaW5kZXggc3lzdGVtXG4gICAqIFRoaXMgcHJvdmlkZXMgZmFzdCwgY29tcHJlaGVuc2l2ZSBzZWFyY2ggYWNyb3NzIGFsbCBlbGVtZW50IHR5cGVzXG4gICAqL1xuICBhc3luYyBzZWFyY2hQb3J0Zm9saW8ob3B0aW9uczoge1xuICAgIHF1ZXJ5OiBzdHJpbmc7IFxuICAgIGVsZW1lbnRUeXBlPzogc3RyaW5nOyBcbiAgICBmdXp6eU1hdGNoPzogYm9vbGVhbjsgXG4gICAgbWF4UmVzdWx0cz86IG51bWJlcjsgXG4gICAgaW5jbHVkZUtleXdvcmRzPzogYm9vbGVhbjsgXG4gICAgaW5jbHVkZVRhZ3M/OiBib29sZWFuOyBcbiAgICBpbmNsdWRlVHJpZ2dlcnM/OiBib29sZWFuOyBcbiAgICBpbmNsdWRlRGVzY3JpcHRpb25zPzogYm9vbGVhbjtcbiAgfSkge1xuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSB0aGUgcXVlcnkgcGFyYW1ldGVyXG4gICAgICBpZiAoIW9wdGlvbnMucXVlcnkgfHwgdHlwZW9mIG9wdGlvbnMucXVlcnkgIT09ICdzdHJpbmcnIHx8IG9wdGlvbnMucXVlcnkudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBTZWFyY2ggcXVlcnkgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nLmBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBJbXBvcnQgcG9ydGZvbGlvIGluZGV4IG1hbmFnZXJcbiAgICAgIGNvbnN0IHsgUG9ydGZvbGlvSW5kZXhNYW5hZ2VyIH0gPSBhd2FpdCBpbXBvcnQoJy4vcG9ydGZvbGlvL1BvcnRmb2xpb0luZGV4TWFuYWdlci5qcycpO1xuICAgICAgY29uc3QgaW5kZXhNYW5hZ2VyID0gUG9ydGZvbGlvSW5kZXhNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cbiAgICAgIC8vIFBhcnNlIGVsZW1lbnQgdHlwZSBpZiBwcm92aWRlZFxuICAgICAgbGV0IGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZSB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChvcHRpb25zLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkVHlwZXMgPSBbJ3BlcnNvbmFzJywgJ3NraWxscycsICd0ZW1wbGF0ZXMnLCAnYWdlbnRzJywgJ21lbW9yaWVzJywgJ2Vuc2VtYmxlcyddO1xuICAgICAgICBpZiAoIXZhbGlkVHlwZXMuaW5jbHVkZXMob3B0aW9ucy5lbGVtZW50VHlwZSkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBJbnZhbGlkIGVsZW1lbnQgdHlwZS4gVmFsaWQgdHlwZXM6ICR7dmFsaWRUeXBlcy5qb2luKCcsICcpfWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50VHlwZSA9IG9wdGlvbnMuZWxlbWVudFR5cGUgYXMgRWxlbWVudFR5cGU7XG4gICAgICB9XG5cbiAgICAgIC8vIEJ1aWxkIHNlYXJjaCBvcHRpb25zXG4gICAgICBjb25zdCBzZWFyY2hPcHRpb25zID0ge1xuICAgICAgICBlbGVtZW50VHlwZSxcbiAgICAgICAgZnV6enlNYXRjaDogb3B0aW9ucy5mdXp6eU1hdGNoICE9PSBmYWxzZSwgLy8gRGVmYXVsdCB0byB0cnVlXG4gICAgICAgIG1heFJlc3VsdHM6IG9wdGlvbnMubWF4UmVzdWx0cyB8fCAyMCxcbiAgICAgICAgaW5jbHVkZUtleXdvcmRzOiBvcHRpb25zLmluY2x1ZGVLZXl3b3JkcyAhPT0gZmFsc2UsXG4gICAgICAgIGluY2x1ZGVUYWdzOiBvcHRpb25zLmluY2x1ZGVUYWdzICE9PSBmYWxzZSxcbiAgICAgICAgaW5jbHVkZVRyaWdnZXJzOiBvcHRpb25zLmluY2x1ZGVUcmlnZ2VycyAhPT0gZmFsc2UsXG4gICAgICAgIGluY2x1ZGVEZXNjcmlwdGlvbnM6IG9wdGlvbnMuaW5jbHVkZURlc2NyaXB0aW9ucyAhPT0gZmFsc2VcbiAgICAgIH07XG5cbiAgICAgIC8vIFBlcmZvcm0gdGhlIHNlYXJjaFxuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IGluZGV4TWFuYWdlci5zZWFyY2gob3B0aW9ucy5xdWVyeSwgc2VhcmNoT3B0aW9ucyk7XG5cbiAgICAgIC8vIEZvcm1hdCB0aGUgcmVzdWx0c1xuICAgICAgbGV0IHRleHQgPSBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5SNICoqUG9ydGZvbGlvIFNlYXJjaCBSZXN1bHRzKipcXG5cXG5gO1xuICAgICAgdGV4dCArPSBgKipRdWVyeSoqOiBcIiR7b3B0aW9ucy5xdWVyeX1cIlxcbmA7XG4gICAgICBcbiAgICAgIGlmIChlbGVtZW50VHlwZSkge1xuICAgICAgICB0ZXh0ICs9IGAqKlR5cGUgRmlsdGVyKio6ICR7ZWxlbWVudFR5cGV9XFxuYDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGV4dCArPSBgKipGb3VuZCoqOiAke3Jlc3VsdHMubGVuZ3RofSBlbGVtZW50JHtyZXN1bHRzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ3MnfVxcblxcbmA7XG5cbiAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0ZXh0ICs9IGBObyBlbGVtZW50cyBmb3VuZCBtYXRjaGluZyB5b3VyIHNlYXJjaCBjcml0ZXJpYS5cXG5cXG5gO1xuICAgICAgICB0ZXh0ICs9IGAqKlRpcHMgZm9yIGJldHRlciByZXN1bHRzOioqXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFRyeSBkaWZmZXJlbnQga2V5d29yZHMgb3IgcGFydGlhbCBuYW1lc1xcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBSZW1vdmUgdGhlIHR5cGUgZmlsdGVyIHRvIHNlYXJjaCBhbGwgZWxlbWVudCB0eXBlc1xcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBDaGVjayBzcGVsbGluZyBhbmQgdHJ5IHN5bm9ueW1zXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFVzZSB0aGUgbGlzdF9lbGVtZW50cyB0b29sIHRvIHNlZSBhbGwgYXZhaWxhYmxlIGNvbnRlbnRgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dCArPSBgKipSZXN1bHRzOioqXFxuXFxuYDtcbiAgICAgICAgXG4gICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgICBjb25zdCB7IGVudHJ5LCBtYXRjaFR5cGUgfSA9IHJlc3VsdDtcbiAgICAgICAgICBjb25zdCBpY29uID0gdGhpcy5nZXRFbGVtZW50SWNvbihlbnRyeS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgXG4gICAgICAgICAgdGV4dCArPSBgJHtpY29ufSAqKiR7ZW50cnkubWV0YWRhdGEubmFtZX0qKlxcbmA7XG4gICAgICAgICAgdGV4dCArPSBgICAg8J+TgSBUeXBlOiAke2VudHJ5LmVsZW1lbnRUeXBlfVxcbmA7XG4gICAgICAgICAgdGV4dCArPSBgICAg8J+OryBNYXRjaDogJHttYXRjaFR5cGV9XFxuYDtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoZW50cnkubWV0YWRhdGEuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGRlc2MgPSBlbnRyeS5tZXRhZGF0YS5kZXNjcmlwdGlvbi5sZW5ndGggPiAxMDAgXG4gICAgICAgICAgICAgID8gZW50cnkubWV0YWRhdGEuZGVzY3JpcHRpb24uc3Vic3RyaW5nKDAsIDEwMCkgKyAnLi4uJ1xuICAgICAgICAgICAgICA6IGVudHJ5Lm1ldGFkYXRhLmRlc2NyaXB0aW9uO1xuICAgICAgICAgICAgdGV4dCArPSBgICAg8J+TnSAke2Rlc2N9XFxuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKGVudHJ5Lm1ldGFkYXRhLnRhZ3MgJiYgZW50cnkubWV0YWRhdGEudGFncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0ZXh0ICs9IGAgICDwn4+377iPIFRhZ3M6ICR7ZW50cnkubWV0YWRhdGEudGFncy5zbGljZSgwLCA1KS5qb2luKCcsICcpfSR7ZW50cnkubWV0YWRhdGEudGFncy5sZW5ndGggPiA1ID8gJy4uLicgOiAnJ31cXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICB0ZXh0ICs9IGAgICDwn5OEIEZpbGU6ICR7ZW50cnkuZmlsZW5hbWV9Lm1kXFxuXFxuYDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoID49IHNlYXJjaE9wdGlvbnMubWF4UmVzdWx0cykge1xuICAgICAgICAgIHRleHQgKz0gYOKaoO+4jyBSZXN1bHRzIGxpbWl0ZWQgdG8gJHtzZWFyY2hPcHRpb25zLm1heFJlc3VsdHN9LiBSZWZpbmUgeW91ciBzZWFyY2ggZm9yIG1vcmUgc3BlY2lmaWMgcmVzdWx0cy5cXG5cXG5gO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0ZXh0ICs9IGDwn5KhICoqTmV4dCBzdGVwczoqKlxcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBVc2UgZ2V0X2VsZW1lbnRfZGV0YWlscyB0byBzZWUgZnVsbCBjb250ZW50XFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFVzZSBhY3RpdmF0ZV9lbGVtZW50IHRvIGFjdGl2YXRlIGVsZW1lbnRzXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFVzZSBzdWJtaXRfY29udGVudCB0byBzaGFyZSB3aXRoIHRoZSBjb21tdW5pdHlgO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHRcbiAgICAgICAgfV1cbiAgICAgIH07XG5cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5zZWFyY2hQb3J0Zm9saW8nLCBlcnJvciwgeyBcbiAgICAgICAgcXVlcnk6IG9wdGlvbnMucXVlcnksXG4gICAgICAgIGVsZW1lbnRUeXBlOiBvcHRpb25zLmVsZW1lbnRUeXBlIFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsIFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBTZWFyY2ggZmFpbGVkOiAke1NlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKS5tZXNzYWdlfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCBhY3Jvc3MgYWxsIHNvdXJjZXMgKGxvY2FsLCBHaXRIdWIsIGNvbGxlY3Rpb24pIHVzaW5nIFVuaWZpZWRJbmRleE1hbmFnZXJcbiAgICogVGhpcyBwcm92aWRlcyBjb21wcmVoZW5zaXZlIHNlYXJjaCB3aXRoIGR1cGxpY2F0ZSBkZXRlY3Rpb24gYW5kIHZlcnNpb24gY29tcGFyaXNvblxuICAgKi9cbiAgYXN5bmMgc2VhcmNoQWxsKG9wdGlvbnM6IHtcbiAgICBxdWVyeTogc3RyaW5nO1xuICAgIHNvdXJjZXM/OiBzdHJpbmdbXTtcbiAgICBlbGVtZW50VHlwZT86IHN0cmluZztcbiAgICBwYWdlPzogbnVtYmVyO1xuICAgIHBhZ2VTaXplPzogbnVtYmVyO1xuICAgIHNvcnRCeT86IHN0cmluZztcbiAgfSkge1xuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSB0aGUgcXVlcnkgcGFyYW1ldGVyXG4gICAgICBpZiAoIW9wdGlvbnMucXVlcnkgfHwgdHlwZW9mIG9wdGlvbnMucXVlcnkgIT09ICdzdHJpbmcnIHx8IG9wdGlvbnMucXVlcnkudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBTZWFyY2ggcXVlcnkgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nLmBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBJbXBvcnQgdW5pZmllZCBpbmRleCBtYW5hZ2VyXG4gICAgICBjb25zdCB7IFVuaWZpZWRJbmRleE1hbmFnZXIgfSA9IGF3YWl0IGltcG9ydCgnLi9wb3J0Zm9saW8vVW5pZmllZEluZGV4TWFuYWdlci5qcycpO1xuICAgICAgY29uc3QgeyBFbGVtZW50VHlwZSB9ID0gYXdhaXQgaW1wb3J0KCcuL3BvcnRmb2xpby90eXBlcy5qcycpO1xuICAgICAgY29uc3QgdW5pZmllZE1hbmFnZXIgPSBVbmlmaWVkSW5kZXhNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cbiAgICAgIC8vIFBhcnNlIGVsZW1lbnQgdHlwZSBpZiBwcm92aWRlZFxuICAgICAgbGV0IGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZSB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChvcHRpb25zLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkVHlwZXMgPSBbJ3BlcnNvbmFzJywgJ3NraWxscycsICd0ZW1wbGF0ZXMnLCAnYWdlbnRzJywgJ21lbW9yaWVzJywgJ2Vuc2VtYmxlcyddO1xuICAgICAgICBpZiAoIXZhbGlkVHlwZXMuaW5jbHVkZXMob3B0aW9ucy5lbGVtZW50VHlwZSkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBJbnZhbGlkIGVsZW1lbnQgdHlwZS4gVmFsaWQgdHlwZXM6ICR7dmFsaWRUeXBlcy5qb2luKCcsICcpfWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50VHlwZSA9IG9wdGlvbnMuZWxlbWVudFR5cGUgYXMgRWxlbWVudFR5cGU7XG4gICAgICB9XG5cbiAgICAgIC8vIFBhcnNlIHNvdXJjZXMgKGRlZmF1bHQgdG8gbG9jYWwgYW5kIGdpdGh1YilcbiAgICAgIGNvbnN0IHNvdXJjZXMgPSBvcHRpb25zLnNvdXJjZXMgfHwgWydsb2NhbCcsICdnaXRodWInXTtcbiAgICAgIGNvbnN0IGluY2x1ZGVMb2NhbCA9IHNvdXJjZXMuaW5jbHVkZXMoJ2xvY2FsJyk7XG4gICAgICBjb25zdCBpbmNsdWRlR2l0SHViID0gc291cmNlcy5pbmNsdWRlcygnZ2l0aHViJyk7XG4gICAgICBjb25zdCBpbmNsdWRlQ29sbGVjdGlvbiA9IHNvdXJjZXMuaW5jbHVkZXMoJ2NvbGxlY3Rpb24nKTtcblxuICAgICAgLy8gQnVpbGQgc2VhcmNoIG9wdGlvbnNcbiAgICAgIGNvbnN0IHNlYXJjaE9wdGlvbnMgPSB7XG4gICAgICAgIHF1ZXJ5OiBvcHRpb25zLnF1ZXJ5LFxuICAgICAgICBpbmNsdWRlTG9jYWwsXG4gICAgICAgIGluY2x1ZGVHaXRIdWIsXG4gICAgICAgIGluY2x1ZGVDb2xsZWN0aW9uLFxuICAgICAgICBlbGVtZW50VHlwZSxcbiAgICAgICAgcGFnZTogb3B0aW9ucy5wYWdlIHx8IDEsXG4gICAgICAgIHBhZ2VTaXplOiBvcHRpb25zLnBhZ2VTaXplIHx8IDIwLFxuICAgICAgICBzb3J0Qnk6IChvcHRpb25zLnNvcnRCeSBhcyBhbnkpIHx8ICdyZWxldmFuY2UnXG4gICAgICB9O1xuXG4gICAgICAvLyBQZXJmb3JtIHRoZSB1bmlmaWVkIHNlYXJjaFxuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHVuaWZpZWRNYW5hZ2VyLnNlYXJjaChzZWFyY2hPcHRpb25zKTtcblxuICAgICAgLy8gRm9ybWF0IHRoZSByZXN1bHRzXG4gICAgICBsZXQgdGV4dCA9IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCflI0gKipVbmlmaWVkIFNlYXJjaCBSZXN1bHRzKipcXG5cXG5gO1xuICAgICAgdGV4dCArPSBgKipRdWVyeSoqOiBcIiR7b3B0aW9ucy5xdWVyeX1cIlxcbmA7XG4gICAgICB0ZXh0ICs9IGAqKlNvdXJjZXMqKjogJHtzb3VyY2VzLmpvaW4oJywgJyl9XFxuYDtcbiAgICAgIFxuICAgICAgaWYgKGVsZW1lbnRUeXBlKSB7XG4gICAgICAgIHRleHQgKz0gYCoqVHlwZSBGaWx0ZXIqKjogJHtlbGVtZW50VHlwZX1cXG5gO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0ZXh0ICs9IGAqKkZvdW5kKio6ICR7cmVzdWx0cy5sZW5ndGh9IGVsZW1lbnQke3Jlc3VsdHMubGVuZ3RoID09PSAxID8gJycgOiAncyd9XFxuXFxuYDtcblxuICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRleHQgKz0gYE5vIGVsZW1lbnRzIGZvdW5kIG1hdGNoaW5nIHlvdXIgc2VhcmNoIGNyaXRlcmlhLlxcblxcbmA7XG4gICAgICAgIHRleHQgKz0gYCoqVGlwcyBmb3IgYmV0dGVyIHJlc3VsdHM6KipcXG5gO1xuICAgICAgICB0ZXh0ICs9IGDigKIgVHJ5IGRpZmZlcmVudCBrZXl3b3JkcyBvciBwYXJ0aWFsIG5hbWVzXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFJlbW92ZSB0aGUgdHlwZSBmaWx0ZXIgdG8gc2VhcmNoIGFsbCBlbGVtZW50IHR5cGVzXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIEluY2x1ZGUgbW9yZSBzb3VyY2VzOiBsb2NhbCwgZ2l0aHViLCBjb2xsZWN0aW9uXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIENoZWNrIHNwZWxsaW5nIGFuZCB0cnkgc3lub255bXNcXG5gO1xuICAgICAgICB0ZXh0ICs9IGDigKIgVXNlIGJyb3dzZV9jb2xsZWN0aW9uIHRvIGV4cGxvcmUgYXZhaWxhYmxlIGNvbnRlbnRgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dCArPSBgKipSZXN1bHRzOioqXFxuXFxuYDtcbiAgICAgICAgXG4gICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgICBjb25zdCB7IGVudHJ5LCBzb3VyY2UsIG1hdGNoVHlwZSwgc2NvcmUsIGlzRHVwbGljYXRlLCB2ZXJzaW9uQ29uZmxpY3QgfSA9IHJlc3VsdDtcbiAgICAgICAgICBjb25zdCBpY29uID0gdGhpcy5nZXRFbGVtZW50SWNvbihlbnRyeS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgY29uc3Qgc291cmNlSWNvbiA9IHRoaXMuZ2V0U291cmNlSWNvbihzb3VyY2UpO1xuICAgICAgICAgIFxuICAgICAgICAgIHRleHQgKz0gYCR7aWNvbn0gKioke2VudHJ5Lm5hbWV9KiogJHtzb3VyY2VJY29ufVxcbmA7XG4gICAgICAgICAgdGV4dCArPSBgICAg8J+TgSBUeXBlOiAke2VudHJ5LmVsZW1lbnRUeXBlfSB8IFNvdXJjZTogJHtzb3VyY2V9XFxuYDtcbiAgICAgICAgICB0ZXh0ICs9IGAgICDwn46vIE1hdGNoOiAke21hdGNoVHlwZX0gfCBTY29yZTogJHtzY29yZS50b0ZpeGVkKDIpfVxcbmA7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKGVudHJ5LmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBkZXNjID0gZW50cnkuZGVzY3JpcHRpb24ubGVuZ3RoID4gMTAwIFxuICAgICAgICAgICAgICA/IGVudHJ5LmRlc2NyaXB0aW9uLnN1YnN0cmluZygwLCAxMDApICsgJy4uLidcbiAgICAgICAgICAgICAgOiBlbnRyeS5kZXNjcmlwdGlvbjtcbiAgICAgICAgICAgIHRleHQgKz0gYCAgIPCfk50gJHtkZXNjfVxcbmA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGVudHJ5LnZlcnNpb24pIHtcbiAgICAgICAgICAgIHRleHQgKz0gYCAgIPCfj7fvuI8gVmVyc2lvbjogJHtlbnRyeS52ZXJzaW9ufVxcbmA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU2hvdyBkdXBsaWNhdGUgaW5mb3JtYXRpb25cbiAgICAgICAgICBpZiAoaXNEdXBsaWNhdGUpIHtcbiAgICAgICAgICAgIHRleHQgKz0gYCAgIOKaoO+4jyAqKkR1cGxpY2F0ZSBkZXRlY3RlZCBhY3Jvc3Mgc291cmNlcyoqXFxuYDtcbiAgICAgICAgICAgIGlmICh2ZXJzaW9uQ29uZmxpY3QpIHtcbiAgICAgICAgICAgICAgdGV4dCArPSBgICAg8J+UhCBWZXJzaW9uIGNvbmZsaWN0IC0gUmVjb21tZW5kZWQ6ICR7dmVyc2lvbkNvbmZsaWN0LnJlY29tbWVuZGVkfSAoJHt2ZXJzaW9uQ29uZmxpY3QucmVhc29ufSlcXG5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICB0ZXh0ICs9IGBcXG5gO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCBoYXNNb3JlID0gcmVzdWx0cy5sZW5ndGggPj0gc2VhcmNoT3B0aW9ucy5wYWdlU2l6ZTtcbiAgICAgICAgaWYgKGhhc01vcmUpIHtcbiAgICAgICAgICBjb25zdCBuZXh0UGFnZSA9IHNlYXJjaE9wdGlvbnMucGFnZSArIDE7XG4gICAgICAgICAgdGV4dCArPSBg4pqg77iPIFJlc3VsdHMgbGltaXRlZCB0byAke3NlYXJjaE9wdGlvbnMucGFnZVNpemV9LiBVc2UgcGFnZT0ke25leHRQYWdlfSBmb3IgbW9yZSByZXN1bHRzLlxcblxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHRleHQgKz0gYPCfkqEgKipOZXh0IHN0ZXBzOioqXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFVzZSBnZXRfZWxlbWVudF9kZXRhaWxzIHRvIHNlZSBmdWxsIGNvbnRlbnRcXG5gO1xuICAgICAgICB0ZXh0ICs9IGDigKIgVXNlIGluc3RhbGxfY29udGVudCBmb3IgY29sbGVjdGlvbiBpdGVtc1xcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBVc2UgYWN0aXZhdGVfZWxlbWVudCBmb3IgbG9jYWwgZWxlbWVudHNcXG5gO1xuICAgICAgICB0ZXh0ICs9IGDigKIgQ2hlY2sgZm9yIGR1cGxpY2F0ZXMgYmVmb3JlIHN1Ym1pdHRpbmcgbmV3IGNvbnRlbnRgO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHRcbiAgICAgICAgfV1cbiAgICAgIH07XG5cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zdCB7IEVycm9ySGFuZGxlciB9ID0gYXdhaXQgaW1wb3J0KCcuL3V0aWxzL0Vycm9ySGFuZGxlci5qcycpO1xuICAgICAgY29uc3QgeyBTZWN1cmVFcnJvckhhbmRsZXIgfSA9IGF3YWl0IGltcG9ydCgnLi9zZWN1cml0eS9lcnJvckhhbmRsZXIuanMnKTtcbiAgICAgIFxuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIuc2VhcmNoQWxsJywgZXJyb3IsIHsgXG4gICAgICAgIHF1ZXJ5OiBvcHRpb25zLnF1ZXJ5LFxuICAgICAgICBzb3VyY2VzOiBvcHRpb25zLnNvdXJjZXMsXG4gICAgICAgIGVsZW1lbnRUeXBlOiBvcHRpb25zLmVsZW1lbnRUeXBlIFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsIFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBVbmlmaWVkIHNlYXJjaCBmYWlsZWQ6ICR7U2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpLm1lc3NhZ2V9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGljb24gZm9yIHNvdXJjZSB0eXBlXG4gICAqL1xuICBwcml2YXRlIGdldFNvdXJjZUljb24oc291cmNlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGljb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgbG9jYWw6ICfwn5K7JyxcbiAgICAgIGdpdGh1YjogJ/CfkJknLFxuICAgICAgY29sbGVjdGlvbjogJ/CfjJAnXG4gICAgfTtcbiAgICByZXR1cm4gaWNvbnNbc291cmNlXSB8fCAn8J+TgSc7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGljb24gZm9yIGVsZW1lbnQgdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRFbGVtZW50SWNvbihlbGVtZW50VHlwZTogRWxlbWVudFR5cGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IGljb25zID0ge1xuICAgICAgcGVyc29uYXM6ICfwn46tJyxcbiAgICAgIHNraWxsczogJ/Cfjq8nLFxuICAgICAgdGVtcGxhdGVzOiAn8J+ThCcsXG4gICAgICBhZ2VudHM6ICfwn6SWJyxcbiAgICAgIG1lbW9yaWVzOiAn8J+noCcsXG4gICAgICBlbnNlbWJsZXM6ICfwn468J1xuICAgIH07XG4gICAgcmV0dXJuIGljb25zW2VsZW1lbnRUeXBlXSB8fCAn8J+TgSc7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCB0byBjb3VudCBlbGVtZW50cyBpbiBhIGRpcmVjdG9yeVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjb3VudEVsZW1lbnRzSW5EaXIoZGlyUGF0aDogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICB0cnkge1xuICAgICAgLy8gQ2hlY2sgaWYgZGlyZWN0b3J5IGV4aXN0cyBhbmQgaXMgYWNjZXNzaWJsZVxuICAgICAgYXdhaXQgZnMuYWNjZXNzKGRpclBhdGgpO1xuICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKGRpclBhdGgpO1xuICAgICAgXG4gICAgICAvLyBDb3VudCBhbGwgZWxlbWVudCBmaWxlcyAoLm1kLCAuanNvbiwgLnlhbWwpIHRvIHN1cHBvcnQgYWxsIGVsZW1lbnQgdHlwZXNcbiAgICAgIC8vIC0gUGVyc29uYXM6IC5tZCBmaWxlc1xuICAgICAgLy8gLSBTa2lsbHM6IC5tZCBmaWxlcyAgXG4gICAgICAvLyAtIFRlbXBsYXRlczogLm1kIG9yIC55YW1sIGZpbGVzXG4gICAgICAvLyAtIEFnZW50czogLm1kIGZpbGVzXG4gICAgICByZXR1cm4gZmlsZXMuZmlsdGVyKGZpbGUgPT4gXG4gICAgICAgIGZpbGUuZW5kc1dpdGgoJy5tZCcpIHx8IFxuICAgICAgICBmaWxlLmVuZHNXaXRoKCcuanNvbicpIHx8IFxuICAgICAgICBmaWxlLmVuZHNXaXRoKCcueWFtbCcpXG4gICAgICApLmxlbmd0aDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgdG8gZ2V0IGxpc3Qgb2YgZWxlbWVudHMgYnkgdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRFbGVtZW50c0xpc3QoZWxlbWVudFR5cGU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbG9jYWxQb3J0Zm9saW9NYW5hZ2VyID0gUG9ydGZvbGlvTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgICAgbGV0IGVsZW1lbnRUeXBlRW51bTogRWxlbWVudFR5cGU7XG4gICAgICBcbiAgICAgIHN3aXRjaCAoZWxlbWVudFR5cGUpIHtcbiAgICAgICAgY2FzZSAncGVyc29uYXMnOlxuICAgICAgICAgIGVsZW1lbnRUeXBlRW51bSA9IEVsZW1lbnRUeXBlLlBFUlNPTkE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3NraWxscyc6XG4gICAgICAgICAgZWxlbWVudFR5cGVFbnVtID0gRWxlbWVudFR5cGUuU0tJTEw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RlbXBsYXRlcyc6XG4gICAgICAgICAgZWxlbWVudFR5cGVFbnVtID0gRWxlbWVudFR5cGUuVEVNUExBVEU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2FnZW50cyc6XG4gICAgICAgICAgZWxlbWVudFR5cGVFbnVtID0gRWxlbWVudFR5cGUuQUdFTlQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gSW5zdGVhZCBvZiBzaWxlbnRseSByZXR1cm5pbmcgZW1wdHkgYXJyYXksIHRocm93IGRlc2NyaXB0aXZlIGVycm9yXG4gICAgICAgICAgY29uc3QgdmFsaWRUeXBlcyA9IFsncGVyc29uYXMnLCAnc2tpbGxzJywgJ3RlbXBsYXRlcycsICdhZ2VudHMnXTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZWxlbWVudCB0eXBlOiAnJHtlbGVtZW50VHlwZX0nLiBWYWxpZCB0eXBlcyBhcmU6ICR7dmFsaWRUeXBlcy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkaXJQYXRoID0gbG9jYWxQb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoZWxlbWVudFR5cGVFbnVtKTtcbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgaWYgZGlyZWN0b3J5IGV4aXN0cyBhbmQgaXMgYWNjZXNzaWJsZVxuICAgICAgYXdhaXQgZnMuYWNjZXNzKGRpclBhdGgpO1xuICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKGRpclBhdGgpO1xuICAgICAgXG4gICAgICAvLyBGaWx0ZXIgYW5kIGV4dHJhY3QgbmFtZXMgZm9yIGFsbCBlbGVtZW50IGZpbGUgdHlwZXNcbiAgICAgIC8vIC0gUGVyc29uYXM6IC5tZCBmaWxlc1xuICAgICAgLy8gLSBTa2lsbHM6IC5tZCBmaWxlcyAgXG4gICAgICAvLyAtIFRlbXBsYXRlczogLm1kIG9yIC55YW1sIGZpbGVzXG4gICAgICAvLyAtIEFnZW50czogLm1kIGZpbGVzXG4gICAgICByZXR1cm4gZmlsZXNcbiAgICAgICAgLmZpbHRlcihmaWxlID0+IGZpbGUuZW5kc1dpdGgoJy5tZCcpIHx8IGZpbGUuZW5kc1dpdGgoJy5qc29uJykgfHwgZmlsZS5lbmRzV2l0aCgnLnlhbWwnKSlcbiAgICAgICAgLm1hcChmaWxlID0+IHtcbiAgICAgICAgICAvLyBSZW1vdmUgZmlsZSBleHRlbnNpb24gdG8gZ2V0IGVsZW1lbnQgbmFtZVxuICAgICAgICAgIGlmIChmaWxlLmVuZHNXaXRoKCcubWQnKSkgcmV0dXJuIGZpbGUucmVwbGFjZSgnLm1kJywgJycpO1xuICAgICAgICAgIGlmIChmaWxlLmVuZHNXaXRoKCcuanNvbicpKSByZXR1cm4gZmlsZS5yZXBsYWNlKCcuanNvbicsICcnKTtcbiAgICAgICAgICBpZiAoZmlsZS5lbmRzV2l0aCgnLnlhbWwnKSkgcmV0dXJuIGZpbGUucmVwbGFjZSgnLnlhbWwnLCAnJyk7XG4gICAgICAgICAgcmV0dXJuIGZpbGU7XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgb3VyIHZhbGlkYXRpb24gZXJyb3IgZm9yIGludmFsaWQgZWxlbWVudCB0eXBlc1xuICAgICAgaWYgKGVycm9yLm1lc3NhZ2UgJiYgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnSW52YWxpZCBlbGVtZW50IHR5cGU6JykpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7IC8vIFJlLXRocm93IHZhbGlkYXRpb24gZXJyb3JzIGZvciBkZWJ1Z2dpbmdcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRm9yIGZpbGUgc3lzdGVtIGVycm9ycywgcHJvdmlkZSBjb250ZXh0IGFib3V0IHRoZSBvcGVyYXRpb25cbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yLmNvZGUgPT09ICdFTk9FTlQnIFxuICAgICAgICA/IGBFbGVtZW50IGRpcmVjdG9yeSBub3QgZm91bmQgZm9yIHR5cGUgJyR7ZWxlbWVudFR5cGV9Jy4gRGlyZWN0b3J5IG1heSBub3QgZXhpc3QgeWV0LmBcbiAgICAgICAgOiBgRmFpbGVkIHRvIHJlYWQgZWxlbWVudHMgZGlyZWN0b3J5IGZvciB0eXBlICcke2VsZW1lbnRUeXBlfSc6ICR7ZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBmaWxlIHN5c3RlbSBlcnJvcid9YDtcbiAgICAgIFxuICAgICAgbG9nZ2VyLndhcm4oJ0Vycm9yIGluIGdldEVsZW1lbnRzTGlzdCcsIHsgXG4gICAgICAgIGVsZW1lbnRUeXBlLCBcbiAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UsIFxuICAgICAgICBjb2RlOiBlcnJvci5jb2RlIFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIHRvIGxvYWQgZWxlbWVudCBieSB0eXBlXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHdpdGggY29udGVudCwgZmlsZW5hbWUsIGFuZCB0eXBlIHByb3BlcnRpZXNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbG9hZEVsZW1lbnRCeVR5cGUoZWxlbWVudE5hbWU6IHN0cmluZywgZWxlbWVudFR5cGU6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgLy8gU0VDVVJJVFk6IFNhbml0aXplIGVsZW1lbnROYW1lIGVhcmx5IHRvIHVzZSBpbiBlcnJvciBtZXNzYWdlcyB0b29cbiAgICBjb25zdCBzYW5pdGl6ZWROYW1lID0gcGF0aC5iYXNlbmFtZShlbGVtZW50TmFtZSk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxvY2FsUG9ydGZvbGlvTWFuYWdlciA9IFBvcnRmb2xpb01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgIGxldCBlbGVtZW50VHlwZUVudW06IEVsZW1lbnRUeXBlO1xuICAgICAgXG4gICAgICBzd2l0Y2ggKGVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgJ3BlcnNvbmFzJzpcbiAgICAgICAgICBlbGVtZW50VHlwZUVudW0gPSBFbGVtZW50VHlwZS5QRVJTT05BO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdza2lsbHMnOlxuICAgICAgICAgIGVsZW1lbnRUeXBlRW51bSA9IEVsZW1lbnRUeXBlLlNLSUxMO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0ZW1wbGF0ZXMnOlxuICAgICAgICAgIGVsZW1lbnRUeXBlRW51bSA9IEVsZW1lbnRUeXBlLlRFTVBMQVRFO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdhZ2VudHMnOlxuICAgICAgICAgIGVsZW1lbnRUeXBlRW51bSA9IEVsZW1lbnRUeXBlLkFHRU5UO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIEluc3RlYWQgb2Ygc2lsZW50bHkgcmV0dXJuaW5nIG51bGwsIHRocm93IGRlc2NyaXB0aXZlIGVycm9yXG4gICAgICAgICAgY29uc3QgdmFsaWRUeXBlcyA9IFsncGVyc29uYXMnLCAnc2tpbGxzJywgJ3RlbXBsYXRlcycsICdhZ2VudHMnXTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZWxlbWVudCB0eXBlOiAnJHtlbGVtZW50VHlwZX0nLiBWYWxpZCB0eXBlcyBhcmU6ICR7dmFsaWRUeXBlcy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkaXJQYXRoID0gbG9jYWxQb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoZWxlbWVudFR5cGVFbnVtKTtcbiAgICAgIFxuICAgICAgLy8gRklYOiBDaGVjayBmb3IgYWN0dWFsIGZpbGUgZXh0ZW5zaW9ucyB1c2VkIGJ5IGVsZW1lbnRzICgubWQsIC5qc29uLCAueWFtbClcbiAgICAgIC8vIEVsZW1lbnRzIGFyZSBzdG9yZWQgYXMgbWFya2Rvd24gZmlsZXMgd2l0aCBZQU1MIGZyb250bWF0dGVyLCBub3QgSlNPTiBmaWxlc1xuICAgICAgLy8gUHJpb3JpdHkgb3JkZXI6IC5tZCAocHJpbWFyeSBmb3JtYXQpLCAuanNvbiAobGVnYWN5KSwgLnlhbWwvLnltbCAoY29uZmlnKVxuICAgICAgY29uc3QgZXh0ZW5zaW9ucyA9IFsnLm1kJywgJy5qc29uJywgJy55YW1sJywgJy55bWwnXTtcbiAgICAgIGxldCBjb250ZW50OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICAgIGxldCBmb3VuZEZpbGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgICAgXG4gICAgICAvLyBEZWZpbmUgcmVhc29uYWJsZSBmaWxlIHNpemUgbGltaXQgKDEwTUIpXG4gICAgICBjb25zdCBNQVhfRklMRV9TSVpFID0gMTAgKiAxMDI0ICogMTAyNDsgLy8gMTBNQlxuICAgICAgXG4gICAgICBmb3IgKGNvbnN0IGV4dCBvZiBleHRlbnNpb25zKSB7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGRpclBhdGgsIGAke3Nhbml0aXplZE5hbWV9JHtleHR9YCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gQ2hlY2sgZmlsZSBzaXplIGJlZm9yZSByZWFkaW5nIHRvIHByZXZlbnQgbWVtb3J5IGlzc3Vlc1xuICAgICAgICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgZnMuc3RhdChmaWxlUGF0aCk7XG4gICAgICAgICAgaWYgKHN0YXRzLnNpemUgPiBNQVhfRklMRV9TSVpFKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgc2l6ZSBleGNlZWRzIGxpbWl0IG9mIDEwTUI6ICR7c3RhdHMuc2l6ZX0gYnl0ZXNgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgY29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGVQYXRoLCAndXRmLTgnKTtcbiAgICAgICAgICBmb3VuZEZpbGUgPSBmaWxlUGF0aDtcbiAgICAgICAgICBicmVhazsgLy8gRm91bmQgdGhlIGZpbGUsIHN0b3Agc2VhcmNoaW5nXG4gICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgICAgLy8gRmlsZSBkb2Vzbid0IGV4aXN0IHdpdGggdGhpcyBleHRlbnNpb24sIHRyeSB0aGUgbmV4dCBvbmVcbiAgICAgICAgICBpZiAoZXJyLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7IC8vIFJlLXRocm93IG5vbi1maWxlLW5vdC1mb3VuZCBlcnJvcnNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRklYOiBPbmx5IGNoZWNrIGZvdW5kRmlsZSwgbm90IGNvbnRlbnQgKGVtcHR5IGZpbGVzIGFyZSB2YWxpZClcbiAgICAgIGlmICghZm91bmRGaWxlKSB7XG4gICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGBGaWxlIG5vdCBmb3VuZGApLCB7IGNvZGU6ICdFTk9FTlQnIH0pO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBSZXR1cm4gYSBtaW5pbWFsIElFbGVtZW50LWxpa2Ugb2JqZWN0IHRoYXQgcG9ydGZvbGlvTWFuYWdlci5zYXZlRWxlbWVudCBjYW4gaGFuZGxlXG4gICAgICAvLyBUaGlzIHByZXNlcnZlcyB0aGUgcmF3IG1hcmtkb3duIGNvbnRlbnQgZm9yIHN5bmNpbmcgdG8gR2l0SHViXG4gICAgICByZXR1cm4ge1xuICAgICAgICAvLyBJRWxlbWVudCByZXF1aXJlZCBwcm9wZXJ0aWVzXG4gICAgICAgIGlkOiBgJHtlbGVtZW50VHlwZX1fJHtzYW5pdGl6ZWROYW1lfV8ke0RhdGUubm93KCl9YCxcbiAgICAgICAgdHlwZTogZWxlbWVudFR5cGVFbnVtLFxuICAgICAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIG5hbWU6IHNhbml0aXplZE5hbWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGBMb2FkZWQgZnJvbSAke3BhdGguYmFzZW5hbWUoZm91bmRGaWxlKX1gLFxuICAgICAgICAgIGF1dGhvcjogJ3Vua25vd24nLFxuICAgICAgICAgIGNyZWF0ZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICBtb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIHRhZ3M6IFtdXG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvLyBJRWxlbWVudCByZXF1aXJlZCBtZXRob2RzIChtaW5pbWFsIGltcGxlbWVudGF0aW9ucyBmb3Igc3luYylcbiAgICAgICAgdmFsaWRhdGU6ICgpID0+ICh7IFxuICAgICAgICAgIGlzVmFsaWQ6IHRydWUsIFxuICAgICAgICAgIGVycm9yczogW10gYXMgYW55W10sIFxuICAgICAgICAgIHdhcm5pbmdzOiBbXSBhcyBhbnlbXSBcbiAgICAgICAgfSksXG4gICAgICAgIHNlcmlhbGl6ZTogKCkgPT4gY29udGVudCB8fCAnJyxcbiAgICAgICAgZGVzZXJpYWxpemU6ICgpID0+IHsgLyogbm8tb3AgKi8gfSxcbiAgICAgICAgZ2V0U3RhdHVzOiAoKSA9PiAoeyBzdGF0dXM6ICdhY3RpdmUnIGFzIGNvbnN0IH0pLFxuICAgICAgICBcbiAgICAgICAgLy8gQWRkaXRpb25hbCBwcm9wZXJ0aWVzIGZvciBwb3J0Zm9saW8gc3luY1xuICAgICAgICBjb250ZW50OiBjb250ZW50IHx8ICcnLFxuICAgICAgICBmaWxlbmFtZTogcGF0aC5iYXNlbmFtZShmb3VuZEZpbGUpXG4gICAgICB9IGFzIGFueTsgLy8gVHlwZSBhc3NlcnRpb24gbmVlZGVkIHNpbmNlIHdlJ3JlIGR1Y2stdHlwaW5nIElFbGVtZW50XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBvdXIgdmFsaWRhdGlvbiBlcnJvciBmb3IgaW52YWxpZCBlbGVtZW50IHR5cGVzXG4gICAgICBpZiAoZXJyb3IubWVzc2FnZSAmJiBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdJbnZhbGlkIGVsZW1lbnQgdHlwZTonKSkge1xuICAgICAgICB0aHJvdyBlcnJvcjsgLy8gUmUtdGhyb3cgdmFsaWRhdGlvbiBlcnJvcnMgZm9yIGRlYnVnZ2luZ1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBQcm92aWRlIHNwZWNpZmljIGVycm9yIG1lc3NhZ2VzIGZvciBjb21tb24gZmlsZSBzeXN0ZW0gZXJyb3JzXG4gICAgICBsZXQgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gICAgICBcbiAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICBlcnJvck1lc3NhZ2UgPSBgRWxlbWVudCAnJHtzYW5pdGl6ZWROYW1lfScgbm90IGZvdW5kIGluICR7ZWxlbWVudFR5cGV9LiBTZWFyY2hlZCBmb3I6ICR7c2FuaXRpemVkTmFtZX0ubWQsICR7c2FuaXRpemVkTmFtZX0uanNvbiwgJHtzYW5pdGl6ZWROYW1lfS55YW1sLCAke3Nhbml0aXplZE5hbWV9LnltbGA7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gYEVsZW1lbnQgJyR7c2FuaXRpemVkTmFtZX0nIGluICR7ZWxlbWVudFR5cGV9IGNvbnRhaW5zIGludmFsaWQgY29udGVudDogJHtlcnJvci5tZXNzYWdlfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvck1lc3NhZ2UgPSBgRmFpbGVkIHRvIGxvYWQgZWxlbWVudCAnJHtzYW5pdGl6ZWROYW1lfScgZnJvbSAke2VsZW1lbnRUeXBlfTogJHtlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJ31gO1xuICAgICAgfVxuICAgICAgXG4gICAgICBsb2dnZXIud2FybignRXJyb3IgaW4gbG9hZEVsZW1lbnRCeVR5cGUnLCB7IFxuICAgICAgICBlbGVtZW50TmFtZTogc2FuaXRpemVkTmFtZSwgXG4gICAgICAgIG9yaWdpbmFsTmFtZTogZWxlbWVudE5hbWUgIT09IHNhbml0aXplZE5hbWUgPyBlbGVtZW50TmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZWxlbWVudFR5cGUsIFxuICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSwgXG4gICAgICAgIGNvZGU6IGVycm9yLmNvZGUgXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcnVuKCkge1xuICAgIGxvZ2dlci5pbmZvKFwiU3RhcnRpbmcgRG9sbGhvdXNlTUNQIHNlcnZlci4uLlwiKTtcbiAgICAvLyBEb2NrZXIgYnVpbGQgdmVyaWZpY2F0aW9uIC0gcHJvdmVzIHdlJ3JlIHJ1bm5pbmcgZnJlc2ggY29kZVxuICAgIGxvZ2dlci5pbmZvKFwiQlVJTEQgVkVSSUZJQ0FUSU9OOiBSdW5uaW5nIGJ1aWxkIGZyb20gMjAyNS0wOC0xNyAxNjozMCBVVEMgLSBQUjYwNiBBUk02NCBmaXhcIik7XG4gICAgXG4gICAgLy8gRklYICM2MTA6IEluaXRpYWxpemUgcG9ydGZvbGlvIGFuZCBjb21wbGV0ZSBzZXR1cCBCRUZPUkUgY29ubmVjdGluZyB0byBNQ1BcbiAgICAvLyBUaGlzIGVuc3VyZXMgcGVyc29uYXMgYW5kIHBvcnRmb2xpbyBhcmUgcmVhZHkgd2hlbiBNQ1AgY29tbWFuZHMgYXJyaXZlXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVBvcnRmb2xpbygpO1xuICAgICAgYXdhaXQgdGhpcy5jb21wbGV0ZUluaXRpYWxpemF0aW9uKCk7XG4gICAgICBsb2dnZXIuaW5mbyhcIlBvcnRmb2xpbyBhbmQgcGVyc29uYXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xuICAgICAgLy8gT3V0cHV0IG1lc3NhZ2UgdGhhdCBEb2NrZXIgdGVzdHMgY2FuIGRldGVjdFxuICAgICAgbG9nZ2VyLmluZm8oXCJEb2xsaG91c2VNQ1Agc2VydmVyIHJlYWR5IC0gd2FpdGluZyBmb3IgTUNQIGNvbm5lY3Rpb24gb24gc3RkaW9cIik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLnJ1bi5pbml0aWFsaXphdGlvbicsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yOyAvLyBSZS10aHJvdyB0byBwcmV2ZW50IHNlcnZlciBmcm9tIHN0YXJ0aW5nIHdpdGggaW5jb21wbGV0ZSBpbml0aWFsaXphdGlvblxuICAgIH1cbiAgICBcbiAgICBjb25zdCB0cmFuc3BvcnQgPSBuZXcgU3RkaW9TZXJ2ZXJUcmFuc3BvcnQoKTtcbiAgICBcbiAgICAvLyBTZXQgdXAgZ3JhY2VmdWwgc2h1dGRvd24gaGFuZGxlcnNcbiAgICBjb25zdCBjbGVhbnVwID0gYXN5bmMgKCkgPT4ge1xuICAgICAgbG9nZ2VyLmluZm8oXCJTaHV0dGluZyBkb3duIERvbGxob3VzZU1DUCBzZXJ2ZXIuLi5cIik7XG4gICAgICBcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIENsZWFuIHVwIEdpdEh1YiBhdXRoIG1hbmFnZXJcbiAgICAgICAgaWYgKHRoaXMuZ2l0aHViQXV0aE1hbmFnZXIpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmdpdGh1YkF1dGhNYW5hZ2VyLmNsZWFudXAoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gQ2xlYW4gdXAgYW55IG90aGVyIHJlc291cmNlc1xuICAgICAgICBcbiAgICAgICAgbG9nZ2VyLmluZm8oXCJDbGVhbnVwIGNvbXBsZXRlZFwiKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIGR1cmluZyBjbGVhbnVwXCIsIHsgZXJyb3IgfSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9O1xuICAgIFxuICAgIC8vIFJlZ2lzdGVyIHNodXRkb3duIGhhbmRsZXJzXG4gICAgcHJvY2Vzcy5vbignU0lHSU5UJywgY2xlYW51cCk7XG4gICAgcHJvY2Vzcy5vbignU0lHVEVSTScsIGNsZWFudXApO1xuICAgIHByb2Nlc3Mub24oJ1NJR0hVUCcsIGNsZWFudXApO1xuICAgIFxuICAgIGF3YWl0IHRoaXMuc2VydmVyLmNvbm5lY3QodHJhbnNwb3J0KTtcbiAgICAvLyBNYXJrIHRoYXQgTUNQIGlzIG5vdyBjb25uZWN0ZWQgLSBubyBtb3JlIGNvbnNvbGUgb3V0cHV0IGFsbG93ZWRcbiAgICBsb2dnZXIuc2V0TUNQQ29ubmVjdGVkKCk7XG4gICAgbG9nZ2VyLmluZm8oXCJEb2xsaG91c2VNQ1Agc2VydmVyIHJ1bm5pbmcgb24gc3RkaW9cIik7XG4gIH1cbn1cblxuLy8gRXhwb3J0IGlzIGFscmVhZHkgYXQgY2xhc3MgZGVjbGFyYXRpb25cblxuLy8gT25seSBzdGFydCB0aGUgc2VydmVyIGlmIHRoaXMgZmlsZSBpcyBiZWluZyBydW4gZGlyZWN0bHkgKG5vdCBpbXBvcnRlZCBieSB0ZXN0cylcbi8vIEhhbmRsZSBkaWZmZXJlbnQgZXhlY3V0aW9uIG1ldGhvZHMgKGRpcmVjdCwgbnB4LCBDTEkpXG5jb25zdCBpc0RpcmVjdEV4ZWN1dGlvbiA9IGltcG9ydC5tZXRhLnVybCA9PT0gYGZpbGU6Ly8ke3Byb2Nlc3MuYXJndlsxXX1gO1xuY29uc3QgaXNOcHhFeGVjdXRpb24gPSBwcm9jZXNzLmVudi5ucG1fZXhlY3BhdGg/LmluY2x1ZGVzKCducHgnKTtcbmNvbnN0IGlzQ2xpRXhlY3V0aW9uID0gcHJvY2Vzcy5hcmd2WzFdPy5lbmRzV2l0aCgnL2RvbGxob3VzZW1jcCcpIHx8IHByb2Nlc3MuYXJndlsxXT8uZW5kc1dpdGgoJ1xcXFxkb2xsaG91c2VtY3AnKTtcbmNvbnN0IGlzVGVzdCA9IHByb2Nlc3MuZW52LkpFU1RfV09SS0VSX0lEO1xuXG4vLyBQcm9ncmVzc2l2ZSBzdGFydHVwIHdpdGggcmV0cmllcyBmb3IgbnB4L0NMSSBleGVjdXRpb25cbmNvbnN0IFNUQVJUVVBfREVMQVlTID0gWzEwLCA1MCwgMTAwLCAyMDBdOyAvLyBQcm9ncmVzc2l2ZSBkZWxheXMgaW4gbXNcblxuYXN5bmMgZnVuY3Rpb24gc3RhcnRTZXJ2ZXJXaXRoUmV0cnkocmV0cmllc0xlZnQgPSBTVEFSVFVQX0RFTEFZUy5sZW5ndGgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzZXJ2ZXIgPSBuZXcgRG9sbGhvdXNlTUNQU2VydmVyKCk7XG4gICAgYXdhaXQgc2VydmVyLnJ1bigpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChyZXRyaWVzTGVmdCA+IDAgJiYgKGlzTnB4RXhlY3V0aW9uIHx8IGlzQ2xpRXhlY3V0aW9uKSkge1xuICAgICAgLy8gVHJ5IGFnYWluIHdpdGggYSBsb25nZXIgZGVsYXlcbiAgICAgIGNvbnN0IGRlbGF5SW5kZXggPSBTVEFSVFVQX0RFTEFZUy5sZW5ndGggLSByZXRyaWVzTGVmdDtcbiAgICAgIGNvbnN0IGRlbGF5ID0gU1RBUlRVUF9ERUxBWVNbZGVsYXlJbmRleF07XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgZGVsYXkpKTtcbiAgICAgIHJldHVybiBzdGFydFNlcnZlcldpdGhSZXRyeShyZXRyaWVzTGVmdCAtIDEpO1xuICAgIH1cbiAgICAvLyBGaW5hbCBmYWlsdXJlIC0gbWluaW1hbCBlcnJvciBtZXNzYWdlIGZvciBzZWN1cml0eVxuICAgIC8vIE5vdGU6IFVzaW5nIGNvbnNvbGUuZXJyb3IgaGVyZSBpcyBpbnRlbnRpb25hbCBhcyBpdCdzIHRoZSBmaW5hbCBlcnJvciBiZWZvcmUgZXhpdFxuICAgIGNvbnNvbGUuZXJyb3IoXCJbRG9sbGhvdXNlTUNQXSBTZXJ2ZXIgc3RhcnR1cCBmYWlsZWRcIik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbmlmICgoaXNEaXJlY3RFeGVjdXRpb24gfHwgaXNOcHhFeGVjdXRpb24gfHwgaXNDbGlFeGVjdXRpb24pICYmICFpc1Rlc3QpIHtcbiAgc3RhcnRTZXJ2ZXJXaXRoUmV0cnkoKS5jYXRjaCgoKSA9PiB7XG4gICAgLy8gTm90ZTogVXNpbmcgY29uc29sZS5lcnJvciBoZXJlIGlzIGludGVudGlvbmFsIGFzIGl0J3MgdGhlIGZpbmFsIGVycm9yIGJlZm9yZSBleGl0XG4gICAgY29uc29sZS5lcnJvcihcIltEb2xsaG91c2VNQ1BdIFNlcnZlciBzdGFydHVwIGZhaWxlZFwiKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH0pO1xufSJdfQ==
5030
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLGlEQUFpRDtBQUNqRCxPQUFPLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7SUFDeEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0lBQ3RELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsQ0FBQyxDQUFDLENBQUM7QUFFSCxPQUFPLENBQUMsRUFBRSxDQUFDLG9CQUFvQixFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQ25ELE9BQU8sQ0FBQyxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUN0RCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLENBQUMsQ0FBQyxDQUFDO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBd0IsTUFBTSw4QkFBOEIsQ0FBQztBQUNoSSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFlBQVksRUFBaUIsTUFBTSx5QkFBeUIs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QUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQzFELGdDQUFnQztZQUNoQyxNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQztZQUN2RCxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDekMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN6RCxPQUFPLG9CQUFvQixDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBQ0QscURBQXFEO1FBQ3JELG9GQUFvRjtRQUNwRixPQUFPLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDdEQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0FBQ0gsQ0FBQztBQUVELElBQUksQ0FBQyxpQkFBaUIsSUFBSSxjQUFjLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN2RSxvQkFBb0IsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7UUFDaEMsb0ZBQW9GO1FBQ3BGLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztRQUN0RCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuLy8gRGVmZW5zaXZlIGVycm9yIGhhbmRsaW5nIGZvciBucHgvQ0xJIGV4ZWN1dGlvblxucHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCAoZXJyb3IpID0+IHtcbiAgY29uc29sZS5lcnJvcignW0RvbGxob3VzZU1DUF0gU2VydmVyIHN0YXJ0dXAgZmFpbGVkJyk7XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn0pO1xuXG5wcm9jZXNzLm9uKCd1bmhhbmRsZWRSZWplY3Rpb24nLCAocmVhc29uLCBwcm9taXNlKSA9PiB7XG4gIGNvbnNvbGUuZXJyb3IoJ1tEb2xsaG91c2VNQ1BdIFNlcnZlciBzdGFydHVwIGZhaWxlZCcpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59KTtcblxuaW1wb3J0IHsgU2VydmVyIH0gZnJvbSBcIkBtb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc2VydmVyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBTdGRpb1NlcnZlclRyYW5zcG9ydCB9IGZyb20gXCJAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NlcnZlci9zdGRpby5qc1wiO1xuaW1wb3J0IHsgTWNwRXJyb3IsIEVycm9yQ29kZSB9IGZyb20gXCJAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3R5cGVzLmpzXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGxvYWRJbmRpY2F0b3JDb25maWcsIGZvcm1hdEluZGljYXRvciwgdmFsaWRhdGVDdXN0b21Gb3JtYXQsIHR5cGUgSW5kaWNhdG9yQ29uZmlnIH0gZnJvbSAnLi9jb25maWcvaW5kaWNhdG9yLWNvbmZpZy5qcyc7XG5pbXBvcnQgeyBTZWN1cmVZYW1sUGFyc2VyIH0gZnJvbSAnLi9zZWN1cml0eS9zZWN1cmVZYW1sUGFyc2VyLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5RXJyb3IgfSBmcm9tICcuL2Vycm9ycy9TZWN1cml0eUVycm9yLmpzJztcbmltcG9ydCB7IFNlY3VyZUVycm9ySGFuZGxlciB9IGZyb20gJy4vc2VjdXJpdHkvZXJyb3JIYW5kbGVyLmpzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlciwgRXJyb3JDYXRlZ29yeSB9IGZyb20gJy4vdXRpbHMvRXJyb3JIYW5kbGVyLmpzJztcblxuLy8gSW1wb3J0IG1vZHVsYXJpemVkIGNvbXBvbmVudHNcbmltcG9ydCB7IFBlcnNvbmEsIFBlcnNvbmFNZXRhZGF0YSB9IGZyb20gJy4vdHlwZXMvcGVyc29uYS5qcyc7XG5pbXBvcnQgeyBBUElDYWNoZSwgQ29sbGVjdGlvbkNhY2hlIH0gZnJvbSAnLi9jYWNoZS9pbmRleC5qcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUZpbGVuYW1lLCBzYW5pdGl6ZUlucHV0LCB2YWxpZGF0ZUNvbnRlbnRTaXplLCB2YWxpZGF0ZVVzZXJuYW1lLCBNQ1BJbnB1dFZhbGlkYXRvciB9IGZyb20gJy4vc2VjdXJpdHkvSW5wdXRWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgU0VDVVJJVFlfTElNSVRTLCBWQUxJREFUSU9OX1BBVFRFUk5TIH0gZnJvbSAnLi9zZWN1cml0eS9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgQ29udGVudFZhbGlkYXRvciB9IGZyb20gJy4vc2VjdXJpdHkvY29udGVudFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBQYXRoVmFsaWRhdG9yIH0gZnJvbSAnLi9zZWN1cml0eS9wYXRoVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IEZpbGVMb2NrTWFuYWdlciB9IGZyb20gJy4vc2VjdXJpdHkvZmlsZUxvY2tNYW5hZ2VyLmpzJztcbmltcG9ydCB7IGdlbmVyYXRlQW5vbnltb3VzSWQsIGdlbmVyYXRlVW5pcXVlSWQsIHNsdWdpZnkgfSBmcm9tICcuL3V0aWxzL2ZpbGVzeXN0ZW0uanMnO1xuaW1wb3J0IHsgR2l0SHViQ2xpZW50LCBDb2xsZWN0aW9uQnJvd3NlciwgQ29sbGVjdGlvbkluZGV4TWFuYWdlciwgQ29sbGVjdGlvblNlYXJjaCwgUGVyc29uYURldGFpbHMsIFBlcnNvbmFTdWJtaXR0ZXIsIEVsZW1lbnRJbnN0YWxsZXIgfSBmcm9tICcuL2NvbGxlY3Rpb24vaW5kZXguanMnO1xuaW1wb3J0IHsgU2VydmVyU2V0dXAsIElUb29sSGFuZGxlciB9IGZyb20gJy4vc2VydmVyL2luZGV4LmpzJztcbmltcG9ydCB7IEdpdEh1YkF1dGhNYW5hZ2VyLCB0eXBlIERldmljZUNvZGVSZXNwb25zZSB9IGZyb20gJy4vYXV0aC9HaXRIdWJBdXRoTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBQZXJzb25hRXhwb3J0ZXIsIFBlcnNvbmFJbXBvcnRlciB9IGZyb20gJy4vcGVyc29uYS9leHBvcnQtaW1wb3J0L2luZGV4LmpzJztcbmltcG9ydCB7IGlzRGVmYXVsdFBlcnNvbmEgfSBmcm9tICcuL2NvbnN0YW50cy9kZWZhdWx0UGVyc29uYXMuanMnO1xuaW1wb3J0IHsgUG9ydGZvbGlvTWFuYWdlciwgRWxlbWVudFR5cGUgfSBmcm9tICcuL3BvcnRmb2xpby9Qb3J0Zm9saW9NYW5hZ2VyLmpzJztcbmltcG9ydCB7IE1pZ3JhdGlvbk1hbmFnZXIgfSBmcm9tICcuL3BvcnRmb2xpby9NaWdyYXRpb25NYW5hZ2VyLmpzJztcbmltcG9ydCB7IFNraWxsTWFuYWdlciB9IGZyb20gJy4vZWxlbWVudHMvc2tpbGxzL2luZGV4LmpzJztcbmltcG9ydCB7IFNraWxsIH0gZnJvbSAnLi9lbGVtZW50cy9za2lsbHMvU2tpbGwuanMnO1xuaW1wb3J0IHsgVGVtcGxhdGVNYW5hZ2VyIH0gZnJvbSAnLi9lbGVtZW50cy90ZW1wbGF0ZXMvVGVtcGxhdGVNYW5hZ2VyLmpzJztcbmltcG9ydCB7IFRlbXBsYXRlUmVuZGVyZXIgfSBmcm9tICcuL3V0aWxzL1RlbXBsYXRlUmVuZGVyZXIuanMnO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICcuL2VsZW1lbnRzL3RlbXBsYXRlcy9UZW1wbGF0ZS5qcyc7XG5pbXBvcnQgeyBBZ2VudE1hbmFnZXIgfSBmcm9tICcuL2VsZW1lbnRzL2FnZW50cy9BZ2VudE1hbmFnZXIuanMnO1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuL2VsZW1lbnRzL2FnZW50cy9BZ2VudC5qcyc7XG5pbXBvcnQgeyBDb25maWdNYW5hZ2VyIH0gZnJvbSAnLi9jb25maWcvQ29uZmlnTWFuYWdlci5qcyc7XG4vLyBDb25maWdXaXphcmQgaW1wb3J0cyByZW1vdmVkIC0gbm90IGluY2x1ZGVkIGluIGhvdGZpeFxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICd1cmwnO1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJztcblxuXG5cbi8vIERldGVjdCBleGVjdXRpb24gZW52aXJvbm1lbnRcbmNvbnN0IEVYRUNVVElPTl9FTlYgPSB7XG4gIGlzTnB4OiBwcm9jZXNzLmVudi5ucG1fZXhlY3BhdGg/LmluY2x1ZGVzKCducHgnKSB8fCBmYWxzZSxcbiAgaXNDbGk6IHByb2Nlc3MuYXJndlsxXT8uZW5kc1dpdGgoJy9kb2xsaG91c2VtY3AnKSB8fCBmYWxzZSxcbiAgaXNEaXJlY3Q6ICFwcm9jZXNzLmVudi5ucG1fZXhlY3BhdGgsXG4gIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgc2NyaXB0UGF0aDogcHJvY2Vzcy5hcmd2WzFdLFxufTtcblxuLy8gT25seSBsb2cgZXhlY3V0aW9uIGVudmlyb25tZW50IGluIGRlYnVnIG1vZGVcbmlmIChwcm9jZXNzLmVudi5ET0xMSE9VU0VfREVCVUcpIHtcbiAgY29uc29sZS5lcnJvcignW0RvbGxob3VzZU1DUF0gRGVidWcgbW9kZSBlbmFibGVkJyk7XG59XG5cbmV4cG9ydCBjbGFzcyBEb2xsaG91c2VNQ1BTZXJ2ZXIgaW1wbGVtZW50cyBJVG9vbEhhbmRsZXIge1xuICBwcml2YXRlIHNlcnZlcjogU2VydmVyO1xuICBwdWJsaWMgcGVyc29uYXNEaXI6IHN0cmluZyB8IG51bGw7XG4gIHByaXZhdGUgcGVyc29uYXM6IE1hcDxzdHJpbmcsIFBlcnNvbmE+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIGFjdGl2ZVBlcnNvbmE6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGN1cnJlbnRVc2VyOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBpc0luaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaW5pdGlhbGl6YXRpb25Qcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgYXBpQ2FjaGU6IEFQSUNhY2hlID0gbmV3IEFQSUNhY2hlKCk7XG4gIHByaXZhdGUgY29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUgPSBuZXcgQ29sbGVjdGlvbkNhY2hlKCk7XG4gIHByaXZhdGUgcmF0ZUxpbWl0VHJhY2tlciA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXJbXT4oKTtcbiAgcHJpdmF0ZSBpbmRpY2F0b3JDb25maWc6IEluZGljYXRvckNvbmZpZztcbiAgcHJpdmF0ZSBnaXRodWJDbGllbnQ6IEdpdEh1YkNsaWVudDtcbiAgcHJpdmF0ZSBnaXRodWJBdXRoTWFuYWdlcjogR2l0SHViQXV0aE1hbmFnZXI7XG4gIHByaXZhdGUgY29sbGVjdGlvbkluZGV4TWFuYWdlcjogQ29sbGVjdGlvbkluZGV4TWFuYWdlcjtcbiAgcHJpdmF0ZSBjb2xsZWN0aW9uQnJvd3NlcjogQ29sbGVjdGlvbkJyb3dzZXI7XG4gIHByaXZhdGUgY29sbGVjdGlvblNlYXJjaDogQ29sbGVjdGlvblNlYXJjaDtcbiAgcHJpdmF0ZSBwZXJzb25hRGV0YWlsczogUGVyc29uYURldGFpbHM7XG4gIHByaXZhdGUgZWxlbWVudEluc3RhbGxlcjogRWxlbWVudEluc3RhbGxlcjtcbiAgcHJpdmF0ZSBwZXJzb25hU3VibWl0dGVyOiBQZXJzb25hU3VibWl0dGVyO1xuICBwcml2YXRlIHNlcnZlclNldHVwOiBTZXJ2ZXJTZXR1cDtcbiAgcHJpdmF0ZSBwZXJzb25hRXhwb3J0ZXI6IFBlcnNvbmFFeHBvcnRlcjtcbiAgcHJpdmF0ZSBwZXJzb25hSW1wb3J0ZXI/OiBQZXJzb25hSW1wb3J0ZXI7XG4gIHByaXZhdGUgcG9ydGZvbGlvTWFuYWdlcjogUG9ydGZvbGlvTWFuYWdlcjtcbiAgcHJpdmF0ZSBtaWdyYXRpb25NYW5hZ2VyOiBNaWdyYXRpb25NYW5hZ2VyO1xuICBwcml2YXRlIHNraWxsTWFuYWdlcjogU2tpbGxNYW5hZ2VyO1xuICBwcml2YXRlIHRlbXBsYXRlTWFuYWdlcjogVGVtcGxhdGVNYW5hZ2VyO1xuICBwcml2YXRlIHRlbXBsYXRlUmVuZGVyZXI6IFRlbXBsYXRlUmVuZGVyZXI7XG4gIHByaXZhdGUgYWdlbnRNYW5hZ2VyOiBBZ2VudE1hbmFnZXI7XG4gIC8vIENvbmZpZ1dpemFyZENoZWNrIHJlbW92ZWQgLSBub3QgaW5jbHVkZWQgaW4gaG90Zml4XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXJ2ZXIgPSBuZXcgU2VydmVyKFxuICAgICAge1xuICAgICAgICBuYW1lOiBcImRvbGxob3VzZW1jcFwiLFxuICAgICAgICB2ZXJzaW9uOiBcIjEuMC4wLWJ1aWxkLTIwMjUwODE3LTE2MzAtcHI2MDZcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNhcGFiaWxpdGllczoge1xuICAgICAgICAgIHRvb2xzOiB7fSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gQ29uZmlnV2l6YXJkQ2hlY2sgaW5pdGlhbGl6YXRpb24gcmVtb3ZlZCAtIG5vdCBpbmNsdWRlZCBpbiBob3RmaXhcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIHBvcnRmb2xpbyBzeXN0ZW1cbiAgICB0aGlzLnBvcnRmb2xpb01hbmFnZXIgPSBQb3J0Zm9saW9NYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgdGhpcy5taWdyYXRpb25NYW5hZ2VyID0gbmV3IE1pZ3JhdGlvbk1hbmFnZXIodGhpcy5wb3J0Zm9saW9NYW5hZ2VyKTtcbiAgICBcbiAgICAvLyBDUklUSUNBTCBGSVg6IERvbid0IGFjY2VzcyBkaXJlY3RvcmllcyB1bnRpbCBhZnRlciBtaWdyYXRpb24gcnVuc1xuICAgIC8vIFByZXZpb3VzbHk6IHRoaXMucGVyc29uYXNEaXIgd2FzIHNldCBoZXJlLCBjcmVhdGluZyBkaXJlY3RvcmllcyBiZWZvcmUgbWlncmF0aW9uIGNvdWxkIGZpeCB0aGVtXG4gICAgLy8gTm93OiBXZSBkZWxheSBkaXJlY3RvcnkgYWNjZXNzIHVudGlsIGluaXRpYWxpemVQb3J0Zm9saW8oKSBjb21wbGV0ZXNcbiAgICAvLyBVc2luZyBudWxsIHRvIG1ha2UgdGhlIHVuaW5pdGlhbGl6ZWQgc3RhdGUgZXhwbGljaXQgKHBlciBQUiByZXZpZXcgZmVlZGJhY2spXG4gICAgdGhpcy5wZXJzb25hc0RpciA9IG51bGw7IC8vIFdpbGwgYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgaW4gY29tcGxldGVJbml0aWFsaXphdGlvbigpXG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBlbGVtZW50IG1hbmFnZXJzXG4gICAgdGhpcy5za2lsbE1hbmFnZXIgPSBuZXcgU2tpbGxNYW5hZ2VyKCk7XG4gICAgdGhpcy50ZW1wbGF0ZU1hbmFnZXIgPSBuZXcgVGVtcGxhdGVNYW5hZ2VyKCk7XG4gICAgdGhpcy50ZW1wbGF0ZVJlbmRlcmVyID0gbmV3IFRlbXBsYXRlUmVuZGVyZXIodGhpcy50ZW1wbGF0ZU1hbmFnZXIpO1xuICAgIHRoaXMuYWdlbnRNYW5hZ2VyID0gbmV3IEFnZW50TWFuYWdlcih0aGlzLnBvcnRmb2xpb01hbmFnZXIuZ2V0QmFzZURpcigpKTtcbiAgICBcbiAgICAvLyBMb2cgcmVzb2x2ZWQgcGF0aCBmb3IgZGVidWdnaW5nXG4gICAgbG9nZ2VyLmluZm8oYFBlcnNvbmFzIGRpcmVjdG9yeSByZXNvbHZlZCB0bzogJHt0aGlzLnBlcnNvbmFzRGlyfWApO1xuICAgIFxuICAgIC8vIFBhdGhWYWxpZGF0b3Igd2lsbCBiZSBpbml0aWFsaXplZCBhZnRlciBtaWdyYXRpb24gY29tcGxldGVzXG4gICAgXG4gICAgLy8gTG9hZCB1c2VyIGlkZW50aXR5IGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgdGhpcy5jdXJyZW50VXNlciA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9VU0VSIHx8IG51bGw7XG4gICAgXG4gICAgLy8gTG9hZCBpbmRpY2F0b3IgY29uZmlndXJhdGlvblxuICAgIHRoaXMuaW5kaWNhdG9yQ29uZmlnID0gbG9hZEluZGljYXRvckNvbmZpZygpO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgcGVyc29uYSBtYW5hZ2VyXG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBjb2xsZWN0aW9uIG1vZHVsZXNcbiAgICB0aGlzLmdpdGh1YkNsaWVudCA9IG5ldyBHaXRIdWJDbGllbnQodGhpcy5hcGlDYWNoZSwgdGhpcy5yYXRlTGltaXRUcmFja2VyKTtcbiAgICB0aGlzLmdpdGh1YkF1dGhNYW5hZ2VyID0gbmV3IEdpdEh1YkF1dGhNYW5hZ2VyKHRoaXMuYXBpQ2FjaGUpO1xuICAgIHRoaXMuY29sbGVjdGlvbkluZGV4TWFuYWdlciA9IG5ldyBDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyKCk7XG4gICAgdGhpcy5jb2xsZWN0aW9uQnJvd3NlciA9IG5ldyBDb2xsZWN0aW9uQnJvd3Nlcih0aGlzLmdpdGh1YkNsaWVudCwgdGhpcy5jb2xsZWN0aW9uQ2FjaGUsIHRoaXMuY29sbGVjdGlvbkluZGV4TWFuYWdlcik7XG4gICAgdGhpcy5jb2xsZWN0aW9uU2VhcmNoID0gbmV3IENvbGxlY3Rpb25TZWFyY2godGhpcy5naXRodWJDbGllbnQsIHRoaXMuY29sbGVjdGlvbkNhY2hlKTtcbiAgICB0aGlzLnBlcnNvbmFEZXRhaWxzID0gbmV3IFBlcnNvbmFEZXRhaWxzKHRoaXMuZ2l0aHViQ2xpZW50KTtcbiAgICB0aGlzLmVsZW1lbnRJbnN0YWxsZXIgPSBuZXcgRWxlbWVudEluc3RhbGxlcih0aGlzLmdpdGh1YkNsaWVudCk7XG4gICAgdGhpcy5wZXJzb25hU3VibWl0dGVyID0gbmV3IFBlcnNvbmFTdWJtaXR0ZXIoKTtcbiAgICBcbiAgICAvLyBVcGRhdGUgbWFuYWdlciB3aWxsIGJlIGluaXRpYWxpemVkIGFmdGVyIG1pZ3JhdGlvbiBjb21wbGV0ZXMgdG8gYXZvaWQganNkb20gY3Jhc2hcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIGV4cG9ydC9pbXBvcnQvc2hhcmUgbW9kdWxlc1xuICAgIHRoaXMucGVyc29uYUV4cG9ydGVyID0gbmV3IFBlcnNvbmFFeHBvcnRlcih0aGlzLmN1cnJlbnRVc2VyKTtcbiAgICAvLyBQZXJzb25hSW1wb3J0ZXIgd2lsbCBiZSBpbml0aWFsaXplZCBhZnRlciBtaWdyYXRpb24gY29tcGxldGVzXG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBzZXJ2ZXIgc2V0dXBcbiAgICB0aGlzLnNlcnZlclNldHVwID0gbmV3IFNlcnZlclNldHVwKCk7XG4gICAgdGhpcy5zZXJ2ZXJTZXR1cC5zZXR1cFNlcnZlcih0aGlzLnNlcnZlciwgdGhpcyk7XG4gICAgXG4gICAgLy8gRklYICM2MTA6IFBvcnRmb2xpbyBpbml0aWFsaXphdGlvbiBtb3ZlZCB0byBydW4oKSBtZXRob2QgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvblxuICAgIC8vIFByZXZpb3VzbHk6IHRoaXMuaW5pdGlhbGl6ZVBvcnRmb2xpbygpLnRoZW4oKSByYW4gYXN5bmMgaW4gY29uc3RydWN0b3JcbiAgICAvLyBOb3c6IEluaXRpYWxpemF0aW9uIGhhcHBlbnMgc3luY2hyb25vdXNseSBpbiBydW4oKSBiZWZvcmUgTUNQIGNvbm5lY3Rpb25cbiAgfVxuICBcbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplUG9ydGZvbGlvKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIENoZWNrIGlmIG1pZ3JhdGlvbiBpcyBuZWVkZWRcbiAgICBjb25zdCBuZWVkc01pZ3JhdGlvbiA9IGF3YWl0IHRoaXMubWlncmF0aW9uTWFuYWdlci5uZWVkc01pZ3JhdGlvbigpO1xuICAgIFxuICAgIGlmIChuZWVkc01pZ3JhdGlvbikge1xuICAgICAgbG9nZ2VyLmluZm8oJ0xlZ2FjeSBwZXJzb25hcyBkZXRlY3RlZC4gU3RhcnRpbmcgbWlncmF0aW9uLi4uJyk7XG4gICAgICBcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMubWlncmF0aW9uTWFuYWdlci5taWdyYXRlKHsgYmFja3VwOiB0cnVlIH0pO1xuICAgICAgXG4gICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oYFN1Y2Nlc3NmdWxseSBtaWdyYXRlZCAke3Jlc3VsdC5taWdyYXRlZENvdW50fSBwZXJzb25hc2ApO1xuICAgICAgICBpZiAocmVzdWx0LmJhY2tlZFVwICYmIHJlc3VsdC5iYWNrdXBQYXRoKSB7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oYEJhY2t1cCBjcmVhdGVkIGF0OiAke3Jlc3VsdC5iYWNrdXBQYXRofWApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ01pZ3JhdGlvbiBjb21wbGV0ZWQgd2l0aCBlcnJvcnM6Jyk7XG4gICAgICAgIHJlc3VsdC5lcnJvcnMuZm9yRWFjaChlcnIgPT4gbG9nZ2VyLmVycm9yKGAgIC0gJHtlcnJ9YCkpO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBFbnN1cmUgcG9ydGZvbGlvIHN0cnVjdHVyZSBleGlzdHNcbiAgICBjb25zdCBwb3J0Zm9saW9FeGlzdHMgPSBhd2FpdCB0aGlzLnBvcnRmb2xpb01hbmFnZXIuZXhpc3RzKCk7XG4gICAgaWYgKCFwb3J0Zm9saW9FeGlzdHMpIHtcbiAgICAgIGxvZ2dlci5pbmZvKCdDcmVhdGluZyBwb3J0Zm9saW8gZGlyZWN0b3J5IHN0cnVjdHVyZS4uLicpO1xuICAgICAgYXdhaXQgdGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmluaXRpYWxpemUoKTtcbiAgICB9XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBjb2xsZWN0aW9uIGNhY2hlIGZvciBhbm9ueW1vdXMgYWNjZXNzXG4gICAgYXdhaXQgdGhpcy5pbml0aWFsaXplQ29sbGVjdGlvbkNhY2hlKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDb21wbGV0ZSBpbml0aWFsaXphdGlvbiBhZnRlciBwb3J0Zm9saW8gaXMgcmVhZHlcbiAgICogRklYICM2MTA6IFRoaXMgd2FzIHByZXZpb3VzbHkgaW4gYSAudGhlbigpIGNhbGxiYWNrIGluIHRoZSBjb25zdHJ1Y3RvclxuICAgKiBOb3cgY2FsbGVkIHN5bmNocm9ub3VzbHkgZnJvbSBydW4oKSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNvbXBsZXRlSW5pdGlhbGl6YXRpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gTk9XIHNhZmUgdG8gYWNjZXNzIGRpcmVjdG9yaWVzIGFmdGVyIG1pZ3JhdGlvblxuICAgIHRoaXMucGVyc29uYXNEaXIgPSB0aGlzLnBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihFbGVtZW50VHlwZS5QRVJTT05BKTtcbiAgICBcbiAgICAvLyBMb2cgcmVzb2x2ZWQgcGF0aCBmb3IgZGVidWdnaW5nXG4gICAgbG9nZ2VyLmluZm8oYFBlcnNvbmFzIGRpcmVjdG9yeSByZXNvbHZlZCB0bzogJHt0aGlzLnBlcnNvbmFzRGlyfWApO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgUGF0aFZhbGlkYXRvciB3aXRoIHRoZSBwZXJzb25hcyBkaXJlY3RvcnlcbiAgICBQYXRoVmFsaWRhdG9yLmluaXRpYWxpemUodGhpcy5wZXJzb25hc0Rpcik7XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSB1cGRhdGUgbWFuYWdlciB3aXRoIHNhZmUgZGlyZWN0b3J5XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBpbXBvcnQgbW9kdWxlIHRoYXQgZGVwZW5kcyBvbiBwZXJzb25hc0RpclxuICAgIHRoaXMucGVyc29uYUltcG9ydGVyID0gbmV3IFBlcnNvbmFJbXBvcnRlcih0aGlzLnBlcnNvbmFzRGlyLCB0aGlzLmN1cnJlbnRVc2VyKTtcbiAgICBcbiAgICB0aGlzLmxvYWRQZXJzb25hcygpO1xuICAgIFxuICAgIC8vIE1hcmsgaW5pdGlhbGl6YXRpb24gYXMgY29tcGxldGVcbiAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICB9XG4gIFxuICAvKipcbiAgICogRW5zdXJlIHNlcnZlciBpcyBpbml0aWFsaXplZCBiZWZvcmUgYW55IG9wZXJhdGlvblxuICAgKiBGSVggIzYxMDogQWRkZWQgZm9yIHRlc3QgY29tcGF0aWJpbGl0eSAtIHRlc3RzIGRvbid0IGNhbGwgcnVuKClcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlSW5pdGlhbGl6ZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaXNJbml0aWFsaXplZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBJZiBpbml0aWFsaXphdGlvbiBpcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3YWl0IGZvciBpdFxuICAgIGlmICh0aGlzLmluaXRpYWxpemF0aW9uUHJvbWlzZSkge1xuICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXphdGlvblByb21pc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIFN0YXJ0IGluaXRpYWxpemF0aW9uXG4gICAgdGhpcy5pbml0aWFsaXphdGlvblByb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplUG9ydGZvbGlvKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuY29tcGxldGVJbml0aWFsaXphdGlvbigpO1xuICAgICAgICBsb2dnZXIuaW5mbyhcIlBvcnRmb2xpbyBhbmQgcGVyc29uYXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5IChsYXp5KVwiKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLmVuc3VyZUluaXRpYWxpemVkJywgZXJyb3IpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9KSgpO1xuICAgIFxuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6YXRpb25Qcm9taXNlO1xuICB9XG4gIFxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBjb2xsZWN0aW9uIGNhY2hlIHdpdGggc2VlZCBkYXRhIGZvciBhbm9ueW1vdXMgYnJvd3NpbmdcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUNvbGxlY3Rpb25DYWNoZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaXNDYWNoZVZhbGlkID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uQ2FjaGUuaXNDYWNoZVZhbGlkKCk7XG4gICAgICBpZiAoIWlzQ2FjaGVWYWxpZCkge1xuICAgICAgICBsb2dnZXIuaW5mbygnSW5pdGlhbGl6aW5nIGNvbGxlY3Rpb24gY2FjaGUgd2l0aCBzZWVkIGRhdGEuLi4nKTtcbiAgICAgICAgY29uc3QgeyBDb2xsZWN0aW9uU2VlZGVyIH0gPSBhd2FpdCBpbXBvcnQoJy4vY29sbGVjdGlvbi9Db2xsZWN0aW9uU2VlZGVyLmpzJyk7XG4gICAgICAgIGNvbnN0IHNlZWREYXRhID0gQ29sbGVjdGlvblNlZWRlci5nZXRTZWVkRGF0YSgpO1xuICAgICAgICBhd2FpdCB0aGlzLmNvbGxlY3Rpb25DYWNoZS5zYXZlQ2FjaGUoc2VlZERhdGEpO1xuICAgICAgICBsb2dnZXIuaW5mbyhgQ29sbGVjdGlvbiBjYWNoZSBpbml0aWFsaXplZCB3aXRoICR7c2VlZERhdGEubGVuZ3RofSBpdGVtc2ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb25DYWNoZS5nZXRDYWNoZVN0YXRzKCk7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgQ29sbGVjdGlvbiBjYWNoZSBhbHJlYWR5IHZhbGlkIHdpdGggJHtzdGF0cy5pdGVtQ291bnR9IGl0ZW1zYCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLmluaXRpYWxpemVDb2xsZWN0aW9uQ2FjaGUnLCBlcnJvcik7XG4gICAgICAvLyBEb24ndCB0aHJvdyAtIGNhY2hlIGZhaWx1cmVzIHNob3VsZG4ndCBwcmV2ZW50IHNlcnZlciBzdGFydHVwXG4gICAgfVxuICB9XG5cbiAgLy8gVG9vbCBoYW5kbGVyIG1ldGhvZHMgLSBub3cgcHVibGljIGZvciBhY2Nlc3MgZnJvbSB0b29sIG1vZHVsZXNcbiAgXG4gIHByaXZhdGUgZ2V0UGVyc29uYUluZGljYXRvcigpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5hY3RpdmVQZXJzb25hKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBjb25zdCBwZXJzb25hID0gdGhpcy5wZXJzb25hcy5nZXQodGhpcy5hY3RpdmVQZXJzb25hKTtcbiAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiBmb3JtYXRJbmRpY2F0b3IodGhpcy5pbmRpY2F0b3JDb25maWcsIHtcbiAgICAgIG5hbWU6IHBlcnNvbmEubWV0YWRhdGEubmFtZSxcbiAgICAgIHZlcnNpb246IHBlcnNvbmEubWV0YWRhdGEudmVyc2lvbixcbiAgICAgIGF1dGhvcjogcGVyc29uYS5tZXRhZGF0YS5hdXRob3IsXG4gICAgICBjYXRlZ29yeTogcGVyc29uYS5tZXRhZGF0YS5jYXRlZ29yeVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vcm1hbGl6ZSBlbGVtZW50IHR5cGUgdG8gaGFuZGxlIGJvdGggc2luZ3VsYXIgKG5ldykgYW5kIHBsdXJhbCAobGVnYWN5KSBmb3Jtc1xuICAgKiBUaGlzIHByb3ZpZGVzIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZHVyaW5nIHRoZSB0cmFuc2l0aW9uIHRvIHYxLjQuMFxuICAgKi9cbiAgcHJpdmF0ZSBub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIE1hcCBwbHVyYWwgZm9ybXMgdG8gc2luZ3VsYXIgRWxlbWVudFR5cGUgdmFsdWVzXG4gICAgY29uc3QgcGx1cmFsVG9TaW5ndWxhck1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICdwZXJzb25hcyc6IEVsZW1lbnRUeXBlLlBFUlNPTkEsXG4gICAgICAnc2tpbGxzJzogRWxlbWVudFR5cGUuU0tJTEwsXG4gICAgICAndGVtcGxhdGVzJzogRWxlbWVudFR5cGUuVEVNUExBVEUsXG4gICAgICAnYWdlbnRzJzogRWxlbWVudFR5cGUuQUdFTlQsXG4gICAgICAnbWVtb3JpZXMnOiBFbGVtZW50VHlwZS5NRU1PUlksXG4gICAgICAnZW5zZW1ibGVzJzogRWxlbWVudFR5cGUuRU5TRU1CTEVcbiAgICB9O1xuICAgIFxuICAgIC8vIElmIGl0J3MgYWxyZWFkeSBhIHZhbGlkIEVsZW1lbnRUeXBlIHZhbHVlLCByZXR1cm4gYXMtaXNcbiAgICBpZiAoT2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSkuaW5jbHVkZXModHlwZSBhcyBFbGVtZW50VHlwZSkpIHtcbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cbiAgICBcbiAgICAvLyBJZiBpdCdzIGEgcGx1cmFsIGZvcm0sIGNvbnZlcnQgdG8gc2luZ3VsYXJcbiAgICBpZiAocGx1cmFsVG9TaW5ndWxhck1hcFt0eXBlXSkge1xuICAgICAgLy8gTG9nIGRlcHJlY2F0aW9uIHdhcm5pbmdcbiAgICAgIGxvZ2dlci53YXJuKGBVc2luZyBwbHVyYWwgZWxlbWVudCB0eXBlICcke3R5cGV9JyBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHNpbmd1bGFyIGZvcm0gJyR7cGx1cmFsVG9TaW5ndWxhck1hcFt0eXBlXX0nIGluc3RlYWQuYCk7XG4gICAgICByZXR1cm4gcGx1cmFsVG9TaW5ndWxhck1hcFt0eXBlXTtcbiAgICB9XG4gICAgXG4gICAgLy8gVW5rbm93biB0eXBlIC0gcmV0dXJuIGFzLWlzIGFuZCBsZXQgdmFsaWRhdGlvbiBoYW5kbGUgaXRcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGFuIGVsZW1lbnQgYnkgbmFtZSwgc3VwcG9ydGluZyBib3RoIGV4YWN0IGRpc3BsYXkgbmFtZSBhbmQgZmlsZW5hbWUgKHNsdWcpIG1hdGNoaW5nXG4gICAqIFRoaXMgcHJvdmlkZXMgYmV0dGVyIFVYIGJ5IGFsbG93aW5nIHVzZXJzIHRvIHJlZmVyZW5jZSBlbGVtZW50cyBieSBlaXRoZXIgZm9ybWF0XG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgdG8gc2VhcmNoIGZvciAoY2FuIGJlIGRpc3BsYXkgbmFtZSBvciBmaWxlbmFtZSB3aXRob3V0IGV4dGVuc2lvbilcbiAgICogQHBhcmFtIGVsZW1lbnRMaXN0IC0gVGhlIGxpc3Qgb2YgZWxlbWVudHMgdG8gc2VhcmNoIHRocm91Z2hcbiAgICogQHJldHVybnMgVGhlIGZvdW5kIGVsZW1lbnQgb3IgdW5kZWZpbmVkXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGZpbmRFbGVtZW50RmxleGlibHkobmFtZTogc3RyaW5nLCBlbGVtZW50TGlzdDogYW55W10pOiBQcm9taXNlPGFueT4ge1xuICAgIGlmICghbmFtZSB8fCAhZWxlbWVudExpc3QgfHwgZWxlbWVudExpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBcbiAgICAvLyBOb3JtYWxpemUgdGhlIHNlYXJjaCBuYW1lIGZvciBjb21wYXJpc29uXG4gICAgY29uc3Qgc2VhcmNoTmFtZUxvd2VyID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHNlYXJjaE5hbWVTbHVnID0gc2x1Z2lmeShuYW1lKTtcbiAgICBcbiAgICAvLyBGaXJzdCB0cnkgZXhhY3QgbmFtZSBtYXRjaCAoY2FzZS1pbnNlbnNpdGl2ZSlcbiAgICBsZXQgZWxlbWVudCA9IGVsZW1lbnRMaXN0LmZpbmQoZSA9PiBcbiAgICAgIGUubWV0YWRhdGE/Lm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IHNlYXJjaE5hbWVMb3dlclxuICAgICk7XG4gICAgXG4gICAgLy8gSWYgbm90IGZvdW5kLCB0cnkgc2x1ZyBtYXRjaCAoZmlsZW5hbWUgd2l0aG91dCBleHRlbnNpb24pXG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICBlbGVtZW50ID0gZWxlbWVudExpc3QuZmluZChlID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudFNsdWcgPSBzbHVnaWZ5KGUubWV0YWRhdGE/Lm5hbWUgfHwgJycpO1xuICAgICAgICByZXR1cm4gZWxlbWVudFNsdWcgPT09IHNlYXJjaE5hbWVTbHVnIHx8IGVsZW1lbnRTbHVnID09PSBzZWFyY2hOYW1lTG93ZXI7XG4gICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgLy8gSWYgc3RpbGwgbm90IGZvdW5kLCB0cnkgcGFydGlhbCBtYXRjaCBvbiBmaWxlbmFtZVxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgZWxlbWVudCA9IGVsZW1lbnRMaXN0LmZpbmQoZSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnROYW1lID0gZS5tZXRhZGF0YT8ubmFtZSB8fCAnJztcbiAgICAgICAgY29uc3QgZWxlbWVudFNsdWcgPSBzbHVnaWZ5KGVsZW1lbnROYW1lKTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRTbHVnLmluY2x1ZGVzKHNlYXJjaE5hbWVTbHVnKSB8fCBcbiAgICAgICAgICAgICAgIGVsZW1lbnROYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoTmFtZUxvd2VyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENvbnZlcnQgYSBzdHJpbmcgdG8gYSBzbHVnIGZvcm1hdCAobG93ZXJjYXNlIHdpdGggaHlwaGVucylcbiAgICogTWF0Y2hlcyB0aGUgZm9ybWF0IHVzZWQgZm9yIGVsZW1lbnQgZmlsZW5hbWVzXG4gICAqL1xuICBcbiAgLyoqXG4gICAqIFNhbml0aXplIG1ldGFkYXRhIG9iamVjdCB0byBwcmV2ZW50IHByb3RvdHlwZSBwb2xsdXRpb25cbiAgICogUmVtb3ZlcyBhbnkgZGFuZ2Vyb3VzIHByb3BlcnRpZXMgdGhhdCBjb3VsZCBhZmZlY3QgT2JqZWN0LnByb3RvdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBzYW5pdGl6ZU1ldGFkYXRhKG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgaWYgKCFtZXRhZGF0YSB8fCB0eXBlb2YgbWV0YWRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGRhbmdlcm91c1Byb3BlcnRpZXMgPSBbJ19fcHJvdG9fXycsICdjb25zdHJ1Y3RvcicsICdwcm90b3R5cGUnXTtcbiAgICBjb25zdCBzYW5pdGl6ZWQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtZXRhZGF0YSkpIHtcbiAgICAgIGlmICghZGFuZ2Vyb3VzUHJvcGVydGllcy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHNhbml0aXplIG5lc3RlZCBvYmplY3RzXG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHNhbml0aXplZFtrZXldID0gdGhpcy5zYW5pdGl6ZU1ldGFkYXRhKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzYW5pdGl6ZWRba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBzYW5pdGl6ZWQ7XG4gIH1cblxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFBlcnNvbmFzKCkge1xuICAgIC8vIFZhbGlkYXRlIHRoZSBwZXJzb25hcyBkaXJlY3RvcnkgcGF0aFxuICAgIC8vIHBlcnNvbmFzRGlyIGlzIGd1YXJhbnRlZWQgdG8gYmUgc2V0IGJ5IGNvbXBsZXRlSW5pdGlhbGl6YXRpb24gYmVmb3JlIHRoaXMgaXMgY2FsbGVkXG4gICAgaWYgKCFwYXRoLmlzQWJzb2x1dGUodGhpcy5wZXJzb25hc0RpciEpKSB7XG4gICAgICBsb2dnZXIud2FybihgUGVyc29uYXMgZGlyZWN0b3J5IHBhdGggaXMgbm90IGFic29sdXRlOiAke3RoaXMucGVyc29uYXNEaXJ9YCk7XG4gICAgfVxuICAgIFxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5hY2Nlc3ModGhpcy5wZXJzb25hc0RpciEpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBDcmVhdGUgcGVyc29uYXMgZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLm1rZGlyKHRoaXMucGVyc29uYXNEaXIhLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYENyZWF0ZWQgcGVyc29uYXMgZGlyZWN0b3J5IGF0OiAke3RoaXMucGVyc29uYXNEaXJ9YCk7XG4gICAgICAgIC8vIENvbnRpbnVlIHRvIHRyeSBsb2FkaW5nIChkaXJlY3Rvcnkgd2lsbCBiZSBlbXB0eSlcbiAgICAgIH0gY2F0Y2ggKG1rZGlyRXJyb3IpIHtcbiAgICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIubG9hZFBlcnNvbmFzLm1rZGlyJywgbWtkaXJFcnJvciwgeyBwZXJzb25hc0RpcjogdGhpcy5wZXJzb25hc0RpciB9KTtcbiAgICAgICAgLy8gRG9uJ3QgdGhyb3cgLSBlbXB0eSBwb3J0Zm9saW8gaXMgdmFsaWRcbiAgICAgICAgdGhpcy5wZXJzb25hcy5jbGVhcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIHBlcnNvbmFzRGlyIGlzIGd1YXJhbnRlZWQgdG8gYmUgc2V0IGJ5IGNvbXBsZXRlSW5pdGlhbGl6YXRpb24gYmVmb3JlIHRoaXMgaXMgY2FsbGVkXG4gICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGZzLnJlYWRkaXIodGhpcy5wZXJzb25hc0RpciEpO1xuICAgICAgY29uc3QgbWFya2Rvd25GaWxlcyA9IGZpbGVzXG4gICAgICAgIC5maWx0ZXIoZmlsZSA9PiBmaWxlLmVuZHNXaXRoKCcubWQnKSlcbiAgICAgICAgLmZpbHRlcihmaWxlID0+ICF0aGlzLnBvcnRmb2xpb01hbmFnZXIuaXNUZXN0RWxlbWVudChmaWxlKSk7XG5cbiAgICAgIHRoaXMucGVyc29uYXMuY2xlYXIoKTtcbiAgICAgIFxuICAgICAgaWYgKG1hcmtkb3duRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdbRG9sbGhvdXNlTUNQXSBObyBwZXJzb25hcyBmb3VuZCBpbiBwb3J0Zm9saW8uIFVzZSBicm93c2VfY29sbGVjdGlvbiB0byBpbnN0YWxsIHNvbWUhJyk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBtYXJrZG93bkZpbGVzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5wZXJzb25hc0RpciEsIGZpbGUpO1xuICAgICAgICAgIGNvbnN0IGZpbGVDb250ZW50ID0gYXdhaXQgUGF0aFZhbGlkYXRvci5zYWZlUmVhZEZpbGUoZmlsZVBhdGgpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIFVzZSBzZWN1cmUgWUFNTCBwYXJzZXJcbiAgICAgICAgICBsZXQgcGFyc2VkO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwYXJzZWQgPSBTZWN1cmVZYW1sUGFyc2VyLnNhZmVNYXR0ZXIoZmlsZUNvbnRlbnQpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTZWN1cml0eUVycm9yKSB7XG4gICAgICAgICAgICAgIGxvZ2dlci53YXJuKGBTZWN1cml0eSB0aHJlYXQgZGV0ZWN0ZWQgaW4gcGVyc29uYSAke2ZpbGV9OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IG1ldGFkYXRhID0gcGFyc2VkLmRhdGEgYXMgUGVyc29uYU1ldGFkYXRhO1xuICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBwYXJzZWQuY29udGVudDtcblxuICAgICAgICAgIGlmICghbWV0YWRhdGEubmFtZSkge1xuICAgICAgICAgICAgbWV0YWRhdGEubmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZSwgJy5tZCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEdlbmVyYXRlIHVuaXF1ZSBJRCBpZiBub3QgcHJlc2VudFxuICAgICAgICAgIGxldCB1bmlxdWVJZCA9IG1ldGFkYXRhLnVuaXF1ZV9pZDtcbiAgICAgICAgICBpZiAoIXVuaXF1ZUlkKSB7XG4gICAgICAgICAgICBjb25zdCBhdXRob3JGb3JJZCA9IG1ldGFkYXRhLmF1dGhvciB8fCB0aGlzLmdldEN1cnJlbnRVc2VyRm9yQXR0cmlidXRpb24oKTtcbiAgICAgICAgICAgIHVuaXF1ZUlkID0gZ2VuZXJhdGVVbmlxdWVJZChtZXRhZGF0YS5uYW1lLCBhdXRob3JGb3JJZCk7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoYEdlbmVyYXRlZCB1bmlxdWUgSUQgZm9yICR7bWV0YWRhdGEubmFtZX06ICR7dW5pcXVlSWR9YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU2V0IGRlZmF1bHQgdmFsdWVzIGZvciBuZXcgbWV0YWRhdGEgZmllbGRzXG4gICAgICAgICAgaWYgKCFtZXRhZGF0YS5jYXRlZ29yeSkgbWV0YWRhdGEuY2F0ZWdvcnkgPSAnZ2VuZXJhbCc7XG4gICAgICAgICAgaWYgKCFtZXRhZGF0YS5hZ2VfcmF0aW5nKSBtZXRhZGF0YS5hZ2VfcmF0aW5nID0gJ2FsbCc7XG4gICAgICAgICAgaWYgKCFtZXRhZGF0YS5jb250ZW50X2ZsYWdzKSBtZXRhZGF0YS5jb250ZW50X2ZsYWdzID0gW107XG4gICAgICAgICAgaWYgKG1ldGFkYXRhLmFpX2dlbmVyYXRlZCA9PT0gdW5kZWZpbmVkKSBtZXRhZGF0YS5haV9nZW5lcmF0ZWQgPSBmYWxzZTtcbiAgICAgICAgICBpZiAoIW1ldGFkYXRhLmdlbmVyYXRpb25fbWV0aG9kKSBtZXRhZGF0YS5nZW5lcmF0aW9uX21ldGhvZCA9ICdodW1hbic7XG4gICAgICAgICAgaWYgKCFtZXRhZGF0YS5wcmljZSkgbWV0YWRhdGEucHJpY2UgPSAnZnJlZSc7XG4gICAgICAgICAgaWYgKCFtZXRhZGF0YS5saWNlbnNlKSBtZXRhZGF0YS5saWNlbnNlID0gJ0NDLUJZLVNBLTQuMCc7XG5cbiAgICAgICAgICBjb25zdCBwZXJzb25hOiBQZXJzb25hID0ge1xuICAgICAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgZmlsZW5hbWU6IGZpbGUsXG4gICAgICAgICAgICB1bmlxdWVfaWQ6IHVuaXF1ZUlkLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0aGlzLnBlcnNvbmFzLnNldChmaWxlLCBwZXJzb25hKTtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoYExvYWRlZCBwZXJzb25hOiAke21ldGFkYXRhLm5hbWV9ICgke3VuaXF1ZUlkfWApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLmxvYWRQZXJzb25hcy5sb2FkRmlsZScsIGVycm9yLCB7IGZpbGUgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSGFuZGxlIEVOT0VOVCBncmFjZWZ1bGx5IC0gZGlyZWN0b3J5IG1pZ2h0IG5vdCBleGlzdCB5ZXRcbiAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICBsb2dnZXIuaW5mbygnW0RvbGxob3VzZU1DUF0gUGVyc29uYXMgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IHlldCAtIHBvcnRmb2xpbyBpcyBlbXB0eScpO1xuICAgICAgICB0aGlzLnBlcnNvbmFzLmNsZWFyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLmxvYWRQZXJzb25hcycsIGVycm9yKTtcbiAgICAgIHRoaXMucGVyc29uYXMuY2xlYXIoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsaXN0UGVyc29uYXMoKSB7XG4gICAgY29uc3QgcGVyc29uYUxpc3QgPSBBcnJheS5mcm9tKHRoaXMucGVyc29uYXMudmFsdWVzKCkpLm1hcChwZXJzb25hID0+ICh7XG4gICAgICBmaWxlbmFtZTogcGVyc29uYS5maWxlbmFtZSxcbiAgICAgIHVuaXF1ZV9pZDogcGVyc29uYS51bmlxdWVfaWQsXG4gICAgICBuYW1lOiBwZXJzb25hLm1ldGFkYXRhLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcGVyc29uYS5tZXRhZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgIHRyaWdnZXJzOiBwZXJzb25hLm1ldGFkYXRhLnRyaWdnZXJzIHx8IFtdLFxuICAgICAgdmVyc2lvbjogcGVyc29uYS5tZXRhZGF0YS52ZXJzaW9uIHx8IFwiMS4wXCIsXG4gICAgICBhdXRob3I6IHBlcnNvbmEubWV0YWRhdGEuYXV0aG9yIHx8IFwiVW5rbm93blwiLFxuICAgICAgY2F0ZWdvcnk6IHBlcnNvbmEubWV0YWRhdGEuY2F0ZWdvcnkgfHwgJ2dlbmVyYWwnLFxuICAgICAgYWdlX3JhdGluZzogcGVyc29uYS5tZXRhZGF0YS5hZ2VfcmF0aW5nIHx8ICdhbGwnLFxuICAgICAgcHJpY2U6IHBlcnNvbmEubWV0YWRhdGEucHJpY2UgfHwgJ2ZyZWUnLFxuICAgICAgYWlfZ2VuZXJhdGVkOiBwZXJzb25hLm1ldGFkYXRhLmFpX2dlbmVyYXRlZCB8fCBmYWxzZSxcbiAgICAgIGFjdGl2ZTogdGhpcy5hY3RpdmVQZXJzb25hID09PSBwZXJzb25hLmZpbGVuYW1lLFxuICAgIH0pKTtcblxuICAgIGlmIChwZXJzb25hTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfVlvdSBkb24ndCBoYXZlIGFueSBwZXJzb25hcyBpbnN0YWxsZWQgeWV0LiBXb3VsZCB5b3UgbGlrZSB0byBicm93c2UgdGhlIERvbGxob3VzZU1DUCBjb2xsZWN0aW9uIG9uIEdpdEh1YiB0byBzZWUgd2hhdCdzIGF2YWlsYWJsZT8gSSBjYW4gc2hvdyB5b3UgcGVyc29uYXMgZm9yIGNyZWF0aXZlIHdyaXRpbmcsIHRlY2huaWNhbCBhbmFseXNpcywgYW5kIG1vcmUuIEp1c3Qgc2F5IFwieWVzXCIgb3IgdXNlICdicm93c2VfY29sbGVjdGlvbicuYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl9QXZhaWxhYmxlIFBlcnNvbmFzICgke3BlcnNvbmFMaXN0Lmxlbmd0aH0pOlxcblxcbmAgK1xuICAgICAgICAgICAgcGVyc29uYUxpc3QubWFwKHAgPT4gXG4gICAgICAgICAgICAgIGAke3AuYWN0aXZlID8gJ/CflLkgJyA6ICfilqvvuI8gJ30qKiR7cC5uYW1lfSoqICgke3AudW5pcXVlX2lkfSlcXG5gICtcbiAgICAgICAgICAgICAgYCAgICR7cC5kZXNjcmlwdGlvbn1cXG5gICtcbiAgICAgICAgICAgICAgYCAgIPCfk4EgJHtwLmNhdGVnb3J5fSB8IPCfjq0gJHtwLmF1dGhvcn0gfCDwn5SWICR7cC5wcmljZX0gfCAke3AuYWlfZ2VuZXJhdGVkID8gJ/CfpJYgQUknIDogJ/CfkaQgSHVtYW4nfVxcbmAgK1xuICAgICAgICAgICAgICBgICAgQWdlOiAke3AuYWdlX3JhdGluZ30gfCBWZXJzaW9uOiAke3AudmVyc2lvbn1cXG5gICtcbiAgICAgICAgICAgICAgYCAgIFRyaWdnZXJzOiAke3AudHJpZ2dlcnMuam9pbignLCAnKSB8fCAnTm9uZSd9XFxuYFxuICAgICAgICAgICAgKS5qb2luKCdcXG4nKSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGFjdGl2YXRlUGVyc29uYShwZXJzb25hSWRlbnRpZmllcjogc3RyaW5nKSB7XG4gICAgLy8gRW5oYW5jZWQgaW5wdXQgdmFsaWRhdGlvbiBmb3IgcGVyc29uYSBpZGVudGlmaWVyXG4gICAgY29uc3QgdmFsaWRhdGVkSWRlbnRpZmllciA9IE1DUElucHV0VmFsaWRhdG9yLnZhbGlkYXRlUGVyc29uYUlkZW50aWZpZXIocGVyc29uYUlkZW50aWZpZXIpO1xuICAgIFxuICAgIC8vIFRyeSB0byBmaW5kIHBlcnNvbmEgYnkgZmlsZW5hbWUgZmlyc3QsIHRoZW4gYnkgbmFtZVxuICAgIGxldCBwZXJzb25hID0gdGhpcy5wZXJzb25hcy5nZXQodmFsaWRhdGVkSWRlbnRpZmllcik7XG4gICAgXG4gICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICAvLyBTZWFyY2ggYnkgbmFtZVxuICAgICAgcGVyc29uYSA9IEFycmF5LmZyb20odGhpcy5wZXJzb25hcy52YWx1ZXMoKSkuZmluZChwID0+IFxuICAgICAgICBwLm1ldGFkYXRhLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gdmFsaWRhdGVkSWRlbnRpZmllci50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgdGhyb3cgbmV3IE1jcEVycm9yKFxuICAgICAgICBFcnJvckNvZGUuSW52YWxpZFBhcmFtcyxcbiAgICAgICAgYFBlcnNvbmEgbm90IGZvdW5kOiAke3BlcnNvbmFJZGVudGlmaWVyfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5hY3RpdmVQZXJzb25hID0gcGVyc29uYS5maWxlbmFtZTtcblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX1QZXJzb25hIEFjdGl2YXRlZDogKioke3BlcnNvbmEubWV0YWRhdGEubmFtZX0qKlxcblxcbmAgK1xuICAgICAgICAgICAgYCR7cGVyc29uYS5tZXRhZGF0YS5kZXNjcmlwdGlvbn1cXG5cXG5gICtcbiAgICAgICAgICAgIGAqKkluc3RydWN0aW9uczoqKlxcbiR7cGVyc29uYS5jb250ZW50fWAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBnZXRBY3RpdmVQZXJzb25hKCkge1xuICAgIGlmICghdGhpcy5hY3RpdmVQZXJzb25hKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX1ObyBwZXJzb25hIGlzIGN1cnJlbnRseSBhY3RpdmUuYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBwZXJzb25hID0gdGhpcy5wZXJzb25hcy5nZXQodGhpcy5hY3RpdmVQZXJzb25hKTtcbiAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgIHRoaXMuYWN0aXZlUGVyc29uYSA9IG51bGw7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX1BY3RpdmUgcGVyc29uYSBub3QgZm91bmQuIERlYWN0aXZhdGVkLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfUFjdGl2ZSBQZXJzb25hOiAqKiR7cGVyc29uYS5tZXRhZGF0YS5uYW1lfSoqXFxuXFxuYCArXG4gICAgICAgICAgICBgJHtwZXJzb25hLm1ldGFkYXRhLmRlc2NyaXB0aW9ufVxcblxcbmAgK1xuICAgICAgICAgICAgYEZpbGU6ICR7cGVyc29uYS5maWxlbmFtZX1cXG5gICtcbiAgICAgICAgICAgIGBWZXJzaW9uOiAke3BlcnNvbmEubWV0YWRhdGEudmVyc2lvbiB8fCAnMS4wJ31cXG5gICtcbiAgICAgICAgICAgIGBBdXRob3I6ICR7cGVyc29uYS5tZXRhZGF0YS5hdXRob3IgfHwgJ1Vua25vd24nfWAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBkZWFjdGl2YXRlUGVyc29uYSgpIHtcbiAgICBjb25zdCB3YXNBY3RpdmUgPSB0aGlzLmFjdGl2ZVBlcnNvbmEgIT09IG51bGw7XG4gICAgY29uc3QgaW5kaWNhdG9yID0gdGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCk7XG4gICAgdGhpcy5hY3RpdmVQZXJzb25hID0gbnVsbDtcblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiB3YXNBY3RpdmUgXG4gICAgICAgICAgICA/IGAke2luZGljYXRvcn3inIUgUGVyc29uYSBkZWFjdGl2YXRlZC4gQmFjayB0byBkZWZhdWx0IG1vZGUuYFxuICAgICAgICAgICAgOiBcIk5vIHBlcnNvbmEgd2FzIGFjdGl2ZS5cIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGdldFBlcnNvbmFEZXRhaWxzKHBlcnNvbmFJZGVudGlmaWVyOiBzdHJpbmcpIHtcbiAgICAvLyBUcnkgdG8gZmluZCBwZXJzb25hIGJ5IGZpbGVuYW1lIGZpcnN0LCB0aGVuIGJ5IG5hbWVcbiAgICBsZXQgcGVyc29uYSA9IHRoaXMucGVyc29uYXMuZ2V0KHBlcnNvbmFJZGVudGlmaWVyKTtcbiAgICBcbiAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgIC8vIFNlYXJjaCBieSBuYW1lIHdpdGggc2x1Z2lmeSBub3JtYWxpemF0aW9uIChmaXhlcyBEZWJ1ZyBEZXRlY3RpdmUncyBpZGVudGlmaWVkIGlzc3VlKVxuICAgICAgY29uc3Qgc2VhcmNoTmFtZVNsdWcgPSBzbHVnaWZ5KHBlcnNvbmFJZGVudGlmaWVyKTtcbiAgICAgIGNvbnN0IHNlYXJjaE5hbWVMb3dlciA9IHBlcnNvbmFJZGVudGlmaWVyLnRvTG93ZXJDYXNlKCk7XG4gICAgICBcbiAgICAgIHBlcnNvbmEgPSBBcnJheS5mcm9tKHRoaXMucGVyc29uYXMudmFsdWVzKCkpLmZpbmQocCA9PiB7XG4gICAgICAgIGNvbnN0IHBlcnNvbmFOYW1lTG93ZXIgPSBwLm1ldGFkYXRhLm5hbWU/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHBlcnNvbmFOYW1lU2x1ZyA9IHNsdWdpZnkocC5tZXRhZGF0YS5uYW1lIHx8ICcnKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFRyeSBib3RoIGV4YWN0IG1hdGNoIGFuZCBzbHVnIG1hdGNoIGZvciBmbGV4aWJpbGl0eVxuICAgICAgICByZXR1cm4gcGVyc29uYU5hbWVMb3dlciA9PT0gc2VhcmNoTmFtZUxvd2VyIHx8IFxuICAgICAgICAgICAgICAgcGVyc29uYU5hbWVTbHVnID09PSBzZWFyY2hOYW1lU2x1ZztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgdGhyb3cgbmV3IE1jcEVycm9yKFxuICAgICAgICBFcnJvckNvZGUuSW52YWxpZFBhcmFtcyxcbiAgICAgICAgYFBlcnNvbmEgbm90IGZvdW5kOiAke3BlcnNvbmFJZGVudGlmaWVyfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCfk4sgKioke3BlcnNvbmEubWV0YWRhdGEubmFtZX0qKiBEZXRhaWxzXFxuXFxuYCArXG4gICAgICAgICAgICBgKipEZXNjcmlwdGlvbjoqKiAke3BlcnNvbmEubWV0YWRhdGEuZGVzY3JpcHRpb259XFxuYCArXG4gICAgICAgICAgICBgKipGaWxlOioqICR7cGVyc29uYS5maWxlbmFtZX1cXG5gICtcbiAgICAgICAgICAgIGAqKlZlcnNpb246KiogJHtwZXJzb25hLm1ldGFkYXRhLnZlcnNpb24gfHwgJzEuMCd9XFxuYCArXG4gICAgICAgICAgICBgKipBdXRob3I6KiogJHtwZXJzb25hLm1ldGFkYXRhLmF1dGhvciB8fCAnVW5rbm93bid9XFxuYCArXG4gICAgICAgICAgICBgKipUcmlnZ2VyczoqKiAke3BlcnNvbmEubWV0YWRhdGEudHJpZ2dlcnM/LmpvaW4oJywgJykgfHwgJ05vbmUnfVxcblxcbmAgK1xuICAgICAgICAgICAgYCoqRnVsbCBDb250ZW50OioqXFxuXFxgXFxgXFxgXFxuJHtwZXJzb25hLmNvbnRlbnR9XFxuXFxgXFxgXFxgYCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHJlbG9hZFBlcnNvbmFzKCkge1xuICAgIGF3YWl0IHRoaXMubG9hZFBlcnNvbmFzKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCflIQgUmVsb2FkZWQgJHt0aGlzLnBlcnNvbmFzLnNpemV9IHBlcnNvbmFzIGZyb20gJHt0aGlzLnBlcnNvbmFzRGlyfWAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICAvLyA9PT09PSBFbGVtZW50IE1ldGhvZHMgKEdlbmVyaWMgZm9yIGFsbCBlbGVtZW50IHR5cGVzKSA9PT09PVxuICBcbiAgYXN5bmMgbGlzdEVsZW1lbnRzKHR5cGU6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAvLyBOb3JtYWxpemUgdGhlIHR5cGUgdG8gaGFuZGxlIGJvdGggcGx1cmFsIGFuZCBzaW5ndWxhciBmb3Jtc1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGUpO1xuICAgICAgXG4gICAgICBzd2l0Y2ggKG5vcm1hbGl6ZWRUeXBlKSB7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuUEVSU09OQTpcbiAgICAgICAgICByZXR1cm4gdGhpcy5saXN0UGVyc29uYXMoKTtcbiAgICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5TS0lMTDoge1xuICAgICAgICAgIGNvbnN0IHNraWxscyA9IGF3YWl0IHRoaXMuc2tpbGxNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICBpZiAoc2tpbGxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIk5vIHNraWxscyBhcmUgY3VycmVudGx5IGluc3RhbGxlZC4gVGhlIERvbGxob3VzZU1DUCBjb2xsZWN0aW9uIGhhcyBza2lsbHMgZm9yIGNvZGUgcmV2aWV3LCBkYXRhIGFuYWx5c2lzLCBjcmVhdGl2ZSB3cml0aW5nIGFuZCBtb3JlLiBXb3VsZCB5b3UgbGlrZSBtZSB0byBzaG93IHlvdSB3aGF0J3MgYXZhaWxhYmxlPyBKdXN0IHNheSBcXFwieWVzXFxcIiBvciBJIGNhbiBoZWxwIHlvdSBjcmVhdGUgYSBjdXN0b20gc2tpbGwuXCJcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IHNraWxsTGlzdCA9IHNraWxscy5tYXAoc2tpbGwgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcGxleGl0eSA9IHNraWxsLm1ldGFkYXRhLmNvbXBsZXhpdHkgfHwgJ2JlZ2lubmVyJztcbiAgICAgICAgICAgIGNvbnN0IGRvbWFpbnMgPSBza2lsbC5tZXRhZGF0YS5kb21haW5zPy5qb2luKCcsICcpIHx8ICdnZW5lcmFsJztcbiAgICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSBza2lsbC52ZXJzaW9uIHx8IHNraWxsLm1ldGFkYXRhLnZlcnNpb24gfHwgJzEuMC4wJztcbiAgICAgICAgICAgIHJldHVybiBg8J+boO+4jyAke3NraWxsLm1ldGFkYXRhLm5hbWV9ICh2JHt2ZXJzaW9ufSkgLSAke3NraWxsLm1ldGFkYXRhLmRlc2NyaXB0aW9ufVxcbiAgIENvbXBsZXhpdHk6ICR7Y29tcGxleGl0eX0gfCBEb21haW5zOiAke2RvbWFpbnN9YDtcbiAgICAgICAgICB9KS5qb2luKCdcXG5cXG4nKTtcbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDwn5OaIEF2YWlsYWJsZSBTa2lsbHM6XFxuXFxuJHtza2lsbExpc3R9YFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlRFTVBMQVRFOiB7XG4gICAgICAgICAgY29uc3QgdGVtcGxhdGVzID0gYXdhaXQgdGhpcy50ZW1wbGF0ZU1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIGlmICh0ZW1wbGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IFwiWW91IGhhdmVuJ3QgaW5zdGFsbGVkIGFueSB0ZW1wbGF0ZXMgeWV0LiBXb3VsZCB5b3UgbGlrZSB0byBzZWUgYXZhaWxhYmxlIHRlbXBsYXRlcyBmb3IgZW1haWxzLCByZXBvcnRzLCBhbmQgZG9jdW1lbnRhdGlvbj8gSSBjYW4gc2hvdyB5b3UgZXhhbXBsZXMgZnJvbSB0aGUgY29sbGVjdGlvbiBvciBoZWxwIHlvdSBjcmVhdGUgeW91ciBvd24uIFdoYXQgd291bGQgeW91IHByZWZlcj9cIlxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgdGVtcGxhdGVMaXN0ID0gdGVtcGxhdGVzLm1hcCh0ZW1wbGF0ZSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSB0ZW1wbGF0ZS5tZXRhZGF0YS52YXJpYWJsZXM/Lm1hcCh2ID0+IHYubmFtZSkuam9pbignLCAnKSB8fCAnbm9uZSc7XG4gICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gdGVtcGxhdGUudmVyc2lvbiB8fCB0ZW1wbGF0ZS5tZXRhZGF0YS52ZXJzaW9uIHx8ICcxLjAuMCc7XG4gICAgICAgICAgICByZXR1cm4gYPCfk4QgJHt0ZW1wbGF0ZS5tZXRhZGF0YS5uYW1lfSAodiR7dmVyc2lvbn0pIC0gJHt0ZW1wbGF0ZS5tZXRhZGF0YS5kZXNjcmlwdGlvbn1cXG4gICBWYXJpYWJsZXM6ICR7dmFyaWFibGVzfWA7XG4gICAgICAgICAgfSkuam9pbignXFxuXFxuJyk7XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg8J+TnSBBdmFpbGFibGUgVGVtcGxhdGVzOlxcblxcbiR7dGVtcGxhdGVMaXN0fWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5BR0VOVDoge1xuICAgICAgICAgIGNvbnN0IGFnZW50cyA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICBpZiAoYWdlbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIk5vIGFnZW50cyBpbnN0YWxsZWQgeWV0LiBBZ2VudHMgYXJlIGF1dG9ub21vdXMgaGVscGVycyB0aGF0IGNhbiB3b3JrIG9uIHRhc2tzIGluZGVwZW5kZW50bHkuIFRoZSBEb2xsaG91c2VNQ1AgY29sbGVjdGlvbiBpbmNsdWRlcyB0YXNrIG1hbmFnZXJzLCByZXNlYXJjaCBhc3Npc3RhbnRzLCBhbmQgbW9yZS4gV291bGQgeW91IGxpa2UgdG8gYnJvd3NlIGF2YWlsYWJsZSBhZ2VudHMgb3IgbGVhcm4gaG93IHRvIGNyZWF0ZSB5b3VyIG93bj9cIlxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgYWdlbnRMaXN0ID0gYWdlbnRzLm1hcChhZ2VudCA9PiB7XG4gICAgICAgICAgICBjb25zdCBzcGVjaWFsaXphdGlvbnMgPSAoYWdlbnQubWV0YWRhdGEgYXMgYW55KS5zcGVjaWFsaXphdGlvbnM/LmpvaW4oJywgJykgfHwgJ2dlbmVyYWwnO1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzID0gYWdlbnQuZ2V0U3RhdHVzKCk7XG4gICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gYWdlbnQudmVyc2lvbiB8fCBhZ2VudC5tZXRhZGF0YS52ZXJzaW9uIHx8ICcxLjAuMCc7XG4gICAgICAgICAgICByZXR1cm4gYPCfpJYgJHthZ2VudC5tZXRhZGF0YS5uYW1lfSAodiR7dmVyc2lvbn0pIC0gJHthZ2VudC5tZXRhZGF0YS5kZXNjcmlwdGlvbn1cXG4gICBTdGF0dXM6ICR7c3RhdHVzfSB8IFNwZWNpYWxpemF0aW9uczogJHtzcGVjaWFsaXphdGlvbnN9YDtcbiAgICAgICAgICB9KS5qb2luKCdcXG5cXG4nKTtcbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDwn6SWIEF2YWlsYWJsZSBBZ2VudHM6XFxuXFxuJHthZ2VudExpc3R9YFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBVbmtub3duIGVsZW1lbnQgdHlwZSAnJHt0eXBlfScuIEF2YWlsYWJsZSB0eXBlczogJHtPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5qb2luKCcsICcpfSAob3IgbGVnYWN5IHBsdXJhbCBmb3JtczogcGVyc29uYXMsIHNraWxscywgdGVtcGxhdGVzLCBhZ2VudHMpYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5oYW5kbGVMaXN0RWxlbWVudHMnLCBlcnJvciwgeyB0eXBlIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBsaXN0ICR7dHlwZX06ICR7RXJyb3JIYW5kbGVyLmdldFVzZXJNZXNzYWdlKGVycm9yKX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgYWN0aXZhdGVFbGVtZW50KG5hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgdHlwZSB0byBoYW5kbGUgYm90aCBwbHVyYWwgYW5kIHNpbmd1bGFyIGZvcm1zXG4gICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMubm9ybWFsaXplRWxlbWVudFR5cGUodHlwZSk7XG4gICAgICBcbiAgICAgIHN3aXRjaCAobm9ybWFsaXplZFR5cGUpIHtcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5QRVJTT05BOlxuICAgICAgICAgIHJldHVybiB0aGlzLmFjdGl2YXRlUGVyc29uYShuYW1lKTtcbiAgICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5TS0lMTDoge1xuICAgICAgICAgIC8vIFVzZSBmbGV4aWJsZSBmaW5kaW5nIHRvIHN1cHBvcnQgYm90aCBkaXNwbGF5IG5hbWUgYW5kIGZpbGVuYW1lXG4gICAgICAgICAgY29uc3QgYWxsU2tpbGxzID0gYXdhaXQgdGhpcy5za2lsbE1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIGNvbnN0IHNraWxsID0gYXdhaXQgdGhpcy5maW5kRWxlbWVudEZsZXhpYmx5KG5hbWUsIGFsbFNraWxscyk7XG4gICAgICAgICAgaWYgKCFza2lsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBg4p2MIFNraWxsICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLyBBY3RpdmF0ZSB0aGUgc2tpbGxcbiAgICAgICAgICBhd2FpdCBza2lsbC5hY3RpdmF0ZT8uKCk7XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogYOKchSBTa2lsbCAnJHtuYW1lfScgYWN0aXZhdGVkXFxuXFxuJHtza2lsbC5pbnN0cnVjdGlvbnN9YFxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6IHtcbiAgICAgICAgICAvLyBVc2UgZmxleGlibGUgZmluZGluZyB0byBzdXBwb3J0IGJvdGggZGlzcGxheSBuYW1lIGFuZCBmaWxlbmFtZVxuICAgICAgICAgIGNvbnN0IGFsbFRlbXBsYXRlcyA9IGF3YWl0IHRoaXMudGVtcGxhdGVNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IGF3YWl0IHRoaXMuZmluZEVsZW1lbnRGbGV4aWJseShuYW1lLCBhbGxUZW1wbGF0ZXMpO1xuICAgICAgICAgIGlmICghdGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogYOKdjCBUZW1wbGF0ZSAnJHtuYW1lfScgbm90IGZvdW5kYFxuICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgdmFyaWFibGVzID0gdGVtcGxhdGUubWV0YWRhdGEudmFyaWFibGVzPy5tYXAoKHY6IGFueSkgPT4gdi5uYW1lKS5qb2luKCcsICcpIHx8ICdub25lJztcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinIUgVGVtcGxhdGUgJyR7bmFtZX0nIHJlYWR5IHRvIHVzZVxcblZhcmlhYmxlczogJHt2YXJpYWJsZXN9XFxuXFxuVXNlICdyZW5kZXJfdGVtcGxhdGUnIHRvIGdlbmVyYXRlIGNvbnRlbnQgd2l0aCB0aGlzIHRlbXBsYXRlLmBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5BR0VOVDoge1xuICAgICAgICAgIC8vIFVzZSBmbGV4aWJsZSBmaW5kaW5nIHRvIHN1cHBvcnQgYm90aCBkaXNwbGF5IG5hbWUgYW5kIGZpbGVuYW1lXG4gICAgICAgICAgY29uc3QgYWxsQWdlbnRzID0gYXdhaXQgdGhpcy5hZ2VudE1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIGNvbnN0IGFnZW50ID0gYXdhaXQgdGhpcy5maW5kRWxlbWVudEZsZXhpYmx5KG5hbWUsIGFsbEFnZW50cyk7XG4gICAgICAgICAgaWYgKCFhZ2VudCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBg4p2MIEFnZW50ICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLyBBY3RpdmF0ZSB0aGUgYWdlbnRcbiAgICAgICAgICBhd2FpdCBhZ2VudC5hY3RpdmF0ZSgpO1xuICAgICAgICAgIFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKchSBBZ2VudCAnJHtuYW1lfScgYWN0aXZhdGVkIGFuZCByZWFkeVxcblNwZWNpYWxpemF0aW9uczogJHsoYWdlbnQubWV0YWRhdGEgYXMgYW55KS5zcGVjaWFsaXphdGlvbnM/LmpvaW4oJywgJykgfHwgJ2dlbmVyYWwnfVxcblxcblVzZSAnZXhlY3V0ZV9hZ2VudCcgdG8gZ2l2ZSB0aGlzIGFnZW50IGEgZ29hbC5gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIFVua25vd24gZWxlbWVudCB0eXBlICcke3R5cGV9J2BcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdEb2xsaG91c2VNQ1BTZXJ2ZXIuaGFuZGxlQWN0aXZhdGVFbGVtZW50JywgZXJyb3IsIHsgdHlwZSwgbmFtZSB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gYWN0aXZhdGUgJHt0eXBlfSAnJHtuYW1lfSc6ICR7RXJyb3JIYW5kbGVyLmdldFVzZXJNZXNzYWdlKGVycm9yKX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgZ2V0QWN0aXZlRWxlbWVudHModHlwZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgdHlwZSB0byBoYW5kbGUgYm90aCBwbHVyYWwgYW5kIHNpbmd1bGFyIGZvcm1zXG4gICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMubm9ybWFsaXplRWxlbWVudFR5cGUodHlwZSk7XG4gICAgICBcbiAgICAgIHN3aXRjaCAobm9ybWFsaXplZFR5cGUpIHtcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5QRVJTT05BOlxuICAgICAgICAgIHJldHVybiB0aGlzLmdldEFjdGl2ZVBlcnNvbmEoKTtcbiAgICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5TS0lMTDoge1xuICAgICAgICAgIGNvbnN0IHNraWxscyA9IGF3YWl0IHRoaXMuc2tpbGxNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICBjb25zdCBhY3RpdmVTa2lsbHMgPSBza2lsbHMuZmlsdGVyKHMgPT4gcy5nZXRTdGF0dXMoKSA9PT0gJ2FjdGl2ZScpO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmIChhY3RpdmVTa2lsbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IFwi8J+TiyBObyBhY3RpdmUgc2tpbGxzXCJcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IHNraWxsTGlzdCA9IGFjdGl2ZVNraWxscy5tYXAocyA9PiBg8J+boO+4jyAke3MubWV0YWRhdGEubmFtZX1gKS5qb2luKCcsICcpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYEFjdGl2ZSBza2lsbHM6ICR7c2tpbGxMaXN0fWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURToge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogXCLwn5OdIFRlbXBsYXRlcyBhcmUgc3RhdGVsZXNzIGFuZCBhY3RpdmF0ZWQgb24tZGVtYW5kIHdoZW4gcmVuZGVyaW5nXCJcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5BR0VOVDoge1xuICAgICAgICAgIGNvbnN0IGFnZW50cyA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICBjb25zdCBhY3RpdmVBZ2VudHMgPSBhZ2VudHMuZmlsdGVyKGEgPT4gYS5nZXRTdGF0dXMoKSA9PT0gJ2FjdGl2ZScpO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmIChhY3RpdmVBZ2VudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IFwi8J+kliBObyBhY3RpdmUgYWdlbnRzXCJcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IGFnZW50TGlzdCA9IGFjdGl2ZUFnZW50cy5tYXAoYSA9PiB7XG4gICAgICAgICAgICBjb25zdCBnb2FscyA9IChhIGFzIGFueSkuc3RhdGU/LmdvYWxzPy5sZW5ndGggfHwgMDtcbiAgICAgICAgICAgIHJldHVybiBg8J+kliAke2EubWV0YWRhdGEubmFtZX0gKCR7Z29hbHN9IGFjdGl2ZSBnb2FscylgO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcbicpO1xuICAgICAgICAgIFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYEFjdGl2ZSBhZ2VudHM6XFxuJHthZ2VudExpc3R9YFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBVbmtub3duIGVsZW1lbnQgdHlwZSAnJHt0eXBlfSdgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGdldCBhY3RpdmUgJHt0eXBlfTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGdldCBhY3RpdmUgJHt0eXBlfTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgZGVhY3RpdmF0ZUVsZW1lbnQobmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gTm9ybWFsaXplIHRoZSB0eXBlIHRvIGhhbmRsZSBib3RoIHBsdXJhbCBhbmQgc2luZ3VsYXIgZm9ybXNcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdGhpcy5ub3JtYWxpemVFbGVtZW50VHlwZSh0eXBlKTtcbiAgICAgIFxuICAgICAgc3dpdGNoIChub3JtYWxpemVkVHlwZSkge1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlBFUlNPTkE6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGVhY3RpdmF0ZVBlcnNvbmEoKTtcbiAgICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5TS0lMTDoge1xuICAgICAgICAgIC8vIFVzZSBmbGV4aWJsZSBmaW5kaW5nIHRvIHN1cHBvcnQgYm90aCBkaXNwbGF5IG5hbWUgYW5kIGZpbGVuYW1lXG4gICAgICAgICAgY29uc3QgYWxsU2tpbGxzID0gYXdhaXQgdGhpcy5za2lsbE1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIGNvbnN0IHNraWxsID0gYXdhaXQgdGhpcy5maW5kRWxlbWVudEZsZXhpYmx5KG5hbWUsIGFsbFNraWxscyk7XG4gICAgICAgICAgaWYgKCFza2lsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBg4p2MIFNraWxsICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBhd2FpdCBza2lsbC5kZWFjdGl2YXRlPy4oKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinIUgU2tpbGwgJyR7c2tpbGwubWV0YWRhdGEubmFtZX0nIGRlYWN0aXZhdGVkYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlRFTVBMQVRFOiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBcIvCfk50gVGVtcGxhdGVzIGFyZSBzdGF0ZWxlc3MgLSBub3RoaW5nIHRvIGRlYWN0aXZhdGVcIlxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLkFHRU5UOiB7XG4gICAgICAgICAgLy8gVXNlIGZsZXhpYmxlIGZpbmRpbmcgdG8gc3VwcG9ydCBib3RoIGRpc3BsYXkgbmFtZSBhbmQgZmlsZW5hbWVcbiAgICAgICAgICBjb25zdCBhbGxBZ2VudHMgPSBhd2FpdCB0aGlzLmFnZW50TWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgY29uc3QgYWdlbnQgPSBhd2FpdCB0aGlzLmZpbmRFbGVtZW50RmxleGlibHkobmFtZSwgYWxsQWdlbnRzKTtcbiAgICAgICAgICBpZiAoIWFnZW50KSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IGDinYwgQWdlbnQgJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGF3YWl0IGFnZW50LmRlYWN0aXZhdGUoKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinIUgQWdlbnQgJyR7YWdlbnQubWV0YWRhdGEubmFtZX0nIGRlYWN0aXZhdGVkYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBVbmtub3duIGVsZW1lbnQgdHlwZSAnJHt0eXBlfSdgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGRlYWN0aXZhdGUgJHt0eXBlfSAnJHtuYW1lfSc6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byBkZWFjdGl2YXRlICR7dHlwZX0gJyR7bmFtZX0nOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBnZXRFbGVtZW50RGV0YWlscyhuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAvLyBOb3JtYWxpemUgdGhlIHR5cGUgdG8gaGFuZGxlIGJvdGggcGx1cmFsIGFuZCBzaW5ndWxhciBmb3Jtc1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLm5vcm1hbGl6ZUVsZW1lbnRUeXBlKHR5cGUpO1xuICAgICAgXG4gICAgICBzd2l0Y2ggKG5vcm1hbGl6ZWRUeXBlKSB7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuUEVSU09OQTpcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQZXJzb25hRGV0YWlscyhuYW1lKTtcbiAgICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5TS0lMTDoge1xuICAgICAgICAgIC8vIFVzZSBmbGV4aWJsZSBmaW5kaW5nIHRvIHN1cHBvcnQgYm90aCBkaXNwbGF5IG5hbWUgYW5kIGZpbGVuYW1lXG4gICAgICAgICAgY29uc3QgYWxsU2tpbGxzID0gYXdhaXQgdGhpcy5za2lsbE1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIGNvbnN0IHNraWxsID0gYXdhaXQgdGhpcy5maW5kRWxlbWVudEZsZXhpYmx5KG5hbWUsIGFsbFNraWxscyk7XG4gICAgICAgICAgaWYgKCFza2lsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBg4p2MIFNraWxsICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBkZXRhaWxzID0gW1xuICAgICAgICAgICAgYPCfm6DvuI8gKioke3NraWxsLm1ldGFkYXRhLm5hbWV9KipgLFxuICAgICAgICAgICAgYCR7c2tpbGwubWV0YWRhdGEuZGVzY3JpcHRpb259YCxcbiAgICAgICAgICAgIGBgLFxuICAgICAgICAgICAgYCoqQ29tcGxleGl0eSoqOiAke3NraWxsLm1ldGFkYXRhLmNvbXBsZXhpdHkgfHwgJ2JlZ2lubmVyJ31gLFxuICAgICAgICAgICAgYCoqRG9tYWlucyoqOiAke3NraWxsLm1ldGFkYXRhLmRvbWFpbnM/LmpvaW4oJywgJykgfHwgJ2dlbmVyYWwnfWAsXG4gICAgICAgICAgICBgKipMYW5ndWFnZXMqKjogJHtza2lsbC5tZXRhZGF0YS5sYW5ndWFnZXM/LmpvaW4oJywgJykgfHwgJ2FueSd9YCxcbiAgICAgICAgICAgIGAqKlByZXJlcXVpc2l0ZXMqKjogJHtza2lsbC5tZXRhZGF0YS5wcmVyZXF1aXNpdGVzPy5qb2luKCcsICcpIHx8ICdub25lJ31gLFxuICAgICAgICAgICAgYGAsXG4gICAgICAgICAgICBgKipJbnN0cnVjdGlvbnMqKjpgLFxuICAgICAgICAgICAgc2tpbGwuaW5zdHJ1Y3Rpb25zXG4gICAgICAgICAgXTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoc2tpbGwubWV0YWRhdGEucGFyYW1ldGVycyAmJiBza2lsbC5tZXRhZGF0YS5wYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGRldGFpbHMucHVzaCgnJywgJyoqUGFyYW1ldGVycyoqOicpO1xuICAgICAgICAgICAgc2tpbGwubWV0YWRhdGEucGFyYW1ldGVycy5mb3JFYWNoKChwOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgZGV0YWlscy5wdXNoKGAtICR7cC5uYW1lfSAoJHtwLnR5cGV9KTogJHtwLmRlc2NyaXB0aW9ufWApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogZGV0YWlscy5qb2luKCdcXG4nKVxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlRFTVBMQVRFOiB7XG4gICAgICAgICAgLy8gVXNlIGZsZXhpYmxlIGZpbmRpbmcgdG8gc3VwcG9ydCBib3RoIGRpc3BsYXkgbmFtZSBhbmQgZmlsZW5hbWVcbiAgICAgICAgICBjb25zdCBhbGxUZW1wbGF0ZXMgPSBhd2FpdCB0aGlzLnRlbXBsYXRlTWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBhd2FpdCB0aGlzLmZpbmRFbGVtZW50RmxleGlibHkobmFtZSwgYWxsVGVtcGxhdGVzKTtcbiAgICAgICAgICBpZiAoIXRlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IGDinYwgVGVtcGxhdGUgJyR7bmFtZX0nIG5vdCBmb3VuZGBcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IGRldGFpbHMgPSBbXG4gICAgICAgICAgICBg8J+ThCAqKiR7dGVtcGxhdGUubWV0YWRhdGEubmFtZX0qKmAsXG4gICAgICAgICAgICBgJHt0ZW1wbGF0ZS5tZXRhZGF0YS5kZXNjcmlwdGlvbn1gLFxuICAgICAgICAgICAgYGAsXG4gICAgICAgICAgICBgKipPdXRwdXQgRm9ybWF0Kio6ICR7KHRlbXBsYXRlLm1ldGFkYXRhIGFzIGFueSkub3V0cHV0X2Zvcm1hdCB8fCAndGV4dCd9YCxcbiAgICAgICAgICAgIGAqKlRlbXBsYXRlIENvbnRlbnQqKjpgLFxuICAgICAgICAgICAgJ2BgYCcsXG4gICAgICAgICAgICB0ZW1wbGF0ZS5jb250ZW50LFxuICAgICAgICAgICAgJ2BgYCdcbiAgICAgICAgICBdO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmICh0ZW1wbGF0ZS5tZXRhZGF0YS52YXJpYWJsZXMgJiYgdGVtcGxhdGUubWV0YWRhdGEudmFyaWFibGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGRldGFpbHMucHVzaCgnJywgJyoqVmFyaWFibGVzKio6Jyk7XG4gICAgICAgICAgICB0ZW1wbGF0ZS5tZXRhZGF0YS52YXJpYWJsZXMuZm9yRWFjaCgodjogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGRldGFpbHMucHVzaChgLSAke3YubmFtZX0gKCR7di50eXBlfSk6ICR7di5kZXNjcmlwdGlvbn1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGRldGFpbHMuam9pbignXFxuJylcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5BR0VOVDoge1xuICAgICAgICAgIC8vIFVzZSBmbGV4aWJsZSBmaW5kaW5nIHRvIHN1cHBvcnQgYm90aCBkaXNwbGF5IG5hbWUgYW5kIGZpbGVuYW1lXG4gICAgICAgICAgY29uc3QgYWxsQWdlbnRzID0gYXdhaXQgdGhpcy5hZ2VudE1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIGNvbnN0IGFnZW50ID0gYXdhaXQgdGhpcy5maW5kRWxlbWVudEZsZXhpYmx5KG5hbWUsIGFsbEFnZW50cyk7XG4gICAgICAgICAgaWYgKCFhZ2VudCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICB0ZXh0OiBg4p2MIEFnZW50ICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBkZXRhaWxzID0gW1xuICAgICAgICAgICAgYPCfpJYgKioke2FnZW50Lm1ldGFkYXRhLm5hbWV9KipgLFxuICAgICAgICAgICAgYCR7YWdlbnQubWV0YWRhdGEuZGVzY3JpcHRpb259YCxcbiAgICAgICAgICAgIGBgLFxuICAgICAgICAgICAgYCoqU3RhdHVzKio6ICR7YWdlbnQuZ2V0U3RhdHVzKCl9YCxcbiAgICAgICAgICAgIGAqKlNwZWNpYWxpemF0aW9ucyoqOiAkeyhhZ2VudC5tZXRhZGF0YSBhcyBhbnkpLnNwZWNpYWxpemF0aW9ucz8uam9pbignLCAnKSB8fCAnZ2VuZXJhbCd9YCxcbiAgICAgICAgICAgIGAqKkRlY2lzaW9uIEZyYW1ld29yayoqOiAkeyhhZ2VudC5tZXRhZGF0YSBhcyBhbnkpLmRlY2lzaW9uRnJhbWV3b3JrIHx8ICdydWxlLWJhc2VkJ31gLFxuICAgICAgICAgICAgYCoqUmlzayBUb2xlcmFuY2UqKjogJHsoYWdlbnQubWV0YWRhdGEgYXMgYW55KS5yaXNrVG9sZXJhbmNlIHx8ICdsb3cnfWAsXG4gICAgICAgICAgICBgYCxcbiAgICAgICAgICAgIGAqKkluc3RydWN0aW9ucyoqOmAsXG4gICAgICAgICAgICAoYWdlbnQgYXMgYW55KS5pbnN0cnVjdGlvbnMgfHwgJ05vIGluc3RydWN0aW9ucyBhdmFpbGFibGUnXG4gICAgICAgICAgXTtcbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBhZ2VudFN0YXRlID0gKGFnZW50IGFzIGFueSkuc3RhdGU7XG4gICAgICAgICAgaWYgKGFnZW50U3RhdGU/LmdvYWxzICYmIGFnZW50U3RhdGUuZ29hbHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGV0YWlscy5wdXNoKCcnLCAnKipDdXJyZW50IEdvYWxzKio6Jyk7XG4gICAgICAgICAgICBhZ2VudFN0YXRlLmdvYWxzLmZvckVhY2goKGc6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBkZXRhaWxzLnB1c2goYC0gJHtnLmRlc2NyaXB0aW9ufSAoJHtnLnN0YXR1c30pYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBkZXRhaWxzLmpvaW4oJ1xcbicpXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIFVua25vd24gZWxlbWVudCB0eXBlICcke3R5cGV9J2BcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZ2V0ICR7dHlwZX0gZGV0YWlscyBmb3IgJyR7bmFtZX0nOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gZ2V0ICR7dHlwZX0gZGV0YWlsczogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgcmVsb2FkRWxlbWVudHModHlwZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgdHlwZSB0byBoYW5kbGUgYm90aCBwbHVyYWwgYW5kIHNpbmd1bGFyIGZvcm1zXG4gICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IHRoaXMubm9ybWFsaXplRWxlbWVudFR5cGUodHlwZSk7XG4gICAgICBcbiAgICAgIHN3aXRjaCAobm9ybWFsaXplZFR5cGUpIHtcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5QRVJTT05BOlxuICAgICAgICAgIHJldHVybiB0aGlzLnJlbG9hZFBlcnNvbmFzKCk7XG4gICAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuU0tJTEw6IHtcbiAgICAgICAgICB0aGlzLnNraWxsTWFuYWdlci5jbGVhckNhY2hlKCk7XG4gICAgICAgICAgY29uc3Qgc2tpbGxzID0gYXdhaXQgdGhpcy5za2lsbE1hbmFnZXIubGlzdCgpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYPCflIQgUmVsb2FkZWQgJHtza2lsbHMubGVuZ3RofSBza2lsbHMgZnJvbSBwb3J0Zm9saW9gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6IHtcbiAgICAgICAgICAvLyBUZW1wbGF0ZSBtYW5hZ2VyIGRvZXNuJ3QgaGF2ZSBjbGVhckNhY2hlLCBqdXN0IGxpc3RcbiAgICAgICAgICBjb25zdCB0ZW1wbGF0ZXMgPSBhd2FpdCB0aGlzLnRlbXBsYXRlTWFuYWdlci5saXN0KCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg8J+UhCBSZWxvYWRlZCAke3RlbXBsYXRlcy5sZW5ndGh9IHRlbXBsYXRlcyBmcm9tIHBvcnRmb2xpb2BcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5BR0VOVDoge1xuICAgICAgICAgIC8vIEFnZW50IG1hbmFnZXIgZG9lc24ndCBoYXZlIGNsZWFyQ2FjaGUsIGp1c3QgbGlzdFxuICAgICAgICAgIGNvbnN0IGFnZW50cyA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmxpc3QoKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDwn5SEIFJlbG9hZGVkICR7YWdlbnRzLmxlbmd0aH0gYWdlbnRzIGZyb20gcG9ydGZvbGlvYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKdjCBVbmtub3duIGVsZW1lbnQgdHlwZSAnJHt0eXBlfSdgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHJlbG9hZCAke3R5cGV9OmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gcmVsb2FkICR7dHlwZX06ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIC8vIEVsZW1lbnQtc3BlY2lmaWMgbWV0aG9kc1xuICBhc3luYyByZW5kZXJUZW1wbGF0ZShuYW1lOiBzdHJpbmcsIHZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIC8vIFVzZSB0aGUgbmV3IFRlbXBsYXRlUmVuZGVyZXIgdXRpbGl0eSBmb3IgY2xlYW5lciBjb2RlIGFuZCBiZXR0ZXIgdmFsaWRhdGlvblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMudGVtcGxhdGVSZW5kZXJlci5yZW5kZXIobmFtZSwgdmFyaWFibGVzKTtcbiAgICBcbiAgICBpZiAocmVzdWx0LnN1Y2Nlc3MgJiYgcmVzdWx0LmNvbnRlbnQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYPCfk4QgUmVuZGVyZWQgdGVtcGxhdGUgJyR7bmFtZX0nOlxcblxcbiR7cmVzdWx0LmNvbnRlbnR9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MICR7cmVzdWx0LmVycm9yIHx8ICdGYWlsZWQgdG8gcmVuZGVyIHRlbXBsYXRlJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgYXN5bmMgZXhlY3V0ZUFnZW50KG5hbWU6IHN0cmluZywgZ29hbDogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFnZW50ID0gYXdhaXQgdGhpcy5hZ2VudE1hbmFnZXIuZmluZChhID0+IGEubWV0YWRhdGEubmFtZSA9PT0gbmFtZSk7XG4gICAgICBpZiAoIWFnZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCBBZ2VudCAnJHtuYW1lfScgbm90IGZvdW5kYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFNpbXBsZSBhZ2VudCBleGVjdXRpb24gc2ltdWxhdGlvblxuICAgICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICBzdW1tYXJ5OiBgQWdlbnQgJyR7bmFtZX0nIGlzIG5vdyB3b3JraW5nIG9uOiAke2dvYWx9YCxcbiAgICAgICAgc3RhdHVzOiAnaW4tcHJvZ3Jlc3MnLFxuICAgICAgICBhY3Rpb25zVGFrZW46IDFcbiAgICAgIH07XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYPCfpJYgQWdlbnQgJyR7bmFtZX0nIGV4ZWN1dGlvbiByZXN1bHQ6XFxuXFxuJHtyZXN1bHQuc3VtbWFyeX1cXG5cXG5TdGF0dXM6ICR7cmVzdWx0LnN0YXR1c31cXG5BY3Rpb25zIHRha2VuOiAke3Jlc3VsdC5hY3Rpb25zVGFrZW4gfHwgMH1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBleGVjdXRlIGFnZW50ICcke25hbWV9JzpgLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGV4ZWN1dGUgYWdlbnQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIGNyZWF0ZUVsZW1lbnQoYXJnczoge25hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nOyBjb250ZW50Pzogc3RyaW5nOyBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT59KSB7XG4gICAgLy8gRW5zdXJlIGluaXRpYWxpemF0aW9uIGZvciB0ZXN0IGNvbXBhdGliaWxpdHlcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgdHlwZSwgZGVzY3JpcHRpb24sIGNvbnRlbnQsIG1ldGFkYXRhIH0gPSBhcmdzO1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSBlbGVtZW50IHR5cGVcbiAgICAgIGlmICghT2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSkuaW5jbHVkZXModHlwZSBhcyBFbGVtZW50VHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBg4p2MIEludmFsaWQgZWxlbWVudCB0eXBlICcke3R5cGV9Jy4gVmFsaWQgdHlwZXM6ICR7T2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSkuam9pbignLCAnKX0gKG9yIGxlZ2FjeSBwbHVyYWwgZm9ybXM6IHBlcnNvbmFzLCBza2lsbHMsIHRlbXBsYXRlcywgYWdlbnRzKWBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSBpbnB1dHNcbiAgICAgIGNvbnN0IHZhbGlkYXRlZE5hbWUgPSB2YWxpZGF0ZUZpbGVuYW1lKG5hbWUpO1xuICAgICAgY29uc3QgdmFsaWRhdGVkRGVzY3JpcHRpb24gPSBzYW5pdGl6ZUlucHV0KGRlc2NyaXB0aW9uLCBTRUNVUklUWV9MSU1JVFMuTUFYX01FVEFEQVRBX0ZJRUxEX0xFTkdUSCk7XG4gICAgICBcbiAgICAgIC8vIENSSVRJQ0FMIEZJWDogVmFsaWRhdGUgY29udGVudCBzaXplIEJFRk9SRSBwcm9jZXNzaW5nIHRvIHByZXZlbnQgbWVtb3J5IGV4aGF1c3Rpb25cbiAgICAgIC8vIFRoaXMgcHJldmVudHMgQ2xhdWRlIGZyb20gdHJ5aW5nIHRvIG91dHB1dCBtYXNzaXZlIGNvbnRlbnQgaW4gcmVzcG9uc2VzXG4gICAgICBpZiAoY29udGVudCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhbGlkYXRlQ29udGVudFNpemUoY29udGVudCwgU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinYwgQ29udGVudCB0b28gbGFyZ2U6ICR7ZXJyb3IubWVzc2FnZX0uIE1heGltdW0gYWxsb3dlZCBzaXplIGlzICR7U0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSH0gY2hhcmFjdGVycyAoJHtNYXRoLmZsb29yKFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEggLyAxMDI0KX1LQikuYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFNFQ1VSSVRZIEZJWDogU2FuaXRpemUgbWV0YWRhdGEgdG8gcHJldmVudCBwcm90b3R5cGUgcG9sbHV0aW9uXG4gICAgICBjb25zdCBzYW5pdGl6ZWRNZXRhZGF0YSA9IHRoaXMuc2FuaXRpemVNZXRhZGF0YShtZXRhZGF0YSB8fCB7fSk7XG4gICAgICBcbiAgICAgIC8vIENyZWF0ZSBlbGVtZW50IGJhc2VkIG9uIHR5cGVcbiAgICAgIHN3aXRjaCAodHlwZSBhcyBFbGVtZW50VHlwZSkge1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlBFUlNPTkE6XG4gICAgICAgICAgLy8gVXNlIGV4aXN0aW5nIHBlcnNvbmEgY3JlYXRpb24gbG9naWNcbiAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVQZXJzb25hKFxuICAgICAgICAgICAgdmFsaWRhdGVkTmFtZSwgXG4gICAgICAgICAgICB2YWxpZGF0ZWREZXNjcmlwdGlvbiwgXG4gICAgICAgICAgICBjb250ZW50IHx8ICcnLFxuICAgICAgICAgICAgc2FuaXRpemVkTWV0YWRhdGE/LnRyaWdnZXJzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5TS0lMTDpcbiAgICAgICAgICBjb25zdCBza2lsbCA9IGF3YWl0IHRoaXMuc2tpbGxNYW5hZ2VyLmNyZWF0ZSh7XG4gICAgICAgICAgICBuYW1lOiB2YWxpZGF0ZWROYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHZhbGlkYXRlZERlc2NyaXB0aW9uLFxuICAgICAgICAgICAgLi4uc2FuaXRpemVkTWV0YWRhdGEsXG4gICAgICAgICAgICBjb250ZW50OiBjb250ZW50IHx8ICcnXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4pyFIENyZWF0ZWQgc2tpbGwgJyR7c2tpbGwubWV0YWRhdGEubmFtZX0nIHN1Y2Nlc3NmdWxseWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURTpcbiAgICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IGF3YWl0IHRoaXMudGVtcGxhdGVNYW5hZ2VyLmNyZWF0ZSh7XG4gICAgICAgICAgICBuYW1lOiB2YWxpZGF0ZWROYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHZhbGlkYXRlZERlc2NyaXB0aW9uLFxuICAgICAgICAgICAgY29udGVudDogY29udGVudCB8fCAnJyxcbiAgICAgICAgICAgIC4uLnNhbml0aXplZE1ldGFkYXRhXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4pyFIENyZWF0ZWQgdGVtcGxhdGUgJyR7dGVtcGxhdGUubWV0YWRhdGEubmFtZX0nIHN1Y2Nlc3NmdWxseWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgICBcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5BR0VOVDpcbiAgICAgICAgICBjb25zdCBhZ2VudFJlc3VsdCA9IGF3YWl0IHRoaXMuYWdlbnRNYW5hZ2VyLmNyZWF0ZShcbiAgICAgICAgICAgIHZhbGlkYXRlZE5hbWUsXG4gICAgICAgICAgICB2YWxpZGF0ZWREZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGNvbnRlbnQgfHwgJycsXG4gICAgICAgICAgICBzYW5pdGl6ZWRNZXRhZGF0YVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCFhZ2VudFJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IGDinYwgJHthZ2VudFJlc3VsdC5tZXNzYWdlfWBcbiAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYOKchSBDcmVhdGVkIGFnZW50ICcke3ZhbGlkYXRlZE5hbWV9JyBzdWNjZXNzZnVsbHlgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgICAgXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIEVsZW1lbnQgdHlwZSAnJHt0eXBlfScgaXMgbm90IHlldCBzdXBwb3J0ZWQgZm9yIGNyZWF0aW9uYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgZWxlbWVudDpgLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGNyZWF0ZSBlbGVtZW50OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyBlZGl0RWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGZpZWxkOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgUmVjb3JkPHN0cmluZywgYW55PiB8IGFueVtdfSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IG5hbWUsIHR5cGUsIGZpZWxkLCB2YWx1ZSB9ID0gYXJncztcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgZWxlbWVudCB0eXBlXG4gICAgICBpZiAoIU9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmluY2x1ZGVzKHR5cGUgYXMgRWxlbWVudFR5cGUpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCBJbnZhbGlkIGVsZW1lbnQgdHlwZSAnJHt0eXBlfScuIFZhbGlkIHR5cGVzOiAke09iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmpvaW4oJywgJyl9IChvciBsZWdhY3kgcGx1cmFsIGZvcm1zOiBwZXJzb25hcywgc2tpbGxzLCB0ZW1wbGF0ZXMsIGFnZW50cylgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRm9yIHBlcnNvbmFzLCB1c2UgZXhpc3RpbmcgZWRpdCBsb2dpY1xuICAgICAgaWYgKHR5cGUgPT09IEVsZW1lbnRUeXBlLlBFUlNPTkEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdFBlcnNvbmEobmFtZSwgZmllbGQsIFN0cmluZyh2YWx1ZSkpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBUWVBFIFNBRkVUWTogRGVmaW5lIGEgY29tbW9uIGludGVyZmFjZSBmb3IgZWxlbWVudCBtYW5hZ2Vyc1xuICAgICAgaW50ZXJmYWNlIEVsZW1lbnRNYW5hZ2VyQmFzZTxUPiB7XG4gICAgICAgIGZpbmQocHJlZGljYXRlOiAoZWxlbWVudDogVCkgPT4gYm9vbGVhbik6IFByb21pc2U8VCB8IHVuZGVmaW5lZD47XG4gICAgICAgIHNhdmUoZWxlbWVudDogVCwgZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEdldCB0aGUgYXBwcm9wcmlhdGUgbWFuYWdlciBiYXNlZCBvbiB0eXBlIHdpdGggcHJvcGVyIHR5cGluZ1xuICAgICAgbGV0IG1hbmFnZXI6IEVsZW1lbnRNYW5hZ2VyQmFzZTxTa2lsbCB8IFRlbXBsYXRlIHwgQWdlbnQ+IHwgbnVsbCA9IG51bGw7XG4gICAgICBsZXQgZWxlbWVudDogU2tpbGwgfCBUZW1wbGF0ZSB8IEFnZW50IHwgdW5kZWZpbmVkO1xuICAgICAgXG4gICAgICBzd2l0Y2ggKHR5cGUgYXMgRWxlbWVudFR5cGUpIHtcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5TS0lMTDpcbiAgICAgICAgICBtYW5hZ2VyID0gdGhpcy5za2lsbE1hbmFnZXIgYXMgRWxlbWVudE1hbmFnZXJCYXNlPFNraWxsPjtcbiAgICAgICAgICBlbGVtZW50ID0gYXdhaXQgdGhpcy5za2lsbE1hbmFnZXIuZmluZCgoZTogU2tpbGwpID0+IGUubWV0YWRhdGEubmFtZSA9PT0gbmFtZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6XG4gICAgICAgICAgbWFuYWdlciA9IHRoaXMudGVtcGxhdGVNYW5hZ2VyIGFzIEVsZW1lbnRNYW5hZ2VyQmFzZTxUZW1wbGF0ZT47XG4gICAgICAgICAgZWxlbWVudCA9IGF3YWl0IHRoaXMudGVtcGxhdGVNYW5hZ2VyLmZpbmQoKGU6IFRlbXBsYXRlKSA9PiBlLm1ldGFkYXRhLm5hbWUgPT09IG5hbWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLkFHRU5UOlxuICAgICAgICAgIG1hbmFnZXIgPSB0aGlzLmFnZW50TWFuYWdlciBhcyBFbGVtZW50TWFuYWdlckJhc2U8QWdlbnQ+O1xuICAgICAgICAgIGVsZW1lbnQgPSBhd2FpdCB0aGlzLmFnZW50TWFuYWdlci5maW5kKChlOiBBZ2VudCkgPT4gZS5tZXRhZGF0YS5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinYwgRWxlbWVudCB0eXBlICcke3R5cGV9JyBpcyBub3QgeWV0IHN1cHBvcnRlZCBmb3IgZWRpdGluZ2BcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgaWYgZWxlbWVudCB3YXMgZm91bmRcbiAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGDinYwgJHt0eXBlfSAnJHtuYW1lfScgbm90IGZvdW5kYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEhhbmRsZSBuZXN0ZWQgZmllbGQgdXBkYXRlcyAoZS5nLiwgXCJtZXRhZGF0YS5hdXRob3JcIilcbiAgICAgIGNvbnN0IGZpZWxkUGFydHMgPSBmaWVsZC5zcGxpdCgnLicpO1xuICAgICAgXG4gICAgICAvLyBTRUNVUklUWSBGSVg6IFZhbGlkYXRlIGZpZWxkIG5hbWVzIHRvIHByZXZlbnQgcHJvdG90eXBlIHBvbGx1dGlvblxuICAgICAgY29uc3QgZGFuZ2Vyb3VzUHJvcGVydGllcyA9IFsnX19wcm90b19fJywgJ2NvbnN0cnVjdG9yJywgJ3Byb3RvdHlwZSddO1xuICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIGZpZWxkUGFydHMpIHtcbiAgICAgICAgaWYgKGRhbmdlcm91c1Byb3BlcnRpZXMuaW5jbHVkZXMocGFydCkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinYwgSW52YWxpZCBmaWVsZCBuYW1lOiAnJHtwYXJ0fScgaXMgbm90IGFsbG93ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnNgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgbGV0IHRhcmdldDogYW55ID0gZWxlbWVudDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRQYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgLy8gU0VDVVJJVFk6IEFkZGl0aW9uYWwgY2hlY2sgdG8gcHJldmVudCBwcm90b3R5cGUgcG9sbHV0aW9uXG4gICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9PSAnb2JqZWN0JyB8fCB0YXJnZXQgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinYwgQ2Fubm90IHNldCBwcm9wZXJ0eSAnJHtmaWVsZFBhcnRzW2ldfScgb24gbm9uLW9iamVjdGBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKCF0YXJnZXRbZmllbGRQYXJ0c1tpXV0pIHtcbiAgICAgICAgICAvLyBTRUNVUklUWTogVXNlIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSB0byBhdm9pZCBwcm90b3R5cGUgY2hhaW4gcG9sbHV0aW9uXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZmllbGRQYXJ0c1tpXSwge1xuICAgICAgICAgICAgdmFsdWU6IHt9LFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0W2ZpZWxkUGFydHNbaV1dO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBVcGRhdGUgdGhlIGZpZWxkXG4gICAgICBjb25zdCBsYXN0RmllbGQgPSBmaWVsZFBhcnRzW2ZpZWxkUGFydHMubGVuZ3RoIC0gMV07XG4gICAgICAvLyBTRUNVUklUWTogVXNlIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBmb3IgdGhlIGZpbmFsIGFzc2lnbm1lbnQgdG9vXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBsYXN0RmllbGQsIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgLy8gVkVSU0lPTiBGSVg6IEhhbmRsZSB2ZXJzaW9uIGZpZWxkIHVwZGF0ZXMgZGlmZmVyZW50bHlcbiAgICAgIC8vIElmIHVzZXIgaXMgZGlyZWN0bHkgZWRpdGluZyB2ZXJzaW9uIGZpZWxkLCBkb24ndCBhdXRvLWluY3JlbWVudFxuICAgICAgaWYgKGZpZWxkID09PSAndmVyc2lvbicgfHwgZmllbGQgPT09ICdtZXRhZGF0YS52ZXJzaW9uJykge1xuICAgICAgICBjb25zdCB2ZXJzaW9uU3RyaW5nID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFZFUlNJT04gVkFMSURBVElPTjogVmFsaWRhdGUgdmVyc2lvbiBmb3JtYXRcbiAgICAgICAgLy8gQWNjZXB0IHNlbXZlciAoMS4wLjApLCB0d28tcGFydCAoMS4wKSwgb3Igc2luZ2xlIGRpZ2l0ICgxKVxuICAgICAgICAvLyBBbHNvIGFjY2VwdHMgcHJlLXJlbGVhc2UgdmVyc2lvbnMgKDEuMC4wLWJldGEsIDEuMC4wLWFscGhhLjEpXG4gICAgICAgIGNvbnN0IGlzVmFsaWRWZXJzaW9uID0gL14oXFxkKykoXFwuXFxkKyk/KFxcLlxcZCspPygtW2EtekEtWjAtOS4tXSspPyQvLnRlc3QodmVyc2lvblN0cmluZyk7XG4gICAgICAgIGlmICghaXNWYWxpZFZlcnNpb24pIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinYwgSW52YWxpZCB2ZXJzaW9uIGZvcm1hdDogJyR7dmVyc2lvblN0cmluZ30nLiBQbGVhc2UgdXNlIGZvcm1hdCBsaWtlIDEuMC4wLCAxLjAsIG9yIDFgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIEVSUk9SIEhBTkRMSU5HOiBXcmFwIHZlcnNpb24gdXBkYXRlIGluIHRyeS1jYXRjaFxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFVwZGF0ZSBib3RoIGxvY2F0aW9ucyB0byBlbnN1cmUgY29uc2lzdGVuY3lcbiAgICAgICAgICBlbGVtZW50LnZlcnNpb24gPSB2ZXJzaW9uU3RyaW5nO1xuICAgICAgICAgIGlmIChlbGVtZW50Lm1ldGFkYXRhKSB7XG4gICAgICAgICAgICBlbGVtZW50Lm1ldGFkYXRhLnZlcnNpb24gPSB2ZXJzaW9uU3RyaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byB1cGRhdGUgdmVyc2lvbiBmb3IgJHtuYW1lfTpgLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4p2MIEZhaWxlZCB0byB1cGRhdGUgdmVyc2lvbjogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvciBvdGhlciBmaWVsZCBlZGl0cywgYXV0by1pbmNyZW1lbnQgdmVyc2lvblxuICAgICAgICAvLyBWRVJTSU9OIEZJWDogVXBkYXRlIGJvdGggZWxlbWVudC52ZXJzaW9uIEFORCBlbGVtZW50Lm1ldGFkYXRhLnZlcnNpb25cbiAgICAgICAgLy8gUHJldmlvdXNseTogT25seSBlbGVtZW50LnZlcnNpb24gd2FzIHVwZGF0ZWQsIGJ1dCBzb21lIG1hbmFnZXJzIHJlYWQgZnJvbSBtZXRhZGF0YS52ZXJzaW9uXG4gICAgICAgIC8vIE5vdzogS2VlcCBib3RoIGluIHN5bmMgdG8gZW5zdXJlIHZlcnNpb24gcGVyc2lzdHMgY29ycmVjdGx5XG4gICAgICAgIFxuICAgICAgICAvLyBFUlJPUiBIQU5ETElORzogV3JhcCBhdXRvLWluY3JlbWVudCBpbiB0cnktY2F0Y2hcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoZWxlbWVudC52ZXJzaW9uKSB7XG4gICAgICAgICAgICAvLyBQUkUtUkVMRUFTRSBIQU5ETElORzogQ2hlY2sgZm9yIHByZS1yZWxlYXNlIHZlcnNpb25zXG4gICAgICAgICAgICBjb25zdCBwcmVSZWxlYXNlTWF0Y2ggPSBlbGVtZW50LnZlcnNpb24ubWF0Y2goL14oXFxkK1xcLlxcZCtcXC5cXGQrKSgtKFthLXpBLVowLTkuLV0rKSk/JC8pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAocHJlUmVsZWFzZU1hdGNoKSB7XG4gICAgICAgICAgICAgIC8vIEhhbmRsZSBwcmUtcmVsZWFzZSB2ZXJzaW9ucyAoZS5nLiwgMS4wLjAtYmV0YS4xKVxuICAgICAgICAgICAgICBjb25zdCBiYXNlVmVyc2lvbiA9IHByZVJlbGVhc2VNYXRjaFsxXTtcbiAgICAgICAgICAgICAgY29uc3QgcHJlUmVsZWFzZVRhZyA9IHByZVJlbGVhc2VNYXRjaFszXTtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIGlmIChwcmVSZWxlYXNlVGFnKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgaXQgaGFzIGEgcHJlLXJlbGVhc2UgdGFnLCBpbmNyZW1lbnQgdGhlIHByZS1yZWxlYXNlIG51bWJlclxuICAgICAgICAgICAgICAgIGNvbnN0IHByZVJlbGVhc2VOdW1iZXJNYXRjaCA9IHByZVJlbGVhc2VUYWcubWF0Y2goL14oW2EtekEtWl0rKVxcLj8oXFxkKyk/JC8pO1xuICAgICAgICAgICAgICAgIGlmIChwcmVSZWxlYXNlTnVtYmVyTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHByZVJlbGVhc2VUeXBlID0gcHJlUmVsZWFzZU51bWJlck1hdGNoWzFdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgcHJlUmVsZWFzZU51bWJlciA9IHBhcnNlSW50KHByZVJlbGVhc2VOdW1iZXJNYXRjaFsyXSB8fCAnMCcpICsgMTtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQudmVyc2lvbiA9IGAke2Jhc2VWZXJzaW9ufS0ke3ByZVJlbGVhc2VUeXBlfS4ke3ByZVJlbGVhc2VOdW1iZXJ9YDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8gQ29tcGxleCBwcmUtcmVsZWFzZSwganVzdCBpbmNyZW1lbnQgcGF0Y2hcbiAgICAgICAgICAgICAgICAgIGNvbnN0IFttYWpvciwgbWlub3IsIHBhdGNoXSA9IGJhc2VWZXJzaW9uLnNwbGl0KCcuJykubWFwKE51bWJlcik7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50LnZlcnNpb24gPSBgJHttYWpvcn0uJHttaW5vcn0uJHtwYXRjaCArIDF9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gUmVndWxhciBzZW12ZXIsIGluY3JlbWVudCBwYXRjaFxuICAgICAgICAgICAgICAgIGNvbnN0IFttYWpvciwgbWlub3IsIHBhdGNoXSA9IGJhc2VWZXJzaW9uLnNwbGl0KCcuJykubWFwKE51bWJlcik7XG4gICAgICAgICAgICAgICAgZWxlbWVudC52ZXJzaW9uID0gYCR7bWFqb3J9LiR7bWlub3J9LiR7cGF0Y2ggKyAxfWA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEhhbmRsZSBub24tc2VtdmVyIHZlcnNpb25zXG4gICAgICAgICAgICAgIGNvbnN0IHZlcnNpb25QYXJ0cyA9IGVsZW1lbnQudmVyc2lvbi5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICBpZiAodmVyc2lvblBhcnRzLmxlbmd0aCA+PSAzKSB7XG4gICAgICAgICAgICAgICAgLy8gU3RhbmRhcmQgc2VtdmVyIGZvcm1hdCAoZS5nLiwgMS4wLjApXG4gICAgICAgICAgICAgICAgY29uc3QgcGF0Y2ggPSBwYXJzZUludCh2ZXJzaW9uUGFydHNbMl0pIHx8IDA7XG4gICAgICAgICAgICAgICAgdmVyc2lvblBhcnRzWzJdID0gU3RyaW5nKHBhdGNoICsgMSk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC52ZXJzaW9uID0gdmVyc2lvblBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh2ZXJzaW9uUGFydHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgLy8gVHdvLXBhcnQgdmVyc2lvbiAoZS5nLiwgMS4wKSAtIGFkZCBwYXRjaCB2ZXJzaW9uXG4gICAgICAgICAgICAgICAgZWxlbWVudC52ZXJzaW9uID0gYCR7ZWxlbWVudC52ZXJzaW9ufS4xYDtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh2ZXJzaW9uUGFydHMubGVuZ3RoID09PSAxICYmIC9eXFxkKyQvLnRlc3QodmVyc2lvblBhcnRzWzBdKSkge1xuICAgICAgICAgICAgICAgIC8vIFNpbmdsZSBudW1iZXIgdmVyc2lvbiAoZS5nLiwgMSkgLSBjb252ZXJ0IHRvIHNlbXZlclxuICAgICAgICAgICAgICAgIGVsZW1lbnQudmVyc2lvbiA9IGAke2VsZW1lbnQudmVyc2lvbn0uMC4xYDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBOb24tc3RhbmRhcmQgdmVyc2lvbiAtIGFwcGVuZCBvciByZXBsYWNlIHdpdGggc3RhbmRhcmQgZm9ybWF0XG4gICAgICAgICAgICAgICAgZWxlbWVudC52ZXJzaW9uID0gJzEuMC4xJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBObyB2ZXJzaW9uIC0gc2V0IGluaXRpYWwgdmVyc2lvblxuICAgICAgICAgICAgZWxlbWVudC52ZXJzaW9uID0gJzEuMC4wJztcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gRW5zdXJlIG1ldGFkYXRhLnZlcnNpb24gaXMgYWxzbyB1cGRhdGVkIGZvciBtYW5hZ2VycyB0aGF0IHVzZSBpdFxuICAgICAgICAgIGlmIChlbGVtZW50Lm1ldGFkYXRhKSB7XG4gICAgICAgICAgICBlbGVtZW50Lm1ldGFkYXRhLnZlcnNpb24gPSBlbGVtZW50LnZlcnNpb247XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGF1dG8taW5jcmVtZW50IHZlcnNpb24gZm9yICR7bmFtZX06YCwgZXJyb3IpO1xuICAgICAgICAgIC8vIERvbid0IGZhaWwgdGhlIGVudGlyZSBvcGVyYXRpb24sIGp1c3QgbG9nIHRoZSBlcnJvclxuICAgICAgICAgIC8vIFZlcnNpb24gd2lsbCByZW1haW4gdW5jaGFuZ2VkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gU2F2ZSB0aGUgZWxlbWVudCAtIG5lZWQgdG8gZGV0ZXJtaW5lIGZpbGVuYW1lXG4gICAgICBjb25zdCBmaWxlbmFtZSA9IGAke2VsZW1lbnQubWV0YWRhdGEubmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05LV0vZywgJy0nKX0ubWRgO1xuICAgICAgLy8gVFlQRSBTQUZFVFk6IE5vIG5lZWQgZm9yICdhcyBhbnknIGNhc3QgYW55bW9yZSB3aXRoIHByb3BlciB0eXBpbmdcbiAgICAgIGF3YWl0IG1hbmFnZXIhLnNhdmUoZWxlbWVudCwgZmlsZW5hbWUpO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinIUgVXBkYXRlZCAke3R5cGV9ICcke25hbWV9JyAtICR7ZmllbGR9IHNldCB0bzogJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZWRpdCBlbGVtZW50OmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBGYWlsZWQgdG8gZWRpdCBlbGVtZW50OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBhc3luYyB2YWxpZGF0ZUVsZW1lbnQoYXJnczoge25hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBzdHJpY3Q/OiBib29sZWFufSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IG5hbWUsIHR5cGUsIHN0cmljdCA9IGZhbHNlIH0gPSBhcmdzO1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSBlbGVtZW50IHR5cGVcbiAgICAgIGlmICghT2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSkuaW5jbHVkZXModHlwZSBhcyBFbGVtZW50VHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBg4p2MIEludmFsaWQgZWxlbWVudCB0eXBlICcke3R5cGV9Jy4gVmFsaWQgdHlwZXM6ICR7T2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSkuam9pbignLCAnKX0gKG9yIGxlZ2FjeSBwbHVyYWwgZm9ybXM6IHBlcnNvbmFzLCBza2lsbHMsIHRlbXBsYXRlcywgYWdlbnRzKWBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBGb3IgcGVyc29uYXMsIHVzZSBleGlzdGluZyB2YWxpZGF0aW9uIGxvZ2ljXG4gICAgICBpZiAodHlwZSA9PT0gRWxlbWVudFR5cGUuUEVSU09OQSkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVBlcnNvbmEobmFtZSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEdldCB0aGUgYXBwcm9wcmlhdGUgbWFuYWdlciBiYXNlZCBvbiB0eXBlXG4gICAgICBsZXQgbWFuYWdlcjogU2tpbGxNYW5hZ2VyIHwgVGVtcGxhdGVNYW5hZ2VyIHwgQWdlbnRNYW5hZ2VyIHwgbnVsbCA9IG51bGw7XG4gICAgICBzd2l0Y2ggKHR5cGUgYXMgRWxlbWVudFR5cGUpIHtcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5TS0lMTDpcbiAgICAgICAgICBtYW5hZ2VyID0gdGhpcy5za2lsbE1hbmFnZXI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6XG4gICAgICAgICAgbWFuYWdlciA9IHRoaXMudGVtcGxhdGVNYW5hZ2VyO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLkFHRU5UOlxuICAgICAgICAgIG1hbmFnZXIgPSB0aGlzLmFnZW50TWFuYWdlcjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinYwgRWxlbWVudCB0eXBlICcke3R5cGV9JyBpcyBub3QgeWV0IHN1cHBvcnRlZCBmb3IgdmFsaWRhdGlvbmBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRmluZCB0aGUgZWxlbWVudFxuICAgICAgY29uc3QgZWxlbWVudCA9IGF3YWl0IG1hbmFnZXIhLmZpbmQoKGU6IGFueSkgPT4gZS5tZXRhZGF0YS5uYW1lID09PSBuYW1lKTtcbiAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGDinYwgJHt0eXBlfSAnJHtuYW1lfScgbm90IGZvdW5kYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFBlcmZvcm0gdmFsaWRhdGlvblxuICAgICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IGVsZW1lbnQudmFsaWRhdGUoKTtcbiAgICAgIFxuICAgICAgLy8gRm9ybWF0IHZhbGlkYXRpb24gcmVwb3J0XG4gICAgICBsZXQgcmVwb3J0ID0gYPCflI0gVmFsaWRhdGlvbiBSZXBvcnQgZm9yICR7dHlwZX0gJyR7bmFtZX0nOlxcbmA7XG4gICAgICByZXBvcnQgKz0gYCR7dmFsaWRhdGlvblJlc3VsdC52YWxpZCA/ICfinIUnIDogJ+KdjCd9IFN0YXR1czogJHt2YWxpZGF0aW9uUmVzdWx0LnZhbGlkID8gJ1ZhbGlkJyA6ICdJbnZhbGlkJ31cXG5cXG5gO1xuICAgICAgXG4gICAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5lcnJvcnMgJiYgdmFsaWRhdGlvblJlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXBvcnQgKz0gYOKdjCBFcnJvcnMgKCR7dmFsaWRhdGlvblJlc3VsdC5lcnJvcnMubGVuZ3RofSk6XFxuYDtcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdC5lcnJvcnMuZm9yRWFjaCgoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHJlcG9ydCArPSBgICAg4oCiICR7ZXJyb3IuZmllbGQgfHwgJ0dlbmVyYWwnfTogJHtlcnJvci5tZXNzYWdlfVxcbmA7XG4gICAgICAgICAgaWYgKGVycm9yLmZpeCkge1xuICAgICAgICAgICAgcmVwb3J0ICs9IGAgICAgIPCfkqEgRml4OiAke2Vycm9yLmZpeH1cXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJlcG9ydCArPSAnXFxuJztcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKHZhbGlkYXRpb25SZXN1bHQud2FybmluZ3MgJiYgdmFsaWRhdGlvblJlc3VsdC53YXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlcG9ydCArPSBg4pqg77iPICBXYXJuaW5ncyAoJHt2YWxpZGF0aW9uUmVzdWx0Lndhcm5pbmdzLmxlbmd0aH0pOlxcbmA7XG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQud2FybmluZ3MuZm9yRWFjaCgod2FybmluZzogYW55KSA9PiB7XG4gICAgICAgICAgcmVwb3J0ICs9IGAgICDigKIgJHt3YXJuaW5nLmZpZWxkIHx8ICdHZW5lcmFsJ306ICR7d2FybmluZy5tZXNzYWdlfVxcbmA7XG4gICAgICAgICAgaWYgKHdhcm5pbmcuc3VnZ2VzdGlvbikge1xuICAgICAgICAgICAgcmVwb3J0ICs9IGAgICAgIPCfkqEgU3VnZ2VzdGlvbjogJHt3YXJuaW5nLnN1Z2dlc3Rpb259XFxuYDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXBvcnQgKz0gJ1xcbic7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0LnN1Z2dlc3Rpb25zICYmIHZhbGlkYXRpb25SZXN1bHQuc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXBvcnQgKz0gYPCfkqEgU3VnZ2VzdGlvbnM6XFxuYDtcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdC5zdWdnZXN0aW9ucy5mb3JFYWNoKChzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICByZXBvcnQgKz0gYCAgIOKAoiAke3N1Z2dlc3Rpb259XFxuYDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEFkZCBzdHJpY3QgbW9kZSBhZGRpdGlvbmFsIGNoZWNrcyBpZiByZXF1ZXN0ZWRcbiAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgcmVwb3J0ICs9ICdcXG7wn5OLIFN0cmljdCBNb2RlOiBBZGRpdGlvbmFsIHF1YWxpdHkgY2hlY2tzIGFwcGxpZWQnO1xuICAgICAgfVxuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IHJlcG9ydFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gdmFsaWRhdGUgZWxlbWVudDpgLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIHZhbGlkYXRlIGVsZW1lbnQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIGRlbGV0ZUVsZW1lbnQoYXJnczoge25hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBkZWxldGVEYXRhPzogYm9vbGVhbn0pIHtcbiAgICAvLyBFbnN1cmUgaW5pdGlhbGl6YXRpb24gZm9yIHRlc3QgY29tcGF0aWJpbGl0eVxuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBuYW1lLCB0eXBlLCBkZWxldGVEYXRhIH0gPSBhcmdzO1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSBlbGVtZW50IHR5cGVcbiAgICAgIGlmICghT2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSkuaW5jbHVkZXModHlwZSBhcyBFbGVtZW50VHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBg4p2MIEludmFsaWQgZWxlbWVudCB0eXBlOiAke3R5cGV9XFxuVmFsaWQgdHlwZXM6ICR7T2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSkuam9pbignLCAnKX0gKG9yIGxlZ2FjeSBwbHVyYWwgZm9ybXM6IHBlcnNvbmFzLCBza2lsbHMsIHRlbXBsYXRlcywgYWdlbnRzKWBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBHZXQgdGhlIGFwcHJvcHJpYXRlIG1hbmFnZXIgYmFzZWQgb24gdHlwZVxuICAgICAgbGV0IG1hbmFnZXI6IFNraWxsTWFuYWdlciB8IFRlbXBsYXRlTWFuYWdlciB8IEFnZW50TWFuYWdlciB8IG51bGwgPSBudWxsO1xuICAgICAgc3dpdGNoICh0eXBlIGFzIEVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuU0tJTEw6XG4gICAgICAgICAgbWFuYWdlciA9IHRoaXMuc2tpbGxNYW5hZ2VyO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlRFTVBMQVRFOlxuICAgICAgICAgIG1hbmFnZXIgPSB0aGlzLnRlbXBsYXRlTWFuYWdlcjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5BR0VOVDpcbiAgICAgICAgICBtYW5hZ2VyID0gdGhpcy5hZ2VudE1hbmFnZXI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuUEVSU09OQTpcbiAgICAgICAgICAvLyBGb3IgcGVyc29uYXMsIHVzZSBhIGRpZmZlcmVudCBhcHByb2FjaFxuICAgICAgICAgIC8vIHBlcnNvbmFzRGlyIGlzIGd1YXJhbnRlZWQgdG8gYmUgc2V0IGFmdGVyIGVuc3VyZUluaXRpYWxpemVkKClcbiAgICAgICAgICBjb25zdCBwZXJzb25hUGF0aCA9IHBhdGguam9pbih0aGlzLnBlcnNvbmFzRGlyISwgYCR7bmFtZX0ubWRgKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZnMuYWNjZXNzKHBlcnNvbmFQYXRoKTtcbiAgICAgICAgICAgIGF3YWl0IGZzLnVubGluayhwZXJzb25hUGF0aCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFJlbG9hZCBwZXJzb25hcyB0byB1cGRhdGUgdGhlIGNhY2hlXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRQZXJzb25hcygpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IGDinIUgU3VjY2Vzc2Z1bGx5IGRlbGV0ZWQgcGVyc29uYSAnJHtuYW1lfSdgXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoKGVycm9yIGFzIGFueSkuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgICB0ZXh0OiBg4p2MICR7dHlwZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHR5cGUuc2xpY2UoMSl9ICcke25hbWV9JyBub3QgZm91bmRgXG4gICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinYwgRWxlbWVudCB0eXBlICcke3R5cGV9JyBpcyBub3QgeWV0IHN1cHBvcnRlZCBmb3IgZGVsZXRpb25gXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEVuc3VyZSBtYW5hZ2VyIHdhcyBhc3NpZ25lZCAoVHlwZVNjcmlwdCB0eXBlIHNhZmV0eSlcbiAgICAgIGlmICghbWFuYWdlcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGDinYwgRWxlbWVudCB0eXBlICcke3R5cGV9JyBpcyBub3Qgc3VwcG9ydGVkIGZvciBkZWxldGlvbmBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBGaW5kIHRoZSBlbGVtZW50IGZpcnN0IHRvIGNoZWNrIGlmIGl0IGV4aXN0c1xuICAgICAgY29uc3QgZWxlbWVudCA9IGF3YWl0IG1hbmFnZXIhLmZpbmQoKGU6IGFueSkgPT4gZS5tZXRhZGF0YS5uYW1lID09PSBuYW1lKTtcbiAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGDinYwgJHt0eXBlfSAnJHtuYW1lfScgbm90IGZvdW5kYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGZvciBhc3NvY2lhdGVkIGRhdGEgZmlsZXNcbiAgICAgIGxldCBkYXRhRmlsZXM6IHN0cmluZ1tdID0gW107XG4gICAgICBcbiAgICAgIC8vIEFnZW50LXNwZWNpZmljOiBDaGVjayBmb3Igc3RhdGUgZmlsZXNcbiAgICAgIGlmICh0eXBlID09PSBFbGVtZW50VHlwZS5BR0VOVCkge1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IHBhdGguam9pbih0aGlzLnBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihFbGVtZW50VHlwZS5BR0VOVCksICcuc3RhdGUnKTtcbiAgICAgICAgY29uc3Qgc3RhdGVGaWxlID0gcGF0aC5qb2luKHN0YXRlRGlyLCBgJHtuYW1lfS1zdGF0ZS5qc29uYCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc3RhdCA9IGF3YWl0IGZzLnN0YXQoc3RhdGVGaWxlKTtcbiAgICAgICAgICBkYXRhRmlsZXMucHVzaChgLSAuc3RhdGUvJHtuYW1lfS1zdGF0ZS5qc29uICgkeyhzdGF0LnNpemUgLyAxMDI0KS50b0ZpeGVkKDIpfSBLQilgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBObyBzdGF0ZSBmaWxlIGV4aXN0cywgd2hpY2ggaXMgZmluZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIE1lbW9yeS1zcGVjaWZpYzogQ2hlY2sgZm9yIHN0b3JhZ2UgZmlsZXNcbiAgICAgIGlmICh0eXBlID09PSBFbGVtZW50VHlwZS5NRU1PUlkpIHtcbiAgICAgICAgY29uc3Qgc3RvcmFnZURpciA9IHBhdGguam9pbih0aGlzLnBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihFbGVtZW50VHlwZS5NRU1PUlkpLCAnLnN0b3JhZ2UnKTtcbiAgICAgICAgY29uc3Qgc3RvcmFnZUZpbGUgPSBwYXRoLmpvaW4oc3RvcmFnZURpciwgYCR7bmFtZX0tbWVtb3J5Lmpzb25gKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzdGF0ID0gYXdhaXQgZnMuc3RhdChzdG9yYWdlRmlsZSk7XG4gICAgICAgICAgZGF0YUZpbGVzLnB1c2goYC0gLnN0b3JhZ2UvJHtuYW1lfS1tZW1vcnkuanNvbiAoJHsoc3RhdC5zaXplIC8gMTAyNCkudG9GaXhlZCgyKX0gS0IpYCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gTm8gc3RvcmFnZSBmaWxlIGV4aXN0cywgd2hpY2ggaXMgZmluZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEVuc2VtYmxlLXNwZWNpZmljOiBDaGVjayBmb3IgY29uZmlnIGZpbGVzXG4gICAgICBpZiAodHlwZSA9PT0gRWxlbWVudFR5cGUuRU5TRU1CTEUpIHtcbiAgICAgICAgY29uc3QgY29uZmlnRGlyID0gcGF0aC5qb2luKHRoaXMucG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLkVOU0VNQkxFKSwgJy5jb25maWdzJyk7XG4gICAgICAgIGNvbnN0IGNvbmZpZ0ZpbGUgPSBwYXRoLmpvaW4oY29uZmlnRGlyLCBgJHtuYW1lfS1jb25maWcuanNvbmApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHN0YXQgPSBhd2FpdCBmcy5zdGF0KGNvbmZpZ0ZpbGUpO1xuICAgICAgICAgIGRhdGFGaWxlcy5wdXNoKGAtIC5jb25maWdzLyR7bmFtZX0tY29uZmlnLmpzb24gKCR7KHN0YXQuc2l6ZSAvIDEwMjQpLnRvRml4ZWQoMil9IEtCKWApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIE5vIGNvbmZpZyBmaWxlIGV4aXN0cywgd2hpY2ggaXMgZmluZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIElmIGRhdGEgZmlsZXMgZXhpc3QgYW5kIGRlbGV0ZURhdGEgaXMgbm90IHNwZWNpZmllZCwgd2UgbmVlZCB0byBpbmZvcm0gdGhlIHVzZXJcbiAgICAgIGlmIChkYXRhRmlsZXMubGVuZ3RoID4gMCAmJiBkZWxldGVEYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBg4pqg77iPICBUaGlzICR7dHlwZX0gaGFzIGFzc29jaWF0ZWQgZGF0YSBmaWxlczpcXG4ke2RhdGFGaWxlcy5qb2luKCdcXG4nKX1cXG5cXG5Xb3VsZCB5b3UgbGlrZSB0byBkZWxldGUgdGhlc2UgZGF0YSBmaWxlcyBhcyB3ZWxsP1xcblxcbuKAoiBUbyBkZWxldGUgZXZlcnl0aGluZyAoZWxlbWVudCArIGRhdGEpLCBzYXk6IFwiWWVzLCBkZWxldGUgYWxsIGRhdGFcIlxcbuKAoiBUbyBrZWVwIHRoZSBkYXRhIGZpbGVzLCBzYXk6IFwiTm8sIGtlZXAgdGhlIGRhdGFcIlxcbuKAoiBUbyBjYW5jZWwsIHNheTogXCJDYW5jZWxcImBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBEZWxldGUgdGhlIG1haW4gZWxlbWVudCBmaWxlXG4gICAgICBjb25zdCBmaWxlbmFtZSA9IGAke3NsdWdpZnkobmFtZSl9Lm1kYDtcbiAgICAgIGNvbnN0IGZpbGVwYXRoID0gcGF0aC5qb2luKHRoaXMucG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKHR5cGUgYXMgRWxlbWVudFR5cGUpLCBmaWxlbmFtZSk7XG4gICAgICBcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLnVubGluayhmaWxlcGF0aCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoKGVycm9yIGFzIGFueSkuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGDinYwgJHt0eXBlfSBmaWxlICcke2ZpbGVuYW1lfScgbm90IGZvdW5kYFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBEZWxldGUgYXNzb2NpYXRlZCBkYXRhIGZpbGVzIGlmIHJlcXVlc3RlZFxuICAgICAgaWYgKGRlbGV0ZURhdGEgJiYgZGF0YUZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZERhdGFGaWxlczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlID09PSBFbGVtZW50VHlwZS5BR0VOVCkge1xuICAgICAgICAgIGNvbnN0IHN0YXRlRmlsZSA9IHBhdGguam9pbih0aGlzLnBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihFbGVtZW50VHlwZS5BR0VOVCksICcuc3RhdGUnLCBgJHtuYW1lfS1zdGF0ZS5qc29uYCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGZzLnVubGluayhzdGF0ZUZpbGUpO1xuICAgICAgICAgICAgdXBkYXRlZERhdGFGaWxlcy5wdXNoKGAke2RhdGFGaWxlc1swXX0g4pyTIGRlbGV0ZWRgKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gTG9nIGJ1dCBkb24ndCBmYWlsIGlmIHN0YXRlIGZpbGUgZGVsZXRpb24gZmFpbHNcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gZGVsZXRlIGFnZW50IHN0YXRlIGZpbGU6ICR7ZXJyb3J9YCk7XG4gICAgICAgICAgICB1cGRhdGVkRGF0YUZpbGVzLnB1c2goYCR7ZGF0YUZpbGVzWzBdfSDimqDvuI8gZGVsZXRpb24gZmFpbGVkYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEVsZW1lbnRUeXBlLk1FTU9SWSkge1xuICAgICAgICAgIGNvbnN0IHN0b3JhZ2VGaWxlID0gcGF0aC5qb2luKHRoaXMucG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLk1FTU9SWSksICcuc3RvcmFnZScsIGAke25hbWV9LW1lbW9yeS5qc29uYCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGZzLnVubGluayhzdG9yYWdlRmlsZSk7XG4gICAgICAgICAgICB1cGRhdGVkRGF0YUZpbGVzLnB1c2goYCR7ZGF0YUZpbGVzWzBdfSDinJMgZGVsZXRlZGApO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBMb2cgYnV0IGRvbid0IGZhaWwgaWYgc3RvcmFnZSBmaWxlIGRlbGV0aW9uIGZhaWxzXG4gICAgICAgICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIGRlbGV0ZSBtZW1vcnkgc3RvcmFnZSBmaWxlOiAke2Vycm9yfWApO1xuICAgICAgICAgICAgdXBkYXRlZERhdGFGaWxlcy5wdXNoKGAke2RhdGFGaWxlc1swXX0g4pqg77iPIGRlbGV0aW9uIGZhaWxlZGApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBFbGVtZW50VHlwZS5FTlNFTUJMRSkge1xuICAgICAgICAgIGNvbnN0IGNvbmZpZ0ZpbGUgPSBwYXRoLmpvaW4odGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuRU5TRU1CTEUpLCAnLmNvbmZpZ3MnLCBgJHtuYW1lfS1jb25maWcuanNvbmApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBmcy51bmxpbmsoY29uZmlnRmlsZSk7XG4gICAgICAgICAgICB1cGRhdGVkRGF0YUZpbGVzLnB1c2goYCR7ZGF0YUZpbGVzWzBdfSDinJMgZGVsZXRlZGApO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBMb2cgYnV0IGRvbid0IGZhaWwgaWYgY29uZmlnIGZpbGUgZGVsZXRpb24gZmFpbHNcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gZGVsZXRlIGVuc2VtYmxlIGNvbmZpZyBmaWxlOiAke2Vycm9yfWApO1xuICAgICAgICAgICAgdXBkYXRlZERhdGFGaWxlcy5wdXNoKGAke2RhdGFGaWxlc1swXX0g4pqg77iPIGRlbGV0aW9uIGZhaWxlZGApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgZGF0YUZpbGVzID0gdXBkYXRlZERhdGFGaWxlcztcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQnVpbGQgc3VjY2VzcyBtZXNzYWdlXG4gICAgICBsZXQgbWVzc2FnZSA9IGDinIUgU3VjY2Vzc2Z1bGx5IGRlbGV0ZWQgJHt0eXBlfSAnJHtuYW1lfSdgO1xuICAgICAgaWYgKGRhdGFGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChkZWxldGVEYXRhKSB7XG4gICAgICAgICAgbWVzc2FnZSArPSBgXFxuXFxuQXNzb2NpYXRlZCBkYXRhIGZpbGVzOlxcbiR7ZGF0YUZpbGVzLmpvaW4oJ1xcbicpfWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWVzc2FnZSArPSBgXFxuXFxu4pqg77iPIEFzc29jaWF0ZWQgZGF0YSBmaWxlcyB3ZXJlIHByZXNlcnZlZDpcXG4ke2RhdGFGaWxlcy5qb2luKCdcXG4nKX1gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogbWVzc2FnZVxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBkZWxldGUgZWxlbWVudDpgLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgRmFpbGVkIHRvIGRlbGV0ZSBlbGVtZW50OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLy8gY2hlY2tSYXRlTGltaXQgYW5kIGZldGNoRnJvbUdpdEh1YiBhcmUgbm93IGhhbmRsZWQgYnkgR2l0SHViQ2xpZW50XG5cbiAgYXN5bmMgYnJvd3NlQ29sbGVjdGlvbihzZWN0aW9uPzogc3RyaW5nLCB0eXBlPzogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZJWCAjNDcxOiBSZXBsYWNlIGxlZ2FjeSBjYXRlZ29yeSB2YWxpZGF0aW9uIHdpdGggcHJvcGVyIHNlY3Rpb24vdHlwZSB2YWxpZGF0aW9uXG4gICAgICAvLyBWYWxpZCBzZWN0aW9uczogbGlicmFyeSwgc2hvd2Nhc2UsIGNhdGFsb2dcbiAgICAgIC8vIFZhbGlkIHR5cGVzIGZvciBNQ1A6IHBlcnNvbmFzLCBza2lsbHMsIGFnZW50cywgdGVtcGxhdGVzIChvdGhlcnMgZmlsdGVyZWQgcGVyIElzc3VlICMxNDQpXG4gICAgICAvLyBOb3RlOiB0b29scywgcHJvbXB0cywgZW5zZW1ibGVzLCBtZW1vcmllcyBleGlzdCBpbiBjb2xsZWN0aW9uIGJ1dCBhcmUgZmlsdGVyZWQgZnJvbSBNQ1BcbiAgICAgIGNvbnN0IHZhbGlkU2VjdGlvbnMgPSBbJ2xpYnJhcnknLCAnc2hvd2Nhc2UnLCAnY2F0YWxvZyddO1xuICAgICAgXG4gICAgICAvLyDimqDvuI8gQ1JJVElDQUw6IFdoZW4gYWRkaW5nIG5ldyBlbGVtZW50IHR5cGVzLCB5b3UgTVVTVCB1cGRhdGUgdGhpcyBhcnJheSFcbiAgICAgIC8vIFNlZSBkb2NzL2RldmVsb3BtZW50L0FERElOR19ORVdfRUxFTUVOVF9UWVBFU19DSEVDS0xJU1QubWQgZm9yIGNvbXBsZXRlIGNoZWNrbGlzdFxuICAgICAgLy8gVGhpcyBhcnJheSBpcyBvZnRlbiBmb3Jnb3R0ZW4gYW5kIGNhdXNlcyB2YWxpZGF0aW9uIGZhaWx1cmVzIGZvciBuZXcgdHlwZXNcbiAgICAgIGNvbnN0IHZhbGlkVHlwZXMgPSBbJ3BlcnNvbmFzJywgJ3NraWxscycsICdhZ2VudHMnLCAndGVtcGxhdGVzJ107ICAvLyBPbmx5IE1DUC1zdXBwb3J0ZWQgdHlwZXNcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgc2VjdGlvbiBpZiBwcm92aWRlZFxuICAgICAgY29uc3QgdmFsaWRhdGVkU2VjdGlvbiA9IHNlY3Rpb24gPyBzYW5pdGl6ZUlucHV0KHNlY3Rpb24udG9Mb3dlckNhc2UoKSwgMTAwKSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmICh2YWxpZGF0ZWRTZWN0aW9uICYmICF2YWxpZFNlY3Rpb25zLmluY2x1ZGVzKHZhbGlkYXRlZFNlY3Rpb24pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzZWN0aW9uICcke3ZhbGlkYXRlZFNlY3Rpb259Jy4gTXVzdCBiZSBvbmUgb2Y6ICR7dmFsaWRTZWN0aW9ucy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSB0eXBlIGlmIHByb3ZpZGVkIChvbmx5IHZhbGlkIHdoZW4gc2VjdGlvbiBpcyAnbGlicmFyeScpXG4gICAgICBjb25zdCB2YWxpZGF0ZWRUeXBlID0gdHlwZSA/IHNhbml0aXplSW5wdXQodHlwZS50b0xvd2VyQ2FzZSgpLCAxMDApIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKHZhbGlkYXRlZFR5cGUgJiYgdmFsaWRhdGVkU2VjdGlvbiA9PT0gJ2xpYnJhcnknICYmICF2YWxpZFR5cGVzLmluY2x1ZGVzKHZhbGlkYXRlZFR5cGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0eXBlICcke3ZhbGlkYXRlZFR5cGV9Jy4gTXVzdCBiZSBvbmUgb2Y6ICR7dmFsaWRUeXBlcy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuICAgICAgaWYgKHZhbGlkYXRlZFR5cGUgJiYgdmFsaWRhdGVkU2VjdGlvbiAhPT0gJ2xpYnJhcnknKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVHlwZSBwYXJhbWV0ZXIgaXMgb25seSB2YWxpZCB3aGVuIHNlY3Rpb24gaXMgXCJsaWJyYXJ5XCInKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uQnJvd3Nlci5icm93c2VDb2xsZWN0aW9uKHZhbGlkYXRlZFNlY3Rpb24sIHZhbGlkYXRlZFR5cGUpO1xuICAgICAgXG4gICAgICAvLyBIYW5kbGUgc2VjdGlvbnMgdmlld1xuICAgICAgY29uc3QgaXRlbXMgPSByZXN1bHQuaXRlbXM7XG4gICAgICBjb25zdCBjYXRlZ29yaWVzID0gcmVzdWx0LnNlY3Rpb25zIHx8IHJlc3VsdC5jYXRlZ29yaWVzO1xuICAgICAgXG4gICAgICBjb25zdCB0ZXh0ID0gdGhpcy5jb2xsZWN0aW9uQnJvd3Nlci5mb3JtYXRCcm93c2VSZXN1bHRzKFxuICAgICAgICBpdGVtcywgXG4gICAgICAgIGNhdGVnb3JpZXMsIFxuICAgICAgICB2YWxpZGF0ZWRTZWN0aW9uLCBcbiAgICAgICAgdmFsaWRhdGVkVHlwZSwgXG4gICAgICAgIHRoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpXG4gICAgICApO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBzYW5pdGl6ZWQgPSBTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgQ29sbGVjdGlvbiBicm93c2luZyBmYWlsZWQ6ICR7c2FuaXRpemVkLm1lc3NhZ2V9YCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZWFyY2hDb2xsZWN0aW9uKHF1ZXJ5OiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgLy8gRW5oYW5jZWQgaW5wdXQgdmFsaWRhdGlvbiBmb3Igc2VhcmNoIHF1ZXJ5XG4gICAgICBjb25zdCB2YWxpZGF0ZWRRdWVyeSA9IE1DUElucHV0VmFsaWRhdG9yLnZhbGlkYXRlU2VhcmNoUXVlcnkocXVlcnkpO1xuICAgICAgXG4gICAgICBjb25zdCBpdGVtcyA9IGF3YWl0IHRoaXMuY29sbGVjdGlvblNlYXJjaC5zZWFyY2hDb2xsZWN0aW9uKHZhbGlkYXRlZFF1ZXJ5KTtcbiAgICAgIGNvbnN0IHRleHQgPSB0aGlzLmNvbGxlY3Rpb25TZWFyY2guZm9ybWF0U2VhcmNoUmVzdWx0cyhpdGVtcywgdmFsaWRhdGVkUXVlcnksIHRoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogdGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3Qgc2FuaXRpemVkID0gU2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEVycm9yIHNlYXJjaGluZyBjb2xsZWN0aW9uOiAke3Nhbml0aXplZC5tZXNzYWdlfWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2VhcmNoQ29sbGVjdGlvbkVuaGFuY2VkKHF1ZXJ5OiBzdHJpbmcsIG9wdGlvbnM6IGFueSA9IHt9KSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEVuaGFuY2VkIGlucHV0IHZhbGlkYXRpb24gZm9yIHNlYXJjaCBxdWVyeVxuICAgICAgY29uc3QgdmFsaWRhdGVkUXVlcnkgPSBNQ1BJbnB1dFZhbGlkYXRvci52YWxpZGF0ZVNlYXJjaFF1ZXJ5KHF1ZXJ5KTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgYW5kIHNhbml0aXplIG9wdGlvbnNcbiAgICAgIGNvbnN0IHZhbGlkYXRlZE9wdGlvbnMgPSB7XG4gICAgICAgIGVsZW1lbnRUeXBlOiBvcHRpb25zLmVsZW1lbnRUeXBlID8gU3RyaW5nKG9wdGlvbnMuZWxlbWVudFR5cGUpIDogdW5kZWZpbmVkLFxuICAgICAgICBjYXRlZ29yeTogb3B0aW9ucy5jYXRlZ29yeSA/IFN0cmluZyhvcHRpb25zLmNhdGVnb3J5KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcGFnZTogb3B0aW9ucy5wYWdlID8gTWF0aC5tYXgoMSwgcGFyc2VJbnQob3B0aW9ucy5wYWdlKSB8fCAxKSA6IDEsXG4gICAgICAgIHBhZ2VTaXplOiBvcHRpb25zLnBhZ2VTaXplID8gTWF0aC5taW4oMTAwLCBNYXRoLm1heCgxLCBwYXJzZUludChvcHRpb25zLnBhZ2VTaXplKSB8fCAyNSkpIDogMjUsXG4gICAgICAgIHNvcnRCeTogb3B0aW9ucy5zb3J0QnkgJiYgWydyZWxldmFuY2UnLCAnbmFtZScsICdkYXRlJ10uaW5jbHVkZXMob3B0aW9ucy5zb3J0QnkpID8gb3B0aW9ucy5zb3J0QnkgOiAncmVsZXZhbmNlJ1xuICAgICAgfTtcbiAgICAgIFxuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMuY29sbGVjdGlvblNlYXJjaC5zZWFyY2hDb2xsZWN0aW9uV2l0aE9wdGlvbnModmFsaWRhdGVkUXVlcnksIHZhbGlkYXRlZE9wdGlvbnMpO1xuICAgICAgY29uc3QgdGV4dCA9IHRoaXMuY29sbGVjdGlvblNlYXJjaC5mb3JtYXRTZWFyY2hSZXN1bHRzV2l0aFBhZ2luYXRpb24ocmVzdWx0cywgdGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCkpO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBzYW5pdGl6ZWQgPSBTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgRXJyb3Igc2VhcmNoaW5nIGNvbGxlY3Rpb246ICR7c2FuaXRpemVkLm1lc3NhZ2V9YCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRDb2xsZWN0aW9uQ29udGVudChwYXRoOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBtZXRhZGF0YSwgY29udGVudCB9ID0gYXdhaXQgdGhpcy5wZXJzb25hRGV0YWlscy5nZXRDb2xsZWN0aW9uQ29udGVudChwYXRoKTtcbiAgICAgIGNvbnN0IHRleHQgPSB0aGlzLnBlcnNvbmFEZXRhaWxzLmZvcm1hdFBlcnNvbmFEZXRhaWxzKG1ldGFkYXRhLCBjb250ZW50LCBwYXRoLCB0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKSk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IHRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IHNhbml0aXplZCA9IFNlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBFcnJvciBmZXRjaGluZyBjb250ZW50OiAke3Nhbml0aXplZC5tZXNzYWdlfWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5zdGFsbENvbnRlbnQoaW5wdXRQYXRoOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5lbGVtZW50SW5zdGFsbGVyLmluc3RhbGxDb250ZW50KGlucHV0UGF0aCk7XG4gICAgICBcbiAgICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBg4pqg77iPICR7cmVzdWx0Lm1lc3NhZ2V9YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSWYgaXQncyBhIHBlcnNvbmEsIHJlbG9hZCBwZXJzb25hc1xuICAgICAgaWYgKHJlc3VsdC5lbGVtZW50VHlwZSA9PT0gRWxlbWVudFR5cGUuUEVSU09OQSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRQZXJzb25hcygpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCB0ZXh0ID0gdGhpcy5lbGVtZW50SW5zdGFsbGVyLmZvcm1hdEluc3RhbGxTdWNjZXNzKFxuICAgICAgICByZXN1bHQubWV0YWRhdGEhLCBcbiAgICAgICAgcmVzdWx0LmZpbGVuYW1lISxcbiAgICAgICAgcmVzdWx0LmVsZW1lbnRUeXBlIVxuICAgICAgKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogdGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3Qgc2FuaXRpemVkID0gU2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEVycm9yIGluc3RhbGxpbmcgQUkgY3VzdG9taXphdGlvbiBlbGVtZW50OiAke3Nhbml0aXplZC5tZXNzYWdlfWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3VibWl0Q29udGVudChjb250ZW50SWRlbnRpZmllcjogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFVzZSB0aGUgbmV3IHBvcnRmb2xpby1iYXNlZCBzdWJtaXNzaW9uIHRvb2xcbiAgICAgIGNvbnN0IHsgU3VibWl0VG9Qb3J0Zm9saW9Ub29sIH0gPSBhd2FpdCBpbXBvcnQoJy4vdG9vbHMvcG9ydGZvbGlvL3N1Ym1pdFRvUG9ydGZvbGlvVG9vbC5qcycpO1xuICAgICAgY29uc3QgeyBGaWxlRGlzY292ZXJ5VXRpbCB9ID0gYXdhaXQgaW1wb3J0KCcuL3V0aWxzL0ZpbGVEaXNjb3ZlcnlVdGlsLmpzJyk7XG4gICAgICBjb25zdCBzdWJtaXRUb29sID0gbmV3IFN1Ym1pdFRvUG9ydGZvbGlvVG9vbCh0aGlzLmFwaUNhY2hlKTtcbiAgICBcbiAgICAvLyBUcnkgdG8gZmluZCB0aGUgY29udGVudCBhY3Jvc3MgYWxsIGVsZW1lbnQgdHlwZXNcbiAgICBjb25zdCBwb3J0Zm9saW9NYW5hZ2VyID0gUG9ydGZvbGlvTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgIGxldCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGUgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGZvdW5kUGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgXG4gICAgLy8gUEVSRk9STUFOQ0UgT1BUSU1JWkFUSU9OOiBTZWFyY2ggYWxsIGVsZW1lbnQgZGlyZWN0b3JpZXMgaW4gcGFyYWxsZWxcbiAgICAvLyBOT1RFOiBUaGlzIGR5bmFtaWNhbGx5IGhhbmRsZXMgQUxMIGVsZW1lbnQgdHlwZXMgZnJvbSB0aGUgRWxlbWVudFR5cGUgZW51bVxuICAgIC8vIE5vIGhhcmRjb2RlZCBjb3VudCAtIGlmIHlvdSBhZGQgMTAgbW9yZSBlbGVtZW50IHR5cGVzIHRvbW9ycm93LCB0aGlzIGNvZGVcbiAgICAvLyB3aWxsIGF1dG9tYXRpY2FsbHkgc2VhcmNoIGFsbCAxNiB0eXBlcyB3aXRob3V0IGFueSBjaGFuZ2VzIG5lZWRlZCBoZXJlXG4gICAgY29uc3Qgc2VhcmNoUHJvbWlzZXMgPSBPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5tYXAoYXN5bmMgKHR5cGUpID0+IHtcbiAgICAgIGNvbnN0IGRpciA9IHBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcih0eXBlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBGaWxlRGlzY292ZXJ5VXRpbC5maW5kRmlsZShkaXIsIGNvbnRlbnRJZGVudGlmaWVyLCB7XG4gICAgICAgICAgZXh0ZW5zaW9uczogWycubWQnLCAnLmpzb24nLCAnLnlhbWwnLCAnLnltbCddLFxuICAgICAgICAgIHBhcnRpYWxNYXRjaDogdHJ1ZSxcbiAgICAgICAgICBjYWNoZVJlc3VsdHM6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gZmlsZSA/IHsgdHlwZTogdHlwZSBhcyBFbGVtZW50VHlwZSwgZmlsZSB9IDogbnVsbDtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgLy8gSU1QUk9WRUQgRVJST1IgSEFORExJTkc6IExvZyB3YXJuaW5ncyBmb3IgdW5leHBlY3RlZCBlcnJvcnNcbiAgICAgICAgaWYgKGVycm9yPy5jb2RlICE9PSAnRU5PRU5UJyAmJiBlcnJvcj8uY29kZSAhPT0gJ0VOT1RESVInKSB7XG4gICAgICAgICAgLy8gTm90IGp1c3QgYSBtaXNzaW5nIGRpcmVjdG9yeSAtIHRoaXMgY291bGQgYmUgYSBwZXJtaXNzaW9uIGlzc3VlIG9yIG90aGVyIHByb2JsZW1cbiAgICAgICAgICBsb2dnZXIud2FybihgVW5leHBlY3RlZCBlcnJvciBzZWFyY2hpbmcgJHt0eXBlfSBkaXJlY3RvcnlgLCB7IFxuICAgICAgICAgICAgY29udGVudElkZW50aWZpZXIsXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yPy5tZXNzYWdlIHx8IFN0cmluZyhlcnJvciksXG4gICAgICAgICAgICBjb2RlOiBlcnJvcj8uY29kZSBcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBEaXJlY3RvcnkgZG9lc24ndCBleGlzdCAtIHRoaXMgaXMgZXhwZWN0ZWQgZm9yIHVudXNlZCBlbGVtZW50IHR5cGVzXG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKGAke3R5cGV9IGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCwgc2tpcHBpbmdgLCB7IHR5cGUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgLy8gV2FpdCBmb3IgYWxsIHNlYXJjaGVzIHRvIGNvbXBsZXRlIGFuZCBmaW5kIHRoZSBmaXJzdCBtYXRjaFxuICAgIGNvbnN0IHNlYXJjaFJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoc2VhcmNoUHJvbWlzZXMpO1xuICAgIFxuICAgIC8vIE5PVEU6IEZpbGUgdmFsaWRhdGlvbiAtIHdlIHJlbHkgb24gdGhlIHBvcnRmb2xpbyBkaXJlY3Rvcnkgc3RydWN0dXJlIHRvIGVuc3VyZVxuICAgIC8vIGZpbGVzIGFyZSBpbiB0aGUgY29ycmVjdCBlbGVtZW50IHR5cGUgZGlyZWN0b3J5LiBBZGRpdGlvbmFsIHNjaGVtYSB2YWxpZGF0aW9uXG4gICAgLy8gY291bGQgYmUgYWRkZWQgaGVyZSBpZiBuZWVkZWQsIGJ1dCB0aGUgY3VycmVudCBhcHByb2FjaCBpcyBzdWZmaWNpZW50IGFzOlxuICAgIC8vIDEuIEZpbGVEaXNjb3ZlcnlVdGlsIGFscmVhZHkgdmFsaWRhdGVzIGZpbGUgZXh0ZW5zaW9uc1xuICAgIC8vIDIuIFBvcnRmb2xpbyBzdHJ1Y3R1cmUgZW5mb3JjZXMgcHJvcGVyIG9yZ2FuaXphdGlvblxuICAgIC8vIDMuIHN1Ym1pdFRvUG9ydGZvbGlvVG9vbCBwZXJmb3JtcyBhZGRpdGlvbmFsIHZhbGlkYXRpb24gZG93bnN0cmVhbVxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHNlYXJjaFJlc3VsdHMpIHtcbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAnZnVsZmlsbGVkJyAmJiByZXN1bHQudmFsdWUpIHtcbiAgICAgICAgZm91bmRQYXRoID0gcmVzdWx0LnZhbHVlLmZpbGU7XG4gICAgICAgIGVsZW1lbnRUeXBlID0gcmVzdWx0LnZhbHVlLnR5cGU7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgRm91bmQgY29udGVudCBpbiAke2VsZW1lbnRUeXBlfSBkaXJlY3RvcnlgLCB7IFxuICAgICAgICAgIGNvbnRlbnRJZGVudGlmaWVyLCBcbiAgICAgICAgICB0eXBlOiBlbGVtZW50VHlwZSwgXG4gICAgICAgICAgZmlsZTogZm91bmRQYXRoIFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIENSSVRJQ0FMIEZJWDogTmV2ZXIgZGVmYXVsdCB0byBhbnkgZWxlbWVudCB0eXBlIHdoZW4gY29udGVudCBpcyBub3QgZm91bmRcbiAgICAvLyBUaGlzIHByZXZlbnRzIGluY29ycmVjdCBzdWJtaXNzaW9ucyBhbmQgZm9yY2VzIHByb3BlciB0eXBlIGRldGVjdGlvbiBvciB1c2VyIHNwZWNpZmljYXRpb25cbiAgICBpZiAoIWVsZW1lbnRUeXBlKSB7XG4gICAgICAvLyBDb250ZW50IG5vdCBmb3VuZCBpbiBhbnkgZWxlbWVudCBkaXJlY3RvcnkgLSBwcm92aWRlIGhlbHBmdWwgZXJyb3Igd2l0aCBzdWdnZXN0aW9uc1xuICAgICAgY29uc3QgYXZhaWxhYmxlVHlwZXMgPSBPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5qb2luKCcsICcpO1xuICAgICAgbG9nZ2VyLndhcm4oYENvbnRlbnQgXCIke2NvbnRlbnRJZGVudGlmaWVyfVwiIG5vdCBmb3VuZCBpbiBhbnkgcG9ydGZvbGlvIGRpcmVjdG9yeWAsIHsgXG4gICAgICAgIGNvbnRlbnRJZGVudGlmaWVyLFxuICAgICAgICBzZWFyY2hlZFR5cGVzOiBPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKSBcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBVWCBJTVBST1ZFTUVOVDogRW5oYW5jZWQgZXJyb3IgbWVzc2FnZSB3aXRoIHNtYXJ0IHN1Z2dlc3Rpb25zXG4gICAgICBsZXQgZXJyb3JNZXNzYWdlID0gYOKdjCBDb250ZW50IFwiJHtjb250ZW50SWRlbnRpZmllcn1cIiBub3QgZm91bmQgaW4gcG9ydGZvbGlvLlxcblxcbmA7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYPCflI0gKipTZWFyY2hlZCBhY3Jvc3MgYWxsIGVsZW1lbnQgdHlwZXMqKjogJHthdmFpbGFibGVUeXBlc31cXG5cXG5gO1xuICAgICAgXG4gICAgICAvLyBUcnkgdG8gcHJvdmlkZSBzbWFydCBzdWdnZXN0aW9ucyBiYXNlZCBvbiBwYXJ0aWFsIG1hdGNoZXNcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgRmlsZURpc2NvdmVyeVV0aWwgfSA9IGF3YWl0IGltcG9ydCgnLi91dGlscy9GaWxlRGlzY292ZXJ5VXRpbC5qcycpO1xuICAgICAgICBjb25zdCBzdWdnZXN0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgXG4gICAgICAgIC8vIFNlYXJjaCBmb3Igc2ltaWxhciBuYW1lcyBhY3Jvc3MgYWxsIGVsZW1lbnQgdHlwZXNcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50VHlwZSBvZiBPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKSkge1xuICAgICAgICAgIGNvbnN0IGRpciA9IHBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihlbGVtZW50VHlwZSk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRpYWxNYXRjaGVzID0gYXdhaXQgRmlsZURpc2NvdmVyeVV0aWwuZmluZEZpbGUoZGlyLCBjb250ZW50SWRlbnRpZmllciwge1xuICAgICAgICAgICAgICBleHRlbnNpb25zOiBbJy5tZCcsICcuanNvbicsICcueWFtbCcsICcueW1sJ10sXG4gICAgICAgICAgICAgIHBhcnRpYWxNYXRjaDogdHJ1ZSxcbiAgICAgICAgICAgICAgY2FjaGVSZXN1bHRzOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhcnRpYWxNYXRjaGVzKSAmJiBwYXJ0aWFsTWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgcGFydGlhbE1hdGNoZXMuc2xpY2UoMCwgMikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXNlbmFtZSA9IHBhdGguYmFzZW5hbWUobWF0Y2gsIHBhdGguZXh0bmFtZShtYXRjaCkpO1xuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zLnB1c2goYFwiJHtiYXNlbmFtZX1cIiAoJHtlbGVtZW50VHlwZX0pYCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFydGlhbE1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgY29uc3QgYmFzZW5hbWUgPSBwYXRoLmJhc2VuYW1lKHBhcnRpYWxNYXRjaGVzLCBwYXRoLmV4dG5hbWUocGFydGlhbE1hdGNoZXMpKTtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMucHVzaChgXCIke2Jhc2VuYW1lfVwiICgke2VsZW1lbnRUeXBlfSlgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gU2tpcCB0aGlzIHR5cGUgaWYgdGhlcmUncyBhbiBlcnJvclxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAoc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGVycm9yTWVzc2FnZSArPSBg8J+SoSAqKkRpZCB5b3UgbWVhbiBvbmUgb2YgdGhlc2U/KipcXG5gO1xuICAgICAgICAgIGZvciAoY29uc3Qgc3VnZ2VzdGlvbiBvZiBzdWdnZXN0aW9ucy5zbGljZSgwLCA1KSkge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlICs9IGAgIOKAoiAke3N1Z2dlc3Rpb259XFxuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXJyb3JNZXNzYWdlICs9IGBcXG5gO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChzdWdnZXN0aW9uRXJyb3IpIHtcbiAgICAgICAgLy8gSWYgc3VnZ2VzdGlvbnMgZmFpbCwgY29udGludWUgd2l0aG91dCB0aGVtXG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnRmFpbGVkIHRvIGdlbmVyYXRlIHN1Z2dlc3Rpb25zJywgeyBzdWdnZXN0aW9uRXJyb3IgfSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGVycm9yTWVzc2FnZSArPSBg8J+boO+4jyAqKlN0ZXAtYnktc3RlcCB0cm91Ymxlc2hvb3RpbmcqKjpcXG5gO1xuICAgICAgZXJyb3JNZXNzYWdlICs9IGAxLiDwn5OdICoqTGlzdCBhbGwgY29udGVudCoqOiBVc2UgXFxgbGlzdF9wb3J0Zm9saW9cXGAgdG8gc2VlIHdoYXQncyBhdmFpbGFibGVcXG5gO1xuICAgICAgZXJyb3JNZXNzYWdlICs9IGAyLiDwn5SNICoqQ2hlY2sgc3BlbGxpbmcqKjogVmVyaWZ5IHRoZSBleGFjdCBuYW1lIGFuZCB0cnkgdmFyaWF0aW9uc1xcbmA7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYDMuIPCfjq8gKipTcGVjaWZ5IHR5cGUqKjogVHJ5IFxcYHN1Ym1pdF9jb2xsZWN0aW9uX2NvbnRlbnQgXCIke2NvbnRlbnRJZGVudGlmaWVyfVwiIC0tdHlwZT1wZXJzb25hc1xcYFxcbmA7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYDQuIPCfk4EgKipCcm93c2UgZmlsZXMqKjogQ2hlY2sgeW91ciBwb3J0Zm9saW8gZGlyZWN0b3J5IG1hbnVhbGx5XFxuXFxuYDtcbiAgICAgIGVycm9yTWVzc2FnZSArPSBg8J+TnSAqKlRpcCoqOiBUaGUgc3lzdGVtIHNlYXJjaGVzIGJvdGggZmlsZW5hbWVzIGFuZCBkaXNwbGF5IG5hbWVzIHdpdGggZnV6enkgbWF0Y2hpbmcuYDtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogZXJyb3JNZXNzYWdlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBmb3IgZHVwbGljYXRlcyBhY3Jvc3MgYWxsIHNvdXJjZXMgYmVmb3JlIHN1Ym1pc3Npb25cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBVbmlmaWVkSW5kZXhNYW5hZ2VyIH0gPSBhd2FpdCBpbXBvcnQoJy4vcG9ydGZvbGlvL1VuaWZpZWRJbmRleE1hbmFnZXIuanMnKTtcbiAgICAgIGNvbnN0IHVuaWZpZWRNYW5hZ2VyID0gVW5pZmllZEluZGV4TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgICAgXG4gICAgICAvLyBFeHRyYWN0IHRoZSBhY3R1YWwgZWxlbWVudCBuYW1lIGZyb20gdGhlIGNvbnRlbnQgcGF0aFxuICAgICAgY29uc3QgYmFzZW5hbWUgPSBwYXRoLmJhc2VuYW1lKGZvdW5kUGF0aCEsIHBhdGguZXh0bmFtZShmb3VuZFBhdGghKSk7XG4gICAgICBjb25zdCBkdXBsaWNhdGVzID0gYXdhaXQgdW5pZmllZE1hbmFnZXIuY2hlY2tEdXBsaWNhdGVzKGJhc2VuYW1lKTtcbiAgICAgIFxuICAgICAgaWYgKGR1cGxpY2F0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBkdXBsaWNhdGUgPSBkdXBsaWNhdGVzWzBdO1xuICAgICAgICBsZXQgd2FybmluZ1RleHQgPSBg4pqg77iPICoqRHVwbGljYXRlIERldGVjdGlvbiBBbGVydCoqXFxuXFxuYDtcbiAgICAgICAgd2FybmluZ1RleHQgKz0gYEZvdW5kIFwiJHtkdXBsaWNhdGUubmFtZX1cIiBpbiBtdWx0aXBsZSBzb3VyY2VzOlxcblxcbmA7XG4gICAgICAgIFxuICAgICAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBkdXBsaWNhdGUuc291cmNlcykge1xuICAgICAgICAgIGNvbnN0IHNvdXJjZUljb24gPSB0aGlzLmdldFNvdXJjZUljb24oc291cmNlLnNvdXJjZSk7XG4gICAgICAgICAgd2FybmluZ1RleHQgKz0gYCR7c291cmNlSWNvbn0gKioke3NvdXJjZS5zb3VyY2V9Kio6ICR7c291cmNlLnZlcnNpb24gfHwgJ3Vua25vd24gdmVyc2lvbid9ICgke3NvdXJjZS5sYXN0TW9kaWZpZWQudG9Mb2NhbGVEYXRlU3RyaW5nKCl9KVxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHdhcm5pbmdUZXh0ICs9IGBcXG5gO1xuICAgICAgICBcbiAgICAgICAgaWYgKGR1cGxpY2F0ZS5oYXNWZXJzaW9uQ29uZmxpY3QgJiYgZHVwbGljYXRlLnZlcnNpb25Db25mbGljdCkge1xuICAgICAgICAgIHdhcm5pbmdUZXh0ICs9IGDwn5SEICoqVmVyc2lvbiBDb25mbGljdCBEZXRlY3RlZCoqXFxuYDtcbiAgICAgICAgICB3YXJuaW5nVGV4dCArPSBgUmVjb21tZW5kZWQgc291cmNlOiAqKiR7ZHVwbGljYXRlLnZlcnNpb25Db25mbGljdC5yZWNvbW1lbmRlZH0qKlxcbmA7XG4gICAgICAgICAgd2FybmluZ1RleHQgKz0gYFJlYXNvbjogJHtkdXBsaWNhdGUudmVyc2lvbkNvbmZsaWN0LnJlYXNvbn1cXG5cXG5gO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB3YXJuaW5nVGV4dCArPSBgKipSZWNvbW1lbmRhdGlvbnM6KipcXG5gO1xuICAgICAgICB3YXJuaW5nVGV4dCArPSBg4oCiIFJldmlldyBleGlzdGluZyB2ZXJzaW9ucyBiZWZvcmUgc3VibWl0dGluZ1xcbmA7XG4gICAgICAgIHdhcm5pbmdUZXh0ICs9IGDigKIgQ29uc2lkZXIgdXBkYXRpbmcgbG9jYWwgdmVyc2lvbiBpbnN0ZWFkIG9mIGNyZWF0aW5nIGR1cGxpY2F0ZVxcbmA7XG4gICAgICAgIHdhcm5pbmdUZXh0ICs9IGDigKIgRW5zdXJlIHlvdXIgdmVyc2lvbiBhZGRzIG1lYW5pbmdmdWwgaW1wcm92ZW1lbnRzXFxuYDtcbiAgICAgICAgd2FybmluZ1RleHQgKz0gYOKAoiBVcGRhdGUgdmVyc2lvbiBudW1iZXIgaW4gbWV0YWRhdGEgaWYgc3VibWl0dGluZyBlbmhhbmNlbWVudFxcblxcbmA7XG4gICAgICAgIHdhcm5pbmdUZXh0ICs9IGAqKlByb2NlZWRpbmcgd2l0aCBzdWJtaXNzaW9uIGFueXdheS4uLioqXFxuXFxuYDtcbiAgICAgICAgXG4gICAgICAgIC8vIExvZyB0aGUgZHVwbGljYXRlIGRldGVjdGlvbiBmb3IgbW9uaXRvcmluZ1xuICAgICAgICBsb2dnZXIud2FybignRHVwbGljYXRlIGNvbnRlbnQgZGV0ZWN0ZWQgZHVyaW5nIHN1Ym1pc3Npb24nLCB7XG4gICAgICAgICAgY29udGVudElkZW50aWZpZXIsXG4gICAgICAgICAgZWxlbWVudFR5cGUsXG4gICAgICAgICAgZHVwbGljYXRlSW5mbzogZHVwbGljYXRlXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gQ29udGludWUgd2l0aCBzdWJtaXNzaW9uIGJ1dCBzaG93IHdhcm5pbmdcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3VibWl0VG9vbC5leGVjdXRlKHtcbiAgICAgICAgICBuYW1lOiBjb250ZW50SWRlbnRpZmllcixcbiAgICAgICAgICB0eXBlOiBlbGVtZW50VHlwZVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIENvbWJpbmUgd2FybmluZyB3aXRoIHN1Ym1pc3Npb24gcmVzdWx0XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlVGV4dCA9IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfSR7cmVzdWx0LnN1Y2Nlc3MgPyAn4pqg77iPJyA6ICfinYwnfSAke3dhcm5pbmdUZXh0fSR7cmVzdWx0Lm1lc3NhZ2V9YDtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogcmVzcG9uc2VUZXh0LFxuICAgICAgICAgIH1dLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGR1cGxpY2F0ZUVycm9yKSB7XG4gICAgICAvLyBJZiBkdXBsaWNhdGUgY2hlY2tpbmcgZmFpbHMsIGxvZyBidXQgY29udGludWUgd2l0aCBzdWJtaXNzaW9uXG4gICAgICBsb2dnZXIud2FybignRHVwbGljYXRlIGNoZWNraW5nIGZhaWxlZCBkdXJpbmcgc3VibWlzc2lvbicsIHtcbiAgICAgICAgY29udGVudElkZW50aWZpZXIsXG4gICAgICAgIGVycm9yOiBkdXBsaWNhdGVFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZHVwbGljYXRlRXJyb3IubWVzc2FnZSA6IFN0cmluZyhkdXBsaWNhdGVFcnJvcilcbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICAvLyBFeGVjdXRlIHRoZSBzdWJtaXNzaW9uIHdpdGggdGhlIGRldGVjdGVkIGVsZW1lbnQgdHlwZVxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN1Ym1pdFRvb2wuZXhlY3V0ZSh7XG4gICAgICBuYW1lOiBjb250ZW50SWRlbnRpZmllcixcbiAgICAgIHR5cGU6IGVsZW1lbnRUeXBlXG4gICAgfSk7XG4gICAgXG4gICAgLy8gRm9ybWF0IHRoZSByZXNwb25zZSAtIHRoZSBtZXNzYWdlIGFscmVhZHkgY29udGFpbnMgYWxsIGRldGFpbHNcbiAgICBsZXQgcmVzcG9uc2VUZXh0ID0gcmVzdWx0Lm1lc3NhZ2U7XG4gICAgXG4gICAgLy8gQWRkIHBlcnNvbmEgaW5kaWNhdG9yIGZvciBjb25zaXN0ZW5jeVxuICAgIHJlc3BvbnNlVGV4dCA9IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfSR7cmVzdWx0LnN1Y2Nlc3MgPyAn4pyFJyA6ICfinYwnfSAke3Jlc3BvbnNlVGV4dH1gO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiByZXNwb25zZVRleHQsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gICAgXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgLy8gVVggSU1QUk9WRU1FTlQ6IENvbXByZWhlbnNpdmUgZXJyb3IgaGFuZGxpbmcgd2l0aCBmYWxsYmFjayBzdWdnZXN0aW9uc1xuICAgICAgbG9nZ2VyLmVycm9yKCdVbmV4cGVjdGVkIGVycm9yIGluIHN1Ym1pdENvbnRlbnQnLCB7XG4gICAgICAgIGNvbnRlbnRJZGVudGlmaWVyLFxuICAgICAgICBlcnJvcjogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgc3RhY2s6IGVycm9yLnN0YWNrXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKlN1Ym1pc3Npb24gRmFpbGVkKipcXG5cXG5gO1xuICAgICAgZXJyb3JNZXNzYWdlICs9IGDwn5qoICoqRXJyb3IqKjogJHtlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yIG9jY3VycmVkJ31cXG5cXG5gO1xuICAgICAgXG4gICAgICAvLyBQcm92aWRlIGNvbnRleHR1YWwgdHJvdWJsZXNob290aW5nIGJhc2VkIG9uIGVycm9yIHR5cGVcbiAgICAgIGlmIChlcnJvci5tZXNzYWdlPy5pbmNsdWRlcygnYXV0aCcpIHx8IGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCd0b2tlbicpKSB7XG4gICAgICAgIGVycm9yTWVzc2FnZSArPSBg8J+UkCAqKkF1dGhlbnRpY2F0aW9uIElzc3VlKio6XFxuYDtcbiAgICAgICAgZXJyb3JNZXNzYWdlICs9IGDigKIgUnVuOiBcXGBzZXR1cF9naXRodWJfYXV0aFxcYCB0byByZS1hdXRoZW50aWNhdGVcXG5gO1xuICAgICAgICBlcnJvck1lc3NhZ2UgKz0gYOKAoiBDaGVjazogXFxgZ2ggYXV0aCBzdGF0dXNcXGAgaWYgeW91IGhhdmUgR2l0SHViIENMSVxcblxcbmA7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmIChlcnJvci5tZXNzYWdlPy5pbmNsdWRlcygnbmV0d29yaycpIHx8IGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCdjb25uZWN0aW9uJykpIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlICs9IGDwn4yQICoqTmV0d29yayBJc3N1ZSoqOlxcbmA7XG4gICAgICAgIGVycm9yTWVzc2FnZSArPSBg4oCiIENoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvblxcbmA7XG4gICAgICAgIGVycm9yTWVzc2FnZSArPSBg4oCiIFRyeSBhZ2FpbiBpbiBhIGZldyBtaW51dGVzXFxuYDtcbiAgICAgICAgZXJyb3JNZXNzYWdlICs9IGDigKIgQ2hlY2sgR2l0SHViIHN0YXR1czogaHR0cHM6Ly9zdGF0dXMuZ2l0aHViLmNvbVxcblxcbmA7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGVycm9yTWVzc2FnZSArPSBg8J+akSAqKkVtZXJnZW5jeSBBbHRlcm5hdGl2ZXMqKjpcXG5gO1xuICAgICAgZXJyb3JNZXNzYWdlICs9IGAxLiDwn5SEICoqUmV0cnkqKjogVHJ5IHRoZSBzYW1lIGNvbW1hbmQgYWdhaW5cXG5gO1xuICAgICAgZXJyb3JNZXNzYWdlICs9IGAyLiDwn5OdICoqQ2hlY2sgY29udGVudCoqOiBVc2UgXFxgbGlzdF9wb3J0Zm9saW9cXGAgdG8gdmVyaWZ5IHRoZSBlbGVtZW50IGV4aXN0c1xcbmA7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYDMuIPCfjq8gKipTcGVjaWZ5IHR5cGUqKjogQWRkIFxcYC0tdHlwZT1wZXJzb25hc1xcYCBpZiB5b3Uga25vdyB0aGUgZWxlbWVudCB0eXBlXFxuYDtcbiAgICAgIGVycm9yTWVzc2FnZSArPSBgNC4g8J+akSAqKk1hbnVhbCB1cGxvYWQqKjogQ29weSBjb250ZW50IGRpcmVjdGx5IHRvIEdpdEh1YiB2aWEgd2ViIGludGVyZmFjZVxcblxcbmA7XG4gICAgICBlcnJvck1lc3NhZ2UgKz0gYPCfk54gKipOZWVkIGhlbHA/KiogVGhpcyBsb29rcyBsaWtlIGEgc3lzdGVtIGlzc3VlLiBQbGVhc2UgcmVwb3J0IGl0IHdpdGggdGhlIGVycm9yIGRldGFpbHMgYWJvdmUuYDtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogZXJyb3JNZXNzYWdlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldENvbGxlY3Rpb25DYWNoZUhlYWx0aCgpIHtcbiAgICB0cnkge1xuICAgICAgLy8gR2V0IGNhY2hlIHN0YXRpc3RpY3MgZnJvbSBib3RoIGNhY2hlc1xuICAgICAgY29uc3QgY29sbGVjdGlvblN0YXRzID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uQ2FjaGUuZ2V0Q2FjaGVTdGF0cygpO1xuICAgICAgY29uc3Qgc2VhcmNoU3RhdHMgPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb25TZWFyY2guZ2V0Q2FjaGVTdGF0cygpO1xuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiBjYWNoZSBkaXJlY3RvcnkgZXhpc3RzXG4gICAgICBjb25zdCBjYWNoZURpciA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnLmRvbGxob3VzZW1jcCcsICdjYWNoZScpO1xuICAgICAgbGV0IGNhY2hlRmlsZUV4aXN0cyA9IGZhbHNlO1xuICAgICAgbGV0IGNhY2hlRmlsZVNpemUgPSAwO1xuICAgICAgXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjYWNoZUZpbGUgPSBwYXRoLmpvaW4oY2FjaGVEaXIsICdjb2xsZWN0aW9uLWNhY2hlLmpzb24nKTtcbiAgICAgICAgY29uc3QgZmlsZVN0YXRzID0gYXdhaXQgZnMuc3RhdChjYWNoZUZpbGUpO1xuICAgICAgICBjYWNoZUZpbGVFeGlzdHMgPSB0cnVlO1xuICAgICAgICBjYWNoZUZpbGVTaXplID0gZmlsZVN0YXRzLnNpemU7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBDYWNoZSBmaWxlIGRvZXNuJ3QgZXhpc3QgeWV0XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEZvcm1hdCBjYWNoZSBhZ2VcbiAgICAgIGNvbnN0IGZvcm1hdEFnZSA9IChhZ2VNczogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgICAgICAgaWYgKGFnZU1zID09PSAwKSByZXR1cm4gJ05vdCBjYWNoZWQnO1xuICAgICAgICBjb25zdCBob3VycyA9IE1hdGguZmxvb3IoYWdlTXMgLyAoMTAwMCAqIDYwICogNjApKTtcbiAgICAgICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IoKGFnZU1zICUgKDEwMDAgKiA2MCAqIDYwKSkgLyAoMTAwMCAqIDYwKSk7XG4gICAgICAgIGlmIChob3VycyA+IDApIHtcbiAgICAgICAgICByZXR1cm4gYCR7aG91cnN9aCAke21pbnV0ZXN9bSBvbGRgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHttaW51dGVzfW0gb2xkYDtcbiAgICAgIH07XG4gICAgICBcbiAgICAgIC8vIEJ1aWxkIGhlYWx0aCByZXBvcnQgd2l0aCBib3RoIGNhY2hlIHN5c3RlbXNcbiAgICAgIGNvbnN0IGhlYWx0aFJlcG9ydCA9IHtcbiAgICAgICAgY29sbGVjdGlvbjoge1xuICAgICAgICAgIHN0YXR1czogY29sbGVjdGlvblN0YXRzLmlzVmFsaWQgPyAnaGVhbHRoeScgOiAoY2FjaGVGaWxlRXhpc3RzID8gJ2V4cGlyZWQnIDogJ2VtcHR5JyksXG4gICAgICAgICAgY2FjaGVFeGlzdHM6IGNhY2hlRmlsZUV4aXN0cyxcbiAgICAgICAgICBpdGVtQ291bnQ6IGNvbGxlY3Rpb25TdGF0cy5pdGVtQ291bnQsXG4gICAgICAgICAgY2FjaGVBZ2U6IGZvcm1hdEFnZShjb2xsZWN0aW9uU3RhdHMuY2FjaGVBZ2UpLFxuICAgICAgICAgIGNhY2hlQWdlTXM6IGNvbGxlY3Rpb25TdGF0cy5jYWNoZUFnZSxcbiAgICAgICAgICBpc1ZhbGlkOiBjb2xsZWN0aW9uU3RhdHMuaXNWYWxpZCxcbiAgICAgICAgICBjYWNoZUZpbGVTaXplOiBjYWNoZUZpbGVTaXplLFxuICAgICAgICAgIGNhY2hlRmlsZVNpemVGb3JtYXR0ZWQ6IGNhY2hlRmlsZVNpemUgPiAwID8gYCR7KGNhY2hlRmlsZVNpemUgLyAxMDI0KS50b0ZpeGVkKDIpfSBLQmAgOiAnMCBLQicsXG4gICAgICAgICAgdHRsUmVtYWluaW5nOiBjb2xsZWN0aW9uU3RhdHMuaXNWYWxpZCA/IGZvcm1hdEFnZSgyNCAqIDYwICogNjAgKiAxMDAwIC0gY29sbGVjdGlvblN0YXRzLmNhY2hlQWdlKSA6ICdFeHBpcmVkJ1xuICAgICAgICB9LFxuICAgICAgICBpbmRleDoge1xuICAgICAgICAgIHN0YXR1czogc2VhcmNoU3RhdHMuaW5kZXguaXNWYWxpZCA/ICdoZWFsdGh5JyA6IChzZWFyY2hTdGF0cy5pbmRleC5oYXNDYWNoZSA/ICdleHBpcmVkJyA6ICdlbXB0eScpLFxuICAgICAgICAgIGhhc0NhY2hlOiBzZWFyY2hTdGF0cy5pbmRleC5oYXNDYWNoZSxcbiAgICAgICAgICBlbGVtZW50czogc2VhcmNoU3RhdHMuaW5kZXguZWxlbWVudHMsXG4gICAgICAgICAgY2FjaGVBZ2U6IGZvcm1hdEFnZShzZWFyY2hTdGF0cy5pbmRleC5hZ2UpLFxuICAgICAgICAgIGlzVmFsaWQ6IHNlYXJjaFN0YXRzLmluZGV4LmlzVmFsaWQsXG4gICAgICAgICAgdHRsUmVtYWluaW5nOiBzZWFyY2hTdGF0cy5pbmRleC5pc1ZhbGlkID8gZm9ybWF0QWdlKDE1ICogNjAgKiAxMDAwIC0gc2VhcmNoU3RhdHMuaW5kZXguYWdlKSA6ICdFeHBpcmVkJ1xuICAgICAgICB9LFxuICAgICAgICBvdmVyYWxsOiB7XG4gICAgICAgICAgcmVjb21tZW5kYXRpb246IChjb2xsZWN0aW9uU3RhdHMuaXNWYWxpZCB8fCBzZWFyY2hTdGF0cy5pbmRleC5pc1ZhbGlkKVxuICAgICAgICAgICAgPyAnQ2FjaGUgc3lzdGVtIGlzIG9wZXJhdGlvbmFsIGFuZCBzZXJ2aW5nIGNvbnRlbnQgZWZmaWNpZW50bHknXG4gICAgICAgICAgICA6ICdDYWNoZSBzeXN0ZW0gd2lsbCByZWZyZXNoIG9uIG5leHQgYWNjZXNzIGZvciBvcHRpbWFsIHBlcmZvcm1hbmNlJ1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5OKICoqQ29sbGVjdGlvbiBDYWNoZSBIZWFsdGggQ2hlY2sqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBgIyMg8J+XhO+4jyBDb2xsZWN0aW9uIENhY2hlIChMZWdhY3kpXFxuYCArXG4gICAgICAgICAgICAgIGAqKlN0YXR1cyoqOiAke2hlYWx0aFJlcG9ydC5jb2xsZWN0aW9uLnN0YXR1cyA9PT0gJ2hlYWx0aHknID8gJ+KchScgOiBoZWFsdGhSZXBvcnQuY29sbGVjdGlvbi5zdGF0dXMgPT09ICdleHBpcmVkJyA/ICfimqDvuI8nIDogJ/Cfk6YnfSAke2hlYWx0aFJlcG9ydC5jb2xsZWN0aW9uLnN0YXR1cy50b1VwcGVyQ2FzZSgpfVxcbmAgK1xuICAgICAgICAgICAgICBgKipJdGVtcyBDYWNoZWQqKjogJHtoZWFsdGhSZXBvcnQuY29sbGVjdGlvbi5pdGVtQ291bnR9XFxuYCArXG4gICAgICAgICAgICAgIGAqKkNhY2hlIEFnZSoqOiAke2hlYWx0aFJlcG9ydC5jb2xsZWN0aW9uLmNhY2hlQWdlfVxcbmAgK1xuICAgICAgICAgICAgICBgKipDYWNoZSBTaXplKio6ICR7aGVhbHRoUmVwb3J0LmNvbGxlY3Rpb24uY2FjaGVGaWxlU2l6ZUZvcm1hdHRlZH1cXG5gICtcbiAgICAgICAgICAgICAgYCoqVFRMIFJlbWFpbmluZyoqOiAke2hlYWx0aFJlcG9ydC5jb2xsZWN0aW9uLnR0bFJlbWFpbmluZ31cXG5cXG5gICtcbiAgICAgICAgICAgICAgYCMjIPCfmoAgSW5kZXggQ2FjaGUgKEVuaGFuY2VkIFNlYXJjaClcXG5gICtcbiAgICAgICAgICAgICAgYCoqU3RhdHVzKio6ICR7aGVhbHRoUmVwb3J0LmluZGV4LnN0YXR1cyA9PT0gJ2hlYWx0aHknID8gJ+KchScgOiBoZWFsdGhSZXBvcnQuaW5kZXguc3RhdHVzID09PSAnZXhwaXJlZCcgPyAn4pqg77iPJyA6ICfwn5OmJ30gJHtoZWFsdGhSZXBvcnQuaW5kZXguc3RhdHVzLnRvVXBwZXJDYXNlKCl9XFxuYCArXG4gICAgICAgICAgICAgIGAqKkVsZW1lbnRzIEluZGV4ZWQqKjogJHtoZWFsdGhSZXBvcnQuaW5kZXguZWxlbWVudHN9XFxuYCArXG4gICAgICAgICAgICAgIGAqKkNhY2hlIEFnZSoqOiAke2hlYWx0aFJlcG9ydC5pbmRleC5jYWNoZUFnZX1cXG5gICtcbiAgICAgICAgICAgICAgYCoqVFRMIFJlbWFpbmluZyoqOiAke2hlYWx0aFJlcG9ydC5pbmRleC50dGxSZW1haW5pbmd9XFxuXFxuYCArXG4gICAgICAgICAgICAgIGAqKk92ZXJhbGwgU3RhdHVzKio6ICR7aGVhbHRoUmVwb3J0Lm92ZXJhbGwucmVjb21tZW5kYXRpb259XFxuXFxuYCArXG4gICAgICAgICAgICAgIGBUaGUgZW5oYW5jZWQgaW5kZXggY2FjaGUgcHJvdmlkZXMgZmFzdCBzZWFyY2ggd2l0aCBwYWdpbmF0aW9uLCBmaWx0ZXJpbmcsIGFuZCBzb3J0aW5nLiBgICtcbiAgICAgICAgICAgICAgYFRoZSBjb2xsZWN0aW9uIGNhY2hlIHNlcnZlcyBhcyBhIGZhbGxiYWNrIGZvciBvZmZsaW5lIGJyb3dzaW5nLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGdldCBjYWNoZSBoZWFsdGg6ICR7ZXJyb3JNZXNzYWdlfWApO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgRmFpbGVkIHRvIGdldCBjYWNoZSBoZWFsdGg6ICR7ZXJyb3JNZXNzYWdlfWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLy8gVXNlciBpZGVudGl0eSBtYW5hZ2VtZW50XG4gIGFzeW5jIHNldFVzZXJJZGVudGl0eSh1c2VybmFtZTogc3RyaW5nLCBlbWFpbD86IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIXVzZXJuYW1lIHx8IHVzZXJuYW1lLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgVXNlcm5hbWUgY2Fubm90IGJlIGVtcHR5YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgYW5kIHNhbml0aXplIHVzZXJuYW1lXG4gICAgICBjb25zdCB2YWxpZGF0ZWRVc2VybmFtZSA9IHZhbGlkYXRlVXNlcm5hbWUodXNlcm5hbWUpO1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSBlbWFpbCBpZiBwcm92aWRlZFxuICAgICAgbGV0IHZhbGlkYXRlZEVtYWlsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoZW1haWwpIHtcbiAgICAgICAgY29uc3Qgc2FuaXRpemVkRW1haWwgPSBzYW5pdGl6ZUlucHV0KGVtYWlsLCAxMDApO1xuICAgICAgICBpZiAoIVZBTElEQVRJT05fUEFUVEVSTlMuU0FGRV9FTUFJTC50ZXN0KHNhbml0aXplZEVtYWlsKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBlbWFpbCBmb3JtYXQnKTtcbiAgICAgICAgfVxuICAgICAgICB2YWxpZGF0ZWRFbWFpbCA9IHNhbml0aXplZEVtYWlsO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgdGhlIHZhbGlkYXRlZCB1c2VyIGlkZW50aXR5XG4gICAgICB0aGlzLmN1cnJlbnRVc2VyID0gdmFsaWRhdGVkVXNlcm5hbWU7XG4gICAgICBpZiAodmFsaWRhdGVkRW1haWwpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0VNQUlMID0gdmFsaWRhdGVkRW1haWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKchSAqKlVzZXIgSWRlbnRpdHkgU2V0KipcXG5cXG5gICtcbiAgICAgICAgICAgIGDwn5GkICoqVXNlcm5hbWU6KiogJHt2YWxpZGF0ZWRVc2VybmFtZX1cXG5gICtcbiAgICAgICAgICAgIGAke3ZhbGlkYXRlZEVtYWlsID8gYPCfk6cgKipFbWFpbDoqKiAke3ZhbGlkYXRlZEVtYWlsfVxcbmAgOiAnJ31gICtcbiAgICAgICAgICAgIGBcXG7wn46vICoqTmV4dCBTdGVwczoqKlxcbmAgK1xuICAgICAgICAgICAgYOKAoiBOZXcgcGVyc29uYXMgeW91IGNyZWF0ZSB3aWxsIGJlIGF0dHJpYnV0ZWQgdG8gXCIke3ZhbGlkYXRlZFVzZXJuYW1lfVwiXFxuYCArXG4gICAgICAgICAgICBg4oCiIFNldCBlbnZpcm9ubWVudCB2YXJpYWJsZSBcXGBET0xMSE9VU0VfVVNFUj0ke3ZhbGlkYXRlZFVzZXJuYW1lfVxcYCB0byBwZXJzaXN0IHRoaXMgc2V0dGluZ1xcbmAgK1xuICAgICAgICAgICAgYCR7dmFsaWRhdGVkRW1haWwgPyBg4oCiIFNldCBlbnZpcm9ubWVudCB2YXJpYWJsZSBcXGBET0xMSE9VU0VfRU1BSUw9JHt2YWxpZGF0ZWRFbWFpbH1cXGAgZm9yIGNvbnRhY3QgaW5mb1xcbmAgOiAnJ31gICtcbiAgICAgICAgICAgIGDigKIgVXNlIFxcYGNsZWFyX3VzZXJfaWRlbnRpdHlcXGAgdG8gcmV0dXJuIHRvIGFub255bW91cyBtb2RlYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3Qgc2FuaXRpemVkID0gU2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqVmFsaWRhdGlvbiBFcnJvcioqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGAke3Nhbml0aXplZC5tZXNzYWdlfVxcblxcbmAgK1xuICAgICAgICAgICAgICBgUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCB1c2VybmFtZSAoYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsIGh5cGhlbnMsIHVuZGVyc2NvcmVzLCBkb3RzIG9ubHkpLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0VXNlcklkZW50aXR5KCkge1xuICAgIGNvbnN0IGVtYWlsID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0VNQUlMO1xuICAgIFxuICAgIGlmICghdGhpcy5jdXJyZW50VXNlcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+RpCAqKlVzZXIgSWRlbnRpdHk6IEFub255bW91cyoqXFxuXFxuYCArXG4gICAgICAgICAgICBg8J+UkiAqKlN0YXR1czoqKiBBbm9ueW1vdXMgbW9kZVxcbmAgK1xuICAgICAgICAgICAgYPCfk50gKipBdHRyaWJ1dGlvbjoqKiBQZXJzb25hcyB3aWxsIHVzZSBhbm9ueW1vdXMgSURzXFxuXFxuYCArXG4gICAgICAgICAgICBgKipUbyBzZXQgeW91ciBpZGVudGl0eToqKlxcbmAgK1xuICAgICAgICAgICAgYOKAoiBVc2U6IFxcYHNldF91c2VyX2lkZW50aXR5IFwieW91ci11c2VybmFtZVwiXFxgXFxuYCArXG4gICAgICAgICAgICBg4oCiIE9yIHNldCBlbnZpcm9ubWVudCB2YXJpYWJsZTogXFxgRE9MTEhPVVNFX1VTRVI9eW91ci11c2VybmFtZVxcYGAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCfkaQgKipVc2VyIElkZW50aXR5OiAke3RoaXMuY3VycmVudFVzZXJ9KipcXG5cXG5gICtcbiAgICAgICAgICBg4pyFICoqU3RhdHVzOioqIEF1dGhlbnRpY2F0ZWRcXG5gICtcbiAgICAgICAgICBg8J+RpCAqKlVzZXJuYW1lOioqICR7dGhpcy5jdXJyZW50VXNlcn1cXG5gICtcbiAgICAgICAgICBgJHtlbWFpbCA/IGDwn5OnICoqRW1haWw6KiogJHtlbWFpbH1cXG5gIDogJyd9YCArXG4gICAgICAgICAgYPCfk50gKipBdHRyaWJ1dGlvbjoqKiBOZXcgcGVyc29uYXMgd2lsbCBiZSBjcmVkaXRlZCB0byBcIiR7dGhpcy5jdXJyZW50VXNlcn1cIlxcblxcbmAgK1xuICAgICAgICAgIGAqKkVudmlyb25tZW50IFZhcmlhYmxlczoqKlxcbmAgK1xuICAgICAgICAgIGDigKIgXFxgRE9MTEhPVVNFX1VTRVI9JHt0aGlzLmN1cnJlbnRVc2VyfVxcYFxcbmAgK1xuICAgICAgICAgIGAke2VtYWlsID8gYOKAoiBcXGBET0xMSE9VU0VfRU1BSUw9JHtlbWFpbH1cXGBcXG5gIDogJyd9YCArXG4gICAgICAgICAgYFxcbioqTWFuYWdlbWVudDoqKlxcbmAgK1xuICAgICAgICAgIGDigKIgVXNlIFxcYGNsZWFyX3VzZXJfaWRlbnRpdHlcXGAgdG8gcmV0dXJuIHRvIGFub255bW91cyBtb2RlXFxuYCArXG4gICAgICAgICAgYOKAoiBVc2UgXFxgc2V0X3VzZXJfaWRlbnRpdHkgXCJuZXctdXNlcm5hbWVcIlxcYCB0byBjaGFuZ2UgdXNlcm5hbWVgLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgY2xlYXJVc2VySWRlbnRpdHkoKSB7XG4gICAgY29uc3Qgd2FzU2V0ID0gdGhpcy5jdXJyZW50VXNlciAhPT0gbnVsbDtcbiAgICBjb25zdCBwcmV2aW91c1VzZXIgPSB0aGlzLmN1cnJlbnRVc2VyO1xuICAgIHRoaXMuY3VycmVudFVzZXIgPSBudWxsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IHdhc1NldCBcbiAgICAgICAgICAgID8gYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pyFICoqVXNlciBJZGVudGl0eSBDbGVhcmVkKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYPCfkaQgKipQcmV2aW91czoqKiAke3ByZXZpb3VzVXNlcn1cXG5gICtcbiAgICAgICAgICAgICAgYPCflJIgKipDdXJyZW50OioqIEFub255bW91cyBtb2RlXFxuXFxuYCArXG4gICAgICAgICAgICAgIGDwn5OdICoqRWZmZWN0OioqIE5ldyBwZXJzb25hcyB3aWxsIHVzZSBhbm9ueW1vdXMgSURzXFxuXFxuYCArXG4gICAgICAgICAgICAgIGDimqDvuI8gKipOb3RlOioqIFRoaXMgb25seSBhZmZlY3RzIHRoZSBjdXJyZW50IHNlc3Npb24uXFxuYCArXG4gICAgICAgICAgICAgIGBUbyBwZXJzaXN0IHRoaXMgY2hhbmdlLCB1bnNldCB0aGUgXFxgRE9MTEhPVVNFX1VTRVJcXGAgZW52aXJvbm1lbnQgdmFyaWFibGUuYFxuICAgICAgICAgICAgOiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3ihLnvuI8gKipBbHJlYWR5IGluIEFub255bW91cyBNb2RlKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYPCfkaQgTm8gdXNlciBpZGVudGl0eSB3YXMgc2V0LlxcblxcbmAgK1xuICAgICAgICAgICAgICBgVXNlIFxcYHNldF91c2VyX2lkZW50aXR5IFwidXNlcm5hbWVcIlxcYCB0byBzZXQgeW91ciBpZGVudGl0eS5gLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDdXJyZW50VXNlckZvckF0dHJpYnV0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFVzZXIgfHwgZ2VuZXJhdGVBbm9ueW1vdXNJZCgpO1xuICB9XG5cbiAgLy8gR2l0SHViIGF1dGhlbnRpY2F0aW9uIG1hbmFnZW1lbnRcbiAgYXN5bmMgc2V0dXBHaXRIdWJBdXRoKCkge1xuICAgIHRyeSB7XG4gICAgICAvLyBDaGVjayBjdXJyZW50IGF1dGggc3RhdHVzIGZpcnN0XG4gICAgICBjb25zdCBjdXJyZW50U3RhdHVzID0gYXdhaXQgdGhpcy5naXRodWJBdXRoTWFuYWdlci5nZXRBdXRoU3RhdHVzKCk7XG4gICAgICBcbiAgICAgIGlmIChjdXJyZW50U3RhdHVzLmlzQXV0aGVudGljYXRlZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKchSAqKkFscmVhZHkgQ29ubmVjdGVkIHRvIEdpdEh1YioqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBg8J+RpCAqKlVzZXJuYW1lOioqICR7Y3VycmVudFN0YXR1cy51c2VybmFtZX1cXG5gICtcbiAgICAgICAgICAgICAgICAgIGDwn5SRICoqUGVybWlzc2lvbnM6KiogJHtjdXJyZW50U3RhdHVzLnNjb3Blcz8uam9pbignLCAnKSB8fCAnYmFzaWMgYWNjZXNzJ31cXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBZb3UncmUgYWxsIHNldCEgWW91IGNhbjpcXG5gICtcbiAgICAgICAgICAgICAgICAgIGDigKIgQnJvd3NlIHRoZSBjb2xsZWN0aW9uXFxuYCArXG4gICAgICAgICAgICAgICAgICBg4oCiIEluc3RhbGwgY29udGVudFxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKAoiBTdWJtaXQgeW91ciBjcmVhdGlvbnNcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBUbyBkaXNjb25uZWN0LCBzYXkgXCJkaXNjb25uZWN0IGZyb20gR2l0SHViXCJgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSW5pdGlhdGUgZGV2aWNlIGZsb3dcbiAgICAgIGxldCBkZXZpY2VSZXNwb25zZTogRGV2aWNlQ29kZVJlc3BvbnNlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZGV2aWNlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdpdGh1YkF1dGhNYW5hZ2VyLmluaXRpYXRlRGV2aWNlRmxvdygpO1xuICAgICAgfSBjYXRjaCAoZGV2aWNlRmxvd0Vycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignT0FVVEhfSU5ERVhfMjY4MTogRmFpbGVkIHRvIGluaXRpYXRlIGRldmljZSBmbG93JywgeyBlcnJvcjogZGV2aWNlRmxvd0Vycm9yIH0pO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9BVVRIX0lOREVYXzI2ODE6IERldmljZSBmbG93IGluaXRpYXRpb24gZmFpbGVkIC0gJHtkZXZpY2VGbG93RXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGRldmljZUZsb3dFcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWApO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDUklUSUNBTCBGSVg6IFVzZSBoZWxwZXIgcHJvY2VzcyBhcHByb2FjaCBmcm9tIFBSICM1MThcbiAgICAgIC8vIE1DUCBzZXJ2ZXJzIGFyZSBzdGF0ZWxlc3MgYW5kIHRlcm1pbmF0ZSBhZnRlciByZXR1cm5pbmcgcmVzcG9uc2VcbiAgICAgIC8vIFRoZSBoZWxwZXIgcHJvY2VzcyBzdXJ2aXZlcyBNQ1AgdGVybWluYXRpb24gYW5kIGNhbiBjb21wbGV0ZSBPQXV0aCBwb2xsaW5nXG4gICAgICBcbiAgICAgIC8vIEdldCB0aGUgT0F1dGggY2xpZW50IElEIC0gdXNlIHRoZSBzYW1lIG1ldGhvZCB0aGF0IGhhcyB0aGUgZGVmYXVsdCBmYWxsYmFja1xuICAgICAgLy8gVGhpcyBlbnN1cmVzIHdlIGdldCB0aGUgZGVmYXVsdCBjbGllbnQgSUQgaWYgbm8gZW52L2NvbmZpZyBpcyBzZXRcbiAgICAgIGxvZ2dlci5kZWJ1ZygnT0FVVEhfU1RFUF80OiBHZXR0aW5nIGNsaWVudCBJRCBmb3IgaGVscGVyIHByb2Nlc3MnKTtcbiAgICAgIGNvbnN0IGNsaWVudElkID0gYXdhaXQgR2l0SHViQXV0aE1hbmFnZXIuZ2V0Q2xpZW50SWQoKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnT0FVVEhfU1RFUF81OiBDbGllbnQgSUQgb2J0YWluZWQnLCB7IGNsaWVudElkOiBjbGllbnRJZD8uc3Vic3RyaW5nKDAsIDgpICsgJy4uLicgfSk7XG4gICAgICBcbiAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiBub3cgc2luY2UgZ2V0Q2xpZW50SWQoKSBhbHdheXMgcmV0dXJucyBhIHZhbHVlXG4gICAgICAvLyAoZW52LCBjb25maWcsIG9yIGRlZmF1bHQpLCBidXQga2VlcGluZyBmb3Igc2FmZXR5XG4gICAgICBpZiAoIWNsaWVudElkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqR2l0SHViIE9BdXRoIENvbmZpZ3VyYXRpb24gRXJyb3IqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYFVuYWJsZSB0byBvYnRhaW4gR2l0SHViIE9BdXRoIGNsaWVudCBJRC5cXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBUaGlzIGlzIHVuZXhwZWN0ZWQgLSBwbGVhc2UgcmVwb3J0IHRoaXMgaXNzdWUuXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgKipXb3JrYXJvdW5kOioqXFxuYCArXG4gICAgICAgICAgICAgICAgICBg4oCiIFNldCBlbnZpcm9ubWVudCB2YXJpYWJsZTogRE9MTEhPVVNFX0dJVEhVQl9DTElFTlRfSURcXG5gICtcbiAgICAgICAgICAgICAgICAgIGDigKIgT3IgdXNlIEdpdEh1YiBDTEk6IGdoIGF1dGggbG9naW4gLS13ZWJgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gU3Bhd24gdGhlIE9BdXRoIGhlbHBlciBwcm9jZXNzXG4gICAgICAvLyBUaGUgaGVscGVyIHJ1bnMgaW5kZXBlbmRlbnRseSBhbmQgc3Vydml2ZXMgTUNQIHNlcnZlciB0ZXJtaW5hdGlvblxuICAgICAgbGV0IGhlbHBlclBhdGg6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gR2V0IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGNvbXBpbGVkIEpTIGZpbGUgaXNcbiAgICAgICAgY29uc3QgX19maWxlbmFtZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKTtcbiAgICAgICAgY29uc3QgX19kaXJuYW1lID0gcGF0aC5kaXJuYW1lKF9fZmlsZW5hbWUpO1xuICAgICAgICBcbiAgICAgICAgLy8gRmluZCB0aGUgb2F1dGgtaGVscGVyLm1qcyBmaWxlXG4gICAgICAgIC8vIEl0IHNob3VsZCBiZSBpbiB0aGUgcm9vdCBkaXJlY3RvcnkgKG9uZSBsZXZlbCB1cCBmcm9tIGRpc3QvKVxuICAgICAgICBjb25zdCBwb3NzaWJsZVBhdGhzID0gW1xuICAgICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICdvYXV0aC1oZWxwZXIubWpzJyksICAvLyBGcm9tIGRpc3QvaW5kZXguanNcbiAgICAgICAgICBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJ29hdXRoLWhlbHBlci5tanMnKSwgICAgLy8gRnJvbSBDV0RcbiAgICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCAnb2F1dGgtaGVscGVyLm1qcycpLCAgICAgICAgLy8gU2FtZSBkaXJlY3RvcnlcbiAgICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnb2F1dGgtaGVscGVyLm1qcycpIC8vIE5QTSBwYWNrYWdlIHJvb3RcbiAgICAgICAgXTtcbiAgICAgICAgXG4gICAgICAgIGhlbHBlclBhdGggPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IHRlc3RQYXRoIG9mIHBvc3NpYmxlUGF0aHMpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZnMuYWNjZXNzKHRlc3RQYXRoKTtcbiAgICAgICAgICAgIGhlbHBlclBhdGggPSB0ZXN0UGF0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gVHJ5IG5leHQgcGF0aFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKCFoZWxwZXJQYXRoKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCdPQVVUSF9JTkRFWF8yNzM0OiBvYXV0aC1oZWxwZXIubWpzIG5vdCBmb3VuZCcsIHsgXG4gICAgICAgICAgICBzZWFyY2hlZFBhdGhzOiBwb3NzaWJsZVBhdGhzLFxuICAgICAgICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICAgICAgZGlybmFtZTogX19kaXJuYW1lXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPQVVUSF9IRUxQRVJfTk9UX0ZPVU5EOiBvYXV0aC1oZWxwZXIubWpzIG5vdCBmb3VuZCBhdCBsaW5lIDI3MzQuIFNlYXJjaGVkOiAke3Bvc3NpYmxlUGF0aHMuam9pbignLCAnKX1gKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdPQVVUSF9TVEVQXzY6IFNwYXduaW5nIGhlbHBlciBwcm9jZXNzJywgeyBcbiAgICAgICAgICBoZWxwZXJQYXRoLFxuICAgICAgICAgIGNsaWVudElkOiBjbGllbnRJZD8uc3Vic3RyaW5nKDAsIDgpICsgJy4uLicsXG4gICAgICAgICAgZGV2aWNlQ29kZTogZGV2aWNlUmVzcG9uc2UuZGV2aWNlX2NvZGUuc3Vic3RyaW5nKDAsIDgpICsgJy4uLidcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBTcGF3biB0aGUgaGVscGVyIGFzIGEgZGV0YWNoZWQgcHJvY2Vzc1xuICAgICAgICBjb25zdCBoZWxwZXIgPSBzcGF3bignbm9kZScsIFtcbiAgICAgICAgICBoZWxwZXJQYXRoLFxuICAgICAgICAgIGRldmljZVJlc3BvbnNlLmRldmljZV9jb2RlLFxuICAgICAgICAgIChkZXZpY2VSZXNwb25zZS5pbnRlcnZhbCB8fCA1KS50b1N0cmluZygpLFxuICAgICAgICAgIGRldmljZVJlc3BvbnNlLmV4cGlyZXNfaW4udG9TdHJpbmcoKSxcbiAgICAgICAgICBjbGllbnRJZFxuICAgICAgICBdLCB7XG4gICAgICAgICAgZGV0YWNoZWQ6IHRydWUsXG4gICAgICAgICAgc3RkaW86ICdpZ25vcmUnLCAvLyBDb21wbGV0ZWx5IGRldGFjaCBJL09cbiAgICAgICAgICB3aW5kb3dzSGlkZTogdHJ1ZSAvLyBIaWRlIGNvbnNvbGUgb24gV2luZG93c1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIEFsbG93IHRoZSBwYXJlbnQgcHJvY2VzcyB0byBleGl0IHdpdGhvdXQgd2FpdGluZyBmb3IgdGhlIGhlbHBlclxuICAgICAgICBoZWxwZXIudW5yZWYoKTtcbiAgICAgICAgXG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnT0FVVEhfU1RFUF83OiBIZWxwZXIgcHJvY2VzcyBzcGF3bmVkIHN1Y2Nlc3NmdWxseScsIHsgcGlkOiBoZWxwZXIucGlkIH0pO1xuICAgICAgICBcbiAgICAgICAgbG9nZ2VyLmluZm8oJ09BdXRoIGhlbHBlciBwcm9jZXNzIHNwYXduZWQnLCB7XG4gICAgICAgICAgcGlkOiBoZWxwZXIucGlkLFxuICAgICAgICAgIGV4cGlyZXNJbjogZGV2aWNlUmVzcG9uc2UuZXhwaXJlc19pbixcbiAgICAgICAgICB1c2VyQ29kZTogZGV2aWNlUmVzcG9uc2UudXNlcl9jb2RlXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gV3JpdGUgc3RhdGUgZmlsZSBmb3IgbW9uaXRvcmluZ1xuICAgICAgICBjb25zdCBzdGF0ZUZpbGUgPSBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICcuYXV0aCcsICdvYXV0aC1oZWxwZXItc3RhdGUuanNvbicpO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IHBhdGguZGlybmFtZShzdGF0ZUZpbGUpO1xuICAgICAgICBhd2FpdCBmcy5ta2RpcihzdGF0ZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBzdGF0ZSA9IHtcbiAgICAgICAgICBwaWQ6IGhlbHBlci5waWQsXG4gICAgICAgICAgZGV2aWNlQ29kZTogZGV2aWNlUmVzcG9uc2UuZGV2aWNlX2NvZGUsXG4gICAgICAgICAgdXNlckNvZGU6IGRldmljZVJlc3BvbnNlLnVzZXJfY29kZSxcbiAgICAgICAgICBzdGFydFRpbWU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICBleHBpcmVzQXQ6IG5ldyBEYXRlKERhdGUubm93KCkgKyBkZXZpY2VSZXNwb25zZS5leHBpcmVzX2luICogMTAwMCkudG9JU09TdHJpbmcoKVxuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHN0YXRlRmlsZSwgSlNPTi5zdHJpbmdpZnkoc3RhdGUsIG51bGwsIDIpKTtcbiAgICAgICAgXG4gICAgICB9IGNhdGNoIChzcGF3bkVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignT0FVVEhfSU5ERVhfMjc3NDogRmFpbGVkIHRvIHNwYXduIE9BdXRoIGhlbHBlciBwcm9jZXNzJywgeyBcbiAgICAgICAgICBlcnJvcjogc3Bhd25FcnJvcixcbiAgICAgICAgICBoZWxwZXJQYXRoLFxuICAgICAgICAgIGNsaWVudElkOiBjbGllbnRJZD8uc3Vic3RyaW5nKDAsIDgpICsgJy4uLicsXG4gICAgICAgICAgZXJyb3JDb2RlOiAoc3Bhd25FcnJvciBhcyBhbnkpPy5jb2RlLFxuICAgICAgICAgIHN5c2NhbGw6IChzcGF3bkVycm9yIGFzIGFueSk/LnN5c2NhbGxcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBQcm92aWRlIHNwZWNpZmljIGVycm9yIG1lc3NhZ2UgYmFzZWQgb24gZXJyb3IgdHlwZVxuICAgICAgICBsZXQgZXJyb3JEZXRhaWwgPSAnJztcbiAgICAgICAgaWYgKHNwYXduRXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIGlmIChzcGF3bkVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ0VOT0VOVCcpKSB7XG4gICAgICAgICAgICBlcnJvckRldGFpbCA9IGBPQVVUSF9IRUxQRVJfU1BBV05fRU5PRU5UOiBOb2RlLmpzIGV4ZWN1dGFibGUgbm90IGZvdW5kIG9yIGhlbHBlciBzY3JpcHQgbWlzc2luZyBhdCAke2hlbHBlclBhdGh9YDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHNwYXduRXJyb3IubWVzc2FnZS5pbmNsdWRlcygnRUFDQ0VTJykpIHtcbiAgICAgICAgICAgIGVycm9yRGV0YWlsID0gYE9BVVRIX0hFTFBFUl9TUEFXTl9FQUNDRVM6IFBlcm1pc3Npb24gZGVuaWVkIHdoZW4gdHJ5aW5nIHRvIGV4ZWN1dGUgJHtoZWxwZXJQYXRofWA7XG4gICAgICAgICAgfSBlbHNlIGlmIChzcGF3bkVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ0UyQklHJykpIHtcbiAgICAgICAgICAgIGVycm9yRGV0YWlsID0gYE9BVVRIX0hFTFBFUl9TUEFXTl9FMkJJRzogQXJndW1lbnQgbGlzdCB0b28gbG9uZyBmb3IgaGVscGVyIHByb2Nlc3NgO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvckRldGFpbCA9IGBPQVVUSF9IRUxQRVJfU1BBV05fRkFJTEVEOiBDb3VsZCBub3Qgc3RhcnQgYmFja2dyb3VuZCBhdXRoZW50aWNhdGlvbiBwcm9jZXNzIGF0IGxpbmUgMjc3NCAtICR7c3Bhd25FcnJvci5tZXNzYWdlfWA7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVycm9yRGV0YWlsID0gYE9BVVRIX0hFTFBFUl9TUEFXTl9VTktOT1dOOiBVbmtub3duIHNwYXduIGVycm9yIGF0IGxpbmUgMjc3NGA7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIEZhbGwgYmFjayB0byBpbmZvcm1pbmcgdXNlciBhYm91dCB0aGUgaXNzdWVcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3imqDvuI8gKipPQXV0aCBIZWxwZXIgTGF1bmNoIEZhaWxlZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgJHtlcnJvckRldGFpbH1cXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGAqKkFsdGVybmF0aXZlIE9wdGlvbnM6KipcXG5gICtcbiAgICAgICAgICAgICAgICAgIGAxLiBUcnkgYWdhaW46IFJ1biBzZXR1cF9naXRodWJfYXV0aCBhZ2FpblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYDIuIFVzZSBHaXRIdWIgQ0xJOiBnaCBhdXRoIGxvZ2luIC0td2ViXFxuYCArXG4gICAgICAgICAgICAgICAgICBgMy4gU2V0IHRva2VuIG1hbnVhbGx5OiBleHBvcnQgR0lUSFVCX1RPS0VOPXlvdXJfdG9rZW5gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gUmV0dXJuIGluc3RydWN0aW9ucyB0byB1c2VyXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IHRoaXMuZ2l0aHViQXV0aE1hbmFnZXIuZm9ybWF0QXV0aEluc3RydWN0aW9ucyhkZXZpY2VSZXNwb25zZSkgK1xuICAgICAgICAgICAgICAgICdcXG5cXG7wn5OdICoqTm90ZSoqOiBBdXRoZW50aWNhdGlvbiB3aWxsIGNvbXBsZXRlIGF1dG9tYXRpY2FsbHkgb25jZSB5b3UgYXV0aG9yaXplLiAnICtcbiAgICAgICAgICAgICAgICAnWW91ciB0b2tlbiB3aWxsIGJlIHN0b3JlZCBzZWN1cmVseSBmb3IgZnV0dXJlIHVzZSEnXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ09BVVRIX0lOREVYXzI4MDY6IE1haW4gY2F0Y2ggYmxvY2sgLSBhdXRoZW50aWNhdGlvbiBzZXR1cCBmYWlsZWQnLCB7IFxuICAgICAgICBlcnJvcixcbiAgICAgICAgZXJyb3JUeXBlOiBlcnJvcj8uY29uc3RydWN0b3I/Lm5hbWUsXG4gICAgICAgIGVycm9yTWVzc2FnZTogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93bidcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBJZiBlcnJvciBhbHJlYWR5IGhhcyBvdXIgZXJyb3IgY29kZSwgcGFzcyBpdCB0aHJvdWdoXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJztcbiAgICAgIGNvbnN0IGhhc0Vycm9yQ29kZSA9IGVycm9yTWVzc2FnZS5pbmNsdWRlcygnT0FVVEhfJyk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqQXV0aGVudGljYXRpb24gU2V0dXAgRmFpbGVkKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgJHtoYXNFcnJvckNvZGUgPyBlcnJvck1lc3NhZ2UgOiBgT0FVVEhfSU5ERVhfMjgwNjogVW5hYmxlIHRvIHN0YXJ0IEdpdEh1YiBhdXRoZW50aWNhdGlvbiAtICR7ZXJyb3JNZXNzYWdlfWB9XFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYCR7IWVycm9yTWVzc2FnZS5pbmNsdWRlcygnT0FVVEhfTkVUV09SSycpID8gJ1BsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24gYW5kIHRyeSBhZ2Fpbi4nIDogJyd9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGFzeW5jIGNoZWNrR2l0SHViQXV0aCgpIHtcbiAgICB0cnkge1xuICAgICAgLy8gRmlyc3QgY2hlY2sgZm9yIE9BdXRoIGhlbHBlciBwcm9jZXNzIGhlYWx0aFxuICAgICAgY29uc3QgaGVscGVySGVhbHRoID0gYXdhaXQgdGhpcy5jaGVja09BdXRoSGVscGVySGVhbHRoKCk7XG4gICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCB0aGlzLmdpdGh1YkF1dGhNYW5hZ2VyLmdldEF1dGhTdGF0dXMoKTtcbiAgICAgIFxuICAgICAgaWYgKHN0YXR1cy5pc0F1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgLy8gQ2xlYW4gdXAgaGVscGVyIHN0YXRlIGZpbGUgaWYgYXV0aCBpcyBzdWNjZXNzZnVsXG4gICAgICAgIGlmIChoZWxwZXJIZWFsdGguZXhpc3RzKSB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVGaWxlID0gcGF0aC5qb2luKGhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAnLmF1dGgnLCAnb2F1dGgtaGVscGVyLXN0YXRlLmpzb24nKTtcbiAgICAgICAgICBhd2FpdCBmcy51bmxpbmsoc3RhdGVGaWxlKS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pyFICoqR2l0SHViIENvbm5lY3RlZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBg8J+RpCAqKlVzZXJuYW1lOioqICR7c3RhdHVzLnVzZXJuYW1lfVxcbmAgK1xuICAgICAgICAgICAgICAgICAgYPCflJEgKipQZXJtaXNzaW9uczoqKiAke3N0YXR1cy5zY29wZXM/LmpvaW4oJywgJykgfHwgJ2Jhc2ljIGFjY2Vzcyd9XFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgKipBdmFpbGFibGUgQWN0aW9uczoqKlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKchSBCcm93c2UgY29sbGVjdGlvblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKchSBJbnN0YWxsIGNvbnRlbnRcXG5gICtcbiAgICAgICAgICAgICAgICAgIGDinIUgU3VibWl0IGNvbnRlbnRcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBFdmVyeXRoaW5nIGlzIHdvcmtpbmcgcHJvcGVybHkhYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGhlbHBlckhlYWx0aC5pc0FjdGl2ZSkge1xuICAgICAgICAvLyBPQXV0aCBoZWxwZXIgaXMgYWN0aXZlbHkgcG9sbGluZ1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKPsyAqKkdpdEh1YiBBdXRoZW50aWNhdGlvbiBJbiBQcm9ncmVzcyoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBg8J+UkSAqKlVzZXIgQ29kZToqKiAke2hlbHBlckhlYWx0aC51c2VyQ29kZX1cXG5gICtcbiAgICAgICAgICAgICAgICAgIGDij7HvuI8gKipUaW1lIFJlbWFpbmluZzoqKiAke01hdGguZmxvb3IoaGVscGVySGVhbHRoLnRpbWVSZW1haW5pbmcgLyA2MCl9bSAke2hlbHBlckhlYWx0aC50aW1lUmVtYWluaW5nICUgNjB9c1xcbmAgK1xuICAgICAgICAgICAgICAgICAgYPCflIQgKipQcm9jZXNzIFN0YXR1czoqKiAke2hlbHBlckhlYWx0aC5wcm9jZXNzQWxpdmUgPyAn4pyFIFJ1bm5pbmcnIDogJ+KaoO+4jyBNYXkgaGF2ZSBzdG9wcGVkJ31cXG5gICtcbiAgICAgICAgICAgICAgICAgIGDwn5OBICoqTG9nIEF2YWlsYWJsZToqKiAke2hlbHBlckhlYWx0aC5oYXNMb2cgPyAnWWVzJyA6ICdObyd9XFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgKipXYWl0aW5nIGZvciB5b3UgdG86KipcXG5gICtcbiAgICAgICAgICAgICAgICAgIGAxLiBHbyB0bzogaHR0cHM6Ly9naXRodWIuY29tL2xvZ2luL2RldmljZVxcbmAgK1xuICAgICAgICAgICAgICAgICAgYDIuIEVudGVyIGNvZGU6ICoqJHtoZWxwZXJIZWFsdGgudXNlckNvZGV9KipcXG5gICtcbiAgICAgICAgICAgICAgICAgIGAzLiBBdXRob3JpemUgdGhlIGFwcGxpY2F0aW9uXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgVGhlIGF1dGhlbnRpY2F0aW9uIHdpbGwgY29tcGxldGUgYXV0b21hdGljYWxseSBvbmNlIHlvdSBhdXRob3JpemUuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgUnVuIHRoaXMgY29tbWFuZCBhZ2FpbiB0byBjaGVjayBzdGF0dXMuYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGhlbHBlckhlYWx0aC5leGlzdHMgJiYgaGVscGVySGVhbHRoLmV4cGlyZWQpIHtcbiAgICAgICAgLy8gSGVscGVyIHN0YXRlIGV4aXN0cyBidXQgZXhwaXJlZFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKPse+4jyAqKkF1dGhlbnRpY2F0aW9uIEV4cGlyZWQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYFRoZSBHaXRIdWIgYXV0aGVudGljYXRpb24gcmVxdWVzdCBoYXMgZXhwaXJlZC5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBVc2VyIGNvZGU6ICR7aGVscGVySGVhbHRoLnVzZXJDb2RlfSAoZXhwaXJlZClcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGAqKlRvIHRyeSBhZ2FpbjoqKlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYFJ1bjogXFxgc2V0dXBfZ2l0aHViX2F1dGhcXGAgdG8gZ2V0IGEgbmV3IGNvZGVcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGAke2hlbHBlckhlYWx0aC5lcnJvckxvZyA/IGAqKkVycm9yIExvZzoqKlxcblxcYFxcYFxcYFxcbiR7aGVscGVySGVhbHRoLmVycm9yTG9nfVxcblxcYFxcYFxcYFxcbmAgOiAnJ31gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdHVzLmhhc1Rva2VuKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pqg77iPICoqR2l0SHViIFRva2VuIEludmFsaWQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYEEgR2l0SHViIHRva2VuIHdhcyBmb3VuZCBidXQgaXQgYXBwZWFycyB0byBiZSBpbnZhbGlkIG9yIGV4cGlyZWQuXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgKipUbyBmaXggdGhpczoqKlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYDEuIFNheSBcInNldCB1cCBHaXRIdWJcIiB0byBhdXRoZW50aWNhdGUgYWdhaW5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGAyLiBPciBjaGVjayB5b3VyIEdJVEhVQl9UT0tFTiBlbnZpcm9ubWVudCB2YXJpYWJsZVxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYE5vdGU6IEJyb3dzZSBhbmQgaW5zdGFsbCBzdGlsbCB3b3JrIHdpdGhvdXQgYXV0aGVudGljYXRpb24hYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCflJIgKipOb3QgQ29ubmVjdGVkIHRvIEdpdEh1YioqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBgWW91J3JlIG5vdCBjdXJyZW50bHkgYXV0aGVudGljYXRlZCB3aXRoIEdpdEh1Yi5cXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGAqKldoYXQgd29ya3Mgd2l0aG91dCBhdXRoOioqXFxuYCArXG4gICAgICAgICAgICAgICAgICBg4pyFIEJyb3dzZSB0aGUgcHVibGljIGNvbGxlY3Rpb25cXG5gICtcbiAgICAgICAgICAgICAgICAgIGDinIUgSW5zdGFsbCBjb21tdW5pdHkgY29udGVudFxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKdjCBTdWJtaXQgeW91ciBvd24gY29udGVudCAocmVxdWlyZXMgYXV0aClcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBUbyBjb25uZWN0LCBqdXN0IHNheSBcInNldCB1cCBHaXRIdWJcIiBvciBcImNvbm5lY3QgdG8gR2l0SHViXCJgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gY2hlY2sgR2l0SHViIGF1dGgnLCB7IGVycm9yIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipVbmFibGUgdG8gQ2hlY2sgQXV0aGVudGljYXRpb24qKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGBFcnJvcjogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgLy8gUHVibGljIG1ldGhvZCBmb3Igb2F1dGhfaGVscGVyX3N0YXR1cyB0b29sXG4gIGFzeW5jIGdldE9BdXRoSGVscGVyU3RhdHVzKHZlcmJvc2U6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBoZWFsdGggPSBhd2FpdCB0aGlzLmNoZWNrT0F1dGhIZWxwZXJIZWFsdGgoKTtcbiAgICAgIGNvbnN0IHN0YXRlRmlsZSA9IHBhdGguam9pbihob21lZGlyKCksICcuZG9sbGhvdXNlJywgJy5hdXRoJywgJ29hdXRoLWhlbHBlci1zdGF0ZS5qc29uJyk7XG4gICAgICBjb25zdCBsb2dGaWxlID0gcGF0aC5qb2luKGhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAnb2F1dGgtaGVscGVyLmxvZycpO1xuICAgICAgY29uc3QgcGlkRmlsZSA9IHBhdGguam9pbihob21lZGlyKCksICcuZG9sbGhvdXNlJywgJy5hdXRoJywgJ29hdXRoLWhlbHBlci5waWQnKTtcbiAgICAgIFxuICAgICAgbGV0IHN0YXR1c1RleHQgPSBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5OKICoqT0F1dGggSGVscGVyIFByb2Nlc3MgRGlhZ25vc3RpY3MqKlxcblxcbmA7XG4gICAgICBcbiAgICAgIC8vIEJhc2ljIHN0YXR1c1xuICAgICAgaWYgKCFoZWFsdGguZXhpc3RzKSB7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoqU3RhdHVzOioqIE5vIE9BdXRoIHByb2Nlc3MgZGV0ZWN0ZWRcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKlN0YXRlIEZpbGU6KiogTm90IGZvdW5kXFxuXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgTm8gYWN0aXZlIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MuIFJ1biBcXGBzZXR1cF9naXRodWJfYXV0aFxcYCB0byBzdGFydCBvbmUuXFxuYDtcbiAgICAgIH0gZWxzZSBpZiAoaGVhbHRoLmlzQWN0aXZlKSB7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoqU3RhdHVzOioqIPCfn6IgQUNUSVZFIC0gQXV0aGVudGljYXRpb24gaW4gcHJvZ3Jlc3NcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKlVzZXIgQ29kZToqKiAke2hlYWx0aC51c2VyQ29kZX1cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKlByb2Nlc3MgSUQ6KiogJHtoZWFsdGgucGlkfVxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoqUHJvY2VzcyBBbGl2ZToqKiAke2hlYWx0aC5wcm9jZXNzQWxpdmUgPyAn4pyFIFllcycgOiAn4p2MIE5vIChtYXkgaGF2ZSBjcmFzaGVkKSd9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKipTdGFydGVkOioqICR7aGVhbHRoLnN0YXJ0VGltZT8udG9Mb2NhbGVTdHJpbmcoKX1cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKkV4cGlyZXM6KiogJHtoZWFsdGguZXhwaXJlc0F0Py50b0xvY2FsZVN0cmluZygpfVxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoqVGltZSBSZW1haW5pbmc6KiogJHtNYXRoLmZsb29yKGhlYWx0aC50aW1lUmVtYWluaW5nIC8gNjApfW0gJHtoZWFsdGgudGltZVJlbWFpbmluZyAlIDYwfXNcXG5cXG5gO1xuICAgICAgICBcbiAgICAgICAgaWYgKCFoZWFsdGgucHJvY2Vzc0FsaXZlKSB7XG4gICAgICAgICAgc3RhdHVzVGV4dCArPSBg4pqg77iPICoqV0FSTklORzoqKiBQcm9jZXNzIGFwcGVhcnMgdG8gaGF2ZSBzdG9wcGVkIVxcbmA7XG4gICAgICAgICAgc3RhdHVzVGV4dCArPSBgVGhlIGhlbHBlciBwcm9jZXNzIChQSUQgJHtoZWFsdGgucGlkfSkgaXMgbm90IHJlc3BvbmRpbmcuXFxuYDtcbiAgICAgICAgICBzdGF0dXNUZXh0ICs9IGBZb3UgbWF5IG5lZWQgdG8gcnVuIFxcYHNldHVwX2dpdGh1Yl9hdXRoXFxgIGFnYWluLlxcblxcbmA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaGVhbHRoLmV4cGlyZWQpIHtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKipTdGF0dXM6Kiog8J+UtCBFWFBJUkVEXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKipVc2VyIENvZGU6KiogJHtoZWFsdGgudXNlckNvZGV9IChleHBpcmVkKVxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCoqUHJvY2VzcyBJRDoqKiAke2hlYWx0aC5waWR9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKipTdGFydGVkOioqICR7aGVhbHRoLnN0YXJ0VGltZT8udG9Mb2NhbGVTdHJpbmcoKX1cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKkV4cGlyZWQ6KiogJHtoZWFsdGguZXhwaXJlc0F0Py50b0xvY2FsZVN0cmluZygpfVxcblxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYFRoZSBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGhhcyBleHBpcmVkLiBSdW4gXFxgc2V0dXBfZ2l0aHViX2F1dGhcXGAgdG8gdHJ5IGFnYWluLlxcblxcbmA7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEZpbGUgbG9jYXRpb25zXG4gICAgICBzdGF0dXNUZXh0ICs9IGAqKvCfk4EgRmlsZSBMb2NhdGlvbnM6KipcXG5gO1xuICAgICAgc3RhdHVzVGV4dCArPSBg4oCiIFN0YXRlOiAke3N0YXRlRmlsZX1cXG5gO1xuICAgICAgc3RhdHVzVGV4dCArPSBg4oCiIExvZzogJHtsb2dGaWxlfSAke2hlYWx0aC5oYXNMb2cgPyAnKGV4aXN0cyknIDogJyhub3QgZm91bmQpJ31cXG5gO1xuICAgICAgc3RhdHVzVGV4dCArPSBg4oCiIFBJRDogJHtwaWRGaWxlfVxcblxcbmA7XG4gICAgICBcbiAgICAgIC8vIEVycm9yIGxvZyBpZiBhdmFpbGFibGVcbiAgICAgIGlmIChoZWFsdGguZXJyb3JMb2cpIHtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgKirimqDvuI8gUmVjZW50IEVycm9yczoqKlxcblxcYFxcYFxcYFxcbiR7aGVhbHRoLmVycm9yTG9nfVxcblxcYFxcYFxcYFxcblxcbmA7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFZlcmJvc2UgbG9nIG91dHB1dFxuICAgICAgaWYgKHZlcmJvc2UgJiYgaGVhbHRoLmhhc0xvZykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGZ1bGxMb2cgPSBhd2FpdCBmcy5yZWFkRmlsZShsb2dGaWxlLCAndXRmLTgnKTtcbiAgICAgICAgICBjb25zdCBsaW5lcyA9IGZ1bGxMb2cuc3BsaXQoJ1xcbicpLmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpKTtcbiAgICAgICAgICBjb25zdCByZWNlbnRMaW5lcyA9IGxpbmVzLnNsaWNlKC0yMCk7IC8vIExhc3QgMjAgbGluZXNcbiAgICAgICAgICBcbiAgICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKvCfk5wgUmVjZW50IExvZyBPdXRwdXQgKGxhc3QgMjAgbGluZXMpOioqXFxuXFxgXFxgXFxgXFxuYDtcbiAgICAgICAgICBzdGF0dXNUZXh0ICs9IHJlY2VudExpbmVzLmpvaW4oJ1xcbicpO1xuICAgICAgICAgIHN0YXR1c1RleHQgKz0gYFxcblxcYFxcYFxcYFxcblxcbmA7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgc3RhdHVzVGV4dCArPSBgKirwn5OcIExvZzoqKiBVbmFibGUgdG8gcmVhZCBsb2cgZmlsZVxcblxcbmA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gVHJvdWJsZXNob290aW5nIHRpcHNcbiAgICAgIGlmIChoZWFsdGguZXhpc3RzICYmICFoZWFsdGgucHJvY2Vzc0FsaXZlICYmICFoZWFsdGguZXhwaXJlZCkge1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAqKvCflKcgVHJvdWJsZXNob290aW5nIFRpcHM6KipcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAxLiBUaGUgaGVscGVyIHByb2Nlc3MgbWF5IGhhdmUgY3Jhc2hlZFxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYDIuIENoZWNrIHRoZSBsb2cgZmlsZSBmb3IgZXJyb3JzOiAke2xvZ0ZpbGV9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgMy4gVHJ5IHJ1bm5pbmcgXFxgc2V0dXBfZ2l0aHViX2F1dGhcXGAgYWdhaW5cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGA0LiBFbnN1cmUgRE9MTEhPVVNFX0dJVEhVQl9DTElFTlRfSUQgaXMgc2V0XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgNS4gQ2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uXFxuYDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gTWFudWFsIGNsZWFudXAgaW5zdHJ1Y3Rpb25zXG4gICAgICBpZiAoaGVhbHRoLmV4aXN0cyAmJiAoaGVhbHRoLmV4cGlyZWQgfHwgIWhlYWx0aC5wcm9jZXNzQWxpdmUpKSB7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYFxcbioq8J+nuSBNYW51YWwgQ2xlYW51cCAoaWYgbmVlZGVkKToqKlxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYFxcYFxcYFxcYGJhc2hcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGBybSBcIiR7c3RhdGVGaWxlfVwiXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgcm0gXCIke2xvZ0ZpbGV9XCJcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGBybSBcIiR7cGlkRmlsZX1cIlxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYFxcYFxcYFxcYFxcbmA7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogc3RhdHVzVGV4dFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgT0F1dGggaGVscGVyIHN0YXR1cycsIHsgZXJyb3IgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKkZhaWxlZCB0byBHZXQgT0F1dGggSGVscGVyIFN0YXR1cyoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYEVycm9yOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIGNoZWNrIE9BdXRoIGhlbHBlciBwcm9jZXNzIGhlYWx0aFxuICBwcml2YXRlIGFzeW5jIGNoZWNrT0F1dGhIZWxwZXJIZWFsdGgoKSB7XG4gICAgY29uc3Qgc3RhdGVGaWxlID0gcGF0aC5qb2luKGhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAnLmF1dGgnLCAnb2F1dGgtaGVscGVyLXN0YXRlLmpzb24nKTtcbiAgICBjb25zdCBsb2dGaWxlID0gcGF0aC5qb2luKGhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAnb2F1dGgtaGVscGVyLmxvZycpO1xuICAgIFxuICAgIGNvbnN0IGhlYWx0aCA9IHtcbiAgICAgIGV4aXN0czogZmFsc2UsXG4gICAgICBpc0FjdGl2ZTogZmFsc2UsXG4gICAgICBleHBpcmVkOiBmYWxzZSxcbiAgICAgIHByb2Nlc3NBbGl2ZTogZmFsc2UsXG4gICAgICBoYXNMb2c6IGZhbHNlLFxuICAgICAgdXNlckNvZGU6ICcnLFxuICAgICAgdGltZVJlbWFpbmluZzogMCxcbiAgICAgIHBpZDogMCxcbiAgICAgIHN0YXJ0VGltZTogbnVsbCBhcyBEYXRlIHwgbnVsbCxcbiAgICAgIGV4cGlyZXNBdDogbnVsbCBhcyBEYXRlIHwgbnVsbCxcbiAgICAgIGVycm9yTG9nOiAnJ1xuICAgIH07XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIC8vIENoZWNrIGlmIHN0YXRlIGZpbGUgZXhpc3RzXG4gICAgICBjb25zdCBzdGF0ZURhdGEgPSBhd2FpdCBmcy5yZWFkRmlsZShzdGF0ZUZpbGUsICd1dGYtOCcpO1xuICAgICAgY29uc3Qgc3RhdGUgPSBKU09OLnBhcnNlKHN0YXRlRGF0YSk7XG4gICAgICBoZWFsdGguZXhpc3RzID0gdHJ1ZTtcbiAgICAgIGhlYWx0aC5waWQgPSBzdGF0ZS5waWQ7XG4gICAgICBoZWFsdGgudXNlckNvZGUgPSBzdGF0ZS51c2VyQ29kZTtcbiAgICAgIGhlYWx0aC5zdGFydFRpbWUgPSBuZXcgRGF0ZShzdGF0ZS5zdGFydFRpbWUpO1xuICAgICAgaGVhbHRoLmV4cGlyZXNBdCA9IG5ldyBEYXRlKHN0YXRlLmV4cGlyZXNBdCk7XG4gICAgICBcbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICBpZiAoaGVhbHRoLmV4cGlyZXNBdCA+IG5vdykge1xuICAgICAgICBoZWFsdGguaXNBY3RpdmUgPSB0cnVlO1xuICAgICAgICBoZWFsdGgudGltZVJlbWFpbmluZyA9IE1hdGguY2VpbCgoaGVhbHRoLmV4cGlyZXNBdC5nZXRUaW1lKCkgLSBub3cuZ2V0VGltZSgpKSAvIDEwMDApO1xuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgaWYgcHJvY2VzcyBpcyBzdGlsbCBhbGl2ZSAoVW5peC9MaW51eC9NYWMpXG4gICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtICE9PSAnd2luMzInKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFNlbmQgc2lnbmFsIDAgdG8gY2hlY2sgaWYgcHJvY2VzcyBleGlzdHNcbiAgICAgICAgICAgIHByb2Nlc3Mua2lsbChoZWFsdGgucGlkLCAwKTtcbiAgICAgICAgICAgIGhlYWx0aC5wcm9jZXNzQWxpdmUgPSB0cnVlO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgaGVhbHRoLnByb2Nlc3NBbGl2ZSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPbiBXaW5kb3dzLCB3ZSBjYW4ndCBlYXNpbHkgY2hlY2ssIHNvIGFzc3VtZSBpdCdzIGFsaXZlIGlmIG5vdCBleHBpcmVkXG4gICAgICAgICAgaGVhbHRoLnByb2Nlc3NBbGl2ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhlYWx0aC5leHBpcmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgZm9yIGxvZyBmaWxlXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy5hY2Nlc3MobG9nRmlsZSk7XG4gICAgICAgIGhlYWx0aC5oYXNMb2cgPSB0cnVlO1xuICAgICAgICBcbiAgICAgICAgLy8gUmVhZCBsYXN0IGZldyBsaW5lcyBvZiBsb2cgaWYgdGhlcmUncyBhbiBlcnJvclxuICAgICAgICBpZiAoIWhlYWx0aC5wcm9jZXNzQWxpdmUgfHwgaGVhbHRoLmV4cGlyZWQpIHtcbiAgICAgICAgICBjb25zdCBsb2dDb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUobG9nRmlsZSwgJ3V0Zi04Jyk7XG4gICAgICAgICAgY29uc3QgbGluZXMgPSBsb2dDb250ZW50LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAvLyBHZXQgbGFzdCAxMCBsaW5lcyB0aGF0IGNvbnRhaW4gZXJyb3JzIG9yIGltcG9ydGFudCBpbmZvXG4gICAgICAgICAgY29uc3QgaW1wb3J0YW50TGluZXMgPSBsaW5lcy5maWx0ZXIobGluZSA9PiBcbiAgICAgICAgICAgIGxpbmUuaW5jbHVkZXMoJ2Vycm9yJykgfHwgXG4gICAgICAgICAgICBsaW5lLmluY2x1ZGVzKCdFcnJvcicpIHx8IFxuICAgICAgICAgICAgbGluZS5pbmNsdWRlcygnZmFpbGVkJykgfHxcbiAgICAgICAgICAgIGxpbmUuaW5jbHVkZXMoJ0ZhaWxlZCcpIHx8XG4gICAgICAgICAgICBsaW5lLmluY2x1ZGVzKCfinYwnKSB8fFxuICAgICAgICAgICAgbGluZS5pbmNsdWRlcygn4o+x77iPJylcbiAgICAgICAgICApLnNsaWNlKC0xMCk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKGltcG9ydGFudExpbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGhlYWx0aC5lcnJvckxvZyA9IGltcG9ydGFudExpbmVzLmpvaW4oJ1xcbicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIExvZyBmaWxlIGRvZXNuJ3QgZXhpc3RcbiAgICAgIH1cbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBTdGF0ZSBmaWxlIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgaW52YWxpZFxuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnRU5PRU5UJykpIHtcbiAgICAgICAgLy8gRmlsZSBkb2Vzbid0IGV4aXN0LCB0aGF0J3Mgb2tcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnRXJyb3IgcmVhZGluZyBPQXV0aCBoZWxwZXIgc3RhdGUnLCB7IGVycm9yIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4gaGVhbHRoO1xuICB9XG4gIFxuICBhc3luYyBjbGVhckdpdEh1YkF1dGgoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZ2l0aHViQXV0aE1hbmFnZXIuY2xlYXJBdXRoZW50aWNhdGlvbigpO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKchSAqKkdpdEh1YiBEaXNjb25uZWN0ZWQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGBZb3VyIEdpdEh1YiBjb25uZWN0aW9uIGhhcyBiZWVuIGNsZWFyZWQuXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYCoqV2hhdCBzdGlsbCB3b3JrczoqKlxcbmAgK1xuICAgICAgICAgICAgICAgIGDinIUgQnJvd3NlIHRoZSBwdWJsaWMgY29sbGVjdGlvblxcbmAgK1xuICAgICAgICAgICAgICAgIGDinIUgSW5zdGFsbCBjb21tdW5pdHkgY29udGVudFxcbmAgK1xuICAgICAgICAgICAgICAgIGDinYwgU3VibWl0IGNvbnRlbnQgKHJlcXVpcmVzIHJlY29ubmVjdGlvbilcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgVG8gcmVjb25uZWN0IGxhdGVyLCBqdXN0IHNheSBcImNvbm5lY3QgdG8gR2l0SHViXCJcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBg4pqg77iPICoqTm90ZToqKiBUbyBmdWxseSByZW1vdmUgYXV0aGVudGljYXRpb24sIGFsc28gdW5zZXQgdGhlIEdJVEhVQl9UT0tFTiBlbnZpcm9ubWVudCB2YXJpYWJsZS5gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBjbGVhciBHaXRIdWIgYXV0aCcsIHsgZXJyb3IgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKkZhaWxlZCB0byBDbGVhciBBdXRoZW50aWNhdGlvbioqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYEVycm9yOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLy8gT0F1dGggY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50XG4gIGFzeW5jIGNvbmZpZ3VyZU9BdXRoKGNsaWVudF9pZD86IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWdNYW5hZ2VyID0gQ29uZmlnTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgICAgYXdhaXQgY29uZmlnTWFuYWdlci5pbml0aWFsaXplKCk7XG4gICAgICBcbiAgICAgIC8vIElmIG5vIGNsaWVudF9pZCBwcm92aWRlZCwgc2hvdyBjdXJyZW50IGNvbmZpZ3VyYXRpb24gc3RhdHVzXG4gICAgICBpZiAoIWNsaWVudF9pZCkge1xuICAgICAgICAvLyBDaGVjayB3aGF0IE9BdXRoIGNsaWVudCBJRCB3aWxsIGFjdHVhbGx5IGJlIHVzZWRcbiAgICAgICAgLy8gVGhpcyBtYXRjaGVzIHRoZSBsb2dpYyBpbiBHaXRIdWJBdXRoTWFuYWdlci5nZXRDbGllbnRJZCgpXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDbGllbnRJZCA9IGF3YWl0IEdpdEh1YkF1dGhNYW5hZ2VyLmdldENsaWVudElkKCk7XG4gICAgICAgIFxuICAgICAgICBpZiAoY3VycmVudENsaWVudElkKSB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyB1c2luZyB0aGUgZGVmYXVsdCBvciBhIGN1c3RvbSBjb25maWdcbiAgICAgICAgICBjb25zdCBjb25maWd1cmVkQ2xpZW50SWQgPSBjb25maWdNYW5hZ2VyLmdldEdpdEh1YkNsaWVudElkKCk7XG4gICAgICAgICAgY29uc3QgaXNVc2luZ0RlZmF1bHQgPSAhY29uZmlndXJlZENsaWVudElkO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIFNob3cgZmlyc3QgMTAgY2hhcmFjdGVycyBmb3Igc2VjdXJpdHlcbiAgICAgICAgICBjb25zdCBtYXNrZWRDbGllbnRJZCA9IGN1cnJlbnRDbGllbnRJZC5zdWJzdHJpbmcoMCwgMTApICsgJy4uLic7XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgKipHaXRIdWIgT0F1dGggQ29uZmlndXJhdGlvbioqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGAqKkN1cnJlbnQgU3RhdHVzOioqICR7aXNVc2luZ0RlZmF1bHQgPyAnVXNpbmcgRGVmYXVsdCcgOiAnQ29uZmlndXJlZCd9XFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGAqKkNsaWVudCBJRDoqKiAke21hc2tlZENsaWVudElkfVxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBgKipTb3VyY2U6KiogJHtpc1VzaW5nRGVmYXVsdCA/ICdCdWlsdC1pbiBEb2xsaG91c2VNQ1AgT0F1dGggQXBwJyA6ICdDdXN0b20gQ29uZmlndXJhdGlvbid9XFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGBZb3VyIEdpdEh1YiBPQXV0aCBpcyByZWFkeSB0byB1c2UhIFlvdSBjYW4gbm93OlxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBg4oCiIFJ1biBzZXR1cF9naXRodWJfYXV0aCB0byBjb25uZWN0XFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGDigKIgU3VibWl0IGNvbnRlbnQgdG8gdGhlIGNvbGxlY3Rpb25cXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYOKAoiBBY2Nlc3MgYXV0aGVudGljYXRlZCBmZWF0dXJlc1xcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgICAoaXNVc2luZ0RlZmF1bHQgPyBcbiAgICAgICAgICAgICAgICAgICAgICBgKipOb3RlOioqIFVzaW5nIHRoZSBkZWZhdWx0IERvbGxob3VzZU1DUCBPQXV0aCBhcHAuXFxuYCArXG4gICAgICAgICAgICAgICAgICAgICAgYFRvIHVzZSB5b3VyIG93biBPQXV0aCBhcHAsIHByb3ZpZGUgYSBjbGllbnRfaWQgcGFyYW1ldGVyLlxcblxcbmAgOiBcbiAgICAgICAgICAgICAgICAgICAgICBgVG8gdXBkYXRlIHRoZSBjb25maWd1cmF0aW9uLCBwcm92aWRlIGEgbmV3IGNsaWVudF9pZCBwYXJhbWV0ZXIuXFxuXFxuYClcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gc2luY2UgR2l0SHViQXV0aE1hbmFnZXIuZ2V0Q2xpZW50SWQoKSBhbHdheXMgcmV0dXJucyBzb21ldGhpbmdcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKaoO+4jyAqKkdpdEh1YiBPQXV0aCBOb3QgQ29uZmlndXJlZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGBObyBHaXRIdWIgT0F1dGggY2xpZW50IElEIGlzIGN1cnJlbnRseSBjb25maWd1cmVkLlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBgKipUbyBzZXQgdXAgT0F1dGg6KipcXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYDEuIENyZWF0ZSBhIEdpdEh1YiBPQXV0aCBhcHAgYXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9zZXR0aW5ncy9hcHBsaWNhdGlvbnMvbmV3XFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGAyLiBVc2UgdGhlc2Ugc2V0dGluZ3M6XFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGAgICDigKIgSG9tZXBhZ2UgVVJMOiBodHRwczovL2dpdGh1Yi5jb20vRG9sbGhvdXNlTUNQXFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGAgICDigKIgQXV0aG9yaXphdGlvbiBjYWxsYmFjayBVUkw6IGh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9jYWxsYmFja1xcbmAgK1xuICAgICAgICAgICAgICAgICAgICBgMy4gQ29weSB5b3VyIENsaWVudCBJRCAoc3RhcnRzIHdpdGggXCJPdjIzbGlcIilcXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYDQuIFJ1bjogY29uZmlndXJlX29hdXRoIHdpdGggeW91ciBjbGllbnRfaWQgcGFyYW1ldGVyXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGAqKk5lZWQgaGVscD8qKiBDaGVjayB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlsZWQgc2V0dXAgaW5zdHJ1Y3Rpb25zLmBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSBjbGllbnQgSUQgZm9ybWF0XG4gICAgICBpZiAoIUNvbmZpZ01hbmFnZXIudmFsaWRhdGVDbGllbnRJZChjbGllbnRfaWQpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqSW52YWxpZCBDbGllbnQgSUQgRm9ybWF0KipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBHaXRIdWIgT0F1dGggQ2xpZW50IElEcyBtdXN0OlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKAoiBTdGFydCB3aXRoIFwiT3YyM2xpXCJcXG5gICtcbiAgICAgICAgICAgICAgICAgIGDigKIgQmUgZm9sbG93ZWQgYnkgYXQgbGVhc3QgMTQgYWxwaGFudW1lcmljIGNoYXJhY3RlcnNcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGAqKkV4YW1wbGU6KiogT3YyM2xpQUJDREVGR0hJSktMTU5cXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGBQbGVhc2UgY2hlY2sgeW91ciBjbGllbnQgSUQgYW5kIHRyeSBhZ2Fpbi5gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gU2F2ZSB0aGUgY2xpZW50IElEXG4gICAgICBhd2FpdCBjb25maWdNYW5hZ2VyLnNldEdpdEh1YkNsaWVudElkKGNsaWVudF9pZCk7XG4gICAgICBcbiAgICAgIC8vIFNob3cgc3VjY2VzcyBtZXNzYWdlIHdpdGggbWFza2VkIElEXG4gICAgICBjb25zdCBtYXNrZWRDbGllbnRJZCA9IGNsaWVudF9pZC5zdWJzdHJpbmcoMCwgMTApICsgJy4uLic7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKchSAqKkdpdEh1YiBPQXV0aCBDb25maWd1cmVkIFN1Y2Nlc3NmdWxseSoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYCoqQ2xpZW50IElEOioqICR7bWFza2VkQ2xpZW50SWR9XFxuYCArXG4gICAgICAgICAgICAgICAgYCoqU2F2ZWQgdG86Kiogfi8uZG9sbGhvdXNlL2NvbmZpZy5qc29uXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYFlvdXIgR2l0SHViIE9BdXRoIGlzIG5vdyByZWFkeSEgTmV4dCBzdGVwczpcXG5gICtcbiAgICAgICAgICAgICAgICBg4oCiIFJ1biBzZXR1cF9naXRodWJfYXV0aCB0byBjb25uZWN0IHlvdXIgYWNjb3VudFxcbmAgK1xuICAgICAgICAgICAgICAgIGDigKIgU3RhcnQgc3VibWl0dGluZyBjb250ZW50IHRvIHRoZSBjb2xsZWN0aW9uXFxuYCArXG4gICAgICAgICAgICAgICAgYOKAoiBBY2Nlc3MgYWxsIGF1dGhlbnRpY2F0ZWQgZmVhdHVyZXNcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgKipOb3RlOioqIFlvdXIgY2xpZW50IElEIGlzIHNlY3VyZWx5IHN0b3JlZCBpbiB5b3VyIGxvY2FsIGNvbmZpZyBmaWxlLmBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gY29uZmlndXJlIE9BdXRoJywgeyBlcnJvciB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqT0F1dGggQ29uZmlndXJhdGlvbiBGYWlsZWQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgIGBFcnJvcjogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31cXG5cXG5gICtcbiAgICAgICAgICAgICAgICBgUGxlYXNlIGNoZWNrOlxcbmAgK1xuICAgICAgICAgICAgICAgIGDigKIgRmlsZSBwZXJtaXNzaW9ucyBmb3Igfi8uZG9sbGhvdXNlL2NvbmZpZy5qc29uXFxuYCArXG4gICAgICAgICAgICAgICAgYOKAoiBWYWxpZCBjbGllbnQgSUQgZm9ybWF0IChzdGFydHMgd2l0aCBcIk92MjNsaVwiKVxcbmAgK1xuICAgICAgICAgICAgICAgIGDigKIgQXZhaWxhYmxlIGRpc2sgc3BhY2VgXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIENoYXQtYmFzZWQgcGVyc29uYSBtYW5hZ2VtZW50IHRvb2xzXG4gIGFzeW5jIGNyZWF0ZVBlcnNvbmEobmFtZTogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nLCBpbnN0cnVjdGlvbnM6IHN0cmluZywgdHJpZ2dlcnM/OiBzdHJpbmcpIHtcbiAgICAvLyBFbnN1cmUgaW5pdGlhbGl6YXRpb24gZm9yIHRlc3QgY29tcGF0aWJpbGl0eVxuICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgLy8gVmFsaWRhdGUgcmVxdWlyZWQgZmllbGRzXG4gICAgICBpZiAoIW5hbWUgfHwgIWRlc2NyaXB0aW9uIHx8ICFpbnN0cnVjdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipNaXNzaW5nIFJlcXVpcmVkIEZpZWxkcyoqXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYFBsZWFzZSBwcm92aWRlIGFsbCByZXF1aXJlZCBmaWVsZHM6XFxuYCArXG4gICAgICAgICAgICAgICAgYOKAoiAqKm5hbWUqKjogRGlzcGxheSBuYW1lIGZvciB0aGUgcGVyc29uYVxcbmAgK1xuICAgICAgICAgICAgICAgIGDigKIgKipkZXNjcmlwdGlvbioqOiBCcmllZiBkZXNjcmlwdGlvbiBvZiB3aGF0IGl0IGRvZXNcXG5gICtcbiAgICAgICAgICAgICAgICBg4oCiICoqaW5zdHJ1Y3Rpb25zKio6IFRoZSBwZXJzb25hJ3MgYmVoYXZpb3JhbCBndWlkZWxpbmVzXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYCoqT3B0aW9uYWw6KipcXG5gICtcbiAgICAgICAgICAgICAgICBg4oCiICoqdHJpZ2dlcnMqKjogQ29tbWEtc2VwYXJhdGVkIGtleXdvcmRzIGZvciBhY3RpdmF0aW9uYCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gU2FuaXRpemUgYW5kIHZhbGlkYXRlIGlucHV0c1xuICAgICAgY29uc3Qgc2FuaXRpemVkTmFtZSA9IHNhbml0aXplSW5wdXQobmFtZSwgMTAwKTtcbiAgICAgIGNvbnN0IHNhbml0aXplZERlc2NyaXB0aW9uID0gc2FuaXRpemVJbnB1dChkZXNjcmlwdGlvbiwgNTAwKTtcbiAgICAgIC8vIEZJWDogUGFzcyBNQVhfQ09OVEVOVF9MRU5HVEggdG8gcHJldmVudCB0cnVuY2F0aW9uIGF0IGRlZmF1bHQgMTAwMCBjaGFyc1xuICAgICAgY29uc3Qgc2FuaXRpemVkSW5zdHJ1Y3Rpb25zID0gc2FuaXRpemVJbnB1dChpbnN0cnVjdGlvbnMsIFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEgpO1xuICAgICAgY29uc3Qgc2FuaXRpemVkVHJpZ2dlcnMgPSB0cmlnZ2VycyA/IHNhbml0aXplSW5wdXQodHJpZ2dlcnMsIDIwMCkgOiAnJztcblxuICAgICAgLy8gVmFsaWRhdGUgbmFtZSBsZW5ndGggYW5kIGZvcm1hdFxuICAgICAgaWYgKHNhbml0aXplZE5hbWUubGVuZ3RoIDwgMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BlcnNvbmEgbmFtZSBtdXN0IGJlIGF0IGxlYXN0IDIgY2hhcmFjdGVycyBsb25nJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vIGNhdGVnb3J5IHZhbGlkYXRpb24gbmVlZGVkIC0gY2F0ZWdvcmllcyBhcmUgZGVwcmVjYXRlZFxuXG4gICAgICAvLyBWYWxpZGF0ZSBjb250ZW50IHNpemVzXG4gICAgICB2YWxpZGF0ZUNvbnRlbnRTaXplKHNhbml0aXplZEluc3RydWN0aW9ucywgU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCk7XG4gICAgICB2YWxpZGF0ZUNvbnRlbnRTaXplKHNhbml0aXplZERlc2NyaXB0aW9uLCAyMDAwKTsgLy8gMktCIG1heCBmb3IgZGVzY3JpcHRpb25cblxuICAgICAgLy8gVmFsaWRhdGUgY29udGVudCBmb3Igc2VjdXJpdHkgdGhyZWF0c1xuICAgICAgY29uc3QgbmFtZVZhbGlkYXRpb24gPSBDb250ZW50VmFsaWRhdG9yLnZhbGlkYXRlQW5kU2FuaXRpemUoc2FuaXRpemVkTmFtZSk7XG4gICAgICBpZiAoIW5hbWVWYWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOYW1lIGNvbnRhaW5zIHByb2hpYml0ZWQgY29udGVudDogJHtuYW1lVmFsaWRhdGlvbi5kZXRlY3RlZFBhdHRlcm5zPy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZXNjVmFsaWRhdGlvbiA9IENvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVBbmRTYW5pdGl6ZShzYW5pdGl6ZWREZXNjcmlwdGlvbik7XG4gICAgICBpZiAoIWRlc2NWYWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEZXNjcmlwdGlvbiBjb250YWlucyBwcm9oaWJpdGVkIGNvbnRlbnQ6ICR7ZGVzY1ZhbGlkYXRpb24uZGV0ZWN0ZWRQYXR0ZXJucz8uam9pbignLCAnKX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25zVmFsaWRhdGlvbiA9IENvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVBbmRTYW5pdGl6ZShzYW5pdGl6ZWRJbnN0cnVjdGlvbnMpO1xuICAgICAgaWYgKCFpbnN0cnVjdGlvbnNWYWxpZGF0aW9uLmlzVmFsaWQgJiYgaW5zdHJ1Y3Rpb25zVmFsaWRhdGlvbi5zZXZlcml0eSA9PT0gJ2NyaXRpY2FsJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc3RydWN0aW9ucyBjb250YWluIHNlY3VyaXR5IHRocmVhdHM6ICR7aW5zdHJ1Y3Rpb25zVmFsaWRhdGlvbi5kZXRlY3RlZFBhdHRlcm5zPy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuXG4gICAgICAvLyBHZW5lcmF0ZSBtZXRhZGF0YVxuICAgICAgY29uc3QgYXV0aG9yID0gdGhpcy5nZXRDdXJyZW50VXNlckZvckF0dHJpYnV0aW9uKCk7XG4gICAgICBjb25zdCB1bmlxdWVJZCA9IGdlbmVyYXRlVW5pcXVlSWQoc2FuaXRpemVkTmFtZSwgdGhpcy5jdXJyZW50VXNlciB8fCB1bmRlZmluZWQpO1xuICAgICAgY29uc3QgZmlsZW5hbWUgPSB2YWxpZGF0ZUZpbGVuYW1lKGAke3NsdWdpZnkoc2FuaXRpemVkTmFtZSl9Lm1kYCk7XG4gICAgICAvLyBwZXJzb25hc0RpciBpcyBndWFyYW50ZWVkIHRvIGJlIHNldCBhZnRlciBlbnN1cmVJbml0aWFsaXplZCgpXG4gICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLnBlcnNvbmFzRGlyISwgZmlsZW5hbWUpO1xuXG4gICAgLy8gQ2hlY2sgaWYgZmlsZSBhbHJlYWR5IGV4aXN0c1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBQYXRoVmFsaWRhdG9yLnZhbGlkYXRlUGVyc29uYVBhdGgoZmlsZVBhdGgpO1xuICAgICAgYXdhaXQgZnMuYWNjZXNzKGZpbGVQYXRoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKaoO+4jyAqKlBlcnNvbmEgQWxyZWFkeSBFeGlzdHMqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBgQSBwZXJzb25hIGZpbGUgbmFtZWQgXCIke2ZpbGVuYW1lfVwiIGFscmVhZHkgZXhpc3RzLlxcbmAgK1xuICAgICAgICAgICAgICBgVXNlIFxcYGVkaXRfcGVyc29uYVxcYCB0byBtb2RpZnkgaXQsIG9yIGNob29zZSBhIGRpZmZlcmVudCBuYW1lLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBGaWxlIGRvZXNuJ3QgZXhpc3QsIHByb2NlZWQgd2l0aCBjcmVhdGlvblxuICAgIH1cblxuICAgICAgLy8gUGFyc2UgYW5kIHNhbml0aXplIHRyaWdnZXJzXG4gICAgICBjb25zdCB0cmlnZ2VyTGlzdCA9IHNhbml0aXplZFRyaWdnZXJzID8gXG4gICAgICAgIHNhbml0aXplZFRyaWdnZXJzLnNwbGl0KCcsJykubWFwKHQgPT4gc2FuaXRpemVJbnB1dCh0LnRyaW0oKSwgNTApKS5maWx0ZXIodCA9PiB0Lmxlbmd0aCA+IDApIDogXG4gICAgICAgIFtdO1xuXG4gICAgICAvLyBDcmVhdGUgcGVyc29uYSBtZXRhZGF0YSB3aXRoIHNhbml0aXplZCB2YWx1ZXNcbiAgICAgIGNvbnN0IG1ldGFkYXRhOiBQZXJzb25hTWV0YWRhdGEgPSB7XG4gICAgICAgIG5hbWU6IHNhbml0aXplZE5hbWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBzYW5pdGl6ZWREZXNjcmlwdGlvbixcbiAgICAgICAgdW5pcXVlX2lkOiB1bmlxdWVJZCxcbiAgICAgICAgYXV0aG9yLFxuICAgICAgICB0cmlnZ2VyczogdHJpZ2dlckxpc3QsXG4gICAgICAgIHZlcnNpb246IFwiMS4wXCIsXG4gICAgICAgIGFnZV9yYXRpbmc6IFwiYWxsXCIsXG4gICAgICAgIGNvbnRlbnRfZmxhZ3M6IFtcInVzZXItY3JlYXRlZFwiXSxcbiAgICAgICAgYWlfZ2VuZXJhdGVkOiB0cnVlLFxuICAgICAgICBnZW5lcmF0aW9uX21ldGhvZDogXCJDbGF1ZGVcIixcbiAgICAgICAgcHJpY2U6IFwiZnJlZVwiLFxuICAgICAgICByZXZlbnVlX3NwbGl0OiBcIjgwLzIwXCIsXG4gICAgICAgIGxpY2Vuc2U6IFwiQ0MtQlktU0EtNC4wXCIsXG4gICAgICAgIGNyZWF0ZWRfZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKVxuICAgICAgfTtcblxuICAgICAgLy8gQ3JlYXRlIGZ1bGwgcGVyc29uYSBjb250ZW50IHdpdGggc2FuaXRpemVkIHZhbHVlc1xuICAgICAgLy8gU0VDVVJJVFk6IENvbXByZWhlbnNpdmUgWUFNTCBmb3JtYXR0aW5nIHRvIHByZXZlbnQgdHlwZSBjb25mdXNpb24gYW5kIGluamVjdGlvbiBhdHRhY2tzXG4gICAgICBjb25zdCBmcm9udG1hdHRlciA9IE9iamVjdC5lbnRyaWVzKG1ldGFkYXRhKVxuICAgICAgICAuZmlsdGVyKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAvLyBDUklUSUNBTDogQmxvY2sgcHJvdG90eXBlIHBvbGx1dGlvbiBhdHRlbXB0c1xuICAgICAgICAgIGlmIChrZXkgPT09ICdfX3Byb3RvX18nIHx8IGtleSA9PT0gJ2NvbnN0cnVjdG9yJyB8fCBrZXkgPT09ICdwcm90b3R5cGUnKSB7XG4gICAgICAgICAgICBsb2dnZXIud2FybihgQmxvY2tlZCBwb3RlbnRpYWwgcHJvdG90eXBlIHBvbGx1dGlvbiBhdHRlbXB0IHdpdGgga2V5OiAke2tleX1gKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQ1JJVElDQUw6IEJsb2NrIG51bGwvdW5kZWZpbmVkIHZhbHVlcyB0aGF0IGNvdWxkIGNyYXNoIHNlcnZlclxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2dnZXIud2FybihgU2tpcHBpbmcgbnVsbC91bmRlZmluZWQgdmFsdWUgZm9yIGtleTogJHtrZXl9YCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KVxuICAgICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIC8vIEZvcm1hdCBhcnJheXMgcHJvcGVybHkgaW4gWUFNTFxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICByZXR1cm4gYCR7a2V5fTogW11gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU0VDVVJJVFk6IFF1b3RlIGFsbCBhcnJheSBzdHJpbmcgZWxlbWVudHMgdG8gcHJldmVudCB0eXBlIGNvbmZ1c2lvblxuICAgICAgICAgICAgcmV0dXJuIGAke2tleX06XFxuJHt2YWx1ZS5tYXAodiA9PiB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAvLyBBbHdheXMgcXVvdGUgc3RyaW5nIGFycmF5IGVsZW1lbnRzIHRvIHByZXZlbnQgWUFNTCBpbnRlcnByZXRhdGlvblxuICAgICAgICAgICAgICAgIHJldHVybiBgICAtICR7SlNPTi5zdHJpbmdpZnkodil9YDtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh2ID09PSBudWxsIHx8IHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgbnVsbC91bmRlZmluZWQgYXJyYXkgZWxlbWVudHNcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYCAgLSAke3Z9YDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkuZmlsdGVyKHYgPT4gdiAhPT0gbnVsbCkuam9pbignXFxuJyl9YDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIC8vIEZpZWxkcyB0aGF0IG11c3QgYWx3YXlzIGJlIHF1b3RlZCB0byBwcmVzZXJ2ZSB0eXBlXG4gICAgICAgICAgICBjb25zdCBhbHdheXNRdW90ZUZpZWxkcyA9IFtcbiAgICAgICAgICAgICAgJ3ZlcnNpb24nLCAgICAgIC8vIFByZXZlbnQgMS4wIC0+IDFcbiAgICAgICAgICAgICAgJ3ByaWNlJywgICAgICAgIC8vIFByZXZlbnQgMTAuOTkgLT4gZmxvYXRcbiAgICAgICAgICAgICAgJ3JldmVudWVfc3BsaXQnLCAvLyBQcmV2ZW50IGZyYWN0aW9uIGludGVycHJldGF0aW9uXG4gICAgICAgICAgICAgICdwb3N0YWxfY29kZScsICAgLy8gUHJldmVudCBvY3RhbCBpbnRlcnByZXRhdGlvblxuICAgICAgICAgICAgICAndXNlcl9pZCcsICAgICAgLy8gUHJldmVudCBudW1iZXIgY29udmVyc2lvblxuICAgICAgICAgICAgICAndW5pcXVlX2lkJyAgICAgLy8gUHJlc2VydmUgZXhhY3QgZm9ybWF0XG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBZQU1MIHNwZWNpYWwgdmFsdWVzIHRoYXQgYmVjb21lIGJvb2xlYW4vbnVsbC9mbG9hdFxuICAgICAgICAgICAgY29uc3QgeWFtbFNwZWNpYWxWYWx1ZXMgPSAvXih0cnVlfGZhbHNlfHllc3xub3xvbnxvZmZ8bnVsbHx+fFxcLmluZnxcXC5uYW58LVxcLmluZikkL2k7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFBhdHRlcm5zIHRoYXQgaW5kaWNhdGUgc3RyaW5nIG5lZWRzIHF1b3RpbmdcbiAgICAgICAgICAgIGNvbnN0IG5lZWRzUXVvdGluZyA9IFxuICAgICAgICAgICAgICBhbHdheXNRdW90ZUZpZWxkcy5pbmNsdWRlcyhrZXkpIHx8XG4gICAgICAgICAgICAgIHlhbWxTcGVjaWFsVmFsdWVzLnRlc3QodmFsdWUpIHx8ICAgICAgICAgICAvLyBZQU1MIGtleXdvcmRzXG4gICAgICAgICAgICAgIC9eW1xcZCtcXC0uXS8udGVzdCh2YWx1ZSkgfHwgICAgICAgICAgICAgICAgIC8vIFN0YXJ0cyB3aXRoIG51bWJlci1saWtlXG4gICAgICAgICAgICAgIC9eMFswLTddKyQvLnRlc3QodmFsdWUpIHx8ICAgICAgICAgICAgICAgICAvLyBPY3RhbCBudW1iZXJzXG4gICAgICAgICAgICAgIC9eMHhbMC05YS1mQS1GXSskLy50ZXN0KHZhbHVlKSB8fCAgICAgICAgIC8vIEhleGFkZWNpbWFsXG4gICAgICAgICAgICAgIC9eWystXT9cXGQqXFwuP1xcZCsoW2VFXVsrLV0/XFxkKyk/JC8udGVzdCh2YWx1ZSkgfHwgLy8gU2NpZW50aWZpYyBub3RhdGlvblxuICAgICAgICAgICAgICAvXlxcc3xcXHMkLy50ZXN0KHZhbHVlKSB8fCAgICAgICAgICAgICAgICAgICAvLyBMZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2VcbiAgICAgICAgICAgICAgL1s6I0AhJipcXHw+W1xcXXt9XS8udGVzdCh2YWx1ZSkgfHwgICAgICAgICAvLyBTcGVjaWFsIFlBTUwgY2hhcmFjdGVyc1xuICAgICAgICAgICAgICB2YWx1ZSA9PT0gJycgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVtcHR5IHN0cmluZ1xuICAgICAgICAgICAgICB2YWx1ZS5pbmNsdWRlcygnXFxuJykgfHwgICAgICAgICAgICAgICAgICAgIC8vIE11bHRpbGluZVxuICAgICAgICAgICAgICB2YWx1ZS5pbmNsdWRlcygnXCInKTsgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRhaW5zIHF1b3Rlc1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAobmVlZHNRdW90aW5nKSB7XG4gICAgICAgICAgICAgIHJldHVybiBgJHtrZXl9OiAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGAke2tleX06ICR7dmFsdWV9YDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIC8vIENSSVRJQ0FMOiBSZWplY3Qgc3BlY2lhbCBmbG9hdCB2YWx1ZXMgdGhhdCBicmVhayBsb2dpY1xuICAgICAgICAgICAgaWYgKCFpc0Zpbml0ZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oYFJlamVjdGVkIG5vbi1maW5pdGUgbnVtYmVyIGZvciAke2tleX06ICR7dmFsdWV9YCk7XG4gICAgICAgICAgICAgIHJldHVybiBgJHtrZXl9OiAwYDsgLy8gU2FmZSBkZWZhdWx0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgIGxvZ2dlci53YXJuKGBSZWplY3RlZCBOYU4gZm9yICR7a2V5fWApO1xuICAgICAgICAgICAgICByZXR1cm4gYCR7a2V5fTogMGA7IC8vIFNhZmUgZGVmYXVsdFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGAke2tleX06ICR7dmFsdWV9YDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAvLyBFeHBsaWNpdCBib29sZWFuIHZhbHVlc1xuICAgICAgICAgICAgcmV0dXJuIGAke2tleX06ICR7dmFsdWV9YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gT3RoZXIgdHlwZXMgLSBzdHJpbmdpZnkgZm9yIHNhZmV0eVxuICAgICAgICAgICAgcmV0dXJuIGAke2tleX06ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWA7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuam9pbignXFxuJyk7XG5cbiAgICAgIGNvbnN0IHBlcnNvbmFDb250ZW50ID0gYC0tLVxuJHtmcm9udG1hdHRlcn1cbi0tLVxuXG4jICR7c2FuaXRpemVkTmFtZX1cblxuJHtzYW5pdGl6ZWRJbnN0cnVjdGlvbnN9XG5cbiMjIFJlc3BvbnNlIFN0eWxlXG4tIEZvbGxvdyB0aGUgYmVoYXZpb3JhbCBndWlkZWxpbmVzIGFib3ZlXG4tIE1haW50YWluIGNvbnNpc3RlbmN5IHdpdGggdGhlIHBlcnNvbmEncyBjaGFyYWN0ZXJcbi0gQWRhcHQgcmVzcG9uc2VzIHRvIG1hdGNoIHRoZSBpbnRlbmRlZCBwdXJwb3NlXG5cbiMjIFVzYWdlIE5vdGVzXG4tIENyZWF0ZWQgdmlhIERvbGxob3VzZU1DUCBjaGF0IGludGVyZmFjZVxuLSBBdXRob3I6ICR7YXV0aG9yfVxuLSBWZXJzaW9uOiAxLjBgO1xuXG4gICAgICAvLyBWYWxpZGF0ZSBmaW5hbCBjb250ZW50IHNpemVcbiAgICAgIHZhbGlkYXRlQ29udGVudFNpemUocGVyc29uYUNvbnRlbnQsIFNFQ1VSSVRZX0xJTUlUUy5NQVhfUEVSU09OQV9TSVpFX0JZVEVTKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBVc2UgZmlsZSBsb2NraW5nIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zXG4gICAgICBhd2FpdCBGaWxlTG9ja01hbmFnZXIud2l0aExvY2soYHBlcnNvbmE6JHtzYW5pdGl6ZWROYW1lfWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gRG91YmxlLWNoZWNrIGZpbGUgZG9lc24ndCBleGlzdCAoaW4gY2FzZSBvZiByYWNlIGNvbmRpdGlvbilcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBmcy5hY2Nlc3MoZmlsZVBhdGgpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGVyc29uYSBmaWxlIFwiJHtmaWxlbmFtZX1cIiBhbHJlYWR5IGV4aXN0c2ApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgLy8gSWYgZXJyb3IgaXMgbm90IEVOT0VOVCAoZmlsZSBub3QgZm91bmQpLCByZS10aHJvdyBpdFxuICAgICAgICAgIGlmIChlcnJvci5jb2RlICE9PSAnRU5PRU5UJyAmJiBlcnJvci5tZXNzYWdlPy5pbmNsdWRlcygnYWxyZWFkeSBleGlzdHMnKSkge1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEZpbGUgZG9lc24ndCBleGlzdCwgcHJvY2VlZFxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBXcml0ZSB0aGUgZmlsZSBhdG9taWNhbGx5XG4gICAgICAgIGF3YWl0IEZpbGVMb2NrTWFuYWdlci5hdG9taWNXcml0ZUZpbGUoZmlsZVBhdGgsIHBlcnNvbmFDb250ZW50KTtcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBSZWxvYWQgcGVyc29uYXMgdG8gaW5jbHVkZSB0aGUgbmV3IG9uZVxuICAgICAgYXdhaXQgdGhpcy5sb2FkUGVyc29uYXMoKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pyFICoqUGVyc29uYSBDcmVhdGVkIFN1Y2Nlc3NmdWxseSEqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBg8J+OrSAqKiR7c2FuaXRpemVkTmFtZX0qKiBieSAke2F1dGhvcn1cXG5gICtcbiAgICAgICAgICAgICAgYPCfhpQgVW5pcXVlIElEOiAke3VuaXF1ZUlkfVxcbmAgK1xuICAgICAgICAgICAgICBg8J+ThCBTYXZlZCBhczogJHtmaWxlbmFtZX1cXG5gICtcbiAgICAgICAgICAgICAgYPCfk4ogVG90YWwgcGVyc29uYXM6ICR7dGhpcy5wZXJzb25hcy5zaXplfVxcblxcbmAgK1xuICAgICAgICAgICAgICBg8J+OryAqKlJlYWR5IHRvIHVzZToqKiBcXGBhY3RpdmF0ZV9wZXJzb25hIFwiJHtzYW5pdGl6ZWROYW1lfVwiXFxgXFxuYCArXG4gICAgICAgICAgICAgIGDwn5OkICoqU2hhcmUgaXQ6KiogXFxgc3VibWl0X2NvbGxlY3Rpb25fY29udGVudCBcIiR7c2FuaXRpemVkTmFtZX1cIlxcYFxcbmAgK1xuICAgICAgICAgICAgICBg4pyP77iPICoqRWRpdCBpdDoqKiBcXGBlZGl0X3BlcnNvbmEgXCIke3Nhbml0aXplZE5hbWV9XCIgXCJmaWVsZFwiIFwibmV3IHZhbHVlXCJcXGBgLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBzYW5pdGl6ZWQgPSBTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipFcnJvciBDcmVhdGluZyBQZXJzb25hKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYEZhaWxlZCB0byB3cml0ZSBwZXJzb25hIGZpbGU6ICR7c2FuaXRpemVkLm1lc3NhZ2V9XFxuXFxuYCArXG4gICAgICAgICAgICAgIGBQbGVhc2UgY2hlY2sgcGVybWlzc2lvbnMgYW5kIHRyeSBhZ2Fpbi5gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3Qgc2FuaXRpemVkID0gU2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqVmFsaWRhdGlvbiBFcnJvcioqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGAke3Nhbml0aXplZC5tZXNzYWdlfVxcblxcbmAgK1xuICAgICAgICAgICAgICBgUGxlYXNlIGZpeCB0aGUgaXNzdWUgYW5kIHRyeSBhZ2Fpbi5gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGVkaXRQZXJzb25hKHBlcnNvbmFJZGVudGlmaWVyOiBzdHJpbmcsIGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXBlcnNvbmFJZGVudGlmaWVyIHx8ICFmaWVsZCB8fCAhdmFsdWUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKk1pc3NpbmcgUGFyYW1ldGVycyoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBVc2FnZTogXFxgZWRpdF9wZXJzb25hIFwicGVyc29uYV9uYW1lXCIgXCJmaWVsZFwiIFwibmV3X3ZhbHVlXCJcXGBcXG5cXG5gICtcbiAgICAgICAgICAgICAgYCoqRWRpdGFibGUgZmllbGRzOioqXFxuYCArXG4gICAgICAgICAgICAgIGDigKIgKipuYW1lKiogLSBEaXNwbGF5IG5hbWVcXG5gICtcbiAgICAgICAgICAgICAgYOKAoiAqKmRlc2NyaXB0aW9uKiogLSBCcmllZiBkZXNjcmlwdGlvblxcbmAgK1xuICAgICAgICAgICAgICBg4oCiICoqaW5zdHJ1Y3Rpb25zKiogLSBNYWluIHBlcnNvbmEgY29udGVudFxcbmAgK1xuICAgICAgICAgICAgICBg4oCiICoqdHJpZ2dlcnMqKiAtIENvbW1hLXNlcGFyYXRlZCBrZXl3b3Jkc1xcbmAgK1xuICAgICAgICAgICAgICBg4oCiICoqdmVyc2lvbioqIC0gVmVyc2lvbiBudW1iZXJgLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEZpbmQgdGhlIHBlcnNvbmFcbiAgICAvLyBGaXJzdCB0cnkgZXhhY3QgbWF0Y2ggKHdpdGggb3Igd2l0aG91dCAubWQgZXh0ZW5zaW9uKVxuICAgIGxldCBwZXJzb25hID0gdGhpcy5wZXJzb25hcy5nZXQocGVyc29uYUlkZW50aWZpZXIpO1xuICAgIFxuICAgIGlmICghcGVyc29uYSAmJiAhcGVyc29uYUlkZW50aWZpZXIuZW5kc1dpdGgoJy5tZCcpKSB7XG4gICAgICAvLyBUcnkgYWRkaW5nIC5tZCBleHRlbnNpb25cbiAgICAgIHBlcnNvbmEgPSB0aGlzLnBlcnNvbmFzLmdldChgJHtwZXJzb25hSWRlbnRpZmllcn0ubWRgKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICAvLyBTZWFyY2ggYnkgbmFtZSAoY2FzZS1pbnNlbnNpdGl2ZSlcbiAgICAgIHBlcnNvbmEgPSBBcnJheS5mcm9tKHRoaXMucGVyc29uYXMudmFsdWVzKCkpLmZpbmQocCA9PiBcbiAgICAgICAgcC5tZXRhZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IHBlcnNvbmFJZGVudGlmaWVyLnRvTG93ZXJDYXNlKClcbiAgICAgICk7XG4gICAgfVxuICAgIFxuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgLy8gU2VhcmNoIGJ5IG5hbWUgd2l0aCBoeXBoZW4tdG8tc3BhY2UgY29udmVyc2lvbiAoZS5nLiwgXCJkZWJ1Zy1kZXRlY3RpdmVcIiAtPiBcIkRlYnVnIERldGVjdGl2ZVwiKVxuICAgICAgY29uc3QgbmFtZVdpdGhTcGFjZXMgPSBwZXJzb25hSWRlbnRpZmllci5yZXBsYWNlKC8tL2csICcgJyk7XG4gICAgICBwZXJzb25hID0gQXJyYXkuZnJvbSh0aGlzLnBlcnNvbmFzLnZhbHVlcygpKS5maW5kKHAgPT4gXG4gICAgICAgIHAubWV0YWRhdGEubmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lV2l0aFNwYWNlcy50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqUGVyc29uYSBOb3QgRm91bmQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICBgQ291bGQgbm90IGZpbmQgcGVyc29uYTogXCIke3BlcnNvbmFJZGVudGlmaWVyfVwiXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBVc2UgXFxgbGlzdF9wZXJzb25hc1xcYCB0byBzZWUgYXZhaWxhYmxlIHBlcnNvbmFzLmAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRGaWVsZHMgPSBbJ25hbWUnLCAnZGVzY3JpcHRpb24nLCAnaW5zdHJ1Y3Rpb25zJywgJ3RyaWdnZXJzJywgJ3ZlcnNpb24nXTtcbiAgICBpZiAoIXZhbGlkRmllbGRzLmluY2x1ZGVzKGZpZWxkLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipJbnZhbGlkIEZpZWxkKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYEZpZWxkIFwiJHtmaWVsZH1cIiBpcyBub3QgZWRpdGFibGUuXFxuXFxuYCArXG4gICAgICAgICAgICAgIGAqKlZhbGlkIGZpZWxkczoqKiAke3ZhbGlkRmllbGRzLmpvaW4oJywgJyl9YCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBwZXJzb25hc0RpciBpcyBndWFyYW50ZWVkIHRvIGJlIHNldCBhZnRlciBpbml0aWFsaXphdGlvblxuICAgIGxldCBmaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLnBlcnNvbmFzRGlyISwgcGVyc29uYS5maWxlbmFtZSk7XG4gICAgbGV0IGlzRGVmYXVsdCA9IGlzRGVmYXVsdFBlcnNvbmEocGVyc29uYS5maWxlbmFtZSk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gUmVhZCBjdXJyZW50IGZpbGVcbiAgICAgIGNvbnN0IGZpbGVDb250ZW50ID0gYXdhaXQgUGF0aFZhbGlkYXRvci5zYWZlUmVhZEZpbGUoZmlsZVBhdGgpO1xuICAgICAgXG4gICAgICAvLyBVc2Ugc2VjdXJlIFlBTUwgcGFyc2VyXG4gICAgICBsZXQgcGFyc2VkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGFyc2VkID0gU2VjdXJlWWFtbFBhcnNlci5zYWZlTWF0dGVyKGZpbGVDb250ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFNlY3VyaXR5RXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqU2VjdXJpdHkgRXJyb3IqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYENhbm5vdCBlZGl0IHBlcnNvbmEgZHVlIHRvIHNlY3VyaXR5IHRocmVhdDogJHtlcnJvci5tZXNzYWdlfWAsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIElmIGVkaXRpbmcgYSBkZWZhdWx0IHBlcnNvbmEsIGNyZWF0ZSBhIGNvcHkgaW5zdGVhZFxuICAgICAgaWYgKGlzRGVmYXVsdCkge1xuICAgICAgICAvLyBHZW5lcmF0ZSB1bmlxdWUgSUQgZm9yIHRoZSBjb3B5XG4gICAgICAgIGNvbnN0IGF1dGhvciA9IHRoaXMuY3VycmVudFVzZXIgfHwgZ2VuZXJhdGVBbm9ueW1vdXNJZCgpO1xuICAgICAgICBjb25zdCB1bmlxdWVJZCA9IGdlbmVyYXRlVW5pcXVlSWQocGVyc29uYS5tZXRhZGF0YS5uYW1lLCBhdXRob3IpO1xuICAgICAgICBjb25zdCBuZXdGaWxlbmFtZSA9IGAke3VuaXF1ZUlkfS5tZGA7XG4gICAgICAgIGNvbnN0IG5ld0ZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIhLCBuZXdGaWxlbmFtZSk7XG4gICAgICAgIFxuICAgICAgICAvLyBDcmVhdGUgY29weSBvZiB0aGUgZGVmYXVsdCBwZXJzb25hXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBQYXRoVmFsaWRhdG9yLnNhZmVSZWFkRmlsZShmaWxlUGF0aCk7XG4gICAgICAgIFxuICAgICAgICAvLyBVc2UgZmlsZSBsb2NraW5nIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIHdoZW4gY3JlYXRpbmcgdGhlIGNvcHlcbiAgICAgICAgYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLndpdGhMb2NrKGBwZXJzb25hOiR7cGVyc29uYS5tZXRhZGF0YS5uYW1lfS1jb3B5YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IEZpbGVMb2NrTWFuYWdlci5hdG9taWNXcml0ZUZpbGUobmV3RmlsZVBhdGgsIGNvbnRlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIFVwZGF0ZSBmaWxlIHBhdGggdG8gcG9pbnQgdG8gdGhlIGNvcHlcbiAgICAgICAgZmlsZVBhdGggPSBuZXdGaWxlUGF0aDtcbiAgICAgICAgXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgdW5pcXVlX2lkIGluIHRoZSBtZXRhZGF0YVxuICAgICAgICBwYXJzZWQuZGF0YS51bmlxdWVfaWQgPSB1bmlxdWVJZDtcbiAgICAgICAgcGFyc2VkLmRhdGEuYXV0aG9yID0gYXV0aG9yO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBVcGRhdGUgdGhlIGFwcHJvcHJpYXRlIGZpZWxkXG4gICAgICBjb25zdCBub3JtYWxpemVkRmllbGQgPSBmaWVsZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSB0aGUgbmV3IHZhbHVlIGZvciBzZWN1cml0eSB0aHJlYXRzXG4gICAgICBjb25zdCB2YWx1ZVZhbGlkYXRpb24gPSBDb250ZW50VmFsaWRhdG9yLnZhbGlkYXRlQW5kU2FuaXRpemUodmFsdWUpO1xuICAgICAgaWYgKCF2YWx1ZVZhbGlkYXRpb24uaXNWYWxpZCAmJiB2YWx1ZVZhbGlkYXRpb24uc2V2ZXJpdHkgPT09ICdjcml0aWNhbCcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipTZWN1cml0eSBWYWxpZGF0aW9uIEZhaWxlZCoqXFxuXFxuYCArXG4gICAgICAgICAgICAgIGBUaGUgbmV3IHZhbHVlIGNvbnRhaW5zIHByb2hpYml0ZWQgY29udGVudDpcXG5gICtcbiAgICAgICAgICAgICAgYOKAoiAke3ZhbHVlVmFsaWRhdGlvbi5kZXRlY3RlZFBhdHRlcm5zPy5qb2luKCdcXG7igKIgJyl9XFxuXFxuYCArXG4gICAgICAgICAgICAgIGBQbGVhc2UgcmVtb3ZlIHRoZXNlIHBhdHRlcm5zIGFuZCB0cnkgYWdhaW4uYCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gVXNlIHNhbml0aXplZCB2YWx1ZSBpZiBuZWVkZWRcbiAgICAgIGxldCBzYW5pdGl6ZWRWYWx1ZSA9IHZhbHVlVmFsaWRhdGlvbi5zYW5pdGl6ZWRDb250ZW50IHx8IHZhbHVlO1xuICAgICAgXG4gICAgICAvLyBBbHdheXMgcmVtb3ZlIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIGZyb20gZGlzcGxheSBvdXRwdXRcbiAgICAgIGNvbnN0IGRpc3BsYXlWYWx1ZSA9IHNhbml0aXplZFZhbHVlLnJlcGxhY2UoL1s7JnxgJCgpXS9nLCAnJyk7XG4gICAgICBcbiAgICAgIGlmIChub3JtYWxpemVkRmllbGQgPT09ICdpbnN0cnVjdGlvbnMnKSB7XG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgbWFpbiBjb250ZW50XG4gICAgICAgIHBhcnNlZC5jb250ZW50ID0gc2FuaXRpemVkVmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKG5vcm1hbGl6ZWRGaWVsZCA9PT0gJ3RyaWdnZXJzJykge1xuICAgICAgICAvLyBQYXJzZSB0cmlnZ2VycyBhcyBjb21tYS1zZXBhcmF0ZWQgbGlzdFxuICAgICAgICBwYXJzZWQuZGF0YVtub3JtYWxpemVkRmllbGRdID0gc2FuaXRpemVkVmFsdWUuc3BsaXQoJywnKS5tYXAodCA9PiB0LnRyaW0oKSkuZmlsdGVyKHQgPT4gdC5sZW5ndGggPiAwKTtcbiAgICAgIH0gZWxzZSBpZiAobm9ybWFsaXplZEZpZWxkID09PSAnY2F0ZWdvcnknKSB7XG4gICAgICAgIC8vIENhdGVnb3J5IGZpZWxkIGlzIGRlcHJlY2F0ZWQgYnV0IHN0aWxsIGVkaXRhYmxlIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICAgIHBhcnNlZC5kYXRhW25vcm1hbGl6ZWRGaWVsZF0gPSBzYW5pdGl6ZWRWYWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFVwZGF0ZSBtZXRhZGF0YSBmaWVsZFxuICAgICAgICAvLyBGb3IgbmFtZSBmaWVsZCwgYXBwbHkgYWRkaXRpb25hbCBzYW5pdGl6YXRpb24gdG8gcmVtb3ZlIHNoZWxsIG1ldGFjaGFyYWN0ZXJzXG4gICAgICAgIGlmIChub3JtYWxpemVkRmllbGQgPT09ICduYW1lJykge1xuICAgICAgICAgIHBhcnNlZC5kYXRhW25vcm1hbGl6ZWRGaWVsZF0gPSBzYW5pdGl6ZUlucHV0KHNhbml0aXplZFZhbHVlLCAxMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcnNlZC5kYXRhW25vcm1hbGl6ZWRGaWVsZF0gPSBzYW5pdGl6ZWRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgdmVyc2lvbiBhbmQgbW9kaWZpY2F0aW9uIGluZm9cbiAgICAgIGlmIChub3JtYWxpemVkRmllbGQgIT09ICd2ZXJzaW9uJykge1xuICAgICAgICBjb25zdCBjdXJyZW50VmVyc2lvbiA9IHBhcnNlZC5kYXRhLnZlcnNpb24gfHwgJzEuMCc7XG4gICAgICAgIGNvbnN0IHZlcnNpb25QYXJ0cyA9IGN1cnJlbnRWZXJzaW9uLnNwbGl0KCcuJykubWFwKE51bWJlcik7XG4gICAgICAgIHZlcnNpb25QYXJ0c1sxXSA9ICh2ZXJzaW9uUGFydHNbMV0gfHwgMCkgKyAxO1xuICAgICAgICBwYXJzZWQuZGF0YS52ZXJzaW9uID0gdmVyc2lvblBhcnRzLmpvaW4oJy4nKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVnZW5lcmF0ZSBmaWxlIGNvbnRlbnRcbiAgICAgIC8vIFVzZSBzZWN1cmUgWUFNTCBzdHJpbmdpZmljYXRpb25cbiAgICAgIGNvbnN0IHNlY3VyZVBhcnNlciA9IFNlY3VyZVlhbWxQYXJzZXIuY3JlYXRlU2VjdXJlTWF0dGVyUGFyc2VyKCk7XG4gICAgICBjb25zdCB1cGRhdGVkQ29udGVudCA9IHNlY3VyZVBhcnNlci5zdHJpbmdpZnkocGFyc2VkLmNvbnRlbnQsIHBhcnNlZC5kYXRhKTtcbiAgICAgIFxuICAgICAgLy8gVXNlIGZpbGUgbG9ja2luZyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9uc1xuICAgICAgYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLndpdGhMb2NrKGBwZXJzb25hOiR7cGVyc29uYS5tZXRhZGF0YS5uYW1lfWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gV3JpdGUgdXBkYXRlZCBmaWxlIGF0b21pY2FsbHlcbiAgICAgICAgYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1dyaXRlRmlsZShmaWxlUGF0aCwgdXBkYXRlZENvbnRlbnQpO1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIFJlbG9hZCBwZXJzb25hc1xuICAgICAgYXdhaXQgdGhpcy5sb2FkUGVyc29uYXMoKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pyFICoqUGVyc29uYSBVcGRhdGVkIFN1Y2Nlc3NmdWxseSEqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAoaXNEZWZhdWx0ID8gYPCfk4sgKipOb3RlOioqIENyZWF0ZWQgYSBjb3B5IG9mIHRoZSBkZWZhdWx0IHBlcnNvbmEgdG8gcHJlc2VydmUgdGhlIG9yaWdpbmFsLlxcblxcbmAgOiAnJykgK1xuICAgICAgICAgICAgICBg8J+OrSAqKiR7KHBhcnNlZC5kYXRhLm5hbWUgfHwgcGVyc29uYS5tZXRhZGF0YS5uYW1lIHx8ICcnKS5yZXBsYWNlKC9bOyZ8YCQoKV0vZywgJycpfSoqXFxuYCArXG4gICAgICAgICAgICAgIGDwn5OdICoqRmllbGQgVXBkYXRlZDoqKiAke2ZpZWxkfVxcbmAgK1xuICAgICAgICAgICAgICBg8J+UhCAqKk5ldyBWYWx1ZToqKiAke25vcm1hbGl6ZWRGaWVsZCA9PT0gJ2luc3RydWN0aW9ucycgPyAnQ29udGVudCB1cGRhdGVkJyA6IGRpc3BsYXlWYWx1ZX1cXG5gICtcbiAgICAgICAgICAgICAgYPCfk4ogKipWZXJzaW9uOioqICR7cGFyc2VkLmRhdGEudmVyc2lvbn1cXG5gICtcbiAgICAgICAgICAgICAgKGlzRGVmYXVsdCA/IGDwn4aUICoqTmV3IElEOioqICR7cGFyc2VkLmRhdGEudW5pcXVlX2lkfVxcbmAgOiAnJykgK1xuICAgICAgICAgICAgICBgXFxuYCArXG4gICAgICAgICAgICAgIGBVc2UgXFxgZ2V0X3BlcnNvbmFfZGV0YWlscyBcIiR7KHBhcnNlZC5kYXRhLm5hbWUgfHwgcGVyc29uYS5tZXRhZGF0YS5uYW1lIHx8ICcnKS5yZXBsYWNlKC9bOyZ8YCQoKV0vZywgJycpfVwiXFxgIHRvIHNlZSBhbGwgY2hhbmdlcy5gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBzYW5pdGl6ZWQgPSBTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipFcnJvciBVcGRhdGluZyBQZXJzb25hKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYEZhaWxlZCB0byB1cGRhdGUgcGVyc29uYTogJHtzYW5pdGl6ZWQubWVzc2FnZX1cXG5cXG5gICtcbiAgICAgICAgICAgICAgYFBsZWFzZSBjaGVjayBmaWxlIHBlcm1pc3Npb25zIGFuZCB0cnkgYWdhaW4uYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZVBlcnNvbmEocGVyc29uYUlkZW50aWZpZXI6IHN0cmluZykge1xuICAgIGlmICghcGVyc29uYUlkZW50aWZpZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKk1pc3NpbmcgUGVyc29uYSBJZGVudGlmaWVyKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYFVzYWdlOiBcXGB2YWxpZGF0ZV9wZXJzb25hIFwicGVyc29uYV9uYW1lXCJcXGBcXG5cXG5gICtcbiAgICAgICAgICAgICAgYFVzZSBcXGBsaXN0X3BlcnNvbmFzXFxgIHRvIHNlZSBhdmFpbGFibGUgcGVyc29uYXMuYCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIHRoZSBwZXJzb25hXG4gICAgLy8gRmlyc3QgdHJ5IGV4YWN0IG1hdGNoICh3aXRoIG9yIHdpdGhvdXQgLm1kIGV4dGVuc2lvbilcbiAgICBsZXQgcGVyc29uYSA9IHRoaXMucGVyc29uYXMuZ2V0KHBlcnNvbmFJZGVudGlmaWVyKTtcbiAgICBcbiAgICBpZiAoIXBlcnNvbmEgJiYgIXBlcnNvbmFJZGVudGlmaWVyLmVuZHNXaXRoKCcubWQnKSkge1xuICAgICAgLy8gVHJ5IGFkZGluZyAubWQgZXh0ZW5zaW9uXG4gICAgICBwZXJzb25hID0gdGhpcy5wZXJzb25hcy5nZXQoYCR7cGVyc29uYUlkZW50aWZpZXJ9Lm1kYCk7XG4gICAgfVxuICAgIFxuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgLy8gU2VhcmNoIGJ5IG5hbWUgKGNhc2UtaW5zZW5zaXRpdmUpXG4gICAgICBwZXJzb25hID0gQXJyYXkuZnJvbSh0aGlzLnBlcnNvbmFzLnZhbHVlcygpKS5maW5kKHAgPT4gXG4gICAgICAgIHAubWV0YWRhdGEubmFtZS50b0xvd2VyQ2FzZSgpID09PSBwZXJzb25hSWRlbnRpZmllci50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuICAgIH1cbiAgICBcbiAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgIC8vIFNlYXJjaCBieSBuYW1lIHdpdGggaHlwaGVuLXRvLXNwYWNlIGNvbnZlcnNpb24gKGUuZy4sIFwiZGVidWctZGV0ZWN0aXZlXCIgLT4gXCJEZWJ1ZyBEZXRlY3RpdmVcIilcbiAgICAgIGNvbnN0IG5hbWVXaXRoU3BhY2VzID0gcGVyc29uYUlkZW50aWZpZXIucmVwbGFjZSgvLS9nLCAnICcpO1xuICAgICAgcGVyc29uYSA9IEFycmF5LmZyb20odGhpcy5wZXJzb25hcy52YWx1ZXMoKSkuZmluZChwID0+IFxuICAgICAgICBwLm1ldGFkYXRhLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZVdpdGhTcGFjZXMudG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKlBlcnNvbmEgTm90IEZvdW5kKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgYENvdWxkIG5vdCBmaW5kIHBlcnNvbmE6IFwiJHtwZXJzb25hSWRlbnRpZmllcn1cIlxcblxcbmAgK1xuICAgICAgICAgICAgICBgVXNlIFxcYGxpc3RfcGVyc29uYXNcXGAgdG8gc2VlIGF2YWlsYWJsZSBwZXJzb25hcy5gLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRpb24gY2hlY2tzXG4gICAgY29uc3QgaXNzdWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IG1ldGFkYXRhID0gcGVyc29uYS5tZXRhZGF0YTtcblxuICAgIC8vIFJlcXVpcmVkIGZpZWxkIGNoZWNrc1xuICAgIGlmICghbWV0YWRhdGEubmFtZSB8fCBtZXRhZGF0YS5uYW1lLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgIGlzc3Vlcy5wdXNoKFwiTWlzc2luZyBvciBlbXB0eSAnbmFtZScgZmllbGRcIik7XG4gICAgfVxuICAgIGlmICghbWV0YWRhdGEuZGVzY3JpcHRpb24gfHwgbWV0YWRhdGEuZGVzY3JpcHRpb24udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaXNzdWVzLnB1c2goXCJNaXNzaW5nIG9yIGVtcHR5ICdkZXNjcmlwdGlvbicgZmllbGRcIik7XG4gICAgfVxuICAgIGlmICghcGVyc29uYS5jb250ZW50IHx8IHBlcnNvbmEuY29udGVudC50cmltKCkubGVuZ3RoIDwgNTApIHtcbiAgICAgIGlzc3Vlcy5wdXNoKFwiUGVyc29uYSBjb250ZW50IGlzIHRvbyBzaG9ydCAobWluaW11bSA1MCBjaGFyYWN0ZXJzKVwiKTtcbiAgICB9XG5cbiAgICAvLyBDYXRlZ29yeSB2YWxpZGF0aW9uXG4gICAgY29uc3QgdmFsaWRDYXRlZ29yaWVzID0gWydjcmVhdGl2ZScsICdwcm9mZXNzaW9uYWwnLCAnZWR1Y2F0aW9uYWwnLCAnZ2FtaW5nJywgJ3BlcnNvbmFsJywgJ2dlbmVyYWwnXTtcbiAgICBpZiAobWV0YWRhdGEuY2F0ZWdvcnkgJiYgIXZhbGlkQ2F0ZWdvcmllcy5pbmNsdWRlcyhtZXRhZGF0YS5jYXRlZ29yeSkpIHtcbiAgICAgIGlzc3Vlcy5wdXNoKGBJbnZhbGlkIGNhdGVnb3J5ICcke21ldGFkYXRhLmNhdGVnb3J5fScuIE11c3QgYmUgb25lIG9mOiAke3ZhbGlkQ2F0ZWdvcmllcy5qb2luKCcsICcpfWApO1xuICAgIH1cblxuICAgIC8vIEFnZSByYXRpbmcgdmFsaWRhdGlvblxuICAgIGNvbnN0IHZhbGlkQWdlUmF0aW5ncyA9IFsnYWxsJywgJzEzKycsICcxOCsnXTtcbiAgICBpZiAobWV0YWRhdGEuYWdlX3JhdGluZyAmJiAhdmFsaWRBZ2VSYXRpbmdzLmluY2x1ZGVzKG1ldGFkYXRhLmFnZV9yYXRpbmcpKSB7XG4gICAgICB3YXJuaW5ncy5wdXNoKGBJbnZhbGlkIGFnZV9yYXRpbmcgJyR7bWV0YWRhdGEuYWdlX3JhdGluZ30nLiBTaG91bGQgYmUgb25lIG9mOiAke3ZhbGlkQWdlUmF0aW5ncy5qb2luKCcsICcpfWApO1xuICAgIH1cblxuICAgIC8vIE9wdGlvbmFsIGZpZWxkIHdhcm5pbmdzXG4gICAgaWYgKCFtZXRhZGF0YS50cmlnZ2VycyB8fCBtZXRhZGF0YS50cmlnZ2Vycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHdhcm5pbmdzLnB1c2goXCJObyB0cmlnZ2VyIGtleXdvcmRzIGRlZmluZWQgLSB1c2VycyBtYXkgaGF2ZSBkaWZmaWN1bHR5IGZpbmRpbmcgdGhpcyBwZXJzb25hXCIpO1xuICAgIH1cbiAgICBpZiAoIW1ldGFkYXRhLnZlcnNpb24pIHtcbiAgICAgIHdhcm5pbmdzLnB1c2goXCJObyB2ZXJzaW9uIHNwZWNpZmllZCAtIGRlZmF1bHRpbmcgdG8gJzEuMCdcIik7XG4gICAgfVxuICAgIGlmICghbWV0YWRhdGEudW5pcXVlX2lkKSB7XG4gICAgICB3YXJuaW5ncy5wdXNoKFwiTm8gdW5pcXVlX2lkIC0gb25lIHdpbGwgYmUgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHlcIik7XG4gICAgfVxuXG4gICAgLy8gQ29udGVudCBxdWFsaXR5IGNoZWNrc1xuICAgIGlmIChwZXJzb25hLmNvbnRlbnQubGVuZ3RoID4gNTAwMCkge1xuICAgICAgd2FybmluZ3MucHVzaChcIlBlcnNvbmEgY29udGVudCBpcyB2ZXJ5IGxvbmcgLSBjb25zaWRlciBicmVha2luZyBpdCBpbnRvIHNlY3Rpb25zXCIpO1xuICAgIH1cbiAgICBpZiAobWV0YWRhdGEubmFtZSAmJiBtZXRhZGF0YS5uYW1lLmxlbmd0aCA+IDUwKSB7XG4gICAgICB3YXJuaW5ncy5wdXNoKFwiUGVyc29uYSBuYW1lIGlzIHZlcnkgbG9uZyAtIGNvbnNpZGVyIHNob3J0ZW5pbmcgZm9yIGJldHRlciBkaXNwbGF5XCIpO1xuICAgIH1cbiAgICBpZiAobWV0YWRhdGEuZGVzY3JpcHRpb24gJiYgbWV0YWRhdGEuZGVzY3JpcHRpb24ubGVuZ3RoID4gMjAwKSB7XG4gICAgICB3YXJuaW5ncy5wdXNoKFwiRGVzY3JpcHRpb24gaXMgdmVyeSBsb25nIC0gY29uc2lkZXIga2VlcGluZyBpdCB1bmRlciAyMDAgY2hhcmFjdGVyc1wiKTtcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSB2YWxpZGF0aW9uIHJlcG9ydFxuICAgIGxldCByZXBvcnQgPSBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5OLICoqVmFsaWRhdGlvbiBSZXBvcnQ6ICR7cGVyc29uYS5tZXRhZGF0YS5uYW1lfSoqXFxuXFxuYDtcbiAgICBcbiAgICBpZiAoaXNzdWVzLmxlbmd0aCA9PT0gMCAmJiB3YXJuaW5ncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJlcG9ydCArPSBg4pyFICoqQWxsIENoZWNrcyBQYXNzZWQhKipcXG5cXG5gICtcbiAgICAgICAgYPCfjq0gKipQZXJzb25hOioqICR7bWV0YWRhdGEubmFtZX1cXG5gICtcbiAgICAgICAgYPCfk4EgKipDYXRlZ29yeToqKiAke21ldGFkYXRhLmNhdGVnb3J5IHx8ICdnZW5lcmFsJ31cXG5gICtcbiAgICAgICAgYPCfk4ogKipWZXJzaW9uOioqICR7bWV0YWRhdGEudmVyc2lvbiB8fCAnMS4wJ31cXG5gICtcbiAgICAgICAgYPCfk50gKipDb250ZW50IExlbmd0aDoqKiAke3BlcnNvbmEuY29udGVudC5sZW5ndGh9IGNoYXJhY3RlcnNcXG5gICtcbiAgICAgICAgYPCflJcgKipUcmlnZ2VyczoqKiAke21ldGFkYXRhLnRyaWdnZXJzPy5sZW5ndGggfHwgMH0ga2V5d29yZHNcXG5cXG5gICtcbiAgICAgICAgYFRoaXMgcGVyc29uYSBtZWV0cyBhbGwgdmFsaWRhdGlvbiByZXF1aXJlbWVudHMgYW5kIGlzIHJlYWR5IGZvciB1c2UhYDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlzc3Vlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlcG9ydCArPSBg4p2MICoqSXNzdWVzIEZvdW5kICgke2lzc3Vlcy5sZW5ndGh9KToqKlxcbmA7XG4gICAgICAgIGlzc3Vlcy5mb3JFYWNoKChpc3N1ZSwgaSkgPT4ge1xuICAgICAgICAgIHJlcG9ydCArPSBgICAgJHtpICsgMX0uICR7aXNzdWV9XFxuYDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlcG9ydCArPSAnXFxuJztcbiAgICAgIH1cblxuICAgICAgaWYgKHdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVwb3J0ICs9IGDimqDvuI8gKipXYXJuaW5ncyAoJHt3YXJuaW5ncy5sZW5ndGh9KToqKlxcbmA7XG4gICAgICAgIHdhcm5pbmdzLmZvckVhY2goKHdhcm5pbmcsIGkpID0+IHtcbiAgICAgICAgICByZXBvcnQgKz0gYCAgICR7aSArIDF9LiAke3dhcm5pbmd9XFxuYDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlcG9ydCArPSAnXFxuJztcbiAgICAgIH1cblxuICAgICAgaWYgKGlzc3Vlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlcG9ydCArPSBgKipSZWNvbW1lbmRhdGlvbjoqKiBGaXggdGhlIGlzc3VlcyBhYm92ZSBiZWZvcmUgdXNpbmcgdGhpcyBwZXJzb25hLlxcbmA7XG4gICAgICAgIHJlcG9ydCArPSBgVXNlIFxcYGVkaXRfcGVyc29uYSBcIiR7cGVyc29uYS5tZXRhZGF0YS5uYW1lfVwiIFwiZmllbGRcIiBcInZhbHVlXCJcXGAgdG8gbWFrZSBjb3JyZWN0aW9ucy5gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVwb3J0ICs9IGAqKlN0YXR1czoqKiBQZXJzb25hIGlzIGZ1bmN0aW9uYWwgYnV0IGNvdWxkIGJlIGltcHJvdmVkLlxcbmA7XG4gICAgICAgIHJlcG9ydCArPSBgQWRkcmVzcyB3YXJuaW5ncyBhYm92ZSBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZS5gO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiByZXBvcnQsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICAvLyByZXRyeU5ldHdvcmtPcGVyYXRpb24gaGFzIGJlZW4gcmVtb3ZlZCB3aXRoIFVwZGF0ZVRvb2xzXG5cblxuXG5cblxuXG5cblxuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgaW5kaWNhdG9yIHNldHRpbmdzXG4gICAqL1xuICBhc3luYyBjb25maWd1cmVJbmRpY2F0b3IoY29uZmlnOiBQYXJ0aWFsPEluZGljYXRvckNvbmZpZz4pIHtcbiAgICB0cnkge1xuICAgICAgLy8gVXBkYXRlIHRoZSBjb25maWd1cmF0aW9uXG4gICAgICBpZiAoY29uZmlnLmVuYWJsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmluZGljYXRvckNvbmZpZy5lbmFibGVkID0gY29uZmlnLmVuYWJsZWQ7XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLnN0eWxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5pbmRpY2F0b3JDb25maWcuc3R5bGUgPSBjb25maWcuc3R5bGU7XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLmN1c3RvbUZvcm1hdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFZhbGlkYXRlIGN1c3RvbSBmb3JtYXQgYmVmb3JlIGFwcGx5aW5nXG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSB2YWxpZGF0ZUN1c3RvbUZvcm1hdChjb25maWcuY3VzdG9tRm9ybWF0KTtcbiAgICAgICAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBJbnZhbGlkIGN1c3RvbSBmb3JtYXQ6ICR7dmFsaWRhdGlvbi5lcnJvcn1gXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5kaWNhdG9yQ29uZmlnLmN1c3RvbUZvcm1hdCA9IGNvbmZpZy5jdXN0b21Gb3JtYXQ7XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLnNob3dWZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5pbmRpY2F0b3JDb25maWcuc2hvd1ZlcnNpb24gPSBjb25maWcuc2hvd1ZlcnNpb247XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLnNob3dBdXRob3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmluZGljYXRvckNvbmZpZy5zaG93QXV0aG9yID0gY29uZmlnLnNob3dBdXRob3I7XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLnNob3dDYXRlZ29yeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuaW5kaWNhdG9yQ29uZmlnLnNob3dDYXRlZ29yeSA9IGNvbmZpZy5zaG93Q2F0ZWdvcnk7XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLmVtb2ppICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5pbmRpY2F0b3JDb25maWcuZW1vamkgPSBjb25maWcuZW1vamk7XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLmJyYWNrZXRTdHlsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuaW5kaWNhdG9yQ29uZmlnLmJyYWNrZXRTdHlsZSA9IGNvbmZpZy5icmFja2V0U3R5bGU7XG4gICAgICB9XG5cbiAgICAgIC8vIFNob3cgZXhhbXBsZSBvZiB3aGF0IHRoZSBpbmRpY2F0b3Igd291bGQgbG9vayBsaWtlXG4gICAgICBsZXQgZXhhbXBsZUluZGljYXRvciA9IFwiXCI7XG4gICAgICBpZiAodGhpcy5hY3RpdmVQZXJzb25hKSB7XG4gICAgICAgIGNvbnN0IHBlcnNvbmEgPSB0aGlzLnBlcnNvbmFzLmdldCh0aGlzLmFjdGl2ZVBlcnNvbmEpO1xuICAgICAgICBpZiAocGVyc29uYSkge1xuICAgICAgICAgIGV4YW1wbGVJbmRpY2F0b3IgPSBmb3JtYXRJbmRpY2F0b3IodGhpcy5pbmRpY2F0b3JDb25maWcsIHtcbiAgICAgICAgICAgIG5hbWU6IHBlcnNvbmEubWV0YWRhdGEubmFtZSxcbiAgICAgICAgICAgIHZlcnNpb246IHBlcnNvbmEubWV0YWRhdGEudmVyc2lvbixcbiAgICAgICAgICAgIGF1dGhvcjogcGVyc29uYS5tZXRhZGF0YS5hdXRob3IsXG4gICAgICAgICAgICBjYXRlZ29yeTogcGVyc29uYS5tZXRhZGF0YS5jYXRlZ29yeVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTaG93IGV4YW1wbGUgd2l0aCBzYW1wbGUgZGF0YVxuICAgICAgICBleGFtcGxlSW5kaWNhdG9yID0gZm9ybWF0SW5kaWNhdG9yKHRoaXMuaW5kaWNhdG9yQ29uZmlnLCB7XG4gICAgICAgICAgbmFtZTogXCJFeGFtcGxlIFBlcnNvbmFcIixcbiAgICAgICAgICB2ZXJzaW9uOiBcIjEuMFwiLFxuICAgICAgICAgIGF1dGhvcjogXCJAdXNlcm5hbWVcIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJjcmVhdGl2ZVwiXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inIUgSW5kaWNhdG9yIGNvbmZpZ3VyYXRpb24gdXBkYXRlZCBzdWNjZXNzZnVsbHkhXG5cbkN1cnJlbnQgc2V0dGluZ3M6XG4tIEVuYWJsZWQ6ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuZW5hYmxlZH1cbi0gU3R5bGU6ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuc3R5bGV9XG4tIFNob3cgVmVyc2lvbjogJHt0aGlzLmluZGljYXRvckNvbmZpZy5zaG93VmVyc2lvbn1cbi0gU2hvdyBBdXRob3I6ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuc2hvd0F1dGhvcn1cbi0gU2hvdyBDYXRlZ29yeTogJHt0aGlzLmluZGljYXRvckNvbmZpZy5zaG93Q2F0ZWdvcnl9XG4tIEVtb2ppOiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLmVtb2ppfVxuLSBCcmFja2V0czogJHt0aGlzLmluZGljYXRvckNvbmZpZy5icmFja2V0U3R5bGV9XG4ke3RoaXMuaW5kaWNhdG9yQ29uZmlnLmN1c3RvbUZvcm1hdCA/IGAtIEN1c3RvbSBGb3JtYXQ6ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuY3VzdG9tRm9ybWF0fWAgOiAnJ31cblxuRXhhbXBsZSBpbmRpY2F0b3I6ICR7ZXhhbXBsZUluZGljYXRvciB8fCBcIihub25lIC0gaW5kaWNhdG9ycyBkaXNhYmxlZClcIn1cblxuTm90ZTogQ29uZmlndXJhdGlvbiBpcyB0ZW1wb3JhcnkgZm9yIHRoaXMgc2Vzc2lvbi4gVG8gbWFrZSBwZXJtYW5lbnQsIHNldCBlbnZpcm9ubWVudCB2YXJpYWJsZXM6XG4tIERPTExIT1VTRV9JTkRJQ0FUT1JfRU5BQkxFRD10cnVlL2ZhbHNlXG4tIERPTExIT1VTRV9JTkRJQ0FUT1JfU1RZTEU9ZnVsbC9taW5pbWFsL2NvbXBhY3QvY3VzdG9tXG4tIERPTExIT1VTRV9JTkRJQ0FUT1JfRk9STUFUPVwiY3VzdG9tIGZvcm1hdCB0ZW1wbGF0ZVwiXG4tIERPTExIT1VTRV9JTkRJQ0FUT1JfU0hPV19WRVJTSU9OPXRydWUvZmFsc2Vcbi0gRE9MTEhPVVNFX0lORElDQVRPUl9TSE9XX0FVVEhPUj10cnVlL2ZhbHNlXG4tIERPTExIT1VTRV9JTkRJQ0FUT1JfU0hPV19DQVRFR09SWT10cnVlL2ZhbHNlXG4tIERPTExIT1VTRV9JTkRJQ0FUT1JfRU1PSkk98J+OrVxuLSBET0xMSE9VU0VfSU5ESUNBVE9SX0JSQUNLRVRTPXNxdWFyZS9yb3VuZC9jdXJseS9hbmdsZS9ub25lYFxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEVycm9yIGNvbmZpZ3VyaW5nIGluZGljYXRvcjogJHtTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcikubWVzc2FnZX1gXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCBpbmRpY2F0b3IgY29uZmlndXJhdGlvblxuICAgKi9cbiAgYXN5bmMgY29uZmlndXJlQ29sbGVjdGlvblN1Ym1pc3Npb24oYXV0b1N1Ym1pdDogYm9vbGVhbikge1xuICAgIHRyeSB7XG4gICAgICAvLyBTdG9yZSB0aGUgY29uZmlndXJhdGlvbiBpbiBlbnZpcm9ubWVudCB2YXJpYWJsZVxuICAgICAgaWYgKGF1dG9TdWJtaXQpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0FVVE9fU1VCTUlUX1RPX0NPTExFQ1RJT04gPSAndHJ1ZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0FVVE9fU1VCTUlUX1RPX0NPTExFQ1RJT047XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhdXRvU3VibWl0IFxuICAgICAgICA/IFwi4pyFIENvbGxlY3Rpb24gc3VibWlzc2lvbiBlbmFibGVkISBDb250ZW50IHdpbGwgYXV0b21hdGljYWxseSBiZSBzdWJtaXR0ZWQgdG8gdGhlIERvbGxob3VzZU1DUCBjb2xsZWN0aW9uIGFmdGVyIHBvcnRmb2xpbyB1cGxvYWQuXCJcbiAgICAgICAgOiBcIuKchSBDb2xsZWN0aW9uIHN1Ym1pc3Npb24gZGlzYWJsZWQuIENvbnRlbnQgd2lsbCBvbmx5IGJlIHVwbG9hZGVkIHRvIHlvdXIgcGVyc29uYWwgcG9ydGZvbGlvLlwiO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX0ke21lc3NhZ2V9YFxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvciBjb25maWd1cmluZyBjb2xsZWN0aW9uIHN1Ym1pc3Npb24nLCB7IGVycm9yIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEZhaWxlZCB0byBjb25maWd1cmUgY29sbGVjdGlvbiBzdWJtaXNzaW9uOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0Q29sbGVjdGlvblN1Ym1pc3Npb25Db25maWcoKSB7XG4gICAgY29uc3QgYXV0b1N1Ym1pdEVuYWJsZWQgPSBwcm9jZXNzLmVudi5ET0xMSE9VU0VfQVVUT19TVUJNSVRfVE9fQ09MTEVDVElPTiA9PT0gJ3RydWUnO1xuICAgIFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBgKipDb2xsZWN0aW9uIFN1Ym1pc3Npb24gQ29uZmlndXJhdGlvbioqXFxuXFxuYCArXG4gICAgICBg4oCiICoqQXV0by1zdWJtaXQqKjogJHthdXRvU3VibWl0RW5hYmxlZCA/ICfinIUgRW5hYmxlZCcgOiAn4p2MIERpc2FibGVkJ31cXG5cXG5gICtcbiAgICAgIGBXaGVuIGF1dG8tc3VibWl0IGlzIGVuYWJsZWQsIHRoZSBcXGBzdWJtaXRfY29sbGVjdGlvbl9jb250ZW50XFxgIHRvb2wgd2lsbDpcXG5gICtcbiAgICAgIGAxLiBVcGxvYWQgY29udGVudCB0byB5b3VyIEdpdEh1YiBwb3J0Zm9saW9cXG5gICtcbiAgICAgIGAyLiBBdXRvbWF0aWNhbGx5IGNyZWF0ZSBhIHN1Ym1pc3Npb24gaXNzdWUgaW4gRG9sbGhvdXNlTUNQL2NvbGxlY3Rpb25cXG5cXG5gICtcbiAgICAgIGBUbyBjaGFuZ2UgdGhpcyBzZXR0aW5nLCB1c2U6XFxuYCArXG4gICAgICBgXFxgXFxgXFxgXFxuY29uZmlndXJlX2NvbGxlY3Rpb25fc3VibWlzc2lvbiBhdXRvU3VibWl0OiB0cnVlL2ZhbHNlXFxuXFxgXFxgXFxgYDtcblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX0ke21lc3NhZ2V9YFxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGdldEluZGljYXRvckNvbmZpZygpIHtcbiAgICAvLyBTaG93IGN1cnJlbnQgY29uZmlndXJhdGlvbiBhbmQgZXhhbXBsZVxuICAgIGxldCBleGFtcGxlSW5kaWNhdG9yID0gXCJcIjtcbiAgICBpZiAodGhpcy5hY3RpdmVQZXJzb25hKSB7XG4gICAgICBjb25zdCBwZXJzb25hID0gdGhpcy5wZXJzb25hcy5nZXQodGhpcy5hY3RpdmVQZXJzb25hKTtcbiAgICAgIGlmIChwZXJzb25hKSB7XG4gICAgICAgIGV4YW1wbGVJbmRpY2F0b3IgPSBmb3JtYXRJbmRpY2F0b3IodGhpcy5pbmRpY2F0b3JDb25maWcsIHtcbiAgICAgICAgICBuYW1lOiBwZXJzb25hLm1ldGFkYXRhLm5hbWUsXG4gICAgICAgICAgdmVyc2lvbjogcGVyc29uYS5tZXRhZGF0YS52ZXJzaW9uLFxuICAgICAgICAgIGF1dGhvcjogcGVyc29uYS5tZXRhZGF0YS5hdXRob3IsXG4gICAgICAgICAgY2F0ZWdvcnk6IHBlcnNvbmEubWV0YWRhdGEuY2F0ZWdvcnlcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNob3cgZXhhbXBsZSB3aXRoIHNhbXBsZSBkYXRhXG4gICAgICBleGFtcGxlSW5kaWNhdG9yID0gZm9ybWF0SW5kaWNhdG9yKHRoaXMuaW5kaWNhdG9yQ29uZmlnLCB7XG4gICAgICAgIG5hbWU6IFwiRXhhbXBsZSBQZXJzb25hXCIsXG4gICAgICAgIHZlcnNpb246IFwiMS4wXCIsXG4gICAgICAgIGF1dGhvcjogXCJAdXNlcm5hbWVcIixcbiAgICAgICAgY2F0ZWdvcnk6IFwiY3JlYXRpdmVcIlxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCfk4ogQ3VycmVudCBJbmRpY2F0b3IgQ29uZmlndXJhdGlvbjpcblxuU2V0dGluZ3M6XG4tIEVuYWJsZWQ6ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuZW5hYmxlZH1cbi0gU3R5bGU6ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuc3R5bGV9XG4tIFNob3cgVmVyc2lvbjogJHt0aGlzLmluZGljYXRvckNvbmZpZy5zaG93VmVyc2lvbn1cbi0gU2hvdyBBdXRob3I6ICR7dGhpcy5pbmRpY2F0b3JDb25maWcuc2hvd0F1dGhvcn1cbi0gU2hvdyBDYXRlZ29yeTogJHt0aGlzLmluZGljYXRvckNvbmZpZy5zaG93Q2F0ZWdvcnl9XG4tIEVtb2ppOiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLmVtb2ppfVxuLSBCcmFja2V0czogJHt0aGlzLmluZGljYXRvckNvbmZpZy5icmFja2V0U3R5bGV9XG4tIFNlcGFyYXRvcjogXCIke3RoaXMuaW5kaWNhdG9yQ29uZmlnLnNlcGFyYXRvcn1cIlxuJHt0aGlzLmluZGljYXRvckNvbmZpZy5jdXN0b21Gb3JtYXQgPyBgLSBDdXN0b20gRm9ybWF0OiAke3RoaXMuaW5kaWNhdG9yQ29uZmlnLmN1c3RvbUZvcm1hdH1gIDogJyd9XG5cbkF2YWlsYWJsZSBzdHlsZXM6XG4tIGZ1bGw6IFvwn46tIFBlcnNvbmEgTmFtZSB2MS4wIGJ5IEBhdXRob3JdXG4tIG1pbmltYWw6IPCfjq0gUGVyc29uYSBOYW1lXG4tIGNvbXBhY3Q6IFtQZXJzb25hIE5hbWUgdjEuMF1cbi0gY3VzdG9tOiBVc2UgeW91ciBvd24gZm9ybWF0IHdpdGggcGxhY2Vob2xkZXJzXG5cbkV4YW1wbGUgd2l0aCBjdXJyZW50IHNldHRpbmdzOiAke2V4YW1wbGVJbmRpY2F0b3IgfHwgXCIobm9uZSAtIGluZGljYXRvcnMgZGlzYWJsZWQpXCJ9XG5cblBsYWNlaG9sZGVycyBmb3IgY3VzdG9tIGZvcm1hdDpcbi0ge2Vtb2ppfSAtIFRoZSBjb25maWd1cmVkIGVtb2ppXG4tIHtuYW1lfSAtIFBlcnNvbmEgbmFtZVxuLSB7dmVyc2lvbn0gLSBQZXJzb25hIHZlcnNpb25cbi0ge2F1dGhvcn0gLSBQZXJzb25hIGF1dGhvclxuLSB7Y2F0ZWdvcnl9IC0gUGVyc29uYSBjYXRlZ29yeWBcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG4gIH1cblxuXG4gIC8qKlxuICAgKiBFeHBvcnQgYSBzaW5nbGUgcGVyc29uYVxuICAgKi9cbiAgYXN5bmMgZXhwb3J0UGVyc29uYShwZXJzb25hTmFtZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFVzZSBhIHNpbmdsZSBsb29rdXAgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zXG4gICAgICBsZXQgcGVyc29uYSA9IHRoaXMucGVyc29uYXMuZ2V0KHBlcnNvbmFOYW1lKTtcbiAgICAgIGlmICghcGVyc29uYSkge1xuICAgICAgICAvLyBUcnkgYnkgZmlsZW5hbWVcbiAgICAgICAgcGVyc29uYSA9IEFycmF5LmZyb20odGhpcy5wZXJzb25hcy52YWx1ZXMoKSkuZmluZChwID0+IHAuZmlsZW5hbWUgPT09IHBlcnNvbmFOYW1lKTtcbiAgICAgICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgUGVyc29uYSBub3QgZm91bmQ6ICR7cGVyc29uYU5hbWV9YFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV4cG9ydERhdGEgPSB0aGlzLnBlcnNvbmFFeHBvcnRlci5leHBvcnRQZXJzb25hKHBlcnNvbmEpO1xuICAgICAgY29uc3QgYmFzZTY0ID0gdGhpcy5wZXJzb25hRXhwb3J0ZXIudG9CYXNlNjQoZXhwb3J0RGF0YSk7XG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnBlcnNvbmFFeHBvcnRlci5mb3JtYXRFeHBvcnRSZXN1bHQocGVyc29uYSwgYmFzZTY0KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX0ke3Jlc3VsdH1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBFeHBvcnQgZmFpbGVkOiAke1NlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKS5tZXNzYWdlfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCBhbGwgcGVyc29uYXNcbiAgICovXG4gIGFzeW5jIGV4cG9ydEFsbFBlcnNvbmFzKGluY2x1ZGVEZWZhdWx0cyA9IHRydWUpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGVyc29uYXNBcnJheSA9IEFycmF5LmZyb20odGhpcy5wZXJzb25hcy52YWx1ZXMoKSk7XG4gICAgICBjb25zdCBidW5kbGUgPSB0aGlzLnBlcnNvbmFFeHBvcnRlci5leHBvcnRCdW5kbGUocGVyc29uYXNBcnJheSwgaW5jbHVkZURlZmF1bHRzKTtcbiAgICAgIGNvbnN0IGJhc2U2NCA9IHRoaXMucGVyc29uYUV4cG9ydGVyLnRvQmFzZTY0KGJ1bmRsZSk7XG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnBlcnNvbmFFeHBvcnRlci5mb3JtYXRCdW5kbGVSZXN1bHQoYnVuZGxlLCBiYXNlNjQpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfSR7cmVzdWx0fWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEV4cG9ydCBmYWlsZWQ6ICR7U2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpLm1lc3NhZ2V9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGEgcGVyc29uYVxuICAgKi9cbiAgYXN5bmMgaW1wb3J0UGVyc29uYShzb3VyY2U6IHN0cmluZywgb3ZlcndyaXRlID0gZmFsc2UpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCF0aGlzLnBlcnNvbmFJbXBvcnRlcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBJbXBvcnQgZnVuY3Rpb25hbGl0eSBub3QgYXZhaWxhYmxlIChpbml0aWFsaXphdGlvbiBpbiBwcm9ncmVzcylgXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucGVyc29uYUltcG9ydGVyLmltcG9ydFBlcnNvbmEoc291cmNlLCB0aGlzLnBlcnNvbmFzLCBvdmVyd3JpdGUpO1xuICAgICAgXG4gICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgLy8gUmVsb2FkIHBlcnNvbmFzIHRvIGluY2x1ZGUgdGhlIG5ldyBvbmVcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkUGVyc29uYXMoKTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pyFICR7cmVzdWx0Lm1lc3NhZ2V9XFxuXFxuUGVyc29uYSBcIiR7cmVzdWx0LnBlcnNvbmE/Lm1ldGFkYXRhLm5hbWV9XCIgaXMgbm93IGF2YWlsYWJsZS5cXG5Ub3RhbCBwZXJzb25hczogJHt0aGlzLnBlcnNvbmFzLnNpemV9YFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAke3Jlc3VsdC5tZXNzYWdlfWBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBJbXBvcnQgZmFpbGVkOiAke1NlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKS5tZXNzYWdlfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cblxuICAvKipcbiAgICogUG9ydGZvbGlvIG1hbmFnZW1lbnQgbWV0aG9kc1xuICAgKi9cblxuICAvKipcbiAgICogQ2hlY2sgcG9ydGZvbGlvIHN0YXR1cyBpbmNsdWRpbmcgcmVwb3NpdG9yeSBleGlzdGVuY2UgYW5kIHN5bmMgaW5mb3JtYXRpb25cbiAgICovXG4gIGFzeW5jIHBvcnRmb2xpb1N0YXR1cyh1c2VybmFtZT86IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSB1c2VybmFtZSBwYXJhbWV0ZXIgaWYgcHJvdmlkZWRcbiAgICAgIGlmICh1c2VybmFtZSAmJiB0eXBlb2YgdXNlcm5hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFsaWRhdGVVc2VybmFtZSh1c2VybmFtZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgSW52YWxpZCB1c2VybmFtZTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdWYWxpZGF0aW9uIGZhaWxlZCd9YFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEdldCBjdXJyZW50IHVzZXIgaWYgdXNlcm5hbWUgbm90IHByb3ZpZGVkXG4gICAgICBsZXQgdGFyZ2V0VXNlcm5hbWUgPSB1c2VybmFtZTtcbiAgICAgIGlmICghdGFyZ2V0VXNlcm5hbWUpIHtcbiAgICAgICAgY29uc3QgYXV0aFN0YXR1cyA9IGF3YWl0IHRoaXMuZ2l0aHViQXV0aE1hbmFnZXIuZ2V0QXV0aFN0YXR1cygpO1xuICAgICAgICBpZiAoIWF1dGhTdGF0dXMuaXNBdXRoZW50aWNhdGVkIHx8ICFhdXRoU3RhdHVzLnVzZXJuYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgKipHaXRIdWIgQXV0aGVudGljYXRpb24gUmVxdWlyZWQqKlxcblxcbmAgK1xuICAgICAgICAgICAgYPCflJAgKipRdWljayBTZXR1cCoqOlxcbmAgK1xuICAgICAgICAgICAgYDEuIFJ1bjogXFxgc2V0dXBfZ2l0aHViX2F1dGhcXGAgdG8gYXV0aGVudGljYXRlXFxuYCArXG4gICAgICAgICAgICBgMi4gT3IgdXNlOiBcXGBnaCBhdXRoIGxvZ2luIC0td2ViXFxgIGlmIHlvdSBoYXZlIEdpdEh1YiBDTElcXG5cXG5gICtcbiAgICAgICAgICAgIGDwn5OdICoqV2hhdCB0aGlzIGVuYWJsZXMqKjpcXG5gICtcbiAgICAgICAgICAgIGDigKIgVXBsb2FkIGVsZW1lbnRzIHRvIHlvdXIgR2l0SHViIHBvcnRmb2xpb1xcbmAgK1xuICAgICAgICAgICAgYOKAoiBTeW5jIHlvdXIgbG9jYWwgcG9ydGZvbGlvIHdpdGggR2l0SHViXFxuYCArXG4gICAgICAgICAgICBg4oCiIFNoYXJlIGVsZW1lbnRzIHdpdGggdGhlIGNvbW11bml0eVxcblxcbmAgK1xuICAgICAgICAgICAgYPCfjJAgKipOZWVkIGhlbHA/KiogVmlzaXQ6IGh0dHBzOi8vZG9jcy5hbnRocm9waWMuY29tL2VuL2RvY3MvY2xhdWRlLWNvZGUvb2F1dGgtc2V0dXBgXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0VXNlcm5hbWUgPSBhdXRoU3RhdHVzLnVzZXJuYW1lO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBwb3J0Zm9saW8gZXhpc3RzXG4gICAgICBjb25zdCB7IFBvcnRmb2xpb1JlcG9NYW5hZ2VyIH0gPSBhd2FpdCBpbXBvcnQoJy4vcG9ydGZvbGlvL1BvcnRmb2xpb1JlcG9NYW5hZ2VyLmpzJyk7XG4gICAgICBjb25zdCB7IGdldFBvcnRmb2xpb1JlcG9zaXRvcnlOYW1lIH0gPSBhd2FpdCBpbXBvcnQoJy4vY29uZmlnL3BvcnRmb2xpb0NvbmZpZy5qcycpO1xuICAgICAgY29uc3QgcG9ydGZvbGlvTWFuYWdlciA9IG5ldyBQb3J0Zm9saW9SZXBvTWFuYWdlcihnZXRQb3J0Zm9saW9SZXBvc2l0b3J5TmFtZSgpKTtcbiAgICAgIGNvbnN0IHBvcnRmb2xpb0V4aXN0cyA9IGF3YWl0IHBvcnRmb2xpb01hbmFnZXIuY2hlY2tQb3J0Zm9saW9FeGlzdHModGFyZ2V0VXNlcm5hbWUpO1xuXG4gICAgICBsZXQgc3RhdHVzVGV4dCA9IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCfk4ogKipQb3J0Zm9saW8gU3RhdHVzIGZvciAke3RhcmdldFVzZXJuYW1lfSoqXFxuXFxuYDtcblxuICAgICAgaWYgKHBvcnRmb2xpb0V4aXN0cykge1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGDinIUgKipSZXBvc2l0b3J5Kio6ICR7cG9ydGZvbGlvTWFuYWdlci5nZXRSZXBvc2l0b3J5TmFtZSgpfSBleGlzdHNcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGDwn5SXICoqVVJMKio6IGh0dHBzOi8vZ2l0aHViLmNvbS8ke3RhcmdldFVzZXJuYW1lfS8ke3BvcnRmb2xpb01hbmFnZXIuZ2V0UmVwb3NpdG9yeU5hbWUoKX1cXG5cXG5gO1xuICAgICAgICBcbiAgICAgICAgLy8gR2V0IGxvY2FsIGVsZW1lbnRzIGNvdW50XG4gICAgICAgIGNvbnN0IGxvY2FsUG9ydGZvbGlvTWFuYWdlciA9IFBvcnRmb2xpb01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgICAgY29uc3QgcGVyc29uYXNQYXRoID0gbG9jYWxQb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuUEVSU09OQSk7XG4gICAgICAgIGNvbnN0IHNraWxsc1BhdGggPSBsb2NhbFBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihFbGVtZW50VHlwZS5TS0lMTCk7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlc1BhdGggPSBsb2NhbFBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihFbGVtZW50VHlwZS5URU1QTEFURSk7XG4gICAgICAgIGNvbnN0IGFnZW50c1BhdGggPSBsb2NhbFBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihFbGVtZW50VHlwZS5BR0VOVCk7XG4gICAgICAgIGNvbnN0IG1lbW9yaWVzUGF0aCA9IGxvY2FsUG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKEVsZW1lbnRUeXBlLk1FTU9SWSk7XG4gICAgICAgIGNvbnN0IGVuc2VtYmxlc1BhdGggPSBsb2NhbFBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihFbGVtZW50VHlwZS5FTlNFTUJMRSk7XG5cbiAgICAgICAgY29uc3QgW3BlcnNvbmFzLCBza2lsbHMsIHRlbXBsYXRlcywgYWdlbnRzLCBtZW1vcmllcywgZW5zZW1ibGVzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICB0aGlzLmNvdW50RWxlbWVudHNJbkRpcihwZXJzb25hc1BhdGgpLFxuICAgICAgICAgIHRoaXMuY291bnRFbGVtZW50c0luRGlyKHNraWxsc1BhdGgpLFxuICAgICAgICAgIHRoaXMuY291bnRFbGVtZW50c0luRGlyKHRlbXBsYXRlc1BhdGgpLFxuICAgICAgICAgIHRoaXMuY291bnRFbGVtZW50c0luRGlyKGFnZW50c1BhdGgpLFxuICAgICAgICAgIHRoaXMuY291bnRFbGVtZW50c0luRGlyKG1lbW9yaWVzUGF0aCksXG4gICAgICAgICAgdGhpcy5jb3VudEVsZW1lbnRzSW5EaXIoZW5zZW1ibGVzUGF0aClcbiAgICAgICAgXSk7XG5cbiAgICAgICAgY29uc3QgdG90YWxFbGVtZW50cyA9IHBlcnNvbmFzICsgc2tpbGxzICsgdGVtcGxhdGVzICsgYWdlbnRzICsgbWVtb3JpZXMgKyBlbnNlbWJsZXM7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYPCfk4ggKipMb2NhbCBFbGVtZW50cyoqOlxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCAg4oCiIFBlcnNvbmFzOiAke3BlcnNvbmFzfVxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCAg4oCiIFNraWxsczogJHtza2lsbHN9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgVGVtcGxhdGVzOiAke3RlbXBsYXRlc31cXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiBBZ2VudHM6ICR7YWdlbnRzfVxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCAg4oCiIE1lbW9yaWVzOiAke21lbW9yaWVzfVxcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCAg4oCiIEVuc2VtYmxlczogJHtlbnNlbWJsZXN9XFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgKipUb3RhbCoqOiAke3RvdGFsRWxlbWVudHN9XFxuXFxuYDtcblxuICAgICAgICBzdGF0dXNUZXh0ICs9IGDwn5SEICoqU3luYyBTdGF0dXMqKjogVXNlIHN5bmNfcG9ydGZvbGlvIHRvIHVwZGF0ZSBHaXRIdWJcXG5gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBg4p2MICoqUmVwb3NpdG9yeSoqOiBObyBwb3J0Zm9saW8gZm91bmRcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGDwn5KhICoqTmV4dCBTdGVwKio6IFVzZSBpbml0X3BvcnRmb2xpbyB0byBjcmVhdGUgb25lXFxuXFxuYDtcbiAgICAgICAgXG4gICAgICAgIHN0YXR1c1RleHQgKz0gYPCfk50gKipXaGF0IHlvdSdsbCBnZXQqKjpcXG5gO1xuICAgICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiBHaXRIdWIgcmVwb3NpdG9yeSBmb3IgeW91ciBlbGVtZW50c1xcbmA7XG4gICAgICAgIHN0YXR1c1RleHQgKz0gYCAg4oCiIE9yZ2FuaXplZCBmb2xkZXIgc3RydWN0dXJlXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgUkVBRE1FIHdpdGggdXNhZ2UgaW5zdHJ1Y3Rpb25zXFxuYDtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgRWFzeSBzaGFyaW5nIGFuZCBiYWNrdXBcXG5gO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IHN0YXR1c1RleHRcbiAgICAgICAgfV1cbiAgICAgIH07XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgRmFpbGVkIHRvIGNoZWNrIHBvcnRmb2xpbyBzdGF0dXM6ICR7U2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpLm1lc3NhZ2V9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBhIG5ldyBHaXRIdWIgcG9ydGZvbGlvIHJlcG9zaXRvcnlcbiAgICovXG4gIGFzeW5jIGluaXRQb3J0Zm9saW8ob3B0aW9uczoge3JlcG9zaXRvcnlOYW1lPzogc3RyaW5nOyBwcml2YXRlPzogYm9vbGVhbjsgZGVzY3JpcHRpb24/OiBzdHJpbmd9KSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIENoZWNrIGF1dGhlbnRpY2F0aW9uXG4gICAgICBjb25zdCBhdXRoU3RhdHVzID0gYXdhaXQgdGhpcy5naXRodWJBdXRoTWFuYWdlci5nZXRBdXRoU3RhdHVzKCk7XG4gICAgICBpZiAoIWF1dGhTdGF0dXMuaXNBdXRoZW50aWNhdGVkIHx8ICFhdXRoU3RhdHVzLnVzZXJuYW1lKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqR2l0SHViIEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkKipcXG5cXG5gICtcbiAgICAgICAgICAgIGDwn5SQICoqUXVpY2sgU2V0dXAqKjpcXG5gICtcbiAgICAgICAgICAgIGAxLiBSdW46IFxcYHNldHVwX2dpdGh1Yl9hdXRoXFxgIHRvIGF1dGhlbnRpY2F0ZVxcbmAgK1xuICAgICAgICAgICAgYDIuIE9yIHVzZTogXFxgZ2ggYXV0aCBsb2dpbiAtLXdlYlxcYCBpZiB5b3UgaGF2ZSBHaXRIdWIgQ0xJXFxuXFxuYCArXG4gICAgICAgICAgICBg8J+TnSAqKldoYXQgdGhpcyBlbmFibGVzKio6XFxuYCArXG4gICAgICAgICAgICBg4oCiIFVwbG9hZCBlbGVtZW50cyB0byB5b3VyIEdpdEh1YiBwb3J0Zm9saW9cXG5gICtcbiAgICAgICAgICAgIGDigKIgU3luYyB5b3VyIGxvY2FsIHBvcnRmb2xpbyB3aXRoIEdpdEh1YlxcbmAgK1xuICAgICAgICAgICAgYOKAoiBTaGFyZSBlbGVtZW50cyB3aXRoIHRoZSBjb21tdW5pdHlcXG5cXG5gICtcbiAgICAgICAgICAgIGDwn4yQICoqTmVlZCBoZWxwPyoqIFZpc2l0OiBodHRwczovL2RvY3MuYW50aHJvcGljLmNvbS9lbi9kb2NzL2NsYXVkZS1jb2RlL29hdXRoLXNldHVwYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVzZXJuYW1lID0gYXV0aFN0YXR1cy51c2VybmFtZTtcblxuICAgICAgLy8gQ2hlY2sgaWYgcG9ydGZvbGlvIGFscmVhZHkgZXhpc3RzXG4gICAgICBjb25zdCB7IFBvcnRmb2xpb1JlcG9NYW5hZ2VyIH0gPSBhd2FpdCBpbXBvcnQoJy4vcG9ydGZvbGlvL1BvcnRmb2xpb1JlcG9NYW5hZ2VyLmpzJyk7XG4gICAgICBjb25zdCB7IGdldFBvcnRmb2xpb1JlcG9zaXRvcnlOYW1lIH0gPSBhd2FpdCBpbXBvcnQoJy4vY29uZmlnL3BvcnRmb2xpb0NvbmZpZy5qcycpO1xuICAgICAgY29uc3QgcG9ydGZvbGlvTWFuYWdlciA9IG5ldyBQb3J0Zm9saW9SZXBvTWFuYWdlcihnZXRQb3J0Zm9saW9SZXBvc2l0b3J5TmFtZSgpKTtcbiAgICAgIGNvbnN0IHBvcnRmb2xpb0V4aXN0cyA9IGF3YWl0IHBvcnRmb2xpb01hbmFnZXIuY2hlY2tQb3J0Zm9saW9FeGlzdHModXNlcm5hbWUpO1xuXG4gICAgICBpZiAocG9ydGZvbGlvRXhpc3RzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94pyFIFBvcnRmb2xpbyBhbHJlYWR5IGV4aXN0cyBhdCBodHRwczovL2dpdGh1Yi5jb20vJHt1c2VybmFtZX0vJHtwb3J0Zm9saW9NYW5hZ2VyLmdldFJlcG9zaXRvcnlOYW1lKCl9XFxuXFxuVXNlIHBvcnRmb2xpb19zdGF0dXMgdG8gc2VlIGRldGFpbHMgb3Igc3luY19wb3J0Zm9saW8gdG8gdXBkYXRlIGl0LmBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgcG9ydGZvbGlvIHdpdGggZXhwbGljaXQgY29uc2VudFxuICAgICAgY29uc3QgcG9ydGZvbGlvVXJsID0gYXdhaXQgcG9ydGZvbGlvTWFuYWdlci5jcmVhdGVQb3J0Zm9saW8odXNlcm5hbWUsIHRydWUpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCfjokgKipQb3J0Zm9saW8gQ3JlYXRlZCBTdWNjZXNzZnVsbHkhKipcXG5cXG5gICtcbiAgICAgICAgICAgICAgICBg4pyFICoqUmVwb3NpdG9yeSoqOiBodHRwczovL2dpdGh1Yi5jb20vJHt1c2VybmFtZX0vJHtwb3J0Zm9saW9NYW5hZ2VyLmdldFJlcG9zaXRvcnlOYW1lKCl9XFxuYCArXG4gICAgICAgICAgICAgICAgYPCfk4EgKipTdHJ1Y3R1cmUqKjogT3JnYW5pemVkIGZvbGRlcnMgZm9yIGFsbCBlbGVtZW50IHR5cGVzXFxuYCArXG4gICAgICAgICAgICAgICAgYPCfk50gKipSRUFETUUqKjogVXNhZ2UgaW5zdHJ1Y3Rpb25zIGluY2x1ZGVkXFxuYCArXG4gICAgICAgICAgICAgICAgYPCflIQgKipOZXh0IFN0ZXAqKjogVXNlIHN5bmNfcG9ydGZvbGlvIHRvIHVwbG9hZCB5b3VyIGVsZW1lbnRzXFxuXFxuYCArXG4gICAgICAgICAgICAgICAgYFlvdXIgcG9ydGZvbGlvIGlzIHJlYWR5IGZvciBzaGFyaW5nIHlvdXIgRG9sbGhvdXNlTUNQIGNyZWF0aW9ucyFgXG4gICAgICAgIH1dXG4gICAgICB9O1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEZhaWxlZCB0byBpbml0aWFsaXplIHBvcnRmb2xpbzogJHtTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcikubWVzc2FnZX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgcG9ydGZvbGlvIHNldHRpbmdzXG4gICAqL1xuICBhc3luYyBwb3J0Zm9saW9Db25maWcob3B0aW9uczoge2F1dG9TeW5jPzogYm9vbGVhbjsgZGVmYXVsdFZpc2liaWxpdHk/OiBzdHJpbmc7IGF1dG9TdWJtaXQ/OiBib29sZWFuOyByZXBvc2l0b3J5TmFtZT86IHN0cmluZ30pIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnTWFuYWdlciA9IENvbmZpZ01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgIGF3YWl0IGNvbmZpZ01hbmFnZXIuaW5pdGlhbGl6ZSgpO1xuXG4gICAgICBsZXQgc3RhdHVzVGV4dCA9IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKame+4jyAqKlBvcnRmb2xpbyBDb25maWd1cmF0aW9uKipcXG5cXG5gO1xuXG4gICAgICAvLyBVcGRhdGUgc2V0dGluZ3MgaWYgcHJvdmlkZWRcbiAgICAgIGlmIChvcHRpb25zLmF1dG9TeW5jICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gVGhpcyB3b3VsZCBiZSBpbXBsZW1lbnRlZCB3aGVuIGF1dG8tc3luYyBmZWF0dXJlIGlzIGFkZGVkXG4gICAgICAgIHN0YXR1c1RleHQgKz0gYPCflIQgQXV0by1zeW5jOiAke29wdGlvbnMuYXV0b1N5bmMgPyAnRW5hYmxlZCcgOiAnRGlzYWJsZWQnfSAoQ29taW5nIHNvb24pXFxuYDtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuZGVmYXVsdFZpc2liaWxpdHkpIHtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBg8J+UkiBEZWZhdWx0IHZpc2liaWxpdHk6ICR7b3B0aW9ucy5kZWZhdWx0VmlzaWJpbGl0eX1cXG5gO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5hdXRvU3VibWl0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gTm90ZTogQXV0by1zdWJtaXQgY29uZmlndXJhdGlvbiB3b3VsZCBiZSBpbXBsZW1lbnRlZCBoZXJlXG4gICAgICAgIC8vIEZvciBub3csIHdlJ2xsIGp1c3Qgc2hvdyB0aGUgc3RhdHVzXG4gICAgICAgIHN0YXR1c1RleHQgKz0gYPCfk6QgQXV0by1zdWJtaXQgdG8gY29sbGVjdGlvbjogJHtvcHRpb25zLmF1dG9TdWJtaXQgPyAnRW5hYmxlZCcgOiAnRGlzYWJsZWQnfSAoQ29taW5nIHNvb24pXFxuYDtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMucmVwb3NpdG9yeU5hbWUpIHtcbiAgICAgICAgc3RhdHVzVGV4dCArPSBg8J+TgSBSZXBvc2l0b3J5IG5hbWU6ICR7b3B0aW9ucy5yZXBvc2l0b3J5TmFtZX0gKEN1c3RvbSBuYW1lcyBjb21pbmcgc29vbilcXG5gO1xuICAgICAgfVxuXG4gICAgICAvLyBTaG93IGN1cnJlbnQgY29uZmlndXJhdGlvblxuICAgICAgc3RhdHVzVGV4dCArPSBgXFxu8J+TiyAqKkN1cnJlbnQgU2V0dGluZ3MqKjpcXG5gO1xuICAgICAgc3RhdHVzVGV4dCArPSBgICDigKIgQXV0by1zdWJtaXQ6IERpc2FibGVkIChDb21pbmcgc29vbilcXG5gO1xuICAgICAgY29uc3QgeyBnZXRQb3J0Zm9saW9SZXBvc2l0b3J5TmFtZSB9ID0gYXdhaXQgaW1wb3J0KCcuL2NvbmZpZy9wb3J0Zm9saW9Db25maWcuanMnKTtcbiAgICAgIHN0YXR1c1RleHQgKz0gYCAg4oCiIFJlcG9zaXRvcnkgbmFtZTogJHtnZXRQb3J0Zm9saW9SZXBvc2l0b3J5TmFtZSgpfVxcbmA7XG4gICAgICBzdGF0dXNUZXh0ICs9IGAgIOKAoiBEZWZhdWx0IHZpc2liaWxpdHk6IHB1YmxpY1xcbmA7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogc3RhdHVzVGV4dFxuICAgICAgICB9XVxuICAgICAgfTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBGYWlsZWQgdG8gY29uZmlndXJlIHBvcnRmb2xpbzogJHtTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcikubWVzc2FnZX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jIHBvcnRmb2xpbyB3aXRoIEdpdEh1YlxuICAgKi9cbiAgYXN5bmMgc3luY1BvcnRmb2xpbyhvcHRpb25zOiB7XG4gICAgZGlyZWN0aW9uOiBzdHJpbmc7IFxuICAgIG1vZGU/OiBzdHJpbmc7XG4gICAgZm9yY2U6IGJvb2xlYW47IFxuICAgIGRyeVJ1bjogYm9vbGVhbjtcbiAgICBjb25maXJtRGVsZXRpb25zPzogYm9vbGVhbjtcbiAgfSkge1xuICAgIHRyeSB7XG4gICAgICAvLyBDaGVjayBhdXRoZW50aWNhdGlvblxuICAgICAgY29uc3QgYXV0aFN0YXR1cyA9IGF3YWl0IHRoaXMuZ2l0aHViQXV0aE1hbmFnZXIuZ2V0QXV0aFN0YXR1cygpO1xuICAgICAgaWYgKCFhdXRoU3RhdHVzLmlzQXV0aGVudGljYXRlZCB8fCAhYXV0aFN0YXR1cy51c2VybmFtZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCAqKkdpdEh1YiBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZCoqXFxuXFxuYCArXG4gICAgICAgICAgICBg8J+UkCAqKlF1aWNrIFNldHVwKio6XFxuYCArXG4gICAgICAgICAgICBgMS4gUnVuOiBcXGBzZXR1cF9naXRodWJfYXV0aFxcYCB0byBhdXRoZW50aWNhdGVcXG5gICtcbiAgICAgICAgICAgIGAyLiBPciB1c2U6IFxcYGdoIGF1dGggbG9naW4gLS13ZWJcXGAgaWYgeW91IGhhdmUgR2l0SHViIENMSVxcblxcbmAgK1xuICAgICAgICAgICAgYPCfk50gKipXaGF0IHRoaXMgZW5hYmxlcyoqOlxcbmAgK1xuICAgICAgICAgICAgYOKAoiBVcGxvYWQgZWxlbWVudHMgdG8geW91ciBHaXRIdWIgcG9ydGZvbGlvXFxuYCArXG4gICAgICAgICAgICBg4oCiIFN5bmMgeW91ciBsb2NhbCBwb3J0Zm9saW8gd2l0aCBHaXRIdWJcXG5gICtcbiAgICAgICAgICAgIGDigKIgU2hhcmUgZWxlbWVudHMgd2l0aCB0aGUgY29tbXVuaXR5XFxuXFxuYCArXG4gICAgICAgICAgICBg8J+MkCAqKk5lZWQgaGVscD8qKiBWaXNpdDogaHR0cHM6Ly9kb2NzLmFudGhyb3BpYy5jb20vZW4vZG9jcy9jbGF1ZGUtY29kZS9vYXV0aC1zZXR1cGBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCB1c2VybmFtZSA9IGF1dGhTdGF0dXMudXNlcm5hbWU7XG5cbiAgICAgIC8vIENoZWNrIGlmIHBvcnRmb2xpbyBleGlzdHNcbiAgICAgIGNvbnN0IHsgUG9ydGZvbGlvUmVwb01hbmFnZXIgfSA9IGF3YWl0IGltcG9ydCgnLi9wb3J0Zm9saW8vUG9ydGZvbGlvUmVwb01hbmFnZXIuanMnKTtcbiAgICAgIGNvbnN0IHsgZ2V0UG9ydGZvbGlvUmVwb3NpdG9yeU5hbWUgfSA9IGF3YWl0IGltcG9ydCgnLi9jb25maWcvcG9ydGZvbGlvQ29uZmlnLmpzJyk7XG4gICAgICBjb25zdCBwb3J0Zm9saW9NYW5hZ2VyID0gbmV3IFBvcnRmb2xpb1JlcG9NYW5hZ2VyKGdldFBvcnRmb2xpb1JlcG9zaXRvcnlOYW1lKCkpO1xuICAgICAgXG4gICAgICAvLyBDUklUSUNBTCBGSVg6IFNldCBHaXRIdWIgdG9rZW4gbGlrZSBzdWJtaXRfY29sbGVjdGlvbl9jb250ZW50IGRvZXNcbiAgICAgIC8vIFdpdGhvdXQgdGhpcywgY2hlY2tQb3J0Zm9saW9FeGlzdHMgZmFpbHMgYmVjYXVzZSBpdCBjYW4ndCBhdXRoZW50aWNhdGUgdG8gR2l0SHViXG4gICAgICBjb25zdCB7IFRva2VuTWFuYWdlciB9ID0gYXdhaXQgaW1wb3J0KCcuL3NlY3VyaXR5L3Rva2VuTWFuYWdlci5qcycpO1xuICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCBUb2tlbk1hbmFnZXIuZ2V0R2l0SHViVG9rZW5Bc3luYygpO1xuICAgICAgaWYgKCF0b2tlbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBHaXRIdWIgYXV0aGVudGljYXRpb24gcmVxdWlyZWQuIFBsZWFzZSBhdXRoZW50aWNhdGUgZmlyc3QgdXNpbmcgc2V0dXBfZ2l0aHViX2F1dGguYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBwb3J0Zm9saW9NYW5hZ2VyLnNldFRva2VuKHRva2VuKTtcbiAgICAgIFxuICAgICAgY29uc3QgcG9ydGZvbGlvRXhpc3RzID0gYXdhaXQgcG9ydGZvbGlvTWFuYWdlci5jaGVja1BvcnRmb2xpb0V4aXN0cyh1c2VybmFtZSk7XG5cbiAgICAgIGlmICghcG9ydGZvbGlvRXhpc3RzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MICoqTm8gUG9ydGZvbGlvIFJlcG9zaXRvcnkgRm91bmQqKlxcblxcbmAgK1xuICAgICAgICAgICAgICAgICAgYPCfj6AgKipRdWljayBTZXR1cCoqOlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYDEuIFJ1bjogXFxgaW5pdF9wb3J0Zm9saW9cXGAgdG8gY3JlYXRlIHlvdXIgR2l0SHViIHBvcnRmb2xpb1xcbmAgK1xuICAgICAgICAgICAgICAgICAgYDIuIFRoaXMgY3JlYXRlczogaHR0cHM6Ly9naXRodWIuY29tL1t1c2VybmFtZV0vJHtwb3J0Zm9saW9NYW5hZ2VyLmdldFJlcG9zaXRvcnlOYW1lKCl9XFxuXFxuYCArXG4gICAgICAgICAgICAgICAgICBg8J+TnSAqKldoYXQgeW91J2xsIGdldCoqOlxcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKAoiBQdWJsaWMgcmVwb3NpdG9yeSB0byBzaG93Y2FzZSB5b3VyIEFJIGVsZW1lbnRzXFxuYCArXG4gICAgICAgICAgICAgICAgICBg4oCiIE9yZ2FuaXplZCBzdHJ1Y3R1cmUgZm9yIHBlcnNvbmFzLCBza2lsbHMsIHRlbXBsYXRlcywgYW5kIGFnZW50c1xcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKAoiBBdXRvbWF0aWMgc3luY2luZyBvZiB5b3VyIGxvY2FsIHBvcnRmb2xpb1xcbmAgK1xuICAgICAgICAgICAgICAgICAgYOKAoiBDb21tdW5pdHkgc2hhcmluZyBjYXBhYmlsaXRpZXNcXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgIGDwn5qAICoqQWZ0ZXIgc2V0dXAqKjogVXNlIFxcYHN5bmNfcG9ydGZvbGlvXFxgIHRvIHVwbG9hZCB5b3VyIGNvbnRlbnQhYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmRyeVJ1bikge1xuICAgICAgICAvLyBTaG93IHdoYXQgd291bGQgYmUgc3luY2VkXG4gICAgICAgIGNvbnN0IGxvY2FsUG9ydGZvbGlvTWFuYWdlciA9IFBvcnRmb2xpb01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGVsZW1lbnRUeXBlQ291bnRzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+ID0ge307XG4gICAgICAgIGNvbnN0IGVsZW1lbnRUeXBlRXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBcbiAgICAgICAgLy8gR2V0IGVsZW1lbnQgY291bnRzIHdpdGggYmV0dGVyIGVycm9yIGhhbmRsaW5nXG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudFR5cGUgb2YgWydwZXJzb25hcycsICdza2lsbHMnLCAndGVtcGxhdGVzJywgJ2FnZW50cyddKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gYXdhaXQgdGhpcy5nZXRFbGVtZW50c0xpc3QoZWxlbWVudFR5cGUpO1xuICAgICAgICAgICAgZWxlbWVudFR5cGVDb3VudHNbZWxlbWVudFR5cGVdID0gZWxlbWVudHMubGVuZ3RoO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgIGVsZW1lbnRUeXBlQ291bnRzW2VsZW1lbnRUeXBlXSA9ICdFUlJPUic7XG4gICAgICAgICAgICBlbGVtZW50VHlwZUVycm9ycy5wdXNoKGAke2VsZW1lbnRUeXBlfTogJHtlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJ31gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZHJ5UnVuVGV4dCA9IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpffCflI0gKipEcnkgUnVuIC0gUG9ydGZvbGlvIFN5bmMgUHJldmlldyoqXFxuXFxuYDtcbiAgICAgICAgZHJ5UnVuVGV4dCArPSBg8J+TpCAqKkVsZW1lbnRzIHRvIHN5bmMqKiAoJHtvcHRpb25zLmRpcmVjdGlvbn0pOlxcbmA7XG4gICAgICAgIGRyeVJ1blRleHQgKz0gYCAg4oCiIFBlcnNvbmFzOiAke2VsZW1lbnRUeXBlQ291bnRzLnBlcnNvbmFzfVxcbmA7XG4gICAgICAgIGRyeVJ1blRleHQgKz0gYCAg4oCiIFNraWxsczogJHtlbGVtZW50VHlwZUNvdW50cy5za2lsbHN9XFxuYDtcbiAgICAgICAgZHJ5UnVuVGV4dCArPSBgICDigKIgVGVtcGxhdGVzOiAke2VsZW1lbnRUeXBlQ291bnRzLnRlbXBsYXRlc31cXG5gO1xuICAgICAgICBkcnlSdW5UZXh0ICs9IGAgIOKAoiBBZ2VudHM6ICR7ZWxlbWVudFR5cGVDb3VudHMuYWdlbnRzfVxcblxcbmA7XG4gICAgICAgIFxuICAgICAgICAvLyBJbmNsdWRlIGFueSBlcnJvcnMgZW5jb3VudGVyZWQgZHVyaW5nIGRyeSBydW5cbiAgICAgICAgaWYgKGVsZW1lbnRUeXBlRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBkcnlSdW5UZXh0ICs9IGDimqDvuI8gKipFcnJvcnMgZm91bmQgZHVyaW5nIHByZXZpZXc6KipcXG5gO1xuICAgICAgICAgIGZvciAoY29uc3QgZXJyb3Igb2YgZWxlbWVudFR5cGVFcnJvcnMpIHtcbiAgICAgICAgICAgIGRyeVJ1blRleHQgKz0gYCAg4oCiICR7ZXJyb3J9XFxuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZHJ5UnVuVGV4dCArPSBgXFxuYDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgZHJ5UnVuVGV4dCArPSBg8J+OryAqKlRhcmdldCoqOiBodHRwczovL2dpdGh1Yi5jb20vJHt1c2VybmFtZX0vJHtwb3J0Zm9saW9NYW5hZ2VyLmdldFJlcG9zaXRvcnlOYW1lKCl9XFxuYDtcbiAgICAgICAgZHJ5UnVuVGV4dCArPSBg4pqg77iPICAqKk5vdGUqKjogVGhpcyBpcyBhIHByZXZpZXcuIFJlbW92ZSBkcnlfcnVuPXRydWUgdG8gcGVyZm9ybSBhY3R1YWwgc3luYy5gO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogZHJ5UnVuVGV4dFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEZvciBub3csIGltcGxlbWVudCBiYXNpYyBwdXNoIGZ1bmN0aW9uYWxpdHlcbiAgICAgIGlmIChvcHRpb25zLmRpcmVjdGlvbiA9PT0gJ3B1c2gnIHx8IG9wdGlvbnMuZGlyZWN0aW9uID09PSAnYm90aCcpIHtcbiAgICAgICAgbGV0IHN5bmNDb3VudCA9IDA7XG4gICAgICAgIGxldCB0b3RhbEVsZW1lbnRzID0gMDtcbiAgICAgICAgbGV0IHN5bmNUZXh0ID0gYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+UhCAqKlN5bmNpbmcgUG9ydGZvbGlvLi4uKipcXG5cXG5gO1xuXG4gICAgICAgIC8vIFVYIElNUFJPVkVNRU5UOiBDYWxjdWxhdGUgdG90YWwgZWxlbWVudHMgZm9yIHByb2dyZXNzIHRyYWNraW5nXG4gICAgICAgIGNvbnN0IGVsZW1lbnRUeXBlcyA9IFsncGVyc29uYXMnLCAnc2tpbGxzJywgJ3RlbXBsYXRlcycsICdhZ2VudHMnXSBhcyBjb25zdDtcbiAgICAgICAgY29uc3QgZWxlbWVudENvdW50czogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuICAgICAgICBjb25zdCBmYWlsZWRFbGVtZW50czogQXJyYXk8e3R5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nLCBlcnJvcjogc3RyaW5nfT4gPSBbXTtcbiAgICAgICAgXG4gICAgICAgIC8vIFByZS1jYWxjdWxhdGUgdG90YWxzIGZvciBiZXR0ZXIgcHJvZ3Jlc3MgaW5kaWNhdG9yc1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGDwn5OKICoqQ2FsY3VsYXRpbmcgc3luYyBzY29wZS4uLioqXFxuYDtcbiAgICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnRUeXBlIG9mIGVsZW1lbnRUeXBlcykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBhd2FpdCB0aGlzLmdldEVsZW1lbnRzTGlzdChlbGVtZW50VHlwZSk7XG4gICAgICAgICAgICAgIGVsZW1lbnRDb3VudHNbZWxlbWVudFR5cGVdID0gZWxlbWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgICB0b3RhbEVsZW1lbnRzICs9IGVsZW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgICAgZWxlbWVudENvdW50c1tlbGVtZW50VHlwZV0gPSAwO1xuICAgICAgICAgICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIGNvdW50ICR7ZWxlbWVudFR5cGV9YCwgeyBlcnJvcjogZXJyb3IubWVzc2FnZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgc3luY1RleHQgKz0gYFxcbvCfjq8gKipSZWFkeSB0byBzeW5jICR7dG90YWxFbGVtZW50c30gZWxlbWVudHM6KipcXG5gO1xuICAgICAgICAgIGZvciAoY29uc3QgW3R5cGUsIGNvdW50XSBvZiBPYmplY3QuZW50cmllcyhlbGVtZW50Q291bnRzKSkge1xuICAgICAgICAgICAgY29uc3QgaWNvbiA9IGNvdW50ID4gMCA/ICfinIUnIDogJ+Kaqic7XG4gICAgICAgICAgICBzeW5jVGV4dCArPSBgICAke2ljb259ICR7dHlwZX06ICR7Y291bnR9IGVsZW1lbnRzXFxuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3luY1RleHQgKz0gYFxcbvCfmoAgKipTdGFydGluZyBzeW5jIHByb2Nlc3MuLi4qKlxcblxcbmA7XG4gICAgICAgICAgXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICBzeW5jVGV4dCArPSBgXFxu4pqg77iPICoqV2FybmluZyoqOiBDb3VsZCBub3QgY2FsY3VsYXRlIHN5bmMgc2NvcGU6ICR7ZXJyb3IubWVzc2FnZX1cXG5cXG5gO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBVWCBJTVBST1ZFTUVOVDogUHJvY2VzcyBlYWNoIGVsZW1lbnQgdHlwZSB3aXRoIHByb2dyZXNzIHRyYWNraW5nXG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudFR5cGUgb2YgZWxlbWVudFR5cGVzKSB7XG4gICAgICAgICAgY29uc3QgdHlwZUNvdW50ID0gZWxlbWVudENvdW50c1tlbGVtZW50VHlwZV0gfHwgMDtcbiAgICAgICAgICBpZiAodHlwZUNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICBzeW5jVGV4dCArPSBg4o+pICoqU2tpcHBpbmcgJHtlbGVtZW50VHlwZX0qKiAobm8gZWxlbWVudHMgZm91bmQpXFxuYDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBzeW5jVGV4dCArPSBg8J+TgSAqKlByb2Nlc3NpbmcgJHtlbGVtZW50VHlwZX0qKiAoJHt0eXBlQ291bnR9IGVsZW1lbnRzKTpcXG5gO1xuICAgICAgICAgIGxldCB0eXBlU3VjY2Vzc0NvdW50ID0gMDtcbiAgICAgICAgICBcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBhd2FpdCB0aGlzLmdldEVsZW1lbnRzTGlzdChlbGVtZW50VHlwZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgY29uc3QgZWxlbWVudE5hbWUgPSBlbGVtZW50c1tpXTtcbiAgICAgICAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBgWyR7aSArIDF9LyR7ZWxlbWVudHMubGVuZ3RofV1gO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBVWCBJTVBST1ZFTUVOVDogU2hvdyBpbmRpdmlkdWFsIGVsZW1lbnQgcHJvZ3Jlc3NcbiAgICAgICAgICAgICAgICBzeW5jVGV4dCArPSBgICAke3Byb2dyZXNzfSDwn5SEIFN5bmNpbmcgXCIke2VsZW1lbnROYW1lfVwiLi4uYDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBMb2FkIGVsZW1lbnQgYW5kIHNhdmUgdG8gcG9ydGZvbGlvXG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGF3YWl0IHRoaXMubG9hZEVsZW1lbnRCeVR5cGUoZWxlbWVudE5hbWUsIGVsZW1lbnRUeXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgYXdhaXQgcG9ydGZvbGlvTWFuYWdlci5zYXZlRWxlbWVudChlbGVtZW50LCB0cnVlKTsgLy8gRXhwbGljaXQgY29uc2VudFxuICAgICAgICAgICAgICAgICAgc3luY0NvdW50Kys7XG4gICAgICAgICAgICAgICAgICB0eXBlU3VjY2Vzc0NvdW50Kys7XG4gICAgICAgICAgICAgICAgICBzeW5jVGV4dCArPSBgIOKchVxcbmA7XG4gICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoYFN1Y2Nlc3NmdWxseSBzeW5jZWQgJHtlbGVtZW50VHlwZX0vJHtlbGVtZW50TmFtZX1gKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgc3luY1RleHQgKz0gYCDinYwgKG51bGwgZWxlbWVudClcXG5gO1xuICAgICAgICAgICAgICAgICAgZmFpbGVkRWxlbWVudHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGVsZW1lbnRUeXBlLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBlbGVtZW50TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6ICdFbGVtZW50IGxvYWRlZCBhcyBudWxsL3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBjYXRjaCAoZWxlbWVudEVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGVycm9yIGNvZGUgaWYgcHJlc2VudFxuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGVsZW1lbnRFcnJvci5jb2RlIHx8IChlbGVtZW50RXJyb3IubWVzc2FnZT8ubWF0Y2goL1xcWyhbQS1aX10rX1xcZCspXFxdLyk/LlsxXSkgfHwgJyc7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZWxlbWVudEVycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3IgZHVyaW5nIGVsZW1lbnQgc3luYyc7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gQ2xlYW4gdXAgZXJyb3IgbWVzc2FnZSBmb3IgZGlzcGxheSAocmVtb3ZlIGNvZGUgaWYgYWxyZWFkeSBleHRyYWN0ZWQpXG4gICAgICAgICAgICAgICAgY29uc3QgZGlzcGxheU1lc3NhZ2UgPSBlcnJvckNvZGUgXG4gICAgICAgICAgICAgICAgICA/IGVycm9yTWVzc2FnZS5yZXBsYWNlKC9cXFtbQS1aX10rX1xcZCtcXF1cXHMqLywgJycpXG4gICAgICAgICAgICAgICAgICA6IGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBTaG93IGVycm9yIGNvZGUgaW4gb3V0cHV0IGZvciBiZXR0ZXIgZGlhZ25vc3RpY3NcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvck91dHB1dCA9IGVycm9yQ29kZSBcbiAgICAgICAgICAgICAgICAgID8gYCR7ZXJyb3JDb2RlfTogJHtkaXNwbGF5TWVzc2FnZX1gXG4gICAgICAgICAgICAgICAgICA6IGRpc3BsYXlNZXNzYWdlO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHN5bmNUZXh0ICs9IGAg4p2MICgke2Vycm9yT3V0cHV0fSlcXG5gO1xuICAgICAgICAgICAgICAgIGZhaWxlZEVsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgdHlwZTogZWxlbWVudFR5cGUsXG4gICAgICAgICAgICAgICAgICBuYW1lOiBlbGVtZW50TmFtZSxcbiAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvck91dHB1dFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gc3luYyAke2VsZW1lbnRUeXBlfS8ke2VsZW1lbnROYW1lfWAsIHsgXG4gICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3JNZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlLFxuICAgICAgICAgICAgICAgICAgZWxlbWVudE5hbWUsXG4gICAgICAgICAgICAgICAgICBlbGVtZW50VHlwZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFVYIElNUFJPVkVNRU5UOiBTaG93IGNvbXBsZXRpb24gc3VtbWFyeSBmb3IgZWFjaCB0eXBlXG4gICAgICAgICAgICBjb25zdCBzdWNjZXNzUmF0ZSA9IGVsZW1lbnRzLmxlbmd0aCA+IDAgPyBNYXRoLnJvdW5kKCh0eXBlU3VjY2Vzc0NvdW50IC8gZWxlbWVudHMubGVuZ3RoKSAqIDEwMCkgOiAwO1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzSWNvbiA9IHN1Y2Nlc3NSYXRlID09PSAxMDAgPyAn8J+OiScgOiBzdWNjZXNzUmF0ZSA+IDUwID8gJ+KaoO+4jycgOiAn4p2MJztcbiAgICAgICAgICAgIHN5bmNUZXh0ICs9IGAgICR7c3RhdHVzSWNvbn0gKioke2VsZW1lbnRUeXBlfSBjb21wbGV0ZSoqOiAke3R5cGVTdWNjZXNzQ291bnR9LyR7ZWxlbWVudHMubGVuZ3RofSBzeW5jZWQgKCR7c3VjY2Vzc1JhdGV9JSlcXG5cXG5gO1xuICAgICAgICAgIH0gY2F0Y2ggKGxpc3RFcnJvcjogYW55KSB7XG4gICAgICAgICAgICAvLyBVWCBJTVBST1ZFTUVOVDogQmV0dGVyIGVycm9yIHJlcG9ydGluZyBmb3IgbGlzdCBmYWlsdXJlc1xuICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gbGlzdEVycm9yLm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBnZXQgZWxlbWVudHMgbGlzdCc7XG4gICAgICAgICAgICBzeW5jVGV4dCArPSBgICDinYwgKipGYWlsZWQgdG8gbGlzdCAke2VsZW1lbnRUeXBlfSoqOiAke2Vycm9yTWVzc2FnZX1cXG5cXG5gO1xuICAgICAgICAgICAgZmFpbGVkRWxlbWVudHMucHVzaCh7XG4gICAgICAgICAgICAgIHR5cGU6IGVsZW1lbnRUeXBlLFxuICAgICAgICAgICAgICBuYW1lOiAnQUxMJyxcbiAgICAgICAgICAgICAgZXJyb3I6IGBGYWlsZWQgdG8gbGlzdCAke2VsZW1lbnRUeXBlfTogJHtlcnJvck1lc3NhZ2V9YFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIGdldCAke2VsZW1lbnRUeXBlfSBsaXN0YCwgeyBlcnJvcjogZXJyb3JNZXNzYWdlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVYIElNUFJPVkVNRU5UOiBFbmhhbmNlZCBmaW5hbCBzdW1tYXJ5IHdpdGggYWN0aW9uYWJsZSBpbnNpZ2h0c1xuICAgICAgICBjb25zdCBzdWNjZXNzUmF0ZSA9IHRvdGFsRWxlbWVudHMgPiAwID8gTWF0aC5yb3VuZCgoc3luY0NvdW50IC8gdG90YWxFbGVtZW50cykgKiAxMDApIDogMDtcbiAgICAgICAgY29uc3Qgc3VtbWFyeUljb24gPSBzdWNjZXNzUmF0ZSA9PT0gMTAwID8gJ/CfjoknIDogc3VjY2Vzc1JhdGUgPj0gODAgPyAn4pyFJyA6IHN1Y2Nlc3NSYXRlID49IDUwID8gJ+KaoO+4jycgOiAn4p2MJztcbiAgICAgICAgXG4gICAgICAgIHN5bmNUZXh0ICs9IGAke3N1bW1hcnlJY29ufSAqKlN5bmMgQ29tcGxldGUhKipcXG5gO1xuICAgICAgICBzeW5jVGV4dCArPSBg8J+TiiAqKk92ZXJhbGwgUmVzdWx0cyoqOiAke3N5bmNDb3VudH0vJHt0b3RhbEVsZW1lbnRzfSBlbGVtZW50cyBzeW5jZWQgKCR7c3VjY2Vzc1JhdGV9JSlcXG5gO1xuICAgICAgICBzeW5jVGV4dCArPSBg8J+PoCAqKlBvcnRmb2xpbyoqOiBodHRwczovL2dpdGh1Yi5jb20vJHt1c2VybmFtZX0vJHtwb3J0Zm9saW9NYW5hZ2VyLmdldFJlcG9zaXRvcnlOYW1lKCl9XFxuXFxuYDtcbiAgICAgICAgXG4gICAgICAgIC8vIEluY2x1ZGUgZmFpbGVkIGVsZW1lbnRzIGluZm9ybWF0aW9uIHdpdGggYWN0aW9uYWJsZSBzdWdnZXN0aW9uc1xuICAgICAgICBpZiAoZmFpbGVkRWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGDimqDvuI8gKipJc3N1ZXMgRW5jb3VudGVyZWQqKiAoJHtmYWlsZWRFbGVtZW50cy5sZW5ndGh9IHByb2JsZW1zKTpcXG5cXG5gO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIEdyb3VwIGZhaWx1cmVzIGJ5IHR5cGUgZm9yIGJldHRlciBvcmdhbml6YXRpb25cbiAgICAgICAgICBjb25zdCBmYWlsdXJlc0J5VHlwZTogUmVjb3JkPHN0cmluZywgQXJyYXk8e25hbWU6IHN0cmluZywgZXJyb3I6IHN0cmluZ30+PiA9IHt9O1xuICAgICAgICAgIGZvciAoY29uc3QgZmFpbGVkIG9mIGZhaWxlZEVsZW1lbnRzKSB7XG4gICAgICAgICAgICBpZiAoIWZhaWx1cmVzQnlUeXBlW2ZhaWxlZC50eXBlXSkge1xuICAgICAgICAgICAgICBmYWlsdXJlc0J5VHlwZVtmYWlsZWQudHlwZV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZhaWx1cmVzQnlUeXBlW2ZhaWxlZC50eXBlXS5wdXNoKHsgbmFtZTogZmFpbGVkLm5hbWUsIGVycm9yOiBmYWlsZWQuZXJyb3IgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGZvciAoY29uc3QgW3R5cGUsIGZhaWx1cmVzXSBvZiBPYmplY3QuZW50cmllcyhmYWlsdXJlc0J5VHlwZSkpIHtcbiAgICAgICAgICAgIHN5bmNUZXh0ICs9IGDwn5OBICoqJHt0eXBlfSoqICgke2ZhaWx1cmVzLmxlbmd0aH0gaXNzdWVzKTpcXG5gO1xuICAgICAgICAgICAgZm9yIChjb25zdCBmYWlsdXJlIG9mIGZhaWx1cmVzKSB7XG4gICAgICAgICAgICAgIGlmIChmYWlsdXJlLm5hbWUgPT09ICdBTEwnKSB7XG4gICAgICAgICAgICAgICAgc3luY1RleHQgKz0gYCAg4p2MICR7ZmFpbHVyZS5lcnJvcn1cXG5gO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN5bmNUZXh0ICs9IGAgIOKdjCBcIiR7ZmFpbHVyZS5uYW1lfVwiOiAke2ZhaWx1cmUuZXJyb3J9XFxuYDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3luY1RleHQgKz0gYFxcbmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIFVYIElNUFJPVkVNRU5UOiBBZGQgaGVscGZ1bCBzdWdnZXN0aW9ucyBiYXNlZCBvbiBlcnJvciBjb2RlcyBmb3VuZFxuICAgICAgICAgIHN5bmNUZXh0ICs9IGDwn5KhICoqVHJvdWJsZXNob290aW5nIFRpcHMqKjpcXG5gO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIENoZWNrIGZvciBzcGVjaWZpYyBlcnJvciBjb2RlcyBhbmQgcHJvdmlkZSB0YXJnZXRlZCBhZHZpY2VcbiAgICAgICAgICBjb25zdCBlcnJvckNvZGVzID0gZmFpbGVkRWxlbWVudHMubWFwKGYgPT4gZi5lcnJvci5tYXRjaCgvXihbQS1aX10rX1xcZCspOi8pPy5bMV0pLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgICBjb25zdCB1bmlxdWVFcnJvckNvZGVzID0gWy4uLm5ldyBTZXQoZXJyb3JDb2RlcyldO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmICh1bmlxdWVFcnJvckNvZGVzLmluY2x1ZGVzKCdQT1JURk9MSU9fU1lOQ18wMDEnKSkge1xuICAgICAgICAgICAgc3luY1RleHQgKz0gYCAg4oCiIPCflJAgKipBdXRoIEVycm9yKio6IFJ1biBcXGBzZXR1cF9naXRodWJfYXV0aFxcYCB0byByZS1hdXRoZW50aWNhdGVcXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodW5pcXVlRXJyb3JDb2Rlcy5pbmNsdWRlcygnUE9SVEZPTElPX1NZTkNfMDAyJykpIHtcbiAgICAgICAgICAgIHN5bmNUZXh0ICs9IGAgIOKAoiDwn5OBICoqUmVwbyBNaXNzaW5nKio6IFJ1biBcXGBpbml0X3BvcnRmb2xpb1xcYCB0byBjcmVhdGUgeW91ciByZXBvc2l0b3J5XFxuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVuaXF1ZUVycm9yQ29kZXMuaW5jbHVkZXMoJ1BPUlRGT0xJT19TWU5DXzAwNCcpKSB7XG4gICAgICAgICAgICBzeW5jVGV4dCArPSBgICDigKIg8J+UpyAqKkFQSSBFcnJvcioqOiBHaXRIdWIgcmVzcG9uc2UgZm9ybWF0IGlzc3VlIC0gcGxlYXNlIHJlcG9ydCB0aGlzIGJ1Z1xcbmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1bmlxdWVFcnJvckNvZGVzLmluY2x1ZGVzKCdQT1JURk9MSU9fU1lOQ18wMDYnKSkge1xuICAgICAgICAgICAgc3luY1RleHQgKz0gYCAg4oCiIOKPsyAqKlJhdGUgTGltaXRlZCoqOiBXYWl0IGEgZmV3IG1pbnV0ZXMgYW5kIHRyeSBhZ2FpblxcbmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIEdlbmVyYWwgdGlwc1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGAgIOKAoiBDaGVjayBlbGVtZW50IGZpbGUgZm9ybWF0cyBhbmQgbWV0YWRhdGFcXG5gO1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGAgIOKAoiBUcnkgc3luY2luZyBpbmRpdmlkdWFsIGVsZW1lbnRzIHdpdGggXFxgcG9ydGZvbGlvX2VsZW1lbnRfbWFuYWdlclxcYCAodXBsb2FkIG9wZXJhdGlvbilcXG5gO1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGAgIOKAoiBVc2UgXFxgc3luY19wb3J0Zm9saW9cXGAgd2l0aCBcXGBkcnlfcnVuPXRydWVcXGAgdG8gcHJldmlldyBpc3N1ZXNcXG5cXG5gO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIEFkZCBlcnJvciBjb2RlIGxlZ2VuZCBpZiB3ZSBmb3VuZCBhbnlcbiAgICAgICAgICBpZiAodW5pcXVlRXJyb3JDb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzeW5jVGV4dCArPSBg8J+TiyAqKkVycm9yIENvZGVzIERldGVjdGVkKio6XFxuYDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29kZSBvZiB1bmlxdWVFcnJvckNvZGVzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yRGVzY3JpcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgICAgICAgICAgICdQT1JURk9MSU9fU1lOQ18wMDEnOiAnQXV0aGVudGljYXRpb24gZmFpbHVyZScsXG4gICAgICAgICAgICAgICAgJ1BPUlRGT0xJT19TWU5DXzAwMic6ICdSZXBvc2l0b3J5IG5vdCBmb3VuZCcsXG4gICAgICAgICAgICAgICAgJ1BPUlRGT0xJT19TWU5DXzAwMyc6ICdGaWxlIGNyZWF0aW9uIGZhaWxlZCcsXG4gICAgICAgICAgICAgICAgJ1BPUlRGT0xJT19TWU5DXzAwNCc6ICdBUEkgcmVzcG9uc2UgcGFyc2luZyBlcnJvcicsXG4gICAgICAgICAgICAgICAgJ1BPUlRGT0xJT19TWU5DXzAwNSc6ICdOZXR3b3JrIGVycm9yJyxcbiAgICAgICAgICAgICAgICAnUE9SVEZPTElPX1NZTkNfMDA2JzogJ1JhdGUgbGltaXQgZXhjZWVkZWQnXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gZXJyb3JEZXNjcmlwdGlvbnNbY29kZSBhcyBzdHJpbmddIHx8ICdVbmtub3duIGVycm9yJztcbiAgICAgICAgICAgICAgc3luY1RleHQgKz0gYCAg4oCiICR7Y29kZX06ICR7ZGVzY3JpcHRpb259XFxuYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN5bmNUZXh0ICs9IGBcXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzeW5jVGV4dCArPSBg8J+OiSAqKlBlcmZlY3QgU3luYyEqKiBBbGwgZWxlbWVudHMgdXBsb2FkZWQgc3VjY2Vzc2Z1bGx5IVxcblxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIFVYIElNUFJPVkVNRU5UOiBBZGQgbmV4dCBzdGVwcyBhbmQgaGVscGZ1bCBsaW5rc1xuICAgICAgICBpZiAoc3luY0NvdW50ID4gMCkge1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGDwn5qAICoqTmV4dCBTdGVwcyoqOlxcbmA7XG4gICAgICAgICAgc3luY1RleHQgKz0gYCAg4oCiIFZpZXcgeW91ciBwb3J0Zm9saW86IGh0dHBzOi8vZ2l0aHViLmNvbS8ke3VzZXJuYW1lfS8ke3BvcnRmb2xpb01hbmFnZXIuZ2V0UmVwb3NpdG9yeU5hbWUoKX1cXG5gO1xuICAgICAgICAgIHN5bmNUZXh0ICs9IGAgIOKAoiBTaGFyZSBpbmRpdmlkdWFsIGVsZW1lbnRzIHVzaW5nIFxcYHN1Ym1pdF9jb2xsZWN0aW9uX2NvbnRlbnQgPG5hbWU+XFxgXFxuYDtcbiAgICAgICAgICBzeW5jVGV4dCArPSBgICDigKIgS2VlcCBwb3J0Zm9saW8gdXBkYXRlZCB3aXRoIFxcYHN5bmNfcG9ydGZvbGlvXFxgIHJlZ3VsYXJseVxcblxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHN5bmNUZXh0ICs9IGBZb3VyIGVsZW1lbnRzIGFyZSBub3cgYXZhaWxhYmxlIG9uIEdpdEh1YiFgO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogc3luY1RleHRcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24gPT09ICdwdWxsJyB8fCBvcHRpb25zLmRpcmVjdGlvbiA9PT0gJ2JvdGgnKSB7XG4gICAgICAgIGNvbnN0IHsgUG9ydGZvbGlvUHVsbEhhbmRsZXIgfSA9IGF3YWl0IGltcG9ydCgnLi9oYW5kbGVycy9Qb3J0Zm9saW9QdWxsSGFuZGxlci5qcycpO1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gbmV3IFBvcnRmb2xpb1B1bGxIYW5kbGVyKCk7XG4gICAgICAgIHJldHVybiBoYW5kbGVyLmV4ZWN1dGVQdWxsKG9wdGlvbnMsIHRoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgSW52YWxpZCBzeW5jIGRpcmVjdGlvbi4gVXNlICdwdXNoJywgJ3B1bGwnLCBvciAnYm90aCcuYFxuICAgICAgICB9XVxuICAgICAgfTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBJTVBST1ZFRCBFUlJPUiBIQU5ETElORzogRW5zdXJlIHdlIGFsd2F5cyBoYXZlIGEgbWVhbmluZ2Z1bCBlcnJvciBtZXNzYWdlXG4gICAgICBjb25zdCBzYW5pdGl6ZWRFcnJvciA9IFNlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKTtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHNhbml0aXplZEVycm9yPy5tZXNzYWdlIHx8IChlcnJvciBhcyBhbnkpPy5tZXNzYWdlIHx8IFN0cmluZyhlcnJvcikgfHwgJ1Vua25vd24gZXJyb3Igb2NjdXJyZWQnO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBGYWlsZWQgdG8gc3luYyBwb3J0Zm9saW86ICR7ZXJyb3JNZXNzYWdlfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMgLSBkZWxlZ2F0ZXMgdG8gQ29uZmlnSGFuZGxlclxuICAgKi9cbiAgYXN5bmMgaGFuZGxlQ29uZmlnT3BlcmF0aW9uKG9wdGlvbnM6IGFueSkge1xuICAgIGNvbnN0IHsgQ29uZmlnSGFuZGxlciB9ID0gYXdhaXQgaW1wb3J0KCcuL2hhbmRsZXJzL0NvbmZpZ0hhbmRsZXIuanMnKTtcbiAgICBjb25zdCBoYW5kbGVyID0gbmV3IENvbmZpZ0hhbmRsZXIoKTtcbiAgICByZXR1cm4gaGFuZGxlci5oYW5kbGVDb25maWdPcGVyYXRpb24ob3B0aW9ucywgdGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBzeW5jIG9wZXJhdGlvbnMgLSBkZWxlZ2F0ZXMgdG8gU3luY0hhbmRsZXJcbiAgICovXG4gIGFzeW5jIGhhbmRsZVN5bmNPcGVyYXRpb24ob3B0aW9uczogYW55KSB7XG4gICAgY29uc3QgeyBTeW5jSGFuZGxlciB9ID0gYXdhaXQgaW1wb3J0KCcuL2hhbmRsZXJzL1N5bmNIYW5kbGVyVjIuanMnKTtcbiAgICBjb25zdCBoYW5kbGVyID0gbmV3IFN5bmNIYW5kbGVyKCk7XG4gICAgcmV0dXJuIGhhbmRsZXIuaGFuZGxlU3luY09wZXJhdGlvbihvcHRpb25zLCB0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKSk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIGxvY2FsIHBvcnRmb2xpbyB1c2luZyB0aGUgbWV0YWRhdGEgaW5kZXggc3lzdGVtXG4gICAqIFRoaXMgcHJvdmlkZXMgZmFzdCwgY29tcHJlaGVuc2l2ZSBzZWFyY2ggYWNyb3NzIGFsbCBlbGVtZW50IHR5cGVzXG4gICAqL1xuICBhc3luYyBzZWFyY2hQb3J0Zm9saW8ob3B0aW9uczoge1xuICAgIHF1ZXJ5OiBzdHJpbmc7IFxuICAgIGVsZW1lbnRUeXBlPzogc3RyaW5nOyBcbiAgICBmdXp6eU1hdGNoPzogYm9vbGVhbjsgXG4gICAgbWF4UmVzdWx0cz86IG51bWJlcjsgXG4gICAgaW5jbHVkZUtleXdvcmRzPzogYm9vbGVhbjsgXG4gICAgaW5jbHVkZVRhZ3M/OiBib29sZWFuOyBcbiAgICBpbmNsdWRlVHJpZ2dlcnM/OiBib29sZWFuOyBcbiAgICBpbmNsdWRlRGVzY3JpcHRpb25zPzogYm9vbGVhbjtcbiAgfSkge1xuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSB0aGUgcXVlcnkgcGFyYW1ldGVyXG4gICAgICBpZiAoIW9wdGlvbnMucXVlcnkgfHwgdHlwZW9mIG9wdGlvbnMucXVlcnkgIT09ICdzdHJpbmcnIHx8IG9wdGlvbnMucXVlcnkudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBTZWFyY2ggcXVlcnkgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nLmBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBJbXBvcnQgcG9ydGZvbGlvIGluZGV4IG1hbmFnZXJcbiAgICAgIGNvbnN0IHsgUG9ydGZvbGlvSW5kZXhNYW5hZ2VyIH0gPSBhd2FpdCBpbXBvcnQoJy4vcG9ydGZvbGlvL1BvcnRmb2xpb0luZGV4TWFuYWdlci5qcycpO1xuICAgICAgY29uc3QgaW5kZXhNYW5hZ2VyID0gUG9ydGZvbGlvSW5kZXhNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cbiAgICAgIC8vIFBhcnNlIGVsZW1lbnQgdHlwZSBpZiBwcm92aWRlZFxuICAgICAgbGV0IGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZSB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChvcHRpb25zLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkVHlwZXMgPSBbJ3BlcnNvbmFzJywgJ3NraWxscycsICd0ZW1wbGF0ZXMnLCAnYWdlbnRzJywgJ21lbW9yaWVzJywgJ2Vuc2VtYmxlcyddO1xuICAgICAgICBpZiAoIXZhbGlkVHlwZXMuaW5jbHVkZXMob3B0aW9ucy5lbGVtZW50VHlwZSkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBJbnZhbGlkIGVsZW1lbnQgdHlwZS4gVmFsaWQgdHlwZXM6ICR7dmFsaWRUeXBlcy5qb2luKCcsICcpfWBcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50VHlwZSA9IG9wdGlvbnMuZWxlbWVudFR5cGUgYXMgRWxlbWVudFR5cGU7XG4gICAgICB9XG5cbiAgICAgIC8vIEJ1aWxkIHNlYXJjaCBvcHRpb25zXG4gICAgICBjb25zdCBzZWFyY2hPcHRpb25zID0ge1xuICAgICAgICBlbGVtZW50VHlwZSxcbiAgICAgICAgZnV6enlNYXRjaDogb3B0aW9ucy5mdXp6eU1hdGNoICE9PSBmYWxzZSwgLy8gRGVmYXVsdCB0byB0cnVlXG4gICAgICAgIG1heFJlc3VsdHM6IG9wdGlvbnMubWF4UmVzdWx0cyB8fCAyMCxcbiAgICAgICAgaW5jbHVkZUtleXdvcmRzOiBvcHRpb25zLmluY2x1ZGVLZXl3b3JkcyAhPT0gZmFsc2UsXG4gICAgICAgIGluY2x1ZGVUYWdzOiBvcHRpb25zLmluY2x1ZGVUYWdzICE9PSBmYWxzZSxcbiAgICAgICAgaW5jbHVkZVRyaWdnZXJzOiBvcHRpb25zLmluY2x1ZGVUcmlnZ2VycyAhPT0gZmFsc2UsXG4gICAgICAgIGluY2x1ZGVEZXNjcmlwdGlvbnM6IG9wdGlvbnMuaW5jbHVkZURlc2NyaXB0aW9ucyAhPT0gZmFsc2VcbiAgICAgIH07XG5cbiAgICAgIC8vIFBlcmZvcm0gdGhlIHNlYXJjaFxuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IGluZGV4TWFuYWdlci5zZWFyY2gob3B0aW9ucy5xdWVyeSwgc2VhcmNoT3B0aW9ucyk7XG5cbiAgICAgIC8vIEZvcm1hdCB0aGUgcmVzdWx0c1xuICAgICAgbGV0IHRleHQgPSBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3wn5SNICoqUG9ydGZvbGlvIFNlYXJjaCBSZXN1bHRzKipcXG5cXG5gO1xuICAgICAgdGV4dCArPSBgKipRdWVyeSoqOiBcIiR7b3B0aW9ucy5xdWVyeX1cIlxcbmA7XG4gICAgICBcbiAgICAgIGlmIChlbGVtZW50VHlwZSkge1xuICAgICAgICB0ZXh0ICs9IGAqKlR5cGUgRmlsdGVyKio6ICR7ZWxlbWVudFR5cGV9XFxuYDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGV4dCArPSBgKipGb3VuZCoqOiAke3Jlc3VsdHMubGVuZ3RofSBlbGVtZW50JHtyZXN1bHRzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ3MnfVxcblxcbmA7XG5cbiAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0ZXh0ICs9IGBObyBlbGVtZW50cyBmb3VuZCBtYXRjaGluZyB5b3VyIHNlYXJjaCBjcml0ZXJpYS5cXG5cXG5gO1xuICAgICAgICB0ZXh0ICs9IGAqKlRpcHMgZm9yIGJldHRlciByZXN1bHRzOioqXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFRyeSBkaWZmZXJlbnQga2V5d29yZHMgb3IgcGFydGlhbCBuYW1lc1xcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBSZW1vdmUgdGhlIHR5cGUgZmlsdGVyIHRvIHNlYXJjaCBhbGwgZWxlbWVudCB0eXBlc1xcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBDaGVjayBzcGVsbGluZyBhbmQgdHJ5IHN5bm9ueW1zXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFVzZSB0aGUgbGlzdF9lbGVtZW50cyB0b29sIHRvIHNlZSBhbGwgYXZhaWxhYmxlIGNvbnRlbnRgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dCArPSBgKipSZXN1bHRzOioqXFxuXFxuYDtcbiAgICAgICAgXG4gICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgICBjb25zdCB7IGVudHJ5LCBtYXRjaFR5cGUgfSA9IHJlc3VsdDtcbiAgICAgICAgICBjb25zdCBpY29uID0gdGhpcy5nZXRFbGVtZW50SWNvbihlbnRyeS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgXG4gICAgICAgICAgdGV4dCArPSBgJHtpY29ufSAqKiR7ZW50cnkubWV0YWRhdGEubmFtZX0qKlxcbmA7XG4gICAgICAgICAgdGV4dCArPSBgICAg8J+TgSBUeXBlOiAke2VudHJ5LmVsZW1lbnRUeXBlfVxcbmA7XG4gICAgICAgICAgdGV4dCArPSBgICAg8J+OryBNYXRjaDogJHttYXRjaFR5cGV9XFxuYDtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoZW50cnkubWV0YWRhdGEuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGRlc2MgPSBlbnRyeS5tZXRhZGF0YS5kZXNjcmlwdGlvbi5sZW5ndGggPiAxMDAgXG4gICAgICAgICAgICAgID8gZW50cnkubWV0YWRhdGEuZGVzY3JpcHRpb24uc3Vic3RyaW5nKDAsIDEwMCkgKyAnLi4uJ1xuICAgICAgICAgICAgICA6IGVudHJ5Lm1ldGFkYXRhLmRlc2NyaXB0aW9uO1xuICAgICAgICAgICAgdGV4dCArPSBgICAg8J+TnSAke2Rlc2N9XFxuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKGVudHJ5Lm1ldGFkYXRhLnRhZ3MgJiYgZW50cnkubWV0YWRhdGEudGFncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0ZXh0ICs9IGAgICDwn4+377iPIFRhZ3M6ICR7ZW50cnkubWV0YWRhdGEudGFncy5zbGljZSgwLCA1KS5qb2luKCcsICcpfSR7ZW50cnkubWV0YWRhdGEudGFncy5sZW5ndGggPiA1ID8gJy4uLicgOiAnJ31cXG5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICB0ZXh0ICs9IGAgICDwn5OEIEZpbGU6ICR7ZW50cnkuZmlsZW5hbWV9Lm1kXFxuXFxuYDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoID49IHNlYXJjaE9wdGlvbnMubWF4UmVzdWx0cykge1xuICAgICAgICAgIHRleHQgKz0gYOKaoO+4jyBSZXN1bHRzIGxpbWl0ZWQgdG8gJHtzZWFyY2hPcHRpb25zLm1heFJlc3VsdHN9LiBSZWZpbmUgeW91ciBzZWFyY2ggZm9yIG1vcmUgc3BlY2lmaWMgcmVzdWx0cy5cXG5cXG5gO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0ZXh0ICs9IGDwn5KhICoqTmV4dCBzdGVwczoqKlxcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBVc2UgZ2V0X2VsZW1lbnRfZGV0YWlscyB0byBzZWUgZnVsbCBjb250ZW50XFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFVzZSBhY3RpdmF0ZV9lbGVtZW50IHRvIGFjdGl2YXRlIGVsZW1lbnRzXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFVzZSBzdWJtaXRfY29sbGVjdGlvbl9jb250ZW50IHRvIHNoYXJlIHdpdGggdGhlIGNvbW11bml0eWA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dFxuICAgICAgICB9XVxuICAgICAgfTtcblxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLnNlYXJjaFBvcnRmb2xpbycsIGVycm9yLCB7IFxuICAgICAgICBxdWVyeTogb3B0aW9ucy5xdWVyeSxcbiAgICAgICAgZWxlbWVudFR5cGU6IG9wdGlvbnMuZWxlbWVudFR5cGUgXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIiwgXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIFNlYXJjaCBmYWlsZWQ6ICR7U2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpLm1lc3NhZ2V9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIGFjcm9zcyBhbGwgc291cmNlcyAobG9jYWwsIEdpdEh1YiwgY29sbGVjdGlvbikgdXNpbmcgVW5pZmllZEluZGV4TWFuYWdlclxuICAgKiBUaGlzIHByb3ZpZGVzIGNvbXByZWhlbnNpdmUgc2VhcmNoIHdpdGggZHVwbGljYXRlIGRldGVjdGlvbiBhbmQgdmVyc2lvbiBjb21wYXJpc29uXG4gICAqL1xuICBhc3luYyBzZWFyY2hBbGwob3B0aW9uczoge1xuICAgIHF1ZXJ5OiBzdHJpbmc7XG4gICAgc291cmNlcz86IHN0cmluZ1tdO1xuICAgIGVsZW1lbnRUeXBlPzogc3RyaW5nO1xuICAgIHBhZ2U/OiBudW1iZXI7XG4gICAgcGFnZVNpemU/OiBudW1iZXI7XG4gICAgc29ydEJ5Pzogc3RyaW5nO1xuICB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFZhbGlkYXRlIHRoZSBxdWVyeSBwYXJhbWV0ZXJcbiAgICAgIGlmICghb3B0aW9ucy5xdWVyeSB8fCB0eXBlb2Ygb3B0aW9ucy5xdWVyeSAhPT0gJ3N0cmluZycgfHwgb3B0aW9ucy5xdWVyeS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIFNlYXJjaCBxdWVyeSBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcuYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEltcG9ydCB1bmlmaWVkIGluZGV4IG1hbmFnZXJcbiAgICAgIGNvbnN0IHsgVW5pZmllZEluZGV4TWFuYWdlciB9ID0gYXdhaXQgaW1wb3J0KCcuL3BvcnRmb2xpby9VbmlmaWVkSW5kZXhNYW5hZ2VyLmpzJyk7XG4gICAgICBjb25zdCB7IEVsZW1lbnRUeXBlIH0gPSBhd2FpdCBpbXBvcnQoJy4vcG9ydGZvbGlvL3R5cGVzLmpzJyk7XG4gICAgICBjb25zdCB1bmlmaWVkTWFuYWdlciA9IFVuaWZpZWRJbmRleE1hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblxuICAgICAgLy8gUGFyc2UgZWxlbWVudCB0eXBlIGlmIHByb3ZpZGVkXG4gICAgICBsZXQgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKG9wdGlvbnMuZWxlbWVudFR5cGUpIHtcbiAgICAgICAgY29uc3QgdmFsaWRUeXBlcyA9IFsncGVyc29uYXMnLCAnc2tpbGxzJywgJ3RlbXBsYXRlcycsICdhZ2VudHMnLCAnbWVtb3JpZXMnLCAnZW5zZW1ibGVzJ107XG4gICAgICAgIGlmICghdmFsaWRUeXBlcy5pbmNsdWRlcyhvcHRpb25zLmVsZW1lbnRUeXBlKSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEludmFsaWQgZWxlbWVudCB0eXBlLiBWYWxpZCB0eXBlczogJHt2YWxpZFR5cGVzLmpvaW4oJywgJyl9YFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnRUeXBlID0gb3B0aW9ucy5lbGVtZW50VHlwZSBhcyBFbGVtZW50VHlwZTtcbiAgICAgIH1cblxuICAgICAgLy8gUGFyc2Ugc291cmNlcyAoZGVmYXVsdCB0byBsb2NhbCBhbmQgZ2l0aHViKVxuICAgICAgY29uc3Qgc291cmNlcyA9IG9wdGlvbnMuc291cmNlcyB8fCBbJ2xvY2FsJywgJ2dpdGh1YiddO1xuICAgICAgY29uc3QgaW5jbHVkZUxvY2FsID0gc291cmNlcy5pbmNsdWRlcygnbG9jYWwnKTtcbiAgICAgIGNvbnN0IGluY2x1ZGVHaXRIdWIgPSBzb3VyY2VzLmluY2x1ZGVzKCdnaXRodWInKTtcbiAgICAgIGNvbnN0IGluY2x1ZGVDb2xsZWN0aW9uID0gc291cmNlcy5pbmNsdWRlcygnY29sbGVjdGlvbicpO1xuXG4gICAgICAvLyBCdWlsZCBzZWFyY2ggb3B0aW9uc1xuICAgICAgY29uc3Qgc2VhcmNoT3B0aW9ucyA9IHtcbiAgICAgICAgcXVlcnk6IG9wdGlvbnMucXVlcnksXG4gICAgICAgIGluY2x1ZGVMb2NhbCxcbiAgICAgICAgaW5jbHVkZUdpdEh1YixcbiAgICAgICAgaW5jbHVkZUNvbGxlY3Rpb24sXG4gICAgICAgIGVsZW1lbnRUeXBlLFxuICAgICAgICBwYWdlOiBvcHRpb25zLnBhZ2UgfHwgMSxcbiAgICAgICAgcGFnZVNpemU6IG9wdGlvbnMucGFnZVNpemUgfHwgMjAsXG4gICAgICAgIHNvcnRCeTogKG9wdGlvbnMuc29ydEJ5IGFzIGFueSkgfHwgJ3JlbGV2YW5jZSdcbiAgICAgIH07XG5cbiAgICAgIC8vIFBlcmZvcm0gdGhlIHVuaWZpZWQgc2VhcmNoXG4gICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdW5pZmllZE1hbmFnZXIuc2VhcmNoKHNlYXJjaE9wdGlvbnMpO1xuXG4gICAgICAvLyBGb3JtYXQgdGhlIHJlc3VsdHNcbiAgICAgIGxldCB0ZXh0ID0gYCR7dGhpcy5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+UjSAqKlVuaWZpZWQgU2VhcmNoIFJlc3VsdHMqKlxcblxcbmA7XG4gICAgICB0ZXh0ICs9IGAqKlF1ZXJ5Kio6IFwiJHtvcHRpb25zLnF1ZXJ5fVwiXFxuYDtcbiAgICAgIHRleHQgKz0gYCoqU291cmNlcyoqOiAke3NvdXJjZXMuam9pbignLCAnKX1cXG5gO1xuICAgICAgXG4gICAgICBpZiAoZWxlbWVudFR5cGUpIHtcbiAgICAgICAgdGV4dCArPSBgKipUeXBlIEZpbHRlcioqOiAke2VsZW1lbnRUeXBlfVxcbmA7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRleHQgKz0gYCoqRm91bmQqKjogJHtyZXN1bHRzLmxlbmd0aH0gZWxlbWVudCR7cmVzdWx0cy5sZW5ndGggPT09IDEgPyAnJyA6ICdzJ31cXG5cXG5gO1xuXG4gICAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGV4dCArPSBgTm8gZWxlbWVudHMgZm91bmQgbWF0Y2hpbmcgeW91ciBzZWFyY2ggY3JpdGVyaWEuXFxuXFxuYDtcbiAgICAgICAgdGV4dCArPSBgKipUaXBzIGZvciBiZXR0ZXIgcmVzdWx0czoqKlxcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBUcnkgZGlmZmVyZW50IGtleXdvcmRzIG9yIHBhcnRpYWwgbmFtZXNcXG5gO1xuICAgICAgICB0ZXh0ICs9IGDigKIgUmVtb3ZlIHRoZSB0eXBlIGZpbHRlciB0byBzZWFyY2ggYWxsIGVsZW1lbnQgdHlwZXNcXG5gO1xuICAgICAgICB0ZXh0ICs9IGDigKIgSW5jbHVkZSBtb3JlIHNvdXJjZXM6IGxvY2FsLCBnaXRodWIsIGNvbGxlY3Rpb25cXG5gO1xuICAgICAgICB0ZXh0ICs9IGDigKIgQ2hlY2sgc3BlbGxpbmcgYW5kIHRyeSBzeW5vbnltc1xcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBVc2UgYnJvd3NlX2NvbGxlY3Rpb24gdG8gZXhwbG9yZSBhdmFpbGFibGUgY29udGVudGA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXh0ICs9IGAqKlJlc3VsdHM6KipcXG5cXG5gO1xuICAgICAgICBcbiAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICAgIGNvbnN0IHsgZW50cnksIHNvdXJjZSwgbWF0Y2hUeXBlLCBzY29yZSwgaXNEdXBsaWNhdGUsIHZlcnNpb25Db25mbGljdCB9ID0gcmVzdWx0O1xuICAgICAgICAgIGNvbnN0IGljb24gPSB0aGlzLmdldEVsZW1lbnRJY29uKGVudHJ5LmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBjb25zdCBzb3VyY2VJY29uID0gdGhpcy5nZXRTb3VyY2VJY29uKHNvdXJjZSk7XG4gICAgICAgICAgXG4gICAgICAgICAgdGV4dCArPSBgJHtpY29ufSAqKiR7ZW50cnkubmFtZX0qKiAke3NvdXJjZUljb259XFxuYDtcbiAgICAgICAgICB0ZXh0ICs9IGAgICDwn5OBIFR5cGU6ICR7ZW50cnkuZWxlbWVudFR5cGV9IHwgU291cmNlOiAke3NvdXJjZX1cXG5gO1xuICAgICAgICAgIHRleHQgKz0gYCAgIPCfjq8gTWF0Y2g6ICR7bWF0Y2hUeXBlfSB8IFNjb3JlOiAke3Njb3JlLnRvRml4ZWQoMil9XFxuYDtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoZW50cnkuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGRlc2MgPSBlbnRyeS5kZXNjcmlwdGlvbi5sZW5ndGggPiAxMDAgXG4gICAgICAgICAgICAgID8gZW50cnkuZGVzY3JpcHRpb24uc3Vic3RyaW5nKDAsIDEwMCkgKyAnLi4uJ1xuICAgICAgICAgICAgICA6IGVudHJ5LmRlc2NyaXB0aW9uO1xuICAgICAgICAgICAgdGV4dCArPSBgICAg8J+TnSAke2Rlc2N9XFxuYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZW50cnkudmVyc2lvbikge1xuICAgICAgICAgICAgdGV4dCArPSBgICAg8J+Pt++4jyBWZXJzaW9uOiAke2VudHJ5LnZlcnNpb259XFxuYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTaG93IGR1cGxpY2F0ZSBpbmZvcm1hdGlvblxuICAgICAgICAgIGlmIChpc0R1cGxpY2F0ZSkge1xuICAgICAgICAgICAgdGV4dCArPSBgICAg4pqg77iPICoqRHVwbGljYXRlIGRldGVjdGVkIGFjcm9zcyBzb3VyY2VzKipcXG5gO1xuICAgICAgICAgICAgaWYgKHZlcnNpb25Db25mbGljdCkge1xuICAgICAgICAgICAgICB0ZXh0ICs9IGAgICDwn5SEIFZlcnNpb24gY29uZmxpY3QgLSBSZWNvbW1lbmRlZDogJHt2ZXJzaW9uQ29uZmxpY3QucmVjb21tZW5kZWR9ICgke3ZlcnNpb25Db25mbGljdC5yZWFzb259KVxcbmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIHRleHQgKz0gYFxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGhhc01vcmUgPSByZXN1bHRzLmxlbmd0aCA+PSBzZWFyY2hPcHRpb25zLnBhZ2VTaXplO1xuICAgICAgICBpZiAoaGFzTW9yZSkge1xuICAgICAgICAgIGNvbnN0IG5leHRQYWdlID0gc2VhcmNoT3B0aW9ucy5wYWdlICsgMTtcbiAgICAgICAgICB0ZXh0ICs9IGDimqDvuI8gUmVzdWx0cyBsaW1pdGVkIHRvICR7c2VhcmNoT3B0aW9ucy5wYWdlU2l6ZX0uIFVzZSBwYWdlPSR7bmV4dFBhZ2V9IGZvciBtb3JlIHJlc3VsdHMuXFxuXFxuYDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdGV4dCArPSBg8J+SoSAqKk5leHQgc3RlcHM6KipcXG5gO1xuICAgICAgICB0ZXh0ICs9IGDigKIgVXNlIGdldF9lbGVtZW50X2RldGFpbHMgdG8gc2VlIGZ1bGwgY29udGVudFxcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBVc2UgaW5zdGFsbF9jb2xsZWN0aW9uX2NvbnRlbnQgZm9yIGNvbGxlY3Rpb24gaXRlbXNcXG5gO1xuICAgICAgICB0ZXh0ICs9IGDigKIgVXNlIGFjdGl2YXRlX2VsZW1lbnQgZm9yIGxvY2FsIGVsZW1lbnRzXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIENoZWNrIGZvciBkdXBsaWNhdGVzIGJlZm9yZSBzdWJtaXR0aW5nIG5ldyBjb250ZW50YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0XG4gICAgICAgIH1dXG4gICAgICB9O1xuXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc3QgeyBFcnJvckhhbmRsZXIgfSA9IGF3YWl0IGltcG9ydCgnLi91dGlscy9FcnJvckhhbmRsZXIuanMnKTtcbiAgICAgIGNvbnN0IHsgU2VjdXJlRXJyb3JIYW5kbGVyIH0gPSBhd2FpdCBpbXBvcnQoJy4vc2VjdXJpdHkvZXJyb3JIYW5kbGVyLmpzJyk7XG4gICAgICBcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRG9sbGhvdXNlTUNQU2VydmVyLnNlYXJjaEFsbCcsIGVycm9yLCB7IFxuICAgICAgICBxdWVyeTogb3B0aW9ucy5xdWVyeSxcbiAgICAgICAgc291cmNlczogb3B0aW9ucy5zb3VyY2VzLFxuICAgICAgICBlbGVtZW50VHlwZTogb3B0aW9ucy5lbGVtZW50VHlwZSBcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLCBcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgVW5pZmllZCBzZWFyY2ggZmFpbGVkOiAke1NlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKS5tZXNzYWdlfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBpY29uIGZvciBzb3VyY2UgdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTb3VyY2VJY29uKHNvdXJjZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBpY29uczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgIGxvY2FsOiAn8J+SuycsXG4gICAgICBnaXRodWI6ICfwn5CZJyxcbiAgICAgIGNvbGxlY3Rpb246ICfwn4yQJ1xuICAgIH07XG4gICAgcmV0dXJuIGljb25zW3NvdXJjZV0gfHwgJ/Cfk4EnO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBpY29uIGZvciBlbGVtZW50IHR5cGVcbiAgICovXG4gIHByaXZhdGUgZ2V0RWxlbWVudEljb24oZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlKTogc3RyaW5nIHtcbiAgICBjb25zdCBpY29ucyA9IHtcbiAgICAgIHBlcnNvbmFzOiAn8J+OrScsXG4gICAgICBza2lsbHM6ICfwn46vJyxcbiAgICAgIHRlbXBsYXRlczogJ/Cfk4QnLFxuICAgICAgYWdlbnRzOiAn8J+klicsXG4gICAgICBtZW1vcmllczogJ/Cfp6AnLFxuICAgICAgZW5zZW1ibGVzOiAn8J+OvCdcbiAgICB9O1xuICAgIHJldHVybiBpY29uc1tlbGVtZW50VHlwZV0gfHwgJ/Cfk4EnO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgdG8gY291bnQgZWxlbWVudHMgaW4gYSBkaXJlY3RvcnlcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY291bnRFbGVtZW50c0luRGlyKGRpclBhdGg6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIENoZWNrIGlmIGRpcmVjdG9yeSBleGlzdHMgYW5kIGlzIGFjY2Vzc2libGVcbiAgICAgIGF3YWl0IGZzLmFjY2VzcyhkaXJQYXRoKTtcbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZnMucmVhZGRpcihkaXJQYXRoKTtcbiAgICAgIFxuICAgICAgLy8gQ291bnQgYWxsIGVsZW1lbnQgZmlsZXMgKC5tZCwgLmpzb24sIC55YW1sKSB0byBzdXBwb3J0IGFsbCBlbGVtZW50IHR5cGVzXG4gICAgICAvLyAtIFBlcnNvbmFzOiAubWQgZmlsZXNcbiAgICAgIC8vIC0gU2tpbGxzOiAubWQgZmlsZXMgIFxuICAgICAgLy8gLSBUZW1wbGF0ZXM6IC5tZCBvciAueWFtbCBmaWxlc1xuICAgICAgLy8gLSBBZ2VudHM6IC5tZCBmaWxlc1xuICAgICAgcmV0dXJuIGZpbGVzLmZpbHRlcihmaWxlID0+IFxuICAgICAgICBmaWxlLmVuZHNXaXRoKCcubWQnKSB8fCBcbiAgICAgICAgZmlsZS5lbmRzV2l0aCgnLmpzb24nKSB8fCBcbiAgICAgICAgZmlsZS5lbmRzV2l0aCgnLnlhbWwnKVxuICAgICAgKS5sZW5ndGg7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIHRvIGdldCBsaXN0IG9mIGVsZW1lbnRzIGJ5IHR5cGVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0RWxlbWVudHNMaXN0KGVsZW1lbnRUeXBlOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxvY2FsUG9ydGZvbGlvTWFuYWdlciA9IFBvcnRmb2xpb01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgIGxldCBlbGVtZW50VHlwZUVudW06IEVsZW1lbnRUeXBlO1xuICAgICAgXG4gICAgICBzd2l0Y2ggKGVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgJ3BlcnNvbmFzJzpcbiAgICAgICAgICBlbGVtZW50VHlwZUVudW0gPSBFbGVtZW50VHlwZS5QRVJTT05BO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdza2lsbHMnOlxuICAgICAgICAgIGVsZW1lbnRUeXBlRW51bSA9IEVsZW1lbnRUeXBlLlNLSUxMO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0ZW1wbGF0ZXMnOlxuICAgICAgICAgIGVsZW1lbnRUeXBlRW51bSA9IEVsZW1lbnRUeXBlLlRFTVBMQVRFO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdhZ2VudHMnOlxuICAgICAgICAgIGVsZW1lbnRUeXBlRW51bSA9IEVsZW1lbnRUeXBlLkFHRU5UO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIEluc3RlYWQgb2Ygc2lsZW50bHkgcmV0dXJuaW5nIGVtcHR5IGFycmF5LCB0aHJvdyBkZXNjcmlwdGl2ZSBlcnJvclxuICAgICAgICAgIGNvbnN0IHZhbGlkVHlwZXMgPSBbJ3BlcnNvbmFzJywgJ3NraWxscycsICd0ZW1wbGF0ZXMnLCAnYWdlbnRzJ107XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGVsZW1lbnQgdHlwZTogJyR7ZWxlbWVudFR5cGV9Jy4gVmFsaWQgdHlwZXMgYXJlOiAke3ZhbGlkVHlwZXMuam9pbignLCAnKX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGlyUGF0aCA9IGxvY2FsUG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKGVsZW1lbnRUeXBlRW51bSk7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGRpcmVjdG9yeSBleGlzdHMgYW5kIGlzIGFjY2Vzc2libGVcbiAgICAgIGF3YWl0IGZzLmFjY2VzcyhkaXJQYXRoKTtcbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZnMucmVhZGRpcihkaXJQYXRoKTtcbiAgICAgIFxuICAgICAgLy8gRmlsdGVyIGFuZCBleHRyYWN0IG5hbWVzIGZvciBhbGwgZWxlbWVudCBmaWxlIHR5cGVzXG4gICAgICAvLyAtIFBlcnNvbmFzOiAubWQgZmlsZXNcbiAgICAgIC8vIC0gU2tpbGxzOiAubWQgZmlsZXMgIFxuICAgICAgLy8gLSBUZW1wbGF0ZXM6IC5tZCBvciAueWFtbCBmaWxlc1xuICAgICAgLy8gLSBBZ2VudHM6IC5tZCBmaWxlc1xuICAgICAgcmV0dXJuIGZpbGVzXG4gICAgICAgIC5maWx0ZXIoZmlsZSA9PiBmaWxlLmVuZHNXaXRoKCcubWQnKSB8fCBmaWxlLmVuZHNXaXRoKCcuanNvbicpIHx8IGZpbGUuZW5kc1dpdGgoJy55YW1sJykpXG4gICAgICAgIC5tYXAoZmlsZSA9PiB7XG4gICAgICAgICAgLy8gUmVtb3ZlIGZpbGUgZXh0ZW5zaW9uIHRvIGdldCBlbGVtZW50IG5hbWVcbiAgICAgICAgICBpZiAoZmlsZS5lbmRzV2l0aCgnLm1kJykpIHJldHVybiBmaWxlLnJlcGxhY2UoJy5tZCcsICcnKTtcbiAgICAgICAgICBpZiAoZmlsZS5lbmRzV2l0aCgnLmpzb24nKSkgcmV0dXJuIGZpbGUucmVwbGFjZSgnLmpzb24nLCAnJyk7XG4gICAgICAgICAgaWYgKGZpbGUuZW5kc1dpdGgoJy55YW1sJykpIHJldHVybiBmaWxlLnJlcGxhY2UoJy55YW1sJywgJycpO1xuICAgICAgICAgIHJldHVybiBmaWxlO1xuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIG91ciB2YWxpZGF0aW9uIGVycm9yIGZvciBpbnZhbGlkIGVsZW1lbnQgdHlwZXNcbiAgICAgIGlmIChlcnJvci5tZXNzYWdlICYmIGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ0ludmFsaWQgZWxlbWVudCB0eXBlOicpKSB7XG4gICAgICAgIHRocm93IGVycm9yOyAvLyBSZS10aHJvdyB2YWxpZGF0aW9uIGVycm9ycyBmb3IgZGVidWdnaW5nXG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEZvciBmaWxlIHN5c3RlbSBlcnJvcnMsIHByb3ZpZGUgY29udGV4dCBhYm91dCB0aGUgb3BlcmF0aW9uXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvci5jb2RlID09PSAnRU5PRU5UJyBcbiAgICAgICAgPyBgRWxlbWVudCBkaXJlY3Rvcnkgbm90IGZvdW5kIGZvciB0eXBlICcke2VsZW1lbnRUeXBlfScuIERpcmVjdG9yeSBtYXkgbm90IGV4aXN0IHlldC5gXG4gICAgICAgIDogYEZhaWxlZCB0byByZWFkIGVsZW1lbnRzIGRpcmVjdG9yeSBmb3IgdHlwZSAnJHtlbGVtZW50VHlwZX0nOiAke2Vycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZmlsZSBzeXN0ZW0gZXJyb3InfWA7XG4gICAgICBcbiAgICAgIGxvZ2dlci53YXJuKCdFcnJvciBpbiBnZXRFbGVtZW50c0xpc3QnLCB7IFxuICAgICAgICBlbGVtZW50VHlwZSwgXG4gICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlLCBcbiAgICAgICAgY29kZTogZXJyb3IuY29kZSBcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCB0byBsb2FkIGVsZW1lbnQgYnkgdHlwZVxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIGNvbnRlbnQsIGZpbGVuYW1lLCBhbmQgdHlwZSBwcm9wZXJ0aWVzXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGxvYWRFbGVtZW50QnlUeXBlKGVsZW1lbnROYW1lOiBzdHJpbmcsIGVsZW1lbnRUeXBlOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIFNFQ1VSSVRZOiBTYW5pdGl6ZSBlbGVtZW50TmFtZSBlYXJseSB0byB1c2UgaW4gZXJyb3IgbWVzc2FnZXMgdG9vXG4gICAgY29uc3Qgc2FuaXRpemVkTmFtZSA9IHBhdGguYmFzZW5hbWUoZWxlbWVudE5hbWUpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCBsb2NhbFBvcnRmb2xpb01hbmFnZXIgPSBQb3J0Zm9saW9NYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgICBsZXQgZWxlbWVudFR5cGVFbnVtOiBFbGVtZW50VHlwZTtcbiAgICAgIFxuICAgICAgc3dpdGNoIChlbGVtZW50VHlwZSkge1xuICAgICAgICBjYXNlICdwZXJzb25hcyc6XG4gICAgICAgICAgZWxlbWVudFR5cGVFbnVtID0gRWxlbWVudFR5cGUuUEVSU09OQTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc2tpbGxzJzpcbiAgICAgICAgICBlbGVtZW50VHlwZUVudW0gPSBFbGVtZW50VHlwZS5TS0lMTDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndGVtcGxhdGVzJzpcbiAgICAgICAgICBlbGVtZW50VHlwZUVudW0gPSBFbGVtZW50VHlwZS5URU1QTEFURTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYWdlbnRzJzpcbiAgICAgICAgICBlbGVtZW50VHlwZUVudW0gPSBFbGVtZW50VHlwZS5BR0VOVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBJbnN0ZWFkIG9mIHNpbGVudGx5IHJldHVybmluZyBudWxsLCB0aHJvdyBkZXNjcmlwdGl2ZSBlcnJvclxuICAgICAgICAgIGNvbnN0IHZhbGlkVHlwZXMgPSBbJ3BlcnNvbmFzJywgJ3NraWxscycsICd0ZW1wbGF0ZXMnLCAnYWdlbnRzJ107XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGVsZW1lbnQgdHlwZTogJyR7ZWxlbWVudFR5cGV9Jy4gVmFsaWQgdHlwZXMgYXJlOiAke3ZhbGlkVHlwZXMuam9pbignLCAnKX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGlyUGF0aCA9IGxvY2FsUG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKGVsZW1lbnRUeXBlRW51bSk7XG4gICAgICBcbiAgICAgIC8vIEZJWDogQ2hlY2sgZm9yIGFjdHVhbCBmaWxlIGV4dGVuc2lvbnMgdXNlZCBieSBlbGVtZW50cyAoLm1kLCAuanNvbiwgLnlhbWwpXG4gICAgICAvLyBFbGVtZW50cyBhcmUgc3RvcmVkIGFzIG1hcmtkb3duIGZpbGVzIHdpdGggWUFNTCBmcm9udG1hdHRlciwgbm90IEpTT04gZmlsZXNcbiAgICAgIC8vIFByaW9yaXR5IG9yZGVyOiAubWQgKHByaW1hcnkgZm9ybWF0KSwgLmpzb24gKGxlZ2FjeSksIC55YW1sLy55bWwgKGNvbmZpZylcbiAgICAgIGNvbnN0IGV4dGVuc2lvbnMgPSBbJy5tZCcsICcuanNvbicsICcueWFtbCcsICcueW1sJ107XG4gICAgICBsZXQgY29udGVudDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgICBsZXQgZm91bmRGaWxlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICAgIFxuICAgICAgLy8gRGVmaW5lIHJlYXNvbmFibGUgZmlsZSBzaXplIGxpbWl0ICgxME1CKVxuICAgICAgY29uc3QgTUFYX0ZJTEVfU0laRSA9IDEwICogMTAyNCAqIDEwMjQ7IC8vIDEwTUJcbiAgICAgIFxuICAgICAgZm9yIChjb25zdCBleHQgb2YgZXh0ZW5zaW9ucykge1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihkaXJQYXRoLCBgJHtzYW5pdGl6ZWROYW1lfSR7ZXh0fWApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIENoZWNrIGZpbGUgc2l6ZSBiZWZvcmUgcmVhZGluZyB0byBwcmV2ZW50IG1lbW9yeSBpc3N1ZXNcbiAgICAgICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGZzLnN0YXQoZmlsZVBhdGgpO1xuICAgICAgICAgIGlmIChzdGF0cy5zaXplID4gTUFYX0ZJTEVfU0laRSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlIHNpemUgZXhjZWVkcyBsaW1pdCBvZiAxME1COiAke3N0YXRzLnNpemV9IGJ5dGVzYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICAgICAgZm91bmRGaWxlID0gZmlsZVBhdGg7XG4gICAgICAgICAgYnJlYWs7IC8vIEZvdW5kIHRoZSBmaWxlLCBzdG9wIHNlYXJjaGluZ1xuICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgIC8vIEZpbGUgZG9lc24ndCBleGlzdCB3aXRoIHRoaXMgZXh0ZW5zaW9uLCB0cnkgdGhlIG5leHQgb25lXG4gICAgICAgICAgaWYgKGVyci5jb2RlICE9PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgdGhyb3cgZXJyOyAvLyBSZS10aHJvdyBub24tZmlsZS1ub3QtZm91bmQgZXJyb3JzXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEZJWDogT25seSBjaGVjayBmb3VuZEZpbGUsIG5vdCBjb250ZW50IChlbXB0eSBmaWxlcyBhcmUgdmFsaWQpXG4gICAgICBpZiAoIWZvdW5kRmlsZSkge1xuICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihgRmlsZSBub3QgZm91bmRgKSwgeyBjb2RlOiAnRU5PRU5UJyB9KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gUmV0dXJuIGEgbWluaW1hbCBJRWxlbWVudC1saWtlIG9iamVjdCB0aGF0IHBvcnRmb2xpb01hbmFnZXIuc2F2ZUVsZW1lbnQgY2FuIGhhbmRsZVxuICAgICAgLy8gVGhpcyBwcmVzZXJ2ZXMgdGhlIHJhdyBtYXJrZG93biBjb250ZW50IGZvciBzeW5jaW5nIHRvIEdpdEh1YlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLy8gSUVsZW1lbnQgcmVxdWlyZWQgcHJvcGVydGllc1xuICAgICAgICBpZDogYCR7ZWxlbWVudFR5cGV9XyR7c2FuaXRpemVkTmFtZX1fJHtEYXRlLm5vdygpfWAsXG4gICAgICAgIHR5cGU6IGVsZW1lbnRUeXBlRW51bSxcbiAgICAgICAgdmVyc2lvbjogJzEuMC4wJyxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICBuYW1lOiBzYW5pdGl6ZWROYW1lLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBgTG9hZGVkIGZyb20gJHtwYXRoLmJhc2VuYW1lKGZvdW5kRmlsZSl9YCxcbiAgICAgICAgICBhdXRob3I6ICd1bmtub3duJyxcbiAgICAgICAgICBjcmVhdGVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICB0YWdzOiBbXVxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLy8gSUVsZW1lbnQgcmVxdWlyZWQgbWV0aG9kcyAobWluaW1hbCBpbXBsZW1lbnRhdGlvbnMgZm9yIHN5bmMpXG4gICAgICAgIHZhbGlkYXRlOiAoKSA9PiAoeyBcbiAgICAgICAgICBpc1ZhbGlkOiB0cnVlLCBcbiAgICAgICAgICBlcnJvcnM6IFtdIGFzIGFueVtdLCBcbiAgICAgICAgICB3YXJuaW5nczogW10gYXMgYW55W10gXG4gICAgICAgIH0pLFxuICAgICAgICBzZXJpYWxpemU6ICgpID0+IGNvbnRlbnQgfHwgJycsXG4gICAgICAgIGRlc2VyaWFsaXplOiAoKSA9PiB7IC8qIG5vLW9wICovIH0sXG4gICAgICAgIGdldFN0YXR1czogKCkgPT4gKHsgc3RhdHVzOiAnYWN0aXZlJyBhcyBjb25zdCB9KSxcbiAgICAgICAgXG4gICAgICAgIC8vIEFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgcG9ydGZvbGlvIHN5bmNcbiAgICAgICAgY29udGVudDogY29udGVudCB8fCAnJyxcbiAgICAgICAgZmlsZW5hbWU6IHBhdGguYmFzZW5hbWUoZm91bmRGaWxlKVxuICAgICAgfSBhcyBhbnk7IC8vIFR5cGUgYXNzZXJ0aW9uIG5lZWRlZCBzaW5jZSB3ZSdyZSBkdWNrLXR5cGluZyBJRWxlbWVudFxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgb3VyIHZhbGlkYXRpb24gZXJyb3IgZm9yIGludmFsaWQgZWxlbWVudCB0eXBlc1xuICAgICAgaWYgKGVycm9yLm1lc3NhZ2UgJiYgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnSW52YWxpZCBlbGVtZW50IHR5cGU6JykpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7IC8vIFJlLXRocm93IHZhbGlkYXRpb24gZXJyb3JzIGZvciBkZWJ1Z2dpbmdcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gUHJvdmlkZSBzcGVjaWZpYyBlcnJvciBtZXNzYWdlcyBmb3IgY29tbW9uIGZpbGUgc3lzdGVtIGVycm9yc1xuICAgICAgbGV0IGVycm9yTWVzc2FnZTogc3RyaW5nO1xuICAgICAgXG4gICAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gYEVsZW1lbnQgJyR7c2FuaXRpemVkTmFtZX0nIG5vdCBmb3VuZCBpbiAke2VsZW1lbnRUeXBlfS4gU2VhcmNoZWQgZm9yOiAke3Nhbml0aXplZE5hbWV9Lm1kLCAke3Nhbml0aXplZE5hbWV9Lmpzb24sICR7c2FuaXRpemVkTmFtZX0ueWFtbCwgJHtzYW5pdGl6ZWROYW1lfS55bWxgO1xuICAgICAgfSBlbHNlIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICAgIGVycm9yTWVzc2FnZSA9IGBFbGVtZW50ICcke3Nhbml0aXplZE5hbWV9JyBpbiAke2VsZW1lbnRUeXBlfSBjb250YWlucyBpbnZhbGlkIGNvbnRlbnQ6ICR7ZXJyb3IubWVzc2FnZX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gYEZhaWxlZCB0byBsb2FkIGVsZW1lbnQgJyR7c2FuaXRpemVkTmFtZX0nIGZyb20gJHtlbGVtZW50VHlwZX06ICR7ZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcid9YDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgbG9nZ2VyLndhcm4oJ0Vycm9yIGluIGxvYWRFbGVtZW50QnlUeXBlJywgeyBcbiAgICAgICAgZWxlbWVudE5hbWU6IHNhbml0aXplZE5hbWUsIFxuICAgICAgICBvcmlnaW5hbE5hbWU6IGVsZW1lbnROYW1lICE9PSBzYW5pdGl6ZWROYW1lID8gZWxlbWVudE5hbWUgOiB1bmRlZmluZWQsXG4gICAgICAgIGVsZW1lbnRUeXBlLCBcbiAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UsIFxuICAgICAgICBjb2RlOiBlcnJvci5jb2RlIFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJ1bigpIHtcbiAgICBsb2dnZXIuaW5mbyhcIlN0YXJ0aW5nIERvbGxob3VzZU1DUCBzZXJ2ZXIuLi5cIik7XG4gICAgLy8gRG9ja2VyIGJ1aWxkIHZlcmlmaWNhdGlvbiAtIHByb3ZlcyB3ZSdyZSBydW5uaW5nIGZyZXNoIGNvZGVcbiAgICBsb2dnZXIuaW5mbyhcIkJVSUxEIFZFUklGSUNBVElPTjogUnVubmluZyBidWlsZCBmcm9tIDIwMjUtMDgtMTcgMTY6MzAgVVRDIC0gUFI2MDYgQVJNNjQgZml4XCIpO1xuICAgIFxuICAgIC8vIEZJWCAjNjEwOiBJbml0aWFsaXplIHBvcnRmb2xpbyBhbmQgY29tcGxldGUgc2V0dXAgQkVGT1JFIGNvbm5lY3RpbmcgdG8gTUNQXG4gICAgLy8gVGhpcyBlbnN1cmVzIHBlcnNvbmFzIGFuZCBwb3J0Zm9saW8gYXJlIHJlYWR5IHdoZW4gTUNQIGNvbW1hbmRzIGFycml2ZVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVQb3J0Zm9saW8oKTtcbiAgICAgIGF3YWl0IHRoaXMuY29tcGxldGVJbml0aWFsaXphdGlvbigpO1xuICAgICAgbG9nZ2VyLmluZm8oXCJQb3J0Zm9saW8gYW5kIHBlcnNvbmFzIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICAgIC8vIE91dHB1dCBtZXNzYWdlIHRoYXQgRG9ja2VyIHRlc3RzIGNhbiBkZXRlY3RcbiAgICAgIGxvZ2dlci5pbmZvKFwiRG9sbGhvdXNlTUNQIHNlcnZlciByZWFkeSAtIHdhaXRpbmcgZm9yIE1DUCBjb25uZWN0aW9uIG9uIHN0ZGlvXCIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0RvbGxob3VzZU1DUFNlcnZlci5ydW4uaW5pdGlhbGl6YXRpb24nLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjsgLy8gUmUtdGhyb3cgdG8gcHJldmVudCBzZXJ2ZXIgZnJvbSBzdGFydGluZyB3aXRoIGluY29tcGxldGUgaW5pdGlhbGl6YXRpb25cbiAgICB9XG4gICAgXG4gICAgY29uc3QgdHJhbnNwb3J0ID0gbmV3IFN0ZGlvU2VydmVyVHJhbnNwb3J0KCk7XG4gICAgXG4gICAgLy8gU2V0IHVwIGdyYWNlZnVsIHNodXRkb3duIGhhbmRsZXJzXG4gICAgY29uc3QgY2xlYW51cCA9IGFzeW5jICgpID0+IHtcbiAgICAgIGxvZ2dlci5pbmZvKFwiU2h1dHRpbmcgZG93biBEb2xsaG91c2VNQ1Agc2VydmVyLi4uXCIpO1xuICAgICAgXG4gICAgICB0cnkge1xuICAgICAgICAvLyBDbGVhbiB1cCBHaXRIdWIgYXV0aCBtYW5hZ2VyXG4gICAgICAgIGlmICh0aGlzLmdpdGh1YkF1dGhNYW5hZ2VyKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5naXRodWJBdXRoTWFuYWdlci5jbGVhbnVwKCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIENsZWFuIHVwIGFueSBvdGhlciByZXNvdXJjZXNcbiAgICAgICAgXG4gICAgICAgIGxvZ2dlci5pbmZvKFwiQ2xlYW51cCBjb21wbGV0ZWRcIik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoXCJFcnJvciBkdXJpbmcgY2xlYW51cFwiLCB7IGVycm9yIH0pO1xuICAgICAgfVxuICAgICAgXG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfTtcbiAgICBcbiAgICAvLyBSZWdpc3RlciBzaHV0ZG93biBoYW5kbGVyc1xuICAgIHByb2Nlc3Mub24oJ1NJR0lOVCcsIGNsZWFudXApO1xuICAgIHByb2Nlc3Mub24oJ1NJR1RFUk0nLCBjbGVhbnVwKTtcbiAgICBwcm9jZXNzLm9uKCdTSUdIVVAnLCBjbGVhbnVwKTtcbiAgICBcbiAgICBhd2FpdCB0aGlzLnNlcnZlci5jb25uZWN0KHRyYW5zcG9ydCk7XG4gICAgLy8gTWFyayB0aGF0IE1DUCBpcyBub3cgY29ubmVjdGVkIC0gbm8gbW9yZSBjb25zb2xlIG91dHB1dCBhbGxvd2VkXG4gICAgbG9nZ2VyLnNldE1DUENvbm5lY3RlZCgpO1xuICAgIGxvZ2dlci5pbmZvKFwiRG9sbGhvdXNlTUNQIHNlcnZlciBydW5uaW5nIG9uIHN0ZGlvXCIpO1xuICB9XG59XG5cbi8vIEV4cG9ydCBpcyBhbHJlYWR5IGF0IGNsYXNzIGRlY2xhcmF0aW9uXG5cbi8vIE9ubHkgc3RhcnQgdGhlIHNlcnZlciBpZiB0aGlzIGZpbGUgaXMgYmVpbmcgcnVuIGRpcmVjdGx5IChub3QgaW1wb3J0ZWQgYnkgdGVzdHMpXG4vLyBIYW5kbGUgZGlmZmVyZW50IGV4ZWN1dGlvbiBtZXRob2RzIChkaXJlY3QsIG5weCwgQ0xJKVxuY29uc3QgaXNEaXJlY3RFeGVjdXRpb24gPSBpbXBvcnQubWV0YS51cmwgPT09IGBmaWxlOi8vJHtwcm9jZXNzLmFyZ3ZbMV19YDtcbmNvbnN0IGlzTnB4RXhlY3V0aW9uID0gcHJvY2Vzcy5lbnYubnBtX2V4ZWNwYXRoPy5pbmNsdWRlcygnbnB4Jyk7XG5jb25zdCBpc0NsaUV4ZWN1dGlvbiA9IHByb2Nlc3MuYXJndlsxXT8uZW5kc1dpdGgoJy9kb2xsaG91c2VtY3AnKSB8fCBwcm9jZXNzLmFyZ3ZbMV0/LmVuZHNXaXRoKCdcXFxcZG9sbGhvdXNlbWNwJyk7XG5jb25zdCBpc1Rlc3QgPSBwcm9jZXNzLmVudi5KRVNUX1dPUktFUl9JRDtcblxuLy8gUHJvZ3Jlc3NpdmUgc3RhcnR1cCB3aXRoIHJldHJpZXMgZm9yIG5weC9DTEkgZXhlY3V0aW9uXG5jb25zdCBTVEFSVFVQX0RFTEFZUyA9IFsxMCwgNTAsIDEwMCwgMjAwXTsgLy8gUHJvZ3Jlc3NpdmUgZGVsYXlzIGluIG1zXG5cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0U2VydmVyV2l0aFJldHJ5KHJldHJpZXNMZWZ0ID0gU1RBUlRVUF9ERUxBWVMubGVuZ3RoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2VydmVyID0gbmV3IERvbGxob3VzZU1DUFNlcnZlcigpO1xuICAgIGF3YWl0IHNlcnZlci5ydW4oKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAocmV0cmllc0xlZnQgPiAwICYmIChpc05weEV4ZWN1dGlvbiB8fCBpc0NsaUV4ZWN1dGlvbikpIHtcbiAgICAgIC8vIFRyeSBhZ2FpbiB3aXRoIGEgbG9uZ2VyIGRlbGF5XG4gICAgICBjb25zdCBkZWxheUluZGV4ID0gU1RBUlRVUF9ERUxBWVMubGVuZ3RoIC0gcmV0cmllc0xlZnQ7XG4gICAgICBjb25zdCBkZWxheSA9IFNUQVJUVVBfREVMQVlTW2RlbGF5SW5kZXhdO1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIGRlbGF5KSk7XG4gICAgICByZXR1cm4gc3RhcnRTZXJ2ZXJXaXRoUmV0cnkocmV0cmllc0xlZnQgLSAxKTtcbiAgICB9XG4gICAgLy8gRmluYWwgZmFpbHVyZSAtIG1pbmltYWwgZXJyb3IgbWVzc2FnZSBmb3Igc2VjdXJpdHlcbiAgICAvLyBOb3RlOiBVc2luZyBjb25zb2xlLmVycm9yIGhlcmUgaXMgaW50ZW50aW9uYWwgYXMgaXQncyB0aGUgZmluYWwgZXJyb3IgYmVmb3JlIGV4aXRcbiAgICBjb25zb2xlLmVycm9yKFwiW0RvbGxob3VzZU1DUF0gU2VydmVyIHN0YXJ0dXAgZmFpbGVkXCIpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG5pZiAoKGlzRGlyZWN0RXhlY3V0aW9uIHx8IGlzTnB4RXhlY3V0aW9uIHx8IGlzQ2xpRXhlY3V0aW9uKSAmJiAhaXNUZXN0KSB7XG4gIHN0YXJ0U2VydmVyV2l0aFJldHJ5KCkuY2F0Y2goKCkgPT4ge1xuICAgIC8vIE5vdGU6IFVzaW5nIGNvbnNvbGUuZXJyb3IgaGVyZSBpcyBpbnRlbnRpb25hbCBhcyBpdCdzIHRoZSBmaW5hbCBlcnJvciBiZWZvcmUgZXhpdFxuICAgIGNvbnNvbGUuZXJyb3IoXCJbRG9sbGhvdXNlTUNQXSBTZXJ2ZXIgc3RhcnR1cCBmYWlsZWRcIik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9KTtcbn0iXX0=