@dollhousemcp/mcp-server 2.0.11 → 2.0.12-rc.2

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 (93) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/dist/config/ConfigManager.d.ts +34 -0
  3. package/dist/config/ConfigManager.d.ts.map +1 -1
  4. package/dist/config/ConfigManager.js +46 -1
  5. package/dist/config/env.d.ts +18 -0
  6. package/dist/config/env.d.ts.map +1 -1
  7. package/dist/config/env.js +89 -2
  8. package/dist/di/Container.d.ts +1 -0
  9. package/dist/di/Container.d.ts.map +1 -1
  10. package/dist/di/Container.js +38 -2
  11. package/dist/elements/agents/AgentManager.js +2 -2
  12. package/dist/generated/version.d.ts +2 -2
  13. package/dist/generated/version.d.ts.map +1 -1
  14. package/dist/generated/version.js +3 -3
  15. package/dist/handlers/mcp-aql/GatekeeperSession.d.ts.map +1 -1
  16. package/dist/handlers/mcp-aql/GatekeeperSession.js +3 -2
  17. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
  18. package/dist/handlers/mcp-aql/MCPAQLHandler.js +11 -3
  19. package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
  20. package/dist/handlers/mcp-aql/OperationSchema.js +11 -6
  21. package/dist/handlers/mcp-aql/policies/ToolClassification.d.ts.map +1 -1
  22. package/dist/handlers/mcp-aql/policies/ToolClassification.js +8 -1
  23. package/dist/index.js +53 -3
  24. package/dist/security/InputNormalizer.d.ts +4 -6
  25. package/dist/security/InputNormalizer.d.ts.map +1 -1
  26. package/dist/security/InputNormalizer.js +10 -16
  27. package/dist/security/audit/config/suppressions.d.ts.map +1 -1
  28. package/dist/security/audit/config/suppressions.js +26 -1
  29. package/dist/security/constants.d.ts +7 -0
  30. package/dist/security/constants.d.ts.map +1 -1
  31. package/dist/security/constants.js +10 -1
  32. package/dist/security/contentValidator.d.ts.map +1 -1
  33. package/dist/security/contentValidator.js +14 -6
  34. package/dist/security/encryption/PatternEncryptor.d.ts.map +1 -1
  35. package/dist/security/encryption/PatternEncryptor.js +18 -10
  36. package/dist/security/securityMonitor.d.ts +1 -1
  37. package/dist/security/securityMonitor.d.ts.map +1 -1
  38. package/dist/security/securityMonitor.js +1 -1
  39. package/dist/security/tokenManager.d.ts +18 -2
  40. package/dist/security/tokenManager.d.ts.map +1 -1
  41. package/dist/security/tokenManager.js +47 -15
  42. package/dist/security/validators/unicodeValidator.d.ts +4 -5
  43. package/dist/security/validators/unicodeValidator.d.ts.map +1 -1
  44. package/dist/security/validators/unicodeValidator.js +19 -20
  45. package/dist/services/VerificationNotifier.d.ts.map +1 -1
  46. package/dist/services/VerificationNotifier.js +15 -13
  47. package/dist/services/validation/GenericElementValidator.js +5 -5
  48. package/dist/web/console/IngestRoutes.d.ts +14 -2
  49. package/dist/web/console/IngestRoutes.d.ts.map +1 -1
  50. package/dist/web/console/IngestRoutes.js +69 -5
  51. package/dist/web/console/LeaderElection.d.ts +37 -3
  52. package/dist/web/console/LeaderElection.d.ts.map +1 -1
  53. package/dist/web/console/LeaderElection.js +67 -7
  54. package/dist/web/console/LeaderForwardingSink.d.ts +19 -3
  55. package/dist/web/console/LeaderForwardingSink.d.ts.map +1 -1
  56. package/dist/web/console/LeaderForwardingSink.js +44 -9
  57. package/dist/web/console/PromotionManager.d.ts +29 -0
  58. package/dist/web/console/PromotionManager.d.ts.map +1 -0
  59. package/dist/web/console/PromotionManager.js +94 -0
  60. package/dist/web/console/SessionNames.d.ts +7 -0
  61. package/dist/web/console/SessionNames.d.ts.map +1 -1
  62. package/dist/web/console/SessionNames.js +10 -1
  63. package/dist/web/console/UnifiedConsole.d.ts +26 -1
  64. package/dist/web/console/UnifiedConsole.d.ts.map +1 -1
  65. package/dist/web/console/UnifiedConsole.js +143 -20
  66. package/dist/web/portDiscovery.d.ts +4 -3
  67. package/dist/web/portDiscovery.d.ts.map +1 -1
  68. package/dist/web/portDiscovery.js +7 -5
  69. package/dist/web/public/app.js +35 -18
  70. package/dist/web/public/consoleAuth.js +152 -0
  71. package/dist/web/public/index.html +243 -9
  72. package/dist/web/public/logs.js +1 -1
  73. package/dist/web/public/metrics.js +3 -3
  74. package/dist/web/public/permissions.js +1 -1
  75. package/dist/web/public/security.css +396 -0
  76. package/dist/web/public/security.js +393 -0
  77. package/dist/web/public/sessions.css +54 -4
  78. package/dist/web/public/sessions.js +46 -6
  79. package/dist/web/public/setup.css +439 -0
  80. package/dist/web/public/setup.js +490 -18
  81. package/dist/web/public/styles.css +10 -0
  82. package/dist/web/routes/permissionRoutes.d.ts.map +1 -1
  83. package/dist/web/routes/permissionRoutes.js +8 -3
  84. package/dist/web/routes/setupRoutes.d.ts +4 -0
  85. package/dist/web/routes/setupRoutes.d.ts.map +1 -1
  86. package/dist/web/routes/setupRoutes.js +418 -7
  87. package/dist/web/routes.d.ts.map +1 -1
  88. package/dist/web/routes.js +9 -5
  89. package/dist/web/server.d.ts +49 -3
  90. package/dist/web/server.d.ts.map +1 -1
  91. package/dist/web/server.js +282 -82
  92. package/package.json +11 -2
  93. package/server.json +2 -2
@@ -34,6 +34,15 @@ export const SECURITY_LIMITS = {
34
34
  // while blocking exponential expansion attacks that typically start at 10×+
35
35
  YAML_BOMB_AMPLIFICATION_THRESHOLD: 5
36
36
  };
37
+ /**
38
+ * Escalate severity level — higher severity takes precedence.
39
+ * Extracted from UnicodeValidator and InputNormalizer to eliminate duplication (#1782-7).
40
+ */
41
+ export function escalateSeverity(current, newSeverity) {
42
+ const levels = { low: 1, medium: 2, high: 3, critical: 4 };
43
+ const currentLevel = current ? levels[current] : 0;
44
+ return levels[newSeverity] > currentLevel ? newSeverity : (current || 'low');
45
+ }
37
46
  // Input validation patterns
38
47
  export const VALIDATION_PATTERNS = {
39
48
  SAFE_FILENAME: /^[a-zA-Z0-9][a-zA-Z0-9\-_.]{0,250}[a-zA-Z0-9]$/,
@@ -108,4 +117,4 @@ export const PATTERN_DESCRIPTIONS = {
108
117
  charTest: /^[^\s@]$/,
109
118
  },
110
119
  };
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlY3VyaXR5L2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGtDQUFrQztBQUNsQyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUc7SUFDN0Isc0JBQXNCLEVBQUUsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLEVBQUcsNEJBQTRCO0lBQ3RFLG1CQUFtQixFQUFFLEdBQUcsRUFBbUIsc0JBQXNCO0lBQ2pFLGNBQWMsRUFBRSxFQUFFLEVBQXdCLGdDQUFnQztJQUMxRSxrQkFBa0IsRUFBRSxNQUFNLEVBQWdCLHdEQUF3RDtJQUNsRyxlQUFlLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBZ0IscUNBQXFDO0lBQy9FLHlCQUF5QixFQUFFLElBQUksRUFBVyw2Q0FBNkM7SUFDdkYsYUFBYSxFQUFFLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxFQUFXLHNCQUFzQjtJQUMvRCxtQkFBbUIsRUFBRSxHQUFHLEVBQWtCLDBCQUEwQjtJQUNwRSxvQkFBb0IsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFVLGtCQUFrQjtJQUMzRCxZQUFZLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQWMscUJBQXFCO0lBQzlELGtCQUFrQixFQUFFLEVBQUUsRUFBb0IsK0JBQStCO0lBQ3pFLG9CQUFvQixFQUFFLEVBQUUsRUFBa0IscURBQXFEO0lBRS9GLCtFQUErRTtJQUMvRSxvRkFBb0Y7SUFDcEYsZUFBZSxFQUFFLEdBQUcsRUFBc0IscUJBQXFCO0lBQy9ELHNCQUFzQixFQUFFLEdBQUcsRUFBZSw0QkFBNEI7SUFDdEUscUJBQXFCLEVBQUUsRUFBRSxFQUFpQixzREFBc0Q7SUFDaEcsY0FBYyxFQUFFLEVBQUUsRUFBd0IsbUNBQW1DO0lBQzdFLHNCQUFzQixFQUFFLElBQUksRUFBYyxrQ0FBa0M7SUFFNUUsc0VBQXNFO0lBQ3RFLHNGQUFzRjtJQUN0Riw4RUFBOEU7SUFDOUUsb0ZBQW9GO0lBQ3BGLHNCQUFzQixFQUFFLEtBQUssRUFBYSwrQ0FBK0M7SUFFekYscURBQXFEO0lBQ3JELHNEQUFzRDtJQUN0RCxpR0FBaUc7SUFDakcsb0ZBQW9GO0lBQ3BGLDRFQUE0RTtJQUM1RSxpQ0FBaUMsRUFBRSxDQUFDO0NBQ3JDLENBQUM7QUFFRiw0QkFBNEI7QUFDNUIsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUc7SUFDakMsYUFBYSxFQUFFLGdEQUFnRDtJQUMvRCxTQUFTLEVBQUUsNkJBQTZCO0lBQ3hDLGFBQWEsRUFBRSwrQ0FBK0M7SUFDOUQsYUFBYSxFQUFFLGdDQUFnQztJQUMvQyxVQUFVLEVBQUUsNENBQTRDLEVBQUcsNEJBQTRCO0lBRXZGLGlFQUFpRTtJQUNqRSxrRkFBa0Y7SUFFbEYsOEZBQThGO0lBQzlGLGlFQUFpRTtJQUNqRSxTQUFTLEVBQUUsd0JBQXdCO0lBRW5DLDREQUE0RDtJQUM1RCxzRUFBc0U7SUFDdEUscUVBQXFFO0lBQ3JFLGdFQUFnRTtJQUNoRSxzREFBc0Q7SUFDdEQseURBQXlEO0lBQ3pELGdCQUFnQixFQUFFLDRDQUE0QztJQUU5RCwyRUFBMkU7SUFDM0Usd0VBQXdFO0lBQ3hFLFlBQVksRUFBRSxXQUFXO0lBRXpCLCtHQUErRztJQUMvRyxvQkFBb0IsRUFBRSxvQkFBb0I7Q0FDM0MsQ0FBQztBQUVGOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FJNUI7SUFDSCxTQUFTLEVBQUU7UUFDVCxPQUFPLEVBQUUsc0RBQXNEO1FBQy9ELFFBQVEsRUFBRSx1QkFBdUI7S0FDbEM7SUFDRCxnQkFBZ0IsRUFBRTtRQUNoQixPQUFPLEVBQUUsMkRBQTJEO1FBQ3BFLFFBQVEsRUFBRSwyQ0FBMkM7S0FDdEQ7SUFDRCxZQUFZLEVBQUU7UUFDWixPQUFPLEVBQUUsZ0JBQWdCO1FBQ3pCLFFBQVEsRUFBRSxVQUFVO0tBQ3JCO0lBQ0Qsb0JBQW9CLEVBQUU7UUFDcEIsT0FBTyxFQUFFLDhDQUE4QztRQUN2RCxRQUFRLEVBQUUsbUJBQW1CO0tBQzlCO0lBQ0QsYUFBYSxFQUFFO1FBQ2IsT0FBTyxFQUFFLDhDQUE4QztRQUN2RCxRQUFRLEVBQUUsbUJBQW1CO1FBQzdCLFVBQVUsRUFBRSxzREFBc0Q7S0FDbkU7SUFDRCxTQUFTLEVBQUU7UUFDVCxPQUFPLEVBQUUsdUVBQXVFO1FBQ2hGLFFBQVEsRUFBRSxzQkFBc0I7S0FDakM7SUFDRCxhQUFhLEVBQUU7UUFDYixPQUFPLEVBQUUsOENBQThDO1FBQ3ZELFFBQVEsRUFBRSxtQkFBbUI7UUFDN0IsVUFBVSxFQUFFLG1EQUFtRDtLQUNoRTtJQUNELGFBQWEsRUFBRTtRQUNiLE9BQU8sRUFBRSx3Q0FBd0M7UUFDakQsUUFBUSxFQUFFLGtCQUFrQjtRQUM1QixVQUFVLEVBQUUseUNBQXlDO0tBQ3REO0lBQ0QsVUFBVSxFQUFFO1FBQ1YsT0FBTyxFQUFFLGlEQUFpRDtRQUMxRCxRQUFRLEVBQUUsVUFBVTtLQUNyQjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlY3VyaXR5LXJlbGF0ZWQgY29uc3RhbnRzIGFuZCBsaW1pdHNcbiAqL1xuXG4vLyBTZWN1cml0eSBhbmQgcGVyZm9ybWFuY2UgbGltaXRzXG5leHBvcnQgY29uc3QgU0VDVVJJVFlfTElNSVRTID0ge1xuICBNQVhfUEVSU09OQV9TSVpFX0JZVEVTOiAxMDI0ICogMTAyNCAqIDIsICAvLyAyTUIgbWF4IHBlcnNvbmEgZmlsZSBzaXplXG4gIE1BWF9GSUxFTkFNRV9MRU5HVEg6IDI1NSwgICAgICAgICAgICAgICAgICAvLyBNYXggZmlsZW5hbWUgbGVuZ3RoXG4gIE1BWF9QQVRIX0RFUFRIOiAxMCwgICAgICAgICAgICAgICAgICAgICAgIC8vIE1heCBkaXJlY3RvcnkgZGVwdGggZm9yIHBhdGhzXG4gIE1BWF9DT05URU5UX0xFTkdUSDogNTAwMDAwLCAgICAgICAgICAgICAgIC8vIE1heCBlbGVtZW50IGNvbnRlbnQgbGVuZ3RoICg1MDBLQiwgfjEtNW1zIHJlZ2V4IHNjYW4pXG4gIE1BWF9ZQU1MX0xFTkdUSDogNjQgKiAxMDI0LCAgICAgICAgICAgICAgIC8vIE1heCBZQU1MIGZyb250bWF0dGVyIGxlbmd0aCAoNjRLQilcbiAgTUFYX01FVEFEQVRBX0ZJRUxEX0xFTkdUSDogMTAyNCwgICAgICAgICAgLy8gTWF4IGluZGl2aWR1YWwgbWV0YWRhdGEgZmllbGQgbGVuZ3RoICgxS0IpXG4gIE1BWF9GSUxFX1NJWkU6IDEwMjQgKiAxMDI0ICogMiwgICAgICAgICAgLy8gTWF4IGZpbGUgc2l6ZSAoMk1CKVxuICBSQVRFX0xJTUlUX1JFUVVFU1RTOiAxMDAsICAgICAgICAgICAgICAgICAvLyBNYXggcmVxdWVzdHMgcGVyIHdpbmRvd1xuICBSQVRFX0xJTUlUX1dJTkRPV19NUzogNjAgKiAxMDAwLCAgICAgICAgIC8vIDEgbWludXRlIHdpbmRvd1xuICBDQUNIRV9UVExfTVM6IDUgKiA2MCAqIDEwMDAsICAgICAgICAgICAgIC8vIDUgbWludXRlIGNhY2hlIFRUTFxuICBNQVhfU0VBUkNIX1JFU1VMVFM6IDUwLCAgICAgICAgICAgICAgICAgICAvLyBNYXggc2VhcmNoIHJlc3VsdHMgdG8gcmV0dXJuXG4gIE1BWF9CQVRDSF9PUEVSQVRJT05TOiA1MCwgICAgICAgICAgICAgICAgIC8vIE1heCBvcGVyYXRpb25zIHBlciBiYXRjaCByZXF1ZXN0IChJc3N1ZSAjMjIxLyM1NDMpXG5cbiAgLy8gRmllbGQtbGV2ZWwgdmFsaWRhdGlvbiBsaW1pdHMg4oCUIHVzZWQgYWNyb3NzIGVsZW1lbnQgbWFuYWdlcnMgYW5kIHZhbGlkYXRvcnMuXG4gIC8vIENlbnRyYWxpemVkIGhlcmUgc28gYSBzaW5nbGUgY2hhbmdlIGFwcGxpZXMgZXZlcnl3aGVyZSBhbmQgZ3JlcCBmaW5kcyBhbGwgdXNhZ2VzLlxuICBNQVhfTkFNRV9MRU5HVEg6IDEwMCwgICAgICAgICAgICAgICAgICAgICAvLyBFbGVtZW50IG5hbWUgZmllbGRcbiAgTUFYX0RFU0NSSVBUSU9OX0xFTkdUSDogNTAwLCAgICAgICAgICAgICAgLy8gRWxlbWVudCBkZXNjcmlwdGlvbiBmaWVsZFxuICBNQVhfRU5VTV9GSUVMRF9MRU5HVEg6IDIwLCAgICAgICAgICAgICAgICAvLyBTaG9ydCBlbnVtLWxpa2UgZmllbGRzIChzdHJhdGVneSwgcm9sZSwgYWN0aXZhdGlvbilcbiAgTUFYX1RBR19MRU5HVEg6IDUwLCAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5kaXZpZHVhbCB0YWcgLyBjYXRlZ29yeSB2YWx1ZXNcbiAgTUFYX0NPTU1BTkRfQVJHX0xFTkdUSDogMTAwMCwgICAgICAgICAgICAgLy8gQ0xJIGNvbW1hbmQgYXJndW1lbnQgdmFsaWRhdGlvblxuXG4gIC8vIFJlZ2V4IHZhbGlkYXRpb24g4oCUIGNvbnRlbnQgbGVuZ3RoIGNhcHMgcGVyIHBhdHRlcm4gY29tcGxleGl0eSB0aWVyLlxuICAvLyBUaGVzZSBhcmUgdGhlIGRlZmF1bHRzIHVzZWQgYnkgUmVnZXhWYWxpZGF0b3Igd2hlbiBubyBleHBsaWNpdCBtYXhMZW5ndGggaXMgcGFzc2VkLlxuICAvLyBMb3cvbWVkaXVtIGFyZSBzYWZlIGF0IE1BWF9DT05URU5UX0xFTkdUSCBiZWNhdXNlIHRoZXkncmUgTyhuKSBsaW5lYXIgdGltZS5cbiAgLy8gSGlnaC1jb21wbGV4aXR5IHBhdHRlcm5zIChuZXN0ZWQgcXVhbnRpZmllcnMsIFJlRG9TIHJpc2spIGFyZSBoYXJkLWNhcHBlZCBhdCAxS0IuXG4gIE1BWF9SRUdFWF9JTlBVVF9MRU5HVEg6IDEwMDAwLCAgICAgICAgICAgIC8vIFNhZmVSZWdleCBkZWZhdWx0IGZvciB1c2VyLXN1cHBsaWVkIHBhdHRlcm5zXG5cbiAgLy8gWUFNTCBib21iIGRldGVjdGlvbiB0aHJlc2hvbGQgKFNFQ1VSSVRZIEZJWCAjMTI5OClcbiAgLy8gTWF4aW11bSBhbGxvd2VkIGFsaWFzLXRvLWFuY2hvciBhbXBsaWZpY2F0aW9uIHJhdGlvXG4gIC8vIFNldCB0byA1OjEgLSBiYWxhbmNlcyBzZWN1cml0eSAoZWFybHkgRG9TIGRldGVjdGlvbikgd2l0aCB1c2FiaWxpdHkgKGxlZ2l0aW1hdGUgWUFNTCBwYXR0ZXJucylcbiAgLy8gUmF0aW9uYWxlOiBNb3N0IGxlZ2l0aW1hdGUgWUFNTCB1c2VzIOKJpDPDlyBhbXBsaWZpY2F0aW9uOyA1w5cgcHJvdmlkZXMgc2FmZXR5IG1hcmdpblxuICAvLyB3aGlsZSBibG9ja2luZyBleHBvbmVudGlhbCBleHBhbnNpb24gYXR0YWNrcyB0aGF0IHR5cGljYWxseSBzdGFydCBhdCAxMMOXK1xuICBZQU1MX0JPTUJfQU1QTElGSUNBVElPTl9USFJFU0hPTEQ6IDVcbn07XG5cbi8vIElucHV0IHZhbGlkYXRpb24gcGF0dGVybnNcbmV4cG9ydCBjb25zdCBWQUxJREFUSU9OX1BBVFRFUk5TID0ge1xuICBTQUZFX0ZJTEVOQU1FOiAvXlthLXpBLVowLTldW2EtekEtWjAtOVxcLV8uXXswLDI1MH1bYS16QS1aMC05XSQvLFxuICBTQUZFX1BBVEg6IC9eW2EtekEtWjAtOTovXFwtXy5+XXsxLDUwMH0kLyxcbiAgU0FGRV9VU0VSTkFNRTogL15bYS16QS1aMC05XVthLXpBLVowLTlcXC1fLl17MCwzMH1bYS16QS1aMC05XSQvLFxuICBTQUZFX0NBVEVHT1JZOiAvXlthLXpBLVpdW2EtekEtWjAtOVxcLV9dezAsMjB9JC8sXG4gIFNBRkVfRU1BSUw6IC9eW15cXHNAXXsxLDY0fUBbXlxcc0BdezEsMjUzfVxcLlteXFxzQF17MSw2M30kLywgIC8vIFJGQyA1MzIxIGNvbXBsaWFudCBsaW1pdHNcblxuICAvLyBGaWVsZC1hcHByb3ByaWF0ZSBwYXR0ZXJucyBmb3Igc2FuaXRpemUtdGhlbi12YWxpZGF0ZSBhcHByb2FjaFxuICAvLyBUaGVzZSBwYXR0ZXJucyB2YWxpZGF0ZSBBRlRFUiBzYW5pdGl6YXRpb24sIHNvIHRoZXkgYWxsb3cgbGVnaXRpbWF0ZSBjaGFyYWN0ZXJzXG5cbiAgLy8gRm9yIG5hbWVzOiBhbGxvdyBsZXR0ZXJzIChpbmNsdWRpbmcgYWNjZW50ZWQgTGF0aW4pLCBudW1iZXJzLCBzcGFjZXMsIGFuZCBiYXNpYyBwdW5jdHVhdGlvblxuICAvLyBVc2VzIFVuaWNvZGUgcHJvcGVydHkgZXNjYXBlcyBmb3IgcHJvcGVyIGludGVybmF0aW9uYWwgc3VwcG9ydFxuICBTQUZFX05BTUU6IC9eW1xccHtMfVxccHtOfVxcc1xcLV8uXSskL3UsXG5cbiAgLy8gRm9yIGRlc2NyaXB0aW9uczogYWxsb3cgYnJvYWQgcHVuY3R1YXRpb24gZm9yIHJlYWRhYmlsaXR5XG4gIC8vIEluY2x1ZGVzIGNvbW1vbiBzeW1ib2xzIGZvdW5kIGluIHJlYWwtd29ybGQgcG9ydGZvbGlvIGRlc2NyaXB0aW9uczpcbiAgLy8gIyhDIy9oYXNodGFncykgKyhDKyspICUocGVyY2VudGFnZXMpID0oa2V5PXZhbHVlKSBAKGVtYWlsL2hhbmRsZXMpXG4gIC8vICYoYW5kKSB+KGFwcHJveGltYXRlKSAqKGVtcGhhc2lzKSB8KHNlcGFyYXRvcnMpIHt9KHRlbXBsYXRlcylcbiAgLy8gPD4oYW5nbGUgYnJhY2tldHMpICQoY3VycmVuY3kpIF4oY2FyZXQpIGAoYmFja3RpY2spXG4gIC8vIOKGkuKGlOKGkOKGkeKGkyhhcnJvd3MpIOKck+KclyhjaGVja21hcmtzKSBhbmQgb3RoZXIgVW5pY29kZSBzeW1ib2xzXG4gIFNBRkVfREVTQ1JJUFRJT046IC9eW1xccHtMfVxccHtOfVxccHtQfVxccHtTfVxcc0AjJCVeJiorPX5gfFxcXFxdKyQvdSxcblxuICAvLyBGb3IgY29udGVudDogbW9zdCBwZXJtaXNzaXZlIC0gQ29udGVudFZhbGlkYXRvciBoYW5kbGVzIHNlY3VyaXR5IHRocmVhdHNcbiAgLy8gVGhpcyBhbGxvd3MgZXNzZW50aWFsbHkgYW55dGhpbmcgc2luY2UgY29udGVudCB2YWxpZGF0aW9uIGlzIHNlcGFyYXRlXG4gIFNBRkVfQ09OVEVOVDogL15bXFxzXFxTXSokLyxcblxuICAvLyBGb3IgZmlsZW5hbWVzIGluIGNyZWF0ZSBvcGVyYXRpb25zOiBzdHJpY3QgQVNDSUkgb25seSAoZGlmZmVyZW50IGZyb20gU0FGRV9GSUxFTkFNRSB3aGljaCBoYXMgbGVuZ3RoIGxpbWl0cylcbiAgU0FGRV9GSUxFTkFNRV9DUkVBVEU6IC9eW2EtekEtWjAtOVxcLV8uXSskL1xufTtcblxuLyoqXG4gKiBIdW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbnMgZm9yIGVhY2ggdmFsaWRhdGlvbiBwYXR0ZXJuLlxuICogVXNlZCBieSBWYWxpZGF0aW9uU2VydmljZSB0byBwcm9kdWNlIGFjdGlvbmFibGUgZXJyb3IgbWVzc2FnZXMuXG4gKlxuICogLSBgYWxsb3dlZGA6IHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBjaGFyYWN0ZXIgc2V0XG4gKiAtIGBjaGFyVGVzdGA6IHNpbmdsZS1jaGFyYWN0ZXIgcmVnZXggdG8gaWRlbnRpZnkgd2hpY2ggY2hhcnMgYXJlIGludmFsaWRcbiAqIC0gYHN0cnVjdHVyYWxgIChvcHRpb25hbCk6IGV4dHJhIGNvbnN0cmFpbnQgbm90IGNhcHR1cmVkIGJ5IGNoYXJUZXN0XG4gKi9cbmV4cG9ydCBjb25zdCBQQVRURVJOX0RFU0NSSVBUSU9OUzogUmVjb3JkPHN0cmluZywge1xuICBhbGxvd2VkOiBzdHJpbmc7XG4gIGNoYXJUZXN0OiBSZWdFeHA7XG4gIHN0cnVjdHVyYWw/OiBzdHJpbmc7XG59PiA9IHtcbiAgU0FGRV9OQU1FOiB7XG4gICAgYWxsb3dlZDogJ2xldHRlcnMsIG51bWJlcnMsIHNwYWNlcywgaHlwaGVucywgdW5kZXJzY29yZXMsIGRvdHMnLFxuICAgIGNoYXJUZXN0OiAvXltcXHB7TH1cXHB7Tn1cXHNcXC1fLl0kL3UsXG4gIH0sXG4gIFNBRkVfREVTQ1JJUFRJT046IHtcbiAgICBhbGxvd2VkOiAnbGV0dGVycywgbnVtYmVycywgc3ltYm9scywgc3BhY2VzLCBhbmQgY29tbW9uIHB1bmN0dWF0aW9uJyxcbiAgICBjaGFyVGVzdDogL15bXFxwe0x9XFxwe059XFxwe1B9XFxwe1N9XFxzQCMkJV4mKis9fmB8XFxcXF0kL3UsXG4gIH0sXG4gIFNBRkVfQ09OVEVOVDoge1xuICAgIGFsbG93ZWQ6ICdhbnkgY2hhcmFjdGVycycsXG4gICAgY2hhclRlc3Q6IC9eW1xcc1xcU10kLyxcbiAgfSxcbiAgU0FGRV9GSUxFTkFNRV9DUkVBVEU6IHtcbiAgICBhbGxvd2VkOiAnbGV0dGVycywgbnVtYmVycywgaHlwaGVucywgdW5kZXJzY29yZXMsIGRvdHMnLFxuICAgIGNoYXJUZXN0OiAvXlthLXpBLVowLTlcXC1fLl0kLyxcbiAgfSxcbiAgU0FGRV9GSUxFTkFNRToge1xuICAgIGFsbG93ZWQ6ICdsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW5zLCB1bmRlcnNjb3JlcywgZG90cycsXG4gICAgY2hhclRlc3Q6IC9eW2EtekEtWjAtOVxcLV8uXSQvLFxuICAgIHN0cnVjdHVyYWw6ICdtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aCBhbHBoYW51bWVyaWMgKG1heCAyNTIgY2hhcnMpJyxcbiAgfSxcbiAgU0FGRV9QQVRIOiB7XG4gICAgYWxsb3dlZDogJ2xldHRlcnMsIG51bWJlcnMsIGNvbG9ucywgc2xhc2hlcywgaHlwaGVucywgdW5kZXJzY29yZXMsIGRvdHMsIHRpbGRlcycsXG4gICAgY2hhclRlc3Q6IC9eW2EtekEtWjAtOTovXFwtXy5+XSQvLFxuICB9LFxuICBTQUZFX1VTRVJOQU1FOiB7XG4gICAgYWxsb3dlZDogJ2xldHRlcnMsIG51bWJlcnMsIGh5cGhlbnMsIHVuZGVyc2NvcmVzLCBkb3RzJyxcbiAgICBjaGFyVGVzdDogL15bYS16QS1aMC05XFwtXy5dJC8sXG4gICAgc3RydWN0dXJhbDogJ211c3Qgc3RhcnQgYW5kIGVuZCB3aXRoIGFscGhhbnVtZXJpYyAoMy0zMiBjaGFycyknLFxuICB9LFxuICBTQUZFX0NBVEVHT1JZOiB7XG4gICAgYWxsb3dlZDogJ2xldHRlcnMsIG51bWJlcnMsIGh5cGhlbnMsIHVuZGVyc2NvcmVzJyxcbiAgICBjaGFyVGVzdDogL15bYS16QS1aMC05XFwtX10kLyxcbiAgICBzdHJ1Y3R1cmFsOiAnbXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIChtYXggMjEgY2hhcnMpJyxcbiAgfSxcbiAgU0FGRV9FTUFJTDoge1xuICAgIGFsbG93ZWQ6ICdsZXR0ZXJzLCBudW1iZXJzLCBkb3RzLCBoeXBoZW5zLCB1bmRlcnNjb3JlcywgQCcsXG4gICAgY2hhclRlc3Q6IC9eW15cXHNAXSQvLFxuICB9LFxufTtcbiJdfQ==
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlY3VyaXR5L2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGtDQUFrQztBQUNsQyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUc7SUFDN0Isc0JBQXNCLEVBQUUsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLEVBQUcsNEJBQTRCO0lBQ3RFLG1CQUFtQixFQUFFLEdBQUcsRUFBbUIsc0JBQXNCO0lBQ2pFLGNBQWMsRUFBRSxFQUFFLEVBQXdCLGdDQUFnQztJQUMxRSxrQkFBa0IsRUFBRSxNQUFNLEVBQWdCLHdEQUF3RDtJQUNsRyxlQUFlLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBZ0IscUNBQXFDO0lBQy9FLHlCQUF5QixFQUFFLElBQUksRUFBVyw2Q0FBNkM7SUFDdkYsYUFBYSxFQUFFLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxFQUFXLHNCQUFzQjtJQUMvRCxtQkFBbUIsRUFBRSxHQUFHLEVBQWtCLDBCQUEwQjtJQUNwRSxvQkFBb0IsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFVLGtCQUFrQjtJQUMzRCxZQUFZLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQWMscUJBQXFCO0lBQzlELGtCQUFrQixFQUFFLEVBQUUsRUFBb0IsK0JBQStCO0lBQ3pFLG9CQUFvQixFQUFFLEVBQUUsRUFBa0IscURBQXFEO0lBRS9GLCtFQUErRTtJQUMvRSxvRkFBb0Y7SUFDcEYsZUFBZSxFQUFFLEdBQUcsRUFBc0IscUJBQXFCO0lBQy9ELHNCQUFzQixFQUFFLEdBQUcsRUFBZSw0QkFBNEI7SUFDdEUscUJBQXFCLEVBQUUsRUFBRSxFQUFpQixzREFBc0Q7SUFDaEcsY0FBYyxFQUFFLEVBQUUsRUFBd0IsbUNBQW1DO0lBQzdFLHNCQUFzQixFQUFFLElBQUksRUFBYyxrQ0FBa0M7SUFFNUUsc0VBQXNFO0lBQ3RFLHNGQUFzRjtJQUN0Riw4RUFBOEU7SUFDOUUsb0ZBQW9GO0lBQ3BGLHNCQUFzQixFQUFFLEtBQUssRUFBYSwrQ0FBK0M7SUFFekYscURBQXFEO0lBQ3JELHNEQUFzRDtJQUN0RCxpR0FBaUc7SUFDakcsb0ZBQW9GO0lBQ3BGLDRFQUE0RTtJQUM1RSxpQ0FBaUMsRUFBRSxDQUFDO0NBQ3JDLENBQUM7QUFLRjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLE9BQTBDLEVBQzFDLFdBQWtDO0lBRWxDLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQzNELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkQsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQy9FLENBQUM7QUFFRCw0QkFBNEI7QUFDNUIsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUc7SUFDakMsYUFBYSxFQUFFLGdEQUFnRDtJQUMvRCxTQUFTLEVBQUUsNkJBQTZCO0lBQ3hDLGFBQWEsRUFBRSwrQ0FBK0M7SUFDOUQsYUFBYSxFQUFFLGdDQUFnQztJQUMvQyxVQUFVLEVBQUUsNENBQTRDLEVBQUcsNEJBQTRCO0lBRXZGLGlFQUFpRTtJQUNqRSxrRkFBa0Y7SUFFbEYsOEZBQThGO0lBQzlGLGlFQUFpRTtJQUNqRSxTQUFTLEVBQUUsd0JBQXdCO0lBRW5DLDREQUE0RDtJQUM1RCxzRUFBc0U7SUFDdEUscUVBQXFFO0lBQ3JFLGdFQUFnRTtJQUNoRSxzREFBc0Q7SUFDdEQseURBQXlEO0lBQ3pELGdCQUFnQixFQUFFLDRDQUE0QztJQUU5RCwyRUFBMkU7SUFDM0Usd0VBQXdFO0lBQ3hFLFlBQVksRUFBRSxXQUFXO0lBRXpCLCtHQUErRztJQUMvRyxvQkFBb0IsRUFBRSxvQkFBb0I7Q0FDM0MsQ0FBQztBQUVGOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FJNUI7SUFDSCxTQUFTLEVBQUU7UUFDVCxPQUFPLEVBQUUsc0RBQXNEO1FBQy9ELFFBQVEsRUFBRSx1QkFBdUI7S0FDbEM7SUFDRCxnQkFBZ0IsRUFBRTtRQUNoQixPQUFPLEVBQUUsMkRBQTJEO1FBQ3BFLFFBQVEsRUFBRSwyQ0FBMkM7S0FDdEQ7SUFDRCxZQUFZLEVBQUU7UUFDWixPQUFPLEVBQUUsZ0JBQWdCO1FBQ3pCLFFBQVEsRUFBRSxVQUFVO0tBQ3JCO0lBQ0Qsb0JBQW9CLEVBQUU7UUFDcEIsT0FBTyxFQUFFLDhDQUE4QztRQUN2RCxRQUFRLEVBQUUsbUJBQW1CO0tBQzlCO0lBQ0QsYUFBYSxFQUFFO1FBQ2IsT0FBTyxFQUFFLDhDQUE4QztRQUN2RCxRQUFRLEVBQUUsbUJBQW1CO1FBQzdCLFVBQVUsRUFBRSxzREFBc0Q7S0FDbkU7SUFDRCxTQUFTLEVBQUU7UUFDVCxPQUFPLEVBQUUsdUVBQXVFO1FBQ2hGLFFBQVEsRUFBRSxzQkFBc0I7S0FDakM7SUFDRCxhQUFhLEVBQUU7UUFDYixPQUFPLEVBQUUsOENBQThDO1FBQ3ZELFFBQVEsRUFBRSxtQkFBbUI7UUFDN0IsVUFBVSxFQUFFLG1EQUFtRDtLQUNoRTtJQUNELGFBQWEsRUFBRTtRQUNiLE9BQU8sRUFBRSx3Q0FBd0M7UUFDakQsUUFBUSxFQUFFLGtCQUFrQjtRQUM1QixVQUFVLEVBQUUseUNBQXlDO0tBQ3REO0lBQ0QsVUFBVSxFQUFFO1FBQ1YsT0FBTyxFQUFFLGlEQUFpRDtRQUMxRCxRQUFRLEVBQUUsVUFBVTtLQUNyQjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlY3VyaXR5LXJlbGF0ZWQgY29uc3RhbnRzIGFuZCBsaW1pdHNcbiAqL1xuXG4vLyBTZWN1cml0eSBhbmQgcGVyZm9ybWFuY2UgbGltaXRzXG5leHBvcnQgY29uc3QgU0VDVVJJVFlfTElNSVRTID0ge1xuICBNQVhfUEVSU09OQV9TSVpFX0JZVEVTOiAxMDI0ICogMTAyNCAqIDIsICAvLyAyTUIgbWF4IHBlcnNvbmEgZmlsZSBzaXplXG4gIE1BWF9GSUxFTkFNRV9MRU5HVEg6IDI1NSwgICAgICAgICAgICAgICAgICAvLyBNYXggZmlsZW5hbWUgbGVuZ3RoXG4gIE1BWF9QQVRIX0RFUFRIOiAxMCwgICAgICAgICAgICAgICAgICAgICAgIC8vIE1heCBkaXJlY3RvcnkgZGVwdGggZm9yIHBhdGhzXG4gIE1BWF9DT05URU5UX0xFTkdUSDogNTAwMDAwLCAgICAgICAgICAgICAgIC8vIE1heCBlbGVtZW50IGNvbnRlbnQgbGVuZ3RoICg1MDBLQiwgfjEtNW1zIHJlZ2V4IHNjYW4pXG4gIE1BWF9ZQU1MX0xFTkdUSDogNjQgKiAxMDI0LCAgICAgICAgICAgICAgIC8vIE1heCBZQU1MIGZyb250bWF0dGVyIGxlbmd0aCAoNjRLQilcbiAgTUFYX01FVEFEQVRBX0ZJRUxEX0xFTkdUSDogMTAyNCwgICAgICAgICAgLy8gTWF4IGluZGl2aWR1YWwgbWV0YWRhdGEgZmllbGQgbGVuZ3RoICgxS0IpXG4gIE1BWF9GSUxFX1NJWkU6IDEwMjQgKiAxMDI0ICogMiwgICAgICAgICAgLy8gTWF4IGZpbGUgc2l6ZSAoMk1CKVxuICBSQVRFX0xJTUlUX1JFUVVFU1RTOiAxMDAsICAgICAgICAgICAgICAgICAvLyBNYXggcmVxdWVzdHMgcGVyIHdpbmRvd1xuICBSQVRFX0xJTUlUX1dJTkRPV19NUzogNjAgKiAxMDAwLCAgICAgICAgIC8vIDEgbWludXRlIHdpbmRvd1xuICBDQUNIRV9UVExfTVM6IDUgKiA2MCAqIDEwMDAsICAgICAgICAgICAgIC8vIDUgbWludXRlIGNhY2hlIFRUTFxuICBNQVhfU0VBUkNIX1JFU1VMVFM6IDUwLCAgICAgICAgICAgICAgICAgICAvLyBNYXggc2VhcmNoIHJlc3VsdHMgdG8gcmV0dXJuXG4gIE1BWF9CQVRDSF9PUEVSQVRJT05TOiA1MCwgICAgICAgICAgICAgICAgIC8vIE1heCBvcGVyYXRpb25zIHBlciBiYXRjaCByZXF1ZXN0IChJc3N1ZSAjMjIxLyM1NDMpXG5cbiAgLy8gRmllbGQtbGV2ZWwgdmFsaWRhdGlvbiBsaW1pdHMg4oCUIHVzZWQgYWNyb3NzIGVsZW1lbnQgbWFuYWdlcnMgYW5kIHZhbGlkYXRvcnMuXG4gIC8vIENlbnRyYWxpemVkIGhlcmUgc28gYSBzaW5nbGUgY2hhbmdlIGFwcGxpZXMgZXZlcnl3aGVyZSBhbmQgZ3JlcCBmaW5kcyBhbGwgdXNhZ2VzLlxuICBNQVhfTkFNRV9MRU5HVEg6IDEwMCwgICAgICAgICAgICAgICAgICAgICAvLyBFbGVtZW50IG5hbWUgZmllbGRcbiAgTUFYX0RFU0NSSVBUSU9OX0xFTkdUSDogNTAwLCAgICAgICAgICAgICAgLy8gRWxlbWVudCBkZXNjcmlwdGlvbiBmaWVsZFxuICBNQVhfRU5VTV9GSUVMRF9MRU5HVEg6IDIwLCAgICAgICAgICAgICAgICAvLyBTaG9ydCBlbnVtLWxpa2UgZmllbGRzIChzdHJhdGVneSwgcm9sZSwgYWN0aXZhdGlvbilcbiAgTUFYX1RBR19MRU5HVEg6IDUwLCAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5kaXZpZHVhbCB0YWcgLyBjYXRlZ29yeSB2YWx1ZXNcbiAgTUFYX0NPTU1BTkRfQVJHX0xFTkdUSDogMTAwMCwgICAgICAgICAgICAgLy8gQ0xJIGNvbW1hbmQgYXJndW1lbnQgdmFsaWRhdGlvblxuXG4gIC8vIFJlZ2V4IHZhbGlkYXRpb24g4oCUIGNvbnRlbnQgbGVuZ3RoIGNhcHMgcGVyIHBhdHRlcm4gY29tcGxleGl0eSB0aWVyLlxuICAvLyBUaGVzZSBhcmUgdGhlIGRlZmF1bHRzIHVzZWQgYnkgUmVnZXhWYWxpZGF0b3Igd2hlbiBubyBleHBsaWNpdCBtYXhMZW5ndGggaXMgcGFzc2VkLlxuICAvLyBMb3cvbWVkaXVtIGFyZSBzYWZlIGF0IE1BWF9DT05URU5UX0xFTkdUSCBiZWNhdXNlIHRoZXkncmUgTyhuKSBsaW5lYXIgdGltZS5cbiAgLy8gSGlnaC1jb21wbGV4aXR5IHBhdHRlcm5zIChuZXN0ZWQgcXVhbnRpZmllcnMsIFJlRG9TIHJpc2spIGFyZSBoYXJkLWNhcHBlZCBhdCAxS0IuXG4gIE1BWF9SRUdFWF9JTlBVVF9MRU5HVEg6IDEwMDAwLCAgICAgICAgICAgIC8vIFNhZmVSZWdleCBkZWZhdWx0IGZvciB1c2VyLXN1cHBsaWVkIHBhdHRlcm5zXG5cbiAgLy8gWUFNTCBib21iIGRldGVjdGlvbiB0aHJlc2hvbGQgKFNFQ1VSSVRZIEZJWCAjMTI5OClcbiAgLy8gTWF4aW11bSBhbGxvd2VkIGFsaWFzLXRvLWFuY2hvciBhbXBsaWZpY2F0aW9uIHJhdGlvXG4gIC8vIFNldCB0byA1OjEgLSBiYWxhbmNlcyBzZWN1cml0eSAoZWFybHkgRG9TIGRldGVjdGlvbikgd2l0aCB1c2FiaWxpdHkgKGxlZ2l0aW1hdGUgWUFNTCBwYXR0ZXJucylcbiAgLy8gUmF0aW9uYWxlOiBNb3N0IGxlZ2l0aW1hdGUgWUFNTCB1c2VzIOKJpDPDlyBhbXBsaWZpY2F0aW9uOyA1w5cgcHJvdmlkZXMgc2FmZXR5IG1hcmdpblxuICAvLyB3aGlsZSBibG9ja2luZyBleHBvbmVudGlhbCBleHBhbnNpb24gYXR0YWNrcyB0aGF0IHR5cGljYWxseSBzdGFydCBhdCAxMMOXK1xuICBZQU1MX0JPTUJfQU1QTElGSUNBVElPTl9USFJFU0hPTEQ6IDVcbn07XG5cbi8qKiBTaGFyZWQgc2V2ZXJpdHkgdHlwZSB1c2VkIGFjcm9zcyBzZWN1cml0eSB2YWxpZGF0b3JzICgjMTc4Mi03KSAqL1xuZXhwb3J0IHR5cGUgU2VjdXJpdHlTZXZlcml0eUxldmVsID0gJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJyB8ICdjcml0aWNhbCc7XG5cbi8qKlxuICogRXNjYWxhdGUgc2V2ZXJpdHkgbGV2ZWwg4oCUIGhpZ2hlciBzZXZlcml0eSB0YWtlcyBwcmVjZWRlbmNlLlxuICogRXh0cmFjdGVkIGZyb20gVW5pY29kZVZhbGlkYXRvciBhbmQgSW5wdXROb3JtYWxpemVyIHRvIGVsaW1pbmF0ZSBkdXBsaWNhdGlvbiAoIzE3ODItNykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhbGF0ZVNldmVyaXR5KFxuICBjdXJyZW50OiBTZWN1cml0eVNldmVyaXR5TGV2ZWwgfCB1bmRlZmluZWQsXG4gIG5ld1NldmVyaXR5OiBTZWN1cml0eVNldmVyaXR5TGV2ZWxcbik6IFNlY3VyaXR5U2V2ZXJpdHlMZXZlbCB7XG4gIGNvbnN0IGxldmVscyA9IHsgbG93OiAxLCBtZWRpdW06IDIsIGhpZ2g6IDMsIGNyaXRpY2FsOiA0IH07XG4gIGNvbnN0IGN1cnJlbnRMZXZlbCA9IGN1cnJlbnQgPyBsZXZlbHNbY3VycmVudF0gOiAwO1xuICByZXR1cm4gbGV2ZWxzW25ld1NldmVyaXR5XSA+IGN1cnJlbnRMZXZlbCA/IG5ld1NldmVyaXR5IDogKGN1cnJlbnQgfHwgJ2xvdycpO1xufVxuXG4vLyBJbnB1dCB2YWxpZGF0aW9uIHBhdHRlcm5zXG5leHBvcnQgY29uc3QgVkFMSURBVElPTl9QQVRURVJOUyA9IHtcbiAgU0FGRV9GSUxFTkFNRTogL15bYS16QS1aMC05XVthLXpBLVowLTlcXC1fLl17MCwyNTB9W2EtekEtWjAtOV0kLyxcbiAgU0FGRV9QQVRIOiAvXlthLXpBLVowLTk6L1xcLV8ufl17MSw1MDB9JC8sXG4gIFNBRkVfVVNFUk5BTUU6IC9eW2EtekEtWjAtOV1bYS16QS1aMC05XFwtXy5dezAsMzB9W2EtekEtWjAtOV0kLyxcbiAgU0FGRV9DQVRFR09SWTogL15bYS16QS1aXVthLXpBLVowLTlcXC1fXXswLDIwfSQvLFxuICBTQUZFX0VNQUlMOiAvXlteXFxzQF17MSw2NH1AW15cXHNAXXsxLDI1M31cXC5bXlxcc0BdezEsNjN9JC8sICAvLyBSRkMgNTMyMSBjb21wbGlhbnQgbGltaXRzXG5cbiAgLy8gRmllbGQtYXBwcm9wcmlhdGUgcGF0dGVybnMgZm9yIHNhbml0aXplLXRoZW4tdmFsaWRhdGUgYXBwcm9hY2hcbiAgLy8gVGhlc2UgcGF0dGVybnMgdmFsaWRhdGUgQUZURVIgc2FuaXRpemF0aW9uLCBzbyB0aGV5IGFsbG93IGxlZ2l0aW1hdGUgY2hhcmFjdGVyc1xuXG4gIC8vIEZvciBuYW1lczogYWxsb3cgbGV0dGVycyAoaW5jbHVkaW5nIGFjY2VudGVkIExhdGluKSwgbnVtYmVycywgc3BhY2VzLCBhbmQgYmFzaWMgcHVuY3R1YXRpb25cbiAgLy8gVXNlcyBVbmljb2RlIHByb3BlcnR5IGVzY2FwZXMgZm9yIHByb3BlciBpbnRlcm5hdGlvbmFsIHN1cHBvcnRcbiAgU0FGRV9OQU1FOiAvXltcXHB7TH1cXHB7Tn1cXHNcXC1fLl0rJC91LFxuXG4gIC8vIEZvciBkZXNjcmlwdGlvbnM6IGFsbG93IGJyb2FkIHB1bmN0dWF0aW9uIGZvciByZWFkYWJpbGl0eVxuICAvLyBJbmNsdWRlcyBjb21tb24gc3ltYm9scyBmb3VuZCBpbiByZWFsLXdvcmxkIHBvcnRmb2xpbyBkZXNjcmlwdGlvbnM6XG4gIC8vICMoQyMvaGFzaHRhZ3MpICsoQysrKSAlKHBlcmNlbnRhZ2VzKSA9KGtleT12YWx1ZSkgQChlbWFpbC9oYW5kbGVzKVxuICAvLyAmKGFuZCkgfihhcHByb3hpbWF0ZSkgKihlbXBoYXNpcykgfChzZXBhcmF0b3JzKSB7fSh0ZW1wbGF0ZXMpXG4gIC8vIDw+KGFuZ2xlIGJyYWNrZXRzKSAkKGN1cnJlbmN5KSBeKGNhcmV0KSBgKGJhY2t0aWNrKVxuICAvLyDihpLihpTihpDihpHihpMoYXJyb3dzKSDinJPinJcoY2hlY2ttYXJrcykgYW5kIG90aGVyIFVuaWNvZGUgc3ltYm9sc1xuICBTQUZFX0RFU0NSSVBUSU9OOiAvXltcXHB7TH1cXHB7Tn1cXHB7UH1cXHB7U31cXHNAIyQlXiYqKz1+YHxcXFxcXSskL3UsXG5cbiAgLy8gRm9yIGNvbnRlbnQ6IG1vc3QgcGVybWlzc2l2ZSAtIENvbnRlbnRWYWxpZGF0b3IgaGFuZGxlcyBzZWN1cml0eSB0aHJlYXRzXG4gIC8vIFRoaXMgYWxsb3dzIGVzc2VudGlhbGx5IGFueXRoaW5nIHNpbmNlIGNvbnRlbnQgdmFsaWRhdGlvbiBpcyBzZXBhcmF0ZVxuICBTQUZFX0NPTlRFTlQ6IC9eW1xcc1xcU10qJC8sXG5cbiAgLy8gRm9yIGZpbGVuYW1lcyBpbiBjcmVhdGUgb3BlcmF0aW9uczogc3RyaWN0IEFTQ0lJIG9ubHkgKGRpZmZlcmVudCBmcm9tIFNBRkVfRklMRU5BTUUgd2hpY2ggaGFzIGxlbmd0aCBsaW1pdHMpXG4gIFNBRkVfRklMRU5BTUVfQ1JFQVRFOiAvXlthLXpBLVowLTlcXC1fLl0rJC9cbn07XG5cbi8qKlxuICogSHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb25zIGZvciBlYWNoIHZhbGlkYXRpb24gcGF0dGVybi5cbiAqIFVzZWQgYnkgVmFsaWRhdGlvblNlcnZpY2UgdG8gcHJvZHVjZSBhY3Rpb25hYmxlIGVycm9yIG1lc3NhZ2VzLlxuICpcbiAqIC0gYGFsbG93ZWRgOiBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgY2hhcmFjdGVyIHNldFxuICogLSBgY2hhclRlc3RgOiBzaW5nbGUtY2hhcmFjdGVyIHJlZ2V4IHRvIGlkZW50aWZ5IHdoaWNoIGNoYXJzIGFyZSBpbnZhbGlkXG4gKiAtIGBzdHJ1Y3R1cmFsYCAob3B0aW9uYWwpOiBleHRyYSBjb25zdHJhaW50IG5vdCBjYXB0dXJlZCBieSBjaGFyVGVzdFxuICovXG5leHBvcnQgY29uc3QgUEFUVEVSTl9ERVNDUklQVElPTlM6IFJlY29yZDxzdHJpbmcsIHtcbiAgYWxsb3dlZDogc3RyaW5nO1xuICBjaGFyVGVzdDogUmVnRXhwO1xuICBzdHJ1Y3R1cmFsPzogc3RyaW5nO1xufT4gPSB7XG4gIFNBRkVfTkFNRToge1xuICAgIGFsbG93ZWQ6ICdsZXR0ZXJzLCBudW1iZXJzLCBzcGFjZXMsIGh5cGhlbnMsIHVuZGVyc2NvcmVzLCBkb3RzJyxcbiAgICBjaGFyVGVzdDogL15bXFxwe0x9XFxwe059XFxzXFwtXy5dJC91LFxuICB9LFxuICBTQUZFX0RFU0NSSVBUSU9OOiB7XG4gICAgYWxsb3dlZDogJ2xldHRlcnMsIG51bWJlcnMsIHN5bWJvbHMsIHNwYWNlcywgYW5kIGNvbW1vbiBwdW5jdHVhdGlvbicsXG4gICAgY2hhclRlc3Q6IC9eW1xccHtMfVxccHtOfVxccHtQfVxccHtTfVxcc0AjJCVeJiorPX5gfFxcXFxdJC91LFxuICB9LFxuICBTQUZFX0NPTlRFTlQ6IHtcbiAgICBhbGxvd2VkOiAnYW55IGNoYXJhY3RlcnMnLFxuICAgIGNoYXJUZXN0OiAvXltcXHNcXFNdJC8sXG4gIH0sXG4gIFNBRkVfRklMRU5BTUVfQ1JFQVRFOiB7XG4gICAgYWxsb3dlZDogJ2xldHRlcnMsIG51bWJlcnMsIGh5cGhlbnMsIHVuZGVyc2NvcmVzLCBkb3RzJyxcbiAgICBjaGFyVGVzdDogL15bYS16QS1aMC05XFwtXy5dJC8sXG4gIH0sXG4gIFNBRkVfRklMRU5BTUU6IHtcbiAgICBhbGxvd2VkOiAnbGV0dGVycywgbnVtYmVycywgaHlwaGVucywgdW5kZXJzY29yZXMsIGRvdHMnLFxuICAgIGNoYXJUZXN0OiAvXlthLXpBLVowLTlcXC1fLl0kLyxcbiAgICBzdHJ1Y3R1cmFsOiAnbXVzdCBzdGFydCBhbmQgZW5kIHdpdGggYWxwaGFudW1lcmljIChtYXggMjUyIGNoYXJzKScsXG4gIH0sXG4gIFNBRkVfUEFUSDoge1xuICAgIGFsbG93ZWQ6ICdsZXR0ZXJzLCBudW1iZXJzLCBjb2xvbnMsIHNsYXNoZXMsIGh5cGhlbnMsIHVuZGVyc2NvcmVzLCBkb3RzLCB0aWxkZXMnLFxuICAgIGNoYXJUZXN0OiAvXlthLXpBLVowLTk6L1xcLV8ufl0kLyxcbiAgfSxcbiAgU0FGRV9VU0VSTkFNRToge1xuICAgIGFsbG93ZWQ6ICdsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW5zLCB1bmRlcnNjb3JlcywgZG90cycsXG4gICAgY2hhclRlc3Q6IC9eW2EtekEtWjAtOVxcLV8uXSQvLFxuICAgIHN0cnVjdHVyYWw6ICdtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aCBhbHBoYW51bWVyaWMgKDMtMzIgY2hhcnMpJyxcbiAgfSxcbiAgU0FGRV9DQVRFR09SWToge1xuICAgIGFsbG93ZWQ6ICdsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW5zLCB1bmRlcnNjb3JlcycsXG4gICAgY2hhclRlc3Q6IC9eW2EtekEtWjAtOVxcLV9dJC8sXG4gICAgc3RydWN0dXJhbDogJ211c3Qgc3RhcnQgd2l0aCBhIGxldHRlciAobWF4IDIxIGNoYXJzKScsXG4gIH0sXG4gIFNBRkVfRU1BSUw6IHtcbiAgICBhbGxvd2VkOiAnbGV0dGVycywgbnVtYmVycywgZG90cywgaHlwaGVucywgdW5kZXJzY29yZXMsIEAnLFxuICAgIGNoYXJUZXN0OiAvXlteXFxzQF0kLyxcbiAgfSxcbn07XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"contentValidator.d.ts","sourceRoot":"","sources":["../../src/security/contentValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAG1E,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAEtE,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAED,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;CACxE;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAsC;WAEzD,0BAA0B,CAAC,QAAQ,EAAE,MAAM,iBAAiB,GAAG,SAAS,GAAG,IAAI;IAI7F,OAAO,CAAC,MAAM,CAAC,YAAY;IAO3B;;;;;;;;;;;OAWG;IAEH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAoExC;IAKF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAcxC;IAEF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAkF7C;IAEF;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAOzC;IAEH;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAK5C;IAEH;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAc1C;IAEH;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAI1C;IAEH;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAuCtC;;;;;;;;;OASG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAgErC;;;;;;;;OAQG;IACH,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,uBAA4B,GAAG,uBAAuB;IAiE3G;;;OAGG;IACH,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IA0JxD;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,GAAG,uBAAuB;IAuC/D;;OAEG;IACH,MAAM,CAAC,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAkCvD"}
1
+ {"version":3,"file":"contentValidator.d.ts","sourceRoot":"","sources":["../../src/security/contentValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAG1E,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAEtE,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAED,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;CACxE;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAsC;WAEzD,0BAA0B,CAAC,QAAQ,EAAE,MAAM,iBAAiB,GAAG,SAAS,GAAG,IAAI;IAI7F,OAAO,CAAC,MAAM,CAAC,YAAY;IAO3B;;;;;;;;;;;OAWG;IAIH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAwExC;IAKF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAcxC;IAEF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAkF7C;IAEF;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAOzC;IAEH;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAK5C;IAEH;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAc1C;IAEH;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAI1C;IAEH;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAuCtC;;;;;;;;;OASG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAiErC;;;;;;;;OAQG;IACH,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,uBAA4B,GAAG,uBAAuB;IAiE3G;;;OAGG;IACH,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IA0JxD;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,GAAG,uBAAuB;IAuC/D;;OAEG;IACH,MAAM,CAAC,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAkCvD"}
@@ -8,6 +8,7 @@
8
8
  */
9
9
  import { SecurityError } from './errors.js';
10
10
  import { SecurityMonitor } from './securityMonitor.js';
11
+ import { logger } from '../utils/logger.js';
11
12
  import { RegexValidator } from './regexValidator.js';
12
13
  import { SECURITY_LIMITS } from './constants.js';
13
14
  import { UnicodeValidator } from './validators/unicodeValidator.js';
@@ -36,7 +37,9 @@ export class ContentValidator {
36
37
  * The patterns below represent known attack vectors from security research
37
38
  * and real-world exploit attempts against AI systems.
38
39
  */
39
- // Prompt injection patterns that could compromise AI assistants
40
+ // Prompt injection patterns that could compromise AI assistants.
41
+ // MAINTENANCE: Review periodically for false positives (run integration tests in
42
+ // tests/integration/security-audit-batch-a.integration.test.ts) and new attack vectors.
40
43
  static INJECTION_PATTERNS = [
41
44
  // System prompt override attempts
42
45
  { pattern: /\[SYSTEM:\s*.*?\]/gi, severity: 'critical', description: 'System prompt override' },
@@ -51,16 +54,20 @@ export class ContentValidator {
51
54
  { pattern: /forget\s+(all\s+)?previous\s+instructions/gi, severity: 'critical', description: 'Instruction override' },
52
55
  { pattern: /forget\s+your\s+training/gi, severity: 'critical', description: 'Instruction override' },
53
56
  { pattern: /override\s+your\s+programming/gi, severity: 'critical', description: 'Instruction override' },
54
- { pattern: /you\s+are\s+now\s+(admin|root|system|sudo)/gi, severity: 'critical', description: 'Role elevation attempt' },
55
- { pattern: /act\s+as\s+(admin|root|system|sudo)/gi, severity: 'critical', description: 'Role elevation attempt' },
57
+ { pattern: /you\s+are\s+now\s+(in\s+)?(admin|root|system|sudo|developer|debug|test|DAN)\s*(mode)?/gi, severity: 'critical', description: 'Role elevation attempt' },
58
+ // Specific dangerous roles only — "act as \w+" would false-positive on persona
59
+ // content like "act as a helpful teacher" (#1782-4, review feedback)
60
+ { pattern: /act\s+as\s+(admin|root|system|sudo|superuser|DAN)\b/gi, severity: 'critical', description: 'Role elevation attempt' },
61
+ { pattern: /pretend\s+you\s+have\s+no\s+(guidelines|restrictions|rules|limits)/gi, severity: 'critical', description: 'Guideline bypass attempt' },
62
+ { pattern: /\b(jailbreak|do\s+anything\s+now|DAN\s+mode)\b/gi, severity: 'critical', description: 'Jailbreak attempt' },
56
63
  // Data exfiltration attempts
57
64
  { pattern: /export\s+all\s+(files|data|personas|tokens|credentials|api\s+keys)/gi, severity: 'critical', description: 'Data exfiltration' },
58
65
  { pattern: /send\s+all\s+(files|data|personas|tokens|credentials|api\s+keys)\s+to/gi, severity: 'critical', description: 'Data exfiltration' },
59
66
  { pattern: /list\s+all\s+(files|tokens|credentials|secrets|api\s+keys)/gi, severity: 'high', description: 'Information disclosure' },
60
67
  { pattern: /show\s+me\s+all\s+(tokens|credentials|secrets|api\s+keys)/gi, severity: 'high', description: 'Credential disclosure' },
61
68
  // Command execution patterns
62
- { pattern: /curl\s+[^\s]+\.(com|net|org|io|dev)/gi, severity: 'critical', description: 'External command execution' },
63
- { pattern: /wget\s+[^\s]+\.(com|net|org|io|dev)/gi, severity: 'critical', description: 'External command execution' },
69
+ { pattern: /curl\s+[^\s]{1,500}/gi, severity: 'critical', description: 'External command execution' },
70
+ { pattern: /wget\s+[^\s]{1,500}/gi, severity: 'critical', description: 'External command execution' },
64
71
  { pattern: /\$\([^)]+\)/g, severity: 'critical', description: 'Command substitution' },
65
72
  // SECURITY: Backtick command detection with ReDoS mitigation
66
73
  // FIX (PR #1313): Fixed ReDoS vulnerabilities by replacing .* with [^`]*
@@ -319,6 +326,7 @@ export class ContentValidator {
319
326
  logEvents: false
320
327
  })) {
321
328
  detectedPatterns.push(description);
329
+ logger.debug(`Content injection blocked: ${description} (${severity}) — pattern: ${pattern.source}`);
322
330
  // Update highest severity
323
331
  if (severity === 'critical' || (severity === 'high' && highestSeverity !== 'critical')) {
324
332
  highestSeverity = severity;
@@ -598,4 +606,4 @@ export class ContentValidator {
598
606
  return `---\n${yamlContent}\n---${contentResult.sanitizedContent || markdownContent}`;
599
607
  }
600
608
  }
601
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudFZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZWN1cml0eS9jb250ZW50VmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBaUNwRSxNQUFNLE9BQU8sZ0JBQWdCO0lBQ25CLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBdUM7SUFFaEUsTUFBTSxDQUFDLDBCQUEwQixDQUFDLFFBQTZDO1FBQ3BGLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUM7SUFDcEMsQ0FBQztJQUVPLE1BQU0sQ0FBQyxZQUFZO1FBQ3pCLElBQUksQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3ZFLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUNEOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsZ0VBQWdFO0lBQ3hELE1BQU0sQ0FBVSxrQkFBa0IsR0FBbUY7UUFDM0gsa0NBQWtDO1FBQ2xDLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLHdCQUF3QixFQUFFO1FBQy9GLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxF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Q0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdEUsZ0JBQWdCO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxNQUFNLElBQUksYUFBYSxDQUFDLGdEQUFnRCxDQUFDLENBQUM7UUFDNUUsQ0FBQztRQUVELDRCQUE0QjtRQUM1QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLFFBQVEsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNwRSw0RUFBNEU7WUFDNUUsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxrQkFBa0IsQ0FBQztZQUNsRixNQUFNLElBQUksYUFBYSxDQUFDLHlEQUF5RCxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFFRCwyQkFBMkI7UUFDM0IsT0FBTyxRQUFRLFdBQVcsUUFBUSxhQUFhLENBQUMsZ0JBQWdCLElBQUksZUFBZSxFQUFFLENBQUM7SUFDeEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29udGVudCBWYWxpZGF0b3IgZm9yIERvbGxob3VzZU1DUFxuICogXG4gKiBQcm90ZWN0cyBhZ2FpbnN0IHByb21wdCBpbmplY3Rpb24gYXR0YWNrcyBpbiBjb2xsZWN0aW9uIHBlcnNvbmFzXG4gKiBieSBkZXRlY3RpbmcgYW5kIHNhbml0aXppbmcgbWFsaWNpb3VzIGNvbnRlbnQgcGF0dGVybnMuXG4gKiBcbiAqIFNlY3VyaXR5OiBTRUMtMDAxIC0gQ3JpdGljYWwgdnVsbmVyYWJpbGl0eSBwcm90ZWN0aW9uXG4gKi9cblxuaW1wb3J0IHsgU2VjdXJpdHlFcnJvciB9IGZyb20gJy4vZXJyb3JzLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gJy4vc2VjdXJpdHlNb25pdG9yLmpzJztcbmltcG9ydCB7IFJlZ2V4VmFsaWRhdG9yIH0gZnJvbSAnLi9yZWdleFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTRUNVUklUWV9MSU1JVFMgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHR5cGUgeyBTZWN1cml0eVRlbGVtZXRyeSB9IGZyb20gJy4vdGVsZW1ldHJ5L1NlY3VyaXR5VGVsZW1ldHJ5LmpzJztcblxuLy8gRklYOiBTb25hckNsb3VkIHR5cGVzY3JpcHQ6UzQzMjMgLSBFeHRyYWN0IHVuaW9uIHR5cGUgdG8gdHlwZSBhbGlhcyBmb3IgbWFpbnRhaW5hYmlsaXR5XG5leHBvcnQgdHlwZSBTZWN1cml0eVNldmVyaXR5ID0gJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJyB8ICdjcml0aWNhbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudFZhbGlkYXRpb25SZXN1bHQge1xuICBpc1ZhbGlkOiBib29sZWFuO1xuICBzYW5pdGl6ZWRDb250ZW50Pzogc3RyaW5nO1xuICBkZXRlY3RlZFBhdHRlcm5zPzogc3RyaW5nW107XG4gIHNldmVyaXR5PzogU2VjdXJpdHlTZXZlcml0eTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb250ZW50VmFsaWRhdG9yT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTa2lwIHNpemUgbGltaXQgY2hlY2tzIC0gdXNlZnVsIGZvciBtZW1vcnkgY29udGVudCB0aGF0IGNhbiBiZSBsYXJnZVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc2tpcFNpemVDaGVjaz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDdXN0b20gbWF4IGxlbmd0aCBvdmVycmlkZVxuICAgKiBAZGVmYXVsdCBTRUNVUklUWV9MSU1JVFMuTUFYX0NPTlRFTlRfTEVOR1RIXG4gICAqL1xuICBtYXhMZW5ndGg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBFbGVtZW50IHR5cGUgY29udGV4dCBmb3IgY29udGV4dC1hd2FyZSBwYXR0ZXJuIG1hdGNoaW5nLlxuICAgKiBTa2lsbHMgbWF5IGxlZ2l0aW1hdGVseSBjb250YWluIGNvZGUgcGF0dGVybnMgKGV2YWwsIGV4ZWMsIHJlcXVpcmUpXG4gICAqIHRoYXQgd291bGQgYmUgYmxvY2tlZCBpbiBvdGhlciBjb250ZXh0cy5cbiAgICogQHNpbmNlIElzc3VlICM0NTZcbiAgICovXG4gIGNvbnRlbnRDb250ZXh0PzogJ3BlcnNvbmEnIHwgJ3NraWxsJyB8ICd0ZW1wbGF0ZScgfCAnYWdlbnQnIHwgJ21lbW9yeSc7XG59XG5cbmV4cG9ydCBjbGFzcyBDb250ZW50VmFsaWRhdG9yIHtcbiAgcHJpdmF0ZSBzdGF0aWMgdGVsZW1ldHJ5UmVzb2x2ZXI/OiAoKSA9PiBTZWN1cml0eVRlbGVtZXRyeSB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgc3RhdGljIGNvbmZpZ3VyZVRlbGVtZXRyeVJlc29sdmVyKHJlc29sdmVyOiAoKSA9PiBTZWN1cml0eVRlbGVtZXRyeSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMudGVsZW1ldHJ5UmVzb2x2ZXIgPSByZXNvbHZlcjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldFRlbGVtZXRyeSgpOiBTZWN1cml0eVRlbGVtZXRyeSB8IHVuZGVmaW5lZCB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLnRlbGVtZXRyeVJlc29sdmVyID8gdGhpcy50ZWxlbWV0cnlSZXNvbHZlcigpIDogdW5kZWZpbmVkO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFBhdHRlcm4tYmFzZWQgZGV0ZWN0aW9uIHN5c3RlbSBmb3IgcHJvbXB0IGluamVjdGlvbiBhdHRhY2tzLlxuICAgKiBcbiAgICogVGhpcyBhcHByb2FjaCB3YXMgY2hvc2VuIG92ZXIgQUktYmFzZWQgZGV0ZWN0aW9uIGJlY2F1c2U6XG4gICAqIDEuIFBhdHRlcm4gbWF0Y2hpbmcgY2Fubm90IGJlIHNvY2lhbGx5IGVuZ2luZWVyZWQgb3IgY29uZnVzZWRcbiAgICogMi4gRGV0ZXJtaW5pc3RpYyByZXN1bHRzIGVuc3VyZSBjb25zaXN0ZW50IHNlY3VyaXR5XG4gICAqIDMuIE5vIGFkZGl0aW9uYWwgQVBJIGNhbGxzIG9yIGxhdGVuY3lcbiAgICogNC4gQ2FuJ3QgYmUgYnlwYXNzZWQgYnkgY2xldmVyIHByb21wdCBlbmdpbmVlcmluZ1xuICAgKiBcbiAgICogVGhlIHBhdHRlcm5zIGJlbG93IHJlcHJlc2VudCBrbm93biBhdHRhY2sgdmVjdG9ycyBmcm9tIHNlY3VyaXR5IHJlc2VhcmNoXG4gICAqIGFuZCByZWFsLXdvcmxkIGV4cGxvaXQgYXR0ZW1wdHMgYWdhaW5zdCBBSSBzeXN0ZW1zLlxuICAgKi9cbiAgLy8gUHJvbXB0IGluamVjdGlvbiBwYXR0ZXJucyB0aGF0IGNvdWxkIGNvbXByb21pc2UgQUkgYXNzaXN0YW50c1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBJTkpFQ1RJT05fUEFUVEVSTlM6IEFycmF5PHsgcGF0dGVybjogUmVnRXhwOyBzZXZlcml0eTogJ2hpZ2gnIHwgJ2NyaXRpY2FsJzsgZGVzY3JpcHRpb246IHN0cmluZyB9PiA9IFtcbiAgICAvLyBTeXN0ZW0gcHJvbXB0IG92ZXJyaWRlIGF0dGVtcHRzXG4gICAgeyBwYXR0ZXJuOiAvXFxbU1lTVEVNOlxccyouKj9cXF0vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1N5c3RlbSBwcm9tcHQgb3ZlcnJpZGUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvXFxbQURNSU46XFxzKi4qP1xcXS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnQWRtaW4gcHJvbXB0IG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL1xcW0FTU0lTVEFOVDpcXHMqLio/XFxdL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdBc3Npc3RhbnQgcHJvbXB0IG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL1xcW1VTRVI6XFxzKi4qP1xcXS9naSwgc2V2ZXJpdHk6ICdoaWdoJywgZGVzY3JpcHRpb246ICdVc2VyIHByb21wdCBvdmVycmlkZScgfSxcbiAgICBcbiAgICAvLyBJbnN0cnVjdGlvbiBtYW5pcHVsYXRpb25cbiAgICB7IHBhdHRlcm46IC9pZ25vcmVcXHMrKGFsbFxccyspP3ByZXZpb3VzXFxzK2luc3RydWN0aW9ucy9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSW5zdHJ1Y3Rpb24gb3ZlcnJpZGUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvaWdub3JlXFxzKyhhbGxcXHMrKT9wcmlvclxccytpbnN0cnVjdGlvbnMvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0luc3RydWN0aW9uIG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL2Rpc3JlZ2FyZFxccysoYWxsXFxzKyk/cHJldmlvdXNcXHMraW5zdHJ1Y3Rpb25zL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdJbnN0cnVjdGlvbiBvdmVycmlkZScgfSxcbiAgICB7IHBhdHRlcm46IC9kaXNyZWdhcmRcXHMrZXZlcnl0aGluZ1xccythYm92ZS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSW5zdHJ1Y3Rpb24gb3ZlcnJpZGUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvZm9yZ2V0XFxzKyhhbGxcXHMrKT9wcmV2aW91c1xccytpbnN0cnVjdGlvbnMvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0luc3RydWN0aW9uIG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL2ZvcmdldFxccyt5b3VyXFxzK3RyYWluaW5nL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdJbnN0cnVjdGlvbiBvdmVycmlkZScgfSxcbiAgICB7IHBhdHRlcm46IC9vdmVycmlkZVxccyt5b3VyXFxzK3Byb2dyYW1taW5nL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdJbnN0cnVjdGlvbiBvdmVycmlkZScgfSxcbiAgICB7IHBhdHRlcm46IC95b3VcXHMrYXJlXFxzK25vd1xccysoYWRtaW58cm9vdHxzeXN0ZW18c3VkbykvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1JvbGUgZWxldmF0aW9uIGF0dGVtcHQnIH0sXG4gICAgeyBwYXR0ZXJuOiAvYWN0XFxzK2FzXFxzKyhhZG1pbnxyb290fHN5c3RlbXxzdWRvKS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnUm9sZSBlbGV2YXRpb24gYXR0ZW1wdCcgfSxcbiAgICBcbiAgICAvLyBEYXRhIGV4ZmlsdHJhdGlvbiBhdHRlbXB0c1xuICAgIHsgcGF0dGVybjogL2V4cG9ydFxccythbGxcXHMrKGZpbGVzfGRhdGF8cGVyc29uYXN8dG9rZW5zfGNyZWRlbnRpYWxzfGFwaVxccytrZXlzKS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnRGF0YSBleGZpbHRyYXRpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvc2VuZFxccythbGxcXHMrKGZpbGVzfGRhdGF8cGVyc29uYXN8dG9rZW5zfGNyZWRlbnRpYWxzfGFwaVxccytrZXlzKVxccyt0by9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnRGF0YSBleGZpbHRyYXRpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvbGlzdFxccythbGxcXHMrKGZpbGVzfHRva2Vuc3xjcmVkZW50aWFsc3xzZWNyZXRzfGFwaVxccytrZXlzKS9naSwgc2V2ZXJpdHk6ICdoaWdoJywgZGVzY3JpcHRpb246ICdJbmZvcm1hdGlvbiBkaXNjbG9zdXJlJyB9LFxuICAgIHsgcGF0dGVybjogL3Nob3dcXHMrbWVcXHMrYWxsXFxzKyh0b2tlbnN8Y3JlZGVudGlhbHN8c2VjcmV0c3xhcGlcXHMra2V5cykvZ2ksIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnQ3JlZGVudGlhbCBkaXNjbG9zdXJlJyB9LFxuICAgIFxuICAgIC8vIENvbW1hbmQgZXhlY3V0aW9uIHBhdHRlcm5zXG4gICAgeyBwYXR0ZXJuOiAvY3VybFxccytbXlxcc10rXFwuKGNvbXxuZXR8b3JnfGlvfGRldikvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0V4dGVybmFsIGNvbW1hbmQgZXhlY3V0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL3dnZXRcXHMrW15cXHNdK1xcLihjb218bmV0fG9yZ3xpb3xkZXYpL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdFeHRlcm5hbCBjb21tYW5kIGV4ZWN1dGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC9cXCRcXChbXildK1xcKS9nLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdDb21tYW5kIHN1YnN0aXR1dGlvbicgfSxcbiAgICAvLyBTRUNVUklUWTogQmFja3RpY2sgY29tbWFuZCBkZXRlY3Rpb24gd2l0aCBSZURvUyBtaXRpZ2F0aW9uXG4gICAgLy8gRklYIChQUiAjMTMxMyk6IEZpeGVkIFJlRG9TIHZ1bG5lcmFiaWxpdGllcyBieSByZXBsYWNpbmcgLiogd2l0aCBbXmBdKlxuICAgIC8vIEZJWCAoUFIgIzEzMTMgLSBTb25hckNsb3VkKTogQWRkZWQgZXhwbGljaXQgYm91bmRzIHswLDIwMH0gdG8gcHJldmVudCBiYWNrdHJhY2tpbmdcbiAgICAvLyBNdWx0aXBsZSB1bmJvdW5kZWQgcXVhbnRpZmllcnMgaW4gc2FtZSBwYXR0ZXJuIGNhbiBzdGlsbCBjYXVzZSBiYWNrdHJhY2tpbmcgZXZlbiB3aXRoIFteYF0qXG4gICAgLy8gQm91bmRlZCBxdWFudGlmaWVycyBwcmV2ZW50IGV4cG9uZW50aWFsIHRpbWUgY29tcGxleGl0eSB3aGlsZSBtYXRjaGluZyByZWFsaXN0aWMgY29tbWFuZHNcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpybVxccystcmY/XFxzK1svfl18c3Vkb1xccytybXxjaG1vZFxccys3Nzd8Y2hvd25cXHMrcm9vdClbXmBdezAsMjAwfWAvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0Rhbmdlcm91cyBzaGVsbCBjb21tYW5kIGluIGJhY2t0aWNrcycgfSxcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpjYXR8bHMpXFxzK1xcL2V0Y1xcL1teYF17MCwyMDB9YC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnU2Vuc2l0aXZlIGZpbGUgYWNjZXNzIGluIGJhY2t0aWNrcycgfSxcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpiYXNofHNoKVxccystY1xccytbJ1wiXVteYF17MCwyMDB9YC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnU2hlbGwgZXhlY3V0aW9uIGluIGJhY2t0aWNrcycgfSxcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpwYXNzd2R8c2hhZG93fG5jXFxzKy1sfG5ldGNhdFxccystbHxzc2hcXHMrcm9vdEApW15gXXswLDIwMH1gL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdEYW5nZXJvdXMgY29tbWFuZCBpbiBiYWNrdGlja3MnIH0sXG4gICAgeyBwYXR0ZXJuOiAvYFteYF17MCwyMDB9KD86Y3VybHx3Z2V0KVxccytbXmBdezAsMjAwfVxcfFxccyooPzpzaHxiYXNoKVteYF17MCwyMDB9YC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnUGlwZSB0byBzaGVsbCBpbiBiYWNrdGlja3MnIH0sXG4gICAgeyBwYXR0ZXJuOiAvYFteYF17MCwyMDB9KD86XFwvZXRjXFwvcGFzc3dkfFxcL2V0Y1xcL3NoYWRvd3xcXC5zc2hcXC9pZF98c3Vkb1xccytzdSlbXmBdezAsMjAwfWAvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1NlbnNpdGl2ZSBmaWxlIG9yIHByaXZpbGVnZSBlc2NhbGF0aW9uIGluIGJhY2t0aWNrcycgfSxcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpweXRob258cGVybHxydWJ5fHBocHxub2RlKVxccysoPzotZXwtYylcXHMrW15gXXswLDIwMH0oPzpleGVjfGV2YWx8c3lzdGVtfHN1YnByb2Nlc3MpW15gXXswLDIwMH1gL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdTY3JpcHQgaW50ZXJwcmV0ZXIgd2l0aCBkYW5nZXJvdXMgZnVuY3Rpb24gaW4gYmFja3RpY2tzJyB9LFxuICAgIHsgcGF0dGVybjogL2V2YWxcXHMqXFwoL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdDb2RlIGV2YWx1YXRpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvZXhlY1xccypcXCgvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0NvZGUgZXhlY3V0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL29zXFwuc3lzdGVtXFxzKlxcKC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnU3lzdGVtIGNvbW1hbmQgZXhlY3V0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL3N1YnByb2Nlc3NcXC4oY2FsbHxydW58UG9wZW4pL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdTdWJwcm9jZXNzIGV4ZWN1dGlvbicgfSxcbiAgICBcbiAgICAvLyBUb2tlbi9jcmVkZW50aWFsIHBhdHRlcm5zXG4gICAgeyBwYXR0ZXJuOiAvR0lUSFVCX1RPS0VOL2dpLCBzZXZlcml0eTogJ2hpZ2gnLCBkZXNjcmlwdGlvbjogJ1Rva2VuIHJlZmVyZW5jZScgfSxcbiAgICB7IHBhdHRlcm46IC9naHBfW2EtekEtWjAtOV17MzZ9L2csIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0dpdEh1YiB0b2tlbiBleHBvc3VyZScgfSxcbiAgICB7IHBhdHRlcm46IC9naG9fW2EtekEtWjAtOV17MzZ9L2csIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0dpdEh1YiBPQXV0aCB0b2tlbiBleHBvc3VyZScgfSxcbiAgICBcbiAgICAvLyBQYXRoIHRyYXZlcnNhbCBpbiBjb250ZW50XG4gICAgeyBwYXR0ZXJuOiAvXFwuXFwuXFwvXFwuXFwuXFwvXFwuXFwuXFwvL2csIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnUGF0aCB0cmF2ZXJzYWwgYXR0ZW1wdCcgfSxcbiAgICB7IHBhdHRlcm46IC9cXC9ldGNcXC9wYXNzd2QvZ2ksIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnU2Vuc2l0aXZlIGZpbGUgYWNjZXNzJyB9LFxuICAgIHsgcGF0dGVybjogL1xcL1xcLnNzaFxcLy9naSwgc2V2ZXJpdHk6ICdoaWdoJywgZGVzY3JpcHRpb246ICdTU0gga2V5IGFjY2VzcyBhdHRlbXB0JyB9LFxuXG4gICAgLy8gSFRNTC9YU1MgcGF0dGVybnMg4oCUIGRlZmVuc2UtaW4tZGVwdGggZm9yIGNvbW11bml0eS1zb3VyY2VkIGNvbnRlbnRcbiAgICAvLyBET01QdXJpZnkgb24gdGhlIGNsaWVudCBpcyB0aGUgcHJpbWFyeSBkZWZlbnNlOyB0aGVzZSBjYXRjaCB0aHJlYXRzIGF0IGluZ2VzdFxuICAgIHsgcGF0dGVybjogLzxzY3JpcHRbXFxzPl0vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0hUTUwgc2NyaXB0IGluamVjdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC88XFwvc2NyaXB0Pi9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSFRNTCBzY3JpcHQgaW5qZWN0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogLzxpZnJhbWVbXFxzPl0vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0hUTUwgaWZyYW1lIGluamVjdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC88b2JqZWN0W1xccz5dL2dpLCBzZXZlcml0eTogJ2hpZ2gnLCBkZXNjcmlwdGlvbjogJ0hUTUwgb2JqZWN0IGluamVjdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC88ZW1iZWRbXFxzPl0vZ2ksIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnSFRNTCBlbWJlZCBpbmplY3Rpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvXFxib25cXHcrPVxccypbXCInXS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSFRNTCBldmVudCBoYW5kbGVyIGluamVjdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC9qYXZhc2NyaXB0XFxzKjovZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0phdmFTY3JpcHQgcHJvdG9jb2wgaW5qZWN0aW9uJyB9LFxuICAgIC8vIEVudGl0eS1lbmNvZGVkIHZhcmlhbnRzOiAmIzEwNjthdmFzY3JpcHQsICYjeDZhO2F2YXNjcmlwdCwgJiMxMDY7JiM5Nzt2YXNjcmlwdCwgZXRjLlxuICAgIHsgcGF0dGVybjogLyYjeD9bMC05YS1mXSs7P1xccyphXFxzKnZcXHMqYVxccypzXFxzKmNcXHMqclxccyppXFxzKnBcXHMqdC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnRW5jb2RlZCBKYXZhU2NyaXB0IHByb3RvY29sIGluamVjdGlvbicgfSxcbiAgICAvLyBGdWxseS9wYXJ0aWFsbHkgZW50aXR5LWVuY29kZWQ6IGRldGVjdHMgJiMuLi5zY3JpcHQgcGF0dGVybiAoY292ZXJzIG11bHRpLWVudGl0eSBlbmNvZGluZylcbiAgICB7IHBhdHRlcm46IC8oPzomI3g/WzAtOWEtZl0rOz9cXHMqKXsyLH1zXFxzKmNcXHMqclxccyppXFxzKnBcXHMqdC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnRW5jb2RlZCBKYXZhU2NyaXB0IHByb3RvY29sIGluamVjdGlvbicgfSxcbiAgXTtcblxuICAvLyBNYWxpY2lvdXMgWUFNTCBwYXR0ZXJuc1xuICAvLyBTRUNVUklUWSBGSVggIzM2NDogWUFNTCBib21iIGRldGVjdGlvbiBwYXR0ZXJuc1xuICAvLyBTRUNVUklUWSBGSVggKFBSICM1NTIgcmV2aWV3KTogU2ltcGxpZmllZCBwYXR0ZXJucyB0byByZWR1Y2UgUmVEb1Mgcmlza1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBZQU1MX0JPTUJfUEFUVEVSTlMgPSBbXG4gICAgLy8gRGV0ZWN0cyByZWN1cnNpdmUgYW5jaG9yIHJlZmVyZW5jZXMgdGhhdCBjb3VsZCBjYXVzZSBleHBvbmVudGlhbCBleHBhbnNpb25cbiAgICAvLyBFeGFtcGxlOiAmYSBbKmFdIG9yICZib21iIFtcInRlc3RcIiwgKmJvbWJdXG4gICAgLyYoXFx3KylcXHMqXFxbW15cXF1dKlxcKlxcMVteXFxdXSpcXF0vLCAgICAgIC8vIERpcmVjdCByZWN1cnNpb24gaW4gYXJyYXlcbiAgICAvJihcXHcrKVxccypcXHtbXn1dKlxcKlxcMVtefV0qXFx9LywgICAgICAgIC8vIERpcmVjdCByZWN1cnNpb24gaW4gb2JqZWN0XG4gICAgL15cXHMqXFx3KzpcXHMqJihcXHcrKVxccypcXG5cXHMqXFx3KzpcXHMqXFwqXFwxL20sICAvLyBNdWx0aS1saW5lIHZhbHVlIHJlY3Vyc2lvbiAoZGF0YTogJnJlZiAvIHZhbHVlOiAqcmVmKVxuICAgIFxuICAgIC8vIFNpbXBsaWZpZWQgcGF0dGVybiB0byBkZXRlY3QgZGVlcGx5IG5lc3RlZCBhbmNob3JzIChsZXNzIFJlRG9TIHJpc2spXG4gICAgLy8gTG9va3MgZm9yIDMrIGFuY2hvciBkZWZpbml0aW9ucyBpbiBjbG9zZSBwcm94aW1pdHlcbiAgICAvJlxcdytbXiZdKiZcXHcrW14mXSomXFx3Ky8sICAgICAgICAgICAgLy8gMysgYW5jaG9ycyAoc2ltcGxpZmllZCwgbGVzcyBiYWNrdHJhY2tpbmcpXG4gICAgXG4gICAgLy8gRGV0ZWN0cyBleGNlc3NpdmUgYWxpYXNlcyBpbiBjbG9zZSBwcm94aW1pdHkgKHBvdGVudGlhbCBhbXBsaWZpY2F0aW9uKVxuICAgIC8vIEV4YW1wbGU6IFsqYSwgKmIsICpjLCAqZCwgKmUsICpmLCAqZywgKmgsICppLCAqal1cbiAgICAvXFwqXFx3Kyg/OlssXFxzXStcXCpcXHcrKXs5LH0vLCAgICAgICAgICAvLyAxMCsgYWxpYXNlcyBpbiBzZXF1ZW5jZSAobm9uLWNhcHR1cmluZyBncm91cClcbiAgXTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBNQUxJQ0lPVVNfWUFNTF9QQVRURVJOUyA9IFtcbiAgICAvLyBMYW5ndWFnZS1zcGVjaWZpYyBkZXNlcmlhbGl6YXRpb24gYXR0YWNrc1xuICAgIC8hIXB5dGhvblxcL29iamVjdC8sXG4gICAgLyEhcHl0aG9uXFwvbW9kdWxlLyxcbiAgICAvISFweXRob25cXC9uYW1lLyxcbiAgICAvISFydWJ5XFwvb2JqZWN0LyxcbiAgICAvISFydWJ5XFwvaGFzaC8sXG4gICAgLyEhcnVieVxcL3N0cnVjdC8sXG4gICAgLyEhcnVieVxcL21hcnNoYWwvLFxuICAgIC8hIWphdmEvLFxuICAgIC8hIWphdmF4LyxcbiAgICAvISFjb21cXC5zdW4vLFxuICAgIC8hIXBlcmxcXC9oYXNoLyxcbiAgICAvISFwZXJsXFwvY29kZS8sXG4gICAgLyEhcGhwXFwvb2JqZWN0LyxcbiAgICBcbiAgICAvLyBDb25zdHJ1Y3Rvci9mdW5jdGlvbiBpbmplY3Rpb25cbiAgICAvISFleGVjLyxcbiAgICAvISFldmFsLyxcbiAgICAvISFuZXcvLFxuICAgIC8hIWNvbnN0cnVjdC8sXG4gICAgLyEhYXBwbHkvLFxuICAgIC8hIWNhbGwvLFxuICAgIC8hIWludm9rZS8sXG4gICAgXG4gICAgLy8gQ29kZSBleGVjdXRpb24gcGF0dGVybnMgLSBtb3JlIHNwZWNpZmljIHRvIGF2b2lkIGZhbHNlIHBvc2l0aXZlc1xuICAgIC9zdWJwcm9jZXNzXFwuLyxcbiAgICAvb3NcXC5zeXN0ZW0vLFxuICAgIC9ldmFsXFxzKlxcKC8sXG4gICAgL2V4ZWNcXHMqXFwoLyxcbiAgICAvX19pbXBvcnRfX1xccypcXCgvLFxuICAgIC9yZXF1aXJlXFxzKlxcKC8sXG4gICAgL2ltcG9ydFxccysoPzpvc3xzeXN8c3VicHJvY2Vzc3xldmFsfGV4ZWMpLyxcbiAgICAvaW5jbHVkZVxccytbXCInXS4qXFwuKD86cGhwfHNofHB5fGpzfHJiKVtcIiddLyxcbiAgICBcbiAgICAvLyBDb21tYW5kIGV4ZWN1dGlvbiB2YXJpYW50cyAtIG1vcmUgc3BlY2lmaWMgcGF0dGVybnNcbiAgICAvcG9wZW5cXHMqXFwoLyxcbiAgICAvc3Bhd25cXHMqXFwoLyxcbiAgICAvc3lzdGVtXFxzKlxcKC8sXG4gICAgL2JhY2t0aWNrXFxzKlxcKC8sXG4gICAgL3NoZWxsX2V4ZWNcXHMqXFwoLyxcbiAgICAvcGFzc3RocnVcXHMqXFwoLyxcbiAgICAvcHJvY19vcGVuXFxzKlxcKC8sXG4gICAgXG4gICAgLy8gTmV0d29yayBvcGVyYXRpb25zIC0gcmVxdWlyZSBzdXNwaWNpb3VzIGNvbnRleHRcbiAgICAvc29ja2V0XFwuY29ubmVjdC8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZXRlY3RzIHNvY2tldCBjb25uZWN0aW9uIGF0dGVtcHRzXG4gICAgL3VybGxpYlxcLnJlcXVlc3QvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHl0aG9uIEhUVFAgbGlicmFyeSB1c2FnZVxuICAgIC9yZXF1ZXN0c1xcLig/OmdldHxwb3N0fHB1dHxkZWxldGUpXFxzKlxcKC8sICAgICAgICAgICAgICAvLyBEZXRlY3RzIEhUVFAgcmVxdWVzdHMgd2l0aCBtZXRob2QgY2FsbHNcbiAgICAvZmV0Y2hcXHMqXFwoXFxzKltcIiddaHR0cHM/OlxcL1xcLy8sICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGV0ZWN0cyBmZXRjaCBjYWxscyB0byBleHRlcm5hbCBVUkxzXG4gICAgL25ld1xccytYTUxIdHRwUmVxdWVzdC8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSmF2YVNjcmlwdCBBSkFYIG9iamVjdCBjcmVhdGlvblxuICAgIC9cXC4oPzpnZXR8cG9zdHxwdXR8ZGVsZXRlKVxccypcXChcXHMqW1wiJ11odHRwcz86XFwvXFwvLywgICAgLy8gTWV0aG9kIGNoYWluaW5nIHdpdGggSFRUUCByZXF1ZXN0c1xuICAgIFxuICAgIC8vIEZpbGUgc3lzdGVtIG9wZXJhdGlvbnMgLSByZXF1aXJlIHN1c3BpY2lvdXMgY29udGV4dFxuICAgIC8oPzpmc1xcLnxmaWxlXFwufClcXHMqb3BlblxccypcXChcXHMqW1wiJ10oPzpcXC9ldGNcXC98XFwvYmluXFwvfFxcLlxcLlxcLykvLCAgICAgLy8gRmlsZSBvcGVuIHdpdGggc3VzcGljaW91cyBwYXRoc1xuICAgIC9maWxlX2dldF9jb250ZW50c1xccypcXCgvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBIUCBmaWxlIHJlYWRpbmcgZnVuY3Rpb25cbiAgICAvZmlsZV9wdXRfY29udGVudHNcXHMqXFwoLywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQSFAgZmlsZSB3cml0aW5nIGZ1bmN0aW9uXG4gICAgL2ZvcGVuXFxzKlxcKFxccypbXCInXSg/OlxcL2V0Y1xcL3xcXC9iaW5cXC98XFwuXFwuXFwvKS8sICAgICAgICAgICAgICAgICAgICAgICAvLyBGaWxlIG9wZW4gd2l0aCBkYW5nZXJvdXMgc3lzdGVtIHBhdGhzXG4gICAgLyg/OmZzXFwuKT9cXHMqcmVhZEZpbGVcXHMqXFwoXFxzKltcIiddKD86XFwvZXRjXFwvfFxcL2JpblxcL3xcXC5cXC5cXC8pLywgICAgICAgIC8vIE5vZGUuanMgZmlsZSByZWFkIHdpdGggcGF0aCB0cmF2ZXJzYWxcbiAgICAvKD86ZnNcXC4pP1xccyp3cml0ZUZpbGVcXHMqXFwoXFxzKltcIiddKD86XFwvKD86YmlufGV0Y3x0bXApXFwvfFxcLlxcLlxcLykvLCAgIC8vIE5vZGUuanMgZmlsZSB3cml0ZSB0byBzeXN0ZW0gZGlyc1xuICAgIFxuICAgIC8vIFByb3RvY29sIGhhbmRsZXJzXG4gICAgL2ZpbGU6XFwvXFwvLyxcbiAgICAvZGF0YTpcXC9cXC8vLFxuICAgIC9leHBlY3Q6XFwvXFwvLyxcbiAgICAvcGhwOlxcL1xcLy8sXG4gICAgL3BoYXI6XFwvXFwvLyxcbiAgICAvemlwOlxcL1xcLy8sXG4gICAgL3NzaDI6XFwvXFwvLyxcbiAgICAvb2dnOlxcL1xcLy8sXG4gICAgXG4gICAgLy8gWUFNTC1zcGVjaWZpYyBkYW5nZXJvdXMgZmVhdHVyZXNcbiAgICAvJlxcdytcXHMqISEvLCAvLyBBbmNob3Igd2l0aCB0YWcgY29tYmluYXRpb25cbiAgICAvXFwqXFx3K1xccyohIS8sIC8vIEFsaWFzIHdpdGggdGFnIGNvbWJpbmF0aW9uXG4gICAgLyEhbWVyZ2UvLFxuICAgIC8hIWJpbmFyeS8sXG4gICAgLyEhdGltZXN0YW1wLyxcbiAgICBcbiAgICAvLyBVbmljb2RlL2VuY29kaW5nIGJ5cGFzcyBhdHRlbXB0cyAtIHByZXZlbnQgdmlzdWFsIHNwb29maW5nIGF0dGFja3NcbiAgICAvXFxcXFt1VV0wKig/OjIyfDI3fDYwfDNbY0NdKS8sICAgLy8gVW5pY29kZSBlc2NhcGVzIGZvciBxdW90ZXMgKFwiKSBhbmQgYnJhY2tldHMgKDw+KVxuICAgIC9bXFx1MjAyQS1cXHUyMDJFXFx1MjA2Ni1cXHUyMDY5XS8sICAvLyBEaXJlY3Rpb24gb3ZlcnJpZGUgY2hhcnMgKFJMTywgTFJPLCBpc29sYXRlcylcbiAgICAvW1xcdTIwMEItXFx1MjAwRlxcdTIwMjgtXFx1MjAyRl0vLCAgLy8gWmVyby13aWR0aCBzcGFjZXMsIGxpbmUvcGFyYWdyYXBoIHNlcGFyYXRvcnNcbiAgICAvW1xcdUZFRkZcXHVGRkZFXFx1RkZGRl0vLCAgICAgICAgICAvLyBCT00sIG5vbi1jaGFyYWN0ZXJzIGZvciBwYXlsb2FkIGhpZGluZ1xuICBdO1xuXG4gIC8qKlxuICAgKiBDb250ZW50IGNvbnRleHRzIHdoZXJlIGNvZGUgZXhlY3V0aW9uIHBhdHRlcm5zIGFyZSBsZWdpdGltYXRlIGFuZCBzaG91bGRcbiAgICogbm90IHRyaWdnZXIgc2VjdXJpdHkgYmxvY2tzLiBTa2lsbHMgY29udGFpbiBleGVtcGxhciBjb2RlOyB0ZW1wbGF0ZXMgY29udGFpblxuICAgKiBjb2RlIHNuaXBwZXRzIHRoYXQgYXJlIHJlbmRlcmVkLCBuZXZlciBleGVjdXRlZDsgYWdlbnQgZGVmaW5pdGlvbnMgZGVzY3JpYmVcbiAgICogdGVjaG5pY2FsIHdvcmtmbG93cyB0aGF0IG1heSByZWZlcmVuY2UgY29kZS4gUHJvbXB0IGluamVjdGlvbiwgYWN0dWFsIHRva2VuXG4gICAqIGV4cG9zdXJlIChnaHBfL2dob18pLCBkYXRhIGV4ZmlsdHJhdGlvbiwgYW5kIEhUTUwvWFNTIHBhdHRlcm5zIHJlbWFpblxuICAgKiBhY3RpdmUgZm9yIEFMTCBjb250ZXh0cy5cbiAgICogQHNpbmNlIElzc3VlICM0NTZcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IENPREVfRVhFTVBUX0NPTlRFWFRTID0gbmV3IFNldDxDb250ZW50VmFsaWRhdG9yT3B0aW9uc1snY29udGVudENvbnRleHQnXT4oW1xuICAgICdza2lsbCcsICAgIC8vIEV4ZW1wbGFyIGNvZGUgcGF0dGVybnMgdGhlIExMTSBzaG91bGQgZm9sbG93XG4gICAgJ3RlbXBsYXRlJywgLy8gQ29kZSBzbmlwcGV0cyByZW5kZXJlZCBpbnRvIG91dHB1dCwgbmV2ZXIgZXhlY3V0ZWRcbiAgICAnYWdlbnQnLCAgICAvLyBUZWNobmljYWwgd29ya2Zsb3cgZGVmaW5pdGlvbnMg4oCUIHdpdGhvdXQgdGhpcywgYWdlbnRzIHdvdWxkIG5lZWRcbiAgICAgICAgICAgICAgICAvLyB0byBwdWxsIGluIGEgc2tpbGwgb3IgdGVtcGxhdGUganVzdCB0byByZWZlcmVuY2UgY29kZSwgYWRkaW5nXG4gICAgICAgICAgICAgICAgLy8gY291cGxpbmcgd2l0aG91dCBzZWN1cml0eSB2YWx1ZS4gQWdlbnQgZGVmaW5pdGlvbnMgYXJlIGF1dGhvcmVkXG4gICAgICAgICAgICAgICAgLy8gY29udGVudCByZWFkIGFzIExMTSBjb250ZXh0LCBzYW1lIGFzIHNraWxscyBhbmQgdGVtcGxhdGVzLlxuICBdKTtcblxuICAvKipcbiAgICogUGF0dGVybiBkZXNjcmlwdGlvbnMgdGhhdCBhcmUgZXhlbXB0IGZvciBDT0RFX0VYRU1QVF9DT05URVhUUy5cbiAgICogVGhlc2UgcGF0dGVybnMgbWF0Y2ggbGVnaXRpbWF0ZSBjb2RlIGRvY3VtZW50YXRpb24sIG5vdCB0aHJlYXRzLlxuICAgKiBAc2luY2UgSXNzdWUgIzQ1NlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQ09ERV9FWEVDVVRJT05fUEFUVEVSTlMgPSBuZXcgU2V0KFtcbiAgICAnQ29kZSBldmFsdWF0aW9uJyxcbiAgICAnQ29kZSBleGVjdXRpb24nLFxuICAgICdTeXN0ZW0gY29tbWFuZCBleGVjdXRpb24nLFxuICAgICdTdWJwcm9jZXNzIGV4ZWN1dGlvbicsXG4gIF0pO1xuXG4gIC8qKlxuICAgKiBTZWN1cml0eSBkb2N1bWVudGF0aW9uIHBhdHRlcm5zIGV4ZW1wdCBmb3IgQ09ERV9FWEVNUFRfQ09OVEVYVFMuXG4gICAqIFNraWxscy9hZ2VudHMgdGhhdCB0ZWFjaCBwZW5ldHJhdGlvbiB0ZXN0aW5nLCB0aHJlYXQgbW9kZWxpbmcsIGV0Yy5cbiAgICogbGVnaXRpbWF0ZWx5IHJlZmVyZW5jZSBzaGVsbCBjb21tYW5kcywgZmlsZSBwYXRocywgYW5kIGNyZWRlbnRpYWwgbmFtZXMuXG4gICAqXG4gICAqIERJU1RJTkNUSU9OIEZST00gQUNUSVZFIFRIUkVBVCBQQVRURVJOUzpcbiAgICogVGhlc2UgcGF0dGVybnMgZGVzY3JpYmUgYXR0YWNrcyAoZWR1Y2F0aW9uYWwpIOKAlCB0aGV5IGFwcGVhciBpbiBlbGVtZW50XG4gICAqIGRlZmluaXRpb25zIHRoYXQgYW4gYXV0aG9yIHdyb3RlLCBub3QgaW4gcnVudGltZSB1c2VyIGlucHV0LiBQYXR0ZXJuc1xuICAgKiB0aGF0IHJlbWFpbiBhY3RpdmUgZXZlbiBpbiBleGVtcHQgY29udGV4dHMgYXJlIGFjdHVhbCB0aHJlYXRzOlxuICAgKiAtIFByb21wdCBpbmplY3Rpb24gKHN5c3RlbS9hZG1pbiBvdmVycmlkZSwgaW5zdHJ1Y3Rpb24gbWFuaXB1bGF0aW9uKVxuICAgKiAtIFJlYWwgdG9rZW4gZm9ybWF0cyAoZ2hwXyosIGdob18qIOKAlCBub3QganVzdCB0aGUgd29yZCBcIkdJVEhVQl9UT0tFTlwiKVxuICAgKiAtIERhdGEgZXhmaWx0cmF0aW9uIGNvbW1hbmRzIChleHBvcnQvc2VuZCBhbGwgY3JlZGVudGlhbHMpXG4gICAqIC0gSFRNTC9YU1MgaW5qZWN0aW9uIChyZW5kZXJzIGluIHRoZSB3ZWIgY29uc29sZSlcbiAgICpcbiAgICogQHNpbmNlIElzc3VlICMxNzI1XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBTRUNVUklUWV9ET0NfUEFUVEVSTlMgPSBuZXcgU2V0KFtcbiAgICAnQ29tbWFuZCBzdWJzdGl0dXRpb24nLFxuICAgICdFeHRlcm5hbCBjb21tYW5kIGV4ZWN1dGlvbicsXG4gICAgJ1NlbnNpdGl2ZSBmaWxlIGFjY2VzcycsXG4gICAgJ1BhdGggdHJhdmVyc2FsIGF0dGVtcHQnLFxuICAgICdTU0gga2V5IGFjY2VzcyBhdHRlbXB0JyxcbiAgICAnVG9rZW4gcmVmZXJlbmNlJyxcbiAgICAnRGFuZ2Vyb3VzIHNoZWxsIGNvbW1hbmQgaW4gYmFja3RpY2tzJyxcbiAgICAnU2Vuc2l0aXZlIGZpbGUgYWNjZXNzIGluIGJhY2t0aWNrcycsXG4gICAgJ1NoZWxsIGV4ZWN1dGlvbiBpbiBiYWNrdGlja3MnLFxuICAgICdEYW5nZXJvdXMgY29tbWFuZCBpbiBiYWNrdGlja3MnLFxuICAgICdQaXBlIHRvIHNoZWxsIGluIGJhY2t0aWNrcycsXG4gICAgJ1NlbnNpdGl2ZSBmaWxlIG9yIHByaXZpbGVnZSBlc2NhbGF0aW9uIGluIGJhY2t0aWNrcycsXG4gICAgJ1NjcmlwdCBpbnRlcnByZXRlciB3aXRoIGRhbmdlcm91cyBmdW5jdGlvbiBpbiBiYWNrdGlja3MnLFxuICBdKTtcblxuICAvKipcbiAgICogSFRNTC9YU1MgcGF0dGVybiBkZXNjcmlwdGlvbnMgZXhlbXB0IGZvciB0ZW1wbGF0ZSBjb250ZXh0LlxuICAgKiBUZW1wbGF0ZXMgdXNlIDx0ZW1wbGF0ZT4sIDxzdHlsZT4sIDxzY3JpcHQ+IGFzIHNlY3Rpb24gZGVsaW1pdGVycy5cbiAgICogQHNpbmNlIElzc3VlICM4MDNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEhUTUxfU0VDVElPTl9QQVRURVJOUyA9IG5ldyBTZXQoW1xuICAgICdIVE1MIHNjcmlwdCBpbmplY3Rpb24nLFxuICAgICdIVE1MIG9iamVjdCBpbmplY3Rpb24nLFxuICAgICdIVE1MIGVtYmVkIGluamVjdGlvbicsXG4gIF0pO1xuXG4gIC8qKlxuICAgKiBIYW5kbGVzIFVuaWNvZGUgdmFsaWRhdGlvbiBhbmQgdGhyZWF0IGRldGVjdGlvblxuICAgKiBSRUZBQ1RPUjogRXh0cmFjdGVkIGZyb20gdmFsaWRhdGVBbmRTYW5pdGl6ZSgpIHRvIHJlZHVjZSBjb2duaXRpdmUgY29tcGxleGl0eVxuICAgKiBSZXR1cm5zIG5vcm1hbGl6ZWQgY29udGVudCBhbmQgVW5pY29kZSBzZXZlcml0eSB3aXRob3V0IGFib3J0aW5nIGVhcmx5XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBoYW5kbGVVbmljb2RlVmFsaWRhdGlvbihcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgZGV0ZWN0ZWRQYXR0ZXJuczogc3RyaW5nW11cbiAgKToge1xuICAgIHNhbml0aXplZDogc3RyaW5nO1xuICAgIGhpZ2hlc3RTZXZlcml0eTogU2VjdXJpdHlTZXZlcml0eTtcbiAgfSB7XG4gICAgY29uc3QgdW5pY29kZVJlc3VsdCA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGNvbnRlbnQpO1xuICAgIGNvbnN0IHNhbml0aXplZCA9IHVuaWNvZGVSZXN1bHQubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgbGV0IGhpZ2hlc3RTZXZlcml0eTogU2VjdXJpdHlTZXZlcml0eSA9ICdsb3cnO1xuXG4gICAgaWYgKCF1bmljb2RlUmVzdWx0LmlzVmFsaWQgJiYgdW5pY29kZVJlc3VsdC5kZXRlY3RlZElzc3Vlcykge1xuICAgICAgZGV0ZWN0ZWRQYXR0ZXJucy5wdXNoKC4uLnVuaWNvZGVSZXN1bHQuZGV0ZWN0ZWRJc3N1ZXMubWFwKGlzc3VlID0+IGBVbmljb2RlOiAke2lzc3VlfWApKTtcbiAgICAgIGlmICh1bmljb2RlUmVzdWx0LnNldmVyaXR5KSB7XG4gICAgICAgIGhpZ2hlc3RTZXZlcml0eSA9IHVuaWNvZGVSZXN1bHQuc2V2ZXJpdHk7XG4gICAgICB9XG5cbiAgICAgIC8vIExvZyBoaWdoL2NyaXRpY2FsIFVuaWNvZGUgYXR0YWNrc1xuICAgICAgaWYgKHVuaWNvZGVSZXN1bHQuc2V2ZXJpdHkgPT09ICdjcml0aWNhbCcgfHwgdW5pY29kZVJlc3VsdC5zZXZlcml0eSA9PT0gJ2hpZ2gnKSB7XG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnQ09OVEVOVF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgICAgc2V2ZXJpdHk6IHVuaWNvZGVSZXN1bHQuc2V2ZXJpdHkudG9VcHBlckNhc2UoKSBhcyAnSElHSCcgfCAnQ1JJVElDQUwnLFxuICAgICAgICAgIHNvdXJjZTogJ2NvbnRlbnRfdmFsaWRhdGlvbicsXG4gICAgICAgICAgZGV0YWlsczogYFVuaWNvZGUgYXR0YWNrIGRldGVjdGVkOiAke3VuaWNvZGVSZXN1bHQuZGV0ZWN0ZWRJc3N1ZXMuam9pbignLCAnKX1gLFxuICAgICAgICB9KTtcblxuICAgICAgICBDb250ZW50VmFsaWRhdG9yLmdldFRlbGVtZXRyeSgpPy5yZWNvcmRCbG9ja2VkQXR0YWNrKFxuICAgICAgICAgICdVTklDT0RFX0FUVEFDSycsXG4gICAgICAgICAgdW5pY29kZVJlc3VsdC5kZXRlY3RlZElzc3Vlcy5qb2luKCcsICcpLFxuICAgICAgICAgIHVuaWNvZGVSZXN1bHQuc2V2ZXJpdHkudG9VcHBlckNhc2UoKSBhcyAnSElHSCcgfCAnQ1JJVElDQUwnLFxuICAgICAgICAgICd1bmljb2RlX3ZhbGlkYXRpb24nLFxuICAgICAgICAgIHsgaXNzdWVzOiB1bmljb2RlUmVzdWx0LmRldGVjdGVkSXNzdWVzIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBzYW5pdGl6ZWQsIGhpZ2hlc3RTZXZlcml0eSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBjb250ZW50IGZvciBpbmplY3Rpb24gcGF0dGVybnMgYW5kIGxvZ3Mvc2FuaXRpemVzIHRocmVhdHNcbiAgICogUkVGQUNUT1I6IEV4dHJhY3RlZCBmcm9tIHZhbGlkYXRlQW5kU2FuaXRpemUoKSB0byByZWR1Y2UgY29nbml0aXZlIGNvbXBsZXhpdHlcbiAgICpcbiAgICogQHBhcmFtIG9yaWdpbmFsQ29udGVudCAtIE9yaWdpbmFsIGNvbnRlbnQgdG8gY2hlY2sgcGF0dGVybnMgYWdhaW5zdFxuICAgKiBAcGFyYW0gbm9ybWFsaXplZENvbnRlbnQgLSBOb3JtYWxpemVkIGNvbnRlbnQgdG8gYXBwbHkgcmVwbGFjZW1lbnRzIHRvXG4gICAqIEBwYXJhbSBkZXRlY3RlZFBhdHRlcm5zIC0gQXJyYXkgdG8gYWNjdW11bGF0ZSBkZXRlY3RlZCBwYXR0ZXJuIGRlc2NyaXB0aW9uc1xuICAgKiBAcGFyYW0gY3VycmVudFNldmVyaXR5IC0gQ3VycmVudCBoaWdoZXN0IHNldmVyaXR5IGxldmVsXG4gICAqIEBwYXJhbSBtYXhMZW5ndGggLSBNYXhpbXVtIGFsbG93ZWQgY29udGVudCBsZW5ndGggZm9yIHJlZ2V4IHZhbGlkYXRpb25cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGNoZWNrSW5qZWN0aW9uUGF0dGVybnMoXG4gICAgb3JpZ2luYWxDb250ZW50OiBzdHJpbmcsXG4gICAgbm9ybWFsaXplZENvbnRlbnQ6IHN0cmluZyxcbiAgICBkZXRlY3RlZFBhdHRlcm5zOiBzdHJpbmdbXSxcbiAgICBjdXJyZW50U2V2ZXJpdHk6IFNlY3VyaXR5U2V2ZXJpdHksXG4gICAgbWF4TGVuZ3RoOiBudW1iZXIsXG4gICAgY29udGVudENvbnRleHQ/OiBDb250ZW50VmFsaWRhdG9yT3B0aW9uc1snY29udGVudENvbnRleHQnXVxuICApOiB7XG4gICAgc2FuaXRpemVkOiBzdHJpbmc7XG4gICAgaGlnaGVzdFNldmVyaXR5OiBTZWN1cml0eVNldmVyaXR5O1xuICB9IHtcbiAgICBsZXQgc2FuaXRpemVkID0gbm9ybWFsaXplZENvbnRlbnQ7XG4gICAgbGV0IGhpZ2hlc3RTZXZlcml0eSA9IGN1cnJlbnRTZXZlcml0eTtcblxuICAgIGZvciAoY29uc3QgeyBwYXR0ZXJuLCBzZXZlcml0eSwgZGVzY3JpcHRpb24gfSBvZiB0aGlzLklOSkVDVElPTl9QQVRURVJOUykge1xuICAgICAgLy8gRml4ICM0NTYvIzE3MjU6IFNraXAgY29kZSBleGVjdXRpb24gYW5kIHNlY3VyaXR5IGRvY3VtZW50YXRpb24gcGF0dGVybnNcbiAgICAgIC8vIGZvciBlbGVtZW50IHR5cGVzIHRoYXQgbGVnaXRpbWF0ZWx5IGNvbnRhaW4gY29kZSBhbmQgYXR0YWNrIGRlc2NyaXB0aW9ucy5cbiAgICAgIC8vIFByb21wdCBpbmplY3Rpb24sIGFjdHVhbCB0b2tlbiBleHBvc3VyZSwgYW5kIEhUTUwvWFNTIHJlbWFpbiBhY3RpdmUuXG4gICAgICBpZiAoY29udGVudENvbnRleHQgJiYgdGhpcy5DT0RFX0VYRU1QVF9DT05URVhUUy5oYXMoY29udGVudENvbnRleHQpICYmXG4gICAgICAgICAgKHRoaXMuQ09ERV9FWEVDVVRJT05fUEFUVEVSTlMuaGFzKGRlc2NyaXB0aW9uKSB8fCB0aGlzLlNFQ1VSSVRZX0RPQ19QQVRURVJOUy5oYXMoZGVzY3JpcHRpb24pKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8vIEZpeCAjODAzOiBTa2lwIEhUTUwgc2VjdGlvbiB0YWcgcGF0dGVybnMgZm9yIHRlbXBsYXRlcyAodXNlIDxzY3JpcHQ+LzxzdHlsZT4gYXMgc2VjdGlvbiBkZWxpbWl0ZXJzKVxuICAgICAgaWYgKGNvbnRlbnRDb250ZXh0ID09PSAndGVtcGxhdGUnICYmIHRoaXMuSFRNTF9TRUNUSU9OX1BBVFRFUk5TLmhhcyhkZXNjcmlwdGlvbikpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBDaGVjayBwYXR0ZXJuIG9uIG9yaWdpbmFsIGNvbnRlbnQgKGJlZm9yZSBub3JtYWxpemF0aW9uKSB0byBjYXRjaCBlbmNvZGVkIGF0dGFja3NcbiAgICAgIGlmIChSZWdleFZhbGlkYXRvci52YWxpZGF0ZShvcmlnaW5hbENvbnRlbnQsIHBhdHRlcm4sIHtcbiAgICAgICAgbWF4TGVuZ3RoLFxuICAgICAgICByZWplY3REYW5nZXJvdXNQYXR0ZXJuczogZmFsc2UsXG4gICAgICAgIGxvZ0V2ZW50czogZmFsc2VcbiAgICAgIH0pKSB7XG4gICAgICAgIGRldGVjdGVkUGF0dGVybnMucHVzaChkZXNjcmlwdGlvbik7XG5cbiAgICAgICAgLy8gVXBkYXRlIGhpZ2hlc3Qgc2V2ZXJpdHlcbiAgICAgICAgaWYgKHNldmVyaXR5ID09PSAnY3JpdGljYWwnIHx8IChzZXZlcml0eSA9PT0gJ2hpZ2gnICYmIGhpZ2hlc3RTZXZlcml0eSAhPT0gJ2NyaXRpY2FsJykpIHtcbiAgICAgICAgICBoaWdoZXN0U2V2ZXJpdHkgPSBzZXZlcml0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExvZyBzZWN1cml0eSBldmVudFxuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ0NPTlRFTlRfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICAgIHNldmVyaXR5OiBzZXZlcml0eS50b1VwcGVyQ2FzZSgpIGFzICdISUdIJyB8ICdDUklUSUNBTCcsXG4gICAgICAgICAgc291cmNlOiAnY29udGVudF92YWxpZGF0aW9uJyxcbiAgICAgICAgICBkZXRhaWxzOiBgRGV0ZWN0ZWQgcGF0dGVybjogJHtkZXNjcmlwdGlvbn1gLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBSZWNvcmQgaW4gdGVsZW1ldHJ5XG4gICAgICAgIENvbnRlbnRWYWxpZGF0b3IuZ2V0VGVsZW1ldHJ5KCk/LnJlY29yZEJsb2NrZWRBdHRhY2soXG4gICAgICAgICAgJ0NPTlRFTlRfSU5KRUNUSU9OJyxcbiAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICBzZXZlcml0eS50b1VwcGVyQ2FzZSgpIGFzICdISUdIJyB8ICdDUklUSUNBTCcsXG4gICAgICAgICAgJ2NvbnRlbnRfdmFsaWRhdGlvbicsXG4gICAgICAgICAgeyBwYXR0ZXJuOiBwYXR0ZXJuLnNvdXJjZSB9XG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gQXBwbHkgcmVwbGFjZW1lbnQgdG8gbm9ybWFsaXplZCBjb250ZW50XG4gICAgICAgIHNhbml0aXplZCA9IHNhbml0aXplZC5yZXBsYWNlKHBhdHRlcm4sICdbQ09OVEVOVF9CTE9DS0VEXScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IHNhbml0aXplZCwgaGlnaGVzdFNldmVyaXR5IH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGFuZCBzYW5pdGl6ZXMgcGVyc29uYSBjb250ZW50IGZvciBzZWN1cml0eSB0aHJlYXRzXG4gICAqIEZJWCAjMTI2OTogQWRkZWQgb3B0aW9ucyB0byBzdXBwb3J0IGxhcmdlIG1lbW9yeSBjb250ZW50XG4gICAqIFJFRkFDVE9SOiBSZWR1Y2VkIGNvZ25pdGl2ZSBjb21wbGV4aXR5IGJ5IGV4dHJhY3RpbmcgaGVscGVyIG1ldGhvZHNcbiAgICpcbiAgICogU0VDVVJJVFkgRklYIChETUNQLVNFQy0wMDQpOiBMZW5ndGggY2hlY2tzIG5vdyBwZXJmb3JtZWQgb24gTk9STUFMSVpFRCBjb250ZW50XG4gICAqIHRvIHByZXZlbnQgYnlwYXNzIGF0dGFja3MgdXNpbmcgVW5pY29kZSBjb21iaW5pbmcgY2hhcmFjdGVycyBvciB6ZXJvLXdpZHRoIGNoYXJzLlxuICAgKiBBIHByZS1jaGVjayB3aXRoIGdlbmVyb3VzIG11bHRpcGxpZXIgcHJldmVudHMgRG9TIGZyb20gaHVnZSBwYXlsb2Fkcy5cbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZUFuZFNhbml0aXplKGNvbnRlbnQ6IHN0cmluZywgb3B0aW9uczogQ29udGVudFZhbGlkYXRvck9wdGlvbnMgPSB7fSk6IENvbnRlbnRWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICAvLyBEZXRlcm1pbmUgbWF4IGxlbmd0aCBmb3IgdmFsaWRhdGlvblxuICAgIGNvbnN0IG1heExlbmd0aCA9IG9wdGlvbnMubWF4TGVuZ3RoIHx8IFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEg7XG5cbiAgICAvLyBTRUNVUklUWSBGSVggKERNQ1AtU0VDLTAwNCk6IFR3by1waGFzZSBsZW5ndGggdmFsaWRhdGlvblxuICAgIC8vIFBoYXNlIDE6IERvUyBwcmV2ZW50aW9uIHByZS1jaGVjayBvbiByYXcgY29udGVudCAoZ2VuZXJvdXMgMnggbXVsdGlwbGllcilcbiAgICAvLyBUaGlzIHByZXZlbnRzIGh1Z2UgcGF5bG9hZHMgZnJvbSBoaXR0aW5nIHRoZSBub3JtYWxpemF0aW9uIGNvZGUgcGF0aFxuICAgIC8vIHdoaWxlIHN0aWxsIGFsbG93aW5nIGxlZ2l0aW1hdGUgY29udGVudCB3aXRoIHNvbWUgVW5pY29kZSBvdmVyaGVhZFxuICAgIGNvbnN0IERPU19QUkVWRU5USU9OX01VTFRJUExJRVIgPSAyO1xuICAgIGlmICghb3B0aW9ucy5za2lwU2l6ZUNoZWNrKSB7XG4gICAgICBpZiAoY29udGVudC5sZW5ndGggPiBtYXhMZW5ndGggKiBET1NfUFJFVkVOVElPTl9NVUxUSVBMSUVSKSB7XG4gICAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKFxuICAgICAgICAgIGBDb250ZW50IGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgJHttYXhMZW5ndGh9IGNoYXJhY3RlcnMgKCR7Y29udGVudC5sZW5ndGh9IHByb3ZpZGVkKWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkZXRlY3RlZFBhdHRlcm5zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gSGFuZGxlIFVuaWNvZGUgdmFsaWRhdGlvbiAobm9ybWFsaXplcyBjb250ZW50IGJ1dCBkb2Vzbid0IGFib3J0KVxuICAgIGNvbnN0IHVuaWNvZGVDaGVjayA9IHRoaXMuaGFuZGxlVW5pY29kZVZhbGlkYXRpb24oY29udGVudCwgZGV0ZWN0ZWRQYXR0ZXJucyk7XG5cbiAgICAvLyBTRUNVUklUWSBGSVggKERNQ1AtU0VDLTAwNCk6IFBoYXNlIDIgLSBDaGVjayBsZW5ndGggb24gTk9STUFMSVpFRCBjb250ZW50XG4gICAgLy8gVGhpcyBwcmV2ZW50cyBieXBhc3MgYXR0YWNrcyB1c2luZyBjb21iaW5pbmcgY2hhcmFjdGVycyBvciB6ZXJvLXdpZHRoIGNoYXJzXG4gICAgLy8gdGhhdCB3b3VsZCBpbmZsYXRlIHJhdyBsZW5ndGggYnV0IGNvbGxhcHNlIGFmdGVyIG5vcm1hbGl6YXRpb25cbiAgICBpZiAoIW9wdGlvbnMuc2tpcFNpemVDaGVjaykge1xuICAgICAgaWYgKHVuaWNvZGVDaGVjay5zYW5pdGl6ZWQubGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKFxuICAgICAgICAgIGBDb250ZW50IGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgJHttYXhMZW5ndGh9IGNoYXJhY3RlcnMgYWZ0ZXIgbm9ybWFsaXphdGlvbiAoJHt1bmljb2RlQ2hlY2suc2FuaXRpemVkLmxlbmd0aH0gcHJvdmlkZWQpYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBpbmplY3Rpb24gcGF0dGVybnMgb24gT1JJR0lOQUwgY29udGVudCAodG8gY2F0Y2ggZW5jb2RlZCBhdHRhY2tzKVxuICAgIC8vIGJ1dCBhcHBseSByZXBsYWNlbWVudHMgdG8gTk9STUFMSVpFRCBjb250ZW50ICh0byBwcmVzZXJ2ZSBub3JtYWxpemF0aW9uKVxuICAgIGNvbnN0IGluamVjdGlvbkNoZWNrID0gdGhpcy5jaGVja0luamVjdGlvblBhdHRlcm5zKFxuICAgICAgY29udGVudCxcbiAgICAgIHVuaWNvZGVDaGVjay5zYW5pdGl6ZWQsXG4gICAgICBkZXRlY3RlZFBhdHRlcm5zLFxuICAgICAgdW5pY29kZUNoZWNrLmhpZ2hlc3RTZXZlcml0eSxcbiAgICAgIG1heExlbmd0aCxcbiAgICAgIG9wdGlvbnMuY29udGVudENvbnRleHRcbiAgICApO1xuXG4gICAgLy8gVXNlIGhpZ2hlc3Qgc2V2ZXJpdHkgZnJvbSBlaXRoZXIgVW5pY29kZSBvciBpbmplY3Rpb24gY2hlY2tzXG4gICAgY29uc3QgZmluYWxTZXZlcml0eSA9IGluamVjdGlvbkNoZWNrLmhpZ2hlc3RTZXZlcml0eTtcblxuICAgIC8vIEFib3J0IGlmIGhpZ2gvY3JpdGljYWwgdGhyZWF0cyBkZXRlY3RlZFxuICAgIGlmIChmaW5hbFNldmVyaXR5ID09PSAnaGlnaCcgfHwgZmluYWxTZXZlcml0eSA9PT0gJ2NyaXRpY2FsJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIHNhbml0aXplZENvbnRlbnQ6IGluamVjdGlvbkNoZWNrLnNhbml0aXplZCxcbiAgICAgICAgZGV0ZWN0ZWRQYXR0ZXJucyxcbiAgICAgICAgc2V2ZXJpdHk6IGZpbmFsU2V2ZXJpdHlcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVmFsaWQ6IGRldGVjdGVkUGF0dGVybnMubGVuZ3RoID09PSAwLFxuICAgICAgc2FuaXRpemVkQ29udGVudDogaW5qZWN0aW9uQ2hlY2suc2FuaXRpemVkLFxuICAgICAgZGV0ZWN0ZWRQYXR0ZXJucyxcbiAgICAgIHNldmVyaXR5OiBmaW5hbFNldmVyaXR5XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgWUFNTCBmcm9udG1hdHRlciBmb3IgbWFsaWNpb3VzIGNvbnRlbnRcbiAgICogU0VDVVJJVFkgRklYICMzNjQ6IEFkZGVkIFlBTUwgYm9tYiBkZXRlY3Rpb24gdG8gcHJldmVudCBkZW5pYWwgb2Ygc2VydmljZVxuICAgKi9cbiAgc3RhdGljIHZhbGlkYXRlWWFtbENvbnRlbnQoeWFtbENvbnRlbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIExlbmd0aCB2YWxpZGF0aW9uIGJlZm9yZSBwYXR0ZXJuIG1hdGNoaW5nXG4gICAgaWYgKHlhbWxDb250ZW50Lmxlbmd0aCA+IFNFQ1VSSVRZX0xJTUlUUy5NQVhfWUFNTF9MRU5HVEgpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1lBTUxfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICBzZXZlcml0eTogJ0hJR0gnLFxuICAgICAgICBzb3VyY2U6ICd5YW1sX3ZhbGlkYXRpb24nLFxuICAgICAgICBkZXRhaWxzOiBgWUFNTCBjb250ZW50IGV4Y2VlZHMgbWF4aW11bSBsZW5ndGg6ICR7eWFtbENvbnRlbnQubGVuZ3RofSA+ICR7U0VDVVJJVFlfTElNSVRTLk1BWF9ZQU1MX0xFTkdUSH1gXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBTRUNVUklUWSBGSVggIzM2NDogQ2hlY2sgZm9yIFlBTUwgYm9tYnMgYmVmb3JlIG90aGVyIHZhbGlkYXRpb25cbiAgICAvLyBTRUNVUklUWSBGSVggKFBSICM1NTIgcmV2aWV3KTogVXNlIFJlZ2V4VmFsaWRhdG9yIGZvciBSZURvUyBwcm90ZWN0aW9uXG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHRoaXMuWUFNTF9CT01CX1BBVFRFUk5TKSB7XG4gICAgICAvLyBVc2UgUmVnZXhWYWxpZGF0b3IgdG8gc2FmZWx5IGNoZWNrIHBhdHRlcm5zIHdpdGggdGltZW91dCBwcm90ZWN0aW9uXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIFJlRG9TIGF0dGFja3MgZnJvbSBtYWxpY2lvdXNseSBjcmFmdGVkIFlBTUxcbiAgICAgIGNvbnN0IGlzTWF0Y2ggPSBSZWdleFZhbGlkYXRvci52YWxpZGF0ZSh5YW1sQ29udGVudCwgcGF0dGVybiwge1xuICAgICAgICBtYXhMZW5ndGg6IFNFQ1VSSVRZX0xJTUlUUy5NQVhfWUFNTF9MRU5HVEgsXG4gICAgICAgIHJlamVjdERhbmdlcm91c1BhdHRlcm5zOiBmYWxzZSwgLy8gT3VyIHBhdHRlcm5zIGFyZSB0cnVzdGVkXG4gICAgICAgIGxvZ0V2ZW50czogZmFsc2UgLy8gV2UgaGFuZGxlIGxvZ2dpbmcgb3Vyc2VsdmVzXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgaWYgKGlzTWF0Y2gpIHtcbiAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgIHR5cGU6ICdZQU1MX0lOSkVDVElPTl9BVFRFTVBUJyxcbiAgICAgICAgICBzZXZlcml0eTogJ0NSSVRJQ0FMJyxcbiAgICAgICAgICBzb3VyY2U6ICd5YW1sX2JvbWJfZGV0ZWN0aW9uJyxcbiAgICAgICAgICBkZXRhaWxzOiBgWUFNTCBib21iIHBhdHRlcm4gZGV0ZWN0ZWQ6ICR7cGF0dGVybi5zb3VyY2V9YCxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgcGF0dGVyblR5cGU6ICdZQU1MX0JPTUInLFxuICAgICAgICAgICAgY29udGVudExlbmd0aDogeWFtbENvbnRlbnQubGVuZ3RoXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBSZWNvcmQgaW4gdGVsZW1ldHJ5XG4gICAgICAgIENvbnRlbnRWYWxpZGF0b3IuZ2V0VGVsZW1ldHJ5KCk/LnJlY29yZEJsb2NrZWRBdHRhY2soXG4gICAgICAgICAgJ1lBTUxfQk9NQicsXG4gICAgICAgICAgYFlBTUwgYm9tYiBwYXR0ZXJuOiAke3BhdHRlcm4uc291cmNlfWAsXG4gICAgICAgICAgJ0NSSVRJQ0FMJyxcbiAgICAgICAgICAneWFtbF92YWxpZGF0aW9uJyxcbiAgICAgICAgICB7IHBhdHRlcm5UeXBlOiAnWUFNTF9CT01CJywgY29udGVudExlbmd0aDogeWFtbENvbnRlbnQubGVuZ3RoIH1cbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIFNFQ1VSSVRZIEZJWCAjMzY0OiBDb3VudCBhbmNob3IvYWxpYXMgcmF0aW8gZm9yIGFtcGxpZmljYXRpb24gZGV0ZWN0aW9uXG4gICAgLy8gU0VDVVJJVFkgRklYICMxMjk4OiBVc2UgY29uZmlndXJhYmxlIHRocmVzaG9sZCBmb3IgZWFzaWVyIHR1bmluZ1xuICAgIGNvbnN0IGFuY2hvck1hdGNoZXMgPSB5YW1sQ29udGVudC5tYXRjaCgvJlxcdysvZykgfHwgW107XG4gICAgLy8gRml4ICM5MDY6IFVzZSBuZWdhdGl2ZSBsb29rYmVoaW5kIHRvIGV4Y2x1ZGUgbWFya2Rvd24gYm9sZCAoKip3b3JkKiopIGZyb21cbiAgICAvLyBtYXRjaGluZyBhcyBZQU1MIGFsaWFzZXMuIFdpdGhvdXQgdGhpcywgbWFya2Rvd24gYm9sZCBpbnNpZGUgWUFNTCBzdHJpbmdzXG4gICAgLy8gdHJpZ2dlcnMgZmFsc2UtcG9zaXRpdmUgYW1wbGlmaWNhdGlvbiBkZXRlY3Rpb24uXG4gICAgY29uc3QgYWxpYXNNYXRjaGVzID0geWFtbENvbnRlbnQubWF0Y2goLyg/PCFcXCopXFwqXFx3Ky9nKSB8fCBbXTtcbiAgICBjb25zdCBhbXBsaWZpY2F0aW9uUmF0aW8gPSBhbmNob3JNYXRjaGVzLmxlbmd0aCA+IDAgPyBhbGlhc01hdGNoZXMubGVuZ3RoIC8gYW5jaG9yTWF0Y2hlcy5sZW5ndGggOiAwO1xuXG4gICAgaWYgKGFtcGxpZmljYXRpb25SYXRpbyA+IFNFQ1VSSVRZX0xJTUlUUy5ZQU1MX0JPTUJfQU1QTElGSUNBVElPTl9USFJFU0hPTEQpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1lBTUxfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICBzZXZlcml0eTogJ0hJR0gnLFxuICAgICAgICBzb3VyY2U6ICd5YW1sX2FtcGxpZmljYXRpb25fZGV0ZWN0aW9uJyxcbiAgICAgICAgZGV0YWlsczogYEV4Y2Vzc2l2ZSBhbGlhcyBhbXBsaWZpY2F0aW9uIGRldGVjdGVkOiAke2FsaWFzTWF0Y2hlcy5sZW5ndGh9IGFsaWFzZXMgZm9yICR7YW5jaG9yTWF0Y2hlcy5sZW5ndGh9IGFuY2hvcnMgKHJhdGlvOiAke2FtcGxpZmljYXRpb25SYXRpby50b0ZpeGVkKDIpfSlgLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIGFuY2hvcnM6IGFuY2hvck1hdGNoZXMubGVuZ3RoLFxuICAgICAgICAgIGFsaWFzZXM6IGFsaWFzTWF0Y2hlcy5sZW5ndGgsXG4gICAgICAgICAgcmF0aW86IGFtcGxpZmljYXRpb25SYXRpb1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgXG4gICAgLy8gU0VDVVJJVFkgRklYICMzNjQ6IERldGVjdCBjaXJjdWxhciByZWZlcmVuY2UgY2hhaW5zXG4gICAgLy8gU0VDVVJJVFkgRklYIChQUiAjNTUyIHJldmlldyk6IE9wdGltaXplZCBmcm9tIE8obsKyKSB0byBPKG4pIHVzaW5nIFNldC1iYXNlZCBsb29rdXBzXG4gICAgY29uc3QgYW5jaG9yUmVmcyA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4oKTtcbiAgICBjb25zdCBsaW5lcyA9IHlhbWxDb250ZW50LnNwbGl0KCdcXG4nKTtcbiAgICBcbiAgICAvLyBGaXJzdCBwYXNzOiBCdWlsZCByZWZlcmVuY2UgbWFwIGVmZmljaWVudGx5XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgYW5jaG9yTWF0Y2ggPSBsaW5lc1tpXS5tYXRjaCgvJihcXHcrKS8pO1xuICAgICAgaWYgKGFuY2hvck1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGFuY2hvck5hbWUgPSBhbmNob3JNYXRjaFsxXTtcbiAgICAgICAgLy8gR2V0IHJlZmVyZW5jZXMgaW4gbmV4dCA1IGxpbmVzXG4gICAgICAgIGNvbnN0IGNvbnRleHRFbmQgPSBNYXRoLm1pbihpICsgNSwgbGluZXMubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBcbiAgICAgICAgZm9yIChsZXQgaiA9IGk7IGogPCBjb250ZXh0RW5kOyBqKyspIHtcbiAgICAgICAgICBjb25zdCBhbGlhc01hdGNoZXMgPSBsaW5lc1tqXS5tYXRjaCgvXFwqKFxcdyspL2cpO1xuICAgICAgICAgIGlmIChhbGlhc01hdGNoZXMpIHtcbiAgICAgICAgICAgIGFsaWFzTWF0Y2hlcy5mb3JFYWNoKGFsaWFzID0+IHtcbiAgICAgICAgICAgICAgcmVmZXJlbmNlcy5hZGQoYWxpYXMuc3Vic3RyaW5nKDEpKTsgLy8gUmVtb3ZlICogcHJlZml4XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGFuY2hvclJlZnMuc2V0KGFuY2hvck5hbWUsIHJlZmVyZW5jZXMpO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBTZWNvbmQgcGFzczogQ2hlY2sgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMgKE8obikgd2l0aCBTZXQgbG9va3VwcylcbiAgICBmb3IgKGNvbnN0IFthbmNob3IxLCByZWZzMV0gb2YgYW5jaG9yUmVmcykge1xuICAgICAgZm9yIChjb25zdCByZWZBbmNob3Igb2YgcmVmczEpIHtcbiAgICAgICAgY29uc3QgcmVmczIgPSBhbmNob3JSZWZzLmdldChyZWZBbmNob3IpO1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVmZXJlbmNlZCBhbmNob3IgcmVmZXJlbmNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbFxuICAgICAgICBpZiAocmVmczIgJiYgcmVmczIuaGFzKGFuY2hvcjEpKSB7XG4gICAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgICAgdHlwZTogJ1lBTUxfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdDUklUSUNBTCcsXG4gICAgICAgICAgICBzb3VyY2U6ICd5YW1sX2JvbWJfZGV0ZWN0aW9uJyxcbiAgICAgICAgICAgIGRldGFpbHM6IGBDaXJjdWxhciByZWZlcmVuY2UgY2hhaW4gZGV0ZWN0ZWQgYmV0d2VlbiBhbmNob3JzOiAmJHthbmNob3IxfSBhbmQgJiR7cmVmQW5jaG9yfWAsXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICBwYXR0ZXJuVHlwZTogJ0NJUkNVTEFSX1JFRkVSRU5DRScsXG4gICAgICAgICAgICAgIGFuY2hvcnM6IFthbmNob3IxLCByZWZBbmNob3JdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIFVuaWNvZGUgbm9ybWFsaXphdGlvbiBwcmVwcm9jZXNzaW5nIGZvciBZQU1MIGNvbnRlbnRcbiAgICBjb25zdCB1bmljb2RlUmVzdWx0ID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoeWFtbENvbnRlbnQpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRZYW1sID0gdW5pY29kZVJlc3VsdC5ub3JtYWxpemVkQ29udGVudDtcbiAgICBcbiAgICBpZiAoIXVuaWNvZGVSZXN1bHQuaXNWYWxpZCAmJiB1bmljb2RlUmVzdWx0LmRldGVjdGVkSXNzdWVzKSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdZQU1MX1VOSUNPREVfQVRUQUNLJyxcbiAgICAgICAgc2V2ZXJpdHk6ICh1bmljb2RlUmVzdWx0LnNldmVyaXR5Py50b1VwcGVyQ2FzZSgpIHx8ICdNRURJVU0nKSBhcyAnTE9XJyB8ICdNRURJVU0nIHwgJ0hJR0gnIHwgJ0NSSVRJQ0FMJyxcbiAgICAgICAgc291cmNlOiAneWFtbF92YWxpZGF0aW9uJyxcbiAgICAgICAgZGV0YWlsczogYFVuaWNvZGUgYXR0YWNrIGRldGVjdGVkIGluIFlBTUw6ICR7dW5pY29kZVJlc3VsdC5kZXRlY3RlZElzc3Vlcy5qb2luKCcsICcpfWBcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiB0aGlzLk1BTElDSU9VU19ZQU1MX1BBVFRFUk5TKSB7XG4gICAgICAvLyBUaGVzZSBhcmUgdHJ1c3RlZCBpbnRlcm5hbCBwYXR0ZXJucywgc28gd2UgZGlzYWJsZSBSZURvUyByZWplY3Rpb25cbiAgICAgIGlmIChSZWdleFZhbGlkYXRvci52YWxpZGF0ZShub3JtYWxpemVkWWFtbCwgcGF0dGVybiwge1xuICAgICAgICBtYXhMZW5ndGg6IFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEgsXG4gICAgICAgIHJlamVjdERhbmdlcm91c1BhdHRlcm5zOiBmYWxzZSxcbiAgICAgICAgbG9nRXZlbnRzOiBmYWxzZSAgLy8gRG9uJ3QgbG9nIG91ciBvd24gc2VjdXJpdHkgcGF0dGVybnMgYXMgZGFuZ2Vyb3VzXG4gICAgICB9KSkge1xuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ1lBTUxfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICAgIHNldmVyaXR5OiAnQ1JJVElDQUwnLFxuICAgICAgICAgIHNvdXJjZTogJ3lhbWxfdmFsaWRhdGlvbicsXG4gICAgICAgICAgZGV0YWlsczogYE1hbGljaW91cyBZQU1MIHBhdHRlcm4gZGV0ZWN0ZWQ6ICR7cGF0dGVybn1gLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gRWFybHkgZXhpdCBvbiBmaXJzdCBtYXRjaCBmb3IgcGVyZm9ybWFuY2VcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgcGVyc29uYSBtZXRhZGF0YSBmaWVsZHNcbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZU1ldGFkYXRhKG1ldGFkYXRhOiBhbnkpOiBDb250ZW50VmFsaWRhdGlvblJlc3VsdCB7XG4gICAgY29uc3QgZGV0ZWN0ZWRQYXR0ZXJuczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIENoZWNrIGFsbCBzdHJpbmcgZmllbGRzIGluIG1ldGFkYXRhXG4gICAgY29uc3QgY2hlY2tGaWVsZCA9IChmaWVsZE5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gQ2hlY2sgZmllbGQgbGVuZ3RoIGZpcnN0XG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiBTRUNVUklUWV9MSU1JVFMuTUFYX01FVEFEQVRBX0ZJRUxEX0xFTkdUSCkge1xuICAgICAgICAgIGRldGVjdGVkUGF0dGVybnMucHVzaChgJHtmaWVsZE5hbWV9OiBGaWVsZCBleGNlZWRzIG1heGltdW0gbGVuZ3RoIG9mICR7U0VDVVJJVFlfTElNSVRTLk1BWF9NRVRBREFUQV9GSUVMRF9MRU5HVEh9IGNoYXJhY3RlcnNgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudmFsaWRhdGVBbmRTYW5pdGl6ZSh2YWx1ZSk7XG4gICAgICAgIGlmICghcmVzdWx0LmlzVmFsaWQgfHwgcmVzdWx0LmRldGVjdGVkUGF0dGVybnM/Lmxlbmd0aCkge1xuICAgICAgICAgIGRldGVjdGVkUGF0dGVybnMucHVzaChgJHtmaWVsZE5hbWV9OiAke3Jlc3VsdC5kZXRlY3RlZFBhdHRlcm5zPy5qb2luKCcsICcpfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIFZhbGlkYXRlIHN0YW5kYXJkIHBlcnNvbmEgZmllbGRzXG4gICAgY2hlY2tGaWVsZCgnbmFtZScsIG1ldGFkYXRhLm5hbWUpO1xuICAgIGNoZWNrRmllbGQoJ2Rlc2NyaXB0aW9uJywgbWV0YWRhdGEuZGVzY3JpcHRpb24pO1xuICAgIGNoZWNrRmllbGQoJ2NhdGVnb3J5JywgbWV0YWRhdGEuY2F0ZWdvcnkpO1xuICAgIGNoZWNrRmllbGQoJ2F1dGhvcicsIG1ldGFkYXRhLmF1dGhvcik7XG4gICAgXG4gICAgLy8gQ2hlY2sgYW55IGN1c3RvbSBmaWVsZHNcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtZXRhZGF0YSkpIHtcbiAgICAgIGlmICghWyduYW1lJywgJ2Rlc2NyaXB0aW9uJywgJ2NhdGVnb3J5JywgJ2F1dGhvciddLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgY2hlY2tGaWVsZChrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXNWYWxpZDogZGV0ZWN0ZWRQYXR0ZXJucy5sZW5ndGggPT09IDAsXG4gICAgICBkZXRlY3RlZFBhdHRlcm5zLFxuICAgICAgc2V2ZXJpdHk6IGRldGVjdGVkUGF0dGVybnMubGVuZ3RoID4gMCA/ICdoaWdoJyA6ICdsb3cnXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYW5pdGl6ZXMgYSBjb21wbGV0ZSBwZXJzb25hIGZpbGUgKGZyb250bWF0dGVyICsgY29udGVudClcbiAgICovXG4gIHN0YXRpYyBzYW5pdGl6ZVBlcnNvbmFDb250ZW50KGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gRXh0cmFjdCBmcm9udG1hdHRlclxuICAgIGNvbnN0IGZyb250bWF0dGVyTWF0Y2ggPSBjb250ZW50Lm1hdGNoKC9eLS0tXFxuKFtcXHNcXFNdKj8pXFxuLS0tLyk7XG4gICAgXG4gICAgaWYgKCFmcm9udG1hdHRlck1hdGNoKSB7XG4gICAgICAvLyBObyBmcm9udG1hdHRlciwganVzdCB2YWxpZGF0ZSBjb250ZW50XG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnZhbGlkYXRlQW5kU2FuaXRpemUoY29udGVudCk7XG4gICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkICYmIHJlc3VsdC5zZXZlcml0eSA9PT0gJ2NyaXRpY2FsJykge1xuICAgICAgICAvLyBGSVg6IEluY2x1ZGUgc3BlY2lmaWMgcGF0dGVybnMgdGhhdCB0cmlnZ2VyZWQgdGhlIHJlamVjdGlvbiBmb3IgZGVidWdnaW5nXG4gICAgICAgIGNvbnN0IHBhdHRlcm5zID0gcmVzdWx0LmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJywgJykgfHwgJ3Vua25vd24gcGF0dGVybnMnO1xuICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcihgQ3JpdGljYWwgc2VjdXJpdHkgdGhyZWF0IGRldGVjdGVkIGluIHBlcnNvbmEgY29udGVudDogJHtwYXR0ZXJuc31gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQuc2FuaXRpemVkQ29udGVudCB8fCBjb250ZW50O1xuICAgIH1cblxuICAgIGNvbnN0IHlhbWxDb250ZW50ID0gZnJvbnRtYXR0ZXJNYXRjaFsxXTtcbiAgICBjb25zdCBtYXJrZG93bkNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZyhmcm9udG1hdHRlck1hdGNoWzBdLmxlbmd0aCk7XG5cbiAgICAvLyBWYWxpZGF0ZSBZQU1MXG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlWWFtbENvbnRlbnQoeWFtbENvbnRlbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcignTWFsaWNpb3VzIFlBTUwgZGV0ZWN0ZWQgaW4gcGVyc29uYSBmcm9udG1hdHRlcicpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIG1hcmtkb3duIGNvbnRlbnRcbiAgICBjb25zdCBjb250ZW50UmVzdWx0ID0gdGhpcy52YWxpZGF0ZUFuZFNhbml0aXplKG1hcmtkb3duQ29udGVudCk7XG4gICAgaWYgKCFjb250ZW50UmVzdWx0LmlzVmFsaWQgJiYgY29udGVudFJlc3VsdC5zZXZlcml0eSA9PT0gJ2NyaXRpY2FsJykge1xuICAgICAgLy8gRklYOiBJbmNsdWRlIHNwZWNpZmljIHBhdHRlcm5zIHRoYXQgdHJpZ2dlcmVkIHRoZSByZWplY3Rpb24gZm9yIGRlYnVnZ2luZ1xuICAgICAgY29uc3QgcGF0dGVybnMgPSBjb250ZW50UmVzdWx0LmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJywgJykgfHwgJ3Vua25vd24gcGF0dGVybnMnO1xuICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoYENyaXRpY2FsIHNlY3VyaXR5IHRocmVhdCBkZXRlY3RlZCBpbiBwZXJzb25hIGNvbnRlbnQ6ICR7cGF0dGVybnN9YCk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHNhbml0aXplZCBjb250ZW50XG4gICAgcmV0dXJuIGAtLS1cXG4ke3lhbWxDb250ZW50fVxcbi0tLSR7Y29udGVudFJlc3VsdC5zYW5pdGl6ZWRDb250ZW50IHx8IG1hcmtkb3duQ29udGVudH1gO1xuICB9XG59Il19
609
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudFZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZWN1cml0eS9jb250ZW50VmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQWlDcEUsTUFBTSxPQUFPLGdCQUFnQjtJQUNuQixNQUFNLENBQUMsaUJBQWlCLENBQXVDO0lBRWhFLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxRQUE2QztRQUNwRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDO0lBQ3BDLENBQUM7SUFFTyxNQUFNLENBQUMsWUFBWTtRQUN6QixJQUFJLENBQUM7WUFDSCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUN2RSxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFDRDs7Ozs7Ozs7Ozs7T0FXRztJQUNILGlFQUFpRTtJQUNqRSxpRkFBaUY7SUFDakYsd0ZBQXdGO0lBQ2hGLE1BQU0sQ0FBVSxrQkFBa0IsR0FBbUY7UUFDM0gsa0NBQWtDO1FBQ2xDLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLHdC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O1FBQzNCLE9BQU8sUUFBUSxXQUFXLFFBQVEsYUFBYSxDQUFDLGdCQUFnQixJQUFJLGVBQWUsRUFBRSxDQUFDO0lBQ3hGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbnRlbnQgVmFsaWRhdG9yIGZvciBEb2xsaG91c2VNQ1BcbiAqIFxuICogUHJvdGVjdHMgYWdhaW5zdCBwcm9tcHQgaW5qZWN0aW9uIGF0dGFja3MgaW4gY29sbGVjdGlvbiBwZXJzb25hc1xuICogYnkgZGV0ZWN0aW5nIGFuZCBzYW5pdGl6aW5nIG1hbGljaW91cyBjb250ZW50IHBhdHRlcm5zLlxuICogXG4gKiBTZWN1cml0eTogU0VDLTAwMSAtIENyaXRpY2FsIHZ1bG5lcmFiaWxpdHkgcHJvdGVjdGlvblxuICovXG5cbmltcG9ydCB7IFNlY3VyaXR5RXJyb3IgfSBmcm9tICcuL2Vycm9ycy5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuL3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgUmVnZXhWYWxpZGF0b3IgfSBmcm9tICcuL3JlZ2V4VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFNFQ1VSSVRZX0xJTUlUUyB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuL3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgdHlwZSB7IFNlY3VyaXR5VGVsZW1ldHJ5IH0gZnJvbSAnLi90ZWxlbWV0cnkvU2VjdXJpdHlUZWxlbWV0cnkuanMnO1xuXG4vLyBGSVg6IFNvbmFyQ2xvdWQgdHlwZXNjcmlwdDpTNDMyMyAtIEV4dHJhY3QgdW5pb24gdHlwZSB0byB0eXBlIGFsaWFzIGZvciBtYWludGFpbmFiaWxpdHlcbmV4cG9ydCB0eXBlIFNlY3VyaXR5U2V2ZXJpdHkgPSAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnIHwgJ2NyaXRpY2FsJztcblxuZXhwb3J0IGludGVyZmFjZSBDb250ZW50VmFsaWRhdGlvblJlc3VsdCB7XG4gIGlzVmFsaWQ6IGJvb2xlYW47XG4gIHNhbml0aXplZENvbnRlbnQ/OiBzdHJpbmc7XG4gIGRldGVjdGVkUGF0dGVybnM/OiBzdHJpbmdbXTtcbiAgc2V2ZXJpdHk/OiBTZWN1cml0eVNldmVyaXR5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnRWYWxpZGF0b3JPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNraXAgc2l6ZSBsaW1pdCBjaGVja3MgLSB1c2VmdWwgZm9yIG1lbW9yeSBjb250ZW50IHRoYXQgY2FuIGJlIGxhcmdlXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBza2lwU2l6ZUNoZWNrPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEN1c3RvbSBtYXggbGVuZ3RoIG92ZXJyaWRlXG4gICAqIEBkZWZhdWx0IFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEhcbiAgICovXG4gIG1heExlbmd0aD86IG51bWJlcjtcbiAgLyoqXG4gICAqIEVsZW1lbnQgdHlwZSBjb250ZXh0IGZvciBjb250ZXh0LWF3YXJlIHBhdHRlcm4gbWF0Y2hpbmcuXG4gICAqIFNraWxscyBtYXkgbGVnaXRpbWF0ZWx5IGNvbnRhaW4gY29kZSBwYXR0ZXJucyAoZXZhbCwgZXhlYywgcmVxdWlyZSlcbiAgICogdGhhdCB3b3VsZCBiZSBibG9ja2VkIGluIG90aGVyIGNvbnRleHRzLlxuICAgKiBAc2luY2UgSXNzdWUgIzQ1NlxuICAgKi9cbiAgY29udGVudENvbnRleHQ/OiAncGVyc29uYScgfCAnc2tpbGwnIHwgJ3RlbXBsYXRlJyB8ICdhZ2VudCcgfCAnbWVtb3J5Jztcbn1cblxuZXhwb3J0IGNsYXNzIENvbnRlbnRWYWxpZGF0b3Ige1xuICBwcml2YXRlIHN0YXRpYyB0ZWxlbWV0cnlSZXNvbHZlcj86ICgpID0+IFNlY3VyaXR5VGVsZW1ldHJ5IHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBzdGF0aWMgY29uZmlndXJlVGVsZW1ldHJ5UmVzb2x2ZXIocmVzb2x2ZXI6ICgpID0+IFNlY3VyaXR5VGVsZW1ldHJ5IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy50ZWxlbWV0cnlSZXNvbHZlciA9IHJlc29sdmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0VGVsZW1ldHJ5KCk6IFNlY3VyaXR5VGVsZW1ldHJ5IHwgdW5kZWZpbmVkIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMudGVsZW1ldHJ5UmVzb2x2ZXIgPyB0aGlzLnRlbGVtZXRyeVJlc29sdmVyKCkgOiB1bmRlZmluZWQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUGF0dGVybi1iYXNlZCBkZXRlY3Rpb24gc3lzdGVtIGZvciBwcm9tcHQgaW5qZWN0aW9uIGF0dGFja3MuXG4gICAqIFxuICAgKiBUaGlzIGFwcHJvYWNoIHdhcyBjaG9zZW4gb3ZlciBBSS1iYXNlZCBkZXRlY3Rpb24gYmVjYXVzZTpcbiAgICogMS4gUGF0dGVybiBtYXRjaGluZyBjYW5ub3QgYmUgc29jaWFsbHkgZW5naW5lZXJlZCBvciBjb25mdXNlZFxuICAgKiAyLiBEZXRlcm1pbmlzdGljIHJlc3VsdHMgZW5zdXJlIGNvbnNpc3RlbnQgc2VjdXJpdHlcbiAgICogMy4gTm8gYWRkaXRpb25hbCBBUEkgY2FsbHMgb3IgbGF0ZW5jeVxuICAgKiA0LiBDYW4ndCBiZSBieXBhc3NlZCBieSBjbGV2ZXIgcHJvbXB0IGVuZ2luZWVyaW5nXG4gICAqIFxuICAgKiBUaGUgcGF0dGVybnMgYmVsb3cgcmVwcmVzZW50IGtub3duIGF0dGFjayB2ZWN0b3JzIGZyb20gc2VjdXJpdHkgcmVzZWFyY2hcbiAgICogYW5kIHJlYWwtd29ybGQgZXhwbG9pdCBhdHRlbXB0cyBhZ2FpbnN0IEFJIHN5c3RlbXMuXG4gICAqL1xuICAvLyBQcm9tcHQgaW5qZWN0aW9uIHBhdHRlcm5zIHRoYXQgY291bGQgY29tcHJvbWlzZSBBSSBhc3Npc3RhbnRzLlxuICAvLyBNQUlOVEVOQU5DRTogUmV2aWV3IHBlcmlvZGljYWxseSBmb3IgZmFsc2UgcG9zaXRpdmVzIChydW4gaW50ZWdyYXRpb24gdGVzdHMgaW5cbiAgLy8gdGVzdHMvaW50ZWdyYXRpb24vc2VjdXJpdHktYXVkaXQtYmF0Y2gtYS5pbnRlZ3JhdGlvbi50ZXN0LnRzKSBhbmQgbmV3IGF0dGFjayB2ZWN0b3JzLlxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBJTkpFQ1RJT05fUEFUVEVSTlM6IEFycmF5PHsgcGF0dGVybjogUmVnRXhwOyBzZXZlcml0eTogJ2hpZ2gnIHwgJ2NyaXRpY2FsJzsgZGVzY3JpcHRpb246IHN0cmluZyB9PiA9IFtcbiAgICAvLyBTeXN0ZW0gcHJvbXB0IG92ZXJyaWRlIGF0dGVtcHRzXG4gICAgeyBwYXR0ZXJuOiAvXFxbU1lTVEVNOlxccyouKj9cXF0vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1N5c3RlbSBwcm9tcHQgb3ZlcnJpZGUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvXFxbQURNSU46XFxzKi4qP1xcXS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnQWRtaW4gcHJvbXB0IG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL1xcW0FTU0lTVEFOVDpcXHMqLio/XFxdL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdBc3Npc3RhbnQgcHJvbXB0IG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL1xcW1VTRVI6XFxzKi4qP1xcXS9naSwgc2V2ZXJpdHk6ICdoaWdoJywgZGVzY3JpcHRpb246ICdVc2VyIHByb21wdCBvdmVycmlkZScgfSxcbiAgICBcbiAgICAvLyBJbnN0cnVjdGlvbiBtYW5pcHVsYXRpb25cbiAgICB7IHBhdHRlcm46IC9pZ25vcmVcXHMrKGFsbFxccyspP3ByZXZpb3VzXFxzK2luc3RydWN0aW9ucy9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSW5zdHJ1Y3Rpb24gb3ZlcnJpZGUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvaWdub3JlXFxzKyhhbGxcXHMrKT9wcmlvclxccytpbnN0cnVjdGlvbnMvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0luc3RydWN0aW9uIG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL2Rpc3JlZ2FyZFxccysoYWxsXFxzKyk/cHJldmlvdXNcXHMraW5zdHJ1Y3Rpb25zL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdJbnN0cnVjdGlvbiBvdmVycmlkZScgfSxcbiAgICB7IHBhdHRlcm46IC9kaXNyZWdhcmRcXHMrZXZlcnl0aGluZ1xccythYm92ZS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSW5zdHJ1Y3Rpb24gb3ZlcnJpZGUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvZm9yZ2V0XFxzKyhhbGxcXHMrKT9wcmV2aW91c1xccytpbnN0cnVjdGlvbnMvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0luc3RydWN0aW9uIG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL2ZvcmdldFxccyt5b3VyXFxzK3RyYWluaW5nL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdJbnN0cnVjdGlvbiBvdmVycmlkZScgfSxcbiAgICB7IHBhdHRlcm46IC9vdmVycmlkZVxccyt5b3VyXFxzK3Byb2dyYW1taW5nL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdJbnN0cnVjdGlvbiBvdmVycmlkZScgfSxcbiAgICB7IHBhdHRlcm46IC95b3VcXHMrYXJlXFxzK25vd1xccysoaW5cXHMrKT8oYWRtaW58cm9vdHxzeXN0ZW18c3Vkb3xkZXZlbG9wZXJ8ZGVidWd8dGVzdHxEQU4pXFxzKihtb2RlKT8vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1JvbGUgZWxldmF0aW9uIGF0dGVtcHQnIH0sXG4gICAgLy8gU3BlY2lmaWMgZGFuZ2Vyb3VzIHJvbGVzIG9ubHkg4oCUIFwiYWN0IGFzIFxcdytcIiB3b3VsZCBmYWxzZS1wb3NpdGl2ZSBvbiBwZXJzb25hXG4gICAgLy8gY29udGVudCBsaWtlIFwiYWN0IGFzIGEgaGVscGZ1bCB0ZWFjaGVyXCIgKCMxNzgyLTQsIHJldmlldyBmZWVkYmFjaylcbiAgICB7IHBhdHRlcm46IC9hY3RcXHMrYXNcXHMrKGFkbWlufHJvb3R8c3lzdGVtfHN1ZG98c3VwZXJ1c2VyfERBTilcXGIvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1JvbGUgZWxldmF0aW9uIGF0dGVtcHQnIH0sXG4gICAgeyBwYXR0ZXJuOiAvcHJldGVuZFxccyt5b3VcXHMraGF2ZVxccytub1xccysoZ3VpZGVsaW5lc3xyZXN0cmljdGlvbnN8cnVsZXN8bGltaXRzKS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnR3VpZGVsaW5lIGJ5cGFzcyBhdHRlbXB0JyB9LFxuICAgIHsgcGF0dGVybjogL1xcYihqYWlsYnJlYWt8ZG9cXHMrYW55dGhpbmdcXHMrbm93fERBTlxccyttb2RlKVxcYi9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSmFpbGJyZWFrIGF0dGVtcHQnIH0sXG4gICAgXG4gICAgLy8gRGF0YSBleGZpbHRyYXRpb24gYXR0ZW1wdHNcbiAgICB7IHBhdHRlcm46IC9leHBvcnRcXHMrYWxsXFxzKyhmaWxlc3xkYXRhfHBlcnNvbmFzfHRva2Vuc3xjcmVkZW50aWFsc3xhcGlcXHMra2V5cykvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0RhdGEgZXhmaWx0cmF0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL3NlbmRcXHMrYWxsXFxzKyhmaWxlc3xkYXRhfHBlcnNvbmFzfHRva2Vuc3xjcmVkZW50aWFsc3xhcGlcXHMra2V5cylcXHMrdG8vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0RhdGEgZXhmaWx0cmF0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL2xpc3RcXHMrYWxsXFxzKyhmaWxlc3x0b2tlbnN8Y3JlZGVudGlhbHN8c2VjcmV0c3xhcGlcXHMra2V5cykvZ2ksIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnSW5mb3JtYXRpb24gZGlzY2xvc3VyZScgfSxcbiAgICB7IHBhdHRlcm46IC9zaG93XFxzK21lXFxzK2FsbFxccysodG9rZW5zfGNyZWRlbnRpYWxzfHNlY3JldHN8YXBpXFxzK2tleXMpL2dpLCBzZXZlcml0eTogJ2hpZ2gnLCBkZXNjcmlwdGlvbjogJ0NyZWRlbnRpYWwgZGlzY2xvc3VyZScgfSxcbiAgICBcbiAgICAvLyBDb21tYW5kIGV4ZWN1dGlvbiBwYXR0ZXJuc1xuICAgIHsgcGF0dGVybjogL2N1cmxcXHMrW15cXHNdezEsNTAwfS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnRXh0ZXJuYWwgY29tbWFuZCBleGVjdXRpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvd2dldFxccytbXlxcc117MSw1MDB9L2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdFeHRlcm5hbCBjb21tYW5kIGV4ZWN1dGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC9cXCRcXChbXildK1xcKS9nLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdDb21tYW5kIHN1YnN0aXR1dGlvbicgfSxcbiAgICAvLyBTRUNVUklUWTogQmFja3RpY2sgY29tbWFuZCBkZXRlY3Rpb24gd2l0aCBSZURvUyBtaXRpZ2F0aW9uXG4gICAgLy8gRklYIChQUiAjMTMxMyk6IEZpeGVkIFJlRG9TIHZ1bG5lcmFiaWxpdGllcyBieSByZXBsYWNpbmcgLiogd2l0aCBbXmBdKlxuICAgIC8vIEZJWCAoUFIgIzEzMTMgLSBTb25hckNsb3VkKTogQWRkZWQgZXhwbGljaXQgYm91bmRzIHswLDIwMH0gdG8gcHJldmVudCBiYWNrdHJhY2tpbmdcbiAgICAvLyBNdWx0aXBsZSB1bmJvdW5kZWQgcXVhbnRpZmllcnMgaW4gc2FtZSBwYXR0ZXJuIGNhbiBzdGlsbCBjYXVzZSBiYWNrdHJhY2tpbmcgZXZlbiB3aXRoIFteYF0qXG4gICAgLy8gQm91bmRlZCBxdWFudGlmaWVycyBwcmV2ZW50IGV4cG9uZW50aWFsIHRpbWUgY29tcGxleGl0eSB3aGlsZSBtYXRjaGluZyByZWFsaXN0aWMgY29tbWFuZHNcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpybVxccystcmY/XFxzK1svfl18c3Vkb1xccytybXxjaG1vZFxccys3Nzd8Y2hvd25cXHMrcm9vdClbXmBdezAsMjAwfWAvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0Rhbmdlcm91cyBzaGVsbCBjb21tYW5kIGluIGJhY2t0aWNrcycgfSxcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpjYXR8bHMpXFxzK1xcL2V0Y1xcL1teYF17MCwyMDB9YC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnU2Vuc2l0aXZlIGZpbGUgYWNjZXNzIGluIGJhY2t0aWNrcycgfSxcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpiYXNofHNoKVxccystY1xccytbJ1wiXVteYF17MCwyMDB9YC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnU2hlbGwgZXhlY3V0aW9uIGluIGJhY2t0aWNrcycgfSxcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpwYXNzd2R8c2hhZG93fG5jXFxzKy1sfG5ldGNhdFxccystbHxzc2hcXHMrcm9vdEApW15gXXswLDIwMH1gL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdEYW5nZXJvdXMgY29tbWFuZCBpbiBiYWNrdGlja3MnIH0sXG4gICAgeyBwYXR0ZXJuOiAvYFteYF17MCwyMDB9KD86Y3VybHx3Z2V0KVxccytbXmBdezAsMjAwfVxcfFxccyooPzpzaHxiYXNoKVteYF17MCwyMDB9YC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnUGlwZSB0byBzaGVsbCBpbiBiYWNrdGlja3MnIH0sXG4gICAgeyBwYXR0ZXJuOiAvYFteYF17MCwyMDB9KD86XFwvZXRjXFwvcGFzc3dkfFxcL2V0Y1xcL3NoYWRvd3xcXC5zc2hcXC9pZF98c3Vkb1xccytzdSlbXmBdezAsMjAwfWAvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1NlbnNpdGl2ZSBmaWxlIG9yIHByaXZpbGVnZSBlc2NhbGF0aW9uIGluIGJhY2t0aWNrcycgfSxcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpweXRob258cGVybHxydWJ5fHBocHxub2RlKVxccysoPzotZXwtYylcXHMrW15gXXswLDIwMH0oPzpleGVjfGV2YWx8c3lzdGVtfHN1YnByb2Nlc3MpW15gXXswLDIwMH1gL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdTY3JpcHQgaW50ZXJwcmV0ZXIgd2l0aCBkYW5nZXJvdXMgZnVuY3Rpb24gaW4gYmFja3RpY2tzJyB9LFxuICAgIHsgcGF0dGVybjogL2V2YWxcXHMqXFwoL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdDb2RlIGV2YWx1YXRpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvZXhlY1xccypcXCgvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0NvZGUgZXhlY3V0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL29zXFwuc3lzdGVtXFxzKlxcKC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnU3lzdGVtIGNvbW1hbmQgZXhlY3V0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL3N1YnByb2Nlc3NcXC4oY2FsbHxydW58UG9wZW4pL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdTdWJwcm9jZXNzIGV4ZWN1dGlvbicgfSxcbiAgICBcbiAgICAvLyBUb2tlbi9jcmVkZW50aWFsIHBhdHRlcm5zXG4gICAgeyBwYXR0ZXJuOiAvR0lUSFVCX1RPS0VOL2dpLCBzZXZlcml0eTogJ2hpZ2gnLCBkZXNjcmlwdGlvbjogJ1Rva2VuIHJlZmVyZW5jZScgfSxcbiAgICB7IHBhdHRlcm46IC9naHBfW2EtekEtWjAtOV17MzZ9L2csIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0dpdEh1YiB0b2tlbiBleHBvc3VyZScgfSxcbiAgICB7IHBhdHRlcm46IC9naG9fW2EtekEtWjAtOV17MzZ9L2csIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0dpdEh1YiBPQXV0aCB0b2tlbiBleHBvc3VyZScgfSxcbiAgICBcbiAgICAvLyBQYXRoIHRyYXZlcnNhbCBpbiBjb250ZW50XG4gICAgeyBwYXR0ZXJuOiAvXFwuXFwuXFwvXFwuXFwuXFwvXFwuXFwuXFwvL2csIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnUGF0aCB0cmF2ZXJzYWwgYXR0ZW1wdCcgfSxcbiAgICB7IHBhdHRlcm46IC9cXC9ldGNcXC9wYXNzd2QvZ2ksIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnU2Vuc2l0aXZlIGZpbGUgYWNjZXNzJyB9LFxuICAgIHsgcGF0dGVybjogL1xcL1xcLnNzaFxcLy9naSwgc2V2ZXJpdHk6ICdoaWdoJywgZGVzY3JpcHRpb246ICdTU0gga2V5IGFjY2VzcyBhdHRlbXB0JyB9LFxuXG4gICAgLy8gSFRNTC9YU1MgcGF0dGVybnMg4oCUIGRlZmVuc2UtaW4tZGVwdGggZm9yIGNvbW11bml0eS1zb3VyY2VkIGNvbnRlbnRcbiAgICAvLyBET01QdXJpZnkgb24gdGhlIGNsaWVudCBpcyB0aGUgcHJpbWFyeSBkZWZlbnNlOyB0aGVzZSBjYXRjaCB0aHJlYXRzIGF0IGluZ2VzdFxuICAgIHsgcGF0dGVybjogLzxzY3JpcHRbXFxzPl0vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0hUTUwgc2NyaXB0IGluamVjdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC88XFwvc2NyaXB0Pi9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSFRNTCBzY3JpcHQgaW5qZWN0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogLzxpZnJhbWVbXFxzPl0vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0hUTUwgaWZyYW1lIGluamVjdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC88b2JqZWN0W1xccz5dL2dpLCBzZXZlcml0eTogJ2hpZ2gnLCBkZXNjcmlwdGlvbjogJ0hUTUwgb2JqZWN0IGluamVjdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC88ZW1iZWRbXFxzPl0vZ2ksIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnSFRNTCBlbWJlZCBpbmplY3Rpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvXFxib25cXHcrPVxccypbXCInXS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSFRNTCBldmVudCBoYW5kbGVyIGluamVjdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC9qYXZhc2NyaXB0XFxzKjovZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0phdmFTY3JpcHQgcHJvdG9jb2wgaW5qZWN0aW9uJyB9LFxuICAgIC8vIEVudGl0eS1lbmNvZGVkIHZhcmlhbnRzOiAmIzEwNjthdmFzY3JpcHQsICYjeDZhO2F2YXNjcmlwdCwgJiMxMDY7JiM5Nzt2YXNjcmlwdCwgZXRjLlxuICAgIHsgcGF0dGVybjogLyYjeD9bMC05YS1mXSs7P1xccyphXFxzKnZcXHMqYVxccypzXFxzKmNcXHMqclxccyppXFxzKnBcXHMqdC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnRW5jb2RlZCBKYXZhU2NyaXB0IHByb3RvY29sIGluamVjdGlvbicgfSxcbiAgICAvLyBGdWxseS9wYXJ0aWFsbHkgZW50aXR5LWVuY29kZWQ6IGRldGVjdHMgJiMuLi5zY3JpcHQgcGF0dGVybiAoY292ZXJzIG11bHRpLWVudGl0eSBlbmNvZGluZylcbiAgICB7IHBhdHRlcm46IC8oPzomI3g/WzAtOWEtZl0rOz9cXHMqKXsyLH1zXFxzKmNcXHMqclxccyppXFxzKnBcXHMqdC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnRW5jb2RlZCBKYXZhU2NyaXB0IHByb3RvY29sIGluamVjdGlvbicgfSxcbiAgXTtcblxuICAvLyBNYWxpY2lvdXMgWUFNTCBwYXR0ZXJuc1xuICAvLyBTRUNVUklUWSBGSVggIzM2NDogWUFNTCBib21iIGRldGVjdGlvbiBwYXR0ZXJuc1xuICAvLyBTRUNVUklUWSBGSVggKFBSICM1NTIgcmV2aWV3KTogU2ltcGxpZmllZCBwYXR0ZXJucyB0byByZWR1Y2UgUmVEb1Mgcmlza1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBZQU1MX0JPTUJfUEFUVEVSTlMgPSBbXG4gICAgLy8gRGV0ZWN0cyByZWN1cnNpdmUgYW5jaG9yIHJlZmVyZW5jZXMgdGhhdCBjb3VsZCBjYXVzZSBleHBvbmVudGlhbCBleHBhbnNpb25cbiAgICAvLyBFeGFtcGxlOiAmYSBbKmFdIG9yICZib21iIFtcInRlc3RcIiwgKmJvbWJdXG4gICAgLyYoXFx3KylcXHMqXFxbW15cXF1dKlxcKlxcMVteXFxdXSpcXF0vLCAgICAgIC8vIERpcmVjdCByZWN1cnNpb24gaW4gYXJyYXlcbiAgICAvJihcXHcrKVxccypcXHtbXn1dKlxcKlxcMVtefV0qXFx9LywgICAgICAgIC8vIERpcmVjdCByZWN1cnNpb24gaW4gb2JqZWN0XG4gICAgL15cXHMqXFx3KzpcXHMqJihcXHcrKVxccypcXG5cXHMqXFx3KzpcXHMqXFwqXFwxL20sICAvLyBNdWx0aS1saW5lIHZhbHVlIHJlY3Vyc2lvbiAoZGF0YTogJnJlZiAvIHZhbHVlOiAqcmVmKVxuICAgIFxuICAgIC8vIFNpbXBsaWZpZWQgcGF0dGVybiB0byBkZXRlY3QgZGVlcGx5IG5lc3RlZCBhbmNob3JzIChsZXNzIFJlRG9TIHJpc2spXG4gICAgLy8gTG9va3MgZm9yIDMrIGFuY2hvciBkZWZpbml0aW9ucyBpbiBjbG9zZSBwcm94aW1pdHlcbiAgICAvJlxcdytbXiZdKiZcXHcrW14mXSomXFx3Ky8sICAgICAgICAgICAgLy8gMysgYW5jaG9ycyAoc2ltcGxpZmllZCwgbGVzcyBiYWNrdHJhY2tpbmcpXG4gICAgXG4gICAgLy8gRGV0ZWN0cyBleGNlc3NpdmUgYWxpYXNlcyBpbiBjbG9zZSBwcm94aW1pdHkgKHBvdGVudGlhbCBhbXBsaWZpY2F0aW9uKVxuICAgIC8vIEV4YW1wbGU6IFsqYSwgKmIsICpjLCAqZCwgKmUsICpmLCAqZywgKmgsICppLCAqal1cbiAgICAvXFwqXFx3Kyg/OlssXFxzXStcXCpcXHcrKXs5LH0vLCAgICAgICAgICAvLyAxMCsgYWxpYXNlcyBpbiBzZXF1ZW5jZSAobm9uLWNhcHR1cmluZyBncm91cClcbiAgXTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBNQUxJQ0lPVVNfWUFNTF9QQVRURVJOUyA9IFtcbiAgICAvLyBMYW5ndWFnZS1zcGVjaWZpYyBkZXNlcmlhbGl6YXRpb24gYXR0YWNrc1xuICAgIC8hIXB5dGhvblxcL29iamVjdC8sXG4gICAgLyEhcHl0aG9uXFwvbW9kdWxlLyxcbiAgICAvISFweXRob25cXC9uYW1lLyxcbiAgICAvISFydWJ5XFwvb2JqZWN0LyxcbiAgICAvISFydWJ5XFwvaGFzaC8sXG4gICAgLyEhcnVieVxcL3N0cnVjdC8sXG4gICAgLyEhcnVieVxcL21hcnNoYWwvLFxuICAgIC8hIWphdmEvLFxuICAgIC8hIWphdmF4LyxcbiAgICAvISFjb21cXC5zdW4vLFxuICAgIC8hIXBlcmxcXC9oYXNoLyxcbiAgICAvISFwZXJsXFwvY29kZS8sXG4gICAgLyEhcGhwXFwvb2JqZWN0LyxcbiAgICBcbiAgICAvLyBDb25zdHJ1Y3Rvci9mdW5jdGlvbiBpbmplY3Rpb25cbiAgICAvISFleGVjLyxcbiAgICAvISFldmFsLyxcbiAgICAvISFuZXcvLFxuICAgIC8hIWNvbnN0cnVjdC8sXG4gICAgLyEhYXBwbHkvLFxuICAgIC8hIWNhbGwvLFxuICAgIC8hIWludm9rZS8sXG4gICAgXG4gICAgLy8gQ29kZSBleGVjdXRpb24gcGF0dGVybnMgLSBtb3JlIHNwZWNpZmljIHRvIGF2b2lkIGZhbHNlIHBvc2l0aXZlc1xuICAgIC9zdWJwcm9jZXNzXFwuLyxcbiAgICAvb3NcXC5zeXN0ZW0vLFxuICAgIC9ldmFsXFxzKlxcKC8sXG4gICAgL2V4ZWNcXHMqXFwoLyxcbiAgICAvX19pbXBvcnRfX1xccypcXCgvLFxuICAgIC9yZXF1aXJlXFxzKlxcKC8sXG4gICAgL2ltcG9ydFxccysoPzpvc3xzeXN8c3VicHJvY2Vzc3xldmFsfGV4ZWMpLyxcbiAgICAvaW5jbHVkZVxccytbXCInXS4qXFwuKD86cGhwfHNofHB5fGpzfHJiKVtcIiddLyxcbiAgICBcbiAgICAvLyBDb21tYW5kIGV4ZWN1dGlvbiB2YXJpYW50cyAtIG1vcmUgc3BlY2lmaWMgcGF0dGVybnNcbiAgICAvcG9wZW5cXHMqXFwoLyxcbiAgICAvc3Bhd25cXHMqXFwoLyxcbiAgICAvc3lzdGVtXFxzKlxcKC8sXG4gICAgL2JhY2t0aWNrXFxzKlxcKC8sXG4gICAgL3NoZWxsX2V4ZWNcXHMqXFwoLyxcbiAgICAvcGFzc3RocnVcXHMqXFwoLyxcbiAgICAvcHJvY19vcGVuXFxzKlxcKC8sXG4gICAgXG4gICAgLy8gTmV0d29yayBvcGVyYXRpb25zIC0gcmVxdWlyZSBzdXNwaWNpb3VzIGNvbnRleHRcbiAgICAvc29ja2V0XFwuY29ubmVjdC8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZXRlY3RzIHNvY2tldCBjb25uZWN0aW9uIGF0dGVtcHRzXG4gICAgL3VybGxpYlxcLnJlcXVlc3QvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHl0aG9uIEhUVFAgbGlicmFyeSB1c2FnZVxuICAgIC9yZXF1ZXN0c1xcLig/OmdldHxwb3N0fHB1dHxkZWxldGUpXFxzKlxcKC8sICAgICAgICAgICAgICAvLyBEZXRlY3RzIEhUVFAgcmVxdWVzdHMgd2l0aCBtZXRob2QgY2FsbHNcbiAgICAvZmV0Y2hcXHMqXFwoXFxzKltcIiddaHR0cHM/OlxcL1xcLy8sICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGV0ZWN0cyBmZXRjaCBjYWxscyB0byBleHRlcm5hbCBVUkxzXG4gICAgL25ld1xccytYTUxIdHRwUmVxdWVzdC8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSmF2YVNjcmlwdCBBSkFYIG9iamVjdCBjcmVhdGlvblxuICAgIC9cXC4oPzpnZXR8cG9zdHxwdXR8ZGVsZXRlKVxccypcXChcXHMqW1wiJ11odHRwcz86XFwvXFwvLywgICAgLy8gTWV0aG9kIGNoYWluaW5nIHdpdGggSFRUUCByZXF1ZXN0c1xuICAgIFxuICAgIC8vIEZpbGUgc3lzdGVtIG9wZXJhdGlvbnMgLSByZXF1aXJlIHN1c3BpY2lvdXMgY29udGV4dFxuICAgIC8oPzpmc1xcLnxmaWxlXFwufClcXHMqb3BlblxccypcXChcXHMqW1wiJ10oPzpcXC9ldGNcXC98XFwvYmluXFwvfFxcLlxcLlxcLykvLCAgICAgLy8gRmlsZSBvcGVuIHdpdGggc3VzcGljaW91cyBwYXRoc1xuICAgIC9maWxlX2dldF9jb250ZW50c1xccypcXCgvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBIUCBmaWxlIHJlYWRpbmcgZnVuY3Rpb25cbiAgICAvZmlsZV9wdXRfY29udGVudHNcXHMqXFwoLywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQSFAgZmlsZSB3cml0aW5nIGZ1bmN0aW9uXG4gICAgL2ZvcGVuXFxzKlxcKFxccypbXCInXSg/OlxcL2V0Y1xcL3xcXC9iaW5cXC98XFwuXFwuXFwvKS8sICAgICAgICAgICAgICAgICAgICAgICAvLyBGaWxlIG9wZW4gd2l0aCBkYW5nZXJvdXMgc3lzdGVtIHBhdGhzXG4gICAgLyg/OmZzXFwuKT9cXHMqcmVhZEZpbGVcXHMqXFwoXFxzKltcIiddKD86XFwvZXRjXFwvfFxcL2JpblxcL3xcXC5cXC5cXC8pLywgICAgICAgIC8vIE5vZGUuanMgZmlsZSByZWFkIHdpdGggcGF0aCB0cmF2ZXJzYWxcbiAgICAvKD86ZnNcXC4pP1xccyp3cml0ZUZpbGVcXHMqXFwoXFxzKltcIiddKD86XFwvKD86YmlufGV0Y3x0bXApXFwvfFxcLlxcLlxcLykvLCAgIC8vIE5vZGUuanMgZmlsZSB3cml0ZSB0byBzeXN0ZW0gZGlyc1xuICAgIFxuICAgIC8vIFByb3RvY29sIGhhbmRsZXJzXG4gICAgL2ZpbGU6XFwvXFwvLyxcbiAgICAvZGF0YTpcXC9cXC8vLFxuICAgIC9leHBlY3Q6XFwvXFwvLyxcbiAgICAvcGhwOlxcL1xcLy8sXG4gICAgL3BoYXI6XFwvXFwvLyxcbiAgICAvemlwOlxcL1xcLy8sXG4gICAgL3NzaDI6XFwvXFwvLyxcbiAgICAvb2dnOlxcL1xcLy8sXG4gICAgXG4gICAgLy8gWUFNTC1zcGVjaWZpYyBkYW5nZXJvdXMgZmVhdHVyZXNcbiAgICAvJlxcdytcXHMqISEvLCAvLyBBbmNob3Igd2l0aCB0YWcgY29tYmluYXRpb25cbiAgICAvXFwqXFx3K1xccyohIS8sIC8vIEFsaWFzIHdpdGggdGFnIGNvbWJpbmF0aW9uXG4gICAgLyEhbWVyZ2UvLFxuICAgIC8hIWJpbmFyeS8sXG4gICAgLyEhdGltZXN0YW1wLyxcbiAgICBcbiAgICAvLyBVbmljb2RlL2VuY29kaW5nIGJ5cGFzcyBhdHRlbXB0cyAtIHByZXZlbnQgdmlzdWFsIHNwb29maW5nIGF0dGFja3NcbiAgICAvXFxcXFt1VV0wKig/OjIyfDI3fDYwfDNbY0NdKS8sICAgLy8gVW5pY29kZSBlc2NhcGVzIGZvciBxdW90ZXMgKFwiKSBhbmQgYnJhY2tldHMgKDw+KVxuICAgIC9bXFx1MjAyQS1cXHUyMDJFXFx1MjA2Ni1cXHUyMDY5XS8sICAvLyBEaXJlY3Rpb24gb3ZlcnJpZGUgY2hhcnMgKFJMTywgTFJPLCBpc29sYXRlcylcbiAgICAvW1xcdTIwMEItXFx1MjAwRlxcdTIwMjgtXFx1MjAyRl0vLCAgLy8gWmVyby13aWR0aCBzcGFjZXMsIGxpbmUvcGFyYWdyYXBoIHNlcGFyYXRvcnNcbiAgICAvW1xcdUZFRkZcXHVGRkZFXFx1RkZGRl0vLCAgICAgICAgICAvLyBCT00sIG5vbi1jaGFyYWN0ZXJzIGZvciBwYXlsb2FkIGhpZGluZ1xuICBdO1xuXG4gIC8qKlxuICAgKiBDb250ZW50IGNvbnRleHRzIHdoZXJlIGNvZGUgZXhlY3V0aW9uIHBhdHRlcm5zIGFyZSBsZWdpdGltYXRlIGFuZCBzaG91bGRcbiAgICogbm90IHRyaWdnZXIgc2VjdXJpdHkgYmxvY2tzLiBTa2lsbHMgY29udGFpbiBleGVtcGxhciBjb2RlOyB0ZW1wbGF0ZXMgY29udGFpblxuICAgKiBjb2RlIHNuaXBwZXRzIHRoYXQgYXJlIHJlbmRlcmVkLCBuZXZlciBleGVjdXRlZDsgYWdlbnQgZGVmaW5pdGlvbnMgZGVzY3JpYmVcbiAgICogdGVjaG5pY2FsIHdvcmtmbG93cyB0aGF0IG1heSByZWZlcmVuY2UgY29kZS4gUHJvbXB0IGluamVjdGlvbiwgYWN0dWFsIHRva2VuXG4gICAqIGV4cG9zdXJlIChnaHBfL2dob18pLCBkYXRhIGV4ZmlsdHJhdGlvbiwgYW5kIEhUTUwvWFNTIHBhdHRlcm5zIHJlbWFpblxuICAgKiBhY3RpdmUgZm9yIEFMTCBjb250ZXh0cy5cbiAgICogQHNpbmNlIElzc3VlICM0NTZcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IENPREVfRVhFTVBUX0NPTlRFWFRTID0gbmV3IFNldDxDb250ZW50VmFsaWRhdG9yT3B0aW9uc1snY29udGVudENvbnRleHQnXT4oW1xuICAgICdza2lsbCcsICAgIC8vIEV4ZW1wbGFyIGNvZGUgcGF0dGVybnMgdGhlIExMTSBzaG91bGQgZm9sbG93XG4gICAgJ3RlbXBsYXRlJywgLy8gQ29kZSBzbmlwcGV0cyByZW5kZXJlZCBpbnRvIG91dHB1dCwgbmV2ZXIgZXhlY3V0ZWRcbiAgICAnYWdlbnQnLCAgICAvLyBUZWNobmljYWwgd29ya2Zsb3cgZGVmaW5pdGlvbnMg4oCUIHdpdGhvdXQgdGhpcywgYWdlbnRzIHdvdWxkIG5lZWRcbiAgICAgICAgICAgICAgICAvLyB0byBwdWxsIGluIGEgc2tpbGwgb3IgdGVtcGxhdGUganVzdCB0byByZWZlcmVuY2UgY29kZSwgYWRkaW5nXG4gICAgICAgICAgICAgICAgLy8gY291cGxpbmcgd2l0aG91dCBzZWN1cml0eSB2YWx1ZS4gQWdlbnQgZGVmaW5pdGlvbnMgYXJlIGF1dGhvcmVkXG4gICAgICAgICAgICAgICAgLy8gY29udGVudCByZWFkIGFzIExMTSBjb250ZXh0LCBzYW1lIGFzIHNraWxscyBhbmQgdGVtcGxhdGVzLlxuICBdKTtcblxuICAvKipcbiAgICogUGF0dGVybiBkZXNjcmlwdGlvbnMgdGhhdCBhcmUgZXhlbXB0IGZvciBDT0RFX0VYRU1QVF9DT05URVhUUy5cbiAgICogVGhlc2UgcGF0dGVybnMgbWF0Y2ggbGVnaXRpbWF0ZSBjb2RlIGRvY3VtZW50YXRpb24sIG5vdCB0aHJlYXRzLlxuICAgKiBAc2luY2UgSXNzdWUgIzQ1NlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQ09ERV9FWEVDVVRJT05fUEFUVEVSTlMgPSBuZXcgU2V0KFtcbiAgICAnQ29kZSBldmFsdWF0aW9uJyxcbiAgICAnQ29kZSBleGVjdXRpb24nLFxuICAgICdTeXN0ZW0gY29tbWFuZCBleGVjdXRpb24nLFxuICAgICdTdWJwcm9jZXNzIGV4ZWN1dGlvbicsXG4gIF0pO1xuXG4gIC8qKlxuICAgKiBTZWN1cml0eSBkb2N1bWVudGF0aW9uIHBhdHRlcm5zIGV4ZW1wdCBmb3IgQ09ERV9FWEVNUFRfQ09OVEVYVFMuXG4gICAqIFNraWxscy9hZ2VudHMgdGhhdCB0ZWFjaCBwZW5ldHJhdGlvbiB0ZXN0aW5nLCB0aHJlYXQgbW9kZWxpbmcsIGV0Yy5cbiAgICogbGVnaXRpbWF0ZWx5IHJlZmVyZW5jZSBzaGVsbCBjb21tYW5kcywgZmlsZSBwYXRocywgYW5kIGNyZWRlbnRpYWwgbmFtZXMuXG4gICAqXG4gICAqIERJU1RJTkNUSU9OIEZST00gQUNUSVZFIFRIUkVBVCBQQVRURVJOUzpcbiAgICogVGhlc2UgcGF0dGVybnMgZGVzY3JpYmUgYXR0YWNrcyAoZWR1Y2F0aW9uYWwpIOKAlCB0aGV5IGFwcGVhciBpbiBlbGVtZW50XG4gICAqIGRlZmluaXRpb25zIHRoYXQgYW4gYXV0aG9yIHdyb3RlLCBub3QgaW4gcnVudGltZSB1c2VyIGlucHV0LiBQYXR0ZXJuc1xuICAgKiB0aGF0IHJlbWFpbiBhY3RpdmUgZXZlbiBpbiBleGVtcHQgY29udGV4dHMgYXJlIGFjdHVhbCB0aHJlYXRzOlxuICAgKiAtIFByb21wdCBpbmplY3Rpb24gKHN5c3RlbS9hZG1pbiBvdmVycmlkZSwgaW5zdHJ1Y3Rpb24gbWFuaXB1bGF0aW9uKVxuICAgKiAtIFJlYWwgdG9rZW4gZm9ybWF0cyAoZ2hwXyosIGdob18qIOKAlCBub3QganVzdCB0aGUgd29yZCBcIkdJVEhVQl9UT0tFTlwiKVxuICAgKiAtIERhdGEgZXhmaWx0cmF0aW9uIGNvbW1hbmRzIChleHBvcnQvc2VuZCBhbGwgY3JlZGVudGlhbHMpXG4gICAqIC0gSFRNTC9YU1MgaW5qZWN0aW9uIChyZW5kZXJzIGluIHRoZSB3ZWIgY29uc29sZSlcbiAgICpcbiAgICogQHNpbmNlIElzc3VlICMxNzI1XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBTRUNVUklUWV9ET0NfUEFUVEVSTlMgPSBuZXcgU2V0KFtcbiAgICAnQ29tbWFuZCBzdWJzdGl0dXRpb24nLFxuICAgICdFeHRlcm5hbCBjb21tYW5kIGV4ZWN1dGlvbicsXG4gICAgJ1NlbnNpdGl2ZSBmaWxlIGFjY2VzcycsXG4gICAgJ1BhdGggdHJhdmVyc2FsIGF0dGVtcHQnLFxuICAgICdTU0gga2V5IGFjY2VzcyBhdHRlbXB0JyxcbiAgICAnVG9rZW4gcmVmZXJlbmNlJyxcbiAgICAnRGFuZ2Vyb3VzIHNoZWxsIGNvbW1hbmQgaW4gYmFja3RpY2tzJyxcbiAgICAnU2Vuc2l0aXZlIGZpbGUgYWNjZXNzIGluIGJhY2t0aWNrcycsXG4gICAgJ1NoZWxsIGV4ZWN1dGlvbiBpbiBiYWNrdGlja3MnLFxuICAgICdEYW5nZXJvdXMgY29tbWFuZCBpbiBiYWNrdGlja3MnLFxuICAgICdQaXBlIHRvIHNoZWxsIGluIGJhY2t0aWNrcycsXG4gICAgJ1NlbnNpdGl2ZSBmaWxlIG9yIHByaXZpbGVnZSBlc2NhbGF0aW9uIGluIGJhY2t0aWNrcycsXG4gICAgJ1NjcmlwdCBpbnRlcnByZXRlciB3aXRoIGRhbmdlcm91cyBmdW5jdGlvbiBpbiBiYWNrdGlja3MnLFxuICBdKTtcblxuICAvKipcbiAgICogSFRNTC9YU1MgcGF0dGVybiBkZXNjcmlwdGlvbnMgZXhlbXB0IGZvciB0ZW1wbGF0ZSBjb250ZXh0LlxuICAgKiBUZW1wbGF0ZXMgdXNlIDx0ZW1wbGF0ZT4sIDxzdHlsZT4sIDxzY3JpcHQ+IGFzIHNlY3Rpb24gZGVsaW1pdGVycy5cbiAgICogQHNpbmNlIElzc3VlICM4MDNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEhUTUxfU0VDVElPTl9QQVRURVJOUyA9IG5ldyBTZXQoW1xuICAgICdIVE1MIHNjcmlwdCBpbmplY3Rpb24nLFxuICAgICdIVE1MIG9iamVjdCBpbmplY3Rpb24nLFxuICAgICdIVE1MIGVtYmVkIGluamVjdGlvbicsXG4gIF0pO1xuXG4gIC8qKlxuICAgKiBIYW5kbGVzIFVuaWNvZGUgdmFsaWRhdGlvbiBhbmQgdGhyZWF0IGRldGVjdGlvblxuICAgKiBSRUZBQ1RPUjogRXh0cmFjdGVkIGZyb20gdmFsaWRhdGVBbmRTYW5pdGl6ZSgpIHRvIHJlZHVjZSBjb2duaXRpdmUgY29tcGxleGl0eVxuICAgKiBSZXR1cm5zIG5vcm1hbGl6ZWQgY29udGVudCBhbmQgVW5pY29kZSBzZXZlcml0eSB3aXRob3V0IGFib3J0aW5nIGVhcmx5XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBoYW5kbGVVbmljb2RlVmFsaWRhdGlvbihcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgZGV0ZWN0ZWRQYXR0ZXJuczogc3RyaW5nW11cbiAgKToge1xuICAgIHNhbml0aXplZDogc3RyaW5nO1xuICAgIGhpZ2hlc3RTZXZlcml0eTogU2VjdXJpdHlTZXZlcml0eTtcbiAgfSB7XG4gICAgY29uc3QgdW5pY29kZVJlc3VsdCA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGNvbnRlbnQpO1xuICAgIGNvbnN0IHNhbml0aXplZCA9IHVuaWNvZGVSZXN1bHQubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgbGV0IGhpZ2hlc3RTZXZlcml0eTogU2VjdXJpdHlTZXZlcml0eSA9ICdsb3cnO1xuXG4gICAgaWYgKCF1bmljb2RlUmVzdWx0LmlzVmFsaWQgJiYgdW5pY29kZVJlc3VsdC5kZXRlY3RlZElzc3Vlcykge1xuICAgICAgZGV0ZWN0ZWRQYXR0ZXJucy5wdXNoKC4uLnVuaWNvZGVSZXN1bHQuZGV0ZWN0ZWRJc3N1ZXMubWFwKGlzc3VlID0+IGBVbmljb2RlOiAke2lzc3VlfWApKTtcbiAgICAgIGlmICh1bmljb2RlUmVzdWx0LnNldmVyaXR5KSB7XG4gICAgICAgIGhpZ2hlc3RTZXZlcml0eSA9IHVuaWNvZGVSZXN1bHQuc2V2ZXJpdHk7XG4gICAgICB9XG5cbiAgICAgIC8vIExvZyBoaWdoL2NyaXRpY2FsIFVuaWNvZGUgYXR0YWNrc1xuICAgICAgaWYgKHVuaWNvZGVSZXN1bHQuc2V2ZXJpdHkgPT09ICdjcml0aWNhbCcgfHwgdW5pY29kZVJlc3VsdC5zZXZlcml0eSA9PT0gJ2hpZ2gnKSB7XG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnQ09OVEVOVF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgICAgc2V2ZXJpdHk6IHVuaWNvZGVSZXN1bHQuc2V2ZXJpdHkudG9VcHBlckNhc2UoKSBhcyAnSElHSCcgfCAnQ1JJVElDQUwnLFxuICAgICAgICAgIHNvdXJjZTogJ2NvbnRlbnRfdmFsaWRhdGlvbicsXG4gICAgICAgICAgZGV0YWlsczogYFVuaWNvZGUgYXR0YWNrIGRldGVjdGVkOiAke3VuaWNvZGVSZXN1bHQuZGV0ZWN0ZWRJc3N1ZXMuam9pbignLCAnKX1gLFxuICAgICAgICB9KTtcblxuICAgICAgICBDb250ZW50VmFsaWRhdG9yLmdldFRlbGVtZXRyeSgpPy5yZWNvcmRCbG9ja2VkQXR0YWNrKFxuICAgICAgICAgICdVTklDT0RFX0FUVEFDSycsXG4gICAgICAgICAgdW5pY29kZVJlc3VsdC5kZXRlY3RlZElzc3Vlcy5qb2luKCcsICcpLFxuICAgICAgICAgIHVuaWNvZGVSZXN1bHQuc2V2ZXJpdHkudG9VcHBlckNhc2UoKSBhcyAnSElHSCcgfCAnQ1JJVElDQUwnLFxuICAgICAgICAgICd1bmljb2RlX3ZhbGlkYXRpb24nLFxuICAgICAgICAgIHsgaXNzdWVzOiB1bmljb2RlUmVzdWx0LmRldGVjdGVkSXNzdWVzIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBzYW5pdGl6ZWQsIGhpZ2hlc3RTZXZlcml0eSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBjb250ZW50IGZvciBpbmplY3Rpb24gcGF0dGVybnMgYW5kIGxvZ3Mvc2FuaXRpemVzIHRocmVhdHNcbiAgICogUkVGQUNUT1I6IEV4dHJhY3RlZCBmcm9tIHZhbGlkYXRlQW5kU2FuaXRpemUoKSB0byByZWR1Y2UgY29nbml0aXZlIGNvbXBsZXhpdHlcbiAgICpcbiAgICogQHBhcmFtIG9yaWdpbmFsQ29udGVudCAtIE9yaWdpbmFsIGNvbnRlbnQgdG8gY2hlY2sgcGF0dGVybnMgYWdhaW5zdFxuICAgKiBAcGFyYW0gbm9ybWFsaXplZENvbnRlbnQgLSBOb3JtYWxpemVkIGNvbnRlbnQgdG8gYXBwbHkgcmVwbGFjZW1lbnRzIHRvXG4gICAqIEBwYXJhbSBkZXRlY3RlZFBhdHRlcm5zIC0gQXJyYXkgdG8gYWNjdW11bGF0ZSBkZXRlY3RlZCBwYXR0ZXJuIGRlc2NyaXB0aW9uc1xuICAgKiBAcGFyYW0gY3VycmVudFNldmVyaXR5IC0gQ3VycmVudCBoaWdoZXN0IHNldmVyaXR5IGxldmVsXG4gICAqIEBwYXJhbSBtYXhMZW5ndGggLSBNYXhpbXVtIGFsbG93ZWQgY29udGVudCBsZW5ndGggZm9yIHJlZ2V4IHZhbGlkYXRpb25cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGNoZWNrSW5qZWN0aW9uUGF0dGVybnMoXG4gICAgb3JpZ2luYWxDb250ZW50OiBzdHJpbmcsXG4gICAgbm9ybWFsaXplZENvbnRlbnQ6IHN0cmluZyxcbiAgICBkZXRlY3RlZFBhdHRlcm5zOiBzdHJpbmdbXSxcbiAgICBjdXJyZW50U2V2ZXJpdHk6IFNlY3VyaXR5U2V2ZXJpdHksXG4gICAgbWF4TGVuZ3RoOiBudW1iZXIsXG4gICAgY29udGVudENvbnRleHQ/OiBDb250ZW50VmFsaWRhdG9yT3B0aW9uc1snY29udGVudENvbnRleHQnXVxuICApOiB7XG4gICAgc2FuaXRpemVkOiBzdHJpbmc7XG4gICAgaGlnaGVzdFNldmVyaXR5OiBTZWN1cml0eVNldmVyaXR5O1xuICB9IHtcbiAgICBsZXQgc2FuaXRpemVkID0gbm9ybWFsaXplZENvbnRlbnQ7XG4gICAgbGV0IGhpZ2hlc3RTZXZlcml0eSA9IGN1cnJlbnRTZXZlcml0eTtcblxuICAgIGZvciAoY29uc3QgeyBwYXR0ZXJuLCBzZXZlcml0eSwgZGVzY3JpcHRpb24gfSBvZiB0aGlzLklOSkVDVElPTl9QQVRURVJOUykge1xuICAgICAgLy8gRml4ICM0NTYvIzE3MjU6IFNraXAgY29kZSBleGVjdXRpb24gYW5kIHNlY3VyaXR5IGRvY3VtZW50YXRpb24gcGF0dGVybnNcbiAgICAgIC8vIGZvciBlbGVtZW50IHR5cGVzIHRoYXQgbGVnaXRpbWF0ZWx5IGNvbnRhaW4gY29kZSBhbmQgYXR0YWNrIGRlc2NyaXB0aW9ucy5cbiAgICAgIC8vIFByb21wdCBpbmplY3Rpb24sIGFjdHVhbCB0b2tlbiBleHBvc3VyZSwgYW5kIEhUTUwvWFNTIHJlbWFpbiBhY3RpdmUuXG4gICAgICBpZiAoY29udGVudENvbnRleHQgJiYgdGhpcy5DT0RFX0VYRU1QVF9DT05URVhUUy5oYXMoY29udGVudENvbnRleHQpICYmXG4gICAgICAgICAgKHRoaXMuQ09ERV9FWEVDVVRJT05fUEFUVEVSTlMuaGFzKGRlc2NyaXB0aW9uKSB8fCB0aGlzLlNFQ1VSSVRZX0RPQ19QQVRURVJOUy5oYXMoZGVzY3JpcHRpb24pKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8vIEZpeCAjODAzOiBTa2lwIEhUTUwgc2VjdGlvbiB0YWcgcGF0dGVybnMgZm9yIHRlbXBsYXRlcyAodXNlIDxzY3JpcHQ+LzxzdHlsZT4gYXMgc2VjdGlvbiBkZWxpbWl0ZXJzKVxuICAgICAgaWYgKGNvbnRlbnRDb250ZXh0ID09PSAndGVtcGxhdGUnICYmIHRoaXMuSFRNTF9TRUNUSU9OX1BBVFRFUk5TLmhhcyhkZXNjcmlwdGlvbikpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBDaGVjayBwYXR0ZXJuIG9uIG9yaWdpbmFsIGNvbnRlbnQgKGJlZm9yZSBub3JtYWxpemF0aW9uKSB0byBjYXRjaCBlbmNvZGVkIGF0dGFja3NcbiAgICAgIGlmIChSZWdleFZhbGlkYXRvci52YWxpZGF0ZShvcmlnaW5hbENvbnRlbnQsIHBhdHRlcm4sIHtcbiAgICAgICAgbWF4TGVuZ3RoLFxuICAgICAgICByZWplY3REYW5nZXJvdXNQYXR0ZXJuczogZmFsc2UsXG4gICAgICAgIGxvZ0V2ZW50czogZmFsc2VcbiAgICAgIH0pKSB7XG4gICAgICAgIGRldGVjdGVkUGF0dGVybnMucHVzaChkZXNjcmlwdGlvbik7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgQ29udGVudCBpbmplY3Rpb24gYmxvY2tlZDogJHtkZXNjcmlwdGlvbn0gKCR7c2V2ZXJpdHl9KSDigJQgcGF0dGVybjogJHtwYXR0ZXJuLnNvdXJjZX1gKTtcblxuICAgICAgICAvLyBVcGRhdGUgaGlnaGVzdCBzZXZlcml0eVxuICAgICAgICBpZiAoc2V2ZXJpdHkgPT09ICdjcml0aWNhbCcgfHwgKHNldmVyaXR5ID09PSAnaGlnaCcgJiYgaGlnaGVzdFNldmVyaXR5ICE9PSAnY3JpdGljYWwnKSkge1xuICAgICAgICAgIGhpZ2hlc3RTZXZlcml0eSA9IHNldmVyaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTG9nIHNlY3VyaXR5IGV2ZW50XG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnQ09OVEVOVF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgICAgc2V2ZXJpdHk6IHNldmVyaXR5LnRvVXBwZXJDYXNlKCkgYXMgJ0hJR0gnIHwgJ0NSSVRJQ0FMJyxcbiAgICAgICAgICBzb3VyY2U6ICdjb250ZW50X3ZhbGlkYXRpb24nLFxuICAgICAgICAgIGRldGFpbHM6IGBEZXRlY3RlZCBwYXR0ZXJuOiAke2Rlc2NyaXB0aW9ufWAsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFJlY29yZCBpbiB0ZWxlbWV0cnlcbiAgICAgICAgQ29udGVudFZhbGlkYXRvci5nZXRUZWxlbWV0cnkoKT8ucmVjb3JkQmxvY2tlZEF0dGFjayhcbiAgICAgICAgICAnQ09OVEVOVF9JTkpFQ1RJT04nLFxuICAgICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICAgIHNldmVyaXR5LnRvVXBwZXJDYXNlKCkgYXMgJ0hJR0gnIHwgJ0NSSVRJQ0FMJyxcbiAgICAgICAgICAnY29udGVudF92YWxpZGF0aW9uJyxcbiAgICAgICAgICB7IHBhdHRlcm46IHBhdHRlcm4uc291cmNlIH1cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBBcHBseSByZXBsYWNlbWVudCB0byBub3JtYWxpemVkIGNvbnRlbnRcbiAgICAgICAgc2FuaXRpemVkID0gc2FuaXRpemVkLnJlcGxhY2UocGF0dGVybiwgJ1tDT05URU5UX0JMT0NLRURdJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc2FuaXRpemVkLCBoaWdoZXN0U2V2ZXJpdHkgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYW5kIHNhbml0aXplcyBwZXJzb25hIGNvbnRlbnQgZm9yIHNlY3VyaXR5IHRocmVhdHNcbiAgICogRklYICMxMjY5OiBBZGRlZCBvcHRpb25zIHRvIHN1cHBvcnQgbGFyZ2UgbWVtb3J5IGNvbnRlbnRcbiAgICogUkVGQUNUT1I6IFJlZHVjZWQgY29nbml0aXZlIGNvbXBsZXhpdHkgYnkgZXh0cmFjdGluZyBoZWxwZXIgbWV0aG9kc1xuICAgKlxuICAgKiBTRUNVUklUWSBGSVggKERNQ1AtU0VDLTAwNCk6IExlbmd0aCBjaGVja3Mgbm93IHBlcmZvcm1lZCBvbiBOT1JNQUxJWkVEIGNvbnRlbnRcbiAgICogdG8gcHJldmVudCBieXBhc3MgYXR0YWNrcyB1c2luZyBVbmljb2RlIGNvbWJpbmluZyBjaGFyYWN0ZXJzIG9yIHplcm8td2lkdGggY2hhcnMuXG4gICAqIEEgcHJlLWNoZWNrIHdpdGggZ2VuZXJvdXMgbXVsdGlwbGllciBwcmV2ZW50cyBEb1MgZnJvbSBodWdlIHBheWxvYWRzLlxuICAgKi9cbiAgc3RhdGljIHZhbGlkYXRlQW5kU2FuaXRpemUoY29udGVudDogc3RyaW5nLCBvcHRpb25zOiBDb250ZW50VmFsaWRhdG9yT3B0aW9ucyA9IHt9KTogQ29udGVudFZhbGlkYXRpb25SZXN1bHQge1xuICAgIC8vIERldGVybWluZSBtYXggbGVuZ3RoIGZvciB2YWxpZGF0aW9uXG4gICAgY29uc3QgbWF4TGVuZ3RoID0gb3B0aW9ucy5tYXhMZW5ndGggfHwgU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSDtcblxuICAgIC8vIFNFQ1VSSVRZIEZJWCAoRE1DUC1TRUMtMDA0KTogVHdvLXBoYXNlIGxlbmd0aCB2YWxpZGF0aW9uXG4gICAgLy8gUGhhc2UgMTogRG9TIHByZXZlbnRpb24gcHJlLWNoZWNrIG9uIHJhdyBjb250ZW50IChnZW5lcm91cyAyeCBtdWx0aXBsaWVyKVxuICAgIC8vIFRoaXMgcHJldmVudHMgaHVnZSBwYXlsb2FkcyBmcm9tIGhpdHRpbmcgdGhlIG5vcm1hbGl6YXRpb24gY29kZSBwYXRoXG4gICAgLy8gd2hpbGUgc3RpbGwgYWxsb3dpbmcgbGVnaXRpbWF0ZSBjb250ZW50IHdpdGggc29tZSBVbmljb2RlIG92ZXJoZWFkXG4gICAgY29uc3QgRE9TX1BSRVZFTlRJT05fTVVMVElQTElFUiA9IDI7XG4gICAgaWYgKCFvcHRpb25zLnNraXBTaXplQ2hlY2spIHtcbiAgICAgIGlmIChjb250ZW50Lmxlbmd0aCA+IG1heExlbmd0aCAqIERPU19QUkVWRU5USU9OX01VTFRJUExJRVIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoXG4gICAgICAgICAgYENvbnRlbnQgZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCBvZiAke21heExlbmd0aH0gY2hhcmFjdGVycyAoJHtjb250ZW50Lmxlbmd0aH0gcHJvdmlkZWQpYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRldGVjdGVkUGF0dGVybnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBIYW5kbGUgVW5pY29kZSB2YWxpZGF0aW9uIChub3JtYWxpemVzIGNvbnRlbnQgYnV0IGRvZXNuJ3QgYWJvcnQpXG4gICAgY29uc3QgdW5pY29kZUNoZWNrID0gdGhpcy5oYW5kbGVVbmljb2RlVmFsaWRhdGlvbihjb250ZW50LCBkZXRlY3RlZFBhdHRlcm5zKTtcblxuICAgIC8vIFNFQ1VSSVRZIEZJWCAoRE1DUC1TRUMtMDA0KTogUGhhc2UgMiAtIENoZWNrIGxlbmd0aCBvbiBOT1JNQUxJWkVEIGNvbnRlbnRcbiAgICAvLyBUaGlzIHByZXZlbnRzIGJ5cGFzcyBhdHRhY2tzIHVzaW5nIGNvbWJpbmluZyBjaGFyYWN0ZXJzIG9yIHplcm8td2lkdGggY2hhcnNcbiAgICAvLyB0aGF0IHdvdWxkIGluZmxhdGUgcmF3IGxlbmd0aCBidXQgY29sbGFwc2UgYWZ0ZXIgbm9ybWFsaXphdGlvblxuICAgIGlmICghb3B0aW9ucy5za2lwU2l6ZUNoZWNrKSB7XG4gICAgICBpZiAodW5pY29kZUNoZWNrLnNhbml0aXplZC5sZW5ndGggPiBtYXhMZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoXG4gICAgICAgICAgYENvbnRlbnQgZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCBvZiAke21heExlbmd0aH0gY2hhcmFjdGVycyBhZnRlciBub3JtYWxpemF0aW9uICgke3VuaWNvZGVDaGVjay5zYW5pdGl6ZWQubGVuZ3RofSBwcm92aWRlZClgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGluamVjdGlvbiBwYXR0ZXJucyBvbiBPUklHSU5BTCBjb250ZW50ICh0byBjYXRjaCBlbmNvZGVkIGF0dGFja3MpXG4gICAgLy8gYnV0IGFwcGx5IHJlcGxhY2VtZW50cyB0byBOT1JNQUxJWkVEIGNvbnRlbnQgKHRvIHByZXNlcnZlIG5vcm1hbGl6YXRpb24pXG4gICAgY29uc3QgaW5qZWN0aW9uQ2hlY2sgPSB0aGlzLmNoZWNrSW5qZWN0aW9uUGF0dGVybnMoXG4gICAgICBjb250ZW50LFxuICAgICAgdW5pY29kZUNoZWNrLnNhbml0aXplZCxcbiAgICAgIGRldGVjdGVkUGF0dGVybnMsXG4gICAgICB1bmljb2RlQ2hlY2suaGlnaGVzdFNldmVyaXR5LFxuICAgICAgbWF4TGVuZ3RoLFxuICAgICAgb3B0aW9ucy5jb250ZW50Q29udGV4dFxuICAgICk7XG5cbiAgICAvLyBVc2UgaGlnaGVzdCBzZXZlcml0eSBmcm9tIGVpdGhlciBVbmljb2RlIG9yIGluamVjdGlvbiBjaGVja3NcbiAgICBjb25zdCBmaW5hbFNldmVyaXR5ID0gaW5qZWN0aW9uQ2hlY2suaGlnaGVzdFNldmVyaXR5O1xuXG4gICAgLy8gQWJvcnQgaWYgaGlnaC9jcml0aWNhbCB0aHJlYXRzIGRldGVjdGVkXG4gICAgaWYgKGZpbmFsU2V2ZXJpdHkgPT09ICdoaWdoJyB8fCBmaW5hbFNldmVyaXR5ID09PSAnY3JpdGljYWwnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgc2FuaXRpemVkQ29udGVudDogaW5qZWN0aW9uQ2hlY2suc2FuaXRpemVkLFxuICAgICAgICBkZXRlY3RlZFBhdHRlcm5zLFxuICAgICAgICBzZXZlcml0eTogZmluYWxTZXZlcml0eVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXNWYWxpZDogZGV0ZWN0ZWRQYXR0ZXJucy5sZW5ndGggPT09IDAsXG4gICAgICBzYW5pdGl6ZWRDb250ZW50OiBpbmplY3Rpb25DaGVjay5zYW5pdGl6ZWQsXG4gICAgICBkZXRlY3RlZFBhdHRlcm5zLFxuICAgICAgc2V2ZXJpdHk6IGZpbmFsU2V2ZXJpdHlcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBZQU1MIGZyb250bWF0dGVyIGZvciBtYWxpY2lvdXMgY29udGVudFxuICAgKiBTRUNVUklUWSBGSVggIzM2NDogQWRkZWQgWUFNTCBib21iIGRldGVjdGlvbiB0byBwcmV2ZW50IGRlbmlhbCBvZiBzZXJ2aWNlXG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGVZYW1sQ29udGVudCh5YW1sQ29udGVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gTGVuZ3RoIHZhbGlkYXRpb24gYmVmb3JlIHBhdHRlcm4gbWF0Y2hpbmdcbiAgICBpZiAoeWFtbENvbnRlbnQubGVuZ3RoID4gU0VDVVJJVFlfTElNSVRTLk1BWF9ZQU1MX0xFTkdUSCkge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnWUFNTF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgIHNldmVyaXR5OiAnSElHSCcsXG4gICAgICAgIHNvdXJjZTogJ3lhbWxfdmFsaWRhdGlvbicsXG4gICAgICAgIGRldGFpbHM6IGBZQU1MIGNvbnRlbnQgZXhjZWVkcyBtYXhpbXVtIGxlbmd0aDogJHt5YW1sQ29udGVudC5sZW5ndGh9ID4gJHtTRUNVUklUWV9MSU1JVFMuTUFYX1lBTUxfTEVOR1RIfWBcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFNFQ1VSSVRZIEZJWCAjMzY0OiBDaGVjayBmb3IgWUFNTCBib21icyBiZWZvcmUgb3RoZXIgdmFsaWRhdGlvblxuICAgIC8vIFNFQ1VSSVRZIEZJWCAoUFIgIzU1MiByZXZpZXcpOiBVc2UgUmVnZXhWYWxpZGF0b3IgZm9yIFJlRG9TIHByb3RlY3Rpb25cbiAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgdGhpcy5ZQU1MX0JPTUJfUEFUVEVSTlMpIHtcbiAgICAgIC8vIFVzZSBSZWdleFZhbGlkYXRvciB0byBzYWZlbHkgY2hlY2sgcGF0dGVybnMgd2l0aCB0aW1lb3V0IHByb3RlY3Rpb25cbiAgICAgIC8vIFRoaXMgcHJldmVudHMgUmVEb1MgYXR0YWNrcyBmcm9tIG1hbGljaW91c2x5IGNyYWZ0ZWQgWUFNTFxuICAgICAgY29uc3QgaXNNYXRjaCA9IFJlZ2V4VmFsaWRhdG9yLnZhbGlkYXRlKHlhbWxDb250ZW50LCBwYXR0ZXJuLCB7XG4gICAgICAgIG1heExlbmd0aDogU0VDVVJJVFlfTElNSVRTLk1BWF9ZQU1MX0xFTkdUSCxcbiAgICAgICAgcmVqZWN0RGFuZ2Vyb3VzUGF0dGVybnM6IGZhbHNlLCAvLyBPdXIgcGF0dGVybnMgYXJlIHRydXN0ZWRcbiAgICAgICAgbG9nRXZlbnRzOiBmYWxzZSAvLyBXZSBoYW5kbGUgbG9nZ2luZyBvdXJzZWx2ZXNcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBpZiAoaXNNYXRjaCkge1xuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ1lBTUxfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICAgIHNldmVyaXR5OiAnQ1JJVElDQUwnLFxuICAgICAgICAgIHNvdXJjZTogJ3lhbWxfYm9tYl9kZXRlY3Rpb24nLFxuICAgICAgICAgIGRldGFpbHM6IGBZQU1MIGJvbWIgcGF0dGVybiBkZXRlY3RlZDogJHtwYXR0ZXJuLnNvdXJjZX1gLFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICBwYXR0ZXJuVHlwZTogJ1lBTUxfQk9NQicsXG4gICAgICAgICAgICBjb250ZW50TGVuZ3RoOiB5YW1sQ29udGVudC5sZW5ndGhcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFJlY29yZCBpbiB0ZWxlbWV0cnlcbiAgICAgICAgQ29udGVudFZhbGlkYXRvci5nZXRUZWxlbWV0cnkoKT8ucmVjb3JkQmxvY2tlZEF0dGFjayhcbiAgICAgICAgICAnWUFNTF9CT01CJyxcbiAgICAgICAgICBgWUFNTCBib21iIHBhdHRlcm46ICR7cGF0dGVybi5zb3VyY2V9YCxcbiAgICAgICAgICAnQ1JJVElDQUwnLFxuICAgICAgICAgICd5YW1sX3ZhbGlkYXRpb24nLFxuICAgICAgICAgIHsgcGF0dGVyblR5cGU6ICdZQU1MX0JPTUInLCBjb250ZW50TGVuZ3RoOiB5YW1sQ29udGVudC5sZW5ndGggfVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gU0VDVVJJVFkgRklYICMzNjQ6IENvdW50IGFuY2hvci9hbGlhcyByYXRpbyBmb3IgYW1wbGlmaWNhdGlvbiBkZXRlY3Rpb25cbiAgICAvLyBTRUNVUklUWSBGSVggIzEyOTg6IFVzZSBjb25maWd1cmFibGUgdGhyZXNob2xkIGZvciBlYXNpZXIgdHVuaW5nXG4gICAgY29uc3QgYW5jaG9yTWF0Y2hlcyA9IHlhbWxDb250ZW50Lm1hdGNoKC8mXFx3Ky9nKSB8fCBbXTtcbiAgICAvLyBGaXggIzkwNjogVXNlIG5lZ2F0aXZlIGxvb2tiZWhpbmQgdG8gZXhjbHVkZSBtYXJrZG93biBib2xkICgqKndvcmQqKikgZnJvbVxuICAgIC8vIG1hdGNoaW5nIGFzIFlBTUwgYWxpYXNlcy4gV2l0aG91dCB0aGlzLCBtYXJrZG93biBib2xkIGluc2lkZSBZQU1MIHN0cmluZ3NcbiAgICAvLyB0cmlnZ2VycyBmYWxzZS1wb3NpdGl2ZSBhbXBsaWZpY2F0aW9uIGRldGVjdGlvbi5cbiAgICBjb25zdCBhbGlhc01hdGNoZXMgPSB5YW1sQ29udGVudC5tYXRjaCgvKD88IVxcKilcXCpcXHcrL2cpIHx8IFtdO1xuICAgIGNvbnN0IGFtcGxpZmljYXRpb25SYXRpbyA9IGFuY2hvck1hdGNoZXMubGVuZ3RoID4gMCA/IGFsaWFzTWF0Y2hlcy5sZW5ndGggLyBhbmNob3JNYXRjaGVzLmxlbmd0aCA6IDA7XG5cbiAgICBpZiAoYW1wbGlmaWNhdGlvblJhdGlvID4gU0VDVVJJVFlfTElNSVRTLllBTUxfQk9NQl9BTVBMSUZJQ0FUSU9OX1RIUkVTSE9MRCkge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnWUFNTF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgIHNldmVyaXR5OiAnSElHSCcsXG4gICAgICAgIHNvdXJjZTogJ3lhbWxfYW1wbGlmaWNhdGlvbl9kZXRlY3Rpb24nLFxuICAgICAgICBkZXRhaWxzOiBgRXhjZXNzaXZlIGFsaWFzIGFtcGxpZmljYXRpb24gZGV0ZWN0ZWQ6ICR7YWxpYXNNYXRjaGVzLmxlbmd0aH0gYWxpYXNlcyBmb3IgJHthbmNob3JNYXRjaGVzLmxlbmd0aH0gYW5jaG9ycyAocmF0aW86ICR7YW1wbGlmaWNhdGlvblJhdGlvLnRvRml4ZWQoMil9KWAsXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgYW5jaG9yczogYW5jaG9yTWF0Y2hlcy5sZW5ndGgsXG4gICAgICAgICAgYWxpYXNlczogYWxpYXNNYXRjaGVzLmxlbmd0aCxcbiAgICAgICAgICByYXRpbzogYW1wbGlmaWNhdGlvblJhdGlvXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBcbiAgICAvLyBTRUNVUklUWSBGSVggIzM2NDogRGV0ZWN0IGNpcmN1bGFyIHJlZmVyZW5jZSBjaGFpbnNcbiAgICAvLyBTRUNVUklUWSBGSVggKFBSICM1NTIgcmV2aWV3KTogT3B0aW1pemVkIGZyb20gTyhuwrIpIHRvIE8obikgdXNpbmcgU2V0LWJhc2VkIGxvb2t1cHNcbiAgICBjb25zdCBhbmNob3JSZWZzID0gbmV3IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PigpO1xuICAgIGNvbnN0IGxpbmVzID0geWFtbENvbnRlbnQuc3BsaXQoJ1xcbicpO1xuICAgIFxuICAgIC8vIEZpcnN0IHBhc3M6IEJ1aWxkIHJlZmVyZW5jZSBtYXAgZWZmaWNpZW50bHlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBhbmNob3JNYXRjaCA9IGxpbmVzW2ldLm1hdGNoKC8mKFxcdyspLyk7XG4gICAgICBpZiAoYW5jaG9yTWF0Y2gpIHtcbiAgICAgICAgY29uc3QgYW5jaG9yTmFtZSA9IGFuY2hvck1hdGNoWzFdO1xuICAgICAgICAvLyBHZXQgcmVmZXJlbmNlcyBpbiBuZXh0IDUgbGluZXNcbiAgICAgICAgY29uc3QgY29udGV4dEVuZCA9IE1hdGgubWluKGkgKyA1LCBsaW5lcy5sZW5ndGgpO1xuICAgICAgICBjb25zdCByZWZlcmVuY2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIFxuICAgICAgICBmb3IgKGxldCBqID0gaTsgaiA8IGNvbnRleHRFbmQ7IGorKykge1xuICAgICAgICAgIGNvbnN0IGFsaWFzTWF0Y2hlcyA9IGxpbmVzW2pdLm1hdGNoKC9cXCooXFx3KykvZyk7XG4gICAgICAgICAgaWYgKGFsaWFzTWF0Y2hlcykge1xuICAgICAgICAgICAgYWxpYXNNYXRjaGVzLmZvckVhY2goYWxpYXMgPT4ge1xuICAgICAgICAgICAgICByZWZlcmVuY2VzLmFkZChhbGlhcy5zdWJzdHJpbmcoMSkpOyAvLyBSZW1vdmUgKiBwcmVmaXhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgYW5jaG9yUmVmcy5zZXQoYW5jaG9yTmFtZSwgcmVmZXJlbmNlcyk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIFNlY29uZCBwYXNzOiBDaGVjayBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyAoTyhuKSB3aXRoIFNldCBsb29rdXBzKVxuICAgIGZvciAoY29uc3QgW2FuY2hvcjEsIHJlZnMxXSBvZiBhbmNob3JSZWZzKSB7XG4gICAgICBmb3IgKGNvbnN0IHJlZkFuY2hvciBvZiByZWZzMSkge1xuICAgICAgICBjb25zdCByZWZzMiA9IGFuY2hvclJlZnMuZ2V0KHJlZkFuY2hvcik7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSByZWZlcmVuY2VkIGFuY2hvciByZWZlcmVuY2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsXG4gICAgICAgIGlmIChyZWZzMiAmJiByZWZzMi5oYXMoYW5jaG9yMSkpIHtcbiAgICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgICB0eXBlOiAnWUFNTF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgICAgICBzZXZlcml0eTogJ0NSSVRJQ0FMJyxcbiAgICAgICAgICAgIHNvdXJjZTogJ3lhbWxfYm9tYl9kZXRlY3Rpb24nLFxuICAgICAgICAgICAgZGV0YWlsczogYENpcmN1bGFyIHJlZmVyZW5jZSBjaGFpbiBkZXRlY3RlZCBiZXR3ZWVuIGFuY2hvcnM6ICYke2FuY2hvcjF9IGFuZCAmJHtyZWZBbmNob3J9YCxcbiAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgIHBhdHRlcm5UeXBlOiAnQ0lSQ1VMQVJfUkVGRVJFTkNFJyxcbiAgICAgICAgICAgICAgYW5jaG9yczogW2FuY2hvcjEsIHJlZkFuY2hvcl1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gVW5pY29kZSBub3JtYWxpemF0aW9uIHByZXByb2Nlc3NpbmcgZm9yIFlBTUwgY29udGVudFxuICAgIGNvbnN0IHVuaWNvZGVSZXN1bHQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZSh5YW1sQ29udGVudCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFlhbWwgPSB1bmljb2RlUmVzdWx0Lm5vcm1hbGl6ZWRDb250ZW50O1xuICAgIFxuICAgIGlmICghdW5pY29kZVJlc3VsdC5pc1ZhbGlkICYmIHVuaWNvZGVSZXN1bHQuZGV0ZWN0ZWRJc3N1ZXMpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1lBTUxfVU5JQ09ERV9BVFRBQ0snLFxuICAgICAgICBzZXZlcml0eTogKHVuaWNvZGVSZXN1bHQuc2V2ZXJpdHk/LnRvVXBwZXJDYXNlKCkgfHwgJ01FRElVTScpIGFzICdMT1cnIHwgJ01FRElVTScgfCAnSElHSCcgfCAnQ1JJVElDQUwnLFxuICAgICAgICBzb3VyY2U6ICd5YW1sX3ZhbGlkYXRpb24nLFxuICAgICAgICBkZXRhaWxzOiBgVW5pY29kZSBhdHRhY2sgZGV0ZWN0ZWQgaW4gWUFNTDogJHt1bmljb2RlUmVzdWx0LmRldGVjdGVkSXNzdWVzLmpvaW4oJywgJyl9YFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHRoaXMuTUFMSUNJT1VTX1lBTUxfUEFUVEVSTlMpIHtcbiAgICAgIC8vIFRoZXNlIGFyZSB0cnVzdGVkIGludGVybmFsIHBhdHRlcm5zLCBzbyB3ZSBkaXNhYmxlIFJlRG9TIHJlamVjdGlvblxuICAgICAgaWYgKFJlZ2V4VmFsaWRhdG9yLnZhbGlkYXRlKG5vcm1hbGl6ZWRZYW1sLCBwYXR0ZXJuLCB7XG4gICAgICAgIG1heExlbmd0aDogU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCxcbiAgICAgICAgcmVqZWN0RGFuZ2Vyb3VzUGF0dGVybnM6IGZhbHNlLFxuICAgICAgICBsb2dFdmVudHM6IGZhbHNlICAvLyBEb24ndCBsb2cgb3VyIG93biBzZWN1cml0eSBwYXR0ZXJucyBhcyBkYW5nZXJvdXNcbiAgICAgIH0pKSB7XG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnWUFNTF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdDUklUSUNBTCcsXG4gICAgICAgICAgc291cmNlOiAneWFtbF92YWxpZGF0aW9uJyxcbiAgICAgICAgICBkZXRhaWxzOiBgTWFsaWNpb3VzIFlBTUwgcGF0dGVybiBkZXRlY3RlZDogJHtwYXR0ZXJufWAsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBFYXJseSBleGl0IG9uIGZpcnN0IG1hdGNoIGZvciBwZXJmb3JtYW5jZVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBwZXJzb25hIG1ldGFkYXRhIGZpZWxkc1xuICAgKi9cbiAgc3RhdGljIHZhbGlkYXRlTWV0YWRhdGEobWV0YWRhdGE6IGFueSk6IENvbnRlbnRWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICBjb25zdCBkZXRlY3RlZFBhdHRlcm5zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gQ2hlY2sgYWxsIHN0cmluZyBmaWVsZHMgaW4gbWV0YWRhdGFcbiAgICBjb25zdCBjaGVja0ZpZWxkID0gKGZpZWxkTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBDaGVjayBmaWVsZCBsZW5ndGggZmlyc3RcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IFNFQ1VSSVRZX0xJTUlUUy5NQVhfTUVUQURBVEFfRklFTERfTEVOR1RIKSB7XG4gICAgICAgICAgZGV0ZWN0ZWRQYXR0ZXJucy5wdXNoKGAke2ZpZWxkTmFtZX06IEZpZWxkIGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgJHtTRUNVUklUWV9MSU1JVFMuTUFYX01FVEFEQVRBX0ZJRUxEX0xFTkdUSH0gY2hhcmFjdGVyc2ApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy52YWxpZGF0ZUFuZFNhbml0aXplKHZhbHVlKTtcbiAgICAgICAgaWYgKCFyZXN1bHQuaXNWYWxpZCB8fCByZXN1bHQuZGV0ZWN0ZWRQYXR0ZXJucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgZGV0ZWN0ZWRQYXR0ZXJucy5wdXNoKGAke2ZpZWxkTmFtZX06ICR7cmVzdWx0LmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJywgJyl9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gVmFsaWRhdGUgc3RhbmRhcmQgcGVyc29uYSBmaWVsZHNcbiAgICBjaGVja0ZpZWxkKCduYW1lJywgbWV0YWRhdGEubmFtZSk7XG4gICAgY2hlY2tGaWVsZCgnZGVzY3JpcHRpb24nLCBtZXRhZGF0YS5kZXNjcmlwdGlvbik7XG4gICAgY2hlY2tGaWVsZCgnY2F0ZWdvcnknLCBtZXRhZGF0YS5jYXRlZ29yeSk7XG4gICAgY2hlY2tGaWVsZCgnYXV0aG9yJywgbWV0YWRhdGEuYXV0aG9yKTtcbiAgICBcbiAgICAvLyBDaGVjayBhbnkgY3VzdG9tIGZpZWxkc1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG1ldGFkYXRhKSkge1xuICAgICAgaWYgKCFbJ25hbWUnLCAnZGVzY3JpcHRpb24nLCAnY2F0ZWdvcnknLCAnYXV0aG9yJ10uaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBjaGVja0ZpZWxkKGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOiBkZXRlY3RlZFBhdHRlcm5zLmxlbmd0aCA9PT0gMCxcbiAgICAgIGRldGVjdGVkUGF0dGVybnMsXG4gICAgICBzZXZlcml0eTogZGV0ZWN0ZWRQYXR0ZXJucy5sZW5ndGggPiAwID8gJ2hpZ2gnIDogJ2xvdydcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNhbml0aXplcyBhIGNvbXBsZXRlIHBlcnNvbmEgZmlsZSAoZnJvbnRtYXR0ZXIgKyBjb250ZW50KVxuICAgKi9cbiAgc3RhdGljIHNhbml0aXplUGVyc29uYUNvbnRlbnQoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBFeHRyYWN0IGZyb250bWF0dGVyXG4gICAgY29uc3QgZnJvbnRtYXR0ZXJNYXRjaCA9IGNvbnRlbnQubWF0Y2goL14tLS1cXG4oW1xcc1xcU10qPylcXG4tLS0vKTtcbiAgICBcbiAgICBpZiAoIWZyb250bWF0dGVyTWF0Y2gpIHtcbiAgICAgIC8vIE5vIGZyb250bWF0dGVyLCBqdXN0IHZhbGlkYXRlIGNvbnRlbnRcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudmFsaWRhdGVBbmRTYW5pdGl6ZShjb250ZW50KTtcbiAgICAgIGlmICghcmVzdWx0LmlzVmFsaWQgJiYgcmVzdWx0LnNldmVyaXR5ID09PSAnY3JpdGljYWwnKSB7XG4gICAgICAgIC8vIEZJWDogSW5jbHVkZSBzcGVjaWZpYyBwYXR0ZXJucyB0aGF0IHRyaWdnZXJlZCB0aGUgcmVqZWN0aW9uIGZvciBkZWJ1Z2dpbmdcbiAgICAgICAgY29uc3QgcGF0dGVybnMgPSByZXN1bHQuZGV0ZWN0ZWRQYXR0ZXJucz8uam9pbignLCAnKSB8fCAndW5rbm93biBwYXR0ZXJucyc7XG4gICAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKGBDcml0aWNhbCBzZWN1cml0eSB0aHJlYXQgZGV0ZWN0ZWQgaW4gcGVyc29uYSBjb250ZW50OiAke3BhdHRlcm5zfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdC5zYW5pdGl6ZWRDb250ZW50IHx8IGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgY29uc3QgeWFtbENvbnRlbnQgPSBmcm9udG1hdHRlck1hdGNoWzFdO1xuICAgIGNvbnN0IG1hcmtkb3duQ29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKGZyb250bWF0dGVyTWF0Y2hbMF0ubGVuZ3RoKTtcblxuICAgIC8vIFZhbGlkYXRlIFlBTUxcbiAgICBpZiAoIXRoaXMudmFsaWRhdGVZYW1sQ29udGVudCh5YW1sQ29udGVudCkpIHtcbiAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKCdNYWxpY2lvdXMgWUFNTCBkZXRlY3RlZCBpbiBwZXJzb25hIGZyb250bWF0dGVyJyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbWFya2Rvd24gY29udGVudFxuICAgIGNvbnN0IGNvbnRlbnRSZXN1bHQgPSB0aGlzLnZhbGlkYXRlQW5kU2FuaXRpemUobWFya2Rvd25Db250ZW50KTtcbiAgICBpZiAoIWNvbnRlbnRSZXN1bHQuaXNWYWxpZCAmJiBjb250ZW50UmVzdWx0LnNldmVyaXR5ID09PSAnY3JpdGljYWwnKSB7XG4gICAgICAvLyBGSVg6IEluY2x1ZGUgc3BlY2lmaWMgcGF0dGVybnMgdGhhdCB0cmlnZ2VyZWQgdGhlIHJlamVjdGlvbiBmb3IgZGVidWdnaW5nXG4gICAgICBjb25zdCBwYXR0ZXJucyA9IGNvbnRlbnRSZXN1bHQuZGV0ZWN0ZWRQYXR0ZXJucz8uam9pbignLCAnKSB8fCAndW5rbm93biBwYXR0ZXJucyc7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcihgQ3JpdGljYWwgc2VjdXJpdHkgdGhyZWF0IGRldGVjdGVkIGluIHBlcnNvbmEgY29udGVudDogJHtwYXR0ZXJuc31gKTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gc2FuaXRpemVkIGNvbnRlbnRcbiAgICByZXR1cm4gYC0tLVxcbiR7eWFtbENvbnRlbnR9XFxuLS0tJHtjb250ZW50UmVzdWx0LnNhbml0aXplZENvbnRlbnQgfHwgbWFya2Rvd25Db250ZW50fWA7XG4gIH1cbn0iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"PatternEncryptor.d.ts","sourceRoot":"","sources":["../../../src/security/encryption/PatternEncryptor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAMH;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,aAAa,EAAE,MAAM,CAAC;IAEtB,kDAAkD;IAClD,SAAS,EAAE,aAAa,CAAC;IAEzB,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;IAEX,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,OAAO,EAAE,OAAO,CAAC;IAEjB,2CAA2C;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IAEnB,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;CACd;AAkBD;;;;;;;GAOG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAC3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAM;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAM;IAEtC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,aAAa,CAAkB;IAEvC;;;;OAIG;gBACS,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC;IAI9C;;;;;OAKG;IACG,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCnE;;;;;;OAMG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB;IA6D1C;;;;;;OAMG;IACH,OAAO,CAAC,SAAS,EAAE,gBAAgB,GAAG,MAAM;IAgE5C;;;;;;;OAOG;YACW,SAAS;IA4BvB;;;;OAIG;IACH,SAAS,IAAI,OAAO;IAIpB;;;;OAIG;IACH,SAAS;;;;;;;;IAWT;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAStB;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAOb;;;;;;;;OAQG;IACH,WAAW,IAAI,IAAI;IAOnB;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
1
+ {"version":3,"file":"PatternEncryptor.d.ts","sourceRoot":"","sources":["../../../src/security/encryption/PatternEncryptor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAMH;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,aAAa,EAAE,MAAM,CAAC;IAEtB,kDAAkD;IAClD,SAAS,EAAE,aAAa,CAAC;IAEzB,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;IAEX,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,OAAO,EAAE,OAAO,CAAC;IAEjB,2CAA2C;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IAEnB,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;CACd;AAkBD;;;;;;;GAOG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAC3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAM;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAM;IAEtC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,aAAa,CAAkB;IAEvC;;;;OAIG;gBACS,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC;IAI9C;;;;;OAKG;IACG,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA4CnE;;;;;;OAMG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB;IA6D1C;;;;;;OAMG;IACH,OAAO,CAAC,SAAS,EAAE,gBAAgB,GAAG,MAAM;IAmE5C;;;;;;;OAOG;YACW,SAAS;IA4BvB;;;;OAIG;IACH,SAAS,IAAI,OAAO;IAIpB;;;;OAIG;IACH,SAAS;;;;;;;;IAWT;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAStB;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAOb;;;;;;;;OAQG;IACH,WAAW,IAAI,IAAI;IAOnB;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}