@dollhousemcp/mcp-server 2.0.0-rc.6 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. package/CHANGELOG.md +52 -61
  2. package/README.github.md +2 -2
  3. package/README.md +284 -224
  4. package/README.md.backup +284 -224
  5. package/README.npm.md +284 -224
  6. package/dist/cache/LRUCache.d.ts +3 -0
  7. package/dist/cache/LRUCache.d.ts.map +1 -1
  8. package/dist/cache/LRUCache.js +36 -26
  9. package/dist/config/env.d.ts +14 -4
  10. package/dist/config/env.d.ts.map +1 -1
  11. package/dist/config/env.js +20 -6
  12. package/dist/di/Container.d.ts +21 -0
  13. package/dist/di/Container.d.ts.map +1 -1
  14. package/dist/di/Container.js +250 -53
  15. package/dist/elements/BaseElement.d.ts.map +1 -1
  16. package/dist/elements/BaseElement.js +5 -10
  17. package/dist/elements/base/BaseElementManager.d.ts +22 -0
  18. package/dist/elements/base/BaseElementManager.d.ts.map +1 -1
  19. package/dist/elements/base/BaseElementManager.js +47 -7
  20. package/dist/elements/memories/Memory.d.ts +1 -0
  21. package/dist/elements/memories/Memory.d.ts.map +1 -1
  22. package/dist/elements/memories/Memory.js +12 -8
  23. package/dist/elements/memories/MemoryManager.d.ts.map +1 -1
  24. package/dist/elements/memories/MemoryManager.js +23 -42
  25. package/dist/elements/memories/MemorySearchIndex.js +2 -2
  26. package/dist/generated/version.d.ts +2 -2
  27. package/dist/generated/version.d.ts.map +1 -1
  28. package/dist/generated/version.js +3 -3
  29. package/dist/handlers/EnhancedIndexHandler.js +6 -6
  30. package/dist/handlers/element-crud/listElements.d.ts +2 -0
  31. package/dist/handlers/element-crud/listElements.d.ts.map +1 -1
  32. package/dist/handlers/element-crud/listElements.js +3 -1
  33. package/dist/handlers/mcp-aql/Gatekeeper.d.ts.map +1 -1
  34. package/dist/handlers/mcp-aql/Gatekeeper.js +23 -17
  35. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +14 -0
  36. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
  37. package/dist/handlers/mcp-aql/MCPAQLHandler.js +110 -14
  38. package/dist/handlers/mcp-aql/OperationRouter.d.ts.map +1 -1
  39. package/dist/handlers/mcp-aql/OperationRouter.js +13 -1
  40. package/dist/handlers/mcp-aql/OperationSchema.d.ts +7 -0
  41. package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
  42. package/dist/handlers/mcp-aql/OperationSchema.js +52 -1
  43. package/dist/handlers/mcp-aql/evaluatePermission.d.ts +53 -0
  44. package/dist/handlers/mcp-aql/evaluatePermission.d.ts.map +1 -0
  45. package/dist/handlers/mcp-aql/evaluatePermission.js +132 -0
  46. package/dist/handlers/mcp-aql/policies/ToolClassification.d.ts.map +1 -1
  47. package/dist/handlers/mcp-aql/policies/ToolClassification.js +2 -1
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +3 -3
  50. package/dist/logging/LogHooks.js +11 -11
  51. package/dist/logging/LogManager.d.ts +0 -2
  52. package/dist/logging/LogManager.d.ts.map +1 -1
  53. package/dist/logging/LogManager.js +1 -3
  54. package/dist/logging/sinks/MemoryLogSink.d.ts +2 -0
  55. package/dist/logging/sinks/MemoryLogSink.d.ts.map +1 -1
  56. package/dist/logging/sinks/MemoryLogSink.js +12 -3
  57. package/dist/logging/types.d.ts +0 -2
  58. package/dist/logging/types.d.ts.map +1 -1
  59. package/dist/logging/types.js +1 -1
  60. package/dist/metrics/GatekeeperMetricsTracker.d.ts +32 -0
  61. package/dist/metrics/GatekeeperMetricsTracker.d.ts.map +1 -0
  62. package/dist/metrics/GatekeeperMetricsTracker.js +42 -0
  63. package/dist/metrics/MetricsManager.d.ts +47 -0
  64. package/dist/metrics/MetricsManager.d.ts.map +1 -0
  65. package/dist/metrics/MetricsManager.js +232 -0
  66. package/dist/metrics/OperationMetricsTracker.d.ts +32 -0
  67. package/dist/metrics/OperationMetricsTracker.d.ts.map +1 -0
  68. package/dist/metrics/OperationMetricsTracker.js +53 -0
  69. package/dist/metrics/collectors/DefaultElementProviderCollector.d.ts +27 -0
  70. package/dist/metrics/collectors/DefaultElementProviderCollector.d.ts.map +1 -0
  71. package/dist/metrics/collectors/DefaultElementProviderCollector.js +69 -0
  72. package/dist/metrics/collectors/FileLockManagerCollector.d.ts +16 -0
  73. package/dist/metrics/collectors/FileLockManagerCollector.d.ts.map +1 -0
  74. package/dist/metrics/collectors/FileLockManagerCollector.js +51 -0
  75. package/dist/metrics/collectors/GatekeeperMetricsCollector.d.ts +16 -0
  76. package/dist/metrics/collectors/GatekeeperMetricsCollector.d.ts.map +1 -0
  77. package/dist/metrics/collectors/GatekeeperMetricsCollector.js +76 -0
  78. package/dist/metrics/collectors/LRUCacheCollector.d.ts +18 -0
  79. package/dist/metrics/collectors/LRUCacheCollector.d.ts.map +1 -0
  80. package/dist/metrics/collectors/LRUCacheCollector.js +95 -0
  81. package/dist/metrics/collectors/OperationMetricsCollector.d.ts +16 -0
  82. package/dist/metrics/collectors/OperationMetricsCollector.d.ts.map +1 -0
  83. package/dist/metrics/collectors/OperationMetricsCollector.js +80 -0
  84. package/dist/metrics/collectors/OperationalTelemetryCollector.d.ts +17 -0
  85. package/dist/metrics/collectors/OperationalTelemetryCollector.d.ts.map +1 -0
  86. package/dist/metrics/collectors/OperationalTelemetryCollector.js +26 -0
  87. package/dist/metrics/collectors/PerformanceMonitorCollector.d.ts +14 -0
  88. package/dist/metrics/collectors/PerformanceMonitorCollector.d.ts.map +1 -0
  89. package/dist/metrics/collectors/PerformanceMonitorCollector.js +141 -0
  90. package/dist/metrics/collectors/SecurityMonitorCollector.d.ts +21 -0
  91. package/dist/metrics/collectors/SecurityMonitorCollector.d.ts.map +1 -0
  92. package/dist/metrics/collectors/SecurityMonitorCollector.js +56 -0
  93. package/dist/metrics/collectors/SecurityTelemetryCollector.d.ts +15 -0
  94. package/dist/metrics/collectors/SecurityTelemetryCollector.d.ts.map +1 -0
  95. package/dist/metrics/collectors/SecurityTelemetryCollector.js +112 -0
  96. package/dist/metrics/collectors/TriggerMetricsTrackerCollector.d.ts +16 -0
  97. package/dist/metrics/collectors/TriggerMetricsTrackerCollector.d.ts.map +1 -0
  98. package/dist/metrics/collectors/TriggerMetricsTrackerCollector.js +26 -0
  99. package/dist/metrics/collectors/index.d.ts +11 -0
  100. package/dist/metrics/collectors/index.d.ts.map +1 -0
  101. package/dist/metrics/collectors/index.js +11 -0
  102. package/dist/metrics/sinks/MemoryMetricsSink.d.ts +22 -0
  103. package/dist/metrics/sinks/MemoryMetricsSink.d.ts.map +1 -0
  104. package/dist/metrics/sinks/MemoryMetricsSink.js +121 -0
  105. package/dist/metrics/types.d.ts +98 -0
  106. package/dist/metrics/types.d.ts.map +1 -0
  107. package/dist/metrics/types.js +24 -0
  108. package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -1
  109. package/dist/portfolio/DefaultElementProvider.js +1 -7
  110. package/dist/portfolio/EnhancedIndexManager.d.ts.map +1 -1
  111. package/dist/portfolio/EnhancedIndexManager.js +18 -18
  112. package/dist/portfolio/NLPScoringManager.d.ts.map +1 -1
  113. package/dist/portfolio/NLPScoringManager.js +5 -9
  114. package/dist/portfolio/PortfolioIndexManager.js +2 -2
  115. package/dist/portfolio/RelationshipManager.js +2 -2
  116. package/dist/portfolio/VerbTriggerManager.d.ts.map +1 -1
  117. package/dist/portfolio/VerbTriggerManager.js +5 -19
  118. package/dist/portfolio/config/IndexConfig.d.ts.map +1 -1
  119. package/dist/portfolio/config/IndexConfig.js +1 -12
  120. package/dist/portfolio/enhanced-index/ElementDefinitionBuilder.d.ts.map +1 -1
  121. package/dist/portfolio/enhanced-index/ElementDefinitionBuilder.js +3 -15
  122. package/dist/portfolio/enhanced-index/SemanticRelationshipService.d.ts.map +1 -1
  123. package/dist/portfolio/enhanced-index/SemanticRelationshipService.js +2 -16
  124. package/dist/portfolio/types/RelationshipTypes.d.ts.map +1 -1
  125. package/dist/portfolio/types/RelationshipTypes.js +3 -17
  126. package/dist/security/audit/config/suppressions.d.ts.map +1 -1
  127. package/dist/security/audit/config/suppressions.js +36 -8
  128. package/dist/security/constants.d.ts.map +1 -1
  129. package/dist/security/constants.js +10 -6
  130. package/dist/security/fileLockManager.d.ts.map +1 -1
  131. package/dist/security/fileLockManager.js +8 -6
  132. package/dist/security/secureYamlParser.d.ts.map +1 -1
  133. package/dist/security/secureYamlParser.js +1 -13
  134. package/dist/security/securityMonitor.d.ts +2 -1
  135. package/dist/security/securityMonitor.d.ts.map +1 -1
  136. package/dist/security/securityMonitor.js +14 -3
  137. package/dist/security/telemetry/SecurityTelemetry.d.ts +16 -0
  138. package/dist/security/telemetry/SecurityTelemetry.d.ts.map +1 -1
  139. package/dist/security/telemetry/SecurityTelemetry.js +30 -2
  140. package/dist/security/tokenManager.d.ts +3 -0
  141. package/dist/security/tokenManager.d.ts.map +1 -1
  142. package/dist/security/tokenManager.js +13 -5
  143. package/dist/security/validation/BackgroundValidator.d.ts.map +1 -1
  144. package/dist/security/validation/BackgroundValidator.js +7 -7
  145. package/dist/server/startup.d.ts.map +1 -1
  146. package/dist/server/startup.js +8 -24
  147. package/dist/server/tools/MCPAQLTools.js +4 -1
  148. package/dist/services/ActivationStore.d.ts.map +1 -1
  149. package/dist/services/ActivationStore.js +9 -3
  150. package/dist/services/FileWatchService.d.ts +1 -0
  151. package/dist/services/FileWatchService.d.ts.map +1 -1
  152. package/dist/services/FileWatchService.js +83 -48
  153. package/dist/services/MetadataService.d.ts.map +1 -1
  154. package/dist/services/MetadataService.js +7 -2
  155. package/dist/services/query/ElementQueryService.d.ts.map +1 -1
  156. package/dist/services/query/ElementQueryService.js +1 -41
  157. package/dist/services/query/PaginationService.d.ts.map +1 -1
  158. package/dist/services/query/PaginationService.js +1 -14
  159. package/dist/services/query/SortService.d.ts.map +1 -1
  160. package/dist/services/query/SortService.js +1 -6
  161. package/dist/services/validation/ValidationService.d.ts.map +1 -1
  162. package/dist/services/validation/ValidationService.js +3 -8
  163. package/dist/storage/ElementStorageLayer.d.ts.map +1 -1
  164. package/dist/storage/ElementStorageLayer.js +5 -2
  165. package/dist/storage/MemoryStorageLayer.d.ts.map +1 -1
  166. package/dist/storage/MemoryStorageLayer.js +5 -2
  167. package/dist/telemetry/OperationalTelemetry.js +2 -2
  168. package/dist/utils/EventDeduplicator.d.ts +44 -0
  169. package/dist/utils/EventDeduplicator.d.ts.map +1 -0
  170. package/dist/utils/EventDeduplicator.js +93 -0
  171. package/dist/utils/FileLock.d.ts.map +1 -1
  172. package/dist/utils/FileLock.js +1 -9
  173. package/dist/utils/PerformanceMonitor.d.ts.map +1 -1
  174. package/dist/utils/PerformanceMonitor.js +5 -5
  175. package/dist/utils/SlidingWindowRateLimiter.d.ts +13 -0
  176. package/dist/utils/SlidingWindowRateLimiter.d.ts.map +1 -0
  177. package/dist/utils/SlidingWindowRateLimiter.js +23 -0
  178. package/dist/web/console/IngestRoutes.d.ts +84 -0
  179. package/dist/web/console/IngestRoutes.d.ts.map +1 -0
  180. package/dist/web/console/IngestRoutes.js +252 -0
  181. package/dist/web/console/LeaderElection.d.ts +89 -0
  182. package/dist/web/console/LeaderElection.d.ts.map +1 -0
  183. package/dist/web/console/LeaderElection.js +205 -0
  184. package/dist/web/console/LeaderForwardingSink.d.ts +61 -0
  185. package/dist/web/console/LeaderForwardingSink.d.ts.map +1 -0
  186. package/dist/web/console/LeaderForwardingSink.js +197 -0
  187. package/dist/web/console/SessionNames.d.ts +46 -0
  188. package/dist/web/console/SessionNames.d.ts.map +1 -0
  189. package/dist/web/console/SessionNames.js +257 -0
  190. package/dist/web/console/UnifiedConsole.d.ts +64 -0
  191. package/dist/web/console/UnifiedConsole.d.ts.map +1 -0
  192. package/dist/web/console/UnifiedConsole.js +119 -0
  193. package/dist/web/contentPipeline.d.ts +58 -0
  194. package/dist/web/contentPipeline.d.ts.map +1 -0
  195. package/dist/web/contentPipeline.js +112 -0
  196. package/dist/web/portDiscovery.d.ts +58 -0
  197. package/dist/web/portDiscovery.d.ts.map +1 -0
  198. package/dist/web/portDiscovery.js +143 -0
  199. package/dist/web/public/app.js +148 -60
  200. package/dist/web/public/logs.js +638 -0
  201. package/dist/web/public/metrics.js +682 -0
  202. package/dist/web/public/permissions.js +394 -0
  203. package/dist/web/public/sessions.js +369 -0
  204. package/dist/web/routes/healthRoutes.d.ts +16 -0
  205. package/dist/web/routes/healthRoutes.d.ts.map +1 -0
  206. package/dist/web/routes/healthRoutes.js +29 -0
  207. package/dist/web/routes/logRoutes.d.ts +18 -0
  208. package/dist/web/routes/logRoutes.d.ts.map +1 -0
  209. package/dist/web/routes/logRoutes.js +126 -0
  210. package/dist/web/routes/metricsRoutes.d.ts +17 -0
  211. package/dist/web/routes/metricsRoutes.d.ts.map +1 -0
  212. package/dist/web/routes/metricsRoutes.js +90 -0
  213. package/dist/web/routes/permissionRoutes.d.ts +16 -0
  214. package/dist/web/routes/permissionRoutes.d.ts.map +1 -0
  215. package/dist/web/routes/permissionRoutes.js +133 -0
  216. package/dist/web/routes.d.ts.map +1 -1
  217. package/dist/web/routes.js +309 -339
  218. package/dist/web/server.d.ts +21 -1
  219. package/dist/web/server.d.ts.map +1 -1
  220. package/dist/web/server.js +42 -4
  221. package/dist/web/sinks/WebSSELogSink.d.ts +15 -0
  222. package/dist/web/sinks/WebSSELogSink.d.ts.map +1 -0
  223. package/dist/web/sinks/WebSSELogSink.js +22 -0
  224. package/dist/web/sinks/WebSSEMetricsSink.d.ts +16 -0
  225. package/dist/web/sinks/WebSSEMetricsSink.d.ts.map +1 -0
  226. package/dist/web/sinks/WebSSEMetricsSink.js +23 -0
  227. package/package.json +2 -2
  228. package/server.json +2 -2
  229. package/dist/web/public/public/app.js +0 -1878
@@ -330,6 +330,8 @@ function formatStructuredResult(result, type, invalidElementCount = 0) {
330
330
  type,
331
331
  version: item.metadata?.version || item.version,
332
332
  tags: item.metadata?.tags,
333
+ created: item.metadata?.created || '',
334
+ author: item.metadata?.author || '',
333
335
  })),
334
336
  pagination: {
335
337
  page: pagination.page,
@@ -397,4 +399,4 @@ function unknownType(type) {
397
399
  code: 'UNKNOWN_TYPE',
398
400
  };
399
401
  }
400
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdEVsZW1lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hhbmRsZXJzL2VsZW1lbnQtY3J1ZC9saXN0RWxlbWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVsRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLDBCQUEwQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFHM0csT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRTVGLG9GQUFvRjtBQUNwRixNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7R0FXRztBQUNIOzs7OztHQUtHO0FBQ0gsU0FBUyx1QkFBdUIsQ0FBQyxPQUFnQztJQUMvRCxpQ0FBaUM7SUFDakMsSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLE9BQU8sT0FBTyxDQUFDLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNqRSxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsVUFBcUMsQ0FBQztRQUN4RCxJQUFJLE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pHLE9BQU8sNkRBQTZELENBQUMsQ0FBQyxJQUFJLHdEQUF3RCxDQUFDO1FBQ3JJLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0s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RUFBRSxDQUFDO1lBQ1AsUUFBUSxFQUFFLHNCQUFzQjtZQUNoQyxVQUFVLEVBQUUsQ0FBQztZQUNiLFVBQVUsRUFBRSxDQUFDO1lBQ2IsV0FBVyxFQUFFLEtBQUs7WUFDbEIsV0FBVyxFQUFFLEtBQUs7U0FDbkI7UUFDRCxPQUFPLEVBQUU7WUFDUCxNQUFNLEVBQUUsTUFBTTtZQUNkLFNBQVMsRUFBRSxLQUFLO1NBQ2pCO1FBQ0QsWUFBWSxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUM7S0FDcEMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxJQUFZO0lBQy9CLE9BQU87UUFDTCxLQUFLLEVBQUUseUJBQXlCLElBQUksdUJBQXVCLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnRUFBZ0U7UUFDaEssSUFBSSxFQUFFLGNBQWM7S0FDckIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExpc3QgRWxlbWVudHMgSGFuZGxlciAtIFRva2VuLUVmZmljaWVudCBMaXN0aW5nc1xuICpcbiAqIElzc3VlcyAjMjk5LCAjMzA5OiBBbGwgbGlzdF9lbGVtZW50cyBjYWxscyBnbyB0aHJvdWdoIHRoZSBxdWVyeSBwaXBlbGluZVxuICogd2l0aCBkZWZhdWx0IHBhZ2luYXRpb24gKHBhZ2UgMSwgcGFnZVNpemUgMjApLiBSZXR1cm5zIHN0cnVjdHVyZWQgZGF0YVxuICogdGhhdCBGaWVsZEZpbHRlciBjYW4gcHJvY2VzcyBmb3IgdG9rZW4gb3B0aW1pemF0aW9uLlxuICpcbiAqIExlZ2FjeSB0ZXh0LWZvcm1hdCBtb2RlIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZXNwb25zZSBpcyBub3cgYSBzdHJ1Y3R1cmVkXG4gKiBvYmplY3Qgd2l0aCB7IGl0ZW1zLCBwYWdpbmF0aW9uLCBzb3J0aW5nLCBmaWx0ZXJzIH0gdGhhdCBNQ1BBUUxIYW5kbGVyJ3NcbiAqIGFwcGx5RmllbGRTZWxlY3Rpb24gY2FuIGZpbHRlciB3aXRoIHByZXNldHMgKG1pbmltYWwvc3RhbmRhcmQvZnVsbCkuXG4gKi9cblxuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tICcuLi8uLi9wb3J0Zm9saW8vUG9ydGZvbGlvTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBFbGVtZW50Q3J1ZENvbnRleHQgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBRdWVyeU9wdGlvbnMsIFF1ZXJ5UmVzdWx0LCBBZ2dyZWdhdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9xdWVyeS90eXBlcy5qcyc7XG5pbXBvcnQgeyBhZ2dyZWdhdGVFbGVtZW50cywgdmFsaWRhdGVBZ2dyZWdhdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9xdWVyeS9BZ2dyZWdhdGlvblNlcnZpY2UuanMnO1xuaW1wb3J0IHR5cGUgeyBBZ2dyZWdhdGlvblJlc3VsdCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3F1ZXJ5L0FnZ3JlZ2F0aW9uU2VydmljZS5qcyc7XG5pbXBvcnQgeyBJRWxlbWVudCB9IGZyb20gJy4uLy4uL3R5cGVzL2VsZW1lbnRzL0lFbGVtZW50LmpzJztcbmltcG9ydCB7IEVMRU1FTlRfVFlQRV9NQVAsIHRvU2luZ3VsYXJMYWJlbCB9IGZyb20gJy4uLy4uL3V0aWxzL2VsZW1lbnRUeXBlTm9ybWFsaXphdGlvbi5qcyc7XG5cbi8qKiBEZWZhdWx0IHBhZ2Ugc2l6ZSBmb3IgbGlzdF9lbGVtZW50cyB3aGVuIG5vIHBhZ2luYXRpb24gc3BlY2lmaWVkIChJc3N1ZSAjMjk5KSAqL1xuY29uc3QgREVGQVVMVF9MSVNUX1BBR0VfU0laRSA9IDIwO1xuXG4vKipcbiAqIE5vcm1hbGl6ZSBmbGF0L21peGVkIHBhcmFtcyBpbnRvIHByb3BlciBRdWVyeU9wdGlvbnMgc3RydWN0dXJlLlxuICpcbiAqIFN1cHBvcnRzIG11bHRpcGxlIGlucHV0IGZvcm1hdHMgZm9yIGNvbnZlbmllbmNlOlxuICogLSBOZXN0ZWQ6IHsgcGFnaW5hdGlvbjogeyBwYWdlOiAyLCBwYWdlU2l6ZTogMjUgfSwgZmlsdGVyczogey4uLn0sIHNvcnQ6IHsuLi59IH1cbiAqIC0gRmxhdCBwYWdpbmF0aW9uOiB7IHBhZ2U6IDIsIHBhZ2VTaXplOiAyNSB9XG4gKiAtIEZsYXQgbGltaXQvb2Zmc2V0OiB7IGxpbWl0OiAyNSwgb2Zmc2V0OiA1MCB9IChvZmZzZXQ9NTAsIGxpbWl0PTI1IOKGkiBwYWdlIDMpXG4gKiAtIEZsYXQgZmlsdGVyczogeyBuYW1lQ29udGFpbnM6ICd0ZXN0JywgdGFnczogWydhJywgJ2InXSB9XG4gKiAtIEZsYXQgc29ydDogeyBzb3J0Qnk6ICdtb2RpZmllZCcsIHNvcnRPcmRlcjogJ2Rlc2MnIH1cbiAqXG4gKiBJc3N1ZSAjMjA0OiBNQ1AtQVFMIFBhZ2luYXRpb24sIGZpbHRlcmluZywgYW5kIHNvcnRpbmdcbiAqL1xuLyoqXG4gKiBWYWxpZGF0ZSBwYWdpbmF0aW9uIGlucHV0IGJlZm9yZSBub3JtYWxpemF0aW9uLlxuICogUmV0dXJucyBhbiBlcnJvciBzdHJpbmcgaWYgaW52YWxpZCwgb3IgbnVsbCBpZiB2YWxpZC5cbiAqXG4gKiBJc3N1ZSAjMjI3OiBSZWplY3QgaW52YWxpZCBwYWdpbmF0aW9uIHBhcmFtZXRlciBjb21iaW5hdGlvbnNcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVQYWdpbmF0aW9uSW5wdXQob3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcgfCBudWxsIHtcbiAgLy8gQ2hlY2sgbmVzdGVkIHBhZ2luYXRpb24gb2JqZWN0XG4gIGlmIChvcHRpb25zLnBhZ2luYXRpb24gJiYgdHlwZW9mIG9wdGlvbnMucGFnaW5hdGlvbiA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBwID0gb3B0aW9ucy5wYWdpbmF0aW9uIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmICh0eXBlb2YgcC5wYWdlID09PSAnbnVtYmVyJyAmJiAoIU51bWJlci5pc0Zpbml0ZShwLnBhZ2UpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHAucGFnZSkgfHwgcC5wYWdlIDw9IDApKSB7XG4gICAgICByZXR1cm4gYEludmFsaWQgcGFnaW5hdGlvbjogcGFnZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciAoZ290OiAke3AucGFnZX0pLlxcbkV4YW1wbGU6IHsgcGFnaW5hdGlvbjogeyBwYWdlOiAxLCBwYWdlU2l6ZTogMjUgfSB9YDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwLnBhZ2VTaXplID09PSAnbnVtYmVyJyAmJiAoIU51bWJlci5pc0Zpbml0ZShwLnBhZ2VTaXplKSB8fCAhTnVtYmVyLmlzSW50ZWdlcihwLnBhZ2VTaXplKSB8fCBwLnBhZ2VTaXplIDw9IDApKSB7XG4gICAgICByZXR1cm4gYEludmFsaWQgcGFnaW5hdGlvbjogcGFnZVNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgKGdvdDogJHtwLnBhZ2VTaXplfSkuXFxuRXhhbXBsZTogeyBwYWdpbmF0aW9uOiB7IHBhZ2U6IDEsIHBhZ2VTaXplOiAyNSB9IH1gO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENoZWNrIGZsYXQgcGFyYW1zXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5wYWdlID09PSAnbnVtYmVyJyAmJiAoIU51bWJlci5pc0Zpbml0ZShvcHRpb25zLnBhZ2UpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG9wdGlvbnMucGFnZSkgfHwgb3B0aW9ucy5wYWdlIDw9IDApKSB7XG4gICAgcmV0dXJuIGBJbnZhbGlkIHBhZ2luYXRpb246IHBhZ2UgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgKGdvdDogJHtvcHRpb25zLnBhZ2V9KS5cXG5FeGFtcGxlOiB7IHBhZ2U6IDEsIHBhZ2VTaXplOiAyNSB9YDtcbiAgfVxuICBpZiAodHlwZW9mIG9wdGlvbnMucGFnZVNpemUgPT09ICdudW1iZXInICYmICghTnVtYmVyLmlzRmluaXRlKG9wdGlvbnMucGFnZVNpemUpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG9wdGlvbnMucGFnZVNpemUpIHx8IG9wdGlvbnMucGFnZVNpemUgPD0gMCkpIHtcbiAgICByZXR1cm4gYEludmFsaWQgcGFnaW5hdGlvbjogcGFnZVNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgKGdvdDogJHtvcHRpb25zLnBhZ2VTaXplfSkuXFxuRXhhbXBsZTogeyBwYWdlOiAxLCBwYWdlU2l6ZTogMjUgfWA7XG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmxpbWl0ID09PSAnbnVtYmVyJyAmJiAoIU51bWJlci5pc0Zpbml0ZShvcHRpb25zLmxpbWl0KSB8fCAhTnVtYmVyLmlzSW50ZWdlcihvcHRpb25zLmxpbWl0KSB8fCBvcHRpb25zLmxpbWl0IDw9IDApKSB7XG4gICAgcmV0dXJuIGBJbnZhbGlkIHBhZ2luYXRpb246IGxpbWl0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIChnb3Q6ICR7b3B0aW9ucy5saW1pdH0pLlxcbkV4YW1wbGU6IHsgbGltaXQ6IDI1LCBvZmZzZXQ6IDAgfWA7XG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRpb25zLm9mZnNldCA9PT0gJ251bWJlcicgJiYgKCFOdW1iZXIuaXNGaW5pdGUob3B0aW9ucy5vZmZzZXQpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG9wdGlvbnMub2Zmc2V0KSB8fCBvcHRpb25zLm9mZnNldCA8IDApKSB7XG4gICAgcmV0dXJuIGBJbnZhbGlkIHBhZ2luYXRpb246IG9mZnNldCBtdXN0IGJlIGEgd2hvbGUgbnVtYmVyLCAwIG9yIGdyZWF0ZXIgKGdvdDogJHtvcHRpb25zLm9mZnNldH0pLlxcbkV4YW1wbGU6IHsgbGltaXQ6IDI1LCBvZmZzZXQ6IDAgfWA7XG4gIH1cblxuICAvLyBSZWplY3QgY29uZmxpY3RpbmcgcGFnZSArIG9mZnNldCAoYW1iaWd1b3VzIGludGVudClcbiAgY29uc3QgaGFzUGFnZSA9IHR5cGVvZiBvcHRpb25zLnBhZ2UgPT09ICdudW1iZXInO1xuICBjb25zdCBoYXNPZmZzZXQgPSB0eXBlb2Ygb3B0aW9ucy5vZmZzZXQgPT09ICdudW1iZXInO1xuICBpZiAoaGFzUGFnZSAmJiBoYXNPZmZzZXQpIHtcbiAgICByZXR1cm4gXCJDb25mbGljdGluZyBwYWdpbmF0aW9uOiBjYW5ub3QgdXNlIGJvdGggJ3BhZ2UnIGFuZCAnb2Zmc2V0Jy5cXG5Vc2UgZWl0aGVyIHBhZ2UtYmFzZWQgKHsgcGFnZTogMiwgcGFnZVNpemU6IDI1IH0pIG9yIG9mZnNldC1iYXNlZCAoeyBvZmZzZXQ6IDUwLCBsaW1pdDogMjUgfSkuXCI7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUXVlcnlPcHRpb25zKG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUXVlcnlPcHRpb25zIHwgeyBlcnJvcjogc3RyaW5nIH0ge1xuICAvLyBWYWxpZGF0ZSBwYWdpbmF0aW9uIGlucHV0IGZpcnN0IChJc3N1ZSAjMjI3KVxuICBjb25zdCB2YWxpZGF0aW9uRXJyb3IgPSB2YWxpZGF0ZVBhZ2luYXRpb25JbnB1dChvcHRpb25zKTtcbiAgaWYgKHZhbGlkYXRpb25FcnJvcikge1xuICAgIHJldHVybiB7IGVycm9yOiB2YWxpZGF0aW9uRXJyb3IgfTtcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWQ6IFF1ZXJ5T3B0aW9ucyA9IHt9O1xuXG4gIC8vIE5vcm1hbGl6ZSBwYWdpbmF0aW9uXG4gIC8vIFByaW9yaXR5OiBuZXN0ZWQgcGFnaW5hdGlvbiA+IGxpbWl0L29mZnNldCA+IGZsYXQgcGFnZS9wYWdlU2l6ZVxuICBpZiAob3B0aW9ucy5wYWdpbmF0aW9uICYmIHR5cGVvZiBvcHRpb25zLnBhZ2luYXRpb24gPT09ICdvYmplY3QnKSB7XG4gICAgbm9ybWFsaXplZC5wYWdpbmF0aW9uID0gb3B0aW9ucy5wYWdpbmF0aW9uIGFzIFF1ZXJ5T3B0aW9uc1sncGFnaW5hdGlvbiddO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHBhZ2luYXRpb246IFF1ZXJ5T3B0aW9uc1sncGFnaW5hdGlvbiddID0ge307XG5cbiAgICAvLyBTdXBwb3J0IGxpbWl0L29mZnNldCBzdHlsZSAoY29udmVydCB0byBwYWdlL3BhZ2VTaXplKVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5saW1pdCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5saW1pdCA+IDApIHtcbiAgICAgIHBhZ2luYXRpb24ucGFnZVNpemUgPSBvcHRpb25zLmxpbWl0O1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLm9mZnNldCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5vZmZzZXQgPj0gMCkge1xuICAgICAgICAvLyBDb252ZXJ0IG9mZnNldCB0byBwYWdlIG51bWJlciAoMS1pbmRleGVkKVxuICAgICAgICBwYWdpbmF0aW9uLnBhZ2UgPSBNYXRoLmZsb29yKG9wdGlvbnMub2Zmc2V0IC8gb3B0aW9ucy5saW1pdCkgKyAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFN1cHBvcnQgZmxhdCBwYWdlL3BhZ2VTaXplIChvdmVycmlkZXMgbGltaXQvb2Zmc2V0IGlmIGJvdGggcHJlc2VudClcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucGFnZSA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5wYWdlID4gMCkge1xuICAgICAgcGFnaW5hdGlvbi5wYWdlID0gb3B0aW9ucy5wYWdlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucGFnZVNpemUgPT09ICdudW1iZXInICYmIG9wdGlvbnMucGFnZVNpemUgPiAwKSB7XG4gICAgICBwYWdpbmF0aW9uLnBhZ2VTaXplID0gb3B0aW9ucy5wYWdlU2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMocGFnaW5hdGlvbikubGVuZ3RoID4gMCkge1xuICAgICAgbm9ybWFsaXplZC5wYWdpbmF0aW9uID0gcGFnaW5hdGlvbjtcbiAgICB9XG4gIH1cblxuICAvLyBOb3JtYWxpemUgZmlsdGVyc1xuICAvLyBQcmlvcml0eTogbmVzdGVkIGZpbHRlcnMvZmlsdGVyID4gZmxhdCBmaWx0ZXIgZmllbGRzXG4gIGlmIChvcHRpb25zLmZpbHRlcnMgJiYgdHlwZW9mIG9wdGlvbnMuZmlsdGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICBub3JtYWxpemVkLmZpbHRlcnMgPSBvcHRpb25zLmZpbHRlcnMgYXMgUXVlcnlPcHRpb25zWydmaWx0ZXJzJ107XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5maWx0ZXIgJiYgdHlwZW9mIG9wdGlvbnMuZmlsdGVyID09PSAnb2JqZWN0Jykge1xuICAgIC8vIFN1cHBvcnQgc2luZ3VsYXIgJ2ZpbHRlcicgYXMgYWxpYXMgZm9yICdmaWx0ZXJzJ1xuICAgIG5vcm1hbGl6ZWQuZmlsdGVycyA9IG9wdGlvbnMuZmlsdGVyIGFzIFF1ZXJ5T3B0aW9uc1snZmlsdGVycyddO1xuICB9IGVsc2Uge1xuICAgIC8vIFN1cHBvcnQgZmxhdCBmaWx0ZXIgZmllbGRzXG4gICAgY29uc3QgZmlsdGVyczogTm9uTnVsbGFibGU8UXVlcnlPcHRpb25zWydmaWx0ZXJzJ10+ID0ge307XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMubmFtZUNvbnRhaW5zID09PSAnc3RyaW5nJykge1xuICAgICAgZmlsdGVycy5uYW1lQ29udGFpbnMgPSBvcHRpb25zLm5hbWVDb250YWlucztcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy50YWdzKSAmJiBvcHRpb25zLnRhZ3MubGVuZ3RoID4gMCkge1xuICAgICAgZmlsdGVycy50YWdzID0gb3B0aW9ucy50YWdzIGFzIHN0cmluZ1tdO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLnRhZ3NBbnkpICYmIG9wdGlvbnMudGFnc0FueS5sZW5ndGggPiAwKSB7XG4gICAgICBmaWx0ZXJzLnRhZ3NBbnkgPSBvcHRpb25zLnRhZ3NBbnkgYXMgc3RyaW5nW107XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRob3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmaWx0ZXJzLmF1dGhvciA9IG9wdGlvbnMuYXV0aG9yO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuY3JlYXRlZEFmdGVyID09PSAnc3RyaW5nJykge1xuICAgICAgZmlsdGVycy5jcmVhdGVkQWZ0ZXIgPSBvcHRpb25zLmNyZWF0ZWRBZnRlcjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmNyZWF0ZWRCZWZvcmUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmaWx0ZXJzLmNyZWF0ZWRCZWZvcmUgPSBvcHRpb25zLmNyZWF0ZWRCZWZvcmU7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnN0YXR1cyA9PT0gJ2FjdGl2ZScgfHwgb3B0aW9ucy5zdGF0dXMgPT09ICdpbmFjdGl2ZScgfHwgb3B0aW9ucy5zdGF0dXMgPT09ICdhbGwnKSB7XG4gICAgICBmaWx0ZXJzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVzY3JpcHRpb25Db250YWlucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGZpbHRlcnMuZGVzY3JpcHRpb25Db250YWlucyA9IG9wdGlvbnMuZGVzY3JpcHRpb25Db250YWlucztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmNhdGVnb3J5ID09PSAnc3RyaW5nJykge1xuICAgICAgZmlsdGVycy5jYXRlZ29yeSA9IG9wdGlvbnMuY2F0ZWdvcnk7XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKGZpbHRlcnMpLmxlbmd0aCA+IDApIHtcbiAgICAgIG5vcm1hbGl6ZWQuZmlsdGVycyA9IGZpbHRlcnM7XG4gICAgfVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHNvcnRcbiAgLy8gUHJpb3JpdHk6IG5lc3RlZCBzb3J0ID4gZmxhdCBzb3J0Qnkvc29ydE9yZGVyXG4gIGlmIChvcHRpb25zLnNvcnQgJiYgdHlwZW9mIG9wdGlvbnMuc29ydCA9PT0gJ29iamVjdCcpIHtcbiAgICBub3JtYWxpemVkLnNvcnQgPSBvcHRpb25zLnNvcnQgYXMgUXVlcnlPcHRpb25zWydzb3J0J107XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc29ydDogTm9uTnVsbGFibGU8UXVlcnlPcHRpb25zWydzb3J0J10+ID0ge307XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuc29ydEJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgc29ydC5zb3J0QnkgPSBvcHRpb25zLnNvcnRCeSBhcyAnbmFtZScgfCAnY3JlYXRlZCcgfCAnbW9kaWZpZWQnIHwgJ3ZlcnNpb24nIHwgJ3JldGVudGlvbic7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnNvcnRPcmRlciA9PT0gJ2FzYycgfHwgb3B0aW9ucy5zb3J0T3JkZXIgPT09ICdkZXNjJykge1xuICAgICAgc29ydC5zb3J0T3JkZXIgPSBvcHRpb25zLnNvcnRPcmRlcjtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoc29ydCkubGVuZ3RoID4gMCkge1xuICAgICAgbm9ybWFsaXplZC5zb3J0ID0gc29ydDtcbiAgICB9XG4gIH1cblxuICAvLyBOb3JtYWxpemUgYWdncmVnYXRpb24gKElzc3VlICMzMDkpXG4gIGlmIChvcHRpb25zLmFnZ3JlZ2F0ZSAmJiB0eXBlb2Ygb3B0aW9ucy5hZ2dyZWdhdGUgPT09ICdvYmplY3QnKSB7XG4gICAgbm9ybWFsaXplZC5hZ2dyZWdhdGUgPSBvcHRpb25zLmFnZ3JlZ2F0ZSBhcyBBZ2dyZWdhdGlvbk9wdGlvbnM7XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuLyoqXG4gKiBDbGVhbiB1cCB1bmRlZmluZWQgdmFsdWVzIGZyb20gb3B0aW9ucyB0byBwcmV2ZW50IHZhbGlkYXRpb24gaXNzdWVzXG4gKi9cbmZ1bmN0aW9uIGNsZWFuUXVlcnlPcHRpb25zKG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyk6IFF1ZXJ5T3B0aW9ucyB7XG4gIGNvbnN0IGNsZWFuOiBRdWVyeU9wdGlvbnMgPSB7fTtcblxuICBpZiAob3B0aW9ucy5wYWdpbmF0aW9uKSB7XG4gICAgY29uc3QgcGFnaW5hdGlvbjogUGFydGlhbDxRdWVyeU9wdGlvbnNbJ3BhZ2luYXRpb24nXT4gPSB7fTtcbiAgICBpZiAob3B0aW9ucy5wYWdpbmF0aW9uLnBhZ2UgIT09IHVuZGVmaW5lZCkgcGFnaW5hdGlvbi5wYWdlID0gb3B0aW9ucy5wYWdpbmF0aW9uLnBhZ2U7XG4gICAgaWYgKG9wdGlvbnMucGFnaW5hdGlvbi5wYWdlU2l6ZSAhPT0gdW5kZWZpbmVkKSBwYWdpbmF0aW9uLnBhZ2VTaXplID0gb3B0aW9ucy5wYWdpbmF0aW9uLnBhZ2VTaXplO1xuICAgIGlmIChPYmplY3Qua2V5cyhwYWdpbmF0aW9uKS5sZW5ndGggPiAwKSBjbGVhbi5wYWdpbmF0aW9uID0gcGFnaW5hdGlvbjtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnNvcnQpIHtcbiAgICBjb25zdCBzb3J0OiBQYXJ0aWFsPE5vbk51bGxhYmxlPFF1ZXJ5T3B0aW9uc1snc29ydCddPj4gPSB7fTtcbiAgICBpZiAob3B0aW9ucy5zb3J0LnNvcnRCeSAhPT0gdW5kZWZpbmVkKSBzb3J0LnNvcnRCeSA9IG9wdGlvbnMuc29ydC5zb3J0Qnk7XG4gICAgaWYgKG9wdGlvbnMuc29ydC5zb3J0T3JkZXIgIT09IHVuZGVmaW5lZCkgc29ydC5zb3J0T3JkZXIgPSBvcHRpb25zLnNvcnQuc29ydE9yZGVyO1xuICAgIGlmIChPYmplY3Qua2V5cyhzb3J0KS5sZW5ndGggPiAwKSBjbGVhbi5zb3J0ID0gc29ydDtcbiAgfVxuXG4gIGlmIChvcHRpb25zLmZpbHRlcnMpIHtcbiAgICBjb25zdCBmaWx0ZXJzOiBQYXJ0aWFsPE5vbk51bGxhYmxlPFF1ZXJ5T3B0aW9uc1snZmlsdGVycyddPj4gPSB7fTtcbiAgICBpZiAob3B0aW9ucy5maWx0ZXJzLm5hbWVDb250YWlucyAhPT0gdW5kZWZpbmVkKSBmaWx0ZXJzLm5hbWVDb250YWlucyA9IG9wdGlvbnMuZmlsdGVycy5uYW1lQ29udGFpbnM7XG4gICAgaWYgKG9wdGlvbnMuZmlsdGVycy50YWdzICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5maWx0ZXJzLnRhZ3MubGVuZ3RoID4gMCkgZmlsdGVycy50YWdzID0gb3B0aW9ucy5maWx0ZXJzLnRhZ3M7XG4gICAgaWYgKG9wdGlvbnMuZmlsdGVycy50YWdzQW55ICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5maWx0ZXJzLnRhZ3NBbnkubGVuZ3RoID4gMCkgZmlsdGVycy50YWdzQW55ID0gb3B0aW9ucy5maWx0ZXJzLnRhZ3NBbnk7XG4gICAgaWYgKG9wdGlvbnMuZmlsdGVycy5hdXRob3IgIT09IHVuZGVmaW5lZCkgZmlsdGVycy5hdXRob3IgPSBvcHRpb25zLmZpbHRlcnMuYXV0aG9yO1xuICAgIGlmIChvcHRpb25zLmZpbHRlcnMuY3JlYXRlZEFmdGVyICE9PSB1bmRlZmluZWQpIGZpbHRlcnMuY3JlYXRlZEFmdGVyID0gb3B0aW9ucy5maWx0ZXJzLmNyZWF0ZWRBZnRlcjtcbiAgICBpZiAob3B0aW9ucy5maWx0ZXJzLmNyZWF0ZWRCZWZvcmUgIT09IHVuZGVmaW5lZCkgZmlsdGVycy5jcmVhdGVkQmVmb3JlID0gb3B0aW9ucy5maWx0ZXJzLmNyZWF0ZWRCZWZvcmU7XG4gICAgaWYgKG9wdGlvbnMuZmlsdGVycy5zdGF0dXMgIT09IHVuZGVmaW5lZCkgZmlsdGVycy5zdGF0dXMgPSBvcHRpb25zLmZpbHRlcnMuc3RhdHVzO1xuICAgIGlmIChvcHRpb25zLmZpbHRlcnMuZGVzY3JpcHRpb25Db250YWlucyAhPT0gdW5kZWZpbmVkKSBmaWx0ZXJzLmRlc2NyaXB0aW9uQ29udGFpbnMgPSBvcHRpb25zLmZpbHRlcnMuZGVzY3JpcHRpb25Db250YWlucztcbiAgICBpZiAob3B0aW9ucy5maWx0ZXJzLmNhdGVnb3J5ICE9PSB1bmRlZmluZWQpIGZpbHRlcnMuY2F0ZWdvcnkgPSBvcHRpb25zLmZpbHRlcnMuY2F0ZWdvcnk7XG4gICAgaWYgKE9iamVjdC5rZXlzKGZpbHRlcnMpLmxlbmd0aCA+IDApIGNsZWFuLmZpbHRlcnMgPSBmaWx0ZXJzO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuYWdncmVnYXRlKSB7XG4gICAgY2xlYW4uYWdncmVnYXRlID0gb3B0aW9ucy5hZ2dyZWdhdGU7XG4gIH1cblxuICByZXR1cm4gY2xlYW47XG59XG5cbi8qKlxuICogU3RydWN0dXJlZCBpdGVtIHNoYXBlIHJldHVybmVkIGJ5IGxpc3RfZWxlbWVudHMuXG4gKiBEZXNpZ25lZCBmb3IgdG9rZW4gZWZmaWNpZW5jeSDigJQgaW5jbHVkZXMgb25seSB0aGUgZmllbGRzIExMTXMgdHlwaWNhbGx5IG5lZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdEVsZW1lbnRJdGVtIHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG4gIHRhZ3M/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBTdHJ1Y3R1cmVkIHJlc3BvbnNlIHNoYXBlIGZvciBsaXN0X2VsZW1lbnRzLlxuICogUmVwbGFjZXMgdGhlIG9sZCBNQ1AgdGV4dCBmb3JtYXQgd2l0aCBzdHJ1Y3R1cmVkIGRhdGEgdGhhdCBGaWVsZEZpbHRlciBjYW4gcHJvY2Vzcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaXN0RWxlbWVudHNSZXN1bHQge1xuICBpdGVtczogTGlzdEVsZW1lbnRJdGVtW107XG4gIHBhZ2luYXRpb246IHtcbiAgICBwYWdlOiBudW1iZXI7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICB0b3RhbEl0ZW1zOiBudW1iZXI7XG4gICAgdG90YWxQYWdlczogbnVtYmVyO1xuICAgIGhhc05leHRQYWdlOiBib29sZWFuO1xuICAgIGhhc1ByZXZQYWdlOiBib29sZWFuO1xuICB9O1xuICBzb3J0aW5nOiB7XG4gICAgc29ydEJ5OiBzdHJpbmc7XG4gICAgc29ydE9yZGVyOiBzdHJpbmc7XG4gIH07XG4gIGZpbHRlcnM/OiB7XG4gICAgYXBwbGllZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiB7XG4gICAgICBjb3VudDogbnVtYmVyO1xuICAgIH07XG4gIH07XG4gIGVsZW1lbnRfdHlwZTogc3RyaW5nO1xuICAvKiogSXNzdWUgIzcwODogQ291bnQgb2YgZWxlbWVudHMgdGhhdCBleGlzdCBvbiBkaXNrIGJ1dCBmYWlsZWQgdmFsaWRhdGlvbi4gKi9cbiAgd2FybmluZ3M/OiB7XG4gICAgaW52YWxpZF9lbGVtZW50c19jb3VudDogbnVtYmVyO1xuICB9O1xufVxuXG4vKipcbiAqIFN0cnVjdHVyZWQgZXJyb3IgcmVzcG9uc2Ug4oCUIGNvbnNpc3RlbnQgd2l0aCBzdHJ1Y3R1cmVkIHN1Y2Nlc3MgcmVzcG9uc2VzLlxuICogUmVwbGFjZXMgdGhlIG9sZCBNQ1AgdGV4dCBmb3JtYXQgZm9yIHZhbGlkYXRpb24gZXJyb3JzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZWRFcnJvciB7XG4gIGVycm9yOiBzdHJpbmc7XG4gIGNvZGU6ICdWQUxJREFUSU9OX0VSUk9SJyB8ICdVTktOT1dOX1RZUEUnIHwgJ0lOVEVSTkFMX0VSUk9SJztcbn1cblxuZXhwb3J0IHR5cGUgeyBBZ2dyZWdhdGlvblJlc3VsdCB9O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdEVsZW1lbnRzKFxuICBjb250ZXh0OiBFbGVtZW50Q3J1ZENvbnRleHQsXG4gIHR5cGU6IHN0cmluZyxcbiAgb3B0aW9ucz86IFF1ZXJ5T3B0aW9ucyB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pOiBQcm9taXNlPExpc3RFbGVtZW50c1Jlc3VsdCB8IEFnZ3JlZ2F0aW9uUmVzdWx0IHwgU3RydWN0dXJlZEVycm9yPiB7XG4gIGF3YWl0IGNvbnRleHQuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcblxuICBjb25zdCBub3JtYWxpemVkVHlwZSA9IEVMRU1FTlRfVFlQRV9NQVBbdHlwZS50cmltKCkudG9Mb3dlckNhc2UoKV07XG5cbiAgdHJ5IHtcbiAgICAvLyBOb3JtYWxpemUgb3B0aW9ucyAoc3VwcG9ydHMgZmxhdCBwYXJhbXMsIG5lc3RlZCBwYXJhbXMsIG9yIG5vIHBhcmFtcylcbiAgICBjb25zdCByYXdPcHRpb25zID0gKG9wdGlvbnMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHx8IHt9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRPcHRpb25zID0gbm9ybWFsaXplUXVlcnlPcHRpb25zKHJhd09wdGlvbnMpO1xuXG4gICAgLy8gQ2hlY2sgZm9yIHZhbGlkYXRpb24gZXJyb3JzIChJc3N1ZSAjMjI3KVxuICAgIGlmICgnZXJyb3InIGluIG5vcm1hbGl6ZWRPcHRpb25zKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlcnJvcjogbm9ybWFsaXplZE9wdGlvbnMuZXJyb3IsXG4gICAgICAgIGNvZGU6ICdWQUxJREFUSU9OX0VSUk9SJyBhcyBjb25zdCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCFub3JtYWxpemVkVHlwZSkge1xuICAgICAgcmV0dXJuIHVua25vd25UeXBlKHR5cGUpO1xuICAgIH1cblxuICAgIC8vIEdldCByYXcgZWxlbWVudHMgZnJvbSB0aGUgYXBwcm9wcmlhdGUgbWFuYWdlclxuICAgIGNvbnN0IGVsZW1lbnRzID0gYXdhaXQgZ2V0RWxlbWVudHNGb3JUeXBlKGNvbnRleHQsIG5vcm1hbGl6ZWRUeXBlKTtcblxuICAgIGlmIChlbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBlbXB0eUVsZW1lbnRzUmVzcG9uc2Uobm9ybWFsaXplZFR5cGUpO1xuICAgIH1cblxuICAgIC8vIENsZWFuIHRoZSBvcHRpb25zIHRvIHJlbW92ZSB1bmRlZmluZWQgdmFsdWVzXG4gICAgY29uc3QgY2xlYW5PcHRpb25zID0gY2xlYW5RdWVyeU9wdGlvbnMobm9ybWFsaXplZE9wdGlvbnMpO1xuXG4gICAgLy8gSGFuZGxlIGFnZ3JlZ2F0aW9uIHJlcXVlc3RzIChJc3N1ZSAjMzA5KVxuICAgIGlmIChjbGVhbk9wdGlvbnMuYWdncmVnYXRlICYmIChjbGVhbk9wdGlvbnMuYWdncmVnYXRlLmNvdW50IHx8IGNsZWFuT3B0aW9ucy5hZ2dyZWdhdGUuZ3JvdXBfYnkpKSB7XG4gICAgICByZXR1cm4gaGFuZGxlQWdncmVnYXRpb24oY29udGV4dCwgZWxlbWVudHMgYXMgSUVsZW1lbnRbXSwgbm9ybWFsaXplZFR5cGUsIGNsZWFuT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgcXVlcnkgc2VydmljZSAoZmlsdGVyIOKGkiBzb3J0IOKGkiBwYWdpbmF0ZSkgd2l0aCBkZWZhdWx0IHBhZ2luYXRpb25cbiAgICBpZiAoIWNsZWFuT3B0aW9ucy5wYWdpbmF0aW9uKSB7XG4gICAgICBjbGVhbk9wdGlvbnMucGFnaW5hdGlvbiA9IHsgcGFnZTogMSwgcGFnZVNpemU6IERFRkFVTFRfTElTVF9QQUdFX1NJWkUgfTtcbiAgICB9IGVsc2UgaWYgKCFjbGVhbk9wdGlvbnMucGFnaW5hdGlvbi5wYWdlU2l6ZSkge1xuICAgICAgY2xlYW5PcHRpb25zLnBhZ2luYXRpb24ucGFnZVNpemUgPSBERUZBVUxUX0xJU1RfUEFHRV9TSVpFO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuZWxlbWVudFF1ZXJ5U2VydmljZS5xdWVyeShlbGVtZW50cyBhcyBJRWxlbWVudFtdLCBjbGVhbk9wdGlvbnMpO1xuXG4gICAgLy8gSXNzdWUgIzcwODogSW5jbHVkZSBjb3VudCBvZiBpbnZhbGlkIGVsZW1lbnRzIGluIGxpc3QgcmVzcG9uc2VcbiAgICBjb25zdCBpbnZhbGlkQ291bnQgPSBnZXRJbnZhbGlkRWxlbWVudENvdW50KGNvbnRleHQsIG5vcm1hbGl6ZWRUeXBlKTtcblxuICAgIC8vIFJldHVybiBzdHJ1Y3R1cmVkIGRhdGEgKG5vdCBNQ1AgdGV4dCBmb3JtYXQpIHNvIEZpZWxkRmlsdGVyIGNhbiBwcm9jZXNzIGl0XG4gICAgcmV0dXJuIGZvcm1hdFN0cnVjdHVyZWRSZXN1bHQocmVzdWx0LCBub3JtYWxpemVkVHlwZSwgaW52YWxpZENvdW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ0VsZW1lbnRDUlVESGFuZGxlci5saXN0RWxlbWVudHMnLCB7IGVycm9yLCB0eXBlIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcjogYEZhaWxlZCB0byBsaXN0ICR7dHlwZX06ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YCxcbiAgICAgIGNvZGU6ICdJTlRFUk5BTF9FUlJPUicgYXMgY29uc3QsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEdldCBlbGVtZW50cyBmcm9tIHRoZSBhcHByb3ByaWF0ZSBtYW5hZ2VyIGJhc2VkIG9uIHR5cGVcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0RWxlbWVudHNGb3JUeXBlKFxuICBjb250ZXh0OiBFbGVtZW50Q3J1ZENvbnRleHQsXG4gIHR5cGU6IEVsZW1lbnRUeXBlXG4pOiBQcm9taXNlPGFueVtdPiB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgRWxlbWVudFR5cGUuUEVSU09OQTpcbiAgICAgIHJldHVybiBjb250ZXh0LnBlcnNvbmFNYW5hZ2VyLmxpc3QoKTtcbiAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOlxuICAgICAgcmV0dXJuIGNvbnRleHQuc2tpbGxNYW5hZ2VyLmxpc3QoKTtcbiAgICBjYXNlIEVsZW1lbnRUeXBlLlRFTVBMQVRFOlxuICAgICAgcmV0dXJuIGNvbnRleHQudGVtcGxhdGVNYW5hZ2VyLmxpc3QoKTtcbiAgICBjYXNlIEVsZW1lbnRUeXBlLkFHRU5UOlxuICAgICAgcmV0dXJuIGNvbnRleHQuYWdlbnRNYW5hZ2VyLmxpc3QoKTtcbiAgICBjYXNlIEVsZW1lbnRUeXBlLk1FTU9SWTpcbiAgICAgIHJldHVybiBjb250ZXh0Lm1lbW9yeU1hbmFnZXIubGlzdCgpO1xuICAgIGNhc2UgRWxlbWVudFR5cGUuRU5TRU1CTEU6XG4gICAgICByZXR1cm4gY29udGV4dC5lbnNlbWJsZU1hbmFnZXIubGlzdCgpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gW107XG4gIH1cbn1cblxuLyoqXG4gKiBJc3N1ZSAjNzA4OiBHZXQgdGhlIGNvdW50IG9mIGludmFsaWQgZWxlbWVudHMgZm9yIGEgZ2l2ZW4gdHlwZS5cbiAqL1xuZnVuY3Rpb24gZ2V0SW52YWxpZEVsZW1lbnRDb3VudChcbiAgY29udGV4dDogRWxlbWVudENydWRDb250ZXh0LFxuICB0eXBlOiBFbGVtZW50VHlwZVxuKTogbnVtYmVyIHtcbiAgbGV0IG1hbmFnZXI6IHsgZ2V0SW52YWxpZEVsZW1lbnRzPzogKCkgPT4gdW5rbm93bltdIH0gfCB1bmRlZmluZWQ7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgRWxlbWVudFR5cGUuUEVSU09OQTogbWFuYWdlciA9IGNvbnRleHQucGVyc29uYU1hbmFnZXI7IGJyZWFrO1xuICAgIGNhc2UgRWxlbWVudFR5cGUuU0tJTEw6IG1hbmFnZXIgPSBjb250ZXh0LnNraWxsTWFuYWdlcjsgYnJlYWs7XG4gICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURTogbWFuYWdlciA9IGNvbnRleHQudGVtcGxhdGVNYW5hZ2VyOyBicmVhaztcbiAgICBjYXNlIEVsZW1lbnRUeXBlLkFHRU5UOiBtYW5hZ2VyID0gY29udGV4dC5hZ2VudE1hbmFnZXI7IGJyZWFrO1xuICAgIGNhc2UgRWxlbWVudFR5cGUuTUVNT1JZOiBtYW5hZ2VyID0gY29udGV4dC5tZW1vcnlNYW5hZ2VyOyBicmVhaztcbiAgICBjYXNlIEVsZW1lbnRUeXBlLkVOU0VNQkxFOiBtYW5hZ2VyID0gY29udGV4dC5lbnNlbWJsZU1hbmFnZXI7IGJyZWFrO1xuICB9XG4gIGlmIChtYW5hZ2VyICYmIHR5cGVvZiBtYW5hZ2VyLmdldEludmFsaWRFbGVtZW50cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYW5hZ2VyLmdldEludmFsaWRFbGVtZW50cygpLmxlbmd0aDtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IFF1ZXJ5UmVzdWx0IGludG8gYSBzdHJ1Y3R1cmVkIHJlc3BvbnNlIHdpdGggY29uY2lzZSBwZXItaXRlbSBkYXRhLlxuICogVGhpcyByZXBsYWNlcyB0aGUgb2xkIHRleHQtZm9ybWF0IHJlc3BvbnNlLiBUaGUgc3RydWN0dXJlZCBzaGFwZSBhbGxvd3NcbiAqIE1DUEFRTEhhbmRsZXIuYXBwbHlGaWVsZFNlbGVjdGlvbigpIHRvIGZ1cnRoZXIgcmVkdWNlIHRva2VucyB2aWEgcHJlc2V0cy5cbiAqL1xuZnVuY3Rpb24gZm9ybWF0U3RydWN0dXJlZFJlc3VsdChcbiAgcmVzdWx0OiBRdWVyeVJlc3VsdDxJRWxlbWVudD4sXG4gIHR5cGU6IEVsZW1lbnRUeXBlLFxuICBpbnZhbGlkRWxlbWVudENvdW50ID0gMFxuKTogTGlzdEVsZW1lbnRzUmVzdWx0IHtcbiAgY29uc3QgeyBpdGVtcywgcGFnaW5hdGlvbiwgc29ydGluZywgZmlsdGVycyB9ID0gcmVzdWx0O1xuXG4gIGNvbnN0IHJlc3BvbnNlOiBMaXN0RWxlbWVudHNSZXN1bHQgPSB7XG4gICAgaXRlbXM6IGl0ZW1zLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgIG5hbWU6IGl0ZW0ubWV0YWRhdGE/Lm5hbWUgfHwgJ1Vua25vd24nLFxuICAgICAgZGVzY3JpcHRpb246IGl0ZW0ubWV0YWRhdGE/LmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgdHlwZSxcbiAgICAgIHZlcnNpb246IGl0ZW0ubWV0YWRhdGE/LnZlcnNpb24gfHwgaXRlbS52ZXJzaW9uLFxuICAgICAgdGFnczogaXRlbS5tZXRhZGF0YT8udGFncyxcbiAgICB9KSksXG4gICAgcGFnaW5hdGlvbjoge1xuICAgICAgcGFnZTogcGFnaW5hdGlvbi5wYWdlLFxuICAgICAgcGFnZVNpemU6IHBhZ2luYXRpb24ucGFnZVNpemUsXG4gICAgICB0b3RhbEl0ZW1zOiBwYWdpbmF0aW9uLnRvdGFsSXRlbXMsXG4gICAgICB0b3RhbFBhZ2VzOiBwYWdpbmF0aW9uLnRvdGFsUGFnZXMsXG4gICAgICBoYXNOZXh0UGFnZTogcGFnaW5hdGlvbi5oYXNOZXh0UGFnZSxcbiAgICAgIGhhc1ByZXZQYWdlOiBwYWdpbmF0aW9uLmhhc1ByZXZQYWdlLFxuICAgIH0sXG4gICAgc29ydGluZzoge1xuICAgICAgc29ydEJ5OiBzb3J0aW5nLnNvcnRCeSxcbiAgICAgIHNvcnRPcmRlcjogc29ydGluZy5zb3J0T3JkZXIsXG4gICAgfSxcbiAgICBmaWx0ZXJzOiBmaWx0ZXJzLmFwcGxpZWQuY291bnQgPiAwID8geyBhcHBsaWVkOiB7IC4uLmZpbHRlcnMuYXBwbGllZCB9IH0gOiB1bmRlZmluZWQsXG4gICAgZWxlbWVudF90eXBlOiB0b1Npbmd1bGFyTGFiZWwodHlwZSksXG4gIH07XG5cbiAgLy8gSXNzdWUgIzcwODogSW5jbHVkZSB3YXJuaW5nIHdoZW4gZWxlbWVudHMgZmFpbGVkIHRvIGxvYWRcbiAgaWYgKGludmFsaWRFbGVtZW50Q291bnQgPiAwKSB7XG4gICAgcmVzcG9uc2Uud2FybmluZ3MgPSB7IGludmFsaWRfZWxlbWVudHNfY291bnQ6IGludmFsaWRFbGVtZW50Q291bnQgfTtcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuLyoqXG4gKiBIYW5kbGUgYWdncmVnYXRpb24gcmVxdWVzdHMgKElzc3VlICMzMDkpLlxuICogRGVsZWdhdGVzIHRvIHNoYXJlZCBBZ2dyZWdhdGlvblNlcnZpY2UgZm9yIGNvdW50IGFuZCBncm91cF9ieS5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlQWdncmVnYXRpb24oXG4gIF9jb250ZXh0OiBFbGVtZW50Q3J1ZENvbnRleHQsXG4gIGVsZW1lbnRzOiBJRWxlbWVudFtdLFxuICB0eXBlOiBFbGVtZW50VHlwZSxcbiAgb3B0aW9uczogUXVlcnlPcHRpb25zXG4pOiBBZ2dyZWdhdGlvblJlc3VsdCB8IFN0cnVjdHVyZWRFcnJvciB7XG4gIGlmICghb3B0aW9ucy5hZ2dyZWdhdGUpIHtcbiAgICByZXR1cm4geyBjb3VudDogZWxlbWVudHMubGVuZ3RoLCBlbGVtZW50X3R5cGU6IHRvU2luZ3VsYXJMYWJlbCh0eXBlKSB9O1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgYWdncmVnYXRpb24gb3B0aW9uc1xuICBjb25zdCB2YWxpZGF0aW9uRXJyb3IgPSB2YWxpZGF0ZUFnZ3JlZ2F0aW9uT3B0aW9ucyhvcHRpb25zLmFnZ3JlZ2F0ZSk7XG4gIGlmICh2YWxpZGF0aW9uRXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXJyb3I6IHZhbGlkYXRpb25FcnJvcixcbiAgICAgIGNvZGU6ICdWQUxJREFUSU9OX0VSUk9SJyBhcyBjb25zdCxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGFnZ3JlZ2F0ZUVsZW1lbnRzKGVsZW1lbnRzLCB0b1Npbmd1bGFyTGFiZWwodHlwZSksIG9wdGlvbnMuYWdncmVnYXRlLCBvcHRpb25zLmZpbHRlcnMpO1xufVxuXG4vKipcbiAqIEVtcHR5IHJlc3BvbnNlIGZvciBlYWNoIGVsZW1lbnQgdHlwZSDigJQgcmV0dXJucyBzdHJ1Y3R1cmVkIGRhdGEgd2l0aCB6ZXJvIGl0ZW1zXG4gKi9cbmZ1bmN0aW9uIGVtcHR5RWxlbWVudHNSZXNwb25zZSh0eXBlOiBFbGVtZW50VHlwZSk6IExpc3RFbGVtZW50c1Jlc3VsdCB7XG4gIHJldHVybiB7XG4gICAgaXRlbXM6IFtdLFxuICAgIHBhZ2luYXRpb246IHtcbiAgICAgIHBhZ2U6IDEsXG4gICAgICBwYWdlU2l6ZTogREVGQVVMVF9MSVNUX1BBR0VfU0laRSxcbiAgICAgIHRvdGFsSXRlbXM6IDAsXG4gICAgICB0b3RhbFBhZ2VzOiAwLFxuICAgICAgaGFzTmV4dFBhZ2U6IGZhbHNlLFxuICAgICAgaGFzUHJldlBhZ2U6IGZhbHNlLFxuICAgIH0sXG4gICAgc29ydGluZzoge1xuICAgICAgc29ydEJ5OiAnbmFtZScsXG4gICAgICBzb3J0T3JkZXI6ICdhc2MnLFxuICAgIH0sXG4gICAgZWxlbWVudF90eXBlOiB0b1Npbmd1bGFyTGFiZWwodHlwZSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVua25vd25UeXBlKHR5cGU6IHN0cmluZyk6IFN0cnVjdHVyZWRFcnJvciB7XG4gIHJldHVybiB7XG4gICAgZXJyb3I6IGBVbmtub3duIGVsZW1lbnQgdHlwZSAnJHt0eXBlfScuIEF2YWlsYWJsZSB0eXBlczogJHtPYmplY3QudmFsdWVzKEVsZW1lbnRUeXBlKS5qb2luKCcsICcpfSAob3IgbGVnYWN5IHBsdXJhbCBmb3JtczogcGVyc29uYXMsIHNraWxscywgdGVtcGxhdGVzLCBhZ2VudHMpYCxcbiAgICBjb2RlOiAnVU5LTk9XTl9UWVBFJyxcbiAgfTtcbn1cbiJdfQ==
402
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdEVsZW1lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hhbmRsZXJzL2VsZW1lbnQtY3J1ZC9saXN0RWxlbWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVsRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLDBCQUEwQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFHM0csT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRTVGLG9GQUFvRjtBQUNwRixNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7R0FXRztBQUNIOzs7OztHQUtHO0FBQ0gsU0FBUyx1QkFBdUIsQ0FBQyxPQUFnQztJQUMvRCxpQ0FBaUM7SUFDakMsSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLE9BQU8sT0FBTyxDQUFDLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNqRSxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsVUFBcUMsQ0FBQztRQUN4RCxJQUFJLE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pHLE9BQU8sNkRBQTZELENBQUMsQ0FBQyxJQUFJLHdEQUF3RCxDQUFDO1FBQ3JJLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0s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RyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLHFCQUFxQixDQUFDLElBQWlCO0lBQzlDLE9BQU87UUFDTCxLQUFLLEVBQUUsRUFBRTtRQUNULFVBQVUsRUFBRTtZQUNWLElBQUksRUFBRSxDQUFDO1lBQ1AsUUFBUSxFQUFFLHNCQUFzQjtZQUNoQyxVQUFVLEVBQUUsQ0FBQztZQUNiLFVBQVUsRUFBRSxDQUFDO1lBQ2IsV0FBVyxFQUFFLEtBQUs7WUFDbEIsV0FBVyxFQUFFLEtBQUs7U0FDbkI7UUFDRCxPQUFPLEVBQUU7WUFDUCxNQUFNLEVBQUUsTUFBTTtZQUNkLFNBQVMsRUFBRSxLQUFLO1NBQ2pCO1FBQ0QsWUFBWSxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUM7S0FDcEMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxJQUFZO0lBQy9CLE9BQU87UUFDTCxLQUFLLEVBQUUseUJBQXlCLElBQUksdUJBQXVCLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnRUFBZ0U7UUFDaEssSUFBSSxFQUFFLGNBQWM7S0FDckIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExpc3QgRWxlbWVudHMgSGFuZGxlciAtIFRva2VuLUVmZmljaWVudCBMaXN0aW5nc1xuICpcbiAqIElzc3VlcyAjMjk5LCAjMzA5OiBBbGwgbGlzdF9lbGVtZW50cyBjYWxscyBnbyB0aHJvdWdoIHRoZSBxdWVyeSBwaXBlbGluZVxuICogd2l0aCBkZWZhdWx0IHBhZ2luYXRpb24gKHBhZ2UgMSwgcGFnZVNpemUgMjApLiBSZXR1cm5zIHN0cnVjdHVyZWQgZGF0YVxuICogdGhhdCBGaWVsZEZpbHRlciBjYW4gcHJvY2VzcyBmb3IgdG9rZW4gb3B0aW1pemF0aW9uLlxuICpcbiAqIExlZ2FjeSB0ZXh0LWZvcm1hdCBtb2RlIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZXNwb25zZSBpcyBub3cgYSBzdHJ1Y3R1cmVkXG4gKiBvYmplY3Qgd2l0aCB7IGl0ZW1zLCBwYWdpbmF0aW9uLCBzb3J0aW5nLCBmaWx0ZXJzIH0gdGhhdCBNQ1BBUUxIYW5kbGVyJ3NcbiAqIGFwcGx5RmllbGRTZWxlY3Rpb24gY2FuIGZpbHRlciB3aXRoIHByZXNldHMgKG1pbmltYWwvc3RhbmRhcmQvZnVsbCkuXG4gKi9cblxuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tICcuLi8uLi9wb3J0Zm9saW8vUG9ydGZvbGlvTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBFbGVtZW50Q3J1ZENvbnRleHQgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBRdWVyeU9wdGlvbnMsIFF1ZXJ5UmVzdWx0LCBBZ2dyZWdhdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9xdWVyeS90eXBlcy5qcyc7XG5pbXBvcnQgeyBhZ2dyZWdhdGVFbGVtZW50cywgdmFsaWRhdGVBZ2dyZWdhdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9xdWVyeS9BZ2dyZWdhdGlvblNlcnZpY2UuanMnO1xuaW1wb3J0IHR5cGUgeyBBZ2dyZWdhdGlvblJlc3VsdCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3F1ZXJ5L0FnZ3JlZ2F0aW9uU2VydmljZS5qcyc7XG5pbXBvcnQgeyBJRWxlbWVudCB9IGZyb20gJy4uLy4uL3R5cGVzL2VsZW1lbnRzL0lFbGVtZW50LmpzJztcbmltcG9ydCB7IEVMRU1FTlRfVFlQRV9NQVAsIHRvU2luZ3VsYXJMYWJlbCB9IGZyb20gJy4uLy4uL3V0aWxzL2VsZW1lbnRUeXBlTm9ybWFsaXphdGlvbi5qcyc7XG5cbi8qKiBEZWZhdWx0IHBhZ2Ugc2l6ZSBmb3IgbGlzdF9lbGVtZW50cyB3aGVuIG5vIHBhZ2luYXRpb24gc3BlY2lmaWVkIChJc3N1ZSAjMjk5KSAqL1xuY29uc3QgREVGQVVMVF9MSVNUX1BBR0VfU0laRSA9IDIwO1xuXG4vKipcbiAqIE5vcm1hbGl6ZSBmbGF0L21peGVkIHBhcmFtcyBpbnRvIHByb3BlciBRdWVyeU9wdGlvbnMgc3RydWN0dXJlLlxuICpcbiAqIFN1cHBvcnRzIG11bHRpcGxlIGlucHV0IGZvcm1hdHMgZm9yIGNvbnZlbmllbmNlOlxuICogLSBOZXN0ZWQ6IHsgcGFnaW5hdGlvbjogeyBwYWdlOiAyLCBwYWdlU2l6ZTogMjUgfSwgZmlsdGVyczogey4uLn0sIHNvcnQ6IHsuLi59IH1cbiAqIC0gRmxhdCBwYWdpbmF0aW9uOiB7IHBhZ2U6IDIsIHBhZ2VTaXplOiAyNSB9XG4gKiAtIEZsYXQgbGltaXQvb2Zmc2V0OiB7IGxpbWl0OiAyNSwgb2Zmc2V0OiA1MCB9IChvZmZzZXQ9NTAsIGxpbWl0PTI1IOKGkiBwYWdlIDMpXG4gKiAtIEZsYXQgZmlsdGVyczogeyBuYW1lQ29udGFpbnM6ICd0ZXN0JywgdGFnczogWydhJywgJ2InXSB9XG4gKiAtIEZsYXQgc29ydDogeyBzb3J0Qnk6ICdtb2RpZmllZCcsIHNvcnRPcmRlcjogJ2Rlc2MnIH1cbiAqXG4gKiBJc3N1ZSAjMjA0OiBNQ1AtQVFMIFBhZ2luYXRpb24sIGZpbHRlcmluZywgYW5kIHNvcnRpbmdcbiAqL1xuLyoqXG4gKiBWYWxpZGF0ZSBwYWdpbmF0aW9uIGlucHV0IGJlZm9yZSBub3JtYWxpemF0aW9uLlxuICogUmV0dXJucyBhbiBlcnJvciBzdHJpbmcgaWYgaW52YWxpZCwgb3IgbnVsbCBpZiB2YWxpZC5cbiAqXG4gKiBJc3N1ZSAjMjI3OiBSZWplY3QgaW52YWxpZCBwYWdpbmF0aW9uIHBhcmFtZXRlciBjb21iaW5hdGlvbnNcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVQYWdpbmF0aW9uSW5wdXQob3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcgfCBudWxsIHtcbiAgLy8gQ2hlY2sgbmVzdGVkIHBhZ2luYXRpb24gb2JqZWN0XG4gIGlmIChvcHRpb25zLnBhZ2luYXRpb24gJiYgdHlwZW9mIG9wdGlvbnMucGFnaW5hdGlvbiA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBwID0gb3B0aW9ucy5wYWdpbmF0aW9uIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmICh0eXBlb2YgcC5wYWdlID09PSAnbnVtYmVyJyAmJiAoIU51bWJlci5pc0Zpbml0ZShwLnBhZ2UpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHAucGFnZSkgfHwgcC5wYWdlIDw9IDApKSB7XG4gICAgICByZXR1cm4gYEludmFsaWQgcGFnaW5hdGlvbjogcGFnZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciAoZ290OiAke3AucGFnZX0pLlxcbkV4YW1wbGU6IHsgcGFnaW5hdGlvbjogeyBwYWdlOiAxLCBwYWdlU2l6ZTogMjUgfSB9YDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwLnBhZ2VTaXplID09PSAnbnVtYmVyJyAmJiAoIU51bWJlci5pc0Zpbml0ZShwLnBhZ2VTaXplKSB8fCAhTnVtYmVyLmlzSW50ZWdlcihwLnBhZ2VTaXplKSB8fCBwLnBhZ2VTaXplIDw9IDApKSB7XG4gICAgICByZXR1cm4gYEludmFsaWQgcGFnaW5hdGlvbjogcGFnZVNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgKGdvdDogJHtwLnBhZ2VTaXplfSkuXFxuRXhhbXBsZTogeyBwYWdpbmF0aW9uOiB7IHBhZ2U6IDEsIHBhZ2VTaXplOiAyNSB9IH1gO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENoZWNrIGZsYXQgcGFyYW1zXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5wYWdlID09PSAnbnVtYmVyJyAmJiAoIU51bWJlci5pc0Zpbml0ZShvcHRpb25zLnBhZ2UpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG9wdGlvbnMucGFnZSkgfHwgb3B0aW9ucy5wYWdlIDw9IDApKSB7XG4gICAgcmV0dXJuIGBJbnZhbGlkIHBhZ2luYXRpb246IHBhZ2UgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgKGdvdDogJHtvcHRpb25zLnBhZ2V9KS5cXG5FeGFtcGxlOiB7IHBhZ2U6IDEsIHBhZ2VTaXplOiAyNSB9YDtcbiAgfVxuICBpZiAodHlwZW9mIG9wdGlvbnMucGFnZVNpemUgPT09ICdudW1iZXInICYmICghTnVtYmVyLmlzRmluaXRlKG9wdGlvbnMucGFnZVNpemUpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG9wdGlvbnMucGFnZVNpemUpIHx8IG9wdGlvbnMucGFnZVNpemUgPD0gMCkpIHtcbiAgICByZXR1cm4gYEludmFsaWQgcGFnaW5hdGlvbjogcGFnZVNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgKGdvdDogJHtvcHRpb25zLnBhZ2VTaXplfSkuXFxuRXhhbXBsZTogeyBwYWdlOiAxLCBwYWdlU2l6ZTogMjUgfWA7XG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmxpbWl0ID09PSAnbnVtYmVyJyAmJiAoIU51bWJlci5pc0Zpbml0ZShvcHRpb25zLmxpbWl0KSB8fCAhTnVtYmVyLmlzSW50ZWdlcihvcHRpb25zLmxpbWl0KSB8fCBvcHRpb25zLmxpbWl0IDw9IDApKSB7XG4gICAgcmV0dXJuIGBJbnZhbGlkIHBhZ2luYXRpb246IGxpbWl0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIChnb3Q6ICR7b3B0aW9ucy5saW1pdH0pLlxcbkV4YW1wbGU6IHsgbGltaXQ6IDI1LCBvZmZzZXQ6IDAgfWA7XG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRpb25zLm9mZnNldCA9PT0gJ251bWJlcicgJiYgKCFOdW1iZXIuaXNGaW5pdGUob3B0aW9ucy5vZmZzZXQpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG9wdGlvbnMub2Zmc2V0KSB8fCBvcHRpb25zLm9mZnNldCA8IDApKSB7XG4gICAgcmV0dXJuIGBJbnZhbGlkIHBhZ2luYXRpb246IG9mZnNldCBtdXN0IGJlIGEgd2hvbGUgbnVtYmVyLCAwIG9yIGdyZWF0ZXIgKGdvdDogJHtvcHRpb25zLm9mZnNldH0pLlxcbkV4YW1wbGU6IHsgbGltaXQ6IDI1LCBvZmZzZXQ6IDAgfWA7XG4gIH1cblxuICAvLyBSZWplY3QgY29uZmxpY3RpbmcgcGFnZSArIG9mZnNldCAoYW1iaWd1b3VzIGludGVudClcbiAgY29uc3QgaGFzUGFnZSA9IHR5cGVvZiBvcHRpb25zLnBhZ2UgPT09ICdudW1iZXInO1xuICBjb25zdCBoYXNPZmZzZXQgPSB0eXBlb2Ygb3B0aW9ucy5vZmZzZXQgPT09ICdudW1iZXInO1xuICBpZiAoaGFzUGFnZSAmJiBoYXNPZmZzZXQpIHtcbiAgICByZXR1cm4gXCJDb25mbGljdGluZyBwYWdpbmF0aW9uOiBjYW5ub3QgdXNlIGJvdGggJ3BhZ2UnIGFuZCAnb2Zmc2V0Jy5cXG5Vc2UgZWl0aGVyIHBhZ2UtYmFzZWQgKHsgcGFnZTogMiwgcGFnZVNpemU6IDI1IH0pIG9yIG9mZnNldC1iYXNlZCAoeyBvZmZzZXQ6IDUwLCBsaW1pdDogMjUgfSkuXCI7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUXVlcnlPcHRpb25zKG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUXVlcnlPcHRpb25zIHwgeyBlcnJvcjogc3RyaW5nIH0ge1xuICAvLyBWYWxpZGF0ZSBwYWdpbmF0aW9uIGlucHV0IGZpcnN0IChJc3N1ZSAjMjI3KVxuICBjb25zdCB2YWxpZGF0aW9uRXJyb3IgPSB2YWxpZGF0ZVBhZ2luYXRpb25JbnB1dChvcHRpb25zKTtcbiAgaWYgKHZhbGlkYXRpb25FcnJvcikge1xuICAgIHJldHVybiB7IGVycm9yOiB2YWxpZGF0aW9uRXJyb3IgfTtcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWQ6IFF1ZXJ5T3B0aW9ucyA9IHt9O1xuXG4gIC8vIE5vcm1hbGl6ZSBwYWdpbmF0aW9uXG4gIC8vIFByaW9yaXR5OiBuZXN0ZWQgcGFnaW5hdGlvbiA+IGxpbWl0L29mZnNldCA+IGZsYXQgcGFnZS9wYWdlU2l6ZVxuICBpZiAob3B0aW9ucy5wYWdpbmF0aW9uICYmIHR5cGVvZiBvcHRpb25zLnBhZ2luYXRpb24gPT09ICdvYmplY3QnKSB7XG4gICAgbm9ybWFsaXplZC5wYWdpbmF0aW9uID0gb3B0aW9ucy5wYWdpbmF0aW9uIGFzIFF1ZXJ5T3B0aW9uc1sncGFnaW5hdGlvbiddO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHBhZ2luYXRpb246IFF1ZXJ5T3B0aW9uc1sncGFnaW5hdGlvbiddID0ge307XG5cbiAgICAvLyBTdXBwb3J0IGxpbWl0L29mZnNldCBzdHlsZSAoY29udmVydCB0byBwYWdlL3BhZ2VTaXplKVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5saW1pdCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5saW1pdCA+IDApIHtcbiAgICAgIHBhZ2luYXRpb24ucGFnZVNpemUgPSBvcHRpb25zLmxpbWl0O1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLm9mZnNldCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5vZmZzZXQgPj0gMCkge1xuICAgICAgICAvLyBDb252ZXJ0IG9mZnNldCB0byBwYWdlIG51bWJlciAoMS1pbmRleGVkKVxuICAgICAgICBwYWdpbmF0aW9uLnBhZ2UgPSBNYXRoLmZsb29yKG9wdGlvbnMub2Zmc2V0IC8gb3B0aW9ucy5saW1pdCkgKyAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFN1cHBvcnQgZmxhdCBwYWdlL3BhZ2VTaXplIChvdmVycmlkZXMgbGltaXQvb2Zmc2V0IGlmIGJvdGggcHJlc2VudClcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucGFnZSA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5wYWdlID4gMCkge1xuICAgICAgcGFnaW5hdGlvbi5wYWdlID0gb3B0aW9ucy5wYWdlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucGFnZVNpemUgPT09ICdudW1iZXInICYmIG9wdGlvbnMucGFnZVNpemUgPiAwKSB7XG4gICAgICBwYWdpbmF0aW9uLnBhZ2VTaXplID0gb3B0aW9ucy5wYWdlU2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMocGFnaW5hdGlvbikubGVuZ3RoID4gMCkge1xuICAgICAgbm9ybWFsaXplZC5wYWdpbmF0aW9uID0gcGFnaW5hdGlvbjtcbiAgICB9XG4gIH1cblxuICAvLyBOb3JtYWxpemUgZmlsdGVyc1xuICAvLyBQcmlvcml0eTogbmVzdGVkIGZpbHRlcnMvZmlsdGVyID4gZmxhdCBmaWx0ZXIgZmllbGRzXG4gIGlmIChvcHRpb25zLmZpbHRlcnMgJiYgdHlwZW9mIG9wdGlvbnMuZmlsdGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICBub3JtYWxpemVkLmZpbHRlcnMgPSBvcHRpb25zLmZpbHRlcnMgYXMgUXVlcnlPcHRpb25zWydmaWx0ZXJzJ107XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5maWx0ZXIgJiYgdHlwZW9mIG9wdGlvbnMuZmlsdGVyID09PSAnb2JqZWN0Jykge1xuICAgIC8vIFN1cHBvcnQgc2luZ3VsYXIgJ2ZpbHRlcicgYXMgYWxpYXMgZm9yICdmaWx0ZXJzJ1xuICAgIG5vcm1hbGl6ZWQuZmlsdGVycyA9IG9wdGlvbnMuZmlsdGVyIGFzIFF1ZXJ5T3B0aW9uc1snZmlsdGVycyddO1xuICB9IGVsc2Uge1xuICAgIC8vIFN1cHBvcnQgZmxhdCBmaWx0ZXIgZmllbGRzXG4gICAgY29uc3QgZmlsdGVyczogTm9uTnVsbGFibGU8UXVlcnlPcHRpb25zWydmaWx0ZXJzJ10+ID0ge307XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMubmFtZUNvbnRhaW5zID09PSAnc3RyaW5nJykge1xuICAgICAgZmlsdGVycy5uYW1lQ29udGFpbnMgPSBvcHRpb25zLm5hbWVDb250YWlucztcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy50YWdzKSAmJiBvcHRpb25zLnRhZ3MubGVuZ3RoID4gMCkge1xuICAgICAgZmlsdGVycy50YWdzID0gb3B0aW9ucy50YWdzIGFzIHN0cmluZ1tdO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLnRhZ3NBbnkpICYmIG9wdGlvbnMudGFnc0FueS5sZW5ndGggPiAwKSB7XG4gICAgICBmaWx0ZXJzLnRhZ3NBbnkgPSBvcHRpb25zLnRhZ3NBbnkgYXMgc3RyaW5nW107XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRob3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmaWx0ZXJzLmF1dGhvciA9IG9wdGlvbnMuYXV0aG9yO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuY3JlYXRlZEFmdGVyID09PSAnc3RyaW5nJykge1xuICAgICAgZmlsdGVycy5jcmVhdGVkQWZ0ZXIgPSBvcHRpb25zLmNyZWF0ZWRBZnRlcjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmNyZWF0ZWRCZWZvcmUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmaWx0ZXJzLmNyZWF0ZWRCZWZvcmUgPSBvcHRpb25zLmNyZWF0ZWRCZWZvcmU7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnN0YXR1cyA9PT0gJ2FjdGl2ZScgfHwgb3B0aW9ucy5zdGF0dXMgPT09ICdpbmFjdGl2ZScgfHwgb3B0aW9ucy5zdGF0dXMgPT09ICdhbGwnKSB7XG4gICAgICBmaWx0ZXJzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVzY3JpcHRpb25Db250YWlucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGZpbHRlcnMuZGVzY3JpcHRpb25Db250YWlucyA9IG9wdGlvbnMuZGVzY3JpcHRpb25Db250YWlucztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmNhdGVnb3J5ID09PSAnc3RyaW5nJykge1xuICAgICAgZmlsdGVycy5jYXRlZ29yeSA9IG9wdGlvbnMuY2F0ZWdvcnk7XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKGZpbHRlcnMpLmxlbmd0aCA+IDApIHtcbiAgICAgIG5vcm1hbGl6ZWQuZmlsdGVycyA9IGZpbHRlcnM7XG4gICAgfVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHNvcnRcbiAgLy8gUHJpb3JpdHk6IG5lc3RlZCBzb3J0ID4gZmxhdCBzb3J0Qnkvc29ydE9yZGVyXG4gIGlmIChvcHRpb25zLnNvcnQgJiYgdHlwZW9mIG9wdGlvbnMuc29ydCA9PT0gJ29iamVjdCcpIHtcbiAgICBub3JtYWxpemVkLnNvcnQgPSBvcHRpb25zLnNvcnQgYXMgUXVlcnlPcHRpb25zWydzb3J0J107XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc29ydDogTm9uTnVsbGFibGU8UXVlcnlPcHRpb25zWydzb3J0J10+ID0ge307XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuc29ydEJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgc29ydC5zb3J0QnkgPSBvcHRpb25zLnNvcnRCeSBhcyAnbmFtZScgfCAnY3JlYXRlZCcgfCAnbW9kaWZpZWQnIHwgJ3ZlcnNpb24nIHwgJ3JldGVudGlvbic7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnNvcnRPcmRlciA9PT0gJ2FzYycgfHwgb3B0aW9ucy5zb3J0T3JkZXIgPT09ICdkZXNjJykge1xuICAgICAgc29ydC5zb3J0T3JkZXIgPSBvcHRpb25zLnNvcnRPcmRlcjtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoc29ydCkubGVuZ3RoID4gMCkge1xuICAgICAgbm9ybWFsaXplZC5zb3J0ID0gc29ydDtcbiAgICB9XG4gIH1cblxuICAvLyBOb3JtYWxpemUgYWdncmVnYXRpb24gKElzc3VlICMzMDkpXG4gIGlmIChvcHRpb25zLmFnZ3JlZ2F0ZSAmJiB0eXBlb2Ygb3B0aW9ucy5hZ2dyZWdhdGUgPT09ICdvYmplY3QnKSB7XG4gICAgbm9ybWFsaXplZC5hZ2dyZWdhdGUgPSBvcHRpb25zLmFnZ3JlZ2F0ZSBhcyBBZ2dyZWdhdGlvbk9wdGlvbnM7XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuLyoqXG4gKiBDbGVhbiB1cCB1bmRlZmluZWQgdmFsdWVzIGZyb20gb3B0aW9ucyB0byBwcmV2ZW50IHZhbGlkYXRpb24gaXNzdWVzXG4gKi9cbmZ1bmN0aW9uIGNsZWFuUXVlcnlPcHRpb25zKG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyk6IFF1ZXJ5T3B0aW9ucyB7XG4gIGNvbnN0IGNsZWFuOiBRdWVyeU9wdGlvbnMgPSB7fTtcblxuICBpZiAob3B0aW9ucy5wYWdpbmF0aW9uKSB7XG4gICAgY29uc3QgcGFnaW5hdGlvbjogUGFydGlhbDxRdWVyeU9wdGlvbnNbJ3BhZ2luYXRpb24nXT4gPSB7fTtcbiAgICBpZiAob3B0aW9ucy5wYWdpbmF0aW9uLnBhZ2UgIT09IHVuZGVmaW5lZCkgcGFnaW5hdGlvbi5wYWdlID0gb3B0aW9ucy5wYWdpbmF0aW9uLnBhZ2U7XG4gICAgaWYgKG9wdGlvbnMucGFnaW5hdGlvbi5wYWdlU2l6ZSAhPT0gdW5kZWZpbmVkKSBwYWdpbmF0aW9uLnBhZ2VTaXplID0gb3B0aW9ucy5wYWdpbmF0aW9uLnBhZ2VTaXplO1xuICAgIGlmIChPYmplY3Qua2V5cyhwYWdpbmF0aW9uKS5sZW5ndGggPiAwKSBjbGVhbi5wYWdpbmF0aW9uID0gcGFnaW5hdGlvbjtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnNvcnQpIHtcbiAgICBjb25zdCBzb3J0OiBQYXJ0aWFsPE5vbk51bGxhYmxlPFF1ZXJ5T3B0aW9uc1snc29ydCddPj4gPSB7fTtcbiAgICBpZiAob3B0aW9ucy5zb3J0LnNvcnRCeSAhPT0gdW5kZWZpbmVkKSBzb3J0LnNvcnRCeSA9IG9wdGlvbnMuc29ydC5zb3J0Qnk7XG4gICAgaWYgKG9wdGlvbnMuc29ydC5zb3J0T3JkZXIgIT09IHVuZGVmaW5lZCkgc29ydC5zb3J0T3JkZXIgPSBvcHRpb25zLnNvcnQuc29ydE9yZGVyO1xuICAgIGlmIChPYmplY3Qua2V5cyhzb3J0KS5sZW5ndGggPiAwKSBjbGVhbi5zb3J0ID0gc29ydDtcbiAgfVxuXG4gIGlmIChvcHRpb25zLmZpbHRlcnMpIHtcbiAgICBjb25zdCBmaWx0ZXJzOiBQYXJ0aWFsPE5vbk51bGxhYmxlPFF1ZXJ5T3B0aW9uc1snZmlsdGVycyddPj4gPSB7fTtcbiAgICBpZiAob3B0aW9ucy5maWx0ZXJzLm5hbWVDb250YWlucyAhPT0gdW5kZWZpbmVkKSBmaWx0ZXJzLm5hbWVDb250YWlucyA9IG9wdGlvbnMuZmlsdGVycy5uYW1lQ29udGFpbnM7XG4gICAgaWYgKG9wdGlvbnMuZmlsdGVycy50YWdzICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5maWx0ZXJzLnRhZ3MubGVuZ3RoID4gMCkgZmlsdGVycy50YWdzID0gb3B0aW9ucy5maWx0ZXJzLnRhZ3M7XG4gICAgaWYgKG9wdGlvbnMuZmlsdGVycy50YWdzQW55ICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5maWx0ZXJzLnRhZ3NBbnkubGVuZ3RoID4gMCkgZmlsdGVycy50YWdzQW55ID0gb3B0aW9ucy5maWx0ZXJzLnRhZ3NBbnk7XG4gICAgaWYgKG9wdGlvbnMuZmlsdGVycy5hdXRob3IgIT09IHVuZGVmaW5lZCkgZmlsdGVycy5hdXRob3IgPSBvcHRpb25zLmZpbHRlcnMuYXV0aG9yO1xuICAgIGlmIChvcHRpb25zLmZpbHRlcnMuY3JlYXRlZEFmdGVyICE9PSB1bmRlZmluZWQpIGZpbHRlcnMuY3JlYXRlZEFmdGVyID0gb3B0aW9ucy5maWx0ZXJzLmNyZWF0ZWRBZnRlcjtcbiAgICBpZiAob3B0aW9ucy5maWx0ZXJzLmNyZWF0ZWRCZWZvcmUgIT09IHVuZGVmaW5lZCkgZmlsdGVycy5jcmVhdGVkQmVmb3JlID0gb3B0aW9ucy5maWx0ZXJzLmNyZWF0ZWRCZWZvcmU7XG4gICAgaWYgKG9wdGlvbnMuZmlsdGVycy5zdGF0dXMgIT09IHVuZGVmaW5lZCkgZmlsdGVycy5zdGF0dXMgPSBvcHRpb25zLmZpbHRlcnMuc3RhdHVzO1xuICAgIGlmIChvcHRpb25zLmZpbHRlcnMuZGVzY3JpcHRpb25Db250YWlucyAhPT0gdW5kZWZpbmVkKSBmaWx0ZXJzLmRlc2NyaXB0aW9uQ29udGFpbnMgPSBvcHRpb25zLmZpbHRlcnMuZGVzY3JpcHRpb25Db250YWlucztcbiAgICBpZiAob3B0aW9ucy5maWx0ZXJzLmNhdGVnb3J5ICE9PSB1bmRlZmluZWQpIGZpbHRlcnMuY2F0ZWdvcnkgPSBvcHRpb25zLmZpbHRlcnMuY2F0ZWdvcnk7XG4gICAgaWYgKE9iamVjdC5rZXlzKGZpbHRlcnMpLmxlbmd0aCA+IDApIGNsZWFuLmZpbHRlcnMgPSBmaWx0ZXJzO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuYWdncmVnYXRlKSB7XG4gICAgY2xlYW4uYWdncmVnYXRlID0gb3B0aW9ucy5hZ2dyZWdhdGU7XG4gIH1cblxuICByZXR1cm4gY2xlYW47XG59XG5cbi8qKlxuICogU3RydWN0dXJlZCBpdGVtIHNoYXBlIHJldHVybmVkIGJ5IGxpc3RfZWxlbWVudHMuXG4gKiBEZXNpZ25lZCBmb3IgdG9rZW4gZWZmaWNpZW5jeSDigJQgaW5jbHVkZXMgb25seSB0aGUgZmllbGRzIExMTXMgdHlwaWNhbGx5IG5lZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdEVsZW1lbnRJdGVtIHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG4gIHRhZ3M/OiBzdHJpbmdbXTtcbiAgY3JlYXRlZD86IHN0cmluZztcbiAgYXV0aG9yPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFN0cnVjdHVyZWQgcmVzcG9uc2Ugc2hhcGUgZm9yIGxpc3RfZWxlbWVudHMuXG4gKiBSZXBsYWNlcyB0aGUgb2xkIE1DUCB0ZXh0IGZvcm1hdCB3aXRoIHN0cnVjdHVyZWQgZGF0YSB0aGF0IEZpZWxkRmlsdGVyIGNhbiBwcm9jZXNzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RFbGVtZW50c1Jlc3VsdCB7XG4gIGl0ZW1zOiBMaXN0RWxlbWVudEl0ZW1bXTtcbiAgcGFnaW5hdGlvbjoge1xuICAgIHBhZ2U6IG51bWJlcjtcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICAgIHRvdGFsSXRlbXM6IG51bWJlcjtcbiAgICB0b3RhbFBhZ2VzOiBudW1iZXI7XG4gICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgaGFzUHJldlBhZ2U6IGJvb2xlYW47XG4gIH07XG4gIHNvcnRpbmc6IHtcbiAgICBzb3J0Qnk6IHN0cmluZztcbiAgICBzb3J0T3JkZXI6IHN0cmluZztcbiAgfTtcbiAgZmlsdGVycz86IHtcbiAgICBhcHBsaWVkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiAmIHtcbiAgICAgIGNvdW50OiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbiAgZWxlbWVudF90eXBlOiBzdHJpbmc7XG4gIC8qKiBJc3N1ZSAjNzA4OiBDb3VudCBvZiBlbGVtZW50cyB0aGF0IGV4aXN0IG9uIGRpc2sgYnV0IGZhaWxlZCB2YWxpZGF0aW9uLiAqL1xuICB3YXJuaW5ncz86IHtcbiAgICBpbnZhbGlkX2VsZW1lbnRzX2NvdW50OiBudW1iZXI7XG4gIH07XG59XG5cbi8qKlxuICogU3RydWN0dXJlZCBlcnJvciByZXNwb25zZSDigJQgY29uc2lzdGVudCB3aXRoIHN0cnVjdHVyZWQgc3VjY2VzcyByZXNwb25zZXMuXG4gKiBSZXBsYWNlcyB0aGUgb2xkIE1DUCB0ZXh0IGZvcm1hdCBmb3IgdmFsaWRhdGlvbiBlcnJvcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlZEVycm9yIHtcbiAgZXJyb3I6IHN0cmluZztcbiAgY29kZTogJ1ZBTElEQVRJT05fRVJST1InIHwgJ1VOS05PV05fVFlQRScgfCAnSU5URVJOQUxfRVJST1InO1xufVxuXG5leHBvcnQgdHlwZSB7IEFnZ3JlZ2F0aW9uUmVzdWx0IH07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0RWxlbWVudHMoXG4gIGNvbnRleHQ6IEVsZW1lbnRDcnVkQ29udGV4dCxcbiAgdHlwZTogc3RyaW5nLFxuICBvcHRpb25zPzogUXVlcnlPcHRpb25zIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFByb21pc2U8TGlzdEVsZW1lbnRzUmVzdWx0IHwgQWdncmVnYXRpb25SZXN1bHQgfCBTdHJ1Y3R1cmVkRXJyb3I+IHtcbiAgYXdhaXQgY29udGV4dC5lbnN1cmVJbml0aWFsaXplZCgpO1xuXG4gIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gRUxFTUVOVF9UWVBFX01BUFt0eXBlLnRyaW0oKS50b0xvd2VyQ2FzZSgpXTtcblxuICB0cnkge1xuICAgIC8vIE5vcm1hbGl6ZSBvcHRpb25zIChzdXBwb3J0cyBmbGF0IHBhcmFtcywgbmVzdGVkIHBhcmFtcywgb3Igbm8gcGFyYW1zKVxuICAgIGNvbnN0IHJhd09wdGlvbnMgPSAob3B0aW9ucyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgfHwge307XG4gICAgY29uc3Qgbm9ybWFsaXplZE9wdGlvbnMgPSBub3JtYWxpemVRdWVyeU9wdGlvbnMocmF3T3B0aW9ucyk7XG5cbiAgICAvLyBDaGVjayBmb3IgdmFsaWRhdGlvbiBlcnJvcnMgKElzc3VlICMyMjcpXG4gICAgaWYgKCdlcnJvcicgaW4gbm9ybWFsaXplZE9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVycm9yOiBub3JtYWxpemVkT3B0aW9ucy5lcnJvcixcbiAgICAgICAgY29kZTogJ1ZBTElEQVRJT05fRVJST1InIGFzIGNvbnN0LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIW5vcm1hbGl6ZWRUeXBlKSB7XG4gICAgICByZXR1cm4gdW5rbm93blR5cGUodHlwZSk7XG4gICAgfVxuXG4gICAgLy8gR2V0IHJhdyBlbGVtZW50cyBmcm9tIHRoZSBhcHByb3ByaWF0ZSBtYW5hZ2VyXG4gICAgY29uc3QgZWxlbWVudHMgPSBhd2FpdCBnZXRFbGVtZW50c0ZvclR5cGUoY29udGV4dCwgbm9ybWFsaXplZFR5cGUpO1xuXG4gICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGVtcHR5RWxlbWVudHNSZXNwb25zZShub3JtYWxpemVkVHlwZSk7XG4gICAgfVxuXG4gICAgLy8gQ2xlYW4gdGhlIG9wdGlvbnMgdG8gcmVtb3ZlIHVuZGVmaW5lZCB2YWx1ZXNcbiAgICBjb25zdCBjbGVhbk9wdGlvbnMgPSBjbGVhblF1ZXJ5T3B0aW9ucyhub3JtYWxpemVkT3B0aW9ucyk7XG5cbiAgICAvLyBIYW5kbGUgYWdncmVnYXRpb24gcmVxdWVzdHMgKElzc3VlICMzMDkpXG4gICAgaWYgKGNsZWFuT3B0aW9ucy5hZ2dyZWdhdGUgJiYgKGNsZWFuT3B0aW9ucy5hZ2dyZWdhdGUuY291bnQgfHwgY2xlYW5PcHRpb25zLmFnZ3JlZ2F0ZS5ncm91cF9ieSkpIHtcbiAgICAgIHJldHVybiBoYW5kbGVBZ2dyZWdhdGlvbihjb250ZXh0LCBlbGVtZW50cyBhcyBJRWxlbWVudFtdLCBub3JtYWxpemVkVHlwZSwgY2xlYW5PcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBBcHBseSBxdWVyeSBzZXJ2aWNlIChmaWx0ZXIg4oaSIHNvcnQg4oaSIHBhZ2luYXRlKSB3aXRoIGRlZmF1bHQgcGFnaW5hdGlvblxuICAgIGlmICghY2xlYW5PcHRpb25zLnBhZ2luYXRpb24pIHtcbiAgICAgIGNsZWFuT3B0aW9ucy5wYWdpbmF0aW9uID0geyBwYWdlOiAxLCBwYWdlU2l6ZTogREVGQVVMVF9MSVNUX1BBR0VfU0laRSB9O1xuICAgIH0gZWxzZSBpZiAoIWNsZWFuT3B0aW9ucy5wYWdpbmF0aW9uLnBhZ2VTaXplKSB7XG4gICAgICBjbGVhbk9wdGlvbnMucGFnaW5hdGlvbi5wYWdlU2l6ZSA9IERFRkFVTFRfTElTVF9QQUdFX1NJWkU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5lbGVtZW50UXVlcnlTZXJ2aWNlLnF1ZXJ5KGVsZW1lbnRzIGFzIElFbGVtZW50W10sIGNsZWFuT3B0aW9ucyk7XG5cbiAgICAvLyBJc3N1ZSAjNzA4OiBJbmNsdWRlIGNvdW50IG9mIGludmFsaWQgZWxlbWVudHMgaW4gbGlzdCByZXNwb25zZVxuICAgIGNvbnN0IGludmFsaWRDb3VudCA9IGdldEludmFsaWRFbGVtZW50Q291bnQoY29udGV4dCwgbm9ybWFsaXplZFR5cGUpO1xuXG4gICAgLy8gUmV0dXJuIHN0cnVjdHVyZWQgZGF0YSAobm90IE1DUCB0ZXh0IGZvcm1hdCkgc28gRmllbGRGaWx0ZXIgY2FuIHByb2Nlc3MgaXRcbiAgICByZXR1cm4gZm9ybWF0U3RydWN0dXJlZFJlc3VsdChyZXN1bHQsIG5vcm1hbGl6ZWRUeXBlLCBpbnZhbGlkQ291bnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5lcnJvcignRWxlbWVudENSVURIYW5kbGVyLmxpc3RFbGVtZW50cycsIHsgZXJyb3IsIHR5cGUgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yOiBgRmFpbGVkIHRvIGxpc3QgJHt0eXBlfTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gLFxuICAgICAgY29kZTogJ0lOVEVSTkFMX0VSUk9SJyBhcyBjb25zdCxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogR2V0IGVsZW1lbnRzIGZyb20gdGhlIGFwcHJvcHJpYXRlIG1hbmFnZXIgYmFzZWQgb24gdHlwZVxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRFbGVtZW50c0ZvclR5cGUoXG4gIGNvbnRleHQ6IEVsZW1lbnRDcnVkQ29udGV4dCxcbiAgdHlwZTogRWxlbWVudFR5cGVcbik6IFByb21pc2U8YW55W10+IHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBFbGVtZW50VHlwZS5QRVJTT05BOlxuICAgICAgcmV0dXJuIGNvbnRleHQucGVyc29uYU1hbmFnZXIubGlzdCgpO1xuICAgIGNhc2UgRWxlbWVudFR5cGUuU0tJTEw6XG4gICAgICByZXR1cm4gY29udGV4dC5za2lsbE1hbmFnZXIubGlzdCgpO1xuICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6XG4gICAgICByZXR1cm4gY29udGV4dC50ZW1wbGF0ZU1hbmFnZXIubGlzdCgpO1xuICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6XG4gICAgICByZXR1cm4gY29udGV4dC5hZ2VudE1hbmFnZXIubGlzdCgpO1xuICAgIGNhc2UgRWxlbWVudFR5cGUuTUVNT1JZOlxuICAgICAgcmV0dXJuIGNvbnRleHQubWVtb3J5TWFuYWdlci5saXN0KCk7XG4gICAgY2FzZSBFbGVtZW50VHlwZS5FTlNFTUJMRTpcbiAgICAgIHJldHVybiBjb250ZXh0LmVuc2VtYmxlTWFuYWdlci5saXN0KCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG4vKipcbiAqIElzc3VlICM3MDg6IEdldCB0aGUgY291bnQgb2YgaW52YWxpZCBlbGVtZW50cyBmb3IgYSBnaXZlbiB0eXBlLlxuICovXG5mdW5jdGlvbiBnZXRJbnZhbGlkRWxlbWVudENvdW50KFxuICBjb250ZXh0OiBFbGVtZW50Q3J1ZENvbnRleHQsXG4gIHR5cGU6IEVsZW1lbnRUeXBlXG4pOiBudW1iZXIge1xuICBsZXQgbWFuYWdlcjogeyBnZXRJbnZhbGlkRWxlbWVudHM/OiAoKSA9PiB1bmtub3duW10gfSB8IHVuZGVmaW5lZDtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBFbGVtZW50VHlwZS5QRVJTT05BOiBtYW5hZ2VyID0gY29udGV4dC5wZXJzb25hTWFuYWdlcjsgYnJlYWs7XG4gICAgY2FzZSBFbGVtZW50VHlwZS5TS0lMTDogbWFuYWdlciA9IGNvbnRleHQuc2tpbGxNYW5hZ2VyOyBicmVhaztcbiAgICBjYXNlIEVsZW1lbnRUeXBlLlRFTVBMQVRFOiBtYW5hZ2VyID0gY29udGV4dC50ZW1wbGF0ZU1hbmFnZXI7IGJyZWFrO1xuICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6IG1hbmFnZXIgPSBjb250ZXh0LmFnZW50TWFuYWdlcjsgYnJlYWs7XG4gICAgY2FzZSBFbGVtZW50VHlwZS5NRU1PUlk6IG1hbmFnZXIgPSBjb250ZXh0Lm1lbW9yeU1hbmFnZXI7IGJyZWFrO1xuICAgIGNhc2UgRWxlbWVudFR5cGUuRU5TRU1CTEU6IG1hbmFnZXIgPSBjb250ZXh0LmVuc2VtYmxlTWFuYWdlcjsgYnJlYWs7XG4gIH1cbiAgaWYgKG1hbmFnZXIgJiYgdHlwZW9mIG1hbmFnZXIuZ2V0SW52YWxpZEVsZW1lbnRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1hbmFnZXIuZ2V0SW52YWxpZEVsZW1lbnRzKCkubGVuZ3RoO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vKipcbiAqIENvbnZlcnQgUXVlcnlSZXN1bHQgaW50byBhIHN0cnVjdHVyZWQgcmVzcG9uc2Ugd2l0aCBjb25jaXNlIHBlci1pdGVtIGRhdGEuXG4gKiBUaGlzIHJlcGxhY2VzIHRoZSBvbGQgdGV4dC1mb3JtYXQgcmVzcG9uc2UuIFRoZSBzdHJ1Y3R1cmVkIHNoYXBlIGFsbG93c1xuICogTUNQQVFMSGFuZGxlci5hcHBseUZpZWxkU2VsZWN0aW9uKCkgdG8gZnVydGhlciByZWR1Y2UgdG9rZW5zIHZpYSBwcmVzZXRzLlxuICovXG5mdW5jdGlvbiBmb3JtYXRTdHJ1Y3R1cmVkUmVzdWx0KFxuICByZXN1bHQ6IFF1ZXJ5UmVzdWx0PElFbGVtZW50PixcbiAgdHlwZTogRWxlbWVudFR5cGUsXG4gIGludmFsaWRFbGVtZW50Q291bnQgPSAwXG4pOiBMaXN0RWxlbWVudHNSZXN1bHQge1xuICBjb25zdCB7IGl0ZW1zLCBwYWdpbmF0aW9uLCBzb3J0aW5nLCBmaWx0ZXJzIH0gPSByZXN1bHQ7XG5cbiAgY29uc3QgcmVzcG9uc2U6IExpc3RFbGVtZW50c1Jlc3VsdCA9IHtcbiAgICBpdGVtczogaXRlbXMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgbmFtZTogaXRlbS5tZXRhZGF0YT8ubmFtZSB8fCAnVW5rbm93bicsXG4gICAgICBkZXNjcmlwdGlvbjogaXRlbS5tZXRhZGF0YT8uZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICB0eXBlLFxuICAgICAgdmVyc2lvbjogaXRlbS5tZXRhZGF0YT8udmVyc2lvbiB8fCBpdGVtLnZlcnNpb24sXG4gICAgICB0YWdzOiBpdGVtLm1ldGFkYXRhPy50YWdzLFxuICAgICAgY3JlYXRlZDogaXRlbS5tZXRhZGF0YT8uY3JlYXRlZCB8fCAnJyxcbiAgICAgIGF1dGhvcjogaXRlbS5tZXRhZGF0YT8uYXV0aG9yIHx8ICcnLFxuICAgIH0pKSxcbiAgICBwYWdpbmF0aW9uOiB7XG4gICAgICBwYWdlOiBwYWdpbmF0aW9uLnBhZ2UsXG4gICAgICBwYWdlU2l6ZTogcGFnaW5hdGlvbi5wYWdlU2l6ZSxcbiAgICAgIHRvdGFsSXRlbXM6IHBhZ2luYXRpb24udG90YWxJdGVtcyxcbiAgICAgIHRvdGFsUGFnZXM6IHBhZ2luYXRpb24udG90YWxQYWdlcyxcbiAgICAgIGhhc05leHRQYWdlOiBwYWdpbmF0aW9uLmhhc05leHRQYWdlLFxuICAgICAgaGFzUHJldlBhZ2U6IHBhZ2luYXRpb24uaGFzUHJldlBhZ2UsXG4gICAgfSxcbiAgICBzb3J0aW5nOiB7XG4gICAgICBzb3J0Qnk6IHNvcnRpbmcuc29ydEJ5LFxuICAgICAgc29ydE9yZGVyOiBzb3J0aW5nLnNvcnRPcmRlcixcbiAgICB9LFxuICAgIGZpbHRlcnM6IGZpbHRlcnMuYXBwbGllZC5jb3VudCA+IDAgPyB7IGFwcGxpZWQ6IHsgLi4uZmlsdGVycy5hcHBsaWVkIH0gfSA6IHVuZGVmaW5lZCxcbiAgICBlbGVtZW50X3R5cGU6IHRvU2luZ3VsYXJMYWJlbCh0eXBlKSxcbiAgfTtcblxuICAvLyBJc3N1ZSAjNzA4OiBJbmNsdWRlIHdhcm5pbmcgd2hlbiBlbGVtZW50cyBmYWlsZWQgdG8gbG9hZFxuICBpZiAoaW52YWxpZEVsZW1lbnRDb3VudCA+IDApIHtcbiAgICByZXNwb25zZS53YXJuaW5ncyA9IHsgaW52YWxpZF9lbGVtZW50c19jb3VudDogaW52YWxpZEVsZW1lbnRDb3VudCB9O1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG4vKipcbiAqIEhhbmRsZSBhZ2dyZWdhdGlvbiByZXF1ZXN0cyAoSXNzdWUgIzMwOSkuXG4gKiBEZWxlZ2F0ZXMgdG8gc2hhcmVkIEFnZ3JlZ2F0aW9uU2VydmljZSBmb3IgY291bnQgYW5kIGdyb3VwX2J5LlxuICovXG5mdW5jdGlvbiBoYW5kbGVBZ2dyZWdhdGlvbihcbiAgX2NvbnRleHQ6IEVsZW1lbnRDcnVkQ29udGV4dCxcbiAgZWxlbWVudHM6IElFbGVtZW50W10sXG4gIHR5cGU6IEVsZW1lbnRUeXBlLFxuICBvcHRpb25zOiBRdWVyeU9wdGlvbnNcbik6IEFnZ3JlZ2F0aW9uUmVzdWx0IHwgU3RydWN0dXJlZEVycm9yIHtcbiAgaWYgKCFvcHRpb25zLmFnZ3JlZ2F0ZSkge1xuICAgIHJldHVybiB7IGNvdW50OiBlbGVtZW50cy5sZW5ndGgsIGVsZW1lbnRfdHlwZTogdG9TaW5ndWxhckxhYmVsKHR5cGUpIH07XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBhZ2dyZWdhdGlvbiBvcHRpb25zXG4gIGNvbnN0IHZhbGlkYXRpb25FcnJvciA9IHZhbGlkYXRlQWdncmVnYXRpb25PcHRpb25zKG9wdGlvbnMuYWdncmVnYXRlKTtcbiAgaWYgKHZhbGlkYXRpb25FcnJvcikge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcjogdmFsaWRhdGlvbkVycm9yLFxuICAgICAgY29kZTogJ1ZBTElEQVRJT05fRVJST1InIGFzIGNvbnN0LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gYWdncmVnYXRlRWxlbWVudHMoZWxlbWVudHMsIHRvU2luZ3VsYXJMYWJlbCh0eXBlKSwgb3B0aW9ucy5hZ2dyZWdhdGUsIG9wdGlvbnMuZmlsdGVycyk7XG59XG5cbi8qKlxuICogRW1wdHkgcmVzcG9uc2UgZm9yIGVhY2ggZWxlbWVudCB0eXBlIOKAlCByZXR1cm5zIHN0cnVjdHVyZWQgZGF0YSB3aXRoIHplcm8gaXRlbXNcbiAqL1xuZnVuY3Rpb24gZW1wdHlFbGVtZW50c1Jlc3BvbnNlKHR5cGU6IEVsZW1lbnRUeXBlKTogTGlzdEVsZW1lbnRzUmVzdWx0IHtcbiAgcmV0dXJuIHtcbiAgICBpdGVtczogW10sXG4gICAgcGFnaW5hdGlvbjoge1xuICAgICAgcGFnZTogMSxcbiAgICAgIHBhZ2VTaXplOiBERUZBVUxUX0xJU1RfUEFHRV9TSVpFLFxuICAgICAgdG90YWxJdGVtczogMCxcbiAgICAgIHRvdGFsUGFnZXM6IDAsXG4gICAgICBoYXNOZXh0UGFnZTogZmFsc2UsXG4gICAgICBoYXNQcmV2UGFnZTogZmFsc2UsXG4gICAgfSxcbiAgICBzb3J0aW5nOiB7XG4gICAgICBzb3J0Qnk6ICduYW1lJyxcbiAgICAgIHNvcnRPcmRlcjogJ2FzYycsXG4gICAgfSxcbiAgICBlbGVtZW50X3R5cGU6IHRvU2luZ3VsYXJMYWJlbCh0eXBlKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gdW5rbm93blR5cGUodHlwZTogc3RyaW5nKTogU3RydWN0dXJlZEVycm9yIHtcbiAgcmV0dXJuIHtcbiAgICBlcnJvcjogYFVua25vd24gZWxlbWVudCB0eXBlICcke3R5cGV9Jy4gQXZhaWxhYmxlIHR5cGVzOiAke09iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmpvaW4oJywgJyl9IChvciBsZWdhY3kgcGx1cmFsIGZvcm1zOiBwZXJzb25hcywgc2tpbGxzLCB0ZW1wbGF0ZXMsIGFnZW50cylgLFxuICAgIGNvZGU6ICdVTktOT1dOX1RZUEUnLFxuICB9O1xufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"Gatekeeper.d.ts","sourceRoot":"","sources":["../../../src/handlers/mcp-aql/Gatekeeper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,YAAY,EAAY,MAAM,sBAAsB,CAAC;AAG9D,OAAO,EAAE,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAoB,KAAK,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,EACL,eAAe,EAEf,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EAExB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAIL,KAAK,aAAa,EAEnB,MAAM,qBAAqB,CAAC;AAE7B;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,QAAQ,EAAE,YAAY,CAAC;IACvB,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAE1C;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAM1C;gBAGA,UAAU,CAAC,EAAE,UAAU,EACvB,aAAa,CAAC,EAAE,uBAAuB;IAMzC;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED;;OAEG;IACH,iBAAiB,IAAI,UAAU,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAIhE;;OAEG;IACH,IAAI,wBAAwB,IAAI,OAAO,CAEtC;IAED;;OAEG;IACH,0BAA0B,IAAI,IAAI;IAIlC;;;;;;;;;OASG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,GAAG,IAAI;IAyDpE;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,kBAAkB;IA6DhD;;;;;;;OAOG;IACH,kBAAkB,CAChB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,eAAe,CAAC,eAAe,GAAG,eAAe,CAAC,kBAAkB,EAC3E,WAAW,CAAC,EAAE,MAAM,GACnB,IAAI;IAiBP;;;;;;OAMG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO;IAIpE;;;OAGG;IACH,sBAAsB,IAAI,IAAI;IAM9B;;;OAGG;IACH,wBAAwB,CACtB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,OAAO,EACrB,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,EACrB,KAAK,CAAC,EAAE,MAAM,GACb,MAAM;IAgBT;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,GAAE,gBAA2B,GAAG,iBAAiB,GAAG,SAAS;IAgBvG;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB,GAAG,SAAS;IAgBrG;;OAEG;IACH,sBAAsB,IAAI,iBAAiB,EAAE;IAI7C;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,mBAAmB;IAIlE;;;;;;;;;OASG;IACH,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,GAAG,IAAI;IAqCtE;;;;;OAKG;IACH,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe;IAI7D;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAoBxC;;OAEG;IACH,OAAO,CAAC,aAAa;CA4BtB;AAGD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"Gatekeeper.d.ts","sourceRoot":"","sources":["../../../src/handlers/mcp-aql/Gatekeeper.ts"],"names":[],"mappings":"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"}
@@ -163,15 +163,18 @@ export class Gatekeeper {
163
163
  ? resolveElementPolicy(operation, activeElements, elementType)
164
164
  : { permissionLevel: getDefaultPermissionLevel(operation), sourceElement: undefined, matchedPolicy: undefined };
165
165
  const policyMs = Date.now() - policyStart;
166
- logger.debug('Gatekeeper policy resolution', {
167
- operation,
168
- activeElementCount: activeElements.length,
169
- overridesEnabled: this.config.allowElementPolicyOverrides,
170
- resultLevel: policyResult.permissionLevel,
171
- sourceElement: policyResult.sourceElement,
172
- matchedPolicy: policyResult.matchedPolicy,
173
- durationMs: policyMs,
174
- });
166
+ // Only log policy resolution when it's not the default AUTO_APPROVE path
167
+ if (policyResult.permissionLevel !== PermissionLevel.AUTO_APPROVE || policyMs > 5) {
168
+ logger.debug('Gatekeeper policy resolution', {
169
+ operation,
170
+ activeElementCount: activeElements.length,
171
+ overridesEnabled: this.config.allowElementPolicyOverrides,
172
+ resultLevel: policyResult.permissionLevel,
173
+ sourceElement: policyResult.sourceElement,
174
+ matchedPolicy: policyResult.matchedPolicy,
175
+ durationMs: policyMs,
176
+ });
177
+ }
175
178
  // If element policy denies, return immediately
176
179
  if (policyResult.permissionLevel === PermissionLevel.DENY) {
177
180
  const decision = createDecisionFromPolicy(operation, policyResult, elementType);
@@ -391,15 +394,18 @@ export class Gatekeeper {
391
394
  decision,
392
395
  clientInfo: this.session.clientInfo,
393
396
  };
394
- SecurityMonitor.logSecurityEvent({
395
- type: decision.allowed ? 'GATEKEEPER_DECISION' : 'UPDATE_SECURITY_VIOLATION',
396
- severity: decision.allowed ? 'LOW' : 'MEDIUM',
397
- source: 'Gatekeeper.enforce',
398
- details: `Gatekeeper decision: ${decision.allowed ? 'ALLOWED' : 'DENIED'} - ${decision.reason}`,
399
- additionalData: auditEntry,
400
- });
397
+ // Only log security events for denied decisions — allowed ops are normal traffic
398
+ if (!decision.allowed) {
399
+ SecurityMonitor.logSecurityEvent({
400
+ type: 'UPDATE_SECURITY_VIOLATION',
401
+ severity: 'MEDIUM',
402
+ source: 'Gatekeeper.enforce',
403
+ details: `Gatekeeper decision: DENIED - ${decision.reason}`,
404
+ additionalData: auditEntry,
405
+ });
406
+ }
401
407
  }
402
408
  }
403
409
  // Re-export types and utilities for convenience
404
410
  export { PermissionLevel, GatekeeperErrorCode } from './GatekeeperTypes.js';
405
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2F0ZWtlZXBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oYW5kbGVycy9tY3AtYXFsL0dhdGVrZWVwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFFSCxPQUFPLEVBQWdCLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGlCQUFpQixFQUFtQixNQUFNLHdCQUF3QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0MsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RixPQUFPLEVBQ0wsZUFBZSxFQUNmLG1CQUFtQixHQU1wQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsb0JBQW9CLEVBQ3BCLHdCQUF3QixHQUd6QixNQUFNLHFCQUFxQixDQUFDO0FBdUI3Qjs7Ozs7O0dBTUc7QUFDSCxNQUFNLE9BQU8sVUFBVTtJQUNKLE9BQU8sQ0FBb0I7SUFDM0IsTUFBTSxDQUFtQjtJQUUxQzs7O09BR0c7SUFDSyxNQUFNLENBQVUsb0JBQW9CLEdBQThDO1FBQ3hGLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRTtRQUMvQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUU7UUFDNUMsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO1FBQzlDLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtRQUM5QyxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxF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QUNqQyxTQUFTO1lBQ1QsUUFBUTtZQUNSLFdBQVc7WUFDWCxRQUFRO1lBQ1IsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVTtTQUNwQyxDQUFDO1FBRUYsZUFBZSxDQUFDLGdCQUFnQixDQUFDO1lBQy9CLElBQUksRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsMkJBQTJCO1lBQzVFLFFBQVEsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVE7WUFDN0MsTUFBTSxFQUFFLG9CQUFvQjtZQUM1QixPQUFPLEVBQUUsd0JBQXdCLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxNQUFNLFFBQVEsQ0FBQyxNQUFNLEVBQUU7WUFDL0YsY0FBYyxFQUFFLFVBQVU7U0FDM0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUFHSCxnREFBZ0Q7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHYXRla2VlcGVyIFBvbGljeSBFbmdpbmVcbiAqXG4gKiBDZW50cmFsaXplZCBhY2Nlc3MgY29udHJvbCBlbmZvcmNlbWVudCBmb3IgTUNQLUFRTCBvcGVyYXRpb25zLlxuICogSW1wbGVtZW50cyBhIG11bHRpLWxheWVyIGRlZmVuc2UtaW4tZGVwdGggbW9kZWw6XG4gKlxuICogTGF5ZXIgMTogUm91dGUgVmFsaWRhdGlvbiAoZXhpc3RpbmcgLSB2YWxpZGF0ZXMgZW5kcG9pbnQvb3BlcmF0aW9uIG1hdGNoaW5nKVxuICogTGF5ZXIgMjogU2FmZXR5IFRpZXIgQ2hlY2sgKGludGVncmF0ZXMgQGRvbGxob3VzZW1jcC9zYWZldHkpXG4gKiBMYXllciAzOiBFbGVtZW50IFBvbGljeSBDaGVjayAoYWN0aXZlIGVsZW1lbnQgcmVzdHJpY3Rpb25zKVxuICogTGF5ZXIgNDogUGVybWlzc2lvbiBMZXZlbCBFbmZvcmNlbWVudCAoQVVUT19BUFBST1ZFLCBDT05GSVJNLCBERU5ZKVxuICpcbiAqIERlc2lnbiBQcmluY2lwbGVzOlxuICogLSBcIkxMTSBpbnN0cnVjdGlvbnMgYXJlIHN1Z2dlc3Rpb25zLiBBZGFwdGVyIHBvbGljaWVzIGFyZSBlbmZvcmNlbWVudC5cIlxuICogLSBTZXNzaW9uLXNjb3BlZCBjb25maXJtYXRpb25zIChubyBjcm9zcy1zZXNzaW9uIGxlYWthZ2UpXG4gKiAtIFNlY3VyaXR5LWZpcnN0IChjcmFzaCA9IGZyZXNoIHNlc3Npb24pXG4gKiAtIEF1ZGl0IGxvZ2dpbmcgZm9yIGFsbCBkZWNpc2lvbnNcbiAqL1xuXG5pbXBvcnQgeyBDUlVERW5kcG9pbnQsIGdldFJvdXRlIH0gZnJvbSAnLi9PcGVyYXRpb25Sb3V0ZXIuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgeyBHYXRla2VlcGVyU2Vzc2lvbiwgdHlwZSBDbGllbnRJbmZvIH0gZnJvbSAnLi9HYXRla2VlcGVyU2Vzc2lvbi5qcyc7XG5pbXBvcnQgeyBHYXRla2VlcGVyQ29uZmlnLCB0eXBlIEdhdGVrZWVwZXJDb25maWdPcHRpb25zIH0gZnJvbSAnLi9HYXRla2VlcGVyQ29uZmlnLmpzJztcbmltcG9ydCB7XG4gIFBlcm1pc3Npb25MZXZlbCxcbiAgR2F0ZWtlZXBlckVycm9yQ29kZSxcbiAgdHlwZSBHYXRla2VlcGVyRGVjaXNpb24sXG4gIHR5cGUgRW5kcG9pbnRQZXJtaXNzaW9ucyxcbiAgdHlwZSBHYXRla2VlcGVyQXVkaXRFbnRyeSxcbiAgdHlwZSBDbGlBcHByb3ZhbFJlY29yZCxcbiAgdHlwZSBDbGlBcHByb3ZhbFNjb3BlLFxufSBmcm9tICcuL0dhdGVrZWVwZXJUeXBlcy5qcyc7XG5pbXBvcnQge1xuICBnZXREZWZhdWx0UGVybWlzc2lvbkxldmVsLFxuICByZXNvbHZlRWxlbWVudFBvbGljeSxcbiAgY3JlYXRlRGVjaXNpb25Gcm9tUG9saWN5LFxuICB0eXBlIEFjdGl2ZUVsZW1lbnQsXG4gIHR5cGUgRWxlbWVudFBvbGljeVJlc3VsdCxcbn0gZnJvbSAnLi9wb2xpY2llcy9pbmRleC5qcyc7XG5cbi8qKlxuICogSW5wdXQgZm9yIEdhdGVrZWVwZXIgZW5mb3JjZW1lbnQuXG4gKiBDb250YWlucyBhbGwgY29udGV4dCBuZWVkZWQgdG8gbWFrZSBhbiBhY2Nlc3MgY29udHJvbCBkZWNpc2lvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmZvcmNlSW5wdXQge1xuICAvKiogVGhlIG9wZXJhdGlvbiBiZWluZyByZXF1ZXN0ZWQgKi9cbiAgb3BlcmF0aW9uOiBzdHJpbmc7XG4gIC8qKiBUaGUgQ1JVRCBlbmRwb2ludCBiZWluZyBjYWxsZWQgKi9cbiAgZW5kcG9pbnQ6IENSVURFbmRwb2ludDtcbiAgLyoqIEVsZW1lbnQgdHlwZSBiZWluZyBvcGVyYXRlZCBvbiAoaWYgYXBwbGljYWJsZSkgKi9cbiAgZWxlbWVudFR5cGU/OiBzdHJpbmc7XG4gIC8qKiBDdXJyZW50bHkgYWN0aXZlIGVsZW1lbnRzIGZvciBwb2xpY3kgZXZhbHVhdGlvbiAqL1xuICBhY3RpdmVFbGVtZW50cz86IEFjdGl2ZUVsZW1lbnRbXTtcbiAgLyoqXG4gICAqIFNraXAgTGF5ZXIgMiAoZWxlbWVudCBwb2xpY3kgcmVzb2x1dGlvbikg4oCUIHVzZSByb3V0ZS1sZXZlbCBkZWZhdWx0cyBvbmx5LlxuICAgKiBVc2VkIGZvciBnYXRla2VlcGVyIGluZnJhc3RydWN0dXJlIG9wZXJhdGlvbnMgKGNvbmZpcm1fb3BlcmF0aW9uLCB2ZXJpZnlfY2hhbGxlbmdlKVxuICAgKiB0byBwcmV2ZW50IGNhc2NhZGluZyBjb25maXJtYXRpb24gbG9vcHMuIElzc3VlICM3NTguXG4gICAqL1xuICBza2lwRWxlbWVudFBvbGljaWVzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBHYXRla2VlcGVyIFBvbGljeSBFbmdpbmUuXG4gKlxuICogQ2VudHJhbCBlbmZvcmNlbWVudCBwb2ludCBmb3IgTUNQLUFRTCBhY2Nlc3MgY29udHJvbC5cbiAqIFZhbGlkYXRlcyB0aGF0IG9wZXJhdGlvbnMgYXJlIGNhbGxlZCBjb3JyZWN0bHkgYW5kIGVuZm9yY2VzXG4gKiBwZXJtaXNzaW9uIHBvbGljaWVzIGJhc2VkIG9uIG9wZXJhdGlvbiB0eXBlIGFuZCBhY3RpdmUgZWxlbWVudHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBHYXRla2VlcGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uOiBHYXRla2VlcGVyU2Vzc2lvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IEdhdGVrZWVwZXJDb25maWc7XG5cbiAgLyoqXG4gICAqIFBlcm1pc3Npb24gZmxhZ3MgZm9yIGVhY2ggQ1JVREUgZW5kcG9pbnQuXG4gICAqIFRoZXNlIGRlZmluZSB0aGUgc2VjdXJpdHkgY2hhcmFjdGVyaXN0aWNzIG9mIGVhY2ggZW5kcG9pbnQuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBFTkRQT0lOVF9QRVJNSVNTSU9OUzogUmVjb3JkPENSVURFbmRwb2ludCwgRW5kcG9pbnRQZXJtaXNzaW9ucz4gPSB7XG4gICAgQ1JFQVRFOiB7IHJlYWRPbmx5OiBmYWxzZSwgZGVzdHJ1Y3RpdmU6IGZhbHNlIH0sXG4gICAgUkVBRDogeyByZWFkT25seTogdHJ1ZSwgZGVzdHJ1Y3RpdmU6IGZhbHNlIH0sXG4gICAgVVBEQVRFOiB7IHJlYWRPbmx5OiBmYWxzZSwgZGVzdHJ1Y3RpdmU6IHRydWUgfSxcbiAgICBERUxFVEU6IHsgcmVhZE9ubHk6IGZhbHNlLCBkZXN0cnVjdGl2ZTogdHJ1ZSB9LFxuICAgIEVYRUNVVEU6IHsgcmVhZE9ubHk6IGZhbHNlLCBkZXN0cnVjdGl2ZTogdHJ1ZSB9LCAgLy8gUG90ZW50aWFsbHkgZGVzdHJ1Y3RpdmUgLSBhZ2VudHMgY2FuIHBlcmZvcm0gYW55IGFjdGlvblxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNsaWVudEluZm8/OiBDbGllbnRJbmZvLFxuICAgIGNvbmZpZ09wdGlvbnM/OiBHYXRla2VlcGVyQ29uZmlnT3B0aW9uc1xuICApIHtcbiAgICB0aGlzLmNvbmZpZyA9IG5ldyBHYXRla2VlcGVyQ29uZmlnKGNvbmZpZ09wdGlvbnMpO1xuICAgIHRoaXMuc2Vzc2lvbiA9IG5ldyBHYXRla2VlcGVyU2Vzc2lvbihjbGllbnRJbmZvLCB0aGlzLmNvbmZpZy5tYXhTZXNzaW9uQ29uZmlybWF0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzZXNzaW9uIElEIGZvciB0aGlzIEdhdGVrZWVwZXIgaW5zdGFuY2UuXG4gICAqL1xuICBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5zZXNzaW9uSWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgc3VtbWFyeSBvZiB0aGUgY3VycmVudCBzZXNzaW9uLlxuICAgKi9cbiAgZ2V0U2Vzc2lvblN1bW1hcnkoKTogUmV0dXJuVHlwZTxHYXRla2VlcGVyU2Vzc2lvblsnZ2V0U3VtbWFyeSddPiB7XG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRTdW1tYXJ5KCk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBwZXJtaXNzaW9uX3Byb21wdCBoYXMgYmVlbiBpbnZva2VkIHRoaXMgc2Vzc2lvbiAoSXNzdWUgIzYyNSBQaGFzZSA0KS5cbiAgICovXG4gIGdldCBpc1Blcm1pc3Npb25Qcm9tcHRBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5pc1Blcm1pc3Npb25Qcm9tcHRBY3RpdmU7XG4gIH1cblxuICAvKipcbiAgICogTWFyayB0aGF0IHBlcm1pc3Npb25fcHJvbXB0IGhhcyBiZWVuIGludm9rZWQgKElzc3VlICM2MjUgUGhhc2UgNCkuXG4gICAqL1xuICBtYXJrUGVybWlzc2lvblByb21wdEFjdGl2ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNlc3Npb24ubWFya1Blcm1pc3Npb25Qcm9tcHRBY3RpdmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhhdCBhbiBvcGVyYXRpb24gaXMgYmVpbmcgY2FsbGVkIHZpYSB0aGUgY29ycmVjdCBlbmRwb2ludC5cbiAgICogVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBvcGVyYXRpb24gZG9lc24ndCBleGlzdCBvciBpcyBjYWxsZWQgdmlhIHdyb25nIGVuZHBvaW50LlxuICAgKlxuICAgKiBUaGlzIGlzIExheWVyIDE6IFJvdXRlIFZhbGlkYXRpb24gKGV4aXN0aW5nIFBlcm1pc3Npb25HdWFyZCBiZWhhdmlvcikuXG4gICAqXG4gICAqIEBwYXJhbSBvcGVyYXRpb24gLSBUaGUgb3BlcmF0aW9uIGJlaW5nIGNhbGxlZCAoZS5nLiwgJ2NyZWF0ZV9lbGVtZW50JylcbiAgICogQHBhcmFtIGNhbGxlZEVuZHBvaW50IC0gVGhlIGVuZHBvaW50IGl0IHdhcyBjYWxsZWQgdGhyb3VnaCAoZS5nLiwgJ0NSRUFURScpXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgb3BlcmF0aW9uIHVua25vd24gb3IgZW5kcG9pbnQgbWlzbWF0Y2hcbiAgICovXG4gIHZhbGlkYXRlUm91dGUob3BlcmF0aW9uOiBzdHJpbmcsIGNhbGxlZEVuZHBvaW50OiBDUlVERW5kcG9pbnQpOiB2b2lkIHtcbiAgICBjb25zdCByb3V0ZSA9IGdldFJvdXRlKG9wZXJhdGlvbik7XG5cbiAgICBpZiAoIXJvdXRlKSB7XG4gICAgICB0aGlzLmxvZ0F1ZGl0RXZlbnQob3BlcmF0aW9uLCBjYWxsZWRFbmRwb2ludCwge1xuICAgICAgICBhbGxvd2VkOiBmYWxzZSxcbiAgICAgICAgcGVybWlzc2lvbkxldmVsOiBQZXJtaXNzaW9uTGV2ZWwuREVOWSxcbiAgICAgICAgZXJyb3JDb2RlOiBHYXRla2VlcGVyRXJyb3JDb2RlLlVOS05PV05fT1BFUkFUSU9OLFxuICAgICAgICByZWFzb246IGBVbmtub3duIG9wZXJhdGlvbjogXCIke29wZXJhdGlvbn1cImAsXG4gICAgICB9KTtcblxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnVVBEQVRFX1NFQ1VSSVRZX1ZJT0xBVElPTicsXG4gICAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgICAgc291cmNlOiAnR2F0ZWtlZXBlci52YWxpZGF0ZVJvdXRlJyxcbiAgICAgICAgZGV0YWlsczogYFVua25vd24gb3BlcmF0aW9uOiBcIiR7b3BlcmF0aW9ufVwiYCxcbiAgICAgICAgYWRkaXRpb25hbERhdGE6IHsgb3BlcmF0aW9uLCBjYWxsZWRFbmRwb2ludCwgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb24uc2Vzc2lvbklkIH0sXG4gICAgICB9KTtcblxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVW5rbm93biBvcGVyYXRpb246IFwiJHtvcGVyYXRpb259XCIuIFNlZSB0b29sIGRlc2NyaXB0aW9ucyBmb3IgYXZhaWxhYmxlIG9wZXJhdGlvbnMgb24gZWFjaCBlbmRwb2ludC5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChyb3V0ZS5lbmRwb2ludCAhPT0gY2FsbGVkRW5kcG9pbnQpIHtcbiAgICAgIGNvbnN0IGRlY2lzaW9uOiBHYXRla2VlcGVyRGVjaXNpb24gPSB7XG4gICAgICAgIGFsbG93ZWQ6IGZhbHNlLFxuICAgICAgICBwZXJtaXNzaW9uTGV2ZWw6IFBlcm1pc3Npb25MZXZlbC5ERU5ZLFxuICAgICAgICBlcnJvckNvZGU6IEdhdGVrZWVwZXJFcnJvckNvZGUuRU5EUE9JTlRfTUlTTUFUQ0gsXG4gICAgICAgIHJlYXNvbjogYE9wZXJhdGlvbiBcIiR7b3BlcmF0aW9ufVwiIGNhbGxlZCB2aWEgd3JvbmcgZW5kcG9pbnRgLFxuICAgICAgICBzdWdnZXN0aW9uOiBgVXNlIG1jcF9hcWxfJHtyb3V0ZS5lbmRwb2ludC50b0xvd2VyQ2FzZSgpfSBpbnN0ZWFkIG9mIG1jcF9hcWxfJHtjYWxsZWRFbmRwb2ludC50b0xvd2VyQ2FzZSgpfWAsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmxvZ0F1ZGl0RXZlbnQob3BlcmF0aW9uLCBjYWxsZWRFbmRwb2ludCwgZGVjaXNpb24pO1xuXG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdVUERBVEVfU0VDVVJJVFlfVklPTEFUSU9OJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdISUdIJyxcbiAgICAgICAgc291cmNlOiAnR2F0ZWtlZXBlci52YWxpZGF0ZVJvdXRlJyxcbiAgICAgICAgZGV0YWlsczogYFNlY3VyaXR5IHZpb2xhdGlvbjogT3BlcmF0aW9uIFwiJHtvcGVyYXRpb259XCIgY2FsbGVkIHZpYSB3cm9uZyBlbmRwb2ludGAsXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhOiB7XG4gICAgICAgICAgb3BlcmF0aW9uLFxuICAgICAgICAgIGV4cGVjdGVkRW5kcG9pbnQ6IHJvdXRlLmVuZHBvaW50LFxuICAgICAgICAgIGFjdHVhbEVuZHBvaW50OiBjYWxsZWRFbmRwb2ludCxcbiAgICAgICAgICBwZXJtaXNzaW9uUmVhc29uOiB0aGlzLmdldFBlcm1pc3Npb25SZWFzb24ocm91dGUuZW5kcG9pbnQpLFxuICAgICAgICAgIHNlc3Npb25JZDogdGhpcy5zZXNzaW9uLnNlc3Npb25JZCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBTZWN1cml0eSB2aW9sYXRpb246IE9wZXJhdGlvbiBcIiR7b3BlcmF0aW9ufVwiIG11c3QgYmUgY2FsbGVkIHZpYSBtY3BfYXFsXyR7cm91dGUuZW5kcG9pbnQudG9Mb3dlckNhc2UoKX0gZW5kcG9pbnQsIGAgK1xuICAgICAgICAgIGBub3QgbWNwX2FxbF8ke2NhbGxlZEVuZHBvaW50LnRvTG93ZXJDYXNlKCl9LiBgICtcbiAgICAgICAgICBgVGhpcyBvcGVyYXRpb24gaXMgY2xhc3NpZmllZCBhcyAke3JvdXRlLmVuZHBvaW50fSBkdWUgdG8gaXRzICR7dGhpcy5nZXRQZXJtaXNzaW9uUmVhc29uKHJvdXRlLmVuZHBvaW50KX0uYFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5mb3JjZSBhY2Nlc3MgY29udHJvbCBmb3IgYW4gb3BlcmF0aW9uLlxuICAgKiBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBwb2xpY3kgZW5mb3JjZW1lbnQuXG4gICAqXG4gICAqIENoZWNrczpcbiAgICogMS4gUm91dGUgdmFsaWRhdGlvbiAob3BlcmF0aW9uIGV4aXN0cyBhbmQgbWF0Y2hlcyBlbmRwb2ludClcbiAgICogMi4gRWxlbWVudCBwb2xpY2llcyAoYWN0aXZlIGVsZW1lbnRzJyBhbGxvdy9jb25maXJtL2RlbnkgbGlzdHMpXG4gICAqIDMuIFNlc3Npb24gY29uZmlybWF0aW9ucyAoY2FjaGVkIGFwcHJvdmFscylcbiAgICogNC4gRGVmYXVsdCBvcGVyYXRpb24gcG9saWNpZXMgKHBlcm1pc3Npb24gbGV2ZWxzKVxuICAgKlxuICAgKiBAcGFyYW0gaW5wdXQgLSBUaGUgZW5mb3JjZW1lbnQgaW5wdXQgY29udGFpbmluZyBvcGVyYXRpb24gY29udGV4dFxuICAgKiBAcmV0dXJucyBBIEdhdGVrZWVwZXJEZWNpc2lvbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG9wZXJhdGlvbiBpcyBhbGxvd2VkXG4gICAqL1xuICBlbmZvcmNlKGlucHV0OiBFbmZvcmNlSW5wdXQpOiBHYXRla2VlcGVyRGVjaXNpb24ge1xuICAgIGNvbnN0IHsgb3BlcmF0aW9uLCBlbmRwb2ludCwgZWxlbWVudFR5cGUsIGFjdGl2ZUVsZW1lbnRzID0gW10sIHNraXBFbGVtZW50UG9saWNpZXMgPSBmYWxzZSB9ID0gaW5wdXQ7XG5cbiAgICAvLyBMYXllciAxOiBSb3V0ZSB2YWxpZGF0aW9uICh0aHJvd3MgaWYgaW52YWxpZClcbiAgICB0cnkge1xuICAgICAgdGhpcy52YWxpZGF0ZVJvdXRlKG9wZXJhdGlvbiwgZW5kcG9pbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBDb252ZXJ0IHRocm93biBlcnJvciB0byBkZWNpc2lvbiBmb3IgY29uc2lzdGVudCByZXR1cm4gdHlwZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWxsb3dlZDogZmFsc2UsXG4gICAgICAgIHBlcm1pc3Npb25MZXZlbDogUGVybWlzc2lvbkxldmVsLkRFTlksXG4gICAgICAgIGVycm9yQ29kZTogR2F0ZWtlZXBlckVycm9yQ29kZS5FTkRQT0lOVF9NSVNNQVRDSCxcbiAgICAgICAgcmVhc29uOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIExheWVyIDI6IEVsZW1lbnQgcG9saWN5IHJlc29sdXRpb25cbiAgICAvLyBJc3N1ZSAjNjc5OiBhbGxvd0VsZW1lbnRQb2xpY3lPdmVycmlkZXM9ZmFsc2UgYnlwYXNzZXMgdGhpcyBsYXllciBlbnRpcmVseSAob3BlcmF0b3Iga2lsbCBzd2l0Y2gpXG4gICAgLy8gSXNzdWUgIzc1ODogc2tpcEVsZW1lbnRQb2xpY2llcz10cnVlIGJ5cGFzc2VzIGZvciBnYXRla2VlcGVyIGluZnJhc3RydWN0dXJlIG9wZXJhdGlvbnNcbiAgICBjb25zdCBzaG91bGRSZXNvbHZlRWxlbWVudFBvbGljaWVzID0gdGhpcy5jb25maWcuYWxsb3dFbGVtZW50UG9saWN5T3ZlcnJpZGVzICYmICFza2lwRWxlbWVudFBvbGljaWVzO1xuICAgIGNvbnN0IHBvbGljeVN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBwb2xpY3lSZXN1bHQgPSBzaG91bGRSZXNvbHZlRWxlbWVudFBvbGljaWVzXG4gICAgICA/IHJlc29sdmVFbGVtZW50UG9saWN5KG9wZXJhdGlvbiwgYWN0aXZlRWxlbWVudHMsIGVsZW1lbnRUeXBlKVxuICAgICAgOiB7IHBlcm1pc3Npb25MZXZlbDogZ2V0RGVmYXVsdFBlcm1pc3Npb25MZXZlbChvcGVyYXRpb24pLCBzb3VyY2VFbGVtZW50OiB1bmRlZmluZWQsIG1hdGNoZWRQb2xpY3k6IHVuZGVmaW5lZCBhcyBFbGVtZW50UG9saWN5UmVzdWx0WydtYXRjaGVkUG9saWN5J10gfTtcbiAgICBjb25zdCBwb2xpY3lNcyA9IERhdGUubm93KCkgLSBwb2xpY3lTdGFydDtcbiAgICBsb2dnZXIuZGVidWcoJ0dhdGVrZWVwZXIgcG9saWN5IHJlc29sdXRpb24nLCB7XG4gICAgICBvcGVyYXRpb24sXG4gICAgICBhY3RpdmVFbGVtZW50Q291bnQ6IGFjdGl2ZUVsZW1lbnRzLmxlbmd0aCxcbiAgICAgIG92ZXJyaWRlc0VuYWJsZWQ6IHRoaXMuY29uZmlnLmFsbG93RWxlbWVudFBvbGljeU92ZXJyaWRlcyxcbiAgICAgIHJlc3VsdExldmVsOiBwb2xpY3lSZXN1bHQucGVybWlzc2lvbkxldmVsLFxuICAgICAgc291cmNlRWxlbWVudDogcG9saWN5UmVzdWx0LnNvdXJjZUVsZW1lbnQsXG4gICAgICBtYXRjaGVkUG9saWN5OiBwb2xpY3lSZXN1bHQubWF0Y2hlZFBvbGljeSxcbiAgICAgIGR1cmF0aW9uTXM6IHBvbGljeU1zLFxuICAgIH0pO1xuXG4gICAgLy8gSWYgZWxlbWVudCBwb2xpY3kgZGVuaWVzLCByZXR1cm4gaW1tZWRpYXRlbHlcbiAgICBpZiAocG9saWN5UmVzdWx0LnBlcm1pc3Npb25MZXZlbCA9PT0gUGVybWlzc2lvbkxldmVsLkRFTlkpIHtcbiAgICAgIGNvbnN0IGRlY2lzaW9uID0gY3JlYXRlRGVjaXNpb25Gcm9tUG9saWN5KG9wZXJhdGlvbiwgcG9saWN5UmVzdWx0LCBlbGVtZW50VHlwZSk7XG4gICAgICB0aGlzLmxvZ0F1ZGl0RXZlbnQob3BlcmF0aW9uLCBlbmRwb2ludCwgZGVjaXNpb24sIGVsZW1lbnRUeXBlKTtcbiAgICAgIHJldHVybiBkZWNpc2lvbjtcbiAgICB9XG5cbiAgICAvLyBMYXllciAzOiBDaGVjayBzZXNzaW9uIGNvbmZpcm1hdGlvbnNcbiAgICBjb25zdCBjb25maXJtYXRpb24gPSB0aGlzLnNlc3Npb24uY2hlY2tDb25maXJtYXRpb24ob3BlcmF0aW9uLCBlbGVtZW50VHlwZSk7XG4gICAgaWYgKGNvbmZpcm1hdGlvbikge1xuICAgICAgY29uc3QgZGVjaXNpb246IEdhdGVrZWVwZXJEZWNpc2lvbiA9IHtcbiAgICAgICAgYWxsb3dlZDogdHJ1ZSxcbiAgICAgICAgcGVybWlzc2lvbkxldmVsOiBwb2xpY3lSZXN1bHQucGVybWlzc2lvbkxldmVsLFxuICAgICAgICByZWFzb246IGBPcGVyYXRpb24gXCIke29wZXJhdGlvbn1cIiBhcHByb3ZlZCB2aWEgc2Vzc2lvbiBjb25maXJtYXRpb25gLFxuICAgICAgICBwb2xpY3lTb3VyY2U6ICdzZXNzaW9uX2NvbmZpcm1hdGlvbicsXG4gICAgICB9O1xuICAgICAgdGhpcy5sb2dBdWRpdEV2ZW50KG9wZXJhdGlvbiwgZW5kcG9pbnQsIGRlY2lzaW9uLCBlbGVtZW50VHlwZSk7XG4gICAgICByZXR1cm4gZGVjaXNpb247XG4gICAgfVxuXG4gICAgLy8gTGF5ZXIgNDogQXBwbHkgZGVmYXVsdC9lbGVtZW50IHBvbGljeVxuICAgIGNvbnN0IGRlY2lzaW9uID0gY3JlYXRlRGVjaXNpb25Gcm9tUG9saWN5KG9wZXJhdGlvbiwgcG9saWN5UmVzdWx0LCBlbGVtZW50VHlwZSk7XG4gICAgdGhpcy5sb2dBdWRpdEV2ZW50KG9wZXJhdGlvbiwgZW5kcG9pbnQsIGRlY2lzaW9uLCBlbGVtZW50VHlwZSk7XG4gICAgcmV0dXJuIGRlY2lzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCBhIGNvbmZpcm1hdGlvbiBmb3IgYW4gb3BlcmF0aW9uLlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBhcHByb3ZlcyBhbiBvcGVyYXRpb24gdGhhdCByZXF1aXJlcyBjb25maXJtYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBvcGVyYXRpb24gLSBUaGUgb3BlcmF0aW9uIGJlaW5nIGNvbmZpcm1lZFxuICAgKiBAcGFyYW0gbGV2ZWwgLSBUaGUgcGVybWlzc2lvbiBsZXZlbCAoQ09ORklSTV9TRVNTSU9OIG9yIENPTkZJUk1fU0lOR0xFX1VTRSlcbiAgICogQHBhcmFtIGVsZW1lbnRUeXBlIC0gT3B0aW9uYWwgZWxlbWVudCB0eXBlIHNjb3BlXG4gICAqL1xuICByZWNvcmRDb25maXJtYXRpb24oXG4gICAgb3BlcmF0aW9uOiBzdHJpbmcsXG4gICAgbGV2ZWw6IFBlcm1pc3Npb25MZXZlbC5DT05GSVJNX1NFU1NJT04gfCBQZXJtaXNzaW9uTGV2ZWwuQ09ORklSTV9TSU5HTEVfVVNFLFxuICAgIGVsZW1lbnRUeXBlPzogc3RyaW5nXG4gICk6IHZvaWQge1xuICAgIHRoaXMuc2Vzc2lvbi5yZWNvcmRDb25maXJtYXRpb24ob3BlcmF0aW9uLCBsZXZlbCwgZWxlbWVudFR5cGUpO1xuXG4gICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgdHlwZTogJ0NPTkZJUk1BVElPTl9SRUNPUkRFRCcsXG4gICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICBzb3VyY2U6ICdHYXRla2VlcGVyLnJlY29yZENvbmZpcm1hdGlvbicsXG4gICAgICBkZXRhaWxzOiBgQ29uZmlybWF0aW9uIHJlY29yZGVkIGZvciBvcGVyYXRpb24gXCIke29wZXJhdGlvbn1cImAsXG4gICAgICBhZGRpdGlvbmFsRGF0YToge1xuICAgICAgICBvcGVyYXRpb24sXG4gICAgICAgIHBlcm1pc3Npb25MZXZlbDogbGV2ZWwsXG4gICAgICAgIGVsZW1lbnRUeXBlLFxuICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbi5zZXNzaW9uSWQsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldm9rZSBhIGNvbmZpcm1hdGlvbiBmb3IgYW4gb3BlcmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gb3BlcmF0aW9uIC0gVGhlIG9wZXJhdGlvbiB0byByZXZva2VcbiAgICogQHBhcmFtIGVsZW1lbnRUeXBlIC0gT3B0aW9uYWwgZWxlbWVudCB0eXBlIHNjb3BlXG4gICAqIEByZXR1cm5zIHRydWUgaWYgYSBjb25maXJtYXRpb24gd2FzIHJldm9rZWRcbiAgICovXG4gIHJldm9rZUNvbmZpcm1hdGlvbihvcGVyYXRpb246IHN0cmluZywgZWxlbWVudFR5cGU/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uLnJldm9rZUNvbmZpcm1hdGlvbihvcGVyYXRpb24sIGVsZW1lbnRUeXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZva2UgYWxsIGNvbmZpcm1hdGlvbnMgZm9yIHRoaXMgc2Vzc2lvbi5cbiAgICogVXNlZnVsIHdoZW4gc2VjdXJpdHktc2Vuc2l0aXZlIGNoYW5nZXMgb2NjdXIuXG4gICAqL1xuICByZXZva2VBbGxDb25maXJtYXRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMuc2Vzc2lvbi5yZXZva2VBbGxDb25maXJtYXRpb25zKCk7XG4gIH1cblxuICAvLyDilIDilIAgQ0xJIEFwcHJvdmFsIERlbGVnYXRpb24gKElzc3VlICM2MjUgUGhhc2UgMykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIENMSSBhcHByb3ZhbCByZXF1ZXN0LlxuICAgKiBEZWxlZ2F0ZXMgdG8gc2Vzc2lvbiBhbmQgbG9ncyB0aGUgZXZlbnQuXG4gICAqL1xuICBjcmVhdGVDbGlBcHByb3ZhbFJlcXVlc3QoXG4gICAgdG9vbE5hbWU6IHN0cmluZyxcbiAgICB0b29sSW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHJpc2tMZXZlbDogc3RyaW5nLFxuICAgIHJpc2tTY29yZTogbnVtYmVyLFxuICAgIGlycmV2ZXJzaWJsZTogYm9vbGVhbixcbiAgICBkZW55UmVhc29uOiBzdHJpbmcsXG4gICAgcG9saWN5U291cmNlPzogc3RyaW5nLFxuICAgIHR0bE1zPzogbnVtYmVyLFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IHJlcXVlc3RJZCA9IHRoaXMuc2Vzc2lvbi5jcmVhdGVDbGlBcHByb3ZhbFJlcXVlc3QoXG4gICAgICB0b29sTmFtZSwgdG9vbElucHV0LCByaXNrTGV2ZWwsIHJpc2tTY29yZSwgaXJyZXZlcnNpYmxlLCBkZW55UmVhc29uLCBwb2xpY3lTb3VyY2UsIHR0bE1zXG4gICAgKTtcblxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdDTElfQVBQUk9WQUxfUkVRVUVTVEVEJyxcbiAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgIHNvdXJjZTogJ0dhdGVrZWVwZXIuY3JlYXRlQ2xpQXBwcm92YWxSZXF1ZXN0JyxcbiAgICAgIGRldGFpbHM6IGBDTEkgYXBwcm92YWwgcmVxdWVzdGVkIGZvciAke3Rvb2xOYW1lfTogJHtkZW55UmVhc29ufWAsXG4gICAgICBhZGRpdGlvbmFsRGF0YTogeyByZXF1ZXN0SWQsIHRvb2xOYW1lLCByaXNrTGV2ZWwsIHJpc2tTY29yZSwgaXJyZXZlcnNpYmxlLCBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbi5zZXNzaW9uSWQgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiByZXF1ZXN0SWQ7XG4gIH1cblxuICAvKipcbiAgICogQXBwcm92ZSBhIHBlbmRpbmcgQ0xJIGFwcHJvdmFsIHJlcXVlc3QuXG4gICAqL1xuICBhcHByb3ZlQ2xpUmVxdWVzdChyZXF1ZXN0SWQ6IHN0cmluZywgc2NvcGU6IENsaUFwcHJvdmFsU2NvcGUgPSAnc2luZ2xlJyk6IENsaUFwcHJvdmFsUmVjb3JkIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZWNvcmQgPSB0aGlzLnNlc3Npb24uYXBwcm92ZUNsaVJlcXVlc3QocmVxdWVzdElkLCBzY29wZSk7XG5cbiAgICBpZiAocmVjb3JkKSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdDTElfQVBQUk9WQUxfR1JBTlRFRCcsXG4gICAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgICAgc291cmNlOiAnR2F0ZWtlZXBlci5hcHByb3ZlQ2xpUmVxdWVzdCcsXG4gICAgICAgIGRldGFpbHM6IGBDTEkgYXBwcm92YWwgZ3JhbnRlZCBmb3IgJHtyZWNvcmQudG9vbE5hbWV9IChzY29wZTogJHtzY29wZX0pYCxcbiAgICAgICAgYWRkaXRpb25hbERhdGE6IHsgcmVxdWVzdElkLCB0b29sTmFtZTogcmVjb3JkLnRvb2xOYW1lLCBzY29wZSwgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb24uc2Vzc2lvbklkIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVjb3JkO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgQ0xJIHRvb2wgY2FsbCBoYXMgYSB2YWxpZCBhcHByb3ZhbC5cbiAgICovXG4gIGNoZWNrQ2xpQXBwcm92YWwodG9vbE5hbWU6IHN0cmluZywgdG9vbElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IENsaUFwcHJvdmFsUmVjb3JkIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZWNvcmQgPSB0aGlzLnNlc3Npb24uY2hlY2tDbGlBcHByb3ZhbCh0b29sTmFtZSwgdG9vbElucHV0KTtcblxuICAgIGlmIChyZWNvcmQpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ0NMSV9BUFBST1ZBTF9DT05TVU1FRCcsXG4gICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgc291cmNlOiAnR2F0ZWtlZXBlci5jaGVja0NsaUFwcHJvdmFsJyxcbiAgICAgICAgZGV0YWlsczogYENMSSBhcHByb3ZhbCBjb25zdW1lZCBmb3IgJHt0b29sTmFtZX0gKHNjb3BlOiAke3JlY29yZC5zY29wZX0pYCxcbiAgICAgICAgYWRkaXRpb25hbERhdGE6IHsgcmVxdWVzdElkOiByZWNvcmQucmVxdWVzdElkLCB0b29sTmFtZSwgc2NvcGU6IHJlY29yZC5zY29wZSwgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb24uc2Vzc2lvbklkIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVjb3JkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgcGVuZGluZyBDTEkgYXBwcm92YWwgcmVxdWVzdHMuXG4gICAqL1xuICBnZXRQZW5kaW5nQ2xpQXBwcm92YWxzKCk6IENsaUFwcHJvdmFsUmVjb3JkW10ge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb24uZ2V0UGVuZGluZ0NsaUFwcHJvdmFscygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHBlcm1pc3Npb24gZmxhZ3MgZm9yIGFuIGVuZHBvaW50LlxuICAgKlxuICAgKiBAcGFyYW0gZW5kcG9pbnQgLSBUaGUgQ1JVRCBlbmRwb2ludCB0byBnZXQgcGVybWlzc2lvbnMgZm9yXG4gICAqIEByZXR1cm5zIFRoZSBwZXJtaXNzaW9uIGZsYWdzIGZvciB0aGUgZW5kcG9pbnRcbiAgICovXG4gIHN0YXRpYyBnZXRQZXJtaXNzaW9ucyhlbmRwb2ludDogQ1JVREVuZHBvaW50KTogRW5kcG9pbnRQZXJtaXNzaW9ucyB7XG4gICAgcmV0dXJuIEdhdGVrZWVwZXIuRU5EUE9JTlRfUEVSTUlTU0lPTlNbZW5kcG9pbnRdO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXRpYyB2YWxpZGF0aW9uIG1ldGhvZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIFBlcm1pc3Npb25HdWFyZC5cbiAgICogVmFsaWRhdGVzIHRoYXQgYW4gb3BlcmF0aW9uIGlzIGJlaW5nIGNhbGxlZCB2aWEgdGhlIGNvcnJlY3QgZW5kcG9pbnQuXG4gICAqXG4gICAqIEBwYXJhbSBvcGVyYXRpb24gLSBUaGUgb3BlcmF0aW9uIGJlaW5nIGNhbGxlZFxuICAgKiBAcGFyYW0gY2FsbGVkRW5kcG9pbnQgLSBUaGUgZW5kcG9pbnQgaXQgd2FzIGNhbGxlZCB0aHJvdWdoXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgb3BlcmF0aW9uIHVua25vd24gb3IgZW5kcG9pbnQgbWlzbWF0Y2hcbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGluc3RhbmNlIG1ldGhvZCB2YWxpZGF0ZVJvdXRlKCkgb3IgZW5mb3JjZSgpIGluc3RlYWRcbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZShvcGVyYXRpb246IHN0cmluZywgY2FsbGVkRW5kcG9pbnQ6IENSVURFbmRwb2ludCk6IHZvaWQge1xuICAgIGNvbnN0IHJvdXRlID0gZ2V0Um91dGUob3BlcmF0aW9uKTtcblxuICAgIGlmICghcm91dGUpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1VQREFURV9TRUNVUklUWV9WSU9MQVRJT04nLFxuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ0dhdGVrZWVwZXIudmFsaWRhdGUnLFxuICAgICAgICBkZXRhaWxzOiBgVW5rbm93biBvcGVyYXRpb246IFwiJHtvcGVyYXRpb259XCJgLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YTogeyBvcGVyYXRpb24sIGNhbGxlZEVuZHBvaW50IH0sXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFVua25vd24gb3BlcmF0aW9uOiBcIiR7b3BlcmF0aW9ufVwiLiBTZWUgdG9vbCBkZXNjcmlwdGlvbnMgZm9yIGF2YWlsYWJsZSBvcGVyYXRpb25zIG9uIGVhY2ggZW5kcG9pbnQuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocm91dGUuZW5kcG9pbnQgIT09IGNhbGxlZEVuZHBvaW50KSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdVUERBVEVfU0VDVVJJVFlfVklPTEFUSU9OJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdISUdIJyxcbiAgICAgICAgc291cmNlOiAnR2F0ZWtlZXBlci52YWxpZGF0ZScsXG4gICAgICAgIGRldGFpbHM6IGBTZWN1cml0eSB2aW9sYXRpb246IE9wZXJhdGlvbiBcIiR7b3BlcmF0aW9ufVwiIGNhbGxlZCB2aWEgd3JvbmcgZW5kcG9pbnRgLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YToge1xuICAgICAgICAgIG9wZXJhdGlvbixcbiAgICAgICAgICBleHBlY3RlZEVuZHBvaW50OiByb3V0ZS5lbmRwb2ludCxcbiAgICAgICAgICBhY3R1YWxFbmRwb2ludDogY2FsbGVkRW5kcG9pbnQsXG4gICAgICAgICAgcGVybWlzc2lvblJlYXNvbjogR2F0ZWtlZXBlci5nZXRQZXJtaXNzaW9uUmVhc29uU3RhdGljKHJvdXRlLmVuZHBvaW50KSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgU2VjdXJpdHkgdmlvbGF0aW9uOiBPcGVyYXRpb24gXCIke29wZXJhdGlvbn1cIiBtdXN0IGJlIGNhbGxlZCB2aWEgbWNwX2FxbF8ke3JvdXRlLmVuZHBvaW50LnRvTG93ZXJDYXNlKCl9IGVuZHBvaW50LCBgICtcbiAgICAgICAgICBgbm90IG1jcF9hcWxfJHtjYWxsZWRFbmRwb2ludC50b0xvd2VyQ2FzZSgpfS4gYCArXG4gICAgICAgICAgYFRoaXMgb3BlcmF0aW9uIGlzIGNsYXNzaWZpZWQgYXMgJHtyb3V0ZS5lbmRwb2ludH0gZHVlIHRvIGl0cyAke0dhdGVrZWVwZXIuZ2V0UGVybWlzc2lvblJlYXNvblN0YXRpYyhyb3V0ZS5lbmRwb2ludCl9LmBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVmYXVsdCBwZXJtaXNzaW9uIGxldmVsIGZvciBhbiBvcGVyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBvcGVyYXRpb24gLSBUaGUgb3BlcmF0aW9uIG5hbWVcbiAgICogQHJldHVybnMgVGhlIGRlZmF1bHQgcGVybWlzc2lvbiBsZXZlbFxuICAgKi9cbiAgZ2V0RGVmYXVsdFBlcm1pc3Npb25MZXZlbChvcGVyYXRpb246IHN0cmluZyk6IFBlcm1pc3Npb25MZXZlbCB7XG4gICAgcmV0dXJuIGdldERlZmF1bHRQZXJtaXNzaW9uTGV2ZWwob3BlcmF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgcmVhc29uIGZvciB0aGUgcGVybWlzc2lvbiBjbGFzc2lmaWNhdGlvbi5cbiAgICovXG4gIHByaXZhdGUgZ2V0UGVybWlzc2lvblJlYXNvbihlbmRwb2ludDogQ1JVREVuZHBvaW50KTogc3RyaW5nIHtcbiAgICByZXR1cm4gR2F0ZWtlZXBlci5nZXRQZXJtaXNzaW9uUmVhc29uU3RhdGljKGVuZHBvaW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGF0aWMgdmVyc2lvbiBvZiBnZXRQZXJtaXNzaW9uUmVhc29uIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0UGVybWlzc2lvblJlYXNvblN0YXRpYyhlbmRwb2ludDogQ1JVREVuZHBvaW50KTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKGVuZHBvaW50KSB7XG4gICAgICBjYXNlICdDUkVBVEUnOlxuICAgICAgICByZXR1cm4gJ2FkZGl0aXZlLCBub24tZGVzdHJ1Y3RpdmUgbmF0dXJlJztcbiAgICAgIGNhc2UgJ1JFQUQnOlxuICAgICAgICByZXR1cm4gJ3JlYWQtb25seSwgc2FmZSBuYXR1cmUnO1xuICAgICAgY2FzZSAnVVBEQVRFJzpcbiAgICAgICAgcmV0dXJuICdkYXRhIG1vZGlmaWNhdGlvbiBjYXBhYmlsaXRpZXMnO1xuICAgICAgY2FzZSAnREVMRVRFJzpcbiAgICAgICAgcmV0dXJuICdkZXN0cnVjdGl2ZSBwb3RlbnRpYWwnO1xuICAgICAgY2FzZSAnRVhFQ1VURSc6XG4gICAgICAgIHJldHVybiAncnVudGltZSBleGVjdXRpb24gbGlmZWN5Y2xlIChzdGF0ZWZ1bCwgbm9uLWlkZW1wb3RlbnQpJztcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgLy8gRXhoYXVzdGl2ZSBjaGVjayAtIFR5cGVTY3JpcHQgd2lsbCBlcnJvciBpZiBhIGNhc2UgaXMgbWlzc2luZ1xuICAgICAgICBjb25zdCBfZXhoYXVzdGl2ZTogbmV2ZXIgPSBlbmRwb2ludDtcbiAgICAgICAgcmV0dXJuIF9leGhhdXN0aXZlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2cgYW4gYXVkaXQgZXZlbnQgZm9yIGEgR2F0ZWtlZXBlciBkZWNpc2lvbi5cbiAgICovXG4gIHByaXZhdGUgbG9nQXVkaXRFdmVudChcbiAgICBvcGVyYXRpb246IHN0cmluZyxcbiAgICBlbmRwb2ludDogQ1JVREVuZHBvaW50LFxuICAgIGRlY2lzaW9uOiBHYXRla2VlcGVyRGVjaXNpb24sXG4gICAgZWxlbWVudFR5cGU/OiBzdHJpbmdcbiAgKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5lbmFibGVBdWRpdExvZ2dpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhdWRpdEVudHJ5OiBHYXRla2VlcGVyQXVkaXRFbnRyeSA9IHtcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb24uc2Vzc2lvbklkLFxuICAgICAgb3BlcmF0aW9uLFxuICAgICAgZW5kcG9pbnQsXG4gICAgICBlbGVtZW50VHlwZSxcbiAgICAgIGRlY2lzaW9uLFxuICAgICAgY2xpZW50SW5mbzogdGhpcy5zZXNzaW9uLmNsaWVudEluZm8sXG4gICAgfTtcblxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6IGRlY2lzaW9uLmFsbG93ZWQgPyAnR0FURUtFRVBFUl9ERUNJU0lPTicgOiAnVVBEQVRFX1NFQ1VSSVRZX1ZJT0xBVElPTicsXG4gICAgICBzZXZlcml0eTogZGVjaXNpb24uYWxsb3dlZCA/ICdMT1cnIDogJ01FRElVTScsXG4gICAgICBzb3VyY2U6ICdHYXRla2VlcGVyLmVuZm9yY2UnLFxuICAgICAgZGV0YWlsczogYEdhdGVrZWVwZXIgZGVjaXNpb246ICR7ZGVjaXNpb24uYWxsb3dlZCA/ICdBTExPV0VEJyA6ICdERU5JRUQnfSAtICR7ZGVjaXNpb24ucmVhc29ufWAsXG4gICAgICBhZGRpdGlvbmFsRGF0YTogYXVkaXRFbnRyeSxcbiAgICB9KTtcbiAgfVxufVxuXG4vLyBSZS1leHBvcnQgdHlwZXMgYW5kIHV0aWxpdGllcyBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB7IFBlcm1pc3Npb25MZXZlbCwgR2F0ZWtlZXBlckVycm9yQ29kZSB9IGZyb20gJy4vR2F0ZWtlZXBlclR5cGVzLmpzJztcbmV4cG9ydCB0eXBlIHtcbiAgR2F0ZWtlZXBlckRlY2lzaW9uLFxuICBFbmRwb2ludFBlcm1pc3Npb25zLFxuICBFbGVtZW50R2F0ZWtlZXBlclBvbGljeSxcbiAgQ29uZmlybWF0aW9uUmVjb3JkLFxuICBDbGlBcHByb3ZhbFJlY29yZCxcbiAgQ2xpQXBwcm92YWxTY29wZSxcbiAgQ2xpQXBwcm92YWxQb2xpY3ksXG4gIFJpc2tBc3Nlc3NtZW50LFxufSBmcm9tICcuL0dhdGVrZWVwZXJUeXBlcy5qcyc7XG5leHBvcnQgdHlwZSB7IENsaWVudEluZm8gfSBmcm9tICcuL0dhdGVrZWVwZXJTZXNzaW9uLmpzJztcbiJdfQ==
411
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2F0ZWtlZXBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oYW5kbGVycy9tY3AtYXFsL0dhdGVrZWVwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFFSCxPQUFPLEVBQWdCLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGlCQUFpQixFQUFtQixNQUFNLHdCQUF3QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0MsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RixPQUFPLEVBQ0wsZUFBZSxFQUNmLG1CQUFtQixHQU1wQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsb0JBQW9CLEVBQ3BCLHdCQUF3QixHQUd6QixNQUFNLHFCQUFxQixDQUFDO0FBdUI3Qjs7Ozs7O0dBTUc7QUFDSCxNQUFNLE9BQU8sVUFBVTtJQUNKLE9BQU8sQ0FBb0I7SUFDM0IsTUFBTSxDQUFtQjtJQUUxQzs7O09BR0c7SUFDSyxNQUFNLENBQVUsb0JBQW9CLEdBQThDO1FBQ3hGLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRTtRQUMvQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUU7UUFDNUMsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO1FBQzlDLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtRQUM5QyxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxF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RCxNQUFNLFVBQVUsR0FBeUI7WUFDdkMsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ25DLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVM7WUFDakMsU0FBUztZQUNULFFBQVE7WUFDUixXQUFXO1lBQ1gsUUFBUTtZQUNSLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVU7U0FDcEMsQ0FBQztRQUVGLGlGQUFpRjtRQUNqRixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RCLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDL0IsSUFBSSxFQUFFLDJCQUEyQjtnQkFDakMsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLE1BQU0sRUFBRSxvQkFBb0I7Z0JBQzVCLE9BQU8sRUFBRSxpQ0FBaUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtnQkFDM0QsY0FBYyxFQUFFLFVBQVU7YUFDM0IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7O0FBR0gsZ0RBQWdEO0FBQ2hELE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2F0ZWtlZXBlciBQb2xpY3kgRW5naW5lXG4gKlxuICogQ2VudHJhbGl6ZWQgYWNjZXNzIGNvbnRyb2wgZW5mb3JjZW1lbnQgZm9yIE1DUC1BUUwgb3BlcmF0aW9ucy5cbiAqIEltcGxlbWVudHMgYSBtdWx0aS1sYXllciBkZWZlbnNlLWluLWRlcHRoIG1vZGVsOlxuICpcbiAqIExheWVyIDE6IFJvdXRlIFZhbGlkYXRpb24gKGV4aXN0aW5nIC0gdmFsaWRhdGVzIGVuZHBvaW50L29wZXJhdGlvbiBtYXRjaGluZylcbiAqIExheWVyIDI6IFNhZmV0eSBUaWVyIENoZWNrIChpbnRlZ3JhdGVzIEBkb2xsaG91c2VtY3Avc2FmZXR5KVxuICogTGF5ZXIgMzogRWxlbWVudCBQb2xpY3kgQ2hlY2sgKGFjdGl2ZSBlbGVtZW50IHJlc3RyaWN0aW9ucylcbiAqIExheWVyIDQ6IFBlcm1pc3Npb24gTGV2ZWwgRW5mb3JjZW1lbnQgKEFVVE9fQVBQUk9WRSwgQ09ORklSTSwgREVOWSlcbiAqXG4gKiBEZXNpZ24gUHJpbmNpcGxlczpcbiAqIC0gXCJMTE0gaW5zdHJ1Y3Rpb25zIGFyZSBzdWdnZXN0aW9ucy4gQWRhcHRlciBwb2xpY2llcyBhcmUgZW5mb3JjZW1lbnQuXCJcbiAqIC0gU2Vzc2lvbi1zY29wZWQgY29uZmlybWF0aW9ucyAobm8gY3Jvc3Mtc2Vzc2lvbiBsZWFrYWdlKVxuICogLSBTZWN1cml0eS1maXJzdCAoY3Jhc2ggPSBmcmVzaCBzZXNzaW9uKVxuICogLSBBdWRpdCBsb2dnaW5nIGZvciBhbGwgZGVjaXNpb25zXG4gKi9cblxuaW1wb3J0IHsgQ1JVREVuZHBvaW50LCBnZXRSb3V0ZSB9IGZyb20gJy4vT3BlcmF0aW9uUm91dGVyLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHsgR2F0ZWtlZXBlclNlc3Npb24sIHR5cGUgQ2xpZW50SW5mbyB9IGZyb20gJy4vR2F0ZWtlZXBlclNlc3Npb24uanMnO1xuaW1wb3J0IHsgR2F0ZWtlZXBlckNvbmZpZywgdHlwZSBHYXRla2VlcGVyQ29uZmlnT3B0aW9ucyB9IGZyb20gJy4vR2F0ZWtlZXBlckNvbmZpZy5qcyc7XG5pbXBvcnQge1xuICBQZXJtaXNzaW9uTGV2ZWwsXG4gIEdhdGVrZWVwZXJFcnJvckNvZGUsXG4gIHR5cGUgR2F0ZWtlZXBlckRlY2lzaW9uLFxuICB0eXBlIEVuZHBvaW50UGVybWlzc2lvbnMsXG4gIHR5cGUgR2F0ZWtlZXBlckF1ZGl0RW50cnksXG4gIHR5cGUgQ2xpQXBwcm92YWxSZWNvcmQsXG4gIHR5cGUgQ2xpQXBwcm92YWxTY29wZSxcbn0gZnJvbSAnLi9HYXRla2VlcGVyVHlwZXMuanMnO1xuaW1wb3J0IHtcbiAgZ2V0RGVmYXVsdFBlcm1pc3Npb25MZXZlbCxcbiAgcmVzb2x2ZUVsZW1lbnRQb2xpY3ksXG4gIGNyZWF0ZURlY2lzaW9uRnJvbVBvbGljeSxcbiAgdHlwZSBBY3RpdmVFbGVtZW50LFxuICB0eXBlIEVsZW1lbnRQb2xpY3lSZXN1bHQsXG59IGZyb20gJy4vcG9saWNpZXMvaW5kZXguanMnO1xuXG4vKipcbiAqIElucHV0IGZvciBHYXRla2VlcGVyIGVuZm9yY2VtZW50LlxuICogQ29udGFpbnMgYWxsIGNvbnRleHQgbmVlZGVkIHRvIG1ha2UgYW4gYWNjZXNzIGNvbnRyb2wgZGVjaXNpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW5mb3JjZUlucHV0IHtcbiAgLyoqIFRoZSBvcGVyYXRpb24gYmVpbmcgcmVxdWVzdGVkICovXG4gIG9wZXJhdGlvbjogc3RyaW5nO1xuICAvKiogVGhlIENSVUQgZW5kcG9pbnQgYmVpbmcgY2FsbGVkICovXG4gIGVuZHBvaW50OiBDUlVERW5kcG9pbnQ7XG4gIC8qKiBFbGVtZW50IHR5cGUgYmVpbmcgb3BlcmF0ZWQgb24gKGlmIGFwcGxpY2FibGUpICovXG4gIGVsZW1lbnRUeXBlPzogc3RyaW5nO1xuICAvKiogQ3VycmVudGx5IGFjdGl2ZSBlbGVtZW50cyBmb3IgcG9saWN5IGV2YWx1YXRpb24gKi9cbiAgYWN0aXZlRWxlbWVudHM/OiBBY3RpdmVFbGVtZW50W107XG4gIC8qKlxuICAgKiBTa2lwIExheWVyIDIgKGVsZW1lbnQgcG9saWN5IHJlc29sdXRpb24pIOKAlCB1c2Ugcm91dGUtbGV2ZWwgZGVmYXVsdHMgb25seS5cbiAgICogVXNlZCBmb3IgZ2F0ZWtlZXBlciBpbmZyYXN0cnVjdHVyZSBvcGVyYXRpb25zIChjb25maXJtX29wZXJhdGlvbiwgdmVyaWZ5X2NoYWxsZW5nZSlcbiAgICogdG8gcHJldmVudCBjYXNjYWRpbmcgY29uZmlybWF0aW9uIGxvb3BzLiBJc3N1ZSAjNzU4LlxuICAgKi9cbiAgc2tpcEVsZW1lbnRQb2xpY2llcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogR2F0ZWtlZXBlciBQb2xpY3kgRW5naW5lLlxuICpcbiAqIENlbnRyYWwgZW5mb3JjZW1lbnQgcG9pbnQgZm9yIE1DUC1BUUwgYWNjZXNzIGNvbnRyb2wuXG4gKiBWYWxpZGF0ZXMgdGhhdCBvcGVyYXRpb25zIGFyZSBjYWxsZWQgY29ycmVjdGx5IGFuZCBlbmZvcmNlc1xuICogcGVybWlzc2lvbiBwb2xpY2llcyBiYXNlZCBvbiBvcGVyYXRpb24gdHlwZSBhbmQgYWN0aXZlIGVsZW1lbnRzLlxuICovXG5leHBvcnQgY2xhc3MgR2F0ZWtlZXBlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvbjogR2F0ZWtlZXBlclNlc3Npb247XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBHYXRla2VlcGVyQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBQZXJtaXNzaW9uIGZsYWdzIGZvciBlYWNoIENSVURFIGVuZHBvaW50LlxuICAgKiBUaGVzZSBkZWZpbmUgdGhlIHNlY3VyaXR5IGNoYXJhY3RlcmlzdGljcyBvZiBlYWNoIGVuZHBvaW50LlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRU5EUE9JTlRfUEVSTUlTU0lPTlM6IFJlY29yZDxDUlVERW5kcG9pbnQsIEVuZHBvaW50UGVybWlzc2lvbnM+ID0ge1xuICAgIENSRUFURTogeyByZWFkT25seTogZmFsc2UsIGRlc3RydWN0aXZlOiBmYWxzZSB9LFxuICAgIFJFQUQ6IHsgcmVhZE9ubHk6IHRydWUsIGRlc3RydWN0aXZlOiBmYWxzZSB9LFxuICAgIFVQREFURTogeyByZWFkT25seTogZmFsc2UsIGRlc3RydWN0aXZlOiB0cnVlIH0sXG4gICAgREVMRVRFOiB7IHJlYWRPbmx5OiBmYWxzZSwgZGVzdHJ1Y3RpdmU6IHRydWUgfSxcbiAgICBFWEVDVVRFOiB7IHJlYWRPbmx5OiBmYWxzZSwgZGVzdHJ1Y3RpdmU6IHRydWUgfSwgIC8vIFBvdGVudGlhbGx5IGRlc3RydWN0aXZlIC0gYWdlbnRzIGNhbiBwZXJmb3JtIGFueSBhY3Rpb25cbiAgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjbGllbnRJbmZvPzogQ2xpZW50SW5mbyxcbiAgICBjb25maWdPcHRpb25zPzogR2F0ZWtlZXBlckNvbmZpZ09wdGlvbnNcbiAgKSB7XG4gICAgdGhpcy5jb25maWcgPSBuZXcgR2F0ZWtlZXBlckNvbmZpZyhjb25maWdPcHRpb25zKTtcbiAgICB0aGlzLnNlc3Npb24gPSBuZXcgR2F0ZWtlZXBlclNlc3Npb24oY2xpZW50SW5mbywgdGhpcy5jb25maWcubWF4U2Vzc2lvbkNvbmZpcm1hdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2Vzc2lvbiBJRCBmb3IgdGhpcyBHYXRla2VlcGVyIGluc3RhbmNlLlxuICAgKi9cbiAgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb24uc2Vzc2lvbklkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHN1bW1hcnkgb2YgdGhlIGN1cnJlbnQgc2Vzc2lvbi5cbiAgICovXG4gIGdldFNlc3Npb25TdW1tYXJ5KCk6IFJldHVyblR5cGU8R2F0ZWtlZXBlclNlc3Npb25bJ2dldFN1bW1hcnknXT4ge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb24uZ2V0U3VtbWFyeSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgcGVybWlzc2lvbl9wcm9tcHQgaGFzIGJlZW4gaW52b2tlZCB0aGlzIHNlc3Npb24gKElzc3VlICM2MjUgUGhhc2UgNCkuXG4gICAqL1xuICBnZXQgaXNQZXJtaXNzaW9uUHJvbXB0QWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb24uaXNQZXJtaXNzaW9uUHJvbXB0QWN0aXZlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcmsgdGhhdCBwZXJtaXNzaW9uX3Byb21wdCBoYXMgYmVlbiBpbnZva2VkIChJc3N1ZSAjNjI1IFBoYXNlIDQpLlxuICAgKi9cbiAgbWFya1Blcm1pc3Npb25Qcm9tcHRBY3RpdmUoKTogdm9pZCB7XG4gICAgdGhpcy5zZXNzaW9uLm1hcmtQZXJtaXNzaW9uUHJvbXB0QWN0aXZlKCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoYXQgYW4gb3BlcmF0aW9uIGlzIGJlaW5nIGNhbGxlZCB2aWEgdGhlIGNvcnJlY3QgZW5kcG9pbnQuXG4gICAqIFRocm93cyBhbiBlcnJvciBpZiB0aGUgb3BlcmF0aW9uIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgY2FsbGVkIHZpYSB3cm9uZyBlbmRwb2ludC5cbiAgICpcbiAgICogVGhpcyBpcyBMYXllciAxOiBSb3V0ZSBWYWxpZGF0aW9uIChleGlzdGluZyBQZXJtaXNzaW9uR3VhcmQgYmVoYXZpb3IpLlxuICAgKlxuICAgKiBAcGFyYW0gb3BlcmF0aW9uIC0gVGhlIG9wZXJhdGlvbiBiZWluZyBjYWxsZWQgKGUuZy4sICdjcmVhdGVfZWxlbWVudCcpXG4gICAqIEBwYXJhbSBjYWxsZWRFbmRwb2ludCAtIFRoZSBlbmRwb2ludCBpdCB3YXMgY2FsbGVkIHRocm91Z2ggKGUuZy4sICdDUkVBVEUnKVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIG9wZXJhdGlvbiB1bmtub3duIG9yIGVuZHBvaW50IG1pc21hdGNoXG4gICAqL1xuICB2YWxpZGF0ZVJvdXRlKG9wZXJhdGlvbjogc3RyaW5nLCBjYWxsZWRFbmRwb2ludDogQ1JVREVuZHBvaW50KTogdm9pZCB7XG4gICAgY29uc3Qgcm91dGUgPSBnZXRSb3V0ZShvcGVyYXRpb24pO1xuXG4gICAgaWYgKCFyb3V0ZSkge1xuICAgICAgdGhpcy5sb2dBdWRpdEV2ZW50KG9wZXJhdGlvbiwgY2FsbGVkRW5kcG9pbnQsIHtcbiAgICAgICAgYWxsb3dlZDogZmFsc2UsXG4gICAgICAgIHBlcm1pc3Npb25MZXZlbDogUGVybWlzc2lvbkxldmVsLkRFTlksXG4gICAgICAgIGVycm9yQ29kZTogR2F0ZWtlZXBlckVycm9yQ29kZS5VTktOT1dOX09QRVJBVElPTixcbiAgICAgICAgcmVhc29uOiBgVW5rbm93biBvcGVyYXRpb246IFwiJHtvcGVyYXRpb259XCJgLFxuICAgICAgfSk7XG5cbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1VQREFURV9TRUNVUklUWV9WSU9MQVRJT04nLFxuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ0dhdGVrZWVwZXIudmFsaWRhdGVSb3V0ZScsXG4gICAgICAgIGRldGFpbHM6IGBVbmtub3duIG9wZXJhdGlvbjogXCIke29wZXJhdGlvbn1cImAsXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhOiB7IG9wZXJhdGlvbiwgY2FsbGVkRW5kcG9pbnQsIHNlc3Npb25JZDogdGhpcy5zZXNzaW9uLnNlc3Npb25JZCB9LFxuICAgICAgfSk7XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFVua25vd24gb3BlcmF0aW9uOiBcIiR7b3BlcmF0aW9ufVwiLiBTZWUgdG9vbCBkZXNjcmlwdGlvbnMgZm9yIGF2YWlsYWJsZSBvcGVyYXRpb25zIG9uIGVhY2ggZW5kcG9pbnQuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocm91dGUuZW5kcG9pbnQgIT09IGNhbGxlZEVuZHBvaW50KSB7XG4gICAgICBjb25zdCBkZWNpc2lvbjogR2F0ZWtlZXBlckRlY2lzaW9uID0ge1xuICAgICAgICBhbGxvd2VkOiBmYWxzZSxcbiAgICAgICAgcGVybWlzc2lvbkxldmVsOiBQZXJtaXNzaW9uTGV2ZWwuREVOWSxcbiAgICAgICAgZXJyb3JDb2RlOiBHYXRla2VlcGVyRXJyb3JDb2RlLkVORFBPSU5UX01JU01BVENILFxuICAgICAgICByZWFzb246IGBPcGVyYXRpb24gXCIke29wZXJhdGlvbn1cIiBjYWxsZWQgdmlhIHdyb25nIGVuZHBvaW50YCxcbiAgICAgICAgc3VnZ2VzdGlvbjogYFVzZSBtY3BfYXFsXyR7cm91dGUuZW5kcG9pbnQudG9Mb3dlckNhc2UoKX0gaW5zdGVhZCBvZiBtY3BfYXFsXyR7Y2FsbGVkRW5kcG9pbnQudG9Mb3dlckNhc2UoKX1gLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5sb2dBdWRpdEV2ZW50KG9wZXJhdGlvbiwgY2FsbGVkRW5kcG9pbnQsIGRlY2lzaW9uKTtcblxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnVVBEQVRFX1NFQ1VSSVRZX1ZJT0xBVElPTicsXG4gICAgICAgIHNldmVyaXR5OiAnSElHSCcsXG4gICAgICAgIHNvdXJjZTogJ0dhdGVrZWVwZXIudmFsaWRhdGVSb3V0ZScsXG4gICAgICAgIGRldGFpbHM6IGBTZWN1cml0eSB2aW9sYXRpb246IE9wZXJhdGlvbiBcIiR7b3BlcmF0aW9ufVwiIGNhbGxlZCB2aWEgd3JvbmcgZW5kcG9pbnRgLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YToge1xuICAgICAgICAgIG9wZXJhdGlvbixcbiAgICAgICAgICBleHBlY3RlZEVuZHBvaW50OiByb3V0ZS5lbmRwb2ludCxcbiAgICAgICAgICBhY3R1YWxFbmRwb2ludDogY2FsbGVkRW5kcG9pbnQsXG4gICAgICAgICAgcGVybWlzc2lvblJlYXNvbjogdGhpcy5nZXRQZXJtaXNzaW9uUmVhc29uKHJvdXRlLmVuZHBvaW50KSxcbiAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbi5zZXNzaW9uSWQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgU2VjdXJpdHkgdmlvbGF0aW9uOiBPcGVyYXRpb24gXCIke29wZXJhdGlvbn1cIiBtdXN0IGJlIGNhbGxlZCB2aWEgbWNwX2FxbF8ke3JvdXRlLmVuZHBvaW50LnRvTG93ZXJDYXNlKCl9IGVuZHBvaW50LCBgICtcbiAgICAgICAgICBgbm90IG1jcF9hcWxfJHtjYWxsZWRFbmRwb2ludC50b0xvd2VyQ2FzZSgpfS4gYCArXG4gICAgICAgICAgYFRoaXMgb3BlcmF0aW9uIGlzIGNsYXNzaWZpZWQgYXMgJHtyb3V0ZS5lbmRwb2ludH0gZHVlIHRvIGl0cyAke3RoaXMuZ2V0UGVybWlzc2lvblJlYXNvbihyb3V0ZS5lbmRwb2ludCl9LmBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuZm9yY2UgYWNjZXNzIGNvbnRyb2wgZm9yIGFuIG9wZXJhdGlvbi5cbiAgICogVGhpcyBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgcG9saWN5IGVuZm9yY2VtZW50LlxuICAgKlxuICAgKiBDaGVja3M6XG4gICAqIDEuIFJvdXRlIHZhbGlkYXRpb24gKG9wZXJhdGlvbiBleGlzdHMgYW5kIG1hdGNoZXMgZW5kcG9pbnQpXG4gICAqIDIuIEVsZW1lbnQgcG9saWNpZXMgKGFjdGl2ZSBlbGVtZW50cycgYWxsb3cvY29uZmlybS9kZW55IGxpc3RzKVxuICAgKiAzLiBTZXNzaW9uIGNvbmZpcm1hdGlvbnMgKGNhY2hlZCBhcHByb3ZhbHMpXG4gICAqIDQuIERlZmF1bHQgb3BlcmF0aW9uIHBvbGljaWVzIChwZXJtaXNzaW9uIGxldmVscylcbiAgICpcbiAgICogQHBhcmFtIGlucHV0IC0gVGhlIGVuZm9yY2VtZW50IGlucHV0IGNvbnRhaW5pbmcgb3BlcmF0aW9uIGNvbnRleHRcbiAgICogQHJldHVybnMgQSBHYXRla2VlcGVyRGVjaXNpb24gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBvcGVyYXRpb24gaXMgYWxsb3dlZFxuICAgKi9cbiAgZW5mb3JjZShpbnB1dDogRW5mb3JjZUlucHV0KTogR2F0ZWtlZXBlckRlY2lzaW9uIHtcbiAgICBjb25zdCB7IG9wZXJhdGlvbiwgZW5kcG9pbnQsIGVsZW1lbnRUeXBlLCBhY3RpdmVFbGVtZW50cyA9IFtdLCBza2lwRWxlbWVudFBvbGljaWVzID0gZmFsc2UgfSA9IGlucHV0O1xuXG4gICAgLy8gTGF5ZXIgMTogUm91dGUgdmFsaWRhdGlvbiAodGhyb3dzIGlmIGludmFsaWQpXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudmFsaWRhdGVSb3V0ZShvcGVyYXRpb24sIGVuZHBvaW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gQ29udmVydCB0aHJvd24gZXJyb3IgdG8gZGVjaXNpb24gZm9yIGNvbnNpc3RlbnQgcmV0dXJuIHR5cGVcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFsbG93ZWQ6IGZhbHNlLFxuICAgICAgICBwZXJtaXNzaW9uTGV2ZWw6IFBlcm1pc3Npb25MZXZlbC5ERU5ZLFxuICAgICAgICBlcnJvckNvZGU6IEdhdGVrZWVwZXJFcnJvckNvZGUuRU5EUE9JTlRfTUlTTUFUQ0gsXG4gICAgICAgIHJlYXNvbjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBMYXllciAyOiBFbGVtZW50IHBvbGljeSByZXNvbHV0aW9uXG4gICAgLy8gSXNzdWUgIzY3OTogYWxsb3dFbGVtZW50UG9saWN5T3ZlcnJpZGVzPWZhbHNlIGJ5cGFzc2VzIHRoaXMgbGF5ZXIgZW50aXJlbHkgKG9wZXJhdG9yIGtpbGwgc3dpdGNoKVxuICAgIC8vIElzc3VlICM3NTg6IHNraXBFbGVtZW50UG9saWNpZXM9dHJ1ZSBieXBhc3NlcyBmb3IgZ2F0ZWtlZXBlciBpbmZyYXN0cnVjdHVyZSBvcGVyYXRpb25zXG4gICAgY29uc3Qgc2hvdWxkUmVzb2x2ZUVsZW1lbnRQb2xpY2llcyA9IHRoaXMuY29uZmlnLmFsbG93RWxlbWVudFBvbGljeU92ZXJyaWRlcyAmJiAhc2tpcEVsZW1lbnRQb2xpY2llcztcbiAgICBjb25zdCBwb2xpY3lTdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcG9saWN5UmVzdWx0ID0gc2hvdWxkUmVzb2x2ZUVsZW1lbnRQb2xpY2llc1xuICAgICAgPyByZXNvbHZlRWxlbWVudFBvbGljeShvcGVyYXRpb24sIGFjdGl2ZUVsZW1lbnRzLCBlbGVtZW50VHlwZSlcbiAgICAgIDogeyBwZXJtaXNzaW9uTGV2ZWw6IGdldERlZmF1bHRQZXJtaXNzaW9uTGV2ZWwob3BlcmF0aW9uKSwgc291cmNlRWxlbWVudDogdW5kZWZpbmVkLCBtYXRjaGVkUG9saWN5OiB1bmRlZmluZWQgYXMgRWxlbWVudFBvbGljeVJlc3VsdFsnbWF0Y2hlZFBvbGljeSddIH07XG4gICAgY29uc3QgcG9saWN5TXMgPSBEYXRlLm5vdygpIC0gcG9saWN5U3RhcnQ7XG4gICAgLy8gT25seSBsb2cgcG9saWN5IHJlc29sdXRpb24gd2hlbiBpdCdzIG5vdCB0aGUgZGVmYXVsdCBBVVRPX0FQUFJPVkUgcGF0aFxuICAgIGlmIChwb2xpY3lSZXN1bHQucGVybWlzc2lvbkxldmVsICE9PSBQZXJtaXNzaW9uTGV2ZWwuQVVUT19BUFBST1ZFIHx8IHBvbGljeU1zID4gNSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdHYXRla2VlcGVyIHBvbGljeSByZXNvbHV0aW9uJywge1xuICAgICAgICBvcGVyYXRpb24sXG4gICAgICAgIGFjdGl2ZUVsZW1lbnRDb3VudDogYWN0aXZlRWxlbWVudHMubGVuZ3RoLFxuICAgICAgICBvdmVycmlkZXNFbmFibGVkOiB0aGlzLmNvbmZpZy5hbGxvd0VsZW1lbnRQb2xpY3lPdmVycmlkZXMsXG4gICAgICAgIHJlc3VsdExldmVsOiBwb2xpY3lSZXN1bHQucGVybWlzc2lvbkxldmVsLFxuICAgICAgICBzb3VyY2VFbGVtZW50OiBwb2xpY3lSZXN1bHQuc291cmNlRWxlbWVudCxcbiAgICAgICAgbWF0Y2hlZFBvbGljeTogcG9saWN5UmVzdWx0Lm1hdGNoZWRQb2xpY3ksXG4gICAgICAgIGR1cmF0aW9uTXM6IHBvbGljeU1zLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gSWYgZWxlbWVudCBwb2xpY3kgZGVuaWVzLCByZXR1cm4gaW1tZWRpYXRlbHlcbiAgICBpZiAocG9saWN5UmVzdWx0LnBlcm1pc3Npb25MZXZlbCA9PT0gUGVybWlzc2lvbkxldmVsLkRFTlkpIHtcbiAgICAgIGNvbnN0IGRlY2lzaW9uID0gY3JlYXRlRGVjaXNpb25Gcm9tUG9saWN5KG9wZXJhdGlvbiwgcG9saWN5UmVzdWx0LCBlbGVtZW50VHlwZSk7XG4gICAgICB0aGlzLmxvZ0F1ZGl0RXZlbnQob3BlcmF0aW9uLCBlbmRwb2ludCwgZGVjaXNpb24sIGVsZW1lbnRUeXBlKTtcbiAgICAgIHJldHVybiBkZWNpc2lvbjtcbiAgICB9XG5cbiAgICAvLyBMYXllciAzOiBDaGVjayBzZXNzaW9uIGNvbmZpcm1hdGlvbnNcbiAgICBjb25zdCBjb25maXJtYXRpb24gPSB0aGlzLnNlc3Npb24uY2hlY2tDb25maXJtYXRpb24ob3BlcmF0aW9uLCBlbGVtZW50VHlwZSk7XG4gICAgaWYgKGNvbmZpcm1hdGlvbikge1xuICAgICAgY29uc3QgZGVjaXNpb246IEdhdGVrZWVwZXJEZWNpc2lvbiA9IHtcbiAgICAgICAgYWxsb3dlZDogdHJ1ZSxcbiAgICAgICAgcGVybWlzc2lvbkxldmVsOiBwb2xpY3lSZXN1bHQucGVybWlzc2lvbkxldmVsLFxuICAgICAgICByZWFzb246IGBPcGVyYXRpb24gXCIke29wZXJhdGlvbn1cIiBhcHByb3ZlZCB2aWEgc2Vzc2lvbiBjb25maXJtYXRpb25gLFxuICAgICAgICBwb2xpY3lTb3VyY2U6ICdzZXNzaW9uX2NvbmZpcm1hdGlvbicsXG4gICAgICB9O1xuICAgICAgdGhpcy5sb2dBdWRpdEV2ZW50KG9wZXJhdGlvbiwgZW5kcG9pbnQsIGRlY2lzaW9uLCBlbGVtZW50VHlwZSk7XG4gICAgICByZXR1cm4gZGVjaXNpb247XG4gICAgfVxuXG4gICAgLy8gTGF5ZXIgNDogQXBwbHkgZGVmYXVsdC9lbGVtZW50IHBvbGljeVxuICAgIGNvbnN0IGRlY2lzaW9uID0gY3JlYXRlRGVjaXNpb25Gcm9tUG9saWN5KG9wZXJhdGlvbiwgcG9saWN5UmVzdWx0LCBlbGVtZW50VHlwZSk7XG4gICAgdGhpcy5sb2dBdWRpdEV2ZW50KG9wZXJhdGlvbiwgZW5kcG9pbnQsIGRlY2lzaW9uLCBlbGVtZW50VHlwZSk7XG4gICAgcmV0dXJuIGRlY2lzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCBhIGNvbmZpcm1hdGlvbiBmb3IgYW4gb3BlcmF0aW9uLlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBhcHByb3ZlcyBhbiBvcGVyYXRpb24gdGhhdCByZXF1aXJlcyBjb25maXJtYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBvcGVyYXRpb24gLSBUaGUgb3BlcmF0aW9uIGJlaW5nIGNvbmZpcm1lZFxuICAgKiBAcGFyYW0gbGV2ZWwgLSBUaGUgcGVybWlzc2lvbiBsZXZlbCAoQ09ORklSTV9TRVNTSU9OIG9yIENPTkZJUk1fU0lOR0xFX1VTRSlcbiAgICogQHBhcmFtIGVsZW1lbnRUeXBlIC0gT3B0aW9uYWwgZWxlbWVudCB0eXBlIHNjb3BlXG4gICAqL1xuICByZWNvcmRDb25maXJtYXRpb24oXG4gICAgb3BlcmF0aW9uOiBzdHJpbmcsXG4gICAgbGV2ZWw6IFBlcm1pc3Npb25MZXZlbC5DT05GSVJNX1NFU1NJT04gfCBQZXJtaXNzaW9uTGV2ZWwuQ09ORklSTV9TSU5HTEVfVVNFLFxuICAgIGVsZW1lbnRUeXBlPzogc3RyaW5nXG4gICk6IHZvaWQge1xuICAgIHRoaXMuc2Vzc2lvbi5yZWNvcmRDb25maXJtYXRpb24ob3BlcmF0aW9uLCBsZXZlbCwgZWxlbWVudFR5cGUpO1xuXG4gICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgdHlwZTogJ0NPTkZJUk1BVElPTl9SRUNPUkRFRCcsXG4gICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICBzb3VyY2U6ICdHYXRla2VlcGVyLnJlY29yZENvbmZpcm1hdGlvbicsXG4gICAgICBkZXRhaWxzOiBgQ29uZmlybWF0aW9uIHJlY29yZGVkIGZvciBvcGVyYXRpb24gXCIke29wZXJhdGlvbn1cImAsXG4gICAgICBhZGRpdGlvbmFsRGF0YToge1xuICAgICAgICBvcGVyYXRpb24sXG4gICAgICAgIHBlcm1pc3Npb25MZXZlbDogbGV2ZWwsXG4gICAgICAgIGVsZW1lbnRUeXBlLFxuICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbi5zZXNzaW9uSWQsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldm9rZSBhIGNvbmZpcm1hdGlvbiBmb3IgYW4gb3BlcmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gb3BlcmF0aW9uIC0gVGhlIG9wZXJhdGlvbiB0byByZXZva2VcbiAgICogQHBhcmFtIGVsZW1lbnRUeXBlIC0gT3B0aW9uYWwgZWxlbWVudCB0eXBlIHNjb3BlXG4gICAqIEByZXR1cm5zIHRydWUgaWYgYSBjb25maXJtYXRpb24gd2FzIHJldm9rZWRcbiAgICovXG4gIHJldm9rZUNvbmZpcm1hdGlvbihvcGVyYXRpb246IHN0cmluZywgZWxlbWVudFR5cGU/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uLnJldm9rZUNvbmZpcm1hdGlvbihvcGVyYXRpb24sIGVsZW1lbnRUeXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZva2UgYWxsIGNvbmZpcm1hdGlvbnMgZm9yIHRoaXMgc2Vzc2lvbi5cbiAgICogVXNlZnVsIHdoZW4gc2VjdXJpdHktc2Vuc2l0aXZlIGNoYW5nZXMgb2NjdXIuXG4gICAqL1xuICByZXZva2VBbGxDb25maXJtYXRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMuc2Vzc2lvbi5yZXZva2VBbGxDb25maXJtYXRpb25zKCk7XG4gIH1cblxuICAvLyDilIDilIAgQ0xJIEFwcHJvdmFsIERlbGVnYXRpb24gKElzc3VlICM2MjUgUGhhc2UgMykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIENMSSBhcHByb3ZhbCByZXF1ZXN0LlxuICAgKiBEZWxlZ2F0ZXMgdG8gc2Vzc2lvbiBhbmQgbG9ncyB0aGUgZXZlbnQuXG4gICAqL1xuICBjcmVhdGVDbGlBcHByb3ZhbFJlcXVlc3QoXG4gICAgdG9vbE5hbWU6IHN0cmluZyxcbiAgICB0b29sSW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHJpc2tMZXZlbDogc3RyaW5nLFxuICAgIHJpc2tTY29yZTogbnVtYmVyLFxuICAgIGlycmV2ZXJzaWJsZTogYm9vbGVhbixcbiAgICBkZW55UmVhc29uOiBzdHJpbmcsXG4gICAgcG9saWN5U291cmNlPzogc3RyaW5nLFxuICAgIHR0bE1zPzogbnVtYmVyLFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IHJlcXVlc3RJZCA9IHRoaXMuc2Vzc2lvbi5jcmVhdGVDbGlBcHByb3ZhbFJlcXVlc3QoXG4gICAgICB0b29sTmFtZSwgdG9vbElucHV0LCByaXNrTGV2ZWwsIHJpc2tTY29yZSwgaXJyZXZlcnNpYmxlLCBkZW55UmVhc29uLCBwb2xpY3lTb3VyY2UsIHR0bE1zXG4gICAgKTtcblxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdDTElfQVBQUk9WQUxfUkVRVUVTVEVEJyxcbiAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgIHNvdXJjZTogJ0dhdGVrZWVwZXIuY3JlYXRlQ2xpQXBwcm92YWxSZXF1ZXN0JyxcbiAgICAgIGRldGFpbHM6IGBDTEkgYXBwcm92YWwgcmVxdWVzdGVkIGZvciAke3Rvb2xOYW1lfTogJHtkZW55UmVhc29ufWAsXG4gICAgICBhZGRpdGlvbmFsRGF0YTogeyByZXF1ZXN0SWQsIHRvb2xOYW1lLCByaXNrTGV2ZWwsIHJpc2tTY29yZSwgaXJyZXZlcnNpYmxlLCBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbi5zZXNzaW9uSWQgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiByZXF1ZXN0SWQ7XG4gIH1cblxuICAvKipcbiAgICogQXBwcm92ZSBhIHBlbmRpbmcgQ0xJIGFwcHJvdmFsIHJlcXVlc3QuXG4gICAqL1xuICBhcHByb3ZlQ2xpUmVxdWVzdChyZXF1ZXN0SWQ6IHN0cmluZywgc2NvcGU6IENsaUFwcHJvdmFsU2NvcGUgPSAnc2luZ2xlJyk6IENsaUFwcHJvdmFsUmVjb3JkIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZWNvcmQgPSB0aGlzLnNlc3Npb24uYXBwcm92ZUNsaVJlcXVlc3QocmVxdWVzdElkLCBzY29wZSk7XG5cbiAgICBpZiAocmVjb3JkKSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdDTElfQVBQUk9WQUxfR1JBTlRFRCcsXG4gICAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgICAgc291cmNlOiAnR2F0ZWtlZXBlci5hcHByb3ZlQ2xpUmVxdWVzdCcsXG4gICAgICAgIGRldGFpbHM6IGBDTEkgYXBwcm92YWwgZ3JhbnRlZCBmb3IgJHtyZWNvcmQudG9vbE5hbWV9IChzY29wZTogJHtzY29wZX0pYCxcbiAgICAgICAgYWRkaXRpb25hbERhdGE6IHsgcmVxdWVzdElkLCB0b29sTmFtZTogcmVjb3JkLnRvb2xOYW1lLCBzY29wZSwgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb24uc2Vzc2lvbklkIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVjb3JkO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgQ0xJIHRvb2wgY2FsbCBoYXMgYSB2YWxpZCBhcHByb3ZhbC5cbiAgICovXG4gIGNoZWNrQ2xpQXBwcm92YWwodG9vbE5hbWU6IHN0cmluZywgdG9vbElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IENsaUFwcHJvdmFsUmVjb3JkIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZWNvcmQgPSB0aGlzLnNlc3Npb24uY2hlY2tDbGlBcHByb3ZhbCh0b29sTmFtZSwgdG9vbElucHV0KTtcblxuICAgIGlmIChyZWNvcmQpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ0NMSV9BUFBST1ZBTF9DT05TVU1FRCcsXG4gICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgc291cmNlOiAnR2F0ZWtlZXBlci5jaGVja0NsaUFwcHJvdmFsJyxcbiAgICAgICAgZGV0YWlsczogYENMSSBhcHByb3ZhbCBjb25zdW1lZCBmb3IgJHt0b29sTmFtZX0gKHNjb3BlOiAke3JlY29yZC5zY29wZX0pYCxcbiAgICAgICAgYWRkaXRpb25hbERhdGE6IHsgcmVxdWVzdElkOiByZWNvcmQucmVxdWVzdElkLCB0b29sTmFtZSwgc2NvcGU6IHJlY29yZC5zY29wZSwgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb24uc2Vzc2lvbklkIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVjb3JkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgcGVuZGluZyBDTEkgYXBwcm92YWwgcmVxdWVzdHMuXG4gICAqL1xuICBnZXRQZW5kaW5nQ2xpQXBwcm92YWxzKCk6IENsaUFwcHJvdmFsUmVjb3JkW10ge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb24uZ2V0UGVuZGluZ0NsaUFwcHJvdmFscygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHBlcm1pc3Npb24gZmxhZ3MgZm9yIGFuIGVuZHBvaW50LlxuICAgKlxuICAgKiBAcGFyYW0gZW5kcG9pbnQgLSBUaGUgQ1JVRCBlbmRwb2ludCB0byBnZXQgcGVybWlzc2lvbnMgZm9yXG4gICAqIEByZXR1cm5zIFRoZSBwZXJtaXNzaW9uIGZsYWdzIGZvciB0aGUgZW5kcG9pbnRcbiAgICovXG4gIHN0YXRpYyBnZXRQZXJtaXNzaW9ucyhlbmRwb2ludDogQ1JVREVuZHBvaW50KTogRW5kcG9pbnRQZXJtaXNzaW9ucyB7XG4gICAgcmV0dXJuIEdhdGVrZWVwZXIuRU5EUE9JTlRfUEVSTUlTU0lPTlNbZW5kcG9pbnRdO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXRpYyB2YWxpZGF0aW9uIG1ldGhvZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIFBlcm1pc3Npb25HdWFyZC5cbiAgICogVmFsaWRhdGVzIHRoYXQgYW4gb3BlcmF0aW9uIGlzIGJlaW5nIGNhbGxlZCB2aWEgdGhlIGNvcnJlY3QgZW5kcG9pbnQuXG4gICAqXG4gICAqIEBwYXJhbSBvcGVyYXRpb24gLSBUaGUgb3BlcmF0aW9uIGJlaW5nIGNhbGxlZFxuICAgKiBAcGFyYW0gY2FsbGVkRW5kcG9pbnQgLSBUaGUgZW5kcG9pbnQgaXQgd2FzIGNhbGxlZCB0aHJvdWdoXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgb3BlcmF0aW9uIHVua25vd24gb3IgZW5kcG9pbnQgbWlzbWF0Y2hcbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGluc3RhbmNlIG1ldGhvZCB2YWxpZGF0ZVJvdXRlKCkgb3IgZW5mb3JjZSgpIGluc3RlYWRcbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZShvcGVyYXRpb246IHN0cmluZywgY2FsbGVkRW5kcG9pbnQ6IENSVURFbmRwb2ludCk6IHZvaWQge1xuICAgIGNvbnN0IHJvdXRlID0gZ2V0Um91dGUob3BlcmF0aW9uKTtcblxuICAgIGlmICghcm91dGUpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1VQREFURV9TRUNVUklUWV9WSU9MQVRJT04nLFxuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ0dhdGVrZWVwZXIudmFsaWRhdGUnLFxuICAgICAgICBkZXRhaWxzOiBgVW5rbm93biBvcGVyYXRpb246IFwiJHtvcGVyYXRpb259XCJgLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YTogeyBvcGVyYXRpb24sIGNhbGxlZEVuZHBvaW50IH0sXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFVua25vd24gb3BlcmF0aW9uOiBcIiR7b3BlcmF0aW9ufVwiLiBTZWUgdG9vbCBkZXNjcmlwdGlvbnMgZm9yIGF2YWlsYWJsZSBvcGVyYXRpb25zIG9uIGVhY2ggZW5kcG9pbnQuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocm91dGUuZW5kcG9pbnQgIT09IGNhbGxlZEVuZHBvaW50KSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdVUERBVEVfU0VDVVJJVFlfVklPTEFUSU9OJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdISUdIJyxcbiAgICAgICAgc291cmNlOiAnR2F0ZWtlZXBlci52YWxpZGF0ZScsXG4gICAgICAgIGRldGFpbHM6IGBTZWN1cml0eSB2aW9sYXRpb246IE9wZXJhdGlvbiBcIiR7b3BlcmF0aW9ufVwiIGNhbGxlZCB2aWEgd3JvbmcgZW5kcG9pbnRgLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YToge1xuICAgICAgICAgIG9wZXJhdGlvbixcbiAgICAgICAgICBleHBlY3RlZEVuZHBvaW50OiByb3V0ZS5lbmRwb2ludCxcbiAgICAgICAgICBhY3R1YWxFbmRwb2ludDogY2FsbGVkRW5kcG9pbnQsXG4gICAgICAgICAgcGVybWlzc2lvblJlYXNvbjogR2F0ZWtlZXBlci5nZXRQZXJtaXNzaW9uUmVhc29uU3RhdGljKHJvdXRlLmVuZHBvaW50KSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgU2VjdXJpdHkgdmlvbGF0aW9uOiBPcGVyYXRpb24gXCIke29wZXJhdGlvbn1cIiBtdXN0IGJlIGNhbGxlZCB2aWEgbWNwX2FxbF8ke3JvdXRlLmVuZHBvaW50LnRvTG93ZXJDYXNlKCl9IGVuZHBvaW50LCBgICtcbiAgICAgICAgICBgbm90IG1jcF9hcWxfJHtjYWxsZWRFbmRwb2ludC50b0xvd2VyQ2FzZSgpfS4gYCArXG4gICAgICAgICAgYFRoaXMgb3BlcmF0aW9uIGlzIGNsYXNzaWZpZWQgYXMgJHtyb3V0ZS5lbmRwb2ludH0gZHVlIHRvIGl0cyAke0dhdGVrZWVwZXIuZ2V0UGVybWlzc2lvblJlYXNvblN0YXRpYyhyb3V0ZS5lbmRwb2ludCl9LmBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVmYXVsdCBwZXJtaXNzaW9uIGxldmVsIGZvciBhbiBvcGVyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBvcGVyYXRpb24gLSBUaGUgb3BlcmF0aW9uIG5hbWVcbiAgICogQHJldHVybnMgVGhlIGRlZmF1bHQgcGVybWlzc2lvbiBsZXZlbFxuICAgKi9cbiAgZ2V0RGVmYXVsdFBlcm1pc3Npb25MZXZlbChvcGVyYXRpb246IHN0cmluZyk6IFBlcm1pc3Npb25MZXZlbCB7XG4gICAgcmV0dXJuIGdldERlZmF1bHRQZXJtaXNzaW9uTGV2ZWwob3BlcmF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgcmVhc29uIGZvciB0aGUgcGVybWlzc2lvbiBjbGFzc2lmaWNhdGlvbi5cbiAgICovXG4gIHByaXZhdGUgZ2V0UGVybWlzc2lvblJlYXNvbihlbmRwb2ludDogQ1JVREVuZHBvaW50KTogc3RyaW5nIHtcbiAgICByZXR1cm4gR2F0ZWtlZXBlci5nZXRQZXJtaXNzaW9uUmVhc29uU3RhdGljKGVuZHBvaW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGF0aWMgdmVyc2lvbiBvZiBnZXRQZXJtaXNzaW9uUmVhc29uIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0UGVybWlzc2lvblJlYXNvblN0YXRpYyhlbmRwb2ludDogQ1JVREVuZHBvaW50KTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKGVuZHBvaW50KSB7XG4gICAgICBjYXNlICdDUkVBVEUnOlxuICAgICAgICByZXR1cm4gJ2FkZGl0aXZlLCBub24tZGVzdHJ1Y3RpdmUgbmF0dXJlJztcbiAgICAgIGNhc2UgJ1JFQUQnOlxuICAgICAgICByZXR1cm4gJ3JlYWQtb25seSwgc2FmZSBuYXR1cmUnO1xuICAgICAgY2FzZSAnVVBEQVRFJzpcbiAgICAgICAgcmV0dXJuICdkYXRhIG1vZGlmaWNhdGlvbiBjYXBhYmlsaXRpZXMnO1xuICAgICAgY2FzZSAnREVMRVRFJzpcbiAgICAgICAgcmV0dXJuICdkZXN0cnVjdGl2ZSBwb3RlbnRpYWwnO1xuICAgICAgY2FzZSAnRVhFQ1VURSc6XG4gICAgICAgIHJldHVybiAncnVudGltZSBleGVjdXRpb24gbGlmZWN5Y2xlIChzdGF0ZWZ1bCwgbm9uLWlkZW1wb3RlbnQpJztcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgLy8gRXhoYXVzdGl2ZSBjaGVjayAtIFR5cGVTY3JpcHQgd2lsbCBlcnJvciBpZiBhIGNhc2UgaXMgbWlzc2luZ1xuICAgICAgICBjb25zdCBfZXhoYXVzdGl2ZTogbmV2ZXIgPSBlbmRwb2ludDtcbiAgICAgICAgcmV0dXJuIF9leGhhdXN0aXZlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2cgYW4gYXVkaXQgZXZlbnQgZm9yIGEgR2F0ZWtlZXBlciBkZWNpc2lvbi5cbiAgICovXG4gIHByaXZhdGUgbG9nQXVkaXRFdmVudChcbiAgICBvcGVyYXRpb246IHN0cmluZyxcbiAgICBlbmRwb2ludDogQ1JVREVuZHBvaW50LFxuICAgIGRlY2lzaW9uOiBHYXRla2VlcGVyRGVjaXNpb24sXG4gICAgZWxlbWVudFR5cGU/OiBzdHJpbmdcbiAgKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5lbmFibGVBdWRpdExvZ2dpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhdWRpdEVudHJ5OiBHYXRla2VlcGVyQXVkaXRFbnRyeSA9IHtcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb24uc2Vzc2lvbklkLFxuICAgICAgb3BlcmF0aW9uLFxuICAgICAgZW5kcG9pbnQsXG4gICAgICBlbGVtZW50VHlwZSxcbiAgICAgIGRlY2lzaW9uLFxuICAgICAgY2xpZW50SW5mbzogdGhpcy5zZXNzaW9uLmNsaWVudEluZm8sXG4gICAgfTtcblxuICAgIC8vIE9ubHkgbG9nIHNlY3VyaXR5IGV2ZW50cyBmb3IgZGVuaWVkIGRlY2lzaW9ucyDigJQgYWxsb3dlZCBvcHMgYXJlIG5vcm1hbCB0cmFmZmljXG4gICAgaWYgKCFkZWNpc2lvbi5hbGxvd2VkKSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdVUERBVEVfU0VDVVJJVFlfVklPTEFUSU9OJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICBzb3VyY2U6ICdHYXRla2VlcGVyLmVuZm9yY2UnLFxuICAgICAgICBkZXRhaWxzOiBgR2F0ZWtlZXBlciBkZWNpc2lvbjogREVOSUVEIC0gJHtkZWNpc2lvbi5yZWFzb259YCxcbiAgICAgICAgYWRkaXRpb25hbERhdGE6IGF1ZGl0RW50cnksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuLy8gUmUtZXhwb3J0IHR5cGVzIGFuZCB1dGlsaXRpZXMgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgeyBQZXJtaXNzaW9uTGV2ZWwsIEdhdGVrZWVwZXJFcnJvckNvZGUgfSBmcm9tICcuL0dhdGVrZWVwZXJUeXBlcy5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEdhdGVrZWVwZXJEZWNpc2lvbixcbiAgRW5kcG9pbnRQZXJtaXNzaW9ucyxcbiAgRWxlbWVudEdhdGVrZWVwZXJQb2xpY3ksXG4gIENvbmZpcm1hdGlvblJlY29yZCxcbiAgQ2xpQXBwcm92YWxSZWNvcmQsXG4gIENsaUFwcHJvdmFsU2NvcGUsXG4gIENsaUFwcHJvdmFsUG9saWN5LFxuICBSaXNrQXNzZXNzbWVudCxcbn0gZnJvbSAnLi9HYXRla2VlcGVyVHlwZXMuanMnO1xuZXhwb3J0IHR5cGUgeyBDbGllbnRJbmZvIH0gZnJvbSAnLi9HYXRla2VlcGVyU2Vzc2lvbi5qcyc7XG4iXX0=
@@ -39,6 +39,9 @@ import type { PersonaHandler } from '../PersonaHandler.js';
39
39
  import type { SyncHandler } from '../SyncHandlerV2.js';
40
40
  import type { BuildInfoService } from '../../services/BuildInfoService.js';
41
41
  import type { MemoryLogSink } from '../../logging/sinks/MemoryLogSink.js';
42
+ import type { PerformanceMonitor } from '../../utils/PerformanceMonitor.js';
43
+ import type { OperationMetricsTracker } from '../../metrics/OperationMetricsTracker.js';
44
+ import type { GatekeeperMetricsTracker } from '../../metrics/GatekeeperMetricsTracker.js';
42
45
  import type { AutonomyMetricsSnapshot } from '../../elements/agents/autonomyEvaluator.js';
43
46
  /**
44
47
  * Verification metrics tracker following DangerZoneEnforcer.getMetrics() pattern.
@@ -86,6 +89,10 @@ export interface HandlerRegistry {
86
89
  verificationStore?: VerificationStore;
87
90
  verificationNotifier?: IVerificationNotifier;
88
91
  memorySink?: MemoryLogSink;
92
+ metricsSink?: import('../../metrics/sinks/MemoryMetricsSink.js').MemoryMetricsSink;
93
+ performanceMonitor?: PerformanceMonitor;
94
+ operationMetricsTracker?: OperationMetricsTracker;
95
+ gatekeeperMetricsTracker?: GatekeeperMetricsTracker;
89
96
  }
90
97
  /**
91
98
  * MCPAQLHandler - Unified entry point for all MCP-AQL operations
@@ -462,6 +469,13 @@ export declare class MCPAQLHandler {
462
469
  * policy enforcement, and structured response format.
463
470
  */
464
471
  private dispatchLogging;
472
+ /**
473
+ * Dispatch Metrics operations.
474
+ *
475
+ * Routes query_metrics through the unified CRUDE pipeline, providing
476
+ * operation routing, gatekeeper policy enforcement, and structured response format.
477
+ */
478
+ private dispatchMetrics;
465
479
  /**
466
480
  * Dispatch Browser operations (Issue #774: open portfolio browser)
467
481
  */
@@ -1 +1 @@
1
- {"version":3,"file":"MCPAQLHandler.d.ts","sourceRoot":"","sources":["../../../src/handlers/mcp-aql/MCPAQLHandler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MCPAQLHandler.d.ts","sourceRoot":"","sources":["../../../src/handlers/mcp-aql/MCPAQLHandler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAU7C,OAAO,EAEL,eAAe,EAOf,WAAW,EAIZ,MAAM,YAAY,CAAC;AAapB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAGpF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAI1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAGvF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAG1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACxF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AAI1F,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AA6P1F;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,aAAa,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,kBAAkB,EAAE,MAAM,CAAC;IAC3B,4BAA4B;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,qEAAqE;IACrE,qBAAqB,EAAE,MAAM,CAAC;IAC9B,4CAA4C;IAC5C,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAuDD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,kBAAkB,CAAC;IAChC,aAAa,EAAE,aAAa,CAAC;IAC7B,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,mBAAmB,EAAE,mBAAmB,CAAC;IAEzC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,iBAAiB,CAAC,EAAE,OAAO,kCAAkC,EAAE,iBAAiB,CAAC;IACjF,UAAU,EAAE,UAAU,CAAC;IAEvB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IAExC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAEtC,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;IAE7C,UAAU,CAAC,EAAE,aAAa,CAAC;IAE3B,WAAW,CAAC,EAAE,OAAO,0CAA0C,EAAE,iBAAiB,CAAC;IAEnF,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IAExC,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAElD,wBAAwB,CAAC,EAAE,wBAAwB,CAAC;CACrD;AAcD;;;;;;;;;;;;;;GAcG;AACH;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAAC;CACxC;AAED,qBAAa,aAAa;IAsHtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;IAtHlC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAIxB;IACL,iFAAiF;IACjF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgC;IAChE;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAmF;IACzH,gGAAgG;IAChG,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAEtC;IACF,+FAA+F;IAC/F,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAEjC;IACF;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA2B1B,8FAA8F;IAC9F,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAiC;IACzE,8DAA8D;IAC9D,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAoC;IACxE;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CA0B3B;IAEL;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;gBAG/B,QAAQ,EAAE,eAAe,EACzB,cAAc,CAAC,EAAE,qBAAqB,YAAA;IAWzD;;;OAGG;IACH,sBAAsB,IAAI,mBAAmB;IAI7C;;;OAGG;IACH,kBAAkB,IAAI,uBAAuB;IAI7C;;;;;;;;;;;;;OAaG;YACW,iBAAiB;IAkC/B;;;;;;;;;;;;OAYG;IACG,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,GAAG,WAAW,CAAC;IAO1E;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,GAAG,WAAW,CAAC;IAOxE;;;;;;;;;;OAUG;IACG,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,GAAG,WAAW,CAAC;IAO1E;;;;;;;;;;;;OAYG;IACG,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,GAAG,WAAW,CAAC;IAO1E;;;;;;;;;;;;;;;;;;;OAmBG;IACG,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,GAAG,WAAW,CAAC;IAO3E;;;;;;;;;;;;;;OAcG;YACW,gBAAgB;IA4M9B;;;;;;;;;;;;;OAaG;YACW,YAAY;IA4E1B;;;;;;;;;;;;;;;;;;;;;;OAsBG;YACW,QAAQ;IAsHtB;;OAEG;YACW,mBAAmB;IAiGjC;;;;;;;OAOG;YACW,mBAAmB;IAoFjC;;;;;;;OAOG;YACW,mBAAmB;IAwCjC;;;;;;OAMG;IAEH;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IA4B3B;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB;IA0D1B;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;YAkB1B,cAAc;IA+D5B;;OAEG;YACW,aAAa;IAyB3B;;OAEG;YACW,gBAAgB;IA2B9B;;OAEG;YACW,kBAAkB;IAgDhC;;OAEG;YACW,cAAc;IA0F5B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAa7B;;;;;;;;;;OAUG;YACW,oBAAoB;IAyHlC;;OAEG;YACW,kBAAkB;IAuChC;;OAEG;YACW,iBAAiB;IA8E/B;;OAEG;YACW,YAAY;IA8B1B;;OAEG;YACW,cAAc;IAyE5B;;OAEG;YACW,qBAAqB;IAuCnC;;OAEG;YACW,eAAe;IAyB7B;;;;;;;;;;;OAWG;YACW,kBAAkB;IAuqBhC;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAmBvB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAsBvB;;OAEG;IACH;;;;;;;;;;OAUG;YACW,eAAe;IAwB7B;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAQ/B;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB;IAgE7B;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,kBAAkB;IAgC1B;;;;;;;;;;;;;;OAcG;YACW,eAAe;IA0a7B,0EAA0E;IAC1E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAM;IAE/C;;;;;;;OAOG;IACH,OAAO,CAAC,8BAA8B;IAgCtC;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,oBAAoB;IAqE5B;;;;;;;;;OASG;IACH,OAAO,CAAC,kBAAkB;IA0I1B;;;;OAIG;YACW,gBAAgB;IAiB9B;;;;OAIG;IACH,gBAAgB,IAAI,MAAM,GAAG,SAAS;IAQtC;;;OAGG;IACH,OAAO,CAAC,SAAS;IAQjB;;OAEG;IACH,OAAO,CAAC,OAAO;IAQf;;OAEG;IACH,OAAO,CAAC,OAAO;IAYf;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,mBAAmB;IA+D3B;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAwBnC;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IA4BhC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAazB;;;OAGG;IACH,OAAO,CAAC,aAAa;CAQtB"}