@dollhousemcp/mcp-server 1.9.13 → 1.9.15

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 (79) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/README.github.md +54 -0
  3. package/README.md.backup +1241 -49
  4. package/dist/cache/CollectionCache.js +2 -2
  5. package/dist/collection/CollectionIndexManager.js +3 -3
  6. package/dist/config/ConfigWizard.js +3 -3
  7. package/dist/config/indicator-config.js +2 -2
  8. package/dist/config/portfolio-constants.js +12 -12
  9. package/dist/elements/BaseElement.js +7 -7
  10. package/dist/elements/FeedbackProcessor.d.ts +7 -0
  11. package/dist/elements/FeedbackProcessor.d.ts.map +1 -1
  12. package/dist/elements/FeedbackProcessor.js +67 -14
  13. package/dist/elements/agents/AgentManager.js +6 -6
  14. package/dist/elements/memories/Memory.js +4 -4
  15. package/dist/elements/memories/MemoryManager.js +3 -3
  16. package/dist/elements/memories/utils.js +3 -3
  17. package/dist/elements/skills/Skill.js +2 -2
  18. package/dist/elements/skills/SkillManager.js +2 -2
  19. package/dist/elements/templates/Template.d.ts.map +1 -1
  20. package/dist/elements/templates/Template.js +38 -14
  21. package/dist/elements/templates/TemplateManager.js +2 -2
  22. package/dist/generated/version.d.ts +2 -2
  23. package/dist/generated/version.js +3 -3
  24. package/dist/handlers/ConfigHandler.js +3 -3
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +20 -16
  27. package/dist/persona/PersonaElementManager.js +3 -3
  28. package/dist/persona/PersonaManager.js +2 -2
  29. package/dist/persona/export-import/PersonaImporter.js +3 -3
  30. package/dist/portfolio/DefaultElementProvider.d.ts +12 -0
  31. package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -1
  32. package/dist/portfolio/DefaultElementProvider.js +23 -6
  33. package/dist/portfolio/GitHubPortfolioIndexer.js +2 -2
  34. package/dist/portfolio/MigrationManager.js +2 -2
  35. package/dist/portfolio/NLPScoringManager.js +2 -2
  36. package/dist/portfolio/PortfolioManager.d.ts +5 -0
  37. package/dist/portfolio/PortfolioManager.d.ts.map +1 -1
  38. package/dist/portfolio/PortfolioManager.js +8 -1
  39. package/dist/portfolio/PortfolioRepoManager.js +2 -2
  40. package/dist/portfolio/PortfolioSyncManager.js +5 -5
  41. package/dist/portfolio/RelationshipManager.js +4 -4
  42. package/dist/portfolio/UnifiedIndexManager.js +4 -4
  43. package/dist/portfolio/types/RelationshipTypes.js +2 -2
  44. package/dist/security/InputValidator.d.ts +12 -0
  45. package/dist/security/InputValidator.d.ts.map +1 -1
  46. package/dist/security/InputValidator.js +38 -18
  47. package/dist/security/audit/config/suppressions.js +10 -10
  48. package/dist/security/commandValidator.js +2 -2
  49. package/dist/security/dosProtection.d.ts +123 -0
  50. package/dist/security/dosProtection.d.ts.map +1 -0
  51. package/dist/security/dosProtection.js +392 -0
  52. package/dist/security/pathValidator.js +2 -2
  53. package/dist/security/secureYamlParser.d.ts.map +1 -1
  54. package/dist/security/secureYamlParser.js +4 -3
  55. package/dist/security/tokenManager.js +10 -10
  56. package/dist/security/validators/unicodeValidator.js +2 -2
  57. package/dist/security/yamlValidator.js +3 -3
  58. package/dist/sync/PortfolioDownloader.js +2 -2
  59. package/dist/sync/PortfolioSyncComparer.js +2 -2
  60. package/dist/tools/portfolio/PortfolioElementAdapter.js +3 -3
  61. package/dist/tools/portfolio/submitToPortfolioTool.js +14 -14
  62. package/dist/utils/EarlyTerminationSearch.d.ts +1 -1
  63. package/dist/utils/EarlyTerminationSearch.d.ts.map +1 -1
  64. package/dist/utils/EarlyTerminationSearch.js +3 -3
  65. package/dist/utils/ElementFormatter.d.ts +1 -0
  66. package/dist/utils/ElementFormatter.d.ts.map +1 -1
  67. package/dist/utils/ElementFormatter.js +21 -13
  68. package/dist/utils/GitHubRateLimiter.d.ts +6 -0
  69. package/dist/utils/GitHubRateLimiter.d.ts.map +1 -1
  70. package/dist/utils/GitHubRateLimiter.js +20 -5
  71. package/dist/utils/RateLimiter.js +2 -2
  72. package/dist/utils/SecureDownloader.js +2 -2
  73. package/dist/utils/fileOperations.d.ts +6 -1
  74. package/dist/utils/fileOperations.d.ts.map +1 -1
  75. package/dist/utils/fileOperations.js +29 -5
  76. package/dist/utils/filesystem.js +6 -6
  77. package/dist/utils/searchUtils.js +2 -2
  78. package/dist/utils/version.js +3 -3
  79. package/package.json +1 -1
@@ -75,7 +75,7 @@ export class SecureYamlParser {
75
75
  if (!matchesPattern) {
76
76
  // Fall back to Date.parse for other formats, but be more lenient
77
77
  const parsed = Date.parse(v);
78
- return !isNaN(parsed) && parsed > 0; // Ensure it's a valid positive timestamp
78
+ return !Number.isNaN(parsed) && parsed > 0; // Ensure it's a valid positive timestamp
79
79
  }
80
80
  return true;
81
81
  },
@@ -125,7 +125,8 @@ export class SecureYamlParser {
125
125
  throw new SecurityError('YAML frontmatter exceeds maximum allowed size', 'medium');
126
126
  }
127
127
  // 4. Pre-parse security validation
128
- if (!ContentValidator.validateYamlContent(yamlContent)) {
128
+ // FIX (Issue #1211): Only validate content if validateContent option is true
129
+ if (opts.validateContent && !ContentValidator.validateYamlContent(yamlContent)) {
129
130
  SecurityMonitor.logSecurityEvent({
130
131
  type: 'YAML_INJECTION_ATTEMPT',
131
132
  severity: 'CRITICAL',
@@ -266,4 +267,4 @@ export class SecureYamlParser {
266
267
  });
267
268
  }
268
269
  }
269
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJlWWFtbFBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZWN1cml0eS9zZWN1cmVZYW1sUGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ0c7QUFFSCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQWdCdkQsTUFBTSxPQUFPLGdCQUFnQjtJQUNuQixNQUFNLENBQVUsZUFBZSxHQUF1QjtRQUM1RCxXQUFXLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBTyxnQkFBZ0I7UUFDN0MsY0FBYyxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUcsa0JBQWtCO1FBQ2hELGVBQWUsRUFBRSxJQUFJO1FBQ3JCLGNBQWMsRUFBRSxJQUFJLENBQVMscUNBQXFDO0tBQ25FLENBQUM7SUFFRixtR0FBbUc7SUFDM0YsTUFBTSxDQUFVLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBRXZELG9EQUFvRDtJQUM1QyxNQUFNLENBQVUsZ0JBQWdCLEdBQTRDO1FBQ2xGLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksR0FBRztRQUNyRCxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLEdBQUc7UUFDNUQsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxP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S0FBSyxJQUFJLEVBQUUsQ0FBQzs0QkFDbEQsT0FBTyxFQUFFLENBQUM7d0JBQ1osQ0FBQzt3QkFDRCxPQUFPLE1BQWdCLENBQUM7b0JBQzFCLENBQUM7b0JBQ0QsU0FBUyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7d0JBQ3RCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7NEJBQ3BCLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVzs0QkFDeEIsV0FBVyxFQUFFLElBQUk7NEJBQ2pCLE1BQU0sRUFBRSxJQUFJO3lCQUNiLENBQUMsQ0FBQztvQkFDTCxDQUFDO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTZWN1cmUgWUFNTCBQYXJzZXIgZm9yIERvbGxob3VzZU1DUCAtIEZvciBNYXJrZG93biBGaWxlcyB3aXRoIFlBTUwgRnJvbnRtYXR0ZXJcbiAqIFxuICogSU1QT1JUQU5UOiBUaGlzIHBhcnNlciBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIE1hcmtkb3duIGZpbGVzIHdpdGggWUFNTCBmcm9udG1hdHRlclxuICogKHRoZSBmb3JtYXQgdXNlZCBieSBwZXJzb25hcywgc2tpbGxzLCB0ZW1wbGF0ZXMsIGFuZCBvdGhlciBlbGVtZW50cykuXG4gKiBcbiAqIFVTRSBUSElTIEZPUjpcbiAqIC0gUGVyc29uYSBmaWxlcyAoZS5nLiwgY3JlYXRpdmUtd3JpdGVyLm1kKVxuICogLSBTa2lsbCBmaWxlcyAoZS5nLiwgY29kZS1yZXZpZXcubWQpXG4gKiAtIFRlbXBsYXRlIGZpbGVzIChlLmcuLCBtZWV0aW5nLW5vdGVzLm1kKVxuICogLSBBbnkgTWFya2Rvd24gZmlsZSB3aXRoIFlBTUwgZnJvbnRtYXR0ZXIgYmV0d2VlbiAtLS0gbWFya2Vyc1xuICogXG4gKiBETyBOT1QgVVNFIFRISVMgRk9SOlxuICogLSBQdXJlIFlBTUwgY29uZmlndXJhdGlvbiBmaWxlcyAodXNlIGpzLXlhbWwgZGlyZWN0bHkgd2l0aCBGQUlMU0FGRV9TQ0hFTUEpXG4gKiAtIEpTT04gZmlsZXNcbiAqIC0gUGxhaW4gdGV4dCBmaWxlcyB3aXRob3V0IGZyb250bWF0dGVyXG4gKiBcbiAqIEZJTEUgRk9STUFUIEVYUEVDVEVEOlxuICogYGBgXG4gKiAtLS1cbiAqIG5hbWU6IEVsZW1lbnQgTmFtZVxuICogZGVzY3JpcHRpb246IEVsZW1lbnQgZGVzY3JpcHRpb25cbiAqIHZlcnNpb246IDEuMC4wXG4gKiAtLS1cbiAqIFxuICogIyBNYXJrZG93biBjb250ZW50IGhlcmVcbiAqIFRoZSBhY3R1YWwgY29udGVudC9pbnN0cnVjdGlvbnMgZ28gaGVyZS4uLlxuICogYGBgXG4gKiBcbiAqIFByb3ZpZGVzIHNhZmUgWUFNTCBwYXJzaW5nIHRoYXQgcHJldmVudHMgZGVzZXJpYWxpemF0aW9uIGF0dGFja3NcbiAqIGJ5IHVzaW5nIGEgcmVzdHJpY3RlZCBzY2hlbWEgYW5kIHByZS12YWxpZGF0aW9uLlxuICogXG4gKiBTZWN1cml0eTogU0VDLTAwMyAtIFlBTUwgcGFyc2luZyB2dWxuZXJhYmlsaXR5IHByb3RlY3Rpb25cbiAqL1xuXG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0IG1hdHRlciBmcm9tICdncmF5LW1hdHRlcic7XG5pbXBvcnQgeyBTZWN1cml0eUVycm9yIH0gZnJvbSAnLi4vZXJyb3JzL1NlY3VyaXR5RXJyb3IuanMnO1xuaW1wb3J0IHsgQ29udGVudFZhbGlkYXRvciB9IGZyb20gJy4vY29udGVudFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuL3NlY3VyaXR5TW9uaXRvci5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdXJlUGFyc2VPcHRpb25zIHtcbiAgbWF4WWFtbFNpemU/OiBudW1iZXI7XG4gIG1heENvbnRlbnRTaXplPzogbnVtYmVyO1xuICBhbGxvd2VkS2V5cz86IHN0cmluZ1tdO1xuICB2YWxpZGF0ZUNvbnRlbnQ/OiBib29sZWFuO1xuICB2YWxpZGF0ZUZpZWxkcz86IGJvb2xlYW47IC8vIFdoZXRoZXIgdG8gYXBwbHkgZmllbGQtc3BlY2lmaWMgdmFsaWRhdG9ycyAoZm9yIHBlcnNvbmEgbWV0YWRhdGEpXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkQ29udGVudCB7XG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgZXhjZXJwdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFNlY3VyZVlhbWxQYXJzZXIge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX09QVElPTlM6IFNlY3VyZVBhcnNlT3B0aW9ucyA9IHtcbiAgICBtYXhZYW1sU2l6ZTogNjQgKiAxMDI0LCAgICAgIC8vIDY0S0IgZm9yIFlBTUxcbiAgICBtYXhDb250ZW50U2l6ZTogMTAyNCAqIDEwMjQsICAvLyAxTUIgZm9yIGNvbnRlbnRcbiAgICB2YWxpZGF0ZUNvbnRlbnQ6IHRydWUsXG4gICAgdmFsaWRhdGVGaWVsZHM6IHRydWUgICAgICAgICAvLyBCeSBkZWZhdWx0LCBhcHBseSBmaWVsZCB2YWxpZGF0b3JzXG4gIH07XG5cbiAgLy8gQWxsb3dlZCBZQU1MIHR5cGVzIC0gdXNpbmcgQ09SRV9TQ0hFTUEgKHNhZmUgc3Vic2V0IHdpdGggYmFzaWMgdHlwZXMgbGlrZSBib29sZWFucyBhbmQgaW50ZWdlcnMpXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFNBRkVfU0NIRU1BID0geWFtbC5DT1JFX1NDSEVNQTtcblxuICAvLyBBZGRpdGlvbmFsIHZhbGlkYXRpb24gZm9yIHNwZWNpZmljIHBlcnNvbmEgZmllbGRzXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEZJRUxEX1ZBTElEQVRPUlM6IFJlY29yZDxzdHJpbmcsICh2YWx1ZTogYW55KSA9PiBib29sZWFuPiA9IHtcbiAgICBuYW1lOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYubGVuZ3RoIDw9IDEwMCxcbiAgICBkZXNjcmlwdGlvbjogKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2Lmxlbmd0aCA8PSA1MDAsXG4gICAgYXV0aG9yOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYubGVuZ3RoIDw9IDEwMCxcbiAgICB2ZXJzaW9uOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIC9eXFxkK1xcLlxcZCsoXFwuXFxkKyk/KC1bYS16QS1aMC05Li1dKyk/JC8udGVzdCh2KSxcbiAgICBjYXRlZ29yeTogKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2Lmxlbmd0aCA8PSA1MCxcbiAgICBhZ2VfcmF0aW5nOiAodikgPT4gWydhbGwnLCAnMTMrJywgJzE4KyddLmluY2x1ZGVzKHYpLFxuICAgIHByaWNlOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmICh2ID09PSAnZnJlZScgfHwgL15cXCRcXGQrXFwuXFxkezJ9JC8udGVzdCh2KSksXG4gICAgYWlfZ2VuZXJhdGVkOiAodikgPT4gdHlwZW9mIHYgPT09ICdib29sZWFuJyB8fCB2ID09PSAndHJ1ZScgfHwgdiA9PT0gJ2ZhbHNlJyxcbiAgICBnZW5lcmF0aW9uX21ldGhvZDogKHYpID0+IFsnaHVtYW4nLCAnQ2hhdEdQVCcsICdDbGF1ZGUnLCAnaHlicmlkJ10uaW5jbHVkZXModiksXG4gICAgY3JlYXRlZF9kYXRlOiAodikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2ICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuICAgICAgXG4gICAgICAvLyBNb3JlIGZsZXhpYmxlIGRhdGUgdmFsaWRhdGlvbiAtIGFjY2VwdCBjb21tb24gZm9ybWF0c1xuICAgICAgLy8gSVNPODYwMSwgVVMgZm9ybWF0LCBFdXJvcGVhbiBmb3JtYXQsIHNpbXBsZSBkYXRlc1xuICAgICAgY29uc3QgZGF0ZVBhdHRlcm5zID0gW1xuICAgICAgICAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC8sIC8vIFlZWVktTU0tRERcbiAgICAgICAgL15cXGR7NH0tXFxkezJ9LVxcZHsyfVRcXGR7Mn06XFxkezJ9OlxcZHsyfS8sIC8vIElTTzg2MDEgd2l0aCB0aW1lXG4gICAgICAgIC9eXFxkezEsMn1cXC9cXGR7MSwyfVxcL1xcZHs0fSQvLCAvLyBNTS9ERC9ZWVlZIG9yIE0vRC9ZWVlZXG4gICAgICAgIC9eXFxkezEsMn0tXFxkezEsMn0tXFxkezR9JC8sIC8vIE1NLURELVlZWVkgb3IgTS1ELVlZWVlcbiAgICAgICAgL15cXGR7MSwyfVxcLlxcZHsxLDJ9XFwuXFxkezR9JC8sIC8vIERELk1NLllZWVkgKEV1cm9wZWFuKVxuICAgICAgICAvXihKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXHMrXFxkezEsMn0sP1xccytcXGR7NH0kL2kgLy8gTW9udGggREQsIFlZWVlcbiAgICAgIF07XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGl0IG1hdGNoZXMgY29tbW9uIHBhdHRlcm5zIGZpcnN0XG4gICAgICBjb25zdCBtYXRjaGVzUGF0dGVybiA9IGRhdGVQYXR0ZXJucy5zb21lKHBhdHRlcm4gPT4gcGF0dGVybi50ZXN0KHYudHJpbSgpKSk7XG4gICAgICBpZiAoIW1hdGNoZXNQYXR0ZXJuKSB7XG4gICAgICAgIC8vIEZhbGwgYmFjayB0byBEYXRlLnBhcnNlIGZvciBvdGhlciBmb3JtYXRzLCBidXQgYmUgbW9yZSBsZW5pZW50XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IERhdGUucGFyc2Uodik7XG4gICAgICAgIHJldHVybiAhaXNOYU4ocGFyc2VkKSAmJiBwYXJzZWQgPiAwOyAvLyBFbnN1cmUgaXQncyBhIHZhbGlkIHBvc2l0aXZlIHRpbWVzdGFtcFxuICAgICAgfVxuICAgICAgXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIHRyaWdnZXJzOiAodikgPT4gQXJyYXkuaXNBcnJheSh2KSAmJiB2LmV2ZXJ5KHQgPT4gdHlwZW9mIHQgPT09ICdzdHJpbmcnICYmIHQubGVuZ3RoIDw9IDUwKSxcbiAgICBjb250ZW50X2ZsYWdzOiAodikgPT4gQXJyYXkuaXNBcnJheSh2KSAmJiB2LmV2ZXJ5KGYgPT4gdHlwZW9mIGYgPT09ICdzdHJpbmcnICYmIGYubGVuZ3RoIDw9IDUwKVxuICB9O1xuXG4gIC8qKlxuICAgKiBQYXJzZSBhIE1hcmtkb3duIGZpbGUgd2l0aCBZQU1MIGZyb250bWF0dGVyIChTZWN1cmVseSlcbiAgICogXG4gICAqIEBwYXJhbSBpbnB1dCAtIFRoZSBmdWxsIGNvbnRlbnQgb2YgYSBNYXJrZG93biBmaWxlIHdpdGggWUFNTCBmcm9udG1hdHRlclxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFBhcnNpbmcgb3B0aW9ucyBmb3Igc2VjdXJpdHkgYW5kIHZhbGlkYXRpb25cbiAgICogQHJldHVybnMgUGFyc2VkQ29udGVudCB3aXRoIHNlcGFyYXRlZCBZQU1MIGRhdGEgYW5kIE1hcmtkb3duIGNvbnRlbnRcbiAgICogXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gRm9yIGEgcGVyc29uYSBmaWxlOlxuICAgKiBjb25zdCBwZXJzb25hRmlsZSA9IGAtLS1cbiAgICogbmFtZTogQ3JlYXRpdmUgV3JpdGVyXG4gICAqIGRlc2NyaXB0aW9uOiBBIGNyZWF0aXZlIHdyaXRpbmcgYXNzaXN0YW50XG4gICAqIC0tLVxuICAgKiBZb3UgYXJlIGEgY3JlYXRpdmUgd3JpdGVyLi4uYDtcbiAgICogXG4gICAqIGNvbnN0IHJlc3VsdCA9IFNlY3VyZVlhbWxQYXJzZXIucGFyc2UocGVyc29uYUZpbGUpO1xuICAgKiAvLyByZXN1bHQuZGF0YSA9IHsgbmFtZTogJ0NyZWF0aXZlIFdyaXRlcicsIGRlc2NyaXB0aW9uOiAnLi4uJyB9XG4gICAqIC8vIHJlc3VsdC5jb250ZW50ID0gJ1lvdSBhcmUgYSBjcmVhdGl2ZSB3cml0ZXIuLi4nXG4gICAqIGBgYFxuICAgKi9cbiAgc3RhdGljIHBhcnNlKGlucHV0OiBzdHJpbmcsIG9wdGlvbnM6IFNlY3VyZVBhcnNlT3B0aW9ucyA9IHt9KTogUGFyc2VkQ29udGVudCB7XG4gICAgY29uc3Qgb3B0cyA9IHsgLi4udGhpcy5ERUZBVUxUX09QVElPTlMsIC4uLm9wdGlvbnMgfTtcblxuICAgIC8vIDEuIFNpemUgdmFsaWRhdGlvblxuICAgIGlmIChpbnB1dC5sZW5ndGggPiAob3B0cy5tYXhDb250ZW50U2l6ZSB8fCB0aGlzLkRFRkFVTFRfT1BUSU9OUy5tYXhDb250ZW50U2l6ZSEpKSB7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcignQ29udGVudCBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplJywgJ21lZGl1bScpO1xuICAgIH1cblxuICAgIC8vIDIuIEV4dHJhY3QgZnJvbnRtYXR0ZXIgYm91bmRhcmllc1xuICAgIGNvbnN0IGZyb250bWF0dGVyTWF0Y2ggPSBpbnB1dC5tYXRjaCgvXi0tLVxcbihbXFxzXFxTXSo/KVxcbi0tLS8pO1xuICAgIGlmICghZnJvbnRtYXR0ZXJNYXRjaCkge1xuICAgICAgLy8gTm8gZnJvbnRtYXR0ZXIsIHJldHVybiBlbXB0eSBkYXRhXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgY29udGVudDogaW5wdXRcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgeWFtbENvbnRlbnQgPSBmcm9udG1hdHRlck1hdGNoWzFdO1xuICAgIGNvbnN0IG1hcmtkb3duQ29udGVudCA9IGlucHV0LnN1YnN0cmluZyhmcm9udG1hdHRlck1hdGNoWzBdLmxlbmd0aCk7XG5cbiAgICAvLyAzLiBWYWxpZGF0ZSBZQU1MIHNpemVcbiAgICBpZiAoeWFtbENvbnRlbnQubGVuZ3RoID4gKG9wdHMubWF4WWFtbFNpemUgfHwgdGhpcy5ERUZBVUxUX09QVElPTlMubWF4WWFtbFNpemUhKSkge1xuICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoJ1lBTUwgZnJvbnRtYXR0ZXIgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgc2l6ZScsICdtZWRpdW0nKTtcbiAgICB9XG5cbiAgICAvLyA0LiBQcmUtcGFyc2Ugc2VjdXJpdHkgdmFsaWRhdGlvblxuICAgIGlmICghQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZVlhbWxDb250ZW50KHlhbWxDb250ZW50KSkge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnWUFNTF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgIHNldmVyaXR5OiAnQ1JJVElDQUwnLFxuICAgICAgICBzb3VyY2U6ICdzZWN1cmVfeWFtbF9wYXJzZXInLFxuICAgICAgICBkZXRhaWxzOiAnTWFsaWNpb3VzIFlBTUwgcGF0dGVybiBkZXRlY3RlZCBkdXJpbmcgcGFyc2luZydcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoJ01hbGljaW91cyBZQU1MIGNvbnRlbnQgZGV0ZWN0ZWQnLCAnY3JpdGljYWwnKTtcbiAgICB9XG5cbiAgICAvLyA1LiBQYXJzZSB3aXRoIHNhZmUgc2NoZW1hXG4gICAgbGV0IGRhdGE6IGFueTtcbiAgICB0cnkge1xuICAgICAgZGF0YSA9IHlhbWwubG9hZCh5YW1sQ29udGVudCwge1xuICAgICAgICBzY2hlbWE6IHRoaXMuU0FGRV9TQ0hFTUEsXG4gICAgICAgIGpzb246IGZhbHNlLCAgLy8gRG9uJ3QgYWxsb3cgSlNPTi1zcGVjaWZpYyB0eXBlc1xuICAgICAgICBvbldhcm5pbmc6ICh3YXJuaW5nKSA9PiB7XG4gICAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgICAgdHlwZTogJ1lBTUxfUEFSU0lOR19XQVJOSU5HJyxcbiAgICAgICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgICAgIHNvdXJjZTogJ3NlY3VyZV95YW1sX3BhcnNlcicsXG4gICAgICAgICAgICBkZXRhaWxzOiBgWUFNTCB3YXJuaW5nOiAke3dhcm5pbmcubWVzc2FnZX1gXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcihgWUFNTCBwYXJzaW5nIGZhaWxlZDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gLCAnaGlnaCcpO1xuICAgIH1cblxuICAgIC8vIDYuIEVuc3VyZSBkYXRhIGlzIGFuIG9iamVjdFxuICAgIGlmICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcgfHwgZGF0YSA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcignWUFNTCBtdXN0IGNvbnRhaW4gYW4gb2JqZWN0IGF0IHJvb3QgbGV2ZWwnLCAnbWVkaXVtJyk7XG4gICAgfVxuXG4gICAgLy8gNy4gVmFsaWRhdGUgYWxsb3dlZCBrZXlzIGlmIHNwZWNpZmllZFxuICAgIGlmIChvcHRzLmFsbG93ZWRLZXlzKSB7XG4gICAgICBjb25zdCBpbnZhbGlkS2V5cyA9IE9iamVjdC5rZXlzKGRhdGEpLmZpbHRlcihrZXkgPT4gIW9wdHMuYWxsb3dlZEtleXMhLmluY2x1ZGVzKGtleSkpO1xuICAgICAgaWYgKGludmFsaWRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoYEludmFsaWQgWUFNTCBrZXlzIGRldGVjdGVkOiAke2ludmFsaWRLZXlzLmpvaW4oJywgJyl9YCwgJ21lZGl1bScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDguIFZhbGlkYXRlIGZpZWxkIHR5cGVzIGFuZCBjb250ZW50XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgIC8vIENoZWNrIGZpZWxkLXNwZWNpZmljIHZhbGlkYXRvcnMgb25seSBpZiBmaWVsZCB2YWxpZGF0aW9uIGlzIGVuYWJsZWRcbiAgICAgIGlmIChvcHRzLnZhbGlkYXRlRmllbGRzICYmIHRoaXMuRklFTERfVkFMSURBVE9SU1trZXldICYmICF0aGlzLkZJRUxEX1ZBTElEQVRPUlNba2V5XSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoYEludmFsaWQgdmFsdWUgZm9yIGZpZWxkICcke2tleX0nYCwgJ21lZGl1bScpO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBzdHJpbmcgZmllbGRzIGZvciBpbmplY3Rpb24gcGF0dGVybnNcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIG9wdHMudmFsaWRhdGVDb250ZW50KSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSBDb250ZW50VmFsaWRhdG9yLnZhbGlkYXRlQW5kU2FuaXRpemUodmFsdWUpO1xuICAgICAgICBpZiAoIXZhbGlkYXRpb24uaXNWYWxpZCAmJiB2YWxpZGF0aW9uLnNldmVyaXR5ID09PSAnY3JpdGljYWwnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoYFNlY3VyaXR5IHRocmVhdCBkZXRlY3RlZCBpbiBmaWVsZCAnJHtrZXl9J2AsICdjcml0aWNhbCcpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlcGxhY2Ugd2l0aCBzYW5pdGl6ZWQgY29udGVudFxuICAgICAgICBkYXRhW2tleV0gPSB2YWxpZGF0aW9uLnNhbml0aXplZENvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gOS4gVmFsaWRhdGUgbWFya2Rvd24gY29udGVudCBpZiByZXF1ZXN0ZWRcbiAgICBsZXQgZmluYWxDb250ZW50ID0gbWFya2Rvd25Db250ZW50O1xuICAgIGlmIChvcHRzLnZhbGlkYXRlQ29udGVudCkge1xuICAgICAgY29uc3QgY29udGVudFZhbGlkYXRpb24gPSBDb250ZW50VmFsaWRhdG9yLnZhbGlkYXRlQW5kU2FuaXRpemUobWFya2Rvd25Db250ZW50KTtcbiAgICAgIGlmICghY29udGVudFZhbGlkYXRpb24uaXNWYWxpZCAmJiBjb250ZW50VmFsaWRhdGlvbi5zZXZlcml0eSA9PT0gJ2NyaXRpY2FsJykge1xuICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcignU2VjdXJpdHkgdGhyZWF0IGRldGVjdGVkIGluIGNvbnRlbnQnLCAnY3JpdGljYWwnKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsQ29udGVudCA9IGNvbnRlbnRWYWxpZGF0aW9uLnNhbml0aXplZENvbnRlbnQgfHwgbWFya2Rvd25Db250ZW50O1xuICAgIH1cblxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdZQU1MX1BBUlNFX1NVQ0NFU1MnLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnc2VjdXJlX3lhbWxfcGFyc2VyJyxcbiAgICAgIGRldGFpbHM6IGBTdWNjZXNzZnVsbHkgcGFyc2VkIFlBTUwgd2l0aCAke09iamVjdC5rZXlzKGRhdGEpLmxlbmd0aH0gZmllbGRzYFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGEsXG4gICAgICBjb250ZW50OiBmaW5hbENvbnRlbnRcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHNlY3VyZSBncmF5LW1hdHRlciBjb21wYXRpYmxlIHBhcnNlclxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVNlY3VyZU1hdHRlclBhcnNlcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2U6IChpbnB1dDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucGFyc2UoaW5wdXQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhLFxuICAgICAgICAgIGNvbnRlbnQ6IHJlc3VsdC5jb250ZW50LFxuICAgICAgICAgIGV4Y2VycHQ6IHJlc3VsdC5leGNlcnB0LFxuICAgICAgICAgIG9yaWc6IGlucHV0XG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgc3RyaW5naWZ5OiAoY29udGVudDogc3RyaW5nLCBkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgLy8gVmFsaWRhdGUgZGF0YSBiZWZvcmUgc3RyaW5naWZ5aW5nXG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSBDb250ZW50VmFsaWRhdG9yLnZhbGlkYXRlTWV0YWRhdGEoZGF0YSk7XG4gICAgICAgIGlmICghdmFsaWRhdGlvbi5pc1ZhbGlkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoJ0Nhbm5vdCBzdHJpbmdpZnkgY29udGVudCB3aXRoIHNlY3VyaXR5IHRocmVhdHMnLCAnaGlnaCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXNlIHNhZmUgWUFNTCBkdW1wXG4gICAgICAgIGNvbnN0IHlhbWxTdHIgPSB5YW1sLmR1bXAoZGF0YSwge1xuICAgICAgICAgIHNjaGVtYTogdGhpcy5TQUZFX1NDSEVNQSxcbiAgICAgICAgICBza2lwSW52YWxpZDogdHJ1ZSxcbiAgICAgICAgICBub1JlZnM6IHRydWUsXG4gICAgICAgICAgbm9Db21wYXRNb2RlOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBgLS0tXFxuJHt5YW1sU3RyfS0tLVxcbiR7Y29udGVudH1gO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2FmZSB3cmFwcGVyIGZvciBncmF5LW1hdHRlciB3aXRoIHNlY3VyaXR5IHZhbGlkYXRpb25zXG4gICAqL1xuICBzdGF0aWMgc2FmZU1hdHRlcihpbnB1dDogc3RyaW5nLCBvcHRpb25zPzogbWF0dGVyLkdyYXlNYXR0ZXJPcHRpb248c3RyaW5nLCBhbnk+KTogbWF0dGVyLkdyYXlNYXR0ZXJGaWxlPHN0cmluZz4ge1xuICAgIC8vIEZpcnN0LCB1c2Ugb3VyIHNlY3VyZSBwYXJzZXJcbiAgICBjb25zdCBzZWN1cmVQYXJzZWQgPSB0aGlzLnBhcnNlKGlucHV0KTtcblxuICAgIC8vIFRoZW4gdXNlIGdyYXktbWF0dGVyIHdpdGggY3VzdG9tIGVuZ2luZXNcbiAgICByZXR1cm4gbWF0dGVyKGlucHV0LCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgZW5naW5lczoge1xuICAgICAgICB5YW1sOiB7XG4gICAgICAgICAgcGFyc2U6IChzdHI6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgLy8gVXNlIG91ciBzZWN1cmUgWUFNTCBwYXJzaW5nXG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSB5YW1sLmxvYWQoc3RyLCB7XG4gICAgICAgICAgICAgIHNjaGVtYTogdGhpcy5TQUZFX1NDSEVNQSxcbiAgICAgICAgICAgICAganNvbjogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gRW5zdXJlIGl0J3MgYW4gb2JqZWN0XG4gICAgICAgICAgICBpZiAodHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcgfHwgcGFyc2VkID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwYXJzZWQgYXMgb2JqZWN0O1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RyaW5naWZ5OiAob2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB5YW1sLmR1bXAob2JqLCB7XG4gICAgICAgICAgICAgIHNjaGVtYTogdGhpcy5TQUZFX1NDSEVNQSxcbiAgICAgICAgICAgICAgc2tpcEludmFsaWQ6IHRydWUsXG4gICAgICAgICAgICAgIG5vUmVmczogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0iXX0=
270
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJlWWFtbFBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZWN1cml0eS9zZWN1cmVZYW1sUGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ0c7QUFFSCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQWdCdkQsTUFBTSxPQUFPLGdCQUFnQjtJQUNuQixNQUFNLENBQVUsZUFBZSxHQUF1QjtRQUM1RCxXQUFXLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBTyxnQkFBZ0I7UUFDN0MsY0FBYyxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUcsa0JBQWtCO1FBQ2hELGVBQWUsRUFBRSxJQUFJO1FBQ3JCLGNBQWMsRUFBRSxJQUFJLENBQVMscUNBQXFDO0tBQ25FLENBQUM7SUFFRixtR0FBbUc7SUFDM0YsTUFBTSxDQUFVLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBRXZELG9EQUFvRDtJQUM1QyxNQUFNLENBQVUsZ0JBQWdCLEdBQTRDO1FBQ2xGLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksR0FBRztRQUNyRCxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLEdBQUc7UUFDNUQsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxP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O3dCQUN4QixJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUM7NEJBQ2xELE9BQU8sRUFBRSxDQUFDO3dCQUNaLENBQUM7d0JBQ0QsT0FBTyxNQUFnQixDQUFDO29CQUMxQixDQUFDO29CQUNELFNBQVMsRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO3dCQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFOzRCQUNwQixNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVc7NEJBQ3hCLFdBQVcsRUFBRSxJQUFJOzRCQUNqQixNQUFNLEVBQUUsSUFBSTt5QkFDYixDQUFDLENBQUM7b0JBQ0wsQ0FBQztpQkFDRjthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2VjdXJlIFlBTUwgUGFyc2VyIGZvciBEb2xsaG91c2VNQ1AgLSBGb3IgTWFya2Rvd24gRmlsZXMgd2l0aCBZQU1MIEZyb250bWF0dGVyXG4gKiBcbiAqIElNUE9SVEFOVDogVGhpcyBwYXJzZXIgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBNYXJrZG93biBmaWxlcyB3aXRoIFlBTUwgZnJvbnRtYXR0ZXJcbiAqICh0aGUgZm9ybWF0IHVzZWQgYnkgcGVyc29uYXMsIHNraWxscywgdGVtcGxhdGVzLCBhbmQgb3RoZXIgZWxlbWVudHMpLlxuICogXG4gKiBVU0UgVEhJUyBGT1I6XG4gKiAtIFBlcnNvbmEgZmlsZXMgKGUuZy4sIGNyZWF0aXZlLXdyaXRlci5tZClcbiAqIC0gU2tpbGwgZmlsZXMgKGUuZy4sIGNvZGUtcmV2aWV3Lm1kKVxuICogLSBUZW1wbGF0ZSBmaWxlcyAoZS5nLiwgbWVldGluZy1ub3Rlcy5tZClcbiAqIC0gQW55IE1hcmtkb3duIGZpbGUgd2l0aCBZQU1MIGZyb250bWF0dGVyIGJldHdlZW4gLS0tIG1hcmtlcnNcbiAqIFxuICogRE8gTk9UIFVTRSBUSElTIEZPUjpcbiAqIC0gUHVyZSBZQU1MIGNvbmZpZ3VyYXRpb24gZmlsZXMgKHVzZSBqcy15YW1sIGRpcmVjdGx5IHdpdGggRkFJTFNBRkVfU0NIRU1BKVxuICogLSBKU09OIGZpbGVzXG4gKiAtIFBsYWluIHRleHQgZmlsZXMgd2l0aG91dCBmcm9udG1hdHRlclxuICogXG4gKiBGSUxFIEZPUk1BVCBFWFBFQ1RFRDpcbiAqIGBgYFxuICogLS0tXG4gKiBuYW1lOiBFbGVtZW50IE5hbWVcbiAqIGRlc2NyaXB0aW9uOiBFbGVtZW50IGRlc2NyaXB0aW9uXG4gKiB2ZXJzaW9uOiAxLjAuMFxuICogLS0tXG4gKiBcbiAqICMgTWFya2Rvd24gY29udGVudCBoZXJlXG4gKiBUaGUgYWN0dWFsIGNvbnRlbnQvaW5zdHJ1Y3Rpb25zIGdvIGhlcmUuLi5cbiAqIGBgYFxuICogXG4gKiBQcm92aWRlcyBzYWZlIFlBTUwgcGFyc2luZyB0aGF0IHByZXZlbnRzIGRlc2VyaWFsaXphdGlvbiBhdHRhY2tzXG4gKiBieSB1c2luZyBhIHJlc3RyaWN0ZWQgc2NoZW1hIGFuZCBwcmUtdmFsaWRhdGlvbi5cbiAqIFxuICogU2VjdXJpdHk6IFNFQy0wMDMgLSBZQU1MIHBhcnNpbmcgdnVsbmVyYWJpbGl0eSBwcm90ZWN0aW9uXG4gKi9cblxuaW1wb3J0ICogYXMgeWFtbCBmcm9tICdqcy15YW1sJztcbmltcG9ydCBtYXR0ZXIgZnJvbSAnZ3JheS1tYXR0ZXInO1xuaW1wb3J0IHsgU2VjdXJpdHlFcnJvciB9IGZyb20gJy4uL2Vycm9ycy9TZWN1cml0eUVycm9yLmpzJztcbmltcG9ydCB7IENvbnRlbnRWYWxpZGF0b3IgfSBmcm9tICcuL2NvbnRlbnRWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi9zZWN1cml0eU1vbml0b3IuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyZVBhcnNlT3B0aW9ucyB7XG4gIG1heFlhbWxTaXplPzogbnVtYmVyO1xuICBtYXhDb250ZW50U2l6ZT86IG51bWJlcjtcbiAgYWxsb3dlZEtleXM/OiBzdHJpbmdbXTtcbiAgdmFsaWRhdGVDb250ZW50PzogYm9vbGVhbjtcbiAgdmFsaWRhdGVGaWVsZHM/OiBib29sZWFuOyAvLyBXaGV0aGVyIHRvIGFwcGx5IGZpZWxkLXNwZWNpZmljIHZhbGlkYXRvcnMgKGZvciBwZXJzb25hIG1ldGFkYXRhKVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZENvbnRlbnQge1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBjb250ZW50OiBzdHJpbmc7XG4gIGV4Y2VycHQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBTZWN1cmVZYW1sUGFyc2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9PUFRJT05TOiBTZWN1cmVQYXJzZU9wdGlvbnMgPSB7XG4gICAgbWF4WWFtbFNpemU6IDY0ICogMTAyNCwgICAgICAvLyA2NEtCIGZvciBZQU1MXG4gICAgbWF4Q29udGVudFNpemU6IDEwMjQgKiAxMDI0LCAgLy8gMU1CIGZvciBjb250ZW50XG4gICAgdmFsaWRhdGVDb250ZW50OiB0cnVlLFxuICAgIHZhbGlkYXRlRmllbGRzOiB0cnVlICAgICAgICAgLy8gQnkgZGVmYXVsdCwgYXBwbHkgZmllbGQgdmFsaWRhdG9yc1xuICB9O1xuXG4gIC8vIEFsbG93ZWQgWUFNTCB0eXBlcyAtIHVzaW5nIENPUkVfU0NIRU1BIChzYWZlIHN1YnNldCB3aXRoIGJhc2ljIHR5cGVzIGxpa2UgYm9vbGVhbnMgYW5kIGludGVnZXJzKVxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBTQUZFX1NDSEVNQSA9IHlhbWwuQ09SRV9TQ0hFTUE7XG5cbiAgLy8gQWRkaXRpb25hbCB2YWxpZGF0aW9uIGZvciBzcGVjaWZpYyBwZXJzb25hIGZpZWxkc1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBGSUVMRF9WQUxJREFUT1JTOiBSZWNvcmQ8c3RyaW5nLCAodmFsdWU6IGFueSkgPT4gYm9vbGVhbj4gPSB7XG4gICAgbmFtZTogKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2Lmxlbmd0aCA8PSAxMDAsXG4gICAgZGVzY3JpcHRpb246ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgdi5sZW5ndGggPD0gNTAwLFxuICAgIGF1dGhvcjogKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2Lmxlbmd0aCA8PSAxMDAsXG4gICAgdmVyc2lvbjogKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiAvXlxcZCtcXC5cXGQrKFxcLlxcZCspPygtW2EtekEtWjAtOS4tXSspPyQvLnRlc3QodiksXG4gICAgY2F0ZWdvcnk6ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgdi5sZW5ndGggPD0gNTAsXG4gICAgYWdlX3JhdGluZzogKHYpID0+IFsnYWxsJywgJzEzKycsICcxOCsnXS5pbmNsdWRlcyh2KSxcbiAgICBwcmljZTogKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiAodiA9PT0gJ2ZyZWUnIHx8IC9eXFwkXFxkK1xcLlxcZHsyfSQvLnRlc3QodikpLFxuICAgIGFpX2dlbmVyYXRlZDogKHYpID0+IHR5cGVvZiB2ID09PSAnYm9vbGVhbicgfHwgdiA9PT0gJ3RydWUnIHx8IHYgPT09ICdmYWxzZScsXG4gICAgZ2VuZXJhdGlvbl9tZXRob2Q6ICh2KSA9PiBbJ2h1bWFuJywgJ0NoYXRHUFQnLCAnQ2xhdWRlJywgJ2h5YnJpZCddLmluY2x1ZGVzKHYpLFxuICAgIGNyZWF0ZWRfZGF0ZTogKHYpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdiAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTtcbiAgICAgIFxuICAgICAgLy8gTW9yZSBmbGV4aWJsZSBkYXRlIHZhbGlkYXRpb24gLSBhY2NlcHQgY29tbW9uIGZvcm1hdHNcbiAgICAgIC8vIElTTzg2MDEsIFVTIGZvcm1hdCwgRXVyb3BlYW4gZm9ybWF0LCBzaW1wbGUgZGF0ZXNcbiAgICAgIGNvbnN0IGRhdGVQYXR0ZXJucyA9IFtcbiAgICAgICAgL15cXGR7NH0tXFxkezJ9LVxcZHsyfSQvLCAvLyBZWVlZLU1NLUREXG4gICAgICAgIC9eXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn0vLCAvLyBJU084NjAxIHdpdGggdGltZVxuICAgICAgICAvXlxcZHsxLDJ9XFwvXFxkezEsMn1cXC9cXGR7NH0kLywgLy8gTU0vREQvWVlZWSBvciBNL0QvWVlZWVxuICAgICAgICAvXlxcZHsxLDJ9LVxcZHsxLDJ9LVxcZHs0fSQvLCAvLyBNTS1ERC1ZWVlZIG9yIE0tRC1ZWVlZXG4gICAgICAgIC9eXFxkezEsMn1cXC5cXGR7MSwyfVxcLlxcZHs0fSQvLCAvLyBERC5NTS5ZWVlZIChFdXJvcGVhbilcbiAgICAgICAgL14oSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpXFxzK1xcZHsxLDJ9LD9cXHMrXFxkezR9JC9pIC8vIE1vbnRoIERELCBZWVlZXG4gICAgICBdO1xuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiBpdCBtYXRjaGVzIGNvbW1vbiBwYXR0ZXJucyBmaXJzdFxuICAgICAgY29uc3QgbWF0Y2hlc1BhdHRlcm4gPSBkYXRlUGF0dGVybnMuc29tZShwYXR0ZXJuID0+IHBhdHRlcm4udGVzdCh2LnRyaW0oKSkpO1xuICAgICAgaWYgKCFtYXRjaGVzUGF0dGVybikge1xuICAgICAgICAvLyBGYWxsIGJhY2sgdG8gRGF0ZS5wYXJzZSBmb3Igb3RoZXIgZm9ybWF0cywgYnV0IGJlIG1vcmUgbGVuaWVudFxuICAgICAgICBjb25zdCBwYXJzZWQgPSBEYXRlLnBhcnNlKHYpO1xuICAgICAgICByZXR1cm4gIU51bWJlci5pc05hTihwYXJzZWQpICYmIHBhcnNlZCA+IDA7IC8vIEVuc3VyZSBpdCdzIGEgdmFsaWQgcG9zaXRpdmUgdGltZXN0YW1wXG4gICAgICB9XG4gICAgICBcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgdHJpZ2dlcnM6ICh2KSA9PiBBcnJheS5pc0FycmF5KHYpICYmIHYuZXZlcnkodCA9PiB0eXBlb2YgdCA9PT0gJ3N0cmluZycgJiYgdC5sZW5ndGggPD0gNTApLFxuICAgIGNvbnRlbnRfZmxhZ3M6ICh2KSA9PiBBcnJheS5pc0FycmF5KHYpICYmIHYuZXZlcnkoZiA9PiB0eXBlb2YgZiA9PT0gJ3N0cmluZycgJiYgZi5sZW5ndGggPD0gNTApXG4gIH07XG5cbiAgLyoqXG4gICAqIFBhcnNlIGEgTWFya2Rvd24gZmlsZSB3aXRoIFlBTUwgZnJvbnRtYXR0ZXIgKFNlY3VyZWx5KVxuICAgKiBcbiAgICogQHBhcmFtIGlucHV0IC0gVGhlIGZ1bGwgY29udGVudCBvZiBhIE1hcmtkb3duIGZpbGUgd2l0aCBZQU1MIGZyb250bWF0dGVyXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUGFyc2luZyBvcHRpb25zIGZvciBzZWN1cml0eSBhbmQgdmFsaWRhdGlvblxuICAgKiBAcmV0dXJucyBQYXJzZWRDb250ZW50IHdpdGggc2VwYXJhdGVkIFlBTUwgZGF0YSBhbmQgTWFya2Rvd24gY29udGVudFxuICAgKiBcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBGb3IgYSBwZXJzb25hIGZpbGU6XG4gICAqIGNvbnN0IHBlcnNvbmFGaWxlID0gYC0tLVxuICAgKiBuYW1lOiBDcmVhdGl2ZSBXcml0ZXJcbiAgICogZGVzY3JpcHRpb246IEEgY3JlYXRpdmUgd3JpdGluZyBhc3Npc3RhbnRcbiAgICogLS0tXG4gICAqIFlvdSBhcmUgYSBjcmVhdGl2ZSB3cml0ZXIuLi5gO1xuICAgKiBcbiAgICogY29uc3QgcmVzdWx0ID0gU2VjdXJlWWFtbFBhcnNlci5wYXJzZShwZXJzb25hRmlsZSk7XG4gICAqIC8vIHJlc3VsdC5kYXRhID0geyBuYW1lOiAnQ3JlYXRpdmUgV3JpdGVyJywgZGVzY3JpcHRpb246ICcuLi4nIH1cbiAgICogLy8gcmVzdWx0LmNvbnRlbnQgPSAnWW91IGFyZSBhIGNyZWF0aXZlIHdyaXRlci4uLidcbiAgICogYGBgXG4gICAqL1xuICBzdGF0aWMgcGFyc2UoaW5wdXQ6IHN0cmluZywgb3B0aW9uczogU2VjdXJlUGFyc2VPcHRpb25zID0ge30pOiBQYXJzZWRDb250ZW50IHtcbiAgICBjb25zdCBvcHRzID0geyAuLi50aGlzLkRFRkFVTFRfT1BUSU9OUywgLi4ub3B0aW9ucyB9O1xuXG4gICAgLy8gMS4gU2l6ZSB2YWxpZGF0aW9uXG4gICAgaWYgKGlucHV0Lmxlbmd0aCA+IChvcHRzLm1heENvbnRlbnRTaXplIHx8IHRoaXMuREVGQVVMVF9PUFRJT05TLm1heENvbnRlbnRTaXplISkpIHtcbiAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKCdDb250ZW50IGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIHNpemUnLCAnbWVkaXVtJyk7XG4gICAgfVxuXG4gICAgLy8gMi4gRXh0cmFjdCBmcm9udG1hdHRlciBib3VuZGFyaWVzXG4gICAgY29uc3QgZnJvbnRtYXR0ZXJNYXRjaCA9IGlucHV0Lm1hdGNoKC9eLS0tXFxuKFtcXHNcXFNdKj8pXFxuLS0tLyk7XG4gICAgaWYgKCFmcm9udG1hdHRlck1hdGNoKSB7XG4gICAgICAvLyBObyBmcm9udG1hdHRlciwgcmV0dXJuIGVtcHR5IGRhdGFcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHt9LFxuICAgICAgICBjb250ZW50OiBpbnB1dFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCB5YW1sQ29udGVudCA9IGZyb250bWF0dGVyTWF0Y2hbMV07XG4gICAgY29uc3QgbWFya2Rvd25Db250ZW50ID0gaW5wdXQuc3Vic3RyaW5nKGZyb250bWF0dGVyTWF0Y2hbMF0ubGVuZ3RoKTtcblxuICAgIC8vIDMuIFZhbGlkYXRlIFlBTUwgc2l6ZVxuICAgIGlmICh5YW1sQ29udGVudC5sZW5ndGggPiAob3B0cy5tYXhZYW1sU2l6ZSB8fCB0aGlzLkRFRkFVTFRfT1BUSU9OUy5tYXhZYW1sU2l6ZSEpKSB7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcignWUFNTCBmcm9udG1hdHRlciBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplJywgJ21lZGl1bScpO1xuICAgIH1cblxuICAgIC8vIDQuIFByZS1wYXJzZSBzZWN1cml0eSB2YWxpZGF0aW9uXG4gICAgLy8gRklYIChJc3N1ZSAjMTIxMSk6IE9ubHkgdmFsaWRhdGUgY29udGVudCBpZiB2YWxpZGF0ZUNvbnRlbnQgb3B0aW9uIGlzIHRydWVcbiAgICBpZiAob3B0cy52YWxpZGF0ZUNvbnRlbnQgJiYgIUNvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVZYW1sQ29udGVudCh5YW1sQ29udGVudCkpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1lBTUxfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICBzZXZlcml0eTogJ0NSSVRJQ0FMJyxcbiAgICAgICAgc291cmNlOiAnc2VjdXJlX3lhbWxfcGFyc2VyJyxcbiAgICAgICAgZGV0YWlsczogJ01hbGljaW91cyBZQU1MIHBhdHRlcm4gZGV0ZWN0ZWQgZHVyaW5nIHBhcnNpbmcnXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKCdNYWxpY2lvdXMgWUFNTCBjb250ZW50IGRldGVjdGVkJywgJ2NyaXRpY2FsJyk7XG4gICAgfVxuXG4gICAgLy8gNS4gUGFyc2Ugd2l0aCBzYWZlIHNjaGVtYVxuICAgIGxldCBkYXRhOiBhbnk7XG4gICAgdHJ5IHtcbiAgICAgIGRhdGEgPSB5YW1sLmxvYWQoeWFtbENvbnRlbnQsIHtcbiAgICAgICAgc2NoZW1hOiB0aGlzLlNBRkVfU0NIRU1BLFxuICAgICAgICBqc29uOiBmYWxzZSwgIC8vIERvbid0IGFsbG93IEpTT04tc3BlY2lmaWMgdHlwZXNcbiAgICAgICAgb25XYXJuaW5nOiAod2FybmluZykgPT4ge1xuICAgICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICAgIHR5cGU6ICdZQU1MX1BBUlNJTkdfV0FSTklORycsXG4gICAgICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgICAgICBzb3VyY2U6ICdzZWN1cmVfeWFtbF9wYXJzZXInLFxuICAgICAgICAgICAgZGV0YWlsczogYFlBTUwgd2FybmluZzogJHt3YXJuaW5nLm1lc3NhZ2V9YFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoYFlBTUwgcGFyc2luZyBmYWlsZWQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YCwgJ2hpZ2gnKTtcbiAgICB9XG5cbiAgICAvLyA2LiBFbnN1cmUgZGF0YSBpcyBhbiBvYmplY3RcbiAgICBpZiAodHlwZW9mIGRhdGEgIT09ICdvYmplY3QnIHx8IGRhdGEgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoJ1lBTUwgbXVzdCBjb250YWluIGFuIG9iamVjdCBhdCByb290IGxldmVsJywgJ21lZGl1bScpO1xuICAgIH1cblxuICAgIC8vIDcuIFZhbGlkYXRlIGFsbG93ZWQga2V5cyBpZiBzcGVjaWZpZWRcbiAgICBpZiAob3B0cy5hbGxvd2VkS2V5cykge1xuICAgICAgY29uc3QgaW52YWxpZEtleXMgPSBPYmplY3Qua2V5cyhkYXRhKS5maWx0ZXIoa2V5ID0+ICFvcHRzLmFsbG93ZWRLZXlzIS5pbmNsdWRlcyhrZXkpKTtcbiAgICAgIGlmIChpbnZhbGlkS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKGBJbnZhbGlkIFlBTUwga2V5cyBkZXRlY3RlZDogJHtpbnZhbGlkS2V5cy5qb2luKCcsICcpfWAsICdtZWRpdW0nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA4LiBWYWxpZGF0ZSBmaWVsZCB0eXBlcyBhbmQgY29udGVudFxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICAvLyBDaGVjayBmaWVsZC1zcGVjaWZpYyB2YWxpZGF0b3JzIG9ubHkgaWYgZmllbGQgdmFsaWRhdGlvbiBpcyBlbmFibGVkXG4gICAgICBpZiAob3B0cy52YWxpZGF0ZUZpZWxkcyAmJiB0aGlzLkZJRUxEX1ZBTElEQVRPUlNba2V5XSAmJiAhdGhpcy5GSUVMRF9WQUxJREFUT1JTW2tleV0odmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKGBJbnZhbGlkIHZhbHVlIGZvciBmaWVsZCAnJHtrZXl9J2AsICdtZWRpdW0nKTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgc3RyaW5nIGZpZWxkcyBmb3IgaW5qZWN0aW9uIHBhdHRlcm5zXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBvcHRzLnZhbGlkYXRlQ29udGVudCkge1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9uID0gQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZUFuZFNhbml0aXplKHZhbHVlKTtcbiAgICAgICAgaWYgKCF2YWxpZGF0aW9uLmlzVmFsaWQgJiYgdmFsaWRhdGlvbi5zZXZlcml0eSA9PT0gJ2NyaXRpY2FsJykge1xuICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKGBTZWN1cml0eSB0aHJlYXQgZGV0ZWN0ZWQgaW4gZmllbGQgJyR7a2V5fSdgLCAnY3JpdGljYWwnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZXBsYWNlIHdpdGggc2FuaXRpemVkIGNvbnRlbnRcbiAgICAgICAgZGF0YVtrZXldID0gdmFsaWRhdGlvbi5zYW5pdGl6ZWRDb250ZW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDkuIFZhbGlkYXRlIG1hcmtkb3duIGNvbnRlbnQgaWYgcmVxdWVzdGVkXG4gICAgbGV0IGZpbmFsQ29udGVudCA9IG1hcmtkb3duQ29udGVudDtcbiAgICBpZiAob3B0cy52YWxpZGF0ZUNvbnRlbnQpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnRWYWxpZGF0aW9uID0gQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZUFuZFNhbml0aXplKG1hcmtkb3duQ29udGVudCk7XG4gICAgICBpZiAoIWNvbnRlbnRWYWxpZGF0aW9uLmlzVmFsaWQgJiYgY29udGVudFZhbGlkYXRpb24uc2V2ZXJpdHkgPT09ICdjcml0aWNhbCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoJ1NlY3VyaXR5IHRocmVhdCBkZXRlY3RlZCBpbiBjb250ZW50JywgJ2NyaXRpY2FsJyk7XG4gICAgICB9XG4gICAgICBmaW5hbENvbnRlbnQgPSBjb250ZW50VmFsaWRhdGlvbi5zYW5pdGl6ZWRDb250ZW50IHx8IG1hcmtkb3duQ29udGVudDtcbiAgICB9XG5cbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnWUFNTF9QQVJTRV9TVUNDRVNTJyxcbiAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgIHNvdXJjZTogJ3NlY3VyZV95YW1sX3BhcnNlcicsXG4gICAgICBkZXRhaWxzOiBgU3VjY2Vzc2Z1bGx5IHBhcnNlZCBZQU1MIHdpdGggJHtPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGh9IGZpZWxkc2BcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBkYXRhLFxuICAgICAgY29udGVudDogZmluYWxDb250ZW50XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBzZWN1cmUgZ3JheS1tYXR0ZXIgY29tcGF0aWJsZSBwYXJzZXJcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVTZWN1cmVNYXR0ZXJQYXJzZXIoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlOiAoaW5wdXQ6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnBhcnNlKGlucHV0KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiByZXN1bHQuZGF0YSxcbiAgICAgICAgICBjb250ZW50OiByZXN1bHQuY29udGVudCxcbiAgICAgICAgICBleGNlcnB0OiByZXN1bHQuZXhjZXJwdCxcbiAgICAgICAgICBvcmlnOiBpbnB1dFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHN0cmluZ2lmeTogKGNvbnRlbnQ6IHN0cmluZywgZGF0YTogYW55KSA9PiB7XG4gICAgICAgIC8vIFZhbGlkYXRlIGRhdGEgYmVmb3JlIHN0cmluZ2lmeWluZ1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9uID0gQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZU1ldGFkYXRhKGRhdGEpO1xuICAgICAgICBpZiAoIXZhbGlkYXRpb24uaXNWYWxpZCkge1xuICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKCdDYW5ub3Qgc3RyaW5naWZ5IGNvbnRlbnQgd2l0aCBzZWN1cml0eSB0aHJlYXRzJywgJ2hpZ2gnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVzZSBzYWZlIFlBTUwgZHVtcFxuICAgICAgICBjb25zdCB5YW1sU3RyID0geWFtbC5kdW1wKGRhdGEsIHtcbiAgICAgICAgICBzY2hlbWE6IHRoaXMuU0FGRV9TQ0hFTUEsXG4gICAgICAgICAgc2tpcEludmFsaWQ6IHRydWUsXG4gICAgICAgICAgbm9SZWZzOiB0cnVlLFxuICAgICAgICAgIG5vQ29tcGF0TW9kZTogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gYC0tLVxcbiR7eWFtbFN0cn0tLS1cXG4ke2NvbnRlbnR9YDtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNhZmUgd3JhcHBlciBmb3IgZ3JheS1tYXR0ZXIgd2l0aCBzZWN1cml0eSB2YWxpZGF0aW9uc1xuICAgKi9cbiAgc3RhdGljIHNhZmVNYXR0ZXIoaW5wdXQ6IHN0cmluZywgb3B0aW9ucz86IG1hdHRlci5HcmF5TWF0dGVyT3B0aW9uPHN0cmluZywgYW55Pik6IG1hdHRlci5HcmF5TWF0dGVyRmlsZTxzdHJpbmc+IHtcbiAgICAvLyBGaXJzdCwgdXNlIG91ciBzZWN1cmUgcGFyc2VyXG4gICAgY29uc3Qgc2VjdXJlUGFyc2VkID0gdGhpcy5wYXJzZShpbnB1dCk7XG5cbiAgICAvLyBUaGVuIHVzZSBncmF5LW1hdHRlciB3aXRoIGN1c3RvbSBlbmdpbmVzXG4gICAgcmV0dXJuIG1hdHRlcihpbnB1dCwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGVuZ2luZXM6IHtcbiAgICAgICAgeWFtbDoge1xuICAgICAgICAgIHBhcnNlOiAoc3RyOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIC8vIFVzZSBvdXIgc2VjdXJlIFlBTUwgcGFyc2luZ1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0geWFtbC5sb2FkKHN0ciwge1xuICAgICAgICAgICAgICBzY2hlbWE6IHRoaXMuU0FGRV9TQ0hFTUEsXG4gICAgICAgICAgICAgIGpzb246IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIEVuc3VyZSBpdCdzIGFuIG9iamVjdFxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJzZWQgIT09ICdvYmplY3QnIHx8IHBhcnNlZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VkIGFzIG9iamVjdDtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0cmluZ2lmeTogKG9iajogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4geWFtbC5kdW1wKG9iaiwge1xuICAgICAgICAgICAgICBzY2hlbWE6IHRoaXMuU0FGRV9TQ0hFTUEsXG4gICAgICAgICAgICAgIHNraXBJbnZhbGlkOiB0cnVlLFxuICAgICAgICAgICAgICBub1JlZnM6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG59Il19
@@ -176,8 +176,8 @@ export class TokenManager {
176
176
  'User-Agent': 'DollhouseMCP/1.0'
177
177
  }
178
178
  });
179
- const rateLimitRemaining = parseInt(response.headers.get('x-ratelimit-remaining') || '0');
180
- const rateLimitReset = parseInt(response.headers.get('x-ratelimit-reset') || '0');
179
+ const rateLimitRemaining = Number.parseInt(response.headers.get('x-ratelimit-remaining') || '0');
180
+ const rateLimitReset = Number.parseInt(response.headers.get('x-ratelimit-reset') || '0');
181
181
  if (!response.ok) {
182
182
  const error = `GitHub API error: ${response.status} ${response.statusText}`;
183
183
  logger.warn('Token validation failed', {
@@ -251,13 +251,13 @@ export class TokenManager {
251
251
  // Remove any potential token data from error messages
252
252
  // Using word boundaries to avoid over-matching
253
253
  let safeMessage = error
254
- .replace(/\bghp_\S+/g, '[REDACTED_PAT]')
255
- .replace(/\bgithub_pat_\S+/g, '[REDACTED_FINE_PAT]')
256
- .replace(/\bghs_\S+/g, '[REDACTED_INSTALL]')
257
- .replace(/\bghu_\S+/g, '[REDACTED_USER]')
258
- .replace(/\bghr_\S+/g, '[REDACTED_REFRESH]')
259
- .replace(/\bgho_\S+/g, '[REDACTED_OAUTH]')
260
- .replace(/\bgh[a-z]_\S+/gi, '[REDACTED_TOKEN]'); // Catch any other gh*_ pattern
254
+ .replaceAll(/\bghp_\S+/g, '[REDACTED_PAT]')
255
+ .replaceAll(/\bgithub_pat_\S+/g, '[REDACTED_FINE_PAT]')
256
+ .replaceAll(/\bghs_\S+/g, '[REDACTED_INSTALL]')
257
+ .replaceAll(/\bghu_\S+/g, '[REDACTED_USER]')
258
+ .replaceAll(/\bghr_\S+/g, '[REDACTED_REFRESH]')
259
+ .replaceAll(/\bgho_\S+/g, '[REDACTED_OAUTH]')
260
+ .replaceAll(/\bgh[a-z]_\S+/gi, '[REDACTED_TOKEN]'); // Catch any other gh*_ pattern
261
261
  if (token) {
262
262
  const tokenPrefix = this.getTokenPrefix(token);
263
263
  safeMessage += ` (Token: ${tokenPrefix})`;
@@ -501,4 +501,4 @@ export class TokenManager {
501
501
  return this.retrieveGitHubToken();
502
502
  }
503
503
  }
504
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5NYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlY3VyaXR5L3Rva2VuTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQW1CcEU7O0dBRUc7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQUNmLE1BQU0sQ0FBVSxxQkFBcUIsR0FBRztRQUM5QywrREFBK0Q7UUFDL0QscUJBQXFCLEVBQUUsVUFBVSxFQUFPLHlCQUF5QjtRQUNqRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBSyxzQ0FBc0M7UUFDOUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFVLGlDQUFpQztRQUN6RSxpQkFBaUIsRUFBRSxVQUFVLEVBQVcsbUNBQW1DO1FBQzNFLGFBQWEsRUFBRSxVQUFVLEVBQWUsaUJBQWlCO1FBQ3pELGtCQUFrQixFQUFFLFVBQVUsRUFBVSwyQkFBMkI7UUFDbkUsdUZBQXVGO1FBQ3ZGLG9CQUFvQixFQUFFLGVBQWUsQ0FBRyxpQ0FBaUM7S0FDMUUsQ0FBQztJQUVGLCtCQUErQjtJQUN2QixNQUFNLENBQVUsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMs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QztRQUVELDhCQUE4QjtRQUM5QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQ3BDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlY3VyZSBHaXRIdWIgdG9rZW4gbWFuYWdlbWVudCBhbmQgdmFsaWRhdGlvblxuICovXG5cbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBSYXRlTGltaXRlciB9IGZyb20gJy4uL3V0aWxzL1JhdGVMaW1pdGVyLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5RXJyb3IgfSBmcm9tICcuL2Vycm9ycy5qcyc7XG5pbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSAnY3J5cHRvJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4vdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBUb2tlblNjb3BlcyB7XG4gIHJlcXVpcmVkOiBzdHJpbmdbXTtcbiAgb3B0aW9uYWw/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb2tlblZhbGlkYXRpb25SZXN1bHQge1xuICBpc1ZhbGlkOiBib29sZWFuO1xuICBzY29wZXM/OiBzdHJpbmdbXTtcbiAgcmF0ZUxpbWl0Pzoge1xuICAgIHJlbWFpbmluZzogbnVtYmVyO1xuICAgIHJlc2V0VGltZTogRGF0ZTtcbiAgfTtcbiAgcmF0ZUxpbWl0RXhjZWVkZWQ/OiBib29sZWFuO1xuICByZXRyeUFmdGVyTXM/OiBudW1iZXI7XG4gIGVycm9yPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlY3VyZSBHaXRIdWIgdG9rZW4gbWFuYWdlciB3aXRoIHZhbGlkYXRpb24gYW5kIHByb3RlY3Rpb25cbiAqL1xuZXhwb3J0IGNsYXNzIFRva2VuTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEdJVEhVQl9UT0tFTl9QQVRURVJOUyA9IHtcbiAgICAvLyBNb3JlIGZsZXhpYmxlIHBhdHRlcm5zIC0gYWNjZXB0IGFueSBjb250ZW50IGFmdGVyIHRoZSBwcmVmaXhcbiAgICBQRVJTT05BTF9BQ0NFU1NfVE9LRU46IC9eZ2hwXy4rJC8sICAgICAgLy8gUGVyc29uYWwgYWNjZXNzIHRva2Vuc1xuICAgIEZJTkVfR1JBSU5FRF9QQVQ6IC9eZ2l0aHViX3BhdF8uKyQvLCAgICAvLyBGaW5lLWdyYWluZWQgcGVyc29uYWwgYWNjZXNzIHRva2Vuc1xuICAgIElOU1RBTExBVElPTl9UT0tFTjogL15naHNfLiskLywgICAgICAgICAvLyBHaXRIdWIgQXBwIGluc3RhbGxhdGlvbiB0b2tlbnNcbiAgICBVU0VSX0FDQ0VTU19UT0tFTjogL15naHVfLiskLywgICAgICAgICAgLy8gR2l0SHViIEFwcCB1c2VyLXRvLXNlcnZlciB0b2tlbnNcbiAgICBSRUZSRVNIX1RPS0VOOiAvXmdocl8uKyQvLCAgICAgICAgICAgICAgLy8gUmVmcmVzaCB0b2tlbnNcbiAgICBPQVVUSF9BQ0NFU1NfVE9LRU46IC9eZ2hvXy4rJC8sICAgICAgICAgLy8gT0F1dGggZGV2aWNlIGZsb3cgdG9rZW5zXG4gICAgLy8gR2VuZXJpYyBwYXR0ZXJuIHRvIGNhdGNoIEFMTCBHaXRIdWIgdG9rZW5zIChnaCArIGFueSBsZXR0ZXIgKyB1bmRlcnNjb3JlICsgYW55dGhpbmcpXG4gICAgR0VORVJJQ19HSVRIVUJfVE9LRU46IC9eZ2hbYS16XV8uKyQvaSAgIC8vIENhdGNoLWFsbCBmb3IgYW55IGdoKl8gcGF0dGVyblxuICB9O1xuXG4gIC8vIFNlY3VyZSBzdG9yYWdlIGNvbmZpZ3VyYXRpb25cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVE9LRU5fRElSID0gcGF0aC5qb2luKGhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAnLmF1dGgnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVE9LRU5fRklMRSA9ICdnaXRodWJfdG9rZW4uZW5jJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQUxHT1JJVEhNID0gJ2Flcy0yNTYtZ2NtJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgS0VZX0xFTkdUSCA9IDMyO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBJVl9MRU5HVEggPSAxNjtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVEFHX0xFTkdUSCA9IDE2O1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBTQUxUX0xFTkdUSCA9IDMyO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBJVEVSQVRJT05TID0gMTAwMDAwO1xuXG4gIC8vIFJhdGUgbGltaXRlciBmb3IgdG9rZW4gdmFsaWRhdGlvbiBvcGVyYXRpb25zIC0gcHJldmVudHMgYnJ1dGUgZm9yY2UgYXR0YWNrc1xuICBwcml2YXRlIHN0YXRpYyB0b2tlblZhbGlkYXRpb25MaW1pdGVyOiBSYXRlTGltaXRlciB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBHZXQgb3IgY3JlYXRlIHRoZSB0b2tlbiB2YWxpZGF0aW9uIHJhdGUgbGltaXRlclxuICAgKiBQcmV2ZW50cyBicnV0ZSBmb3JjZSB0b2tlbiB2YWxpZGF0aW9uIGF0dGFja3NcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGdldFRva2VuVmFsaWRhdGlvbkxpbWl0ZXIoKTogUmF0ZUxpbWl0ZXIge1xuICAgIGlmICghdGhpcy50b2tlblZhbGlkYXRpb25MaW1pdGVyKSB7XG4gICAgICB0aGlzLnRva2VuVmFsaWRhdGlvbkxpbWl0ZXIgPSB0aGlzLmNyZWF0ZVRva2VuVmFsaWRhdGlvbkxpbWl0ZXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudG9rZW5WYWxpZGF0aW9uTGltaXRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSByYXRlIGxpbWl0ZXIgc3BlY2lmaWNhbGx5IGZvciB0b2tlbiB2YWxpZGF0aW9uXG4gICAqIENvbnNlcnZhdGl2ZSBsaW1pdHMgdG8gcHJldmVudCBhYnVzZSB3aGlsZSBhbGxvd2luZyBsZWdpdGltYXRlIHVzYWdlXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlVG9rZW5WYWxpZGF0aW9uTGltaXRlcigpOiBSYXRlTGltaXRlciB7XG4gICAgcmV0dXJuIG5ldyBSYXRlTGltaXRlcih7XG4gICAgICBtYXhSZXF1ZXN0czogMTAsICAgICAgICAgIC8vIDEwIHZhbGlkYXRpb24gYXR0ZW1wdHNcbiAgICAgIHdpbmRvd01zOiA2MCAqIDYwICogMTAwMCwgLy8gcGVyIGhvdXJcbiAgICAgIG1pbkRlbGF5TXM6IDUgKiAxMDAwICAgICAgLy8gNSBzZWNvbmRzIG1pbmltdW0gYmV0d2VlbiBhdHRlbXB0c1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSB0b2tlbiB2YWxpZGF0aW9uIHJhdGUgbGltaXRlclxuICAgKiBVc2VmdWwgZm9yIHRlc3Rpbmcgb3IgbWFudWFsIGludGVydmVudGlvblxuICAgKi9cbiAgc3RhdGljIHJlc2V0VG9rZW5WYWxpZGF0aW9uTGltaXRlcigpOiB2b2lkIHtcbiAgICB0aGlzLnRva2VuVmFsaWRhdGlvbkxpbWl0ZXI/LnJlc2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgR2l0SHViIHRva2VuIGZvcm1hdFxuICAgKi9cbiAgc3RhdGljIHZhbGlkYXRlVG9rZW5Gb3JtYXQodG9rZW46IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdG9rZW4gfHwgdHlwZW9mIHRva2VuICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGFnYWluc3QgYWxsIGtub3duIEdpdEh1YiB0b2tlbiBwYXR0ZXJuc1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuR0lUSFVCX1RPS0VOX1BBVFRFUk5TKS5zb21lKHBhdHRlcm4gPT4gXG4gICAgICBwYXR0ZXJuLnRlc3QodG9rZW4pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgR2l0SHViIHRva2VuIGZyb20gZW52aXJvbm1lbnQgd2l0aCB2YWxpZGF0aW9uXG4gICAqL1xuICBzdGF0aWMgZ2V0R2l0SHViVG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgdG9rZW4gPSBwcm9jZXNzLmVudi5HSVRIVUJfVE9LRU47XG4gICAgXG4gICAgaWYgKCF0b2tlbikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdObyBHaXRIdWIgdG9rZW4gZm91bmQgaW4gZW52aXJvbm1lbnQnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICghdGhpcy52YWxpZGF0ZVRva2VuRm9ybWF0KHRva2VuKSkge1xuICAgICAgbG9nZ2VyLndhcm4oJ0ludmFsaWQgR2l0SHViIHRva2VuIGZvcm1hdCBkZXRlY3RlZCcsIHtcbiAgICAgICAgdG9rZW5QcmVmaXg6IHRoaXMuZ2V0VG9rZW5QcmVmaXgodG9rZW4pLFxuICAgICAgICBsZW5ndGg6IHRva2VuLmxlbmd0aFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoJ1ZhbGlkIEdpdEh1YiB0b2tlbiBmb3VuZCcsIHtcbiAgICAgIHRva2VuVHlwZTogdGhpcy5nZXRUb2tlblR5cGUodG9rZW4pLFxuICAgICAgdG9rZW5QcmVmaXg6IHRoaXMuZ2V0VG9rZW5QcmVmaXgodG9rZW4pXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICAvKipcbiAgICogUmVkYWN0IHRva2VuIGZvciBzYWZlIGxvZ2dpbmdcbiAgICovXG4gIHN0YXRpYyByZWRhY3RUb2tlbih0b2tlbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXRva2VuIHx8IHRva2VuLmxlbmd0aCA8IDgpIHtcbiAgICAgIHJldHVybiAnW1JFREFDVEVEXSc7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB0b2tlbi5zdWJzdHJpbmcoMCwgNCkgKyAnLi4uJyArIHRva2VuLnN1YnN0cmluZyh0b2tlbi5sZW5ndGggLSA0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdG9rZW4gdHlwZSBmcm9tIGZvcm1hdFxuICAgKi9cbiAgc3RhdGljIGdldFRva2VuVHlwZSh0b2tlbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBDaGVjayBmaW5lLWdyYWluZWQgUEFUIGZpcnN0IHNpbmNlIGl0J3MgbW9yZSBzcGVjaWZpY1xuICAgIGlmICh0aGlzLkdJVEhVQl9UT0tFTl9QQVRURVJOUy5GSU5FX0dSQUlORURfUEFULnRlc3QodG9rZW4pKSB7XG4gICAgICByZXR1cm4gJ0ZpbmUtZ3JhaW5lZCBQZXJzb25hbCBBY2Nlc3MgVG9rZW4nO1xuICAgIH1cbiAgICBpZiAodGhpcy5HSVRIVUJfVE9LRU5fUEFUVEVSTlMuUEVSU09OQUxfQUNDRVNTX1RPS0VOLnRlc3QodG9rZW4pKSB7XG4gICAgICByZXR1cm4gJ1BlcnNvbmFsIEFjY2VzcyBUb2tlbic7XG4gICAgfVxuICAgIGlmICh0aGlzLkdJVEhVQl9UT0tFTl9QQVRURVJOUy5JTlNUQUxMQVRJT05fVE9LRU4udGVzdCh0b2tlbikpIHtcbiAgICAgIHJldHVybiAnSW5zdGFsbGF0aW9uIFRva2VuJztcbiAgICB9XG4gICAgaWYgKHRoaXMuR0lUSFVCX1RPS0VOX1BBVFRFUk5TLlVTRVJfQUNDRVNTX1RPS0VOLnRlc3QodG9rZW4pKSB7XG4gICAgICByZXR1cm4gJ1VzZXIgQWNjZXNzIFRva2VuJztcbiAgICB9XG4gICAgaWYgKHRoaXMuR0lUSFVCX1RPS0VOX1BBVFRFUk5TLlJFRlJFU0hfVE9LRU4udGVzdCh0b2tlbikpIHtcbiAgICAgIHJldHVybiAnUmVmcmVzaCBUb2tlbic7XG4gICAgfVxuICAgIGlmICh0aGlzLkdJVEhVQl9UT0tFTl9QQVRURVJOUy5PQVVUSF9BQ0NFU1NfVE9LRU4udGVzdCh0b2tlbikpIHtcbiAgICAgIHJldHVybiAnT0F1dGggQWNjZXNzIFRva2VuJztcbiAgICB9XG4gICAgLy8gQ2hlY2sgZ2VuZXJpYyBwYXR0ZXJuIGxhc3RcbiAgICBpZiAodGhpcy5HSVRIVUJfVE9LRU5fUEFUVEVSTlMuR0VORVJJQ19HSVRIVUJfVE9LRU4udGVzdCh0b2tlbikpIHtcbiAgICAgIHJldHVybiAnR2l0SHViIFRva2VuJztcbiAgICB9XG4gICAgcmV0dXJuICdVbmtub3duJztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc2FmZSB0b2tlbiBwcmVmaXggZm9yIGxvZ2dpbmdcbiAgICovXG4gIHN0YXRpYyBnZXRUb2tlblByZWZpeCh0b2tlbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXRva2VuIHx8IHRva2VuLmxlbmd0aCA8IDQpIHtcbiAgICAgIHJldHVybiAnW0lOVkFMSURdJztcbiAgICB9XG4gICAgcmV0dXJuIHRva2VuLnN1YnN0cmluZygwLCA0KSArICcuLi4nO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRva2VuIHNjb3BlcyB2aWEgR2l0SHViIEFQSVxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHZhbGlkYXRlVG9rZW5TY29wZXMoXG4gICAgdG9rZW46IHN0cmluZywgXG4gICAgcmVxdWlyZWRTY29wZXM6IFRva2VuU2NvcGVzXG4gICk6IFByb21pc2U8VG9rZW5WYWxpZGF0aW9uUmVzdWx0PiB7XG4gICAgLy8gVmFsaWRhdGUgdG9rZW4gZm9ybWF0IGJlZm9yZSBjb25zdW1pbmcgcmF0ZSBsaW1pdFxuICAgIGlmICghdGhpcy52YWxpZGF0ZVRva2VuRm9ybWF0KHRva2VuKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIGVycm9yOiAnSW52YWxpZCB0b2tlbiBmb3JtYXQnXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIENoZWNrIHJhdGUgbGltaXQgYmVmb3JlIG1ha2luZyBBUEkgY2FsbFxuICAgIGNvbnN0IHJhdGVMaW1pdGVyID0gdGhpcy5nZXRUb2tlblZhbGlkYXRpb25MaW1pdGVyKCk7XG4gICAgY29uc3QgcmF0ZUxpbWl0U3RhdHVzID0gcmF0ZUxpbWl0ZXIuY2hlY2tMaW1pdCgpO1xuXG4gICAgaWYgKCFyYXRlTGltaXRTdGF0dXMuYWxsb3dlZCkge1xuICAgICAgbG9nZ2VyLndhcm4oJ1Rva2VuIHZhbGlkYXRpb24gcmF0ZSBsaW1pdCBleGNlZWRlZCcsIHtcbiAgICAgICAgdG9rZW5QcmVmaXg6IHRoaXMuZ2V0VG9rZW5QcmVmaXgodG9rZW4pLFxuICAgICAgICByZXRyeUFmdGVyTXM6IHJhdGVMaW1pdFN0YXR1cy5yZXRyeUFmdGVyTXMsXG4gICAgICAgIHJlbWFpbmluZ1Rva2VuczogcmF0ZUxpbWl0U3RhdHVzLnJlbWFpbmluZ1Rva2Vuc1xuICAgICAgfSk7XG5cbiAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKFxuICAgICAgICBgVG9rZW4gdmFsaWRhdGlvbiByYXRlIGxpbWl0IGV4Y2VlZGVkLiBQbGVhc2UgcmV0cnkgaW4gJHtNYXRoLmNlaWwoKHJhdGVMaW1pdFN0YXR1cy5yZXRyeUFmdGVyTXMgfHwgMCkgLyAxMDAwKX0gc2Vjb25kcy5gLFxuICAgICAgICAnUkFURV9MSU1JVF9FWENFRURFRCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIENvbnN1bWUgcmF0ZSBsaW1pdCB0b2tlbiBmb3IgdGhpcyB2YWxpZGF0aW9uIGF0dGVtcHRcbiAgICAgIHJhdGVMaW1pdGVyLmNvbnN1bWVUb2tlbigpO1xuICAgICAgLy8gTWFrZSBhIHRlc3QgQVBJIGNhbGwgdG8gY2hlY2sgdG9rZW4gdmFsaWRpdHkgYW5kIHNjb3Blc1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2VyJywge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMranNvbicsXG4gICAgICAgICAgJ1VzZXItQWdlbnQnOiAnRG9sbGhvdXNlTUNQLzEuMCdcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJhdGVMaW1pdFJlbWFpbmluZyA9IHBhcnNlSW50KHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LXJhdGVsaW1pdC1yZW1haW5pbmcnKSB8fCAnMCcpO1xuICAgICAgY29uc3QgcmF0ZUxpbWl0UmVzZXQgPSBwYXJzZUludChyZXNwb25zZS5oZWFkZXJzLmdldCgneC1yYXRlbGltaXQtcmVzZXQnKSB8fCAnMCcpO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gYEdpdEh1YiBBUEkgZXJyb3I6ICR7cmVzcG9uc2Uuc3RhdHVzfSAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YDtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ1Rva2VuIHZhbGlkYXRpb24gZmFpbGVkJywge1xuICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgIHRva2VuUHJlZml4OiB0aGlzLmdldFRva2VuUHJlZml4KHRva2VuKVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgICAgZXJyb3I6IGVycm9yXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEV4dHJhY3Qgc2NvcGVzIGZyb20gcmVzcG9uc2UgaGVhZGVyc1xuICAgICAgY29uc3Qgc2NvcGVzSGVhZGVyID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ3gtb2F1dGgtc2NvcGVzJykgfHwgJyc7XG4gICAgICBjb25zdCB0b2tlblNjb3BlcyA9IHNjb3Blc0hlYWRlci5zcGxpdCgnLCcpLm1hcChzID0+IHMudHJpbSgpKS5maWx0ZXIocyA9PiBzKTtcblxuICAgICAgLy8gQ2hlY2sgaWYgcmVxdWlyZWQgc2NvcGVzIGFyZSBwcmVzZW50XG4gICAgICBjb25zdCBoYXNSZXF1aXJlZFNjb3BlcyA9IHJlcXVpcmVkU2NvcGVzLnJlcXVpcmVkLmV2ZXJ5KHNjb3BlID0+IFxuICAgICAgICB0b2tlblNjb3Blcy5pbmNsdWRlcyhzY29wZSlcbiAgICAgICk7XG5cbiAgICAgIGlmICghaGFzUmVxdWlyZWRTY29wZXMpIHtcbiAgICAgICAgY29uc3QgbWlzc2luZ1Njb3BlcyA9IHJlcXVpcmVkU2NvcGVzLnJlcXVpcmVkLmZpbHRlcihzY29wZSA9PiBcbiAgICAgICAgICAhdG9rZW5TY29wZXMuaW5jbHVkZXMoc2NvcGUpXG4gICAgICAgICk7XG4gICAgICAgIFxuICAgICAgICBsb2dnZXIud2FybignVG9rZW4gbWlzc2luZyByZXF1aXJlZCBzY29wZXMnLCB7XG4gICAgICAgICAgdG9rZW5QcmVmaXg6IHRoaXMuZ2V0VG9rZW5QcmVmaXgodG9rZW4pLFxuICAgICAgICAgIG1pc3NpbmdTY29wZXM6IG1pc3NpbmdTY29wZXMsXG4gICAgICAgICAgY3VycmVudFNjb3BlczogdG9rZW5TY29wZXNcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgICBzY29wZXM6IHRva2VuU2NvcGVzLFxuICAgICAgICAgIGVycm9yOiBgTWlzc2luZyByZXF1aXJlZCBzY29wZXM6ICR7bWlzc2luZ1Njb3Blcy5qb2luKCcsICcpfWBcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgbG9nZ2VyLmluZm8oJ1Rva2VuIHZhbGlkYXRpb24gc3VjY2Vzc2Z1bCcsIHtcbiAgICAgICAgdG9rZW5UeXBlOiB0aGlzLmdldFRva2VuVHlwZSh0b2tlbiksXG4gICAgICAgIHRva2VuUHJlZml4OiB0aGlzLmdldFRva2VuUHJlZml4KHRva2VuKSxcbiAgICAgICAgc2NvcGVzOiB0b2tlblNjb3BlcyxcbiAgICAgICAgcmF0ZUxpbWl0UmVtYWluaW5nOiByYXRlTGltaXRSZW1haW5pbmdcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1ZhbGlkOiB0cnVlLFxuICAgICAgICBzY29wZXM6IHRva2VuU2NvcGVzLFxuICAgICAgICByYXRlTGltaXQ6IHtcbiAgICAgICAgICByZW1haW5pbmc6IHJhdGVMaW1pdFJlbWFpbmluZyxcbiAgICAgICAgICByZXNldFRpbWU6IG5ldyBEYXRlKHJhdGVMaW1pdFJlc2V0ICogMTAwMClcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBIYW5kbGUgU2VjdXJpdHlFcnJvciAoaW5jbHVkaW5nIHJhdGUgbGltaXQgZXJyb3JzKSBzZXBhcmF0ZWx5XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTZWN1cml0eUVycm9yICYmIGVycm9yLmNvZGUgPT09ICdSQVRFX0xJTUlUX0VYQ0VFREVEJykge1xuICAgICAgICBjb25zdCBjdXJyZW50U3RhdHVzID0gcmF0ZUxpbWl0ZXIuY2hlY2tMaW1pdCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAgIHJhdGVMaW1pdEV4Y2VlZGVkOiB0cnVlLFxuICAgICAgICAgIHJldHJ5QWZ0ZXJNczogY3VycmVudFN0YXR1cy5yZXRyeUFmdGVyTXMsXG4gICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2VcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcic7XG4gICAgICBsb2dnZXIuZXJyb3IoJ1Rva2VuIHZhbGlkYXRpb24gZXJyb3InLCB7XG4gICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgIHRva2VuUHJlZml4OiB0aGlzLmdldFRva2VuUHJlZml4KHRva2VuKVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICBlcnJvcjogYFZhbGlkYXRpb24gZXJyb3I6ICR7ZXJyb3JNZXNzYWdlfWBcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBzYWZlIGVycm9yIG1lc3NhZ2Ugd2l0aG91dCB0b2tlbiBleHBvc3VyZVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVNhZmVFcnJvck1lc3NhZ2UoZXJyb3I6IHN0cmluZywgdG9rZW4/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIFJlbW92ZSBhbnkgcG90ZW50aWFsIHRva2VuIGRhdGEgZnJvbSBlcnJvciBtZXNzYWdlc1xuICAgIC8vIFVzaW5nIHdvcmQgYm91bmRhcmllcyB0byBhdm9pZCBvdmVyLW1hdGNoaW5nXG4gICAgbGV0IHNhZmVNZXNzYWdlID0gZXJyb3JcbiAgICAgIC5yZXBsYWNlKC9cXGJnaHBfXFxTKy9nLCAnW1JFREFDVEVEX1BBVF0nKVxuICAgICAgLnJlcGxhY2UoL1xcYmdpdGh1Yl9wYXRfXFxTKy9nLCAnW1JFREFDVEVEX0ZJTkVfUEFUXScpXG4gICAgICAucmVwbGFjZSgvXFxiZ2hzX1xcUysvZywgJ1tSRURBQ1RFRF9JTlNUQUxMXScpXG4gICAgICAucmVwbGFjZSgvXFxiZ2h1X1xcUysvZywgJ1tSRURBQ1RFRF9VU0VSXScpXG4gICAgICAucmVwbGFjZSgvXFxiZ2hyX1xcUysvZywgJ1tSRURBQ1RFRF9SRUZSRVNIXScpXG4gICAgICAucmVwbGFjZSgvXFxiZ2hvX1xcUysvZywgJ1tSRURBQ1RFRF9PQVVUSF0nKVxuICAgICAgLnJlcGxhY2UoL1xcYmdoW2Etel1fXFxTKy9naSwgJ1tSRURBQ1RFRF9UT0tFTl0nKTsgIC8vIENhdGNoIGFueSBvdGhlciBnaCpfIHBhdHRlcm5cblxuICAgIGlmICh0b2tlbikge1xuICAgICAgY29uc3QgdG9rZW5QcmVmaXggPSB0aGlzLmdldFRva2VuUHJlZml4KHRva2VuKTtcbiAgICAgIHNhZmVNZXNzYWdlICs9IGAgKFRva2VuOiAke3Rva2VuUHJlZml4fSlgO1xuICAgIH1cblxuICAgIHJldHVybiBzYWZlTWVzc2FnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbWluaW11bSByZXF1aXJlZCBzY29wZXMgZm9yIGRpZmZlcmVudCBvcGVyYXRpb25zXG4gICAqIFxuICAgKiBOT1RFOiBUaGUgJ21hcmtldHBsYWNlJyBzY29wZSBpZGVudGlmaWVyIGlzIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICogd2l0aCBleGlzdGluZyB0b2tlbiB2YWxpZGF0aW9ucy4gVGhpcyBpcyBhbiBpbnRlcm5hbCBzY29wZSBuYW1lIGFuZCBkb2VzIG5vdFxuICAgKiBhZmZlY3QgdXNlci1mYWNpbmcgZnVuY3Rpb25hbGl0eS4gKFBSICMyODApXG4gICAqL1xuICBzdGF0aWMgZ2V0UmVxdWlyZWRTY29wZXMob3BlcmF0aW9uOiAncmVhZCcgfCAnd3JpdGUnIHwgJ21hcmtldHBsYWNlJyB8ICdjb2xsZWN0aW9uJyB8ICdnaXN0Jyk6IFRva2VuU2NvcGVzIHtcbiAgICBzd2l0Y2ggKG9wZXJhdGlvbikge1xuICAgICAgY2FzZSAncmVhZCc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVxdWlyZWQ6IFsncHVibGljX3JlcG8nXSwgIC8vIE9BdXRoIHRva2VucyB1c2UgJ3B1YmxpY19yZXBvJyBub3QgJ3JlcG8nXG4gICAgICAgICAgb3B0aW9uYWw6IFsndXNlcjplbWFpbCddXG4gICAgICAgIH07XG4gICAgICBcbiAgICAgIGNhc2UgJ3dyaXRlJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXF1aXJlZDogWydwdWJsaWNfcmVwbyddLCAgLy8gT0F1dGggdG9rZW5zIHVzZSAncHVibGljX3JlcG8nIG5vdCAncmVwbydcbiAgICAgICAgICBvcHRpb25hbDogWyd1c2VyOmVtYWlsJ11cbiAgICAgICAgfTtcbiAgICAgIFxuICAgICAgY2FzZSAnbWFya2V0cGxhY2UnOiAvLyBJbnRlcm5hbCBzY29wZSBuYW1lIGtlcHQgZm9yIGNvbXBhdGliaWxpdHkgKFBSICMyODApXG4gICAgICBjYXNlICdjb2xsZWN0aW9uJzogLy8gTmV3IHByZWZlcnJlZCBuYW1lXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVxdWlyZWQ6IFsncHVibGljX3JlcG8nXSwgIC8vIE9BdXRoIHRva2VucyB1c2UgJ3B1YmxpY19yZXBvJyBub3QgJ3JlcG8nXG4gICAgICAgICAgb3B0aW9uYWw6IFsndXNlcjplbWFpbCddXG4gICAgICAgIH07XG4gICAgICBcbiAgICAgIGNhc2UgJ2dpc3QnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlcXVpcmVkOiBbJ2dpc3QnXSxcbiAgICAgICAgICBvcHRpb25hbDogWyd1c2VyOmVtYWlsJ11cbiAgICAgICAgfTtcbiAgICAgIFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXF1aXJlZDogWydwdWJsaWNfcmVwbyddICAvLyBPQXV0aCB0b2tlbnMgdXNlICdwdWJsaWNfcmVwbycgbm90ICdyZXBvJ1xuICAgICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0b2tlbiBoYXMgc3VmZmljaWVudCBwZXJtaXNzaW9ucyBmb3Igb3BlcmF0aW9uXG4gICAqIFxuICAgKiBOT1RFOiBUaGUgJ21hcmtldHBsYWNlJyBvcGVyYXRpb24gdHlwZSBpcyBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICAgKiBUaGlzIGlzIGNhbGxlZCBpbnRlcm5hbGx5IHdoZW4gYWNjZXNzaW5nIGNvbGxlY3Rpb24gZmVhdHVyZXMuIChQUiAjMjgwKVxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGVuc3VyZVRva2VuUGVybWlzc2lvbnMoXG4gICAgb3BlcmF0aW9uOiAncmVhZCcgfCAnd3JpdGUnIHwgJ21hcmtldHBsYWNlJyB8ICdjb2xsZWN0aW9uJyB8ICdnaXN0J1xuICApOiBQcm9taXNlPFRva2VuVmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRHaXRIdWJUb2tlbigpO1xuICAgIFxuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICBlcnJvcjogJ05vIEdpdEh1YiB0b2tlbiBhdmFpbGFibGUnXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVpcmVkU2NvcGVzID0gdGhpcy5nZXRSZXF1aXJlZFNjb3BlcyhvcGVyYXRpb24pO1xuICAgIHJldHVybiB0aGlzLnZhbGlkYXRlVG9rZW5TY29wZXModG9rZW4sIHJlcXVpcmVkU2NvcGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXJpdmUgZW5jcnlwdGlvbiBrZXkgZnJvbSBhIHBhc3NwaHJhc2VcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGRlcml2ZUtleShwYXNzcGhyYXNlOiBzdHJpbmcsIHNhbHQ6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIGNyeXB0by5wYmtkZjJTeW5jKHBhc3NwaHJhc2UsIHNhbHQsIHRoaXMuSVRFUkFUSU9OUywgdGhpcy5LRVlfTEVOR1RILCAnc2hhMjU2Jyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG1hY2hpbmUtc3BlY2lmaWMgcGFzc3BocmFzZSBmb3IgZW5jcnlwdGlvblxuICAgKiBVc2VzIGEgY29tYmluYXRpb24gb2YgbWFjaGluZSBJRCBhbmQgdXNlciBpbmZvIGZvciB1bmlxdWVuZXNzXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBnZXRNYWNoaW5lUGFzc3BocmFzZSgpOiBzdHJpbmcge1xuICAgIC8vIFVzZSBhIGNvbWJpbmF0aW9uIG9mIGhvc3RuYW1lLCB1c2VybmFtZSwgYW5kIGEgZml4ZWQgYXBwIGlkZW50aWZpZXJcbiAgICBjb25zdCBob3N0bmFtZSA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoaG9tZWRpcigpKS5kaWdlc3QoJ2hleCcpLnN1YnN0cmluZygwLCAxNik7XG4gICAgY29uc3QgdXNlcm5hbWUgPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKHByb2Nlc3MuZW52LlVTRVIgfHwgJ2RlZmF1bHQnKS5kaWdlc3QoJ2hleCcpLnN1YnN0cmluZygwLCAxNik7XG4gICAgY29uc3QgYXBwSWQgPSAnRG9sbGhvdXNlTUNQLVRva2VuU3RvcmUtdjEnO1xuICAgIFxuICAgIHJldHVybiBgJHthcHBJZH0tJHtob3N0bmFtZX0tJHt1c2VybmFtZX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlIEdpdEh1YiB0b2tlbiBzZWN1cmVseSB0byBmaWxlXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgc3RvcmVHaXRIdWJUb2tlbih0b2tlbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFZhbGlkYXRlIHRva2VuIGZvcm1hdCBmaXJzdFxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlVG9rZW5Gb3JtYXQodG9rZW4pKSB7XG4gICAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKCdJbnZhbGlkIHRva2VuIGZvcm1hdCcpO1xuICAgICAgfVxuXG4gICAgICAvLyBOb3JtYWxpemUgYW5kIHZhbGlkYXRlIHRva2VuXG4gICAgICBjb25zdCB2YWxpZGF0aW9uID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUodG9rZW4pO1xuICAgICAgaWYgKCF2YWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoJ1Rva2VuIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycycpO1xuICAgICAgfVxuXG4gICAgICAvLyBFbnN1cmUgZGlyZWN0b3J5IGV4aXN0c1xuICAgICAgYXdhaXQgZnMubWtkaXIodGhpcy5UT0tFTl9ESVIsIHsgcmVjdXJzaXZlOiB0cnVlLCBtb2RlOiAwbzcwMCB9KTtcblxuICAgICAgLy8gR2VuZXJhdGUgZW5jcnlwdGlvbiBjb21wb25lbnRzXG4gICAgICBjb25zdCBzYWx0ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKHRoaXMuU0FMVF9MRU5HVEgpO1xuICAgICAgY29uc3QgaXYgPSBjcnlwdG8ucmFuZG9tQnl0ZXModGhpcy5JVl9MRU5HVEgpO1xuICAgICAgY29uc3QgcGFzc3BocmFzZSA9IHRoaXMuZ2V0TWFjaGluZVBhc3NwaHJhc2UoKTtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuZGVyaXZlS2V5KHBhc3NwaHJhc2UsIHNhbHQpO1xuXG4gICAgICAvLyBFbmNyeXB0IHRva2VuXG4gICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYodGhpcy5BTEdPUklUSE0sIGtleSwgaXYpO1xuICAgICAgY29uc3QgZW5jcnlwdGVkID0gQnVmZmVyLmNvbmNhdChbXG4gICAgICAgIGNpcGhlci51cGRhdGUodmFsaWRhdGlvbi5ub3JtYWxpemVkQ29udGVudCwgJ3V0ZjgnKSxcbiAgICAgICAgY2lwaGVyLmZpbmFsKClcbiAgICAgIF0pO1xuICAgICAgY29uc3QgdGFnID0gY2lwaGVyLmdldEF1dGhUYWcoKTtcblxuICAgICAgLy8gQ3JlYXRlIHN0b3JhZ2UgZm9ybWF0OiBzYWx0ICsgaXYgKyB0YWcgKyBlbmNyeXB0ZWRcbiAgICAgIGNvbnN0IHN0b3JlZCA9IEJ1ZmZlci5jb25jYXQoW3NhbHQsIGl2LCB0YWcsIGVuY3J5cHRlZF0pO1xuXG4gICAgICAvLyBXcml0ZSB0byBmaWxlIHdpdGggcmVzdHJpY3RlZCBwZXJtaXNzaW9uc1xuICAgICAgY29uc3QgdG9rZW5QYXRoID0gcGF0aC5qb2luKHRoaXMuVE9LRU5fRElSLCB0aGlzLlRPS0VOX0ZJTEUpO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHRva2VuUGF0aCwgc3RvcmVkLCB7IG1vZGU6IDBvNjAwIH0pO1xuXG4gICAgICAvLyBMb2cgc2VjdXJpdHkgZXZlbnRcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1RPS0VOX1ZBTElEQVRJT05fU1VDQ0VTUycsXG4gICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgc291cmNlOiAnVG9rZW5NYW5hZ2VyLnN0b3JlR2l0SHViVG9rZW4nLFxuICAgICAgICBkZXRhaWxzOiAnR2l0SHViIHRva2VuIHN0b3JlZCBzZWN1cmVseScsXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgdG9rZW5UeXBlOiB0aGlzLmdldFRva2VuVHlwZSh0b2tlbiksXG4gICAgICAgICAgdG9rZW5QcmVmaXg6IHRoaXMuZ2V0VG9rZW5QcmVmaXgodG9rZW4pXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBsb2dnZXIuaW5mbygnR2l0SHViIHRva2VuIHN0b3JlZCBzZWN1cmVseScpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdUT0tFTl9WQUxJREFUSU9OX0ZBSUxVUkUnLFxuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ1Rva2VuTWFuYWdlci5zdG9yZUdpdEh1YlRva2VuJyxcbiAgICAgICAgZGV0YWlsczogYEZhaWxlZCB0byBzdG9yZSBHaXRIdWIgdG9rZW46ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKGBGYWlsZWQgdG8gc3RvcmUgdG9rZW46ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIEdpdEh1YiB0b2tlbiBmcm9tIHNlY3VyZSBzdG9yYWdlXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgcmV0cmlldmVHaXRIdWJUb2tlbigpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdG9rZW5QYXRoID0gcGF0aC5qb2luKHRoaXMuVE9LRU5fRElSLCB0aGlzLlRPS0VOX0ZJTEUpO1xuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiBmaWxlIGV4aXN0c1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMuYWNjZXNzKHRva2VuUGF0aCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gTm8gc3RvcmVkIHRva2VuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBSZWFkIGVuY3J5cHRlZCBkYXRhXG4gICAgICBjb25zdCBzdG9yZWQgPSBhd2FpdCBmcy5yZWFkRmlsZSh0b2tlblBhdGgpO1xuICAgICAgXG4gICAgICAvLyBFeHRyYWN0IGNvbXBvbmVudHNcbiAgICAgIGNvbnN0IHNhbHQgPSBzdG9yZWQuc3ViYXJyYXkoMCwgdGhpcy5TQUxUX0xFTkdUSCk7XG4gICAgICBjb25zdCBpdiA9IHN0b3JlZC5zdWJhcnJheSh0aGlzLlNBTFRfTEVOR1RILCB0aGlzLlNBTFRfTEVOR1RIICsgdGhpcy5JVl9MRU5HVEgpO1xuICAgICAgY29uc3QgdGFnID0gc3RvcmVkLnN1YmFycmF5KHRoaXMuU0FMVF9MRU5HVEggKyB0aGlzLklWX0xFTkdUSCwgdGhpcy5TQUxUX0xFTkdUSCArIHRoaXMuSVZfTEVOR1RIICsgdGhpcy5UQUdfTEVOR1RIKTtcbiAgICAgIGNvbnN0IGVuY3J5cHRlZCA9IHN0b3JlZC5zdWJhcnJheSh0aGlzLlNBTFRfTEVOR1RIICsgdGhpcy5JVl9MRU5HVEggKyB0aGlzLlRBR19MRU5HVEgpO1xuXG4gICAgICAvLyBEZXJpdmUgZGVjcnlwdGlvbiBrZXlcbiAgICAgIGNvbnN0IHBhc3NwaHJhc2UgPSB0aGlzLmdldE1hY2hpbmVQYXNzcGhyYXNlKCk7XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmRlcml2ZUtleShwYXNzcGhyYXNlLCBzYWx0KTtcblxuICAgICAgLy8gRGVjcnlwdCB0b2tlblxuICAgICAgY29uc3QgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdih0aGlzLkFMR09SSVRITSwga2V5LCBpdik7XG4gICAgICBkZWNpcGhlci5zZXRBdXRoVGFnKHRhZyk7XG4gICAgICBcbiAgICAgIGNvbnN0IGRlY3J5cHRlZCA9IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgICBkZWNpcGhlci51cGRhdGUoZW5jcnlwdGVkKSxcbiAgICAgICAgZGVjaXBoZXIuZmluYWwoKVxuICAgICAgXSkudG9TdHJpbmcoJ3V0ZjgnKTtcblxuICAgICAgLy8gVmFsaWRhdGUgZGVjcnlwdGVkIHRva2VuXG4gICAgICBpZiAoIXRoaXMudmFsaWRhdGVUb2tlbkZvcm1hdChkZWNyeXB0ZWQpKSB7XG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnVE9LRU5fVkFMSURBVElPTl9GQUlMVVJFJyxcbiAgICAgICAgICBzZXZlcml0eTogJ0hJR0gnLFxuICAgICAgICAgIHNvdXJjZTogJ1Rva2VuTWFuYWdlci5yZXRyaWV2ZUdpdEh1YlRva2VuJyxcbiAgICAgICAgICBkZXRhaWxzOiAnRGVjcnlwdGVkIHRva2VuIGhhcyBpbnZhbGlkIGZvcm1hdCdcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdUT0tFTl9WQUxJREFUSU9OX1NVQ0NFU1MnLFxuICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgIHNvdXJjZTogJ1Rva2VuTWFuYWdlci5yZXRyaWV2ZUdpdEh1YlRva2VuJyxcbiAgICAgICAgZGV0YWlsczogJ0dpdEh1YiB0b2tlbiByZXRyaWV2ZWQgZnJvbSBzZWN1cmUgc3RvcmFnZScsXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgdG9rZW5UeXBlOiB0aGlzLmdldFRva2VuVHlwZShkZWNyeXB0ZWQpLFxuICAgICAgICAgIHRva2VuUHJlZml4OiB0aGlzLmdldFRva2VuUHJlZml4KGRlY3J5cHRlZClcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBkZWNyeXB0ZWQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1RPS0VOX1ZBTElEQVRJT05fRkFJTFVSRScsXG4gICAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgICAgc291cmNlOiAnVG9rZW5NYW5hZ2VyLnJldHJpZXZlR2l0SHViVG9rZW4nLFxuICAgICAgICBkZXRhaWxzOiBgRmFpbGVkIHRvIHJldHJpZXZlIEdpdEh1YiB0b2tlbjogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmRlYnVnKCdGYWlsZWQgdG8gcmV0cmlldmUgc3RvcmVkIHRva2VuJywgeyBlcnJvciB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgc3RvcmVkIEdpdEh1YiB0b2tlblxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHJlbW92ZVN0b3JlZFRva2VuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0b2tlblBhdGggPSBwYXRoLmpvaW4odGhpcy5UT0tFTl9ESVIsIHRoaXMuVE9LRU5fRklMRSk7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGZpbGUgZXhpc3RzIGJlZm9yZSBhdHRlbXB0aW5nIGRlbGV0aW9uXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy5hY2Nlc3ModG9rZW5QYXRoKTtcbiAgICAgICAgYXdhaXQgZnMudW5saW5rKHRva2VuUGF0aCk7XG4gICAgICAgIFxuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ1RPS0VOX0NBQ0hFX0NMRUFSRUQnLFxuICAgICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgICBzb3VyY2U6ICdUb2tlbk1hbmFnZXIucmVtb3ZlU3RvcmVkVG9rZW4nLFxuICAgICAgICAgIGRldGFpbHM6ICdHaXRIdWIgdG9rZW4gcmVtb3ZlZCBmcm9tIHNlY3VyZSBzdG9yYWdlJ1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGxvZ2dlci5pbmZvKCdTdG9yZWQgR2l0SHViIHRva2VuIHJlbW92ZWQnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIEZpbGUgZG9lc24ndCBleGlzdCBvciBjb3VsZG4ndCBiZSBkZWxldGVkXG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnTm8gc3RvcmVkIHRva2VuIHRvIHJlbW92ZScpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdUT0tFTl9DQUNIRV9DTEVBUkVEJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICBzb3VyY2U6ICdUb2tlbk1hbmFnZXIucmVtb3ZlU3RvcmVkVG9rZW4nLFxuICAgICAgICBkZXRhaWxzOiBgRmFpbGVkIHRvIHJlbW92ZSBzdG9yZWQgdG9rZW46ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGxvZ2dlci53YXJuKCdGYWlsZWQgdG8gcmVtb3ZlIHN0b3JlZCB0b2tlbicsIHsgZXJyb3IgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBHaXRIdWIgdG9rZW4gZnJvbSBlbnZpcm9ubWVudCBvciBzZWN1cmUgc3RvcmFnZVxuICAgKiBVcGRhdGVkIHRvIGNoZWNrIHNlY3VyZSBzdG9yYWdlIGlmIGVudmlyb25tZW50IHZhcmlhYmxlIG5vdCBzZXRcbiAgICovXG4gIHN0YXRpYyBhc3luYyBnZXRHaXRIdWJUb2tlbkFzeW5jKCk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIC8vIEZpcnN0IGNoZWNrIGVudmlyb25tZW50IHZhcmlhYmxlXG4gICAgY29uc3QgZW52VG9rZW4gPSB0aGlzLmdldEdpdEh1YlRva2VuKCk7XG4gICAgaWYgKGVudlRva2VuKSB7XG4gICAgICByZXR1cm4gZW52VG9rZW47XG4gICAgfVxuXG4gICAgLy8gRmFsbCBiYWNrIHRvIHNlY3VyZSBzdG9yYWdlXG4gICAgcmV0dXJuIHRoaXMucmV0cmlldmVHaXRIdWJUb2tlbigpO1xuICB9XG59Il19
504
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5NYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlY3VyaXR5L3Rva2VuTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQW1CcEU7O0dBRUc7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQUNmLE1BQU0sQ0FBVSxxQkFBcUIsR0FBRztRQUM5QywrREFBK0Q7UUFDL0QscUJBQXFCLEVBQUUsVUFBVSxFQUFPLHlCQUF5QjtRQUNqRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBSyxzQ0FBc0M7UUFDOUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFVLGlDQUFpQztRQUN6RSxpQkFBaUIsRUFBRSxVQUFVLEVBQVcsbUNBQW1DO1FBQzNFLGFBQWEsRUFBRSxVQUFVLEVBQWUsaUJBQWlCO1FBQ3pELGtCQUFrQixFQUFFLFVBQVUsRUFBVSwyQkFBMkI7UUFDbkUsdUZBQXVGO1FBQ3ZGLG9CQUFvQixFQUFFLGVBQWUsQ0FBRyxpQ0FBaUM7S0FDMUUsQ0FBQztJQUVGLCtCQUErQjtJQUN2QixNQUFNLENBQVUsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sQ0FBVSxVQUFVLEdBQUcsa0JBQWtCLENBQUM7SUFDaEQsTUFBTSxDQUFVLFNBQVMsR0FBRyxhQUFhLENBQUM7SUFDMUMsTUFBTSxDQUFVLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFDaEMsTUFBTSxDQUFVLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDL0IsTUFBTSxDQUFVLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFDaEMsTUFBTSxDQUFVLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDakMsTUFBTSxDQUFVLFVBQVUsR0FBRyxNQUFNLENBQUM7SUFFNUMsOEVBQThFO0lBQ3RFLE1BQU0sQ0FBQyxzQkFBc0IsR0FBdUIsSUFBSSxDQUFDO0lBRWpFOzs7T0FHRztJQUNLLE1BQU0sQ0FBQyx5QkFBeUI7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztRQUNwRSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyw0QkFBNEI7UUFDakMsT0FBTyxJQUFJLFdBQVcsQ0FBQztZQUNyQixXQUFXLEVBQUUsRUFBRSxFQUFXLHlCQUF5QjtZQUNuRCxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsV0FBVztZQUNyQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBTSxxQ0FBcUM7U0FDaEUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQywyQkFBMkI7UUFDaEMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFhO1FBQ3RDLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDeEMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsZ0RBQWdEO1FBQ2hELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FDOUQsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FDcEIsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxjQUFjO1FBQ25CLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDO1FBRXZDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztZQUNyRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDckMsTUFBTSxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsRUFBRTtnQkFDbEQsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO2dCQUN2QyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07YUFDckIsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsRUFBRTtZQUN2QyxTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7WUFDbkMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO1NBQ3hDLENBQUMsQ0FBQztRQUVILE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFhO1FBQzlCLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvQixPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBYTtRQUMvQix3REFBd0Q7UUFDeEQsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUQsT0FBTyxvQ0FBb0MsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakUsT0FBTyx1QkFBdUIsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDOUQsT0FBTyxvQkFBb0IsQ0FBQztRQUM5QixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDN0QsT0FBTyxtQkFBbUIsQ0FBQztRQUM3QixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pELE9BQU8sZUFBZSxDQUFDO1FBQ3pCLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM5RCxPQUFPLG9CQUFvQixDQUFDO1FBQzlCLENBQUM7UUFDRCw2QkFBNkI7UUFDN0IsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEUsT0FBTyxjQUFjLENBQUM7UUFDeEIsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBYTtRQUNqQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDL0IsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQzlCLEtBQWEsRUFDYixjQUEyQjtRQUUzQixvREFBb0Q7UUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE9BQU87Z0JBQ0wsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsS0FBSyxFQUFFLHNCQUFzQjthQUM5QixDQUFDO1FBQ0osQ0FBQztRQUVELDBDQUEwQztRQUMxQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUNyRCxNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFakQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxFQUFFO2dCQUNsRCxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7Z0JBQ3ZDLFlBQVksRUFBRSxlQUFlLENBQUMsWUFBWTtnQkFDMUMsZUFBZSxFQUFFLGVBQWUsQ0FBQyxlQUFlO2FBQ2pELENBQUMsQ0FBQztZQUVILE1BQU0sSUFBSSxhQUFhLENBQ3JCLHlEQUF5RCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsZUFBZSxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUN6SCxxQkFBcUIsQ0FDdEIsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCx1REFBdUQ7WUFDdkQsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzNCLDBEQUEwRDtZQUMxRCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyw2QkFBNkIsRUFBRTtnQkFDMUQsT0FBTyxFQUFFO29CQUNQLGVBQWUsRUFBRSxVQUFVLEtBQUssRUFBRTtvQkFDbEMsUUFBUSxFQUFFLGdDQUFnQztvQkFDMUMsWUFBWSxFQUFFLGtCQUFrQjtpQkFDakM7YUFDRixDQUFDLENBQUM7WUFFSCxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUNqRyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7WUFFekYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDakIsTUFBTSxLQUFLLEdBQUcscUJBQXFCLFFBQVEsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUM1RSxNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFO29CQUNyQyxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07b0JBQ3ZCLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQztpQkFDeEMsQ0FBQyxDQUFDO2dCQUVILE9BQU87b0JBQ0wsT0FBTyxFQUFFLEtBQUs7b0JBQ2QsS0FBSyxFQUFFLEtBQUs7aUJBQ2IsQ0FBQztZQUNKLENBQUM7WUFFRCx1Q0FBdUM7WUFDdkMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEUsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUU5RSx1Q0FBdUM7WUFDdkMsTUFBTSxpQkFBaUIsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUM5RCxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUM1QixDQUFDO1lBRUYsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQzNELENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FDN0IsQ0FBQztnQkFFRixNQUFNLENBQUMsSUFBSSxDQUFDLCtCQUErQixFQUFFO29CQUMzQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7b0JBQ3ZDLGFBQWEsRUFBRSxhQUFhO29CQUM1QixhQUFhLEVBQUUsV0FBVztpQkFDM0IsQ0FBQyxDQUFDO2dCQUVILE9BQU87b0JBQ0wsT0FBTyxFQUFFLEtBQUs7b0JBQ2QsTUFBTSxFQUFFLFdBQVc7b0JBQ25CLEtBQUssRUFBRSw0QkFBNEIsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtpQkFDOUQsQ0FBQztZQUNKLENBQUM7WUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLDZCQUE2QixFQUFFO2dCQUN6QyxTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7Z0JBQ25DLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQztnQkFDdkMsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLGtCQUFrQixFQUFFLGtCQUFrQjthQUN2QyxDQUFDLENBQUM7WUFFSCxPQUFPO2dCQUNMLE9BQU8sRUFBRSxJQUFJO2dCQUNiLE1BQU0sRUFBRSxXQUFXO2dCQUNuQixTQUFTLEVBQUU7b0JBQ1QsU0FBUyxFQUFFLGtCQUFrQjtvQkFDN0IsU0FBUyxFQUFFLElBQUksSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7aUJBQzNDO2FBQ0YsQ0FBQztRQUVKLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsZ0VBQWdFO1lBQ2hFLElBQUksS0FBSyxZQUFZLGFBQWEsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLHFCQUFxQixFQUFFLENBQUM7Z0JBQzNFLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDL0MsT0FBTztvQkFDTCxPQUFPLEVBQUUsS0FBSztvQkFDZCxpQkFBaUIsRUFBRSxJQUFJO29CQUN2QixZQUFZLEVBQUUsYUFBYSxDQUFDLFlBQVk7b0JBQ3hDLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTztpQkFDckIsQ0FBQztZQUNKLENBQUM7WUFFRCxNQUFNLFlBQVksR0FBRyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7WUFDOUUsTUFBTSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRTtnQkFDckMsS0FBSyxFQUFFLFlBQVk7Z0JBQ25CLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQzthQUN4QyxDQUFDLENBQUM7WUFFSCxPQUFPO2dCQUNMLE9BQU8sRUFBRSxLQUFLO2dCQUNkLEtBQUssRUFBRSxxQkFBcUIsWUFBWSxFQUFFO2FBQzNDLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLHNCQUFzQixDQUFDLEtBQWEsRUFBRSxLQUFjO1FBQ3pELHNEQUFzRDtRQUN0RCwrQ0FBK0M7UUFDL0MsSUFBSSxXQUFXLEdBQUcsS0FBSzthQUNwQixVQUFVLENBQUMsWUFBWSxFQUFFLGdCQUFnQixDQUFDO2FBQzFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxxQkFBcUIsQ0FBQzthQUN0RCxVQUFVLENBQUMsWUFBWSxFQUFFLG9CQUFvQixDQUFDO2FBQzlDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLENBQUM7YUFDM0MsVUFBVSxDQUFDLFlBQVksRUFBRSxvQkFBb0IsQ0FBQzthQUM5QyxVQUFVLENBQUMsWUFBWSxFQUFFLGtCQUFrQixDQUFDO2FBQzVDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUUsK0JBQStCO1FBRXRGLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9DLFdBQVcsSUFBSSxZQUFZLFdBQVcsR0FBRyxDQUFDO1FBQzVDLENBQUM7UUFFRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFNBQW1FO1FBQzFGLFFBQVEsU0FBUyxFQUFFLENBQUM7WUFDbEIsS0FBSyxNQUFNO2dCQUNULE9BQU87b0JBQ0wsUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUcsNENBQTRDO29CQUN4RSxRQUFRLEVBQUUsQ0FBQyxZQUFZLENBQUM7aUJBQ3pCLENBQUM7WUFFSixLQUFLLE9BQU87Z0JBQ1YsT0FBTztvQkFDTCxRQUFRLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRyw0Q0FBNEM7b0JBQ3hFLFFBQVEsRUFBRSxDQUFDLFlBQVksQ0FBQztpQkFDekIsQ0FBQztZQUVKLEtBQUssYUFBYSxDQUFDLENBQUMsdURBQXVEO1lBQzNFLEtBQUssWUFBWSxFQUFFLHFCQUFxQjtnQkFDdEMsT0FBTztvQkFDTCxRQUFRLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRyw0Q0FBNEM7b0JBQ3hFLFFBQVEsRUFBRSxDQUFDLFlBQVksQ0FBQztpQkFDekIsQ0FBQztZQUVKLEtBQUssTUFBTTtnQkFDVCxPQUFPO29CQUNMLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQztvQkFDbEIsUUFBUSxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN6QixDQUFDO1lBRUo7Z0JBQ0UsT0FBTztvQkFDTCxRQUFRLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBRSw0Q0FBNEM7aUJBQ3hFLENBQUM7UUFDTixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FDakMsU0FBbUU7UUFFbkUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXBDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU87Z0JBQ0wsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsS0FBSyxFQUFFLDJCQUEyQjthQUNuQyxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RCxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFrQixFQUFFLElBQVk7UUFDdkQsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRDs7O09BR0c7SUFDSyxNQUFNLENBQUMsb0JBQW9CO1FBQ2pDLHNFQUFzRTtRQUN0RSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzlGLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2xILE1BQU0sS0FBSyxHQUFHLDRCQUE0QixDQUFDO1FBRTNDLE9BQU8sR0FBRyxLQUFLLElBQUksUUFBUSxJQUFJLFFBQVEsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsS0FBYTtRQUN6QyxJQUFJLENBQUM7WUFDSCw4QkFBOEI7WUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNyQyxNQUFNLElBQUksYUFBYSxDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFDbEQsQ0FBQztZQUVELCtCQUErQjtZQUMvQixNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDeEIsTUFBTSxJQUFJLGFBQWEsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1lBQy9ELENBQUM7WUFFRCwwQkFBMEI7WUFDMUIsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBRWpFLGlDQUFpQztZQUNqQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNsRCxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM5QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUMvQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUU3QyxnQkFBZ0I7WUFDaEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM5RCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUM5QixNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUM7Z0JBQ25ELE1BQU0sQ0FBQyxLQUFLLEVBQUU7YUFDZixDQUFDLENBQUM7WUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7WUFFaEMscURBQXFEO1lBQ3JELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBRXpELDRDQUE0QztZQUM1QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzdELE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFFdkQscUJBQXFCO1lBQ3JCLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDL0IsSUFBSSxFQUFFLDBCQUEwQjtnQkFDaEMsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsTUFBTSxFQUFFLCtCQUErQjtnQkFDdkMsT0FBTyxFQUFFLDhCQUE4QjtnQkFDdkMsUUFBUSxFQUFFO29CQUNSLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztvQkFDbkMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO2lCQUN4QzthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDL0IsSUFBSSxFQUFFLDBCQUEwQjtnQkFDaEMsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLE1BQU0sRUFBRSwrQkFBK0I7Z0JBQ3ZDLE9BQU8sRUFBRSxpQ0FBaUMsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFO2FBQ3JHLENBQUMsQ0FBQztZQUVILE1BQU0sSUFBSSxhQUFhLENBQUMsMEJBQTBCLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFDaEgsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsbUJBQW1CO1FBQzlCLElBQUksQ0FBQztZQUNILE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFN0QsdUJBQXVCO1lBQ3ZCLElBQUksQ0FBQztnQkFDSCxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0IsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxrQkFBa0I7Z0JBQ2xCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUVELHNCQUFzQjtZQUN0QixNQUFNLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFNUMscUJBQXFCO1lBQ3JCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNsRCxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDaEYsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNwSCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFdkYsd0JBQXdCO1lBQ3hCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQy9DLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRTdDLGdCQUFnQjtZQUNoQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUV6QixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUM5QixRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztnQkFDMUIsUUFBUSxDQUFDLEtBQUssRUFBRTthQUNqQixDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRXBCLDJCQUEyQjtZQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDL0IsSUFBSSxFQUFFLDBCQUEwQjtvQkFDaEMsUUFBUSxFQUFFLE1BQU07b0JBQ2hCLE1BQU0sRUFBRSxrQ0FBa0M7b0JBQzFDLE9BQU8sRUFBRSxvQ0FBb0M7aUJBQzlDLENBQUMsQ0FBQztnQkFDSCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFFRCxlQUFlLENBQUMsZ0JBQWdCLENBQUM7Z0JBQy9CLElBQUksRUFBRSwwQkFBMEI7Z0JBQ2hDLFFBQVEsRUFBRSxLQUFLO2dCQUNmLE1BQU0sRUFBRSxrQ0FBa0M7Z0JBQzFDLE9BQU8sRUFBRSw0Q0FBNEM7Z0JBQ3JELFFBQVEsRUFBRTtvQkFDUixTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7b0JBQ3ZDLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztpQkFDNUM7YUFDRixDQUFDLENBQUM7WUFFSCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDL0IsSUFBSSxFQUFFLDBCQUEwQjtnQkFDaEMsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLE1BQU0sRUFBRSxrQ0FBa0M7Z0JBQzFDLE9BQU8sRUFBRSxvQ0FBb0MsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFO2FBQ3hHLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxLQUFLLENBQUMsaUNBQWlDLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCO1FBQzVCLElBQUksQ0FBQztZQUNILE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFN0Qsa0RBQWtEO1lBQ2xELElBQUksQ0FBQztnQkFDSCxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzNCLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFFM0IsZUFBZSxDQUFDLGdCQUFnQixDQUFDO29CQUMvQixJQUFJLEVBQUUscUJBQXFCO29CQUMzQixRQUFRLEVBQUUsS0FBSztvQkFDZixNQUFNLEVBQUUsZ0NBQWdDO29CQUN4QyxPQUFPLEVBQUUsMENBQTBDO2lCQUNwRCxDQUFDLENBQUM7Z0JBRUgsTUFBTSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1lBQzdDLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLDRDQUE0QztnQkFDNUMsTUFBTSxDQUFDLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1lBQzVDLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDL0IsSUFBSSxFQUFFLHFCQUFxQjtnQkFDM0IsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsTUFBTSxFQUFFLGdDQUFnQztnQkFDeEMsT0FBTyxFQUFFLGtDQUFrQyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUU7YUFDdEcsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLElBQUksQ0FBQywrQkFBK0IsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDMUQsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLG1CQUFtQjtRQUM5QixtQ0FBbUM7UUFDbkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZDLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBRUQsOEJBQThCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDcEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2VjdXJlIEdpdEh1YiB0b2tlbiBtYW5hZ2VtZW50IGFuZCB2YWxpZGF0aW9uXG4gKi9cblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IFJhdGVMaW1pdGVyIH0gZnJvbSAnLi4vdXRpbHMvUmF0ZUxpbWl0ZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlFcnJvciB9IGZyb20gJy4vZXJyb3JzLmpzJztcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdvcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuL3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuU2NvcGVzIHtcbiAgcmVxdWlyZWQ6IHN0cmluZ1tdO1xuICBvcHRpb25hbD86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuVmFsaWRhdGlvblJlc3VsdCB7XG4gIGlzVmFsaWQ6IGJvb2xlYW47XG4gIHNjb3Blcz86IHN0cmluZ1tdO1xuICByYXRlTGltaXQ/OiB7XG4gICAgcmVtYWluaW5nOiBudW1iZXI7XG4gICAgcmVzZXRUaW1lOiBEYXRlO1xuICB9O1xuICByYXRlTGltaXRFeGNlZWRlZD86IGJvb2xlYW47XG4gIHJldHJ5QWZ0ZXJNcz86IG51bWJlcjtcbiAgZXJyb3I/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VjdXJlIEdpdEh1YiB0b2tlbiBtYW5hZ2VyIHdpdGggdmFsaWRhdGlvbiBhbmQgcHJvdGVjdGlvblxuICovXG5leHBvcnQgY2xhc3MgVG9rZW5NYW5hZ2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgR0lUSFVCX1RPS0VOX1BBVFRFUk5TID0ge1xuICAgIC8vIE1vcmUgZmxleGlibGUgcGF0dGVybnMgLSBhY2NlcHQgYW55IGNvbnRlbnQgYWZ0ZXIgdGhlIHByZWZpeFxuICAgIFBFUlNPTkFMX0FDQ0VTU19UT0tFTjogL15naHBfLiskLywgICAgICAvLyBQZXJzb25hbCBhY2Nlc3MgdG9rZW5zXG4gICAgRklORV9HUkFJTkVEX1BBVDogL15naXRodWJfcGF0Xy4rJC8sICAgIC8vIEZpbmUtZ3JhaW5lZCBwZXJzb25hbCBhY2Nlc3MgdG9rZW5zXG4gICAgSU5TVEFMTEFUSU9OX1RPS0VOOiAvXmdoc18uKyQvLCAgICAgICAgIC8vIEdpdEh1YiBBcHAgaW5zdGFsbGF0aW9uIHRva2Vuc1xuICAgIFVTRVJfQUNDRVNTX1RPS0VOOiAvXmdodV8uKyQvLCAgICAgICAgICAvLyBHaXRIdWIgQXBwIHVzZXItdG8tc2VydmVyIHRva2Vuc1xuICAgIFJFRlJFU0hfVE9LRU46IC9eZ2hyXy4rJC8sICAgICAgICAgICAgICAvLyBSZWZyZXNoIHRva2Vuc1xuICAgIE9BVVRIX0FDQ0VTU19UT0tFTjogL15naG9fLiskLywgICAgICAgICAvLyBPQXV0aCBkZXZpY2UgZmxvdyB0b2tlbnNcbiAgICAvLyBHZW5lcmljIHBhdHRlcm4gdG8gY2F0Y2ggQUxMIEdpdEh1YiB0b2tlbnMgKGdoICsgYW55IGxldHRlciArIHVuZGVyc2NvcmUgKyBhbnl0aGluZylcbiAgICBHRU5FUklDX0dJVEhVQl9UT0tFTjogL15naFthLXpdXy4rJC9pICAgLy8gQ2F0Y2gtYWxsIGZvciBhbnkgZ2gqXyBwYXR0ZXJuXG4gIH07XG5cbiAgLy8gU2VjdXJlIHN0b3JhZ2UgY29uZmlndXJhdGlvblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUT0tFTl9ESVIgPSBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICcuYXV0aCcpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUT0tFTl9GSUxFID0gJ2dpdGh1Yl90b2tlbi5lbmMnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBTEdPUklUSE0gPSAnYWVzLTI1Ni1nY20nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBLRVlfTEVOR1RIID0gMzI7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IElWX0xFTkdUSCA9IDE2O1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUQUdfTEVOR1RIID0gMTY7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFNBTFRfTEVOR1RIID0gMzI7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IElURVJBVElPTlMgPSAxMDAwMDA7XG5cbiAgLy8gUmF0ZSBsaW1pdGVyIGZvciB0b2tlbiB2YWxpZGF0aW9uIG9wZXJhdGlvbnMgLSBwcmV2ZW50cyBicnV0ZSBmb3JjZSBhdHRhY2tzXG4gIHByaXZhdGUgc3RhdGljIHRva2VuVmFsaWRhdGlvbkxpbWl0ZXI6IFJhdGVMaW1pdGVyIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEdldCBvciBjcmVhdGUgdGhlIHRva2VuIHZhbGlkYXRpb24gcmF0ZSBsaW1pdGVyXG4gICAqIFByZXZlbnRzIGJydXRlIGZvcmNlIHRva2VuIHZhbGlkYXRpb24gYXR0YWNrc1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0VG9rZW5WYWxpZGF0aW9uTGltaXRlcigpOiBSYXRlTGltaXRlciB7XG4gICAgaWYgKCF0aGlzLnRva2VuVmFsaWRhdGlvbkxpbWl0ZXIpIHtcbiAgICAgIHRoaXMudG9rZW5WYWxpZGF0aW9uTGltaXRlciA9IHRoaXMuY3JlYXRlVG9rZW5WYWxpZGF0aW9uTGltaXRlcigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50b2tlblZhbGlkYXRpb25MaW1pdGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHJhdGUgbGltaXRlciBzcGVjaWZpY2FsbHkgZm9yIHRva2VuIHZhbGlkYXRpb25cbiAgICogQ29uc2VydmF0aXZlIGxpbWl0cyB0byBwcmV2ZW50IGFidXNlIHdoaWxlIGFsbG93aW5nIGxlZ2l0aW1hdGUgdXNhZ2VcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVUb2tlblZhbGlkYXRpb25MaW1pdGVyKCk6IFJhdGVMaW1pdGVyIHtcbiAgICByZXR1cm4gbmV3IFJhdGVMaW1pdGVyKHtcbiAgICAgIG1heFJlcXVlc3RzOiAxMCwgICAgICAgICAgLy8gMTAgdmFsaWRhdGlvbiBhdHRlbXB0c1xuICAgICAgd2luZG93TXM6IDYwICogNjAgKiAxMDAwLCAvLyBwZXIgaG91clxuICAgICAgbWluRGVsYXlNczogNSAqIDEwMDAgICAgICAvLyA1IHNlY29uZHMgbWluaW11bSBiZXR3ZWVuIGF0dGVtcHRzXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIHRva2VuIHZhbGlkYXRpb24gcmF0ZSBsaW1pdGVyXG4gICAqIFVzZWZ1bCBmb3IgdGVzdGluZyBvciBtYW51YWwgaW50ZXJ2ZW50aW9uXG4gICAqL1xuICBzdGF0aWMgcmVzZXRUb2tlblZhbGlkYXRpb25MaW1pdGVyKCk6IHZvaWQge1xuICAgIHRoaXMudG9rZW5WYWxpZGF0aW9uTGltaXRlcj8ucmVzZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBHaXRIdWIgdG9rZW4gZm9ybWF0XG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGVUb2tlbkZvcm1hdCh0b2tlbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0b2tlbiB8fCB0eXBlb2YgdG9rZW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgYWdhaW5zdCBhbGwga25vd24gR2l0SHViIHRva2VuIHBhdHRlcm5zXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5HSVRIVUJfVE9LRU5fUEFUVEVSTlMpLnNvbWUocGF0dGVybiA9PiBcbiAgICAgIHBhdHRlcm4udGVzdCh0b2tlbilcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBHaXRIdWIgdG9rZW4gZnJvbSBlbnZpcm9ubWVudCB3aXRoIHZhbGlkYXRpb25cbiAgICovXG4gIHN0YXRpYyBnZXRHaXRIdWJUb2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCB0b2tlbiA9IHByb2Nlc3MuZW52LkdJVEhVQl9UT0tFTjtcbiAgICBcbiAgICBpZiAoIXRva2VuKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ05vIEdpdEh1YiB0b2tlbiBmb3VuZCBpbiBlbnZpcm9ubWVudCcpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlVG9rZW5Gb3JtYXQodG9rZW4pKSB7XG4gICAgICBsb2dnZXIud2FybignSW52YWxpZCBHaXRIdWIgdG9rZW4gZm9ybWF0IGRldGVjdGVkJywge1xuICAgICAgICB0b2tlblByZWZpeDogdGhpcy5nZXRUb2tlblByZWZpeCh0b2tlbiksXG4gICAgICAgIGxlbmd0aDogdG9rZW4ubGVuZ3RoXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxvZ2dlci5kZWJ1ZygnVmFsaWQgR2l0SHViIHRva2VuIGZvdW5kJywge1xuICAgICAgdG9rZW5UeXBlOiB0aGlzLmdldFRva2VuVHlwZSh0b2tlbiksXG4gICAgICB0b2tlblByZWZpeDogdGhpcy5nZXRUb2tlblByZWZpeCh0b2tlbilcbiAgICB9KTtcblxuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRhY3QgdG9rZW4gZm9yIHNhZmUgbG9nZ2luZ1xuICAgKi9cbiAgc3RhdGljIHJlZGFjdFRva2VuKHRva2VuOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdG9rZW4gfHwgdG9rZW4ubGVuZ3RoIDwgOCkge1xuICAgICAgcmV0dXJuICdbUkVEQUNURURdJztcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHRva2VuLnN1YnN0cmluZygwLCA0KSArICcuLi4nICsgdG9rZW4uc3Vic3RyaW5nKHRva2VuLmxlbmd0aCAtIDQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0b2tlbiB0eXBlIGZyb20gZm9ybWF0XG4gICAqL1xuICBzdGF0aWMgZ2V0VG9rZW5UeXBlKHRva2VuOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIENoZWNrIGZpbmUtZ3JhaW5lZCBQQVQgZmlyc3Qgc2luY2UgaXQncyBtb3JlIHNwZWNpZmljXG4gICAgaWYgKHRoaXMuR0lUSFVCX1RPS0VOX1BBVFRFUk5TLkZJTkVfR1JBSU5FRF9QQVQudGVzdCh0b2tlbikpIHtcbiAgICAgIHJldHVybiAnRmluZS1ncmFpbmVkIFBlcnNvbmFsIEFjY2VzcyBUb2tlbic7XG4gICAgfVxuICAgIGlmICh0aGlzLkdJVEhVQl9UT0tFTl9QQVRURVJOUy5QRVJTT05BTF9BQ0NFU1NfVE9LRU4udGVzdCh0b2tlbikpIHtcbiAgICAgIHJldHVybiAnUGVyc29uYWwgQWNjZXNzIFRva2VuJztcbiAgICB9XG4gICAgaWYgKHRoaXMuR0lUSFVCX1RPS0VOX1BBVFRFUk5TLklOU1RBTExBVElPTl9UT0tFTi50ZXN0KHRva2VuKSkge1xuICAgICAgcmV0dXJuICdJbnN0YWxsYXRpb24gVG9rZW4nO1xuICAgIH1cbiAgICBpZiAodGhpcy5HSVRIVUJfVE9LRU5fUEFUVEVSTlMuVVNFUl9BQ0NFU1NfVE9LRU4udGVzdCh0b2tlbikpIHtcbiAgICAgIHJldHVybiAnVXNlciBBY2Nlc3MgVG9rZW4nO1xuICAgIH1cbiAgICBpZiAodGhpcy5HSVRIVUJfVE9LRU5fUEFUVEVSTlMuUkVGUkVTSF9UT0tFTi50ZXN0KHRva2VuKSkge1xuICAgICAgcmV0dXJuICdSZWZyZXNoIFRva2VuJztcbiAgICB9XG4gICAgaWYgKHRoaXMuR0lUSFVCX1RPS0VOX1BBVFRFUk5TLk9BVVRIX0FDQ0VTU19UT0tFTi50ZXN0KHRva2VuKSkge1xuICAgICAgcmV0dXJuICdPQXV0aCBBY2Nlc3MgVG9rZW4nO1xuICAgIH1cbiAgICAvLyBDaGVjayBnZW5lcmljIHBhdHRlcm4gbGFzdFxuICAgIGlmICh0aGlzLkdJVEhVQl9UT0tFTl9QQVRURVJOUy5HRU5FUklDX0dJVEhVQl9UT0tFTi50ZXN0KHRva2VuKSkge1xuICAgICAgcmV0dXJuICdHaXRIdWIgVG9rZW4nO1xuICAgIH1cbiAgICByZXR1cm4gJ1Vua25vd24nO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzYWZlIHRva2VuIHByZWZpeCBmb3IgbG9nZ2luZ1xuICAgKi9cbiAgc3RhdGljIGdldFRva2VuUHJlZml4KHRva2VuOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdG9rZW4gfHwgdG9rZW4ubGVuZ3RoIDwgNCkge1xuICAgICAgcmV0dXJuICdbSU5WQUxJRF0nO1xuICAgIH1cbiAgICByZXR1cm4gdG9rZW4uc3Vic3RyaW5nKDAsIDQpICsgJy4uLic7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdG9rZW4gc2NvcGVzIHZpYSBHaXRIdWIgQVBJXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgdmFsaWRhdGVUb2tlblNjb3BlcyhcbiAgICB0b2tlbjogc3RyaW5nLCBcbiAgICByZXF1aXJlZFNjb3BlczogVG9rZW5TY29wZXNcbiAgKTogUHJvbWlzZTxUb2tlblZhbGlkYXRpb25SZXN1bHQ+IHtcbiAgICAvLyBWYWxpZGF0ZSB0b2tlbiBmb3JtYXQgYmVmb3JlIGNvbnN1bWluZyByYXRlIGxpbWl0XG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlVG9rZW5Gb3JtYXQodG9rZW4pKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6ICdJbnZhbGlkIHRva2VuIGZvcm1hdCdcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgcmF0ZSBsaW1pdCBiZWZvcmUgbWFraW5nIEFQSSBjYWxsXG4gICAgY29uc3QgcmF0ZUxpbWl0ZXIgPSB0aGlzLmdldFRva2VuVmFsaWRhdGlvbkxpbWl0ZXIoKTtcbiAgICBjb25zdCByYXRlTGltaXRTdGF0dXMgPSByYXRlTGltaXRlci5jaGVja0xpbWl0KCk7XG5cbiAgICBpZiAoIXJhdGVMaW1pdFN0YXR1cy5hbGxvd2VkKSB7XG4gICAgICBsb2dnZXIud2FybignVG9rZW4gdmFsaWRhdGlvbiByYXRlIGxpbWl0IGV4Y2VlZGVkJywge1xuICAgICAgICB0b2tlblByZWZpeDogdGhpcy5nZXRUb2tlblByZWZpeCh0b2tlbiksXG4gICAgICAgIHJldHJ5QWZ0ZXJNczogcmF0ZUxpbWl0U3RhdHVzLnJldHJ5QWZ0ZXJNcyxcbiAgICAgICAgcmVtYWluaW5nVG9rZW5zOiByYXRlTGltaXRTdGF0dXMucmVtYWluaW5nVG9rZW5zXG4gICAgICB9KTtcblxuICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoXG4gICAgICAgIGBUb2tlbiB2YWxpZGF0aW9uIHJhdGUgbGltaXQgZXhjZWVkZWQuIFBsZWFzZSByZXRyeSBpbiAke01hdGguY2VpbCgocmF0ZUxpbWl0U3RhdHVzLnJldHJ5QWZ0ZXJNcyB8fCAwKSAvIDEwMDApfSBzZWNvbmRzLmAsXG4gICAgICAgICdSQVRFX0xJTUlUX0VYQ0VFREVEJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gQ29uc3VtZSByYXRlIGxpbWl0IHRva2VuIGZvciB0aGlzIHZhbGlkYXRpb24gYXR0ZW1wdFxuICAgICAgcmF0ZUxpbWl0ZXIuY29uc3VtZVRva2VuKCk7XG4gICAgICAvLyBNYWtlIGEgdGVzdCBBUEkgY2FsbCB0byBjaGVjayB0b2tlbiB2YWxpZGl0eSBhbmQgc2NvcGVzXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCdodHRwczovL2FwaS5naXRodWIuY29tL3VzZXInLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vdm5kLmdpdGh1Yi52Mytqc29uJyxcbiAgICAgICAgICAnVXNlci1BZ2VudCc6ICdEb2xsaG91c2VNQ1AvMS4wJ1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmF0ZUxpbWl0UmVtYWluaW5nID0gTnVtYmVyLnBhcnNlSW50KHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LXJhdGVsaW1pdC1yZW1haW5pbmcnKSB8fCAnMCcpO1xuICAgICAgY29uc3QgcmF0ZUxpbWl0UmVzZXQgPSBOdW1iZXIucGFyc2VJbnQocmVzcG9uc2UuaGVhZGVycy5nZXQoJ3gtcmF0ZWxpbWl0LXJlc2V0JykgfHwgJzAnKTtcblxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICBjb25zdCBlcnJvciA9IGBHaXRIdWIgQVBJIGVycm9yOiAke3Jlc3BvbnNlLnN0YXR1c30gJHtyZXNwb25zZS5zdGF0dXNUZXh0fWA7XG4gICAgICAgIGxvZ2dlci53YXJuKCdUb2tlbiB2YWxpZGF0aW9uIGZhaWxlZCcsIHtcbiAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICB0b2tlblByZWZpeDogdGhpcy5nZXRUb2tlblByZWZpeCh0b2tlbilcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAgIGVycm9yOiBlcnJvclxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBFeHRyYWN0IHNjb3BlcyBmcm9tIHJlc3BvbnNlIGhlYWRlcnNcbiAgICAgIGNvbnN0IHNjb3Blc0hlYWRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LW9hdXRoLXNjb3BlcycpIHx8ICcnO1xuICAgICAgY29uc3QgdG9rZW5TY29wZXMgPSBzY29wZXNIZWFkZXIuc3BsaXQoJywnKS5tYXAocyA9PiBzLnRyaW0oKSkuZmlsdGVyKHMgPT4gcyk7XG5cbiAgICAgIC8vIENoZWNrIGlmIHJlcXVpcmVkIHNjb3BlcyBhcmUgcHJlc2VudFxuICAgICAgY29uc3QgaGFzUmVxdWlyZWRTY29wZXMgPSByZXF1aXJlZFNjb3Blcy5yZXF1aXJlZC5ldmVyeShzY29wZSA9PiBcbiAgICAgICAgdG9rZW5TY29wZXMuaW5jbHVkZXMoc2NvcGUpXG4gICAgICApO1xuXG4gICAgICBpZiAoIWhhc1JlcXVpcmVkU2NvcGVzKSB7XG4gICAgICAgIGNvbnN0IG1pc3NpbmdTY29wZXMgPSByZXF1aXJlZFNjb3Blcy5yZXF1aXJlZC5maWx0ZXIoc2NvcGUgPT4gXG4gICAgICAgICAgIXRva2VuU2NvcGVzLmluY2x1ZGVzKHNjb3BlKVxuICAgICAgICApO1xuICAgICAgICBcbiAgICAgICAgbG9nZ2VyLndhcm4oJ1Rva2VuIG1pc3NpbmcgcmVxdWlyZWQgc2NvcGVzJywge1xuICAgICAgICAgIHRva2VuUHJlZml4OiB0aGlzLmdldFRva2VuUHJlZml4KHRva2VuKSxcbiAgICAgICAgICBtaXNzaW5nU2NvcGVzOiBtaXNzaW5nU2NvcGVzLFxuICAgICAgICAgIGN1cnJlbnRTY29wZXM6IHRva2VuU2NvcGVzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgICAgc2NvcGVzOiB0b2tlblNjb3BlcyxcbiAgICAgICAgICBlcnJvcjogYE1pc3NpbmcgcmVxdWlyZWQgc2NvcGVzOiAke21pc3NpbmdTY29wZXMuam9pbignLCAnKX1gXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5pbmZvKCdUb2tlbiB2YWxpZGF0aW9uIHN1Y2Nlc3NmdWwnLCB7XG4gICAgICAgIHRva2VuVHlwZTogdGhpcy5nZXRUb2tlblR5cGUodG9rZW4pLFxuICAgICAgICB0b2tlblByZWZpeDogdGhpcy5nZXRUb2tlblByZWZpeCh0b2tlbiksXG4gICAgICAgIHNjb3BlczogdG9rZW5TY29wZXMsXG4gICAgICAgIHJhdGVMaW1pdFJlbWFpbmluZzogcmF0ZUxpbWl0UmVtYWluaW5nXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNWYWxpZDogdHJ1ZSxcbiAgICAgICAgc2NvcGVzOiB0b2tlblNjb3BlcyxcbiAgICAgICAgcmF0ZUxpbWl0OiB7XG4gICAgICAgICAgcmVtYWluaW5nOiByYXRlTGltaXRSZW1haW5pbmcsXG4gICAgICAgICAgcmVzZXRUaW1lOiBuZXcgRGF0ZShyYXRlTGltaXRSZXNldCAqIDEwMDApXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSGFuZGxlIFNlY3VyaXR5RXJyb3IgKGluY2x1ZGluZyByYXRlIGxpbWl0IGVycm9ycykgc2VwYXJhdGVseVxuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2VjdXJpdHlFcnJvciAmJiBlcnJvci5jb2RlID09PSAnUkFURV9MSU1JVF9FWENFRURFRCcpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFN0YXR1cyA9IHJhdGVMaW1pdGVyLmNoZWNrTGltaXQoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgICByYXRlTGltaXRFeGNlZWRlZDogdHJ1ZSxcbiAgICAgICAgICByZXRyeUFmdGVyTXM6IGN1cnJlbnRTdGF0dXMucmV0cnlBZnRlck1zLFxuICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InO1xuICAgICAgbG9nZ2VyLmVycm9yKCdUb2tlbiB2YWxpZGF0aW9uIGVycm9yJywge1xuICAgICAgICBlcnJvcjogZXJyb3JNZXNzYWdlLFxuICAgICAgICB0b2tlblByZWZpeDogdGhpcy5nZXRUb2tlblByZWZpeCh0b2tlbilcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IGBWYWxpZGF0aW9uIGVycm9yOiAke2Vycm9yTWVzc2FnZX1gXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgc2FmZSBlcnJvciBtZXNzYWdlIHdpdGhvdXQgdG9rZW4gZXhwb3N1cmVcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVTYWZlRXJyb3JNZXNzYWdlKGVycm9yOiBzdHJpbmcsIHRva2VuPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBSZW1vdmUgYW55IHBvdGVudGlhbCB0b2tlbiBkYXRhIGZyb20gZXJyb3IgbWVzc2FnZXNcbiAgICAvLyBVc2luZyB3b3JkIGJvdW5kYXJpZXMgdG8gYXZvaWQgb3Zlci1tYXRjaGluZ1xuICAgIGxldCBzYWZlTWVzc2FnZSA9IGVycm9yXG4gICAgICAucmVwbGFjZUFsbCgvXFxiZ2hwX1xcUysvZywgJ1tSRURBQ1RFRF9QQVRdJylcbiAgICAgIC5yZXBsYWNlQWxsKC9cXGJnaXRodWJfcGF0X1xcUysvZywgJ1tSRURBQ1RFRF9GSU5FX1BBVF0nKVxuICAgICAgLnJlcGxhY2VBbGwoL1xcYmdoc19cXFMrL2csICdbUkVEQUNURURfSU5TVEFMTF0nKVxuICAgICAgLnJlcGxhY2VBbGwoL1xcYmdodV9cXFMrL2csICdbUkVEQUNURURfVVNFUl0nKVxuICAgICAgLnJlcGxhY2VBbGwoL1xcYmdocl9cXFMrL2csICdbUkVEQUNURURfUkVGUkVTSF0nKVxuICAgICAgLnJlcGxhY2VBbGwoL1xcYmdob19cXFMrL2csICdbUkVEQUNURURfT0FVVEhdJylcbiAgICAgIC5yZXBsYWNlQWxsKC9cXGJnaFthLXpdX1xcUysvZ2ksICdbUkVEQUNURURfVE9LRU5dJyk7ICAvLyBDYXRjaCBhbnkgb3RoZXIgZ2gqXyBwYXR0ZXJuXG5cbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIGNvbnN0IHRva2VuUHJlZml4ID0gdGhpcy5nZXRUb2tlblByZWZpeCh0b2tlbik7XG4gICAgICBzYWZlTWVzc2FnZSArPSBgIChUb2tlbjogJHt0b2tlblByZWZpeH0pYDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2FmZU1lc3NhZ2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG1pbmltdW0gcmVxdWlyZWQgc2NvcGVzIGZvciBkaWZmZXJlbnQgb3BlcmF0aW9uc1xuICAgKiBcbiAgICogTk9URTogVGhlICdtYXJrZXRwbGFjZScgc2NvcGUgaWRlbnRpZmllciBpcyBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAqIHdpdGggZXhpc3RpbmcgdG9rZW4gdmFsaWRhdGlvbnMuIFRoaXMgaXMgYW4gaW50ZXJuYWwgc2NvcGUgbmFtZSBhbmQgZG9lcyBub3RcbiAgICogYWZmZWN0IHVzZXItZmFjaW5nIGZ1bmN0aW9uYWxpdHkuIChQUiAjMjgwKVxuICAgKi9cbiAgc3RhdGljIGdldFJlcXVpcmVkU2NvcGVzKG9wZXJhdGlvbjogJ3JlYWQnIHwgJ3dyaXRlJyB8ICdtYXJrZXRwbGFjZScgfCAnY29sbGVjdGlvbicgfCAnZ2lzdCcpOiBUb2tlblNjb3BlcyB7XG4gICAgc3dpdGNoIChvcGVyYXRpb24pIHtcbiAgICAgIGNhc2UgJ3JlYWQnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlcXVpcmVkOiBbJ3B1YmxpY19yZXBvJ10sICAvLyBPQXV0aCB0b2tlbnMgdXNlICdwdWJsaWNfcmVwbycgbm90ICdyZXBvJ1xuICAgICAgICAgIG9wdGlvbmFsOiBbJ3VzZXI6ZW1haWwnXVxuICAgICAgICB9O1xuICAgICAgXG4gICAgICBjYXNlICd3cml0ZSc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVxdWlyZWQ6IFsncHVibGljX3JlcG8nXSwgIC8vIE9BdXRoIHRva2VucyB1c2UgJ3B1YmxpY19yZXBvJyBub3QgJ3JlcG8nXG4gICAgICAgICAgb3B0aW9uYWw6IFsndXNlcjplbWFpbCddXG4gICAgICAgIH07XG4gICAgICBcbiAgICAgIGNhc2UgJ21hcmtldHBsYWNlJzogLy8gSW50ZXJuYWwgc2NvcGUgbmFtZSBrZXB0IGZvciBjb21wYXRpYmlsaXR5IChQUiAjMjgwKVxuICAgICAgY2FzZSAnY29sbGVjdGlvbic6IC8vIE5ldyBwcmVmZXJyZWQgbmFtZVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlcXVpcmVkOiBbJ3B1YmxpY19yZXBvJ10sICAvLyBPQXV0aCB0b2tlbnMgdXNlICdwdWJsaWNfcmVwbycgbm90ICdyZXBvJ1xuICAgICAgICAgIG9wdGlvbmFsOiBbJ3VzZXI6ZW1haWwnXVxuICAgICAgICB9O1xuICAgICAgXG4gICAgICBjYXNlICdnaXN0JzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXF1aXJlZDogWydnaXN0J10sXG4gICAgICAgICAgb3B0aW9uYWw6IFsndXNlcjplbWFpbCddXG4gICAgICAgIH07XG4gICAgICBcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVxdWlyZWQ6IFsncHVibGljX3JlcG8nXSAgLy8gT0F1dGggdG9rZW5zIHVzZSAncHVibGljX3JlcG8nIG5vdCAncmVwbydcbiAgICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdG9rZW4gaGFzIHN1ZmZpY2llbnQgcGVybWlzc2lvbnMgZm9yIG9wZXJhdGlvblxuICAgKiBcbiAgICogTk9URTogVGhlICdtYXJrZXRwbGFjZScgb3BlcmF0aW9uIHR5cGUgaXMga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAgICogVGhpcyBpcyBjYWxsZWQgaW50ZXJuYWxseSB3aGVuIGFjY2Vzc2luZyBjb2xsZWN0aW9uIGZlYXR1cmVzLiAoUFIgIzI4MClcbiAgICovXG4gIHN0YXRpYyBhc3luYyBlbnN1cmVUb2tlblBlcm1pc3Npb25zKFxuICAgIG9wZXJhdGlvbjogJ3JlYWQnIHwgJ3dyaXRlJyB8ICdtYXJrZXRwbGFjZScgfCAnY29sbGVjdGlvbicgfCAnZ2lzdCdcbiAgKTogUHJvbWlzZTxUb2tlblZhbGlkYXRpb25SZXN1bHQ+IHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuZ2V0R2l0SHViVG9rZW4oKTtcbiAgICBcbiAgICBpZiAoIXRva2VuKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6ICdObyBHaXRIdWIgdG9rZW4gYXZhaWxhYmxlJ1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1aXJlZFNjb3BlcyA9IHRoaXMuZ2V0UmVxdWlyZWRTY29wZXMob3BlcmF0aW9uKTtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVRva2VuU2NvcGVzKHRva2VuLCByZXF1aXJlZFNjb3Blcyk7XG4gIH1cblxuICAvKipcbiAgICogRGVyaXZlIGVuY3J5cHRpb24ga2V5IGZyb20gYSBwYXNzcGhyYXNlXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBkZXJpdmVLZXkocGFzc3BocmFzZTogc3RyaW5nLCBzYWx0OiBCdWZmZXIpOiBCdWZmZXIge1xuICAgIHJldHVybiBjcnlwdG8ucGJrZGYyU3luYyhwYXNzcGhyYXNlLCBzYWx0LCB0aGlzLklURVJBVElPTlMsIHRoaXMuS0VZX0xFTkdUSCwgJ3NoYTI1NicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBtYWNoaW5lLXNwZWNpZmljIHBhc3NwaHJhc2UgZm9yIGVuY3J5cHRpb25cbiAgICogVXNlcyBhIGNvbWJpbmF0aW9uIG9mIG1hY2hpbmUgSUQgYW5kIHVzZXIgaW5mbyBmb3IgdW5pcXVlbmVzc1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0TWFjaGluZVBhc3NwaHJhc2UoKTogc3RyaW5nIHtcbiAgICAvLyBVc2UgYSBjb21iaW5hdGlvbiBvZiBob3N0bmFtZSwgdXNlcm5hbWUsIGFuZCBhIGZpeGVkIGFwcCBpZGVudGlmaWVyXG4gICAgY29uc3QgaG9zdG5hbWUgPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGhvbWVkaXIoKSkuZGlnZXN0KCdoZXgnKS5zdWJzdHJpbmcoMCwgMTYpO1xuICAgIGNvbnN0IHVzZXJuYW1lID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShwcm9jZXNzLmVudi5VU0VSIHx8ICdkZWZhdWx0JykuZGlnZXN0KCdoZXgnKS5zdWJzdHJpbmcoMCwgMTYpO1xuICAgIGNvbnN0IGFwcElkID0gJ0RvbGxob3VzZU1DUC1Ub2tlblN0b3JlLXYxJztcbiAgICBcbiAgICByZXR1cm4gYCR7YXBwSWR9LSR7aG9zdG5hbWV9LSR7dXNlcm5hbWV9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSBHaXRIdWIgdG9rZW4gc2VjdXJlbHkgdG8gZmlsZVxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHN0b3JlR2l0SHViVG9rZW4odG9rZW46IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSB0b2tlbiBmb3JtYXQgZmlyc3RcbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZVRva2VuRm9ybWF0KHRva2VuKSkge1xuICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcignSW52YWxpZCB0b2tlbiBmb3JtYXQnKTtcbiAgICAgIH1cblxuICAgICAgLy8gTm9ybWFsaXplIGFuZCB2YWxpZGF0ZSB0b2tlblxuICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHRva2VuKTtcbiAgICAgIGlmICghdmFsaWRhdGlvbi5pc1ZhbGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKCdUb2tlbiBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMnKTtcbiAgICAgIH1cblxuICAgICAgLy8gRW5zdXJlIGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGF3YWl0IGZzLm1rZGlyKHRoaXMuVE9LRU5fRElSLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgbW9kZTogMG83MDAgfSk7XG5cbiAgICAgIC8vIEdlbmVyYXRlIGVuY3J5cHRpb24gY29tcG9uZW50c1xuICAgICAgY29uc3Qgc2FsdCA9IGNyeXB0by5yYW5kb21CeXRlcyh0aGlzLlNBTFRfTEVOR1RIKTtcbiAgICAgIGNvbnN0IGl2ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKHRoaXMuSVZfTEVOR1RIKTtcbiAgICAgIGNvbnN0IHBhc3NwaHJhc2UgPSB0aGlzLmdldE1hY2hpbmVQYXNzcGhyYXNlKCk7XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmRlcml2ZUtleShwYXNzcGhyYXNlLCBzYWx0KTtcblxuICAgICAgLy8gRW5jcnlwdCB0b2tlblxuICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KHRoaXMuQUxHT1JJVEhNLCBrZXksIGl2KTtcbiAgICAgIGNvbnN0IGVuY3J5cHRlZCA9IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgICBjaXBoZXIudXBkYXRlKHZhbGlkYXRpb24ubm9ybWFsaXplZENvbnRlbnQsICd1dGY4JyksXG4gICAgICAgIGNpcGhlci5maW5hbCgpXG4gICAgICBdKTtcbiAgICAgIGNvbnN0IHRhZyA9IGNpcGhlci5nZXRBdXRoVGFnKCk7XG5cbiAgICAgIC8vIENyZWF0ZSBzdG9yYWdlIGZvcm1hdDogc2FsdCArIGl2ICsgdGFnICsgZW5jcnlwdGVkXG4gICAgICBjb25zdCBzdG9yZWQgPSBCdWZmZXIuY29uY2F0KFtzYWx0LCBpdiwgdGFnLCBlbmNyeXB0ZWRdKTtcblxuICAgICAgLy8gV3JpdGUgdG8gZmlsZSB3aXRoIHJlc3RyaWN0ZWQgcGVybWlzc2lvbnNcbiAgICAgIGNvbnN0IHRva2VuUGF0aCA9IHBhdGguam9pbih0aGlzLlRPS0VOX0RJUiwgdGhpcy5UT0tFTl9GSUxFKTtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0b2tlblBhdGgsIHN0b3JlZCwgeyBtb2RlOiAwbzYwMCB9KTtcblxuICAgICAgLy8gTG9nIHNlY3VyaXR5IGV2ZW50XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdUT0tFTl9WQUxJREFUSU9OX1NVQ0NFU1MnLFxuICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgIHNvdXJjZTogJ1Rva2VuTWFuYWdlci5zdG9yZUdpdEh1YlRva2VuJyxcbiAgICAgICAgZGV0YWlsczogJ0dpdEh1YiB0b2tlbiBzdG9yZWQgc2VjdXJlbHknLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIHRva2VuVHlwZTogdGhpcy5nZXRUb2tlblR5cGUodG9rZW4pLFxuICAgICAgICAgIHRva2VuUHJlZml4OiB0aGlzLmdldFRva2VuUHJlZml4KHRva2VuKVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgbG9nZ2VyLmluZm8oJ0dpdEh1YiB0b2tlbiBzdG9yZWQgc2VjdXJlbHknKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnVE9LRU5fVkFMSURBVElPTl9GQUlMVVJFJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICBzb3VyY2U6ICdUb2tlbk1hbmFnZXIuc3RvcmVHaXRIdWJUb2tlbicsXG4gICAgICAgIGRldGFpbHM6IGBGYWlsZWQgdG8gc3RvcmUgR2l0SHViIHRva2VuOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcihgRmFpbGVkIHRvIHN0b3JlIHRva2VuOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBHaXRIdWIgdG9rZW4gZnJvbSBzZWN1cmUgc3RvcmFnZVxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHJldHJpZXZlR2l0SHViVG9rZW4oKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRva2VuUGF0aCA9IHBhdGguam9pbih0aGlzLlRPS0VOX0RJUiwgdGhpcy5UT0tFTl9GSUxFKTtcbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgaWYgZmlsZSBleGlzdHNcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLmFjY2Vzcyh0b2tlblBhdGgpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIE5vIHN0b3JlZCB0b2tlblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gUmVhZCBlbmNyeXB0ZWQgZGF0YVxuICAgICAgY29uc3Qgc3RvcmVkID0gYXdhaXQgZnMucmVhZEZpbGUodG9rZW5QYXRoKTtcbiAgICAgIFxuICAgICAgLy8gRXh0cmFjdCBjb21wb25lbnRzXG4gICAgICBjb25zdCBzYWx0ID0gc3RvcmVkLnN1YmFycmF5KDAsIHRoaXMuU0FMVF9MRU5HVEgpO1xuICAgICAgY29uc3QgaXYgPSBzdG9yZWQuc3ViYXJyYXkodGhpcy5TQUxUX0xFTkdUSCwgdGhpcy5TQUxUX0xFTkdUSCArIHRoaXMuSVZfTEVOR1RIKTtcbiAgICAgIGNvbnN0IHRhZyA9IHN0b3JlZC5zdWJhcnJheSh0aGlzLlNBTFRfTEVOR1RIICsgdGhpcy5JVl9MRU5HVEgsIHRoaXMuU0FMVF9MRU5HVEggKyB0aGlzLklWX0xFTkdUSCArIHRoaXMuVEFHX0xFTkdUSCk7XG4gICAgICBjb25zdCBlbmNyeXB0ZWQgPSBzdG9yZWQuc3ViYXJyYXkodGhpcy5TQUxUX0xFTkdUSCArIHRoaXMuSVZfTEVOR1RIICsgdGhpcy5UQUdfTEVOR1RIKTtcblxuICAgICAgLy8gRGVyaXZlIGRlY3J5cHRpb24ga2V5XG4gICAgICBjb25zdCBwYXNzcGhyYXNlID0gdGhpcy5nZXRNYWNoaW5lUGFzc3BocmFzZSgpO1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5kZXJpdmVLZXkocGFzc3BocmFzZSwgc2FsdCk7XG5cbiAgICAgIC8vIERlY3J5cHQgdG9rZW5cbiAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYodGhpcy5BTEdPUklUSE0sIGtleSwgaXYpO1xuICAgICAgZGVjaXBoZXIuc2V0QXV0aFRhZyh0YWcpO1xuICAgICAgXG4gICAgICBjb25zdCBkZWNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgICAgZGVjaXBoZXIudXBkYXRlKGVuY3J5cHRlZCksXG4gICAgICAgIGRlY2lwaGVyLmZpbmFsKClcbiAgICAgIF0pLnRvU3RyaW5nKCd1dGY4Jyk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIGRlY3J5cHRlZCB0b2tlblxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlVG9rZW5Gb3JtYXQoZGVjcnlwdGVkKSkge1xuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ1RPS0VOX1ZBTElEQVRJT05fRkFJTFVSRScsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdISUdIJyxcbiAgICAgICAgICBzb3VyY2U6ICdUb2tlbk1hbmFnZXIucmV0cmlldmVHaXRIdWJUb2tlbicsXG4gICAgICAgICAgZGV0YWlsczogJ0RlY3J5cHRlZCB0b2tlbiBoYXMgaW52YWxpZCBmb3JtYXQnXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnVE9LRU5fVkFMSURBVElPTl9TVUNDRVNTJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICBzb3VyY2U6ICdUb2tlbk1hbmFnZXIucmV0cmlldmVHaXRIdWJUb2tlbicsXG4gICAgICAgIGRldGFpbHM6ICdHaXRIdWIgdG9rZW4gcmV0cmlldmVkIGZyb20gc2VjdXJlIHN0b3JhZ2UnLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIHRva2VuVHlwZTogdGhpcy5nZXRUb2tlblR5cGUoZGVjcnlwdGVkKSxcbiAgICAgICAgICB0b2tlblByZWZpeDogdGhpcy5nZXRUb2tlblByZWZpeChkZWNyeXB0ZWQpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZGVjcnlwdGVkO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdUT0tFTl9WQUxJREFUSU9OX0ZBSUxVUkUnLFxuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ1Rva2VuTWFuYWdlci5yZXRyaWV2ZUdpdEh1YlRva2VuJyxcbiAgICAgICAgZGV0YWlsczogYEZhaWxlZCB0byByZXRyaWV2ZSBHaXRIdWIgdG9rZW46ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGxvZ2dlci5kZWJ1ZygnRmFpbGVkIHRvIHJldHJpZXZlIHN0b3JlZCB0b2tlbicsIHsgZXJyb3IgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHN0b3JlZCBHaXRIdWIgdG9rZW5cbiAgICovXG4gIHN0YXRpYyBhc3luYyByZW1vdmVTdG9yZWRUb2tlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdG9rZW5QYXRoID0gcGF0aC5qb2luKHRoaXMuVE9LRU5fRElSLCB0aGlzLlRPS0VOX0ZJTEUpO1xuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiBmaWxlIGV4aXN0cyBiZWZvcmUgYXR0ZW1wdGluZyBkZWxldGlvblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMuYWNjZXNzKHRva2VuUGF0aCk7XG4gICAgICAgIGF3YWl0IGZzLnVubGluayh0b2tlblBhdGgpO1xuICAgICAgICBcbiAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgIHR5cGU6ICdUT0tFTl9DQUNIRV9DTEVBUkVEJyxcbiAgICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgICAgc291cmNlOiAnVG9rZW5NYW5hZ2VyLnJlbW92ZVN0b3JlZFRva2VuJyxcbiAgICAgICAgICBkZXRhaWxzOiAnR2l0SHViIHRva2VuIHJlbW92ZWQgZnJvbSBzZWN1cmUgc3RvcmFnZSdcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBsb2dnZXIuaW5mbygnU3RvcmVkIEdpdEh1YiB0b2tlbiByZW1vdmVkJyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBGaWxlIGRvZXNuJ3QgZXhpc3Qgb3IgY291bGRuJ3QgYmUgZGVsZXRlZFxuICAgICAgICBsb2dnZXIuZGVidWcoJ05vIHN0b3JlZCB0b2tlbiB0byByZW1vdmUnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnVE9LRU5fQ0FDSEVfQ0xFQVJFRCcsXG4gICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgc291cmNlOiAnVG9rZW5NYW5hZ2VyLnJlbW92ZVN0b3JlZFRva2VuJyxcbiAgICAgICAgZGV0YWlsczogYEZhaWxlZCB0byByZW1vdmUgc3RvcmVkIHRva2VuOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBsb2dnZXIud2FybignRmFpbGVkIHRvIHJlbW92ZSBzdG9yZWQgdG9rZW4nLCB7IGVycm9yIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgR2l0SHViIHRva2VuIGZyb20gZW52aXJvbm1lbnQgb3Igc2VjdXJlIHN0b3JhZ2VcbiAgICogVXBkYXRlZCB0byBjaGVjayBzZWN1cmUgc3RvcmFnZSBpZiBlbnZpcm9ubWVudCB2YXJpYWJsZSBub3Qgc2V0XG4gICAqL1xuICBzdGF0aWMgYXN5bmMgZ2V0R2l0SHViVG9rZW5Bc3luYygpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICAvLyBGaXJzdCBjaGVjayBlbnZpcm9ubWVudCB2YXJpYWJsZVxuICAgIGNvbnN0IGVudlRva2VuID0gdGhpcy5nZXRHaXRIdWJUb2tlbigpO1xuICAgIGlmIChlbnZUb2tlbikge1xuICAgICAgcmV0dXJuIGVudlRva2VuO1xuICAgIH1cblxuICAgIC8vIEZhbGwgYmFjayB0byBzZWN1cmUgc3RvcmFnZVxuICAgIHJldHVybiB0aGlzLnJldHJpZXZlR2l0SHViVG9rZW4oKTtcbiAgfVxufSJdfQ==
@@ -250,7 +250,7 @@ export class UnicodeValidator {
250
250
  * Escape special regex characters for safe replacement
251
251
  */
252
252
  static escapeRegex(string) {
253
- return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
253
+ return string.replaceAll(/[.*+?^${}()|[\]\\]/g, '\\$&');
254
254
  }
255
255
  /**
256
256
  * Check if content contains potentially dangerous Unicode patterns
@@ -310,4 +310,4 @@ export class UnicodeValidator {
310
310
  cleaned;
311
311
  }
312
312
  }
313
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pY29kZVZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFHSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFTeEQsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQjs7T0FFRztJQUVIOzs7OztPQUtHO0lBQ0ssTUFBTSxDQUFVLHdCQUF3QixHQUFHLCtCQUErQixDQUFDO0lBRW5GOzs7OztPQUtHO0lBQ0ssTUFBTSxDQUFVLGdCQUFnQixHQUFHLHFDQUFxQyxDQUFDO0lBRWpGOzs7OztPQUtHO0lBQ0ssTUFBTSxDQUFVLG1CQUFtQixHQUFHLG9FQUFvRSxDQUFDLENBQUMsZ0ZBQWdGO0lBRXBNOzs7T0FHRztJQUNLLE1BQU0sQ0FBVSxtQkFBbUIsR0FBd0IsSUFBSSxHQUFHLENBQUM7UUFDekUsb0JBQW9CO1FBQ3BCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUNsRixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDbEYsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBRTFELGlCQUFpQjtRQUNqQixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDbEYsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQ25GLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUNsRixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFFcEMsaURBQWlEO1FBQ2pELENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztRQUNoVixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7UUFFaFYscUNBQXFDO1FBQ3JDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUU5QywyQkFBMkI7UUFDM0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQ3RFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUU1RCx1QkFBdUI7UUFDdkIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQ3RULENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFF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SCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQWUsRUFBRSxZQUFvQixHQUFHO1FBQzVELG9FQUFvRTtRQUNwRSxNQUFNLE9BQU8sR0FBRyxPQUFPO2FBQ3BCLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsT0FBTyxDQUFDO2FBQy9DLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDO2FBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFN0MsT0FBTyxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDO1lBQ2pDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLE9BQU8sQ0FBQztJQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVuaWNvZGUgVmFsaWRhdG9yIGZvciBEb2xsaG91c2VNQ1BcbiAqIFxuICogUHJldmVudHMgVW5pY29kZS1iYXNlZCBieXBhc3MgYXR0YWNrcyBpbmNsdWRpbmc6XG4gKiAtIEhvbW9ncmFwaCBhdHRhY2tzICh2aXN1YWxseSBzaW1pbGFyIGNoYXJhY3RlcnMpXG4gKiAtIERpcmVjdGlvbiBvdmVycmlkZSBhdHRhY2tzIChSTE8vTFJPKVxuICogLSBNaXhlZCBzY3JpcHQgYXR0YWNrc1xuICogLSBaZXJvLXdpZHRoIGNoYXJhY3RlciBpbmplY3Rpb25cbiAqIC0gVW5pY29kZSBub3JtYWxpemF0aW9uIGJ5cGFzc2VzXG4gKiBcbiAqIFNlY3VyaXR5OiBTRUMtMDAxIC0gVW5pY29kZSBhdHRhY2sgcHJldmVudGlvblxuICovXG5cbmltcG9ydCB7IFNlY3VyaXR5RXJyb3IgfSBmcm9tICcuLi9lcnJvcnMuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHlNb25pdG9yLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBVbmljb2RlVmFsaWRhdGlvblJlc3VsdCB7XG4gIGlzVmFsaWQ6IGJvb2xlYW47XG4gIG5vcm1hbGl6ZWRDb250ZW50OiBzdHJpbmc7XG4gIGRldGVjdGVkSXNzdWVzPzogc3RyaW5nW107XG4gIHNldmVyaXR5PzogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJyB8ICdjcml0aWNhbCc7XG59XG5cbmV4cG9ydCBjbGFzcyBVbmljb2RlVmFsaWRhdG9yIHtcbiAgLyoqXG4gICAqIFVuaWNvZGUgYXR0YWNrIHBhdHRlcm5zIGFuZCBjb25mdXNhYmxlIGNoYXJhY3RlcnNcbiAgICovXG4gIFxuICAvKipcbiAgICogRGlyZWN0aW9uIG92ZXJyaWRlIGNoYXJhY3RlcnMgdGhhdCBjYW4gaGlkZSBvciByZXZlcnNlIHRleHQgZGlzcGxheVxuICAgKiBAc2VlIGh0dHBzOi8vdW5pY29kZS5vcmcvcmVwb3J0cy90cjkvI0RpcmVjdGlvbmFsX0Zvcm1hdHRpbmdfQ2hhcmFjdGVyc1xuICAgKiBVKzIwMkEtVSsyMDJFOiBMZWZ0L1JpZ2h0IGVtYmVkZGluZyBhbmQgb3ZlcnJpZGUgbWFya3MgKExSRSwgUkxFLCBQREYsIExSTywgUkxPKVxuICAgKiBVKzIwNjYtVSsyMDY5OiBJc29sYXRlIGZvcm1hdHRpbmcgY2hhcmFjdGVycyAoTFJJLCBSTEksIEZTSSwgUERJKVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRElSRUNUSU9OX09WRVJSSURFX0NIQVJTID0gL1tcXHUyMDJBLVxcdTIwMkVcXHUyMDY2LVxcdTIwNjldL2c7XG4gIFxuICAvKipcbiAgICogWmVyby13aWR0aCBhbmQgaW52aXNpYmxlIGZvcm1hdHRpbmcgY2hhcmFjdGVycyBvZnRlbiB1c2VkIHRvIGhpZGUgcGF5bG9hZHNcbiAgICogVSsyMDBCLVUrMjAwRjogWmVyby13aWR0aCBzcGFjZXMgYW5kIGRpcmVjdGlvbmFsIG1hcmtzXG4gICAqIFUrMjAyOC1VKzIwMkY6IExpbmUvcGFyYWdyYXBoIHNlcGFyYXRvcnMgYW5kIGZvcm1hdHRpbmcgY2hhcmFjdGVyc1xuICAgKiBVK0ZFRkY6IFplcm8td2lkdGggbm8tYnJlYWsgc3BhY2UgKEJ5dGUgT3JkZXIgTWFyaylcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFpFUk9fV0lEVEhfQ0hBUlMgPSAvW1xcdTIwMEItXFx1MjAwRlxcdTIwMjgtXFx1MjAyRlxcdUZFRkZdL2c7XG4gIFxuICAvKipcbiAgICogTm9uLXByaW50YWJsZSBjb250cm9sIGNoYXJhY3RlcnMgdGhhdCBzaG91bGQgbm90IGFwcGVhciBpbiBub3JtYWwgdGV4dFxuICAgKiBVKzAwMDAtVSswMDA4LCBVKzAwMEItVSswMDBDLCBVKzAwMEUtVSswMDFGOiBDMCBjb250cm9sIGNvZGVzIChleGNlcHQgVEFCLCBMRiwgQ1IpXG4gICAqIFUrMDA3Ri1VKzAwOUY6IERlbGV0ZSBhbmQgQzEgY29udHJvbCBjb2Rlc1xuICAgKiBVK0ZGRkUtVStGRkZGOiBOb24tY2hhcmFjdGVycyB0aGF0IHNob3VsZCBuZXZlciBhcHBlYXIgaW4gdmFsaWQgdGV4dFxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTk9OX1BSSU5UQUJMRV9DSEFSUyA9IC9bXFx1MDAwMC1cXHUwMDA4XFx1MDAwQlxcdTAwMENcXHUwMDBFLVxcdTAwMUZcXHUwMDdGLVxcdTAwOUZcXHVGRkZFXFx1RkZGRl0vZzsgLy8gTk9TT05BUiAtIEludGVudGlvbmFsbHkgbWF0Y2hpbmcgY29udHJvbCBjaGFyYWN0ZXJzIGZvciBzZWN1cml0eSBzYW5pdGl6YXRpb25cbiAgXG4gIC8qKlxuICAgKiBDb21tb24gaG9tb2dyYXBoL2NvbmZ1c2FibGUgY2hhcmFjdGVyIG1hcHBpbmdzXG4gICAqIE1hcHMgdmlzdWFsbHkgc2ltaWxhciBVbmljb2RlIGNoYXJhY3RlcnMgdG8gdGhlaXIgQVNDSUkgZXF1aXZhbGVudHNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IENPTkZVU0FCTEVfTUFQUElOR1M6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKFtcbiAgICAvLyBDeXJpbGxpYyB0byBMYXRpblxuICAgIFsn0LAnLCAnYSddLCBbJ9C1JywgJ2UnXSwgWyfQvicsICdvJ10sIFsn0YAnLCAncCddLCBbJ9GBJywgJ2MnXSwgWyfRhScsICd4J10sIFsn0YMnLCAneSddLFxuICAgIFsn0JAnLCAnQSddLCBbJ9CSJywgJ0InXSwgWyfQlScsICdFJ10sIFsn0JonLCAnSyddLCBbJ9CcJywgJ00nXSwgWyfQnScsICdIJ10sIFsn0J4nLCAnTyddLCBcbiAgICBbJ9CgJywgJ1AnXSwgWyfQoScsICdDJ10sIFsn0KInLCAnVCddLCBbJ9CjJywgJ1knXSwgWyfQpScsICdYJ10sXG4gICAgXG4gICAgLy8gR3JlZWsgdG8gTGF0aW5cbiAgICBbJ86xJywgJ2EnXSwgWyfOsicsICdiJ10sIFsnzrMnLCAnZyddLCBbJ860JywgJ2QnXSwgWyfOtScsICdlJ10sIFsnzrYnLCAneiddLCBbJ863JywgJ2gnXSxcbiAgICBbJ864JywgJ3RoJ10sIFsnzrknLCAnaSddLCBbJ866JywgJ2snXSwgWyfOuycsICdsJ10sIFsnzrwnLCAnbSddLCBbJ869JywgJ24nXSwgWyfOvicsICd4J10sXG4gICAgWyfOvycsICdvJ10sIFsnz4AnLCAncCddLCBbJ8+BJywgJ3InXSwgWyfPgycsICdzJ10sIFsnz4QnLCAndCddLCBbJ8+FJywgJ3UnXSwgWyfPhicsICdmJ10sXG4gICAgWyfPhycsICdjaCddLCBbJ8+IJywgJ3BzJ10sIFsnz4knLCAndyddLFxuICAgIFxuICAgIC8vIE1hdGhlbWF0aWNhbCBzeW1ib2xzIHRvIEFTQ0lJICh2YXJpb3VzIHN0eWxlcylcbiAgICBbJ/CdkoInLCAnYSddLCBbJ/CdkoMnLCAnYiddLCBbJ/CdkoQnLCAnYyddLCBbJ/CdkoUnLCAnZCddLCBbJ/CdkoYnLCAnZSddLCBbJ/CdkocnLCAnZiddLCBbJ/CdkognLCAnZyddLCBbJ/CdkoknLCAnaCddLCBbJ/CdkoonLCAnaSddLCBbJ/CdkosnLCAnaiddLCBbJ/CdkownLCAnayddLCBbJ/Cdko0nLCAnbCddLCBbJ/Cdko4nLCAnbSddLCBbJ/Cdko8nLCAnbiddLCBbJ/CdkpAnLCAnbyddLCBbJ/CdkpEnLCAncCddLCBbJ/CdkpInLCAncSddLCBbJ/CdkpMnLCAnciddLCBbJ/CdkpQnLCAncyddLCBbJ/CdkpUnLCAndCddLCBbJ/CdkpYnLCAndSddLCBbJ/CdkpcnLCAndiddLCBbJ/CdkpgnLCAndyddLCBbJ/CdkpknLCAneCddLCBbJ/CdkponLCAneSddLCBbJ/CdkpsnLCAneiddLFxuICAgIFsn8J2QmicsICdhJ10sIFsn8J2QmycsICdiJ10sIFsn8J2QnCcsICdjJ10sIFsn8J2QnScsICdkJ10sIFsn8J2QnicsICdlJ10sIFsn8J2QnycsICdmJ10sIFsn8J2QoCcsICdnJ10sIFsn8J2QoScsICdoJ10sIFsn8J2QoicsICdpJ10sIFsn8J2QoycsICdqJ10sIFsn8J2QpCcsICdrJ10sIFsn8J2QpScsICdsJ10sIFsn8J2QpicsICdtJ10sIFsn8J2QpycsICduJ10sIFsn8J2QqCcsICdvJ10sIFsn8J2QqScsICdwJ10sIFsn8J2QqicsICdxJ10sIFsn8J2QqycsICdyJ10sIFsn8J2QrCcsICdzJ10sIFsn8J2QrScsICd0J10sIFsn8J2QricsICd1J10sIFsn8J2QrycsICd2J10sIFsn8J2QsCcsICd3J10sIFsn8J2QsScsICd4J10sIFsn8J2QsicsICd5J10sIFsn8J2QsycsICd6J10sXG4gICAgXG4gICAgLy8gU3BlY2lhbCBpIHZhcmlhbnRzIChUdXJraXNoLCBldGMuKVxuICAgIFsnxLEnLCAnaSddLCBbJ8SwJywgJ0knXSwgWyfRlicsICdpJ10sIFsn04AnLCAnSSddLFxuICAgIFxuICAgIC8vIE90aGVyIGNvbW1vbiBjb25mdXNhYmxlc1xuICAgIFsnx50nLCAnZSddLCBbJ8mQJywgJ2EnXSwgWyfJlCcsICdvJ10sIFsnyocnLCAndCddLCBbJ8qMJywgJ3YnXSwgWyfKjScsICd3J10sXG4gICAgWyfihIMnLCAnQyddLCBbJ+KEiScsICdGJ10sIFsn4oSWJywgJ05vJ10sIFsn4oSiJywgJ1RNJ10sIFsnwq4nLCAnUiddLFxuICAgIFxuICAgIC8vIEZ1bGx3aWR0aCBjaGFyYWN0ZXJzXG4gICAgWyfvvKEnLCAnQSddLCBbJ++8oicsICdCJ10sIFsn77yjJywgJ0MnXSwgWyfvvKQnLCAnRCddLCBbJ++8pScsICdFJ10sIFsn77ymJywgJ0YnXSwgWyfvvKcnLCAnRyddLCBbJ++8qCcsICdIJ10sIFsn77ypJywgJ0knXSwgWyfvvKonLCAnSiddLCBbJ++8qycsICdLJ10sIFsn77ysJywgJ0wnXSwgWyfvvK0nLCAnTSddLCBbJ++8ricsICdOJ10sIFsn77yvJywgJ08nXSwgWyfvvLAnLCAnUCddLCBbJ++8sScsICdRJ10sIFsn77yyJywgJ1InXSwgWyfvvLMnLCAnUyddLCBbJ++8tCcsICdUJ10sIFsn77y1JywgJ1UnXSwgWyfvvLYnLCAnViddLCBbJ++8tycsICdXJ10sIFsn77y4JywgJ1gnXSwgWyfvvLknLCAnWSddLCBbJ++8uicsICdaJ10sXG4gICAgWyfvvYEnLCAnYSddLCBbJ++9gicsICdiJ10sIFsn772DJywgJ2MnXSwgWyfvvYQnLCAnZCddLCBbJ++9hScsICdlJ10sIFsn772GJywgJ2YnXSwgWyfvvYcnLCAnZyddLCBbJ++9iCcsICdoJ10sIFsn772JJywgJ2knXSwgWyfvvYonLCAnaiddLCBbJ++9iycsICdrJ10sIFsn772MJywgJ2wnXSwgWyfvvY0nLCAnbSddLCBbJ++9jicsICduJ10sIFsn772PJywgJ28nXSwgWyfvvZAnLCAncCddLCBbJ++9kScsICdxJ10sIFsn772SJywgJ3InXSwgWyfvvZMnLCAncyddLCBbJ++9lCcsICd0J10sIFsn772VJywgJ3UnXSwgWyfvvZYnLCAndiddLCBbJ++9lycsICd3J10sIFsn772YJywgJ3gnXSwgWyfvvZknLCAneSddLCBbJ++9micsICd6J10sXG4gICAgWyfvvJAnLCAnMCddLCBbJ++8kScsICcxJ10sIFsn77ySJywgJzInXSwgWyfvvJMnLCAnMyddLCBbJ++8lCcsICc0J10sIFsn77yVJywgJzUnXSwgWyfvvJYnLCAnNiddLCBbJ++8lycsICc3J10sIFsn77yYJywgJzgnXSwgWyfvvJknLCAnOSddLFxuICBdKTtcblxuICAvKipcbiAgICogU2NyaXB0IG1peGluZyBkZXRlY3Rpb24gcGF0dGVybnNcbiAgICogRGV0ZWN0cyBzdXNwaWNpb3VzIG1peGluZyBvZiBkaWZmZXJlbnQgVW5pY29kZSBzY3JpcHRzXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBTQ1JJUFRfUEFUVEVSTlMgPSB7XG4gICAgTEFUSU46IC9bXFx1MDAwMC1cXHUwMDdGXFx1MDBBMC1cXHUwMEZGXFx1MDEwMC1cXHUwMTdGXFx1MDE4MC1cXHUwMjRGXS8sIC8vIE5PU09OQVIgLSBJbnRlbnRpb25hbGx5IGluY2x1ZGVzIGNvbnRyb2wgY2hhcmFjdGVycyBmb3IgY29tcHJlaGVuc2l2ZSBMYXRpbiBzY3JpcHQgZGV0ZWN0aW9uXG4gICAgLy8gVXNlIGFsdGVybmF0aW9uIHRvIGF2b2lkIFNvbmFyQ2xvdWQgdGhpbmtpbmcgXFx1MDUyRlxcdTJERTAgaXMgYSBjb21iaW5lZCBjaGFyYWN0ZXJcbiAgICBDWVJJTExJQzogLyg/OltcXHUwNDAwLVxcdTA0RkZdfFtcXHUwNTAwLVxcdTA1MkZdfFtcXHUyREUwLVxcdTJERkZdfFtcXHVBNjQwLVxcdUE2OUZdKS8sXG4gICAgR1JFRUs6IC9bXFx1MDM3MC1cXHUwM0ZGXFx1MUYwMC1cXHUxRkZGXS8sXG4gICAgQVJBQklDOiAvW1xcdTA2MDAtXFx1MDZGRlxcdTA3NTAtXFx1MDc3RlxcdTA4QTAtXFx1MDhGRlxcdUZCNTAtXFx1RkRGRlxcdUZFNzAtXFx1RkVGRl0vLFxuICAgIEhFQlJFVzogL1tcXHUwNTkwLVxcdTA1RkZcXHVGQjFELVxcdUZCNEZdLyxcbiAgICBDSks6IC9bXFx1MkU4MC1cXHUyRUZGXFx1MkYwMC1cXHUyRkRGXFx1MzAwMC1cXHUzMDNGXFx1MzA0MC1cXHUzMDlGXFx1MzBBMC1cXHUzMEZGXFx1MzEwMC1cXHUzMTJGXFx1MzEzMC1cXHUzMThGXFx1MzE5MC1cXHUzMTlGXFx1MzFBMC1cXHUzMUJGXFx1MzFDMC1cXHUzMUVGXFx1MzFGMC1cXHUzMUZGXFx1MzIwMC1cXHUzMkZGXFx1MzMwMC1cXHUzM0ZGXFx1MzQwMC1cXHU0REJGXFx1NERDMC1cXHU0REZGXFx1NEUwMC1cXHU5RkZGXS8sXG4gIH07XG5cbiAgLyoqXG4gICAqIE5vcm1hbGl6ZSBVbmljb2RlIGNvbnRlbnQgdG8gcHJldmVudCBieXBhc3MgYXR0YWNrc1xuICAgKi9cbiAgc3RhdGljIG5vcm1hbGl6ZShjb250ZW50OiBzdHJpbmcpOiBVbmljb2RlVmFsaWRhdGlvblJlc3VsdCB7XG4gICAgY29uc3QgaXNzdWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBub3JtYWxpemVkID0gY29udGVudDtcbiAgICBsZXQgc2V2ZXJpdHk6ICdsb3cnIHwgJ21lZGl1bScgfCAnaGlnaCcgfCAnY3JpdGljYWwnID0gJ2xvdyc7XG5cbiAgICB0cnkge1xuICAgICAgLy8gMS4gRGV0ZWN0IGFuZCBsb2cgc3VzcGljaW91cyBVbmljb2RlIHBhdHRlcm5zIGJlZm9yZSBub3JtYWxpemF0aW9uXG4gICAgICBjb25zdCBzdXNwaWNpb3VzUGF0dGVybnMgPSB0aGlzLmRldGVjdFN1c3BpY2lvdXNQYXR0ZXJucyhjb250ZW50KTtcbiAgICAgIGlzc3Vlcy5wdXNoKC4uLnN1c3BpY2lvdXNQYXR0ZXJucy5pc3N1ZXMpO1xuICAgICAgaWYgKHN1c3BpY2lvdXNQYXR0ZXJucy5zZXZlcml0eSkge1xuICAgICAgICBzZXZlcml0eSA9IHRoaXMuZXNjYWxhdGVTZXZlcml0eShzZXZlcml0eSwgc3VzcGljaW91c1BhdHRlcm5zLnNldmVyaXR5KTtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gUmVtb3ZlIGRpcmVjdGlvbiBvdmVycmlkZSBjaGFyYWN0ZXJzIChwcmV2ZW50cyBSTE8vTFJPIGF0dGFja3MpXG4gICAgICBpZiAodGhpcy5ESVJFQ1RJT05fT1ZFUlJJREVfQ0hBUlMudGVzdChub3JtYWxpemVkKSkge1xuICAgICAgICBpc3N1ZXMucHVzaCgnRGlyZWN0aW9uIG92ZXJyaWRlIGNoYXJhY3RlcnMgZGV0ZWN0ZWQnKTtcbiAgICAgICAgc2V2ZXJpdHkgPSB0aGlzLmVzY2FsYXRlU2V2ZXJpdHkoc2V2ZXJpdHksICdoaWdoJyk7XG4gICAgICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVkLnJlcGxhY2UodGhpcy5ESVJFQ1RJT05fT1ZFUlJJREVfQ0hBUlMsICcnKTtcbiAgICAgICAgXG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnVU5JQ09ERV9ESVJFQ1RJT05fT1ZFUlJJREUnLFxuICAgICAgICAgIHNldmVyaXR5OiAnSElHSCcsXG4gICAgICAgICAgc291cmNlOiAndW5pY29kZV92YWxpZGF0aW9uJyxcbiAgICAgICAgICBkZXRhaWxzOiAnRGlyZWN0aW9uIG92ZXJyaWRlIGNoYXJhY3RlcnMgcmVtb3ZlZCBmcm9tIGNvbnRlbnQnXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyAzLiBSZW1vdmUgemVyby13aWR0aCBhbmQgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzXG4gICAgICBpZiAodGhpcy5aRVJPX1dJRFRIX0NIQVJTLnRlc3Qobm9ybWFsaXplZCkgfHwgdGhpcy5OT05fUFJJTlRBQkxFX0NIQVJTLnRlc3Qobm9ybWFsaXplZCkpIHtcbiAgICAgICAgaXNzdWVzLnB1c2goJ1plcm8td2lkdGggb3Igbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIGRldGVjdGVkJyk7XG4gICAgICAgIHNldmVyaXR5ID0gdGhpcy5lc2NhbGF0ZVNldmVyaXR5KHNldmVyaXR5LCAnbWVkaXVtJyk7XG4gICAgICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVkXG4gICAgICAgICAgLnJlcGxhY2UodGhpcy5aRVJPX1dJRFRIX0NIQVJTLCAnJylcbiAgICAgICAgICAucmVwbGFjZSh0aGlzLk5PTl9QUklOVEFCTEVfQ0hBUlMsICcnKTtcbiAgICAgIH1cblxuICAgICAgLy8gNC4gQXBwbHkgVW5pY29kZSBub3JtYWxpemF0aW9uIChORkMgLSBDYW5vbmljYWwgRGVjb21wb3NpdGlvbiArIENvbXBvc2l0aW9uKVxuICAgICAgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQubm9ybWFsaXplKCdORkMnKTtcblxuICAgICAgLy8gNS4gRGV0ZWN0IG1peGVkIHNjcmlwdCBhdHRhY2tzIEJFRk9SRSBjb25mdXNhYmxlIHJlcGxhY2VtZW50XG4gICAgICBjb25zdCBtaXhlZFNjcmlwdFJlc3VsdCA9IHRoaXMuZGV0ZWN0TWl4ZWRTY3JpcHRzKG5vcm1hbGl6ZWQpO1xuICAgICAgaWYgKG1peGVkU2NyaXB0UmVzdWx0LmlzU3VzcGljaW91cykge1xuICAgICAgICBpc3N1ZXMucHVzaChgTWl4ZWQgc2NyaXB0IHVzYWdlIGRldGVjdGVkOiAke21peGVkU2NyaXB0UmVzdWx0LnNjcmlwdHMuam9pbignLCAnKX1gKTtcbiAgICAgICAgc2V2ZXJpdHkgPSB0aGlzLmVzY2FsYXRlU2V2ZXJpdHkoc2V2ZXJpdHksICdoaWdoJyk7XG4gICAgICAgIFxuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ1VOSUNPREVfTUlYRURfU0NSSVBUJyxcbiAgICAgICAgICBzZXZlcml0eTogJ0hJR0gnLFxuICAgICAgICAgIHNvdXJjZTogJ3VuaWNvZGVfdmFsaWRhdGlvbicsXG4gICAgICAgICAgZGV0YWlsczogYE1peGVkIHNjcmlwdHMgZGV0ZWN0ZWQ6ICR7bWl4ZWRTY3JpcHRSZXN1bHQuc2NyaXB0cy5qb2luKCcsICcpfWBcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIDYuIEFsd2F5cyByZXBsYWNlIGNvbmZ1c2FibGUgY2hhcmFjdGVycyB3aXRoIEFTQ0lJIGVxdWl2YWxlbnRzIGZvciBzZWN1cml0eVxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyBob21vZ3JhcGggYXR0YWNrcyByZWdhcmRsZXNzIG9mIHNjcmlwdCBtaXhpbmdcbiAgICAgIGNvbnN0IGNvbmZ1c2FibGVSZXN1bHQgPSB0aGlzLnJlcGxhY2VDb25mdXNhYmxlcyhub3JtYWxpemVkKTtcbiAgICAgIGlmIChjb25mdXNhYmxlUmVzdWx0Lmhhc0NvbmZ1c2FibGVzKSB7XG4gICAgICAgIG5vcm1hbGl6ZWQgPSBjb25mdXNhYmxlUmVzdWx0Lm5vcm1hbGl6ZWQ7XG4gICAgICAgIGlzc3Vlcy5wdXNoKCdDb25mdXNhYmxlIFVuaWNvZGUgY2hhcmFjdGVycyBkZXRlY3RlZCBhbmQgbm9ybWFsaXplZCcpO1xuICAgICAgICBzZXZlcml0eSA9IHRoaXMuZXNjYWxhdGVTZXZlcml0eShzZXZlcml0eSwgJ21lZGl1bScpO1xuICAgICAgICBcbiAgICAgICAgLy8gTG9nIGlmIHRoaXMgaGFwcGVucyBpbiBsZWdpdGltYXRlIG11bHRpbGluZ3VhbCBjb250ZXh0XG4gICAgICAgIGlmICghbWl4ZWRTY3JpcHRSZXN1bHQuaXNTdXNwaWNpb3VzKSB7XG4gICAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgICAgdHlwZTogJ1VOSUNPREVfVkFMSURBVElPTl9FUlJPUicsXG4gICAgICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgICAgICBzb3VyY2U6ICd1bmljb2RlX3ZhbGlkYXRpb24nLFxuICAgICAgICAgICAgZGV0YWlsczogJ0NvbmZ1c2FibGUgY2hhcmFjdGVycyBub3JtYWxpemVkIGluIGxlZ2l0aW1hdGUgbXVsdGlsaW5ndWFsIGNvbnRlbnQnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNWYWxpZDogaXNzdWVzLmxlbmd0aCA9PT0gMCxcbiAgICAgICAgbm9ybWFsaXplZENvbnRlbnQ6IG5vcm1hbGl6ZWQsXG4gICAgICAgIGRldGVjdGVkSXNzdWVzOiBpc3N1ZXMubGVuZ3RoID4gMCA/IGlzc3VlcyA6IHVuZGVmaW5lZCxcbiAgICAgICAgc2V2ZXJpdHk6IGlzc3Vlcy5sZW5ndGggPiAwID8gc2V2ZXJpdHkgOiB1bmRlZmluZWRcbiAgICAgIH07XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnVU5JQ09ERV9WQUxJREFUSU9OX0VSUk9SJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdISUdIJyxcbiAgICAgICAgc291cmNlOiAndW5pY29kZV92YWxpZGF0aW9uJyxcbiAgICAgICAgZGV0YWlsczogYFVuaWNvZGUgdmFsaWRhdGlvbiBmYWlsZWQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWBcbiAgICAgIH0pO1xuXG4gICAgICAvLyBGYWxsYmFjazogcmV0dXJuIG9yaWdpbmFsIGNvbnRlbnQgaWYgbm9ybWFsaXphdGlvbiBmYWlsc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIG5vcm1hbGl6ZWRDb250ZW50OiBjb250ZW50LFxuICAgICAgICBkZXRlY3RlZElzc3VlczogWydVbmljb2RlIHZhbGlkYXRpb24gZmFpbGVkJ10sXG4gICAgICAgIHNldmVyaXR5OiAnaGlnaCdcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVjdCBzdXNwaWNpb3VzIFVuaWNvZGUgcGF0dGVybnMgdGhhdCBtaWdodCBpbmRpY2F0ZSBhdHRhY2tzXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBkZXRlY3RTdXNwaWNpb3VzUGF0dGVybnMoY29udGVudDogc3RyaW5nKTogeyBpc3N1ZXM6IHN0cmluZ1tdOyBzZXZlcml0eT86ICdsb3cnIHwgJ21lZGl1bScgfCAnaGlnaCcgfCAnY3JpdGljYWwnIH0ge1xuICAgIGNvbnN0IGlzc3Vlczogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgc2V2ZXJpdHk6ICdsb3cnIHwgJ21lZGl1bScgfCAnaGlnaCcgfCAnY3JpdGljYWwnIHwgdW5kZWZpbmVkO1xuXG4gICAgLy8gQ2hlY2sgZm9yIGV4Y2Vzc2l2ZSBVbmljb2RlIGVzY2FwZXMgKHBvc3NpYmxlIGVuY29kaW5nIGJ5cGFzcylcbiAgICAvKipcbiAgICAgKiBQYXR0ZXJuIHRvIG1hdGNoIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlc1xuICAgICAqIFxcXFx1OiBMaXRlcmFsIGJhY2tzbGFzaCBmb2xsb3dlZCBieSAndSdcbiAgICAgKiBbMC05YS1mQS1GXXs0fTogRXhhY3RseSA0IGhleGFkZWNpbWFsIGRpZ2l0c1xuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGF0dGVtcHRzIHRvIGJ5cGFzcyBmaWx0ZXJzIHVzaW5nIFxcdTAwNjFkbWluIHN0eWxlIGVuY29kaW5nXG4gICAgICovXG4gICAgY29uc3QgdW5pY29kZUVzY2FwZVBhdHRlcm4gPSAvXFxcXHVbMC05YS1mQS1GXXs0fS9nO1xuICAgIGNvbnN0IHVuaWNvZGVFc2NhcGVzID0gY29udGVudC5tYXRjaCh1bmljb2RlRXNjYXBlUGF0dGVybik7XG4gICAgaWYgKHVuaWNvZGVFc2NhcGVzICYmIHVuaWNvZGVFc2NhcGVzLmxlbmd0aCA+IDEwKSB7XG4gICAgICBpc3N1ZXMucHVzaChgRXhjZXNzaXZlIFVuaWNvZGUgZXNjYXBlcyBkZXRlY3RlZCAoJHt1bmljb2RlRXNjYXBlcy5sZW5ndGh9KWApO1xuICAgICAgc2V2ZXJpdHkgPSAnaGlnaCc7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIHN1c3BpY2lvdXMgVW5pY29kZSByYW5nZXMgdGhhdCBtaWdodCBoaWRlIGNvbnRlbnRcbiAgICBjb25zdCBzdXNwaWNpb3VzUmFuZ2VzID0gW1xuICAgICAgeyByYW5nZTogL1tcXHVFMDAwLVxcdUY4RkZdL2csIG5hbWU6ICdQcml2YXRlIFVzZSBBcmVhJyB9LFxuICAgICAgLy8gTm90ZTogUHJvcGVybHkgcGFpcmVkIHN1cnJvZ2F0ZSBwYWlycyBbXFx1RDgwMC1cXHVERkZGXSBhcmUgbm9ybWFsIGZvciBlbW9qaXNcbiAgICAgIHsgcmFuZ2U6IC9bXFx1RkREMC1cXHVGREVGXS9nLCBuYW1lOiAnTm9uLWNoYXJhY3RlcnMnIH0sXG4gICAgICB7IHJhbmdlOiAvW1xcdUZGRkVcXHVGRkZGXS9nLCBuYW1lOiAnTm9uLWNoYXJhY3RlcnMnIH1cbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCB7IHJhbmdlLCBuYW1lIH0gb2Ygc3VzcGljaW91c1Jhbmdlcykge1xuICAgICAgaWYgKHJhbmdlLnRlc3QoY29udGVudCkpIHtcbiAgICAgICAgaXNzdWVzLnB1c2goYFN1c3BpY2lvdXMgVW5pY29kZSByYW5nZSBkZXRlY3RlZDogJHtuYW1lfWApO1xuICAgICAgICBzZXZlcml0eSA9IHRoaXMuZXNjYWxhdGVTZXZlcml0eShzZXZlcml0eSwgJ21lZGl1bScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBtYWxmb3JtZWQgc3Vycm9nYXRlIHBhaXJzIHVzaW5nIHNhZmUgY2hhcmFjdGVyLWJ5LWNoYXJhY3RlciB2YWxpZGF0aW9uXG4gICAgLy8gVGhpcyBhdm9pZHMgUmVEb1MgdnVsbmVyYWJpbGl0aWVzIGZyb20gY29tcGxleCByZWdleCBwYXR0ZXJuc1xuICAgIGlmICh0aGlzLmhhc01hbGZvcm1lZFN1cnJvZ2F0ZXMoY29udGVudCkpIHtcbiAgICAgIGlzc3Vlcy5wdXNoKCdNYWxmb3JtZWQgc3Vycm9nYXRlIHBhaXJzIGRldGVjdGVkJyk7XG4gICAgICBzZXZlcml0eSA9IHRoaXMuZXNjYWxhdGVTZXZlcml0eShzZXZlcml0eSwgJ2hpZ2gnKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBpc3N1ZXMsIHNldmVyaXR5IH07XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSBjb25mdXNhYmxlIFVuaWNvZGUgY2hhcmFjdGVycyB3aXRoIEFTQ0lJIGVxdWl2YWxlbnRzXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZXBsYWNlQ29uZnVzYWJsZXMoY29udGVudDogc3RyaW5nKTogeyBub3JtYWxpemVkOiBzdHJpbmc7IGhhc0NvbmZ1c2FibGVzOiBib29sZWFuIH0ge1xuICAgIGxldCBub3JtYWxpemVkID0gY29udGVudDtcbiAgICBsZXQgaGFzQ29uZnVzYWJsZXMgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgW2NvbmZ1c2FibGUsIHJlcGxhY2VtZW50XSBvZiB0aGlzLkNPTkZVU0FCTEVfTUFQUElOR1MpIHtcbiAgICAgIGlmIChub3JtYWxpemVkLmluY2x1ZGVzKGNvbmZ1c2FibGUpKSB7XG4gICAgICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVkLnJlcGxhY2UobmV3IFJlZ0V4cCh0aGlzLmVzY2FwZVJlZ2V4KGNvbmZ1c2FibGUpLCAnZycpLCByZXBsYWNlbWVudCk7XG4gICAgICAgIGhhc0NvbmZ1c2FibGVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBub3JtYWxpemVkLCBoYXNDb25mdXNhYmxlcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVjdCBzdXNwaWNpb3VzIG1peGluZyBvZiBkaWZmZXJlbnQgVW5pY29kZSBzY3JpcHRzXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBkZXRlY3RNaXhlZFNjcmlwdHMoY29udGVudDogc3RyaW5nKTogeyBpc1N1c3BpY2lvdXM6IGJvb2xlYW47IHNjcmlwdHM6IHN0cmluZ1tdIH0ge1xuICAgIGNvbnN0IGRldGVjdGVkU2NyaXB0czogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW3NjcmlwdE5hbWUsIHBhdHRlcm5dIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuU0NSSVBUX1BBVFRFUk5TKSkge1xuICAgICAgaWYgKHBhdHRlcm4udGVzdChjb250ZW50KSkge1xuICAgICAgICBkZXRlY3RlZFNjcmlwdHMucHVzaChzY3JpcHROYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDb25zaWRlciBpdCBzdXNwaWNpb3VzIGlmOlxuICAgIC8vIDEuIE1vcmUgdGhhbiAzIHNjcmlwdHMgYXJlIG1peGVkIChsZWdpdGltYXRlIHRleHQgcmFyZWx5IG1peGVzID4zIHNjcmlwdHMpXG4gICAgLy8gMi4gQ29udGVudCBjb250YWlucyBMYXRpbiArIGRhbmdlcm91cyBjb25mdXNhYmxlIHNjcmlwdHMgKEN5cmlsbGljL0dyZWVrIC0gY29tbW9uIGF0dGFjayBwYXR0ZXJuKVxuICAgIC8vIE5vdGU6IExhdGluICsgQ0pLIGlzIGNvbW1vbiBhbmQgbGVnaXRpbWF0ZSAoZS5nLiwgQ2hpbmVzZSB3aXRoIEVuZ2xpc2gpXG4gICAgY29uc3QgaXNTdXNwaWNpb3VzID0gZGV0ZWN0ZWRTY3JpcHRzLmxlbmd0aCA+IDMgfHwgXG4gICAgICAoZGV0ZWN0ZWRTY3JpcHRzLmluY2x1ZGVzKCdMQVRJTicpICYmIGRldGVjdGVkU2NyaXB0cy5sZW5ndGggPiAxICYmIFxuICAgICAgIChkZXRlY3RlZFNjcmlwdHMuaW5jbHVkZXMoJ0NZUklMTElDJykgfHwgZGV0ZWN0ZWRTY3JpcHRzLmluY2x1ZGVzKCdHUkVFSycpKSk7XG5cbiAgICByZXR1cm4geyBpc1N1c3BpY2lvdXMsIHNjcmlwdHM6IGRldGVjdGVkU2NyaXB0cyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEVzY2FsYXRlIHNldmVyaXR5IGxldmVsIChoaWdoZXIgc2V2ZXJpdHkgdGFrZXMgcHJlY2VkZW5jZSlcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGVzY2FsYXRlU2V2ZXJpdHkoXG4gICAgY3VycmVudDogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJyB8ICdjcml0aWNhbCcgfCB1bmRlZmluZWQsIFxuICAgIG5ld1NldmVyaXR5OiAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnIHwgJ2NyaXRpY2FsJ1xuICApOiAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnIHwgJ2NyaXRpY2FsJyB7XG4gICAgY29uc3Qgc2V2ZXJpdHlMZXZlbHMgPSB7IGxvdzogMSwgbWVkaXVtOiAyLCBoaWdoOiAzLCBjcml0aWNhbDogNCB9O1xuICAgIGNvbnN0IGN1cnJlbnRMZXZlbCA9IGN1cnJlbnQgPyBzZXZlcml0eUxldmVsc1tjdXJyZW50XSA6IDA7XG4gICAgY29uc3QgbmV3TGV2ZWwgPSBzZXZlcml0eUxldmVsc1tuZXdTZXZlcml0eV07XG4gICAgXG4gICAgcmV0dXJuIG5ld0xldmVsID4gY3VycmVudExldmVsID8gbmV3U2V2ZXJpdHkgOiAoY3VycmVudCB8fCAnbG93Jyk7XG4gIH1cblxuICAvKipcbiAgICogRXNjYXBlIHNwZWNpYWwgcmVnZXggY2hhcmFjdGVycyBmb3Igc2FmZSByZXBsYWNlbWVudFxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZXNjYXBlUmVnZXgoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBjb250ZW50IGNvbnRhaW5zIHBvdGVudGlhbGx5IGRhbmdlcm91cyBVbmljb2RlIHBhdHRlcm5zXG4gICAqL1xuICBzdGF0aWMgY29udGFpbnNEYW5nZXJvdXNVbmljb2RlKGNvbnRlbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIFF1aWNrIGNoZWNrIGZvciBvYnZpb3VzbHkgZGFuZ2Vyb3VzIHBhdHRlcm5zXG4gICAgcmV0dXJuIHRoaXMuRElSRUNUSU9OX09WRVJSSURFX0NIQVJTLnRlc3QoY29udGVudCkgfHxcbiAgICAgICAgICAgdGhpcy5aRVJPX1dJRFRIX0NIQVJTLnRlc3QoY29udGVudCkgfHxcbiAgICAgICAgICAgdGhpcy5OT05fUFJJTlRBQkxFX0NIQVJTLnRlc3QoY29udGVudCkgfHxcbiAgICAgICAgICAgdGhpcy5oYXNFeGNlc3NpdmVVbmljb2RlRXNjYXBlcyhjb250ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBjb250ZW50IGhhcyBleGNlc3NpdmUgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2VzXG4gICAqIFByZXZlbnRzIG51bGwgcG9pbnRlciBleGNlcHRpb24gYnkgc2FmZWx5IGNoZWNraW5nIG1hdGNoIHJlc3VsdHNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGhhc0V4Y2Vzc2l2ZVVuaWNvZGVFc2NhcGVzKGNvbnRlbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKC9cXFxcdVswLTlhLWZBLUZdezR9L2cpO1xuICAgIHJldHVybiBtYXRjaGVzICE9PSBudWxsICYmIG1hdGNoZXMubGVuZ3RoID4gMTA7XG4gIH1cblxuICAvKipcbiAgICogU2FmZWx5IGNoZWNrIGZvciBtYWxmb3JtZWQgc3Vycm9nYXRlIHBhaXJzIHdpdGhvdXQgUmVEb1MgdnVsbmVyYWJpbGl0eVxuICAgKiBVc2VzIGNoYXJhY3Rlci1ieS1jaGFyYWN0ZXIgdmFsaWRhdGlvbiBpbnN0ZWFkIG9mIGNvbXBsZXggcmVnZXhcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGhhc01hbGZvcm1lZFN1cnJvZ2F0ZXMoY29udGVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb250ZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGFyID0gY29udGVudC5jaGFyQ29kZUF0KGkpO1xuICAgICAgXG4gICAgICAvLyBIaWdoIHN1cnJvZ2F0ZSAoVStEODAwLVUrREJGRilcbiAgICAgIGlmIChjaGFyID49IDB4RDgwMCAmJiBjaGFyIDw9IDB4REJGRikge1xuICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGZvbGxvd2VkIGJ5IGEgbG93IHN1cnJvZ2F0ZVxuICAgICAgICBpZiAoaSArIDEgPj0gY29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gSGlnaCBzdXJyb2dhdGUgYXQgZW5kIG9mIHN0cmluZ1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5leHRDaGFyID0gY29udGVudC5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgICAgICAgaWYgKG5leHRDaGFyIDwgMHhEQzAwIHx8IG5leHRDaGFyID4gMHhERkZGKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEhpZ2ggc3Vycm9nYXRlIG5vdCBmb2xsb3dlZCBieSBsb3cgc3Vycm9nYXRlXG4gICAgICAgIH1cbiAgICAgICAgaSsrOyAvLyBTa2lwIHRoZSB2YWxpZCBsb3cgc3Vycm9nYXRlXG4gICAgICB9XG4gICAgICAvLyBMb3cgc3Vycm9nYXRlIChVK0RDMDAtVStERkZGKSB3aXRob3V0IHByZWNlZGluZyBoaWdoIHN1cnJvZ2F0ZVxuICAgICAgZWxzZSBpZiAoY2hhciA+PSAweERDMDAgJiYgY2hhciA8PSAweERGRkYpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7IC8vIFVucGFpcmVkIGxvdyBzdXJyb2dhdGVcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzYWZlIHByZXZpZXcgb2YgVW5pY29kZSBjb250ZW50IGZvciBsb2dnaW5nXG4gICAqL1xuICBzdGF0aWMgZ2V0U2FmZVByZXZpZXcoY29udGVudDogc3RyaW5nLCBtYXhMZW5ndGg6IG51bWJlciA9IDEwMCk6IHN0cmluZyB7XG4gICAgLy8gUmVtb3ZlIGRhbmdlcm91cyBVbmljb2RlIGNoYXJhY3RlcnMgYW5kIHRydW5jYXRlIGZvciBzYWZlIGxvZ2dpbmdcbiAgICBjb25zdCBjbGVhbmVkID0gY29udGVudFxuICAgICAgLnJlcGxhY2UodGhpcy5ESVJFQ1RJT05fT1ZFUlJJREVfQ0hBUlMsICdbRElSXScpXG4gICAgICAucmVwbGFjZSh0aGlzLlpFUk9fV0lEVEhfQ0hBUlMsICdbWlddJylcbiAgICAgIC5yZXBsYWNlKHRoaXMuTk9OX1BSSU5UQUJMRV9DSEFSUywgJ1tOUF0nKTtcbiAgICBcbiAgICByZXR1cm4gY2xlYW5lZC5sZW5ndGggPiBtYXhMZW5ndGggPyBcbiAgICAgIGNsZWFuZWQuc3Vic3RyaW5nKDAsIG1heExlbmd0aCkgKyAnLi4uJyA6IFxuICAgICAgY2xlYW5lZDtcbiAgfVxufSJdfQ==
313
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pY29kZVZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFHSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFTeEQsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQjs7T0FFRztJQUVIOzs7OztPQUtHO0lBQ0ssTUFBTSxDQUFVLHdCQUF3QixHQUFHLCtCQUErQixDQUFDO0lBRW5GOzs7OztPQUtHO0lBQ0ssTUFBTSxDQUFVLGdCQUFnQixHQUFHLHFDQUFxQyxDQUFDO0lBRWpGOzs7OztPQUtHO0lBQ0ssTUFBTSxDQUFVLG1CQUFtQixHQUFHLG9FQUFvRSxDQUFDLENBQUMsZ0ZBQWdGO0lBRXBNOzs7T0FHRztJQUNLLE1BQU0sQ0FBVSxtQkFBbUIsR0FBd0IsSUFBSSxHQUFHLENBQUM7UUFDekUsb0JBQW9CO1FBQ3BCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUNsRixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDbEYsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBRTFELGlCQUFpQjtRQUNqQixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDbEYsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQ25GLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUNsRixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFFcEMsaURBQWlEO1FBQ2pELENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztRQUNoVixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7UUFFaFYscUNBQXFDO1FBQ3JDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUU5QywyQkFBMkI7UUFDM0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQ3RFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUU1RCx1QkFBdUI7UUFDdkIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQ3RULENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFF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SCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQWUsRUFBRSxZQUFvQixHQUFHO1FBQzVELG9FQUFvRTtRQUNwRSxNQUFNLE9BQU8sR0FBRyxPQUFPO2FBQ3BCLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsT0FBTyxDQUFDO2FBQy9DLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDO2FBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFN0MsT0FBTyxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDO1lBQ2pDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLE9BQU8sQ0FBQztJQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVuaWNvZGUgVmFsaWRhdG9yIGZvciBEb2xsaG91c2VNQ1BcbiAqIFxuICogUHJldmVudHMgVW5pY29kZS1iYXNlZCBieXBhc3MgYXR0YWNrcyBpbmNsdWRpbmc6XG4gKiAtIEhvbW9ncmFwaCBhdHRhY2tzICh2aXN1YWxseSBzaW1pbGFyIGNoYXJhY3RlcnMpXG4gKiAtIERpcmVjdGlvbiBvdmVycmlkZSBhdHRhY2tzIChSTE8vTFJPKVxuICogLSBNaXhlZCBzY3JpcHQgYXR0YWNrc1xuICogLSBaZXJvLXdpZHRoIGNoYXJhY3RlciBpbmplY3Rpb25cbiAqIC0gVW5pY29kZSBub3JtYWxpemF0aW9uIGJ5cGFzc2VzXG4gKiBcbiAqIFNlY3VyaXR5OiBTRUMtMDAxIC0gVW5pY29kZSBhdHRhY2sgcHJldmVudGlvblxuICovXG5cbmltcG9ydCB7IFNlY3VyaXR5RXJyb3IgfSBmcm9tICcuLi9lcnJvcnMuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHlNb25pdG9yLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBVbmljb2RlVmFsaWRhdGlvblJlc3VsdCB7XG4gIGlzVmFsaWQ6IGJvb2xlYW47XG4gIG5vcm1hbGl6ZWRDb250ZW50OiBzdHJpbmc7XG4gIGRldGVjdGVkSXNzdWVzPzogc3RyaW5nW107XG4gIHNldmVyaXR5PzogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJyB8ICdjcml0aWNhbCc7XG59XG5cbmV4cG9ydCBjbGFzcyBVbmljb2RlVmFsaWRhdG9yIHtcbiAgLyoqXG4gICAqIFVuaWNvZGUgYXR0YWNrIHBhdHRlcm5zIGFuZCBjb25mdXNhYmxlIGNoYXJhY3RlcnNcbiAgICovXG4gIFxuICAvKipcbiAgICogRGlyZWN0aW9uIG92ZXJyaWRlIGNoYXJhY3RlcnMgdGhhdCBjYW4gaGlkZSBvciByZXZlcnNlIHRleHQgZGlzcGxheVxuICAgKiBAc2VlIGh0dHBzOi8vdW5pY29kZS5vcmcvcmVwb3J0cy90cjkvI0RpcmVjdGlvbmFsX0Zvcm1hdHRpbmdfQ2hhcmFjdGVyc1xuICAgKiBVKzIwMkEtVSsyMDJFOiBMZWZ0L1JpZ2h0IGVtYmVkZGluZyBhbmQgb3ZlcnJpZGUgbWFya3MgKExSRSwgUkxFLCBQREYsIExSTywgUkxPKVxuICAgKiBVKzIwNjYtVSsyMDY5OiBJc29sYXRlIGZvcm1hdHRpbmcgY2hhcmFjdGVycyAoTFJJLCBSTEksIEZTSSwgUERJKVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRElSRUNUSU9OX09WRVJSSURFX0NIQVJTID0gL1tcXHUyMDJBLVxcdTIwMkVcXHUyMDY2LVxcdTIwNjldL2c7XG4gIFxuICAvKipcbiAgICogWmVyby13aWR0aCBhbmQgaW52aXNpYmxlIGZvcm1hdHRpbmcgY2hhcmFjdGVycyBvZnRlbiB1c2VkIHRvIGhpZGUgcGF5bG9hZHNcbiAgICogVSsyMDBCLVUrMjAwRjogWmVyby13aWR0aCBzcGFjZXMgYW5kIGRpcmVjdGlvbmFsIG1hcmtzXG4gICAqIFUrMjAyOC1VKzIwMkY6IExpbmUvcGFyYWdyYXBoIHNlcGFyYXRvcnMgYW5kIGZvcm1hdHRpbmcgY2hhcmFjdGVyc1xuICAgKiBVK0ZFRkY6IFplcm8td2lkdGggbm8tYnJlYWsgc3BhY2UgKEJ5dGUgT3JkZXIgTWFyaylcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFpFUk9fV0lEVEhfQ0hBUlMgPSAvW1xcdTIwMEItXFx1MjAwRlxcdTIwMjgtXFx1MjAyRlxcdUZFRkZdL2c7XG4gIFxuICAvKipcbiAgICogTm9uLXByaW50YWJsZSBjb250cm9sIGNoYXJhY3RlcnMgdGhhdCBzaG91bGQgbm90IGFwcGVhciBpbiBub3JtYWwgdGV4dFxuICAgKiBVKzAwMDAtVSswMDA4LCBVKzAwMEItVSswMDBDLCBVKzAwMEUtVSswMDFGOiBDMCBjb250cm9sIGNvZGVzIChleGNlcHQgVEFCLCBMRiwgQ1IpXG4gICAqIFUrMDA3Ri1VKzAwOUY6IERlbGV0ZSBhbmQgQzEgY29udHJvbCBjb2Rlc1xuICAgKiBVK0ZGRkUtVStGRkZGOiBOb24tY2hhcmFjdGVycyB0aGF0IHNob3VsZCBuZXZlciBhcHBlYXIgaW4gdmFsaWQgdGV4dFxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTk9OX1BSSU5UQUJMRV9DSEFSUyA9IC9bXFx1MDAwMC1cXHUwMDA4XFx1MDAwQlxcdTAwMENcXHUwMDBFLVxcdTAwMUZcXHUwMDdGLVxcdTAwOUZcXHVGRkZFXFx1RkZGRl0vZzsgLy8gTk9TT05BUiAtIEludGVudGlvbmFsbHkgbWF0Y2hpbmcgY29udHJvbCBjaGFyYWN0ZXJzIGZvciBzZWN1cml0eSBzYW5pdGl6YXRpb25cbiAgXG4gIC8qKlxuICAgKiBDb21tb24gaG9tb2dyYXBoL2NvbmZ1c2FibGUgY2hhcmFjdGVyIG1hcHBpbmdzXG4gICAqIE1hcHMgdmlzdWFsbHkgc2ltaWxhciBVbmljb2RlIGNoYXJhY3RlcnMgdG8gdGhlaXIgQVNDSUkgZXF1aXZhbGVudHNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IENPTkZVU0FCTEVfTUFQUElOR1M6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKFtcbiAgICAvLyBDeXJpbGxpYyB0byBMYXRpblxuICAgIFsn0LAnLCAnYSddLCBbJ9C1JywgJ2UnXSwgWyfQvicsICdvJ10sIFsn0YAnLCAncCddLCBbJ9GBJywgJ2MnXSwgWyfRhScsICd4J10sIFsn0YMnLCAneSddLFxuICAgIFsn0JAnLCAnQSddLCBbJ9CSJywgJ0InXSwgWyfQlScsICdFJ10sIFsn0JonLCAnSyddLCBbJ9CcJywgJ00nXSwgWyfQnScsICdIJ10sIFsn0J4nLCAnTyddLCBcbiAgICBbJ9CgJywgJ1AnXSwgWyfQoScsICdDJ10sIFsn0KInLCAnVCddLCBbJ9CjJywgJ1knXSwgWyfQpScsICdYJ10sXG4gICAgXG4gICAgLy8gR3JlZWsgdG8gTGF0aW5cbiAgICBbJ86xJywgJ2EnXSwgWyfOsicsICdiJ10sIFsnzrMnLCAnZyddLCBbJ860JywgJ2QnXSwgWyfOtScsICdlJ10sIFsnzrYnLCAneiddLCBbJ863JywgJ2gnXSxcbiAgICBbJ864JywgJ3RoJ10sIFsnzrknLCAnaSddLCBbJ866JywgJ2snXSwgWyfOuycsICdsJ10sIFsnzrwnLCAnbSddLCBbJ869JywgJ24nXSwgWyfOvicsICd4J10sXG4gICAgWyfOvycsICdvJ10sIFsnz4AnLCAncCddLCBbJ8+BJywgJ3InXSwgWyfPgycsICdzJ10sIFsnz4QnLCAndCddLCBbJ8+FJywgJ3UnXSwgWyfPhicsICdmJ10sXG4gICAgWyfPhycsICdjaCddLCBbJ8+IJywgJ3BzJ10sIFsnz4knLCAndyddLFxuICAgIFxuICAgIC8vIE1hdGhlbWF0aWNhbCBzeW1ib2xzIHRvIEFTQ0lJICh2YXJpb3VzIHN0eWxlcylcbiAgICBbJ/CdkoInLCAnYSddLCBbJ/CdkoMnLCAnYiddLCBbJ/CdkoQnLCAnYyddLCBbJ/CdkoUnLCAnZCddLCBbJ/CdkoYnLCAnZSddLCBbJ/CdkocnLCAnZiddLCBbJ/CdkognLCAnZyddLCBbJ/CdkoknLCAnaCddLCBbJ/CdkoonLCAnaSddLCBbJ/CdkosnLCAnaiddLCBbJ/CdkownLCAnayddLCBbJ/Cdko0nLCAnbCddLCBbJ/Cdko4nLCAnbSddLCBbJ/Cdko8nLCAnbiddLCBbJ/CdkpAnLCAnbyddLCBbJ/CdkpEnLCAncCddLCBbJ/CdkpInLCAncSddLCBbJ/CdkpMnLCAnciddLCBbJ/CdkpQnLCAncyddLCBbJ/CdkpUnLCAndCddLCBbJ/CdkpYnLCAndSddLCBbJ/CdkpcnLCAndiddLCBbJ/CdkpgnLCAndyddLCBbJ/CdkpknLCAneCddLCBbJ/CdkponLCAneSddLCBbJ/CdkpsnLCAneiddLFxuICAgIFsn8J2QmicsICdhJ10sIFsn8J2QmycsICdiJ10sIFsn8J2QnCcsICdjJ10sIFsn8J2QnScsICdkJ10sIFsn8J2QnicsICdlJ10sIFsn8J2QnycsICdmJ10sIFsn8J2QoCcsICdnJ10sIFsn8J2QoScsICdoJ10sIFsn8J2QoicsICdpJ10sIFsn8J2QoycsICdqJ10sIFsn8J2QpCcsICdrJ10sIFsn8J2QpScsICdsJ10sIFsn8J2QpicsICdtJ10sIFsn8J2QpycsICduJ10sIFsn8J2QqCcsICdvJ10sIFsn8J2QqScsICdwJ10sIFsn8J2QqicsICdxJ10sIFsn8J2QqycsICdyJ10sIFsn8J2QrCcsICdzJ10sIFsn8J2QrScsICd0J10sIFsn8J2QricsICd1J10sIFsn8J2QrycsICd2J10sIFsn8J2QsCcsICd3J10sIFsn8J2QsScsICd4J10sIFsn8J2QsicsICd5J10sIFsn8J2QsycsICd6J10sXG4gICAgXG4gICAgLy8gU3BlY2lhbCBpIHZhcmlhbnRzIChUdXJraXNoLCBldGMuKVxuICAgIFsnxLEnLCAnaSddLCBbJ8SwJywgJ0knXSwgWyfRlicsICdpJ10sIFsn04AnLCAnSSddLFxuICAgIFxuICAgIC8vIE90aGVyIGNvbW1vbiBjb25mdXNhYmxlc1xuICAgIFsnx50nLCAnZSddLCBbJ8mQJywgJ2EnXSwgWyfJlCcsICdvJ10sIFsnyocnLCAndCddLCBbJ8qMJywgJ3YnXSwgWyfKjScsICd3J10sXG4gICAgWyfihIMnLCAnQyddLCBbJ+KEiScsICdGJ10sIFsn4oSWJywgJ05vJ10sIFsn4oSiJywgJ1RNJ10sIFsnwq4nLCAnUiddLFxuICAgIFxuICAgIC8vIEZ1bGx3aWR0aCBjaGFyYWN0ZXJzXG4gICAgWyfvvKEnLCAnQSddLCBbJ++8oicsICdCJ10sIFsn77yjJywgJ0MnXSwgWyfvvKQnLCAnRCddLCBbJ++8pScsICdFJ10sIFsn77ymJywgJ0YnXSwgWyfvvKcnLCAnRyddLCBbJ++8qCcsICdIJ10sIFsn77ypJywgJ0knXSwgWyfvvKonLCAnSiddLCBbJ++8qycsICdLJ10sIFsn77ysJywgJ0wnXSwgWyfvvK0nLCAnTSddLCBbJ++8ricsICdOJ10sIFsn77yvJywgJ08nXSwgWyfvvLAnLCAnUCddLCBbJ++8sScsICdRJ10sIFsn77yyJywgJ1InXSwgWyfvvLMnLCAnUyddLCBbJ++8tCcsICdUJ10sIFsn77y1JywgJ1UnXSwgWyfvvLYnLCAnViddLCBbJ++8tycsICdXJ10sIFsn77y4JywgJ1gnXSwgWyfvvLknLCAnWSddLCBbJ++8uicsICdaJ10sXG4gICAgWyfvvYEnLCAnYSddLCBbJ++9gicsICdiJ10sIFsn772DJywgJ2MnXSwgWyfvvYQnLCAnZCddLCBbJ++9hScsICdlJ10sIFsn772GJywgJ2YnXSwgWyfvvYcnLCAnZyddLCBbJ++9iCcsICdoJ10sIFsn772JJywgJ2knXSwgWyfvvYonLCAnaiddLCBbJ++9iycsICdrJ10sIFsn772MJywgJ2wnXSwgWyfvvY0nLCAnbSddLCBbJ++9jicsICduJ10sIFsn772PJywgJ28nXSwgWyfvvZAnLCAncCddLCBbJ++9kScsICdxJ10sIFsn772SJywgJ3InXSwgWyfvvZMnLCAncyddLCBbJ++9lCcsICd0J10sIFsn772VJywgJ3UnXSwgWyfvvZYnLCAndiddLCBbJ++9lycsICd3J10sIFsn772YJywgJ3gnXSwgWyfvvZknLCAneSddLCBbJ++9micsICd6J10sXG4gICAgWyfvvJAnLCAnMCddLCBbJ++8kScsICcxJ10sIFsn77ySJywgJzInXSwgWyfvvJMnLCAnMyddLCBbJ++8lCcsICc0J10sIFsn77yVJywgJzUnXSwgWyfvvJYnLCAnNiddLCBbJ++8lycsICc3J10sIFsn77yYJywgJzgnXSwgWyfvvJknLCAnOSddLFxuICBdKTtcblxuICAvKipcbiAgICogU2NyaXB0IG1peGluZyBkZXRlY3Rpb24gcGF0dGVybnNcbiAgICogRGV0ZWN0cyBzdXNwaWNpb3VzIG1peGluZyBvZiBkaWZmZXJlbnQgVW5pY29kZSBzY3JpcHRzXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBTQ1JJUFRfUEFUVEVSTlMgPSB7XG4gICAgTEFUSU46IC9bXFx1MDAwMC1cXHUwMDdGXFx1MDBBMC1cXHUwMEZGXFx1MDEwMC1cXHUwMTdGXFx1MDE4MC1cXHUwMjRGXS8sIC8vIE5PU09OQVIgLSBJbnRlbnRpb25hbGx5IGluY2x1ZGVzIGNvbnRyb2wgY2hhcmFjdGVycyBmb3IgY29tcHJlaGVuc2l2ZSBMYXRpbiBzY3JpcHQgZGV0ZWN0aW9uXG4gICAgLy8gVXNlIGFsdGVybmF0aW9uIHRvIGF2b2lkIFNvbmFyQ2xvdWQgdGhpbmtpbmcgXFx1MDUyRlxcdTJERTAgaXMgYSBjb21iaW5lZCBjaGFyYWN0ZXJcbiAgICBDWVJJTExJQzogLyg/OltcXHUwNDAwLVxcdTA0RkZdfFtcXHUwNTAwLVxcdTA1MkZdfFtcXHUyREUwLVxcdTJERkZdfFtcXHVBNjQwLVxcdUE2OUZdKS8sXG4gICAgR1JFRUs6IC9bXFx1MDM3MC1cXHUwM0ZGXFx1MUYwMC1cXHUxRkZGXS8sXG4gICAgQVJBQklDOiAvW1xcdTA2MDAtXFx1MDZGRlxcdTA3NTAtXFx1MDc3RlxcdTA4QTAtXFx1MDhGRlxcdUZCNTAtXFx1RkRGRlxcdUZFNzAtXFx1RkVGRl0vLFxuICAgIEhFQlJFVzogL1tcXHUwNTkwLVxcdTA1RkZcXHVGQjFELVxcdUZCNEZdLyxcbiAgICBDSks6IC9bXFx1MkU4MC1cXHUyRUZGXFx1MkYwMC1cXHUyRkRGXFx1MzAwMC1cXHUzMDNGXFx1MzA0MC1cXHUzMDlGXFx1MzBBMC1cXHUzMEZGXFx1MzEwMC1cXHUzMTJGXFx1MzEzMC1cXHUzMThGXFx1MzE5MC1cXHUzMTlGXFx1MzFBMC1cXHUzMUJGXFx1MzFDMC1cXHUzMUVGXFx1MzFGMC1cXHUzMUZGXFx1MzIwMC1cXHUzMkZGXFx1MzMwMC1cXHUzM0ZGXFx1MzQwMC1cXHU0REJGXFx1NERDMC1cXHU0REZGXFx1NEUwMC1cXHU5RkZGXS8sXG4gIH07XG5cbiAgLyoqXG4gICAqIE5vcm1hbGl6ZSBVbmljb2RlIGNvbnRlbnQgdG8gcHJldmVudCBieXBhc3MgYXR0YWNrc1xuICAgKi9cbiAgc3RhdGljIG5vcm1hbGl6ZShjb250ZW50OiBzdHJpbmcpOiBVbmljb2RlVmFsaWRhdGlvblJlc3VsdCB7XG4gICAgY29uc3QgaXNzdWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBub3JtYWxpemVkID0gY29udGVudDtcbiAgICBsZXQgc2V2ZXJpdHk6ICdsb3cnIHwgJ21lZGl1bScgfCAnaGlnaCcgfCAnY3JpdGljYWwnID0gJ2xvdyc7XG5cbiAgICB0cnkge1xuICAgICAgLy8gMS4gRGV0ZWN0IGFuZCBsb2cgc3VzcGljaW91cyBVbmljb2RlIHBhdHRlcm5zIGJlZm9yZSBub3JtYWxpemF0aW9uXG4gICAgICBjb25zdCBzdXNwaWNpb3VzUGF0dGVybnMgPSB0aGlzLmRldGVjdFN1c3BpY2lvdXNQYXR0ZXJucyhjb250ZW50KTtcbiAgICAgIGlzc3Vlcy5wdXNoKC4uLnN1c3BpY2lvdXNQYXR0ZXJucy5pc3N1ZXMpO1xuICAgICAgaWYgKHN1c3BpY2lvdXNQYXR0ZXJucy5zZXZlcml0eSkge1xuICAgICAgICBzZXZlcml0eSA9IHRoaXMuZXNjYWxhdGVTZXZlcml0eShzZXZlcml0eSwgc3VzcGljaW91c1BhdHRlcm5zLnNldmVyaXR5KTtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gUmVtb3ZlIGRpcmVjdGlvbiBvdmVycmlkZSBjaGFyYWN0ZXJzIChwcmV2ZW50cyBSTE8vTFJPIGF0dGFja3MpXG4gICAgICBpZiAodGhpcy5ESVJFQ1RJT05fT1ZFUlJJREVfQ0hBUlMudGVzdChub3JtYWxpemVkKSkge1xuICAgICAgICBpc3N1ZXMucHVzaCgnRGlyZWN0aW9uIG92ZXJyaWRlIGNoYXJhY3RlcnMgZGV0ZWN0ZWQnKTtcbiAgICAgICAgc2V2ZXJpdHkgPSB0aGlzLmVzY2FsYXRlU2V2ZXJpdHkoc2V2ZXJpdHksICdoaWdoJyk7XG4gICAgICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVkLnJlcGxhY2UodGhpcy5ESVJFQ1RJT05fT1ZFUlJJREVfQ0hBUlMsICcnKTtcbiAgICAgICAgXG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnVU5JQ09ERV9ESVJFQ1RJT05fT1ZFUlJJREUnLFxuICAgICAgICAgIHNldmVyaXR5OiAnSElHSCcsXG4gICAgICAgICAgc291cmNlOiAndW5pY29kZV92YWxpZGF0aW9uJyxcbiAgICAgICAgICBkZXRhaWxzOiAnRGlyZWN0aW9uIG92ZXJyaWRlIGNoYXJhY3RlcnMgcmVtb3ZlZCBmcm9tIGNvbnRlbnQnXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyAzLiBSZW1vdmUgemVyby13aWR0aCBhbmQgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzXG4gICAgICBpZiAodGhpcy5aRVJPX1dJRFRIX0NIQVJTLnRlc3Qobm9ybWFsaXplZCkgfHwgdGhpcy5OT05fUFJJTlRBQkxFX0NIQVJTLnRlc3Qobm9ybWFsaXplZCkpIHtcbiAgICAgICAgaXNzdWVzLnB1c2goJ1plcm8td2lkdGggb3Igbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIGRldGVjdGVkJyk7XG4gICAgICAgIHNldmVyaXR5ID0gdGhpcy5lc2NhbGF0ZVNldmVyaXR5KHNldmVyaXR5LCAnbWVkaXVtJyk7XG4gICAgICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVkXG4gICAgICAgICAgLnJlcGxhY2UodGhpcy5aRVJPX1dJRFRIX0NIQVJTLCAnJylcbiAgICAgICAgICAucmVwbGFjZSh0aGlzLk5PTl9QUklOVEFCTEVfQ0hBUlMsICcnKTtcbiAgICAgIH1cblxuICAgICAgLy8gNC4gQXBwbHkgVW5pY29kZSBub3JtYWxpemF0aW9uIChORkMgLSBDYW5vbmljYWwgRGVjb21wb3NpdGlvbiArIENvbXBvc2l0aW9uKVxuICAgICAgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQubm9ybWFsaXplKCdORkMnKTtcblxuICAgICAgLy8gNS4gRGV0ZWN0IG1peGVkIHNjcmlwdCBhdHRhY2tzIEJFRk9SRSBjb25mdXNhYmxlIHJlcGxhY2VtZW50XG4gICAgICBjb25zdCBtaXhlZFNjcmlwdFJlc3VsdCA9IHRoaXMuZGV0ZWN0TWl4ZWRTY3JpcHRzKG5vcm1hbGl6ZWQpO1xuICAgICAgaWYgKG1peGVkU2NyaXB0UmVzdWx0LmlzU3VzcGljaW91cykge1xuICAgICAgICBpc3N1ZXMucHVzaChgTWl4ZWQgc2NyaXB0IHVzYWdlIGRldGVjdGVkOiAke21peGVkU2NyaXB0UmVzdWx0LnNjcmlwdHMuam9pbignLCAnKX1gKTtcbiAgICAgICAgc2V2ZXJpdHkgPSB0aGlzLmVzY2FsYXRlU2V2ZXJpdHkoc2V2ZXJpdHksICdoaWdoJyk7XG4gICAgICAgIFxuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ1VOSUNPREVfTUlYRURfU0NSSVBUJyxcbiAgICAgICAgICBzZXZlcml0eTogJ0hJR0gnLFxuICAgICAgICAgIHNvdXJjZTogJ3VuaWNvZGVfdmFsaWRhdGlvbicsXG4gICAgICAgICAgZGV0YWlsczogYE1peGVkIHNjcmlwdHMgZGV0ZWN0ZWQ6ICR7bWl4ZWRTY3JpcHRSZXN1bHQuc2NyaXB0cy5qb2luKCcsICcpfWBcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIDYuIEFsd2F5cyByZXBsYWNlIGNvbmZ1c2FibGUgY2hhcmFjdGVycyB3aXRoIEFTQ0lJIGVxdWl2YWxlbnRzIGZvciBzZWN1cml0eVxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyBob21vZ3JhcGggYXR0YWNrcyByZWdhcmRsZXNzIG9mIHNjcmlwdCBtaXhpbmdcbiAgICAgIGNvbnN0IGNvbmZ1c2FibGVSZXN1bHQgPSB0aGlzLnJlcGxhY2VDb25mdXNhYmxlcyhub3JtYWxpemVkKTtcbiAgICAgIGlmIChjb25mdXNhYmxlUmVzdWx0Lmhhc0NvbmZ1c2FibGVzKSB7XG4gICAgICAgIG5vcm1hbGl6ZWQgPSBjb25mdXNhYmxlUmVzdWx0Lm5vcm1hbGl6ZWQ7XG4gICAgICAgIGlzc3Vlcy5wdXNoKCdDb25mdXNhYmxlIFVuaWNvZGUgY2hhcmFjdGVycyBkZXRlY3RlZCBhbmQgbm9ybWFsaXplZCcpO1xuICAgICAgICBzZXZlcml0eSA9IHRoaXMuZXNjYWxhdGVTZXZlcml0eShzZXZlcml0eSwgJ21lZGl1bScpO1xuICAgICAgICBcbiAgICAgICAgLy8gTG9nIGlmIHRoaXMgaGFwcGVucyBpbiBsZWdpdGltYXRlIG11bHRpbGluZ3VhbCBjb250ZXh0XG4gICAgICAgIGlmICghbWl4ZWRTY3JpcHRSZXN1bHQuaXNTdXNwaWNpb3VzKSB7XG4gICAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgICAgdHlwZTogJ1VOSUNPREVfVkFMSURBVElPTl9FUlJPUicsXG4gICAgICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgICAgICBzb3VyY2U6ICd1bmljb2RlX3ZhbGlkYXRpb24nLFxuICAgICAgICAgICAgZGV0YWlsczogJ0NvbmZ1c2FibGUgY2hhcmFjdGVycyBub3JtYWxpemVkIGluIGxlZ2l0aW1hdGUgbXVsdGlsaW5ndWFsIGNvbnRlbnQnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNWYWxpZDogaXNzdWVzLmxlbmd0aCA9PT0gMCxcbiAgICAgICAgbm9ybWFsaXplZENvbnRlbnQ6IG5vcm1hbGl6ZWQsXG4gICAgICAgIGRldGVjdGVkSXNzdWVzOiBpc3N1ZXMubGVuZ3RoID4gMCA/IGlzc3VlcyA6IHVuZGVmaW5lZCxcbiAgICAgICAgc2V2ZXJpdHk6IGlzc3Vlcy5sZW5ndGggPiAwID8gc2V2ZXJpdHkgOiB1bmRlZmluZWRcbiAgICAgIH07XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnVU5JQ09ERV9WQUxJREFUSU9OX0VSUk9SJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdISUdIJyxcbiAgICAgICAgc291cmNlOiAndW5pY29kZV92YWxpZGF0aW9uJyxcbiAgICAgICAgZGV0YWlsczogYFVuaWNvZGUgdmFsaWRhdGlvbiBmYWlsZWQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWBcbiAgICAgIH0pO1xuXG4gICAgICAvLyBGYWxsYmFjazogcmV0dXJuIG9yaWdpbmFsIGNvbnRlbnQgaWYgbm9ybWFsaXphdGlvbiBmYWlsc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIG5vcm1hbGl6ZWRDb250ZW50OiBjb250ZW50LFxuICAgICAgICBkZXRlY3RlZElzc3VlczogWydVbmljb2RlIHZhbGlkYXRpb24gZmFpbGVkJ10sXG4gICAgICAgIHNldmVyaXR5OiAnaGlnaCdcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVjdCBzdXNwaWNpb3VzIFVuaWNvZGUgcGF0dGVybnMgdGhhdCBtaWdodCBpbmRpY2F0ZSBhdHRhY2tzXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBkZXRlY3RTdXNwaWNpb3VzUGF0dGVybnMoY29udGVudDogc3RyaW5nKTogeyBpc3N1ZXM6IHN0cmluZ1tdOyBzZXZlcml0eT86ICdsb3cnIHwgJ21lZGl1bScgfCAnaGlnaCcgfCAnY3JpdGljYWwnIH0ge1xuICAgIGNvbnN0IGlzc3Vlczogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgc2V2ZXJpdHk6ICdsb3cnIHwgJ21lZGl1bScgfCAnaGlnaCcgfCAnY3JpdGljYWwnIHwgdW5kZWZpbmVkO1xuXG4gICAgLy8gQ2hlY2sgZm9yIGV4Y2Vzc2l2ZSBVbmljb2RlIGVzY2FwZXMgKHBvc3NpYmxlIGVuY29kaW5nIGJ5cGFzcylcbiAgICAvKipcbiAgICAgKiBQYXR0ZXJuIHRvIG1hdGNoIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlc1xuICAgICAqIFxcXFx1OiBMaXRlcmFsIGJhY2tzbGFzaCBmb2xsb3dlZCBieSAndSdcbiAgICAgKiBbMC05YS1mQS1GXXs0fTogRXhhY3RseSA0IGhleGFkZWNpbWFsIGRpZ2l0c1xuICAgICAqIFVzZWQgdG8gZGV0ZWN0IGF0dGVtcHRzIHRvIGJ5cGFzcyBmaWx0ZXJzIHVzaW5nIFxcdTAwNjFkbWluIHN0eWxlIGVuY29kaW5nXG4gICAgICovXG4gICAgY29uc3QgdW5pY29kZUVzY2FwZVBhdHRlcm4gPSAvXFxcXHVbMC05YS1mQS1GXXs0fS9nO1xuICAgIGNvbnN0IHVuaWNvZGVFc2NhcGVzID0gY29udGVudC5tYXRjaCh1bmljb2RlRXNjYXBlUGF0dGVybik7XG4gICAgaWYgKHVuaWNvZGVFc2NhcGVzICYmIHVuaWNvZGVFc2NhcGVzLmxlbmd0aCA+IDEwKSB7XG4gICAgICBpc3N1ZXMucHVzaChgRXhjZXNzaXZlIFVuaWNvZGUgZXNjYXBlcyBkZXRlY3RlZCAoJHt1bmljb2RlRXNjYXBlcy5sZW5ndGh9KWApO1xuICAgICAgc2V2ZXJpdHkgPSAnaGlnaCc7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIHN1c3BpY2lvdXMgVW5pY29kZSByYW5nZXMgdGhhdCBtaWdodCBoaWRlIGNvbnRlbnRcbiAgICBjb25zdCBzdXNwaWNpb3VzUmFuZ2VzID0gW1xuICAgICAgeyByYW5nZTogL1tcXHVFMDAwLVxcdUY4RkZdL2csIG5hbWU6ICdQcml2YXRlIFVzZSBBcmVhJyB9LFxuICAgICAgLy8gTm90ZTogUHJvcGVybHkgcGFpcmVkIHN1cnJvZ2F0ZSBwYWlycyBbXFx1RDgwMC1cXHVERkZGXSBhcmUgbm9ybWFsIGZvciBlbW9qaXNcbiAgICAgIHsgcmFuZ2U6IC9bXFx1RkREMC1cXHVGREVGXS9nLCBuYW1lOiAnTm9uLWNoYXJhY3RlcnMnIH0sXG4gICAgICB7IHJhbmdlOiAvW1xcdUZGRkVcXHVGRkZGXS9nLCBuYW1lOiAnTm9uLWNoYXJhY3RlcnMnIH1cbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCB7IHJhbmdlLCBuYW1lIH0gb2Ygc3VzcGljaW91c1Jhbmdlcykge1xuICAgICAgaWYgKHJhbmdlLnRlc3QoY29udGVudCkpIHtcbiAgICAgICAgaXNzdWVzLnB1c2goYFN1c3BpY2lvdXMgVW5pY29kZSByYW5nZSBkZXRlY3RlZDogJHtuYW1lfWApO1xuICAgICAgICBzZXZlcml0eSA9IHRoaXMuZXNjYWxhdGVTZXZlcml0eShzZXZlcml0eSwgJ21lZGl1bScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBtYWxmb3JtZWQgc3Vycm9nYXRlIHBhaXJzIHVzaW5nIHNhZmUgY2hhcmFjdGVyLWJ5LWNoYXJhY3RlciB2YWxpZGF0aW9uXG4gICAgLy8gVGhpcyBhdm9pZHMgUmVEb1MgdnVsbmVyYWJpbGl0aWVzIGZyb20gY29tcGxleCByZWdleCBwYXR0ZXJuc1xuICAgIGlmICh0aGlzLmhhc01hbGZvcm1lZFN1cnJvZ2F0ZXMoY29udGVudCkpIHtcbiAgICAgIGlzc3Vlcy5wdXNoKCdNYWxmb3JtZWQgc3Vycm9nYXRlIHBhaXJzIGRldGVjdGVkJyk7XG4gICAgICBzZXZlcml0eSA9IHRoaXMuZXNjYWxhdGVTZXZlcml0eShzZXZlcml0eSwgJ2hpZ2gnKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBpc3N1ZXMsIHNldmVyaXR5IH07XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSBjb25mdXNhYmxlIFVuaWNvZGUgY2hhcmFjdGVycyB3aXRoIEFTQ0lJIGVxdWl2YWxlbnRzXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZXBsYWNlQ29uZnVzYWJsZXMoY29udGVudDogc3RyaW5nKTogeyBub3JtYWxpemVkOiBzdHJpbmc7IGhhc0NvbmZ1c2FibGVzOiBib29sZWFuIH0ge1xuICAgIGxldCBub3JtYWxpemVkID0gY29udGVudDtcbiAgICBsZXQgaGFzQ29uZnVzYWJsZXMgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgW2NvbmZ1c2FibGUsIHJlcGxhY2VtZW50XSBvZiB0aGlzLkNPTkZVU0FCTEVfTUFQUElOR1MpIHtcbiAgICAgIGlmIChub3JtYWxpemVkLmluY2x1ZGVzKGNvbmZ1c2FibGUpKSB7XG4gICAgICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVkLnJlcGxhY2UobmV3IFJlZ0V4cCh0aGlzLmVzY2FwZVJlZ2V4KGNvbmZ1c2FibGUpLCAnZycpLCByZXBsYWNlbWVudCk7XG4gICAgICAgIGhhc0NvbmZ1c2FibGVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBub3JtYWxpemVkLCBoYXNDb25mdXNhYmxlcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVjdCBzdXNwaWNpb3VzIG1peGluZyBvZiBkaWZmZXJlbnQgVW5pY29kZSBzY3JpcHRzXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBkZXRlY3RNaXhlZFNjcmlwdHMoY29udGVudDogc3RyaW5nKTogeyBpc1N1c3BpY2lvdXM6IGJvb2xlYW47IHNjcmlwdHM6IHN0cmluZ1tdIH0ge1xuICAgIGNvbnN0IGRldGVjdGVkU2NyaXB0czogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW3NjcmlwdE5hbWUsIHBhdHRlcm5dIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuU0NSSVBUX1BBVFRFUk5TKSkge1xuICAgICAgaWYgKHBhdHRlcm4udGVzdChjb250ZW50KSkge1xuICAgICAgICBkZXRlY3RlZFNjcmlwdHMucHVzaChzY3JpcHROYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDb25zaWRlciBpdCBzdXNwaWNpb3VzIGlmOlxuICAgIC8vIDEuIE1vcmUgdGhhbiAzIHNjcmlwdHMgYXJlIG1peGVkIChsZWdpdGltYXRlIHRleHQgcmFyZWx5IG1peGVzID4zIHNjcmlwdHMpXG4gICAgLy8gMi4gQ29udGVudCBjb250YWlucyBMYXRpbiArIGRhbmdlcm91cyBjb25mdXNhYmxlIHNjcmlwdHMgKEN5cmlsbGljL0dyZWVrIC0gY29tbW9uIGF0dGFjayBwYXR0ZXJuKVxuICAgIC8vIE5vdGU6IExhdGluICsgQ0pLIGlzIGNvbW1vbiBhbmQgbGVnaXRpbWF0ZSAoZS5nLiwgQ2hpbmVzZSB3aXRoIEVuZ2xpc2gpXG4gICAgY29uc3QgaXNTdXNwaWNpb3VzID0gZGV0ZWN0ZWRTY3JpcHRzLmxlbmd0aCA+IDMgfHwgXG4gICAgICAoZGV0ZWN0ZWRTY3JpcHRzLmluY2x1ZGVzKCdMQVRJTicpICYmIGRldGVjdGVkU2NyaXB0cy5sZW5ndGggPiAxICYmIFxuICAgICAgIChkZXRlY3RlZFNjcmlwdHMuaW5jbHVkZXMoJ0NZUklMTElDJykgfHwgZGV0ZWN0ZWRTY3JpcHRzLmluY2x1ZGVzKCdHUkVFSycpKSk7XG5cbiAgICByZXR1cm4geyBpc1N1c3BpY2lvdXMsIHNjcmlwdHM6IGRldGVjdGVkU2NyaXB0cyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEVzY2FsYXRlIHNldmVyaXR5IGxldmVsIChoaWdoZXIgc2V2ZXJpdHkgdGFrZXMgcHJlY2VkZW5jZSlcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGVzY2FsYXRlU2V2ZXJpdHkoXG4gICAgY3VycmVudDogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJyB8ICdjcml0aWNhbCcgfCB1bmRlZmluZWQsIFxuICAgIG5ld1NldmVyaXR5OiAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnIHwgJ2NyaXRpY2FsJ1xuICApOiAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnIHwgJ2NyaXRpY2FsJyB7XG4gICAgY29uc3Qgc2V2ZXJpdHlMZXZlbHMgPSB7IGxvdzogMSwgbWVkaXVtOiAyLCBoaWdoOiAzLCBjcml0aWNhbDogNCB9O1xuICAgIGNvbnN0IGN1cnJlbnRMZXZlbCA9IGN1cnJlbnQgPyBzZXZlcml0eUxldmVsc1tjdXJyZW50XSA6IDA7XG4gICAgY29uc3QgbmV3TGV2ZWwgPSBzZXZlcml0eUxldmVsc1tuZXdTZXZlcml0eV07XG4gICAgXG4gICAgcmV0dXJuIG5ld0xldmVsID4gY3VycmVudExldmVsID8gbmV3U2V2ZXJpdHkgOiAoY3VycmVudCB8fCAnbG93Jyk7XG4gIH1cblxuICAvKipcbiAgICogRXNjYXBlIHNwZWNpYWwgcmVnZXggY2hhcmFjdGVycyBmb3Igc2FmZSByZXBsYWNlbWVudFxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZXNjYXBlUmVnZXgoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdHJpbmcucmVwbGFjZUFsbCgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBjb250ZW50IGNvbnRhaW5zIHBvdGVudGlhbGx5IGRhbmdlcm91cyBVbmljb2RlIHBhdHRlcm5zXG4gICAqL1xuICBzdGF0aWMgY29udGFpbnNEYW5nZXJvdXNVbmljb2RlKGNvbnRlbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIFF1aWNrIGNoZWNrIGZvciBvYnZpb3VzbHkgZGFuZ2Vyb3VzIHBhdHRlcm5zXG4gICAgcmV0dXJuIHRoaXMuRElSRUNUSU9OX09WRVJSSURFX0NIQVJTLnRlc3QoY29udGVudCkgfHxcbiAgICAgICAgICAgdGhpcy5aRVJPX1dJRFRIX0NIQVJTLnRlc3QoY29udGVudCkgfHxcbiAgICAgICAgICAgdGhpcy5OT05fUFJJTlRBQkxFX0NIQVJTLnRlc3QoY29udGVudCkgfHxcbiAgICAgICAgICAgdGhpcy5oYXNFeGNlc3NpdmVVbmljb2RlRXNjYXBlcyhjb250ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBjb250ZW50IGhhcyBleGNlc3NpdmUgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2VzXG4gICAqIFByZXZlbnRzIG51bGwgcG9pbnRlciBleGNlcHRpb24gYnkgc2FmZWx5IGNoZWNraW5nIG1hdGNoIHJlc3VsdHNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGhhc0V4Y2Vzc2l2ZVVuaWNvZGVFc2NhcGVzKGNvbnRlbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKC9cXFxcdVswLTlhLWZBLUZdezR9L2cpO1xuICAgIHJldHVybiBtYXRjaGVzICE9PSBudWxsICYmIG1hdGNoZXMubGVuZ3RoID4gMTA7XG4gIH1cblxuICAvKipcbiAgICogU2FmZWx5IGNoZWNrIGZvciBtYWxmb3JtZWQgc3Vycm9nYXRlIHBhaXJzIHdpdGhvdXQgUmVEb1MgdnVsbmVyYWJpbGl0eVxuICAgKiBVc2VzIGNoYXJhY3Rlci1ieS1jaGFyYWN0ZXIgdmFsaWRhdGlvbiBpbnN0ZWFkIG9mIGNvbXBsZXggcmVnZXhcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGhhc01hbGZvcm1lZFN1cnJvZ2F0ZXMoY29udGVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb250ZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGFyID0gY29udGVudC5jaGFyQ29kZUF0KGkpO1xuICAgICAgXG4gICAgICAvLyBIaWdoIHN1cnJvZ2F0ZSAoVStEODAwLVUrREJGRilcbiAgICAgIGlmIChjaGFyID49IDB4RDgwMCAmJiBjaGFyIDw9IDB4REJGRikge1xuICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGZvbGxvd2VkIGJ5IGEgbG93IHN1cnJvZ2F0ZVxuICAgICAgICBpZiAoaSArIDEgPj0gY29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gSGlnaCBzdXJyb2dhdGUgYXQgZW5kIG9mIHN0cmluZ1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5leHRDaGFyID0gY29udGVudC5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgICAgICAgaWYgKG5leHRDaGFyIDwgMHhEQzAwIHx8IG5leHRDaGFyID4gMHhERkZGKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEhpZ2ggc3Vycm9nYXRlIG5vdCBmb2xsb3dlZCBieSBsb3cgc3Vycm9nYXRlXG4gICAgICAgIH1cbiAgICAgICAgaSsrOyAvLyBTa2lwIHRoZSB2YWxpZCBsb3cgc3Vycm9nYXRlXG4gICAgICB9XG4gICAgICAvLyBMb3cgc3Vycm9nYXRlIChVK0RDMDAtVStERkZGKSB3aXRob3V0IHByZWNlZGluZyBoaWdoIHN1cnJvZ2F0ZVxuICAgICAgZWxzZSBpZiAoY2hhciA+PSAweERDMDAgJiYgY2hhciA8PSAweERGRkYpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7IC8vIFVucGFpcmVkIGxvdyBzdXJyb2dhdGVcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzYWZlIHByZXZpZXcgb2YgVW5pY29kZSBjb250ZW50IGZvciBsb2dnaW5nXG4gICAqL1xuICBzdGF0aWMgZ2V0U2FmZVByZXZpZXcoY29udGVudDogc3RyaW5nLCBtYXhMZW5ndGg6IG51bWJlciA9IDEwMCk6IHN0cmluZyB7XG4gICAgLy8gUmVtb3ZlIGRhbmdlcm91cyBVbmljb2RlIGNoYXJhY3RlcnMgYW5kIHRydW5jYXRlIGZvciBzYWZlIGxvZ2dpbmdcbiAgICBjb25zdCBjbGVhbmVkID0gY29udGVudFxuICAgICAgLnJlcGxhY2UodGhpcy5ESVJFQ1RJT05fT1ZFUlJJREVfQ0hBUlMsICdbRElSXScpXG4gICAgICAucmVwbGFjZSh0aGlzLlpFUk9fV0lEVEhfQ0hBUlMsICdbWlddJylcbiAgICAgIC5yZXBsYWNlKHRoaXMuTk9OX1BSSU5UQUJMRV9DSEFSUywgJ1tOUF0nKTtcbiAgICBcbiAgICByZXR1cm4gY2xlYW5lZC5sZW5ndGggPiBtYXhMZW5ndGggPyBcbiAgICAgIGNsZWFuZWQuc3Vic3RyaW5nKDAsIG1heExlbmd0aCkgKyAnLi4uJyA6IFxuICAgICAgY2xlYW5lZDtcbiAgfVxufSJdfQ==