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

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 (238) hide show
  1. package/CHANGELOG.md +52 -61
  2. package/README.github.md +2 -2
  3. package/README.md +2 -2
  4. package/README.md.backup +284 -224
  5. package/README.npm.md +2 -2
  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/constants/version.d.ts +0 -3
  230. package/dist/constants/version.d.ts.map +0 -1
  231. package/dist/constants/version.js +0 -4
  232. package/dist/logging/sinks/SSELogSink.d.ts +0 -35
  233. package/dist/logging/sinks/SSELogSink.d.ts.map +0 -1
  234. package/dist/logging/sinks/SSELogSink.js +0 -181
  235. package/dist/logging/viewer/viewerHtml.d.ts +0 -8
  236. package/dist/logging/viewer/viewerHtml.d.ts.map +0 -1
  237. package/dist/logging/viewer/viewerHtml.js +0 -204
  238. package/dist/web/public/public/app.js +0 -1878
@@ -1 +1 @@
1
- {"version":3,"file":"BaseElement.d.ts","sourceRoot":"","sources":["../../src/elements/BaseElement.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,SAAS,EACT,uBAAuB,EAGvB,eAAe,EAEhB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAOpD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAiBxD;AAED,8BAAsB,WAAY,YAAW,QAAQ;IAE5C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAGhB,QAAQ,EAAE,gBAAgB,CAAC;IAOlC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAM;IACrC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAM;IAEhC,IAAW,YAAY,IAAI,MAAM,CAA+B;IAChE,IAAW,YAAY,CAAC,KAAK,EAAE,MAAM,EAAiC;IAEtE,IAAW,OAAO,IAAI,MAAM,CAA0B;IACtD,IAAW,OAAO,CAAC,KAAK,EAAE,MAAM,EAA4B;IAGrD,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,cAAc,CAAC;IAGhC,SAAS,CAAC,OAAO,EAAE,aAAa,CAA0B;IAC1D,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAS;IAGpC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAO;gBAG1C,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,OAAO,CAAC,gBAAgB,CAAC,YAAK,EACxC,eAAe,EAAE,eAAe;IAkDlC;;;OAGG;IACH,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAW1C;;;OAGG;IACI,QAAQ,IAAI,uBAAuB;IAmG1C;;;OAGG;IACI,eAAe,IAAI,MAAM;IAchC;;;;;OAKG;IACI,SAAS,IAAI,MAAM;IAkE1B;;;OAGG;IACH,SAAS,CAAC,UAAU,CAAC,IAAI,MAAM;IAE/B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAyBvB;;;OAGG;IACI,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IA0CtC;;OAEG;IACI,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI;IA6DzE;;;OAGG;IACH,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS;IAcjF;;;OAGG;IACH,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAyB3D;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IA+BnD;;OAEG;IACI,SAAS,IAAI,aAAa;IAIjC;;OAEG;IACH,IAAW,MAAM,IAAI,aAAa,CAEjC;IAED;;OAEG;IACU,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAKzB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAOxC;;OAEG;IACH,SAAS,CAAC,SAAS,IAAI,IAAI;IAK3B;;OAEG;IACI,OAAO,IAAI,OAAO;IAIzB;;OAEG;IACI,SAAS,IAAI,IAAI;CAGzB"}
1
+ {"version":3,"file":"BaseElement.d.ts","sourceRoot":"","sources":["../../src/elements/BaseElement.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,SAAS,EACT,uBAAuB,EAGvB,eAAe,EAEhB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAOpD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAiBxD;AAED,8BAAsB,WAAY,YAAW,QAAQ;IAE5C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAGhB,QAAQ,EAAE,gBAAgB,CAAC;IAOlC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAM;IACrC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAM;IAEhC,IAAW,YAAY,IAAI,MAAM,CAA+B;IAChE,IAAW,YAAY,CAAC,KAAK,EAAE,MAAM,EAAiC;IAEtE,IAAW,OAAO,IAAI,MAAM,CAA0B;IACtD,IAAW,OAAO,CAAC,KAAK,EAAE,MAAM,EAA4B;IAGrD,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,cAAc,CAAC;IAGhC,SAAS,CAAC,OAAO,EAAE,aAAa,CAA0B;IAC1D,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAS;IAGpC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAO;gBAG1C,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,OAAO,CAAC,gBAAgB,CAAC,YAAK,EACxC,eAAe,EAAE,eAAe;IAkDlC;;;OAGG;IACH,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAW1C;;;OAGG;IACI,QAAQ,IAAI,uBAAuB;IA0F1C;;;OAGG;IACI,eAAe,IAAI,MAAM;IAchC;;;;;OAKG;IACI,SAAS,IAAI,MAAM;IAkE1B;;;OAGG;IACH,SAAS,CAAC,UAAU,CAAC,IAAI,MAAM;IAE/B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAyBvB;;;OAGG;IACI,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IA0CtC;;OAEG;IACI,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI;IA6DzE;;;OAGG;IACH,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS;IAcjF;;;OAGG;IACH,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAyB3D;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IA+BnD;;OAEG;IACI,SAAS,IAAI,aAAa;IAIjC;;OAEG;IACH,IAAW,MAAM,IAAI,aAAa,CAEjC;IAED;;OAEG;IACU,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAQzB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAOxC;;OAEG;IACH,SAAS,CAAC,SAAS,IAAI,IAAI;IAK3B;;OAEG;IACI,OAAO,IAAI,OAAO;IAIzB;;OAEG;IACI,SAAS,IAAI,IAAI;CAGzB"}
@@ -124,14 +124,6 @@ export class BaseElement {
124
124
  * Subclasses should override and call super.validate() first.
125
125
  */
126
126
  validate() {
127
- // Log security-relevant validation event
128
- SecurityMonitor.logSecurityEvent({
129
- type: 'YAML_PARSE_SUCCESS',
130
- severity: 'LOW',
131
- source: 'BaseElement.validate',
132
- details: `Element validation performed for ${this.type}:${this.id}`,
133
- additionalData: { elementType: this.type, elementId: this.id }
134
- });
135
127
  const errors = [];
136
128
  const warnings = [];
137
129
  const suggestions = [];
@@ -516,7 +508,10 @@ export class BaseElement {
516
508
  this._status = ElementStatus.ACTIVATING;
517
509
  }
518
510
  async activate() {
519
- logger.info(`Activating ${this.type} element: ${this.metadata.name}`);
511
+ if (this._status !== ElementStatus.ACTIVE) {
512
+ logger.info(`Activating ${this.type} element: ${this.metadata.name}`);
513
+ }
514
+ // Re-activations of the same element are silent — no value in logging
520
515
  this._status = ElementStatus.ACTIVE;
521
516
  }
522
517
  async afterActivate() {
@@ -548,4 +543,4 @@ export class BaseElement {
548
543
  this._isDirty = false;
549
544
  }
550
545
  }
551
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZUVsZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZWxlbWVudHMvQmFzZUVsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUdMLGFBQWEsRUFRZCxNQUFNLDRCQUE0QixDQUFDO0FBRXBDLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHbkU7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxPQUFlO0lBQzlDLHlEQUF5RDtJQUN6RCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7SUFFeEUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsNkNBQTZDO1FBQzdDLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFBRSxLQUFLLEdBQUcsR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7SUFFL0QsZ0RBQWdEO0lBQ2hELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzlELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FB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LFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTO1FBQ2QsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCYXNlIGFic3RyYWN0IGNsYXNzIGltcGxlbWVudGluZyBJRWxlbWVudCBpbnRlcmZhY2UuXG4gKiBQcm92aWRlcyBjb21tb24gZnVuY3Rpb25hbGl0eSB0aGF0IGFsbCBlbGVtZW50IHR5cGVzIGNhbiBleHRlbmQuXG4gKi9cblxuaW1wb3J0IHtcbiAgSUVsZW1lbnQsXG4gIElFbGVtZW50TWV0YWRhdGEsXG4gIEVsZW1lbnRTdGF0dXMsXG4gIEVsZW1lbnRSYXRpbmdzLFxuICBSZWZlcmVuY2UsXG4gIEVsZW1lbnRWYWxpZGF0aW9uUmVzdWx0LFxuICBWYWxpZGF0aW9uRXJyb3IsXG4gIFZhbGlkYXRpb25XYXJuaW5nLFxuICBGZWVkYmFja0NvbnRleHQsXG4gIFVzZXJGZWVkYmFja1xufSBmcm9tICcuLi90eXBlcy9lbGVtZW50cy9pbmRleC5qcyc7XG5pbXBvcnQgeyBFbGVtZW50VHlwZSB9IGZyb20gJy4uL3BvcnRmb2xpby90eXBlcy5qcyc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSAnanMteWFtbCc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHsgU2VjdXJlWWFtbFBhcnNlciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyZVlhbWxQYXJzZXIuanMnO1xuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvTWV0YWRhdGFTZXJ2aWNlLmpzJztcblxuLyoqXG4gKiBOb3JtYWxpemVzIHZlcnNpb24gc3RyaW5ncyB0byBmdWxsIHNlbXZlciBmb3JtYXQgKFguWS5aKVxuICogVGhpcyBoZWxwcyBtYWludGFpbiBjb25zaXN0ZW5jeSB3aGlsZSBhY2NlcHRpbmcgZmxleGlibGUgaW5wdXQgZm9ybWF0c1xuICogXG4gKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSB2ZXJzaW9uIHN0cmluZyB0byBub3JtYWxpemVcbiAqIEByZXR1cm5zIE5vcm1hbGl6ZWQgdmVyc2lvbiBzdHJpbmcgaW4gWC5ZLlogZm9ybWF0IHdpdGggbGVhZGluZyB6ZXJvcyByZW1vdmVkXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBub3JtYWxpemVWZXJzaW9uKFwiMVwiKSAgICAgICAgLy8gXCIxLjAuMFwiXG4gKiBub3JtYWxpemVWZXJzaW9uKFwiMS4yXCIpICAgICAgLy8gXCIxLjIuMFwiXG4gKiBub3JtYWxpemVWZXJzaW9uKFwiMS4yLjNcIikgICAgLy8gXCIxLjIuM1wiXG4gKiBub3JtYWxpemVWZXJzaW9uKFwiMS4wLWJldGFcIikgLy8gXCIxLjAuMC1iZXRhXCJcbiAqIG5vcm1hbGl6ZVZlcnNpb24oXCIwMS4wMi4wM1wiKSAvLyBcIjEuMi4zXCIgKHN0cmlwcyBsZWFkaW5nIHplcm9zKVxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplVmVyc2lvbih2ZXJzaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBFeHRyYWN0IGJhc2UgdmVyc2lvbiBhbmQgYW55IHByZXJlbGVhc2UvYnVpbGQgbWV0YWRhdGFcbiAgY29uc3QgbWF0Y2ggPSB2ZXJzaW9uLm1hdGNoKC9eKFxcZCspKD86XFwuKFxcZCspKT8oPzpcXC4oXFxkKykpPyhbLStdLispPyQvKTtcbiAgXG4gIGlmICghbWF0Y2gpIHtcbiAgICAvLyBSZXR1cm4gYXMtaXMgaWYgbm90IGEgdmFsaWQgdmVyc2lvbiBmb3JtYXRcbiAgICByZXR1cm4gdmVyc2lvbjtcbiAgfVxuICBcbiAgY29uc3QgWywgbWFqb3IsIG1pbm9yID0gJzAnLCBwYXRjaCA9ICcwJywgc3VmZml4ID0gJyddID0gbWF0Y2g7XG4gIFxuICAvLyBTdHJpcCBsZWFkaW5nIHplcm9zIGJ1dCBwcmVzZXJ2ZSBcIjBcIiBhcyB2YWxpZFxuICBjb25zdCBub3JtYWxpemVkTWFqb3IgPSBOdW1iZXIucGFyc2VJbnQobWFqb3IsIDEwKS50b1N0cmluZygpO1xuICBjb25zdCBub3JtYWxpemVkTWlub3IgPSBOdW1iZXIucGFyc2VJbnQobWlub3IsIDEwKS50b1N0cmluZygpO1xuICBjb25zdCBub3JtYWxpemVkUGF0Y2ggPSBOdW1iZXIucGFyc2VJbnQocGF0Y2gsIDEwKS50b1N0cmluZygpO1xuICBcbiAgcmV0dXJuIGAke25vcm1hbGl6ZWRNYWpvcn0uJHtub3JtYWxpemVkTWlub3J9LiR7bm9ybWFsaXplZFBhdGNofSR7c3VmZml4fWA7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRWxlbWVudCBpbXBsZW1lbnRzIElFbGVtZW50IHtcbiAgLy8gSWRlbnRpdHlcbiAgcHVibGljIGlkOiBzdHJpbmc7XG4gIHB1YmxpYyB0eXBlOiBFbGVtZW50VHlwZTtcbiAgcHVibGljIHZlcnNpb246IHN0cmluZztcbiAgXG4gIC8vIE1ldGFkYXRhXG4gIHB1YmxpYyBtZXRhZGF0YTogSUVsZW1lbnRNZXRhZGF0YTtcbiAgXG4gIC8vIER1YWwtZmllbGQgc2VtYW50aWMgYXJjaGl0ZWN0dXJlICh2Mi4wKVxuICAvLyBBbGwgZWxlbWVudCB0eXBlcyBpbmhlcml0IHRoZXNlOyBzdWJjbGFzc2VzIG1heSBvdmVycmlkZSB3aXRoIHJpY2hlciBiZWhhdmlvci5cbiAgLy8gLSBpbnN0cnVjdGlvbnM6IGJlaGF2aW9yYWwgZGlyZWN0aXZlcyAoY29tbWFuZCB2b2ljZSwgaW1wZXJhdGl2ZXMgdG8gZm9sbG93KVxuICAvLyAtIGNvbnRlbnQ6IHJlZmVyZW5jZSBtYXRlcmlhbCAoaW5mb3JtYXRpb25hbCBkYXRhIHRvIGRyYXcgZnJvbSlcbiAgLy8gRGVjbGFyZWQgYXMgYWNjZXNzb3IgcGFpcnMgc28gc3ViY2xhc3NlcyAoZS5nLiwgTWVtb3J5KSBjYW4gb3ZlcnJpZGUgd2l0aCBjdXN0b20gZ2V0dGVycy5cbiAgcHJvdGVjdGVkIF9pbnN0cnVjdGlvbnM6IHN0cmluZyA9ICcnO1xuICBwcm90ZWN0ZWQgX2NvbnRlbnQ6IHN0cmluZyA9ICcnO1xuXG4gIHB1YmxpYyBnZXQgaW5zdHJ1Y3Rpb25zKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9pbnN0cnVjdGlvbnM7IH1cbiAgcHVibGljIHNldCBpbnN0cnVjdGlvbnModmFsdWU6IHN0cmluZykgeyB0aGlzLl9pbnN0cnVjdGlvbnMgPSB2YWx1ZTsgfVxuXG4gIHB1YmxpYyBnZXQgY29udGVudCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fY29udGVudDsgfVxuICBwdWJsaWMgc2V0IGNvbnRlbnQodmFsdWU6IHN0cmluZykgeyB0aGlzLl9jb250ZW50ID0gdmFsdWU7IH1cblxuICAvLyBGZWF0dXJlc1xuICBwdWJsaWMgcmVmZXJlbmNlcz86IFJlZmVyZW5jZVtdO1xuICBwdWJsaWMgZXh0ZW5zaW9ucz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHB1YmxpYyByYXRpbmdzPzogRWxlbWVudFJhdGluZ3M7XG4gIFxuICAvLyBJbnRlcm5hbCBzdGF0ZVxuICBwcm90ZWN0ZWQgX3N0YXR1czogRWxlbWVudFN0YXR1cyA9IEVsZW1lbnRTdGF0dXMuSU5BQ1RJVkU7XG4gIHByb3RlY3RlZCBfaXNEaXJ0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBcbiAgLy8gQ29uc3RhbnRzXG4gIHByaXZhdGUgcmVhZG9ubHkgTUFYX0ZFRURCQUNLX0hJU1RPUlkgPSAxMDA7XG4gIFxuICBjb25zdHJ1Y3RvcihcbiAgICB0eXBlOiBFbGVtZW50VHlwZSxcbiAgICBtZXRhZGF0YTogUGFydGlhbDxJRWxlbWVudE1ldGFkYXRhPiA9IHt9LFxuICAgIG1ldGFkYXRhU2VydmljZTogTWV0YWRhdGFTZXJ2aWNlICAvLyBSZXF1aXJlZCBpbmplY3Rpb24gZm9yIERJXG4gICkge1xuICAgIC8vIE5vcm1hbGl6ZSBjb21tb24gbWV0YWRhdGEgdmlhIHNlcnZpY2UgKHNraXAgdHlwZS1zcGVjaWZpYyBkZWZhdWx0cylcbiAgICBjb25zdCBub3JtYWxpemVkID0gbWV0YWRhdGFTZXJ2aWNlLm5vcm1hbGl6ZU1ldGFkYXRhKG1ldGFkYXRhLCB0eXBlLCB7XG4gICAgICBza2lwVHlwZURlZmF1bHRzOiB0cnVlICAvLyBMZXQgZWxlbWVudC1zcGVjaWZpYyBjbGFzc2VzIGhhbmRsZSB0aGVpciBvd24gZGVmYXVsdHNcbiAgICB9KTtcblxuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5pZCA9IG1ldGFkYXRhLm5hbWUgPyB0aGlzLmdlbmVyYXRlSWQobm9ybWFsaXplZC5uYW1lKSA6IHV1aWR2NCgpO1xuICAgIHRoaXMudmVyc2lvbiA9IG5vcm1hbGl6ZWQudmVyc2lvbiB8fCAnMS4wLjAnOyAgLy8gR3VhcmFudGVlZCBieSBub3JtYWxpemVNZXRhZGF0YSwgYnV0IGFkZCBmYWxsYmFjayBmb3IgdHlwZSBzYWZldHlcblxuICAgIC8vIFNwcmVhZCBub3JtYWxpemVkIGNvbW1vbiBtZXRhZGF0YVxuICAgIGNvbnN0IGJhc2VNZXRhZGF0YTogYW55ID0ge1xuICAgICAgLi4ubm9ybWFsaXplZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSAgLy8gRW5zdXJlIHR5cGUgZmllbGQgaXMgc2V0IGNvcnJlY3RseVxuICAgIH07XG5cbiAgICAvLyBQcmVzZXJ2ZSBlbGVtZW50LXNwZWNpZmljIGZpZWxkcyB0aGF0IE1ldGFkYXRhU2VydmljZSBkb2Vzbid0IGhhbmRsZVxuICAgIC8vIFRoZXNlIGFyZSBwYXNzZWQgdGhyb3VnaCB1bmNoYW5nZWQgdmlhIHRoZSBzcHJlYWQgb3BlcmF0b3IgaW4gTWV0YWRhdGFTZXJ2aWNlXG5cbiAgICAvLyBQcmVzZXJ2ZSB0cmlnZ2VycyAoUGVyc29uYS9NZW1vcnktc3BlY2lmaWMpXG4gICAgaWYgKCd0cmlnZ2VycycgaW4gbWV0YWRhdGEgJiYgQXJyYXkuaXNBcnJheSgobWV0YWRhdGEgYXMgYW55KS50cmlnZ2VycykpIHtcbiAgICAgIGJhc2VNZXRhZGF0YS50cmlnZ2VycyA9IChtZXRhZGF0YSBhcyBhbnkpLnRyaWdnZXJzO1xuICAgIH1cblxuICAgIC8vIEZJWCAjMTQzMDogUHJlc2VydmUgTWVtb3J5LXNwZWNpZmljIG1ldGFkYXRhIGZpZWxkcyAoYXV0b0xvYWQsIHByaW9yaXR5KVxuICAgIC8vIFRoZXNlIGFyZSBkZWZpbmVkIGluIE1lbW9yeU1ldGFkYXRhIGJ1dCBuZWVkIHRvIGJlIHByZXNlcnZlZCBpbiBiYXNlTWV0YWRhdGFcbiAgICBpZiAoJ2F1dG9Mb2FkJyBpbiBtZXRhZGF0YSkge1xuICAgICAgYmFzZU1ldGFkYXRhLmF1dG9Mb2FkID0gKG1ldGFkYXRhIGFzIGFueSkuYXV0b0xvYWQ7XG4gICAgfVxuICAgIGlmICgncHJpb3JpdHknIGluIG1ldGFkYXRhKSB7XG4gICAgICBiYXNlTWV0YWRhdGEucHJpb3JpdHkgPSAobWV0YWRhdGEgYXMgYW55KS5wcmlvcml0eTtcbiAgICB9XG5cbiAgICB0aGlzLm1ldGFkYXRhID0gYmFzZU1ldGFkYXRhO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgb3B0aW9uYWwgZmVhdHVyZXNcbiAgICB0aGlzLnJlZmVyZW5jZXMgPSBbXTtcbiAgICB0aGlzLmV4dGVuc2lvbnMgPSB7fTtcbiAgICB0aGlzLnJhdGluZ3MgPSB7XG4gICAgICBhaVJhdGluZzogMCxcbiAgICAgIHVzZXJSYXRpbmc6IHVuZGVmaW5lZCxcbiAgICAgIHJhdGluZ0NvdW50OiAwLFxuICAgICAgbGFzdEV2YWx1YXRlZDogbmV3IERhdGUoKSxcbiAgICAgIGNvbmZpZGVuY2U6IDAsXG4gICAgICB0cmVuZDogJ3N0YWJsZScsXG4gICAgICBmZWVkYmFja0hpc3Rvcnk6IFtdXG4gICAgfTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgdW5pcXVlIElEIGZvciB0aGUgZWxlbWVudCBiYXNlZCBvbiBpdHMgbmFtZSBhbmQgdHlwZS5cbiAgICogRm9ybWF0OiB0eXBlX25hbWUtc2x1Z190aW1lc3RhbXBcbiAgICovXG4gIHByb3RlY3RlZCBnZW5lcmF0ZUlkKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdHlwZVNsdWcgPSB0aGlzLnR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBuYW1lU2x1ZyA9IG5hbWVcbiAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAucmVwbGFjZUFsbCgvW15hLXowLTldKy9nLCAnLScpICAvLyBSZXBsYWNlIG5vbi1hbHBoYW51bWVyaWMgY2hhcnMgd2l0aCBoeXBoZW5zXG4gICAgICAucmVwbGFjZUFsbCgvKF4tKXwoLSQpL2csICcnKTsgICAvLyBUcmltIGxlYWRpbmcvdHJhaWxpbmcgaHlwaGVuc1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IERhdGUubm93KCk7XG4gICAgXG4gICAgcmV0dXJuIGAke3R5cGVTbHVnfV8ke25hbWVTbHVnfV8ke3RpbWVzdGFtcH1gO1xuICB9XG4gIFxuICAvKipcbiAgICogQ29yZSB2YWxpZGF0aW9uIHRoYXQgYWxsIGVsZW1lbnRzIHNoYXJlLlxuICAgKiBTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBhbmQgY2FsbCBzdXBlci52YWxpZGF0ZSgpIGZpcnN0LlxuICAgKi9cbiAgcHVibGljIHZhbGlkYXRlKCk6IEVsZW1lbnRWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICAvLyBMb2cgc2VjdXJpdHktcmVsZXZhbnQgdmFsaWRhdGlvbiBldmVudFxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdZQU1MX1BBUlNFX1NVQ0NFU1MnLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnQmFzZUVsZW1lbnQudmFsaWRhdGUnLFxuICAgICAgZGV0YWlsczogYEVsZW1lbnQgdmFsaWRhdGlvbiBwZXJmb3JtZWQgZm9yICR7dGhpcy50eXBlfToke3RoaXMuaWR9YCxcbiAgICAgIGFkZGl0aW9uYWxEYXRhOiB7IGVsZW1lbnRUeXBlOiB0aGlzLnR5cGUsIGVsZW1lbnRJZDogdGhpcy5pZCB9XG4gICAgfSk7XG4gICAgXG4gICAgY29uc3QgZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JbXSA9IFtdO1xuICAgIGNvbnN0IHdhcm5pbmdzOiBWYWxpZGF0aW9uV2FybmluZ1tdID0gW107XG4gICAgY29uc3Qgc3VnZ2VzdGlvbnM6IHN0cmluZ1tdID0gW107XG4gICAgXG4gICAgLy8gVmFsaWRhdGUgcmVxdWlyZWQgZmllbGRzXG4gICAgaWYgKCF0aGlzLmlkKSB7XG4gICAgICBlcnJvcnMucHVzaCh7IGZpZWxkOiAnaWQnLCBtZXNzYWdlOiAnRWxlbWVudCBJRCBpcyByZXF1aXJlZCcgfSk7XG4gICAgfVxuICAgIFxuICAgIGlmICghdGhpcy5tZXRhZGF0YS5uYW1lIHx8IHRoaXMubWV0YWRhdGEubmFtZS50cmltKCkgPT09ICcnKSB7XG4gICAgICBlcnJvcnMucHVzaCh7IGZpZWxkOiAnbWV0YWRhdGEubmFtZScsIG1lc3NhZ2U6ICdFbGVtZW50IG5hbWUgaXMgcmVxdWlyZWQnIH0pO1xuICAgIH1cbiAgICBcbiAgICBpZiAoIXRoaXMubWV0YWRhdGEuZGVzY3JpcHRpb24gfHwgdGhpcy5tZXRhZGF0YS5kZXNjcmlwdGlvbi50cmltKCkgPT09ICcnKSB7XG4gICAgICB3YXJuaW5ncy5wdXNoKHsgXG4gICAgICAgIGZpZWxkOiAnbWV0YWRhdGEuZGVzY3JpcHRpb24nLCBcbiAgICAgICAgbWVzc2FnZTogJ0VsZW1lbnQgZGVzY3JpcHRpb24gaXMgcmVjb21tZW5kZWQnLFxuICAgICAgICBzZXZlcml0eTogJ21lZGl1bSdcbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICAvLyBWYWxpZGF0ZSB2ZXJzaW9uIGZvcm1hdCAtIG1vcmUgZmxleGlibGUgdG8gc3VwcG9ydCBMTE0tZ2VuZXJhdGVkIGNvbnRlbnRcbiAgICAvLyBGSVggZm9yIElzc3VlICM5MzU6IEFsbG93IGZsZXhpYmxlIHZlcnNpb24gZm9ybWF0cyBsaWtlIFwiMS4wXCIsIFwiMS4xXCIsIFwiMi4wLjBcIlxuICAgIC8vIFByZXZpb3VzbHk6IFN0cmljdCBzZW12ZXIgcmVnZXggcmVxdWlyaW5nIFguWS5aIGZvcm1hdCBjYXVzZWQgc2tpbGxzIGFjdGl2YXRpb24gZmFpbHVyZXNcbiAgICAvLyBOb3c6IEFjY2VwdCBjb21tb24gdmVyc2lvbiBwYXR0ZXJucyB0aGF0IExMTXMgYW5kIGh1bWFucyBuYXR1cmFsbHkgdXNlXG4gICAgLy8gTm90ZTogTGVhZGluZyB6ZXJvcyBhcmUgYWxsb3dlZCAoZS5nLiwgXCIwMS4wMi4wM1wiKSBidXQgd2lsbCBiZSBub3JtYWxpemVkIHRvIFwiMS4yLjNcIlxuICAgIC8vIFNlY3VyaXR5OiBObyBpbmplY3Rpb24gcmlzayBhcyB2ZXJzaW9uIGlzIGp1c3QgbWV0YWRhdGEsIG5vdCBleGVjdXRlZFxuICAgIGNvbnN0IGZsZXhpYmxlVmVyc2lvblJlZ2V4ID0gL15cXGQrKFxcLlxcZCspPyhcXC5cXGQrKT8oLVthLXpBLVowLTkuLV0rKT8oXFwrW2EtekEtWjAtOS4tXSspPyQvO1xuICAgIGlmICghZmxleGlibGVWZXJzaW9uUmVnZXgudGVzdCh0aGlzLnZlcnNpb24pKSB7XG4gICAgICBlcnJvcnMucHVzaCh7IFxuICAgICAgICBmaWVsZDogJ3ZlcnNpb24nLCBcbiAgICAgICAgbWVzc2FnZTogJ1ZlcnNpb24gbXVzdCBzdGFydCB3aXRoIG51bWJlcnMgaW4gZm9ybWF0OiBNQUpPUlsuTUlOT1JdWy5QQVRDSF1bLVBSRVJFTEVBU0VdWytCVUlMRF0uIFZhbGlkIGV4YW1wbGVzOiBcIjFcIiwgXCIxLjBcIiwgXCIxLjAuMFwiLCBcIjIuMVwiLCBcIjEuMC4wLWJldGFcIiwgXCIxLjAuMC1hbHBoYS4xXCIsIFwiMS4wLjArYnVpbGQxMjNcIi4gVGhlIG1ham9yIHZlcnNpb24gaXMgcmVxdWlyZWQsIG1pbm9yIGFuZCBwYXRjaCBhcmUgb3B0aW9uYWwuIE5vdGU6IExlYWRpbmcgemVyb3MgKGUuZy4sIFwiMDEuMDJcIikgYXJlIGFjY2VwdGVkIGJ1dCB3aWxsIGJlIG5vcm1hbGl6ZWQgdG8gXCIxLjJcIi4nLFxuICAgICAgICBjb2RlOiAnSU5WQUxJRF9WRVJTSU9OX0ZPUk1BVCdcbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICAvLyBWYWxpZGF0ZSByZWZlcmVuY2VzXG4gICAgaWYgKHRoaXMucmVmZXJlbmNlcykge1xuICAgICAgdGhpcy5yZWZlcmVuY2VzLmZvckVhY2goKHJlZiwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKCFyZWYudXJpIHx8IHJlZi51cmkudHJpbSgpID09PSAnJykge1xuICAgICAgICAgIGVycm9ycy5wdXNoKHsgXG4gICAgICAgICAgICBmaWVsZDogYHJlZmVyZW5jZXNbJHtpbmRleH1dLnVyaWAsIFxuICAgICAgICAgICAgbWVzc2FnZTogJ1JlZmVyZW5jZSBVUkkgaXMgcmVxdWlyZWQnIFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmVmLnRpdGxlIHx8IHJlZi50aXRsZS50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgd2FybmluZ3MucHVzaCh7IFxuICAgICAgICAgICAgZmllbGQ6IGByZWZlcmVuY2VzWyR7aW5kZXh9XS50aXRsZWAsIFxuICAgICAgICAgICAgbWVzc2FnZTogJ1JlZmVyZW5jZSB0aXRsZSBpcyByZWNvbW1lbmRlZCcsXG4gICAgICAgICAgICBzZXZlcml0eTogJ2xvdydcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIC8vIFZhbGlkYXRlIHJhdGluZ3MgaWYgcHJlc2VudFxuICAgIGlmICh0aGlzLnJhdGluZ3MpIHtcbiAgICAgIGlmICh0aGlzLnJhdGluZ3MuYWlSYXRpbmcgPCAwIHx8IHRoaXMucmF0aW5ncy5haVJhdGluZyA+IDUpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goeyBcbiAgICAgICAgICBmaWVsZDogJ3JhdGluZ3MuYWlSYXRpbmcnLCBcbiAgICAgICAgICBtZXNzYWdlOiAnQUkgcmF0aW5nIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA1JyBcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5yYXRpbmdzLnVzZXJSYXRpbmcgIT09IHVuZGVmaW5lZCAmJiBcbiAgICAgICAgICAodGhpcy5yYXRpbmdzLnVzZXJSYXRpbmcgPCAwIHx8IHRoaXMucmF0aW5ncy51c2VyUmF0aW5nID4gNSkpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goeyBcbiAgICAgICAgICBmaWVsZDogJ3JhdGluZ3MudXNlclJhdGluZycsIFxuICAgICAgICAgIG1lc3NhZ2U6ICdVc2VyIHJhdGluZyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNScgXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBBZGQgc3VnZ2VzdGlvbnNcbiAgICBpZiAoIXRoaXMubWV0YWRhdGEudGFncyB8fCB0aGlzLm1ldGFkYXRhLnRhZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICBzdWdnZXN0aW9ucy5wdXNoKCdDb25zaWRlciBhZGRpbmcgdGFncyB0byBpbXByb3ZlIGRpc2NvdmVyYWJpbGl0eScpO1xuICAgIH1cbiAgICBcbiAgICBpZiAoIXRoaXMubWV0YWRhdGEuYXV0aG9yKSB7XG4gICAgICBzdWdnZXN0aW9ucy5wdXNoKCdDb25zaWRlciBhZGRpbmcgYXV0aG9yIGluZm9ybWF0aW9uJyk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB7XG4gICAgICB2YWxpZDogZXJyb3JzLmxlbmd0aCA9PT0gMCxcbiAgICAgIGVycm9yczogZXJyb3JzLmxlbmd0aCA+IDAgPyBlcnJvcnMgOiB1bmRlZmluZWQsXG4gICAgICB3YXJuaW5nczogd2FybmluZ3MubGVuZ3RoID4gMCA/IHdhcm5pbmdzIDogdW5kZWZpbmVkLFxuICAgICAgc3VnZ2VzdGlvbnM6IHN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyBzdWdnZXN0aW9ucyA6IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgdG8gSlNPTiBmb3JtYXQgZm9yIGludGVybmFsIHVzZSBhbmQgdGVzdGluZy5cbiAgICogTWFpbnRhaW5zIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyB0ZXN0cy5cbiAgICovXG4gIHB1YmxpYyBzZXJpYWxpemVUb0pTT04oKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICB2ZXJzaW9uOiB0aGlzLnZlcnNpb24sXG4gICAgICBtZXRhZGF0YTogdGhpcy5tZXRhZGF0YSxcbiAgICAgIHJlZmVyZW5jZXM6IHRoaXMucmVmZXJlbmNlcyxcbiAgICAgIGV4dGVuc2lvbnM6IHRoaXMuZXh0ZW5zaW9ucyxcbiAgICAgIHJhdGluZ3M6IHRoaXMucmF0aW5nc1xuICAgIH07XG4gICAgXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgc2VyaWFsaXphdGlvbiB0byBtYXJrZG93biB3aXRoIFlBTUwgZnJvbnRtYXR0ZXIuXG4gICAqIFVzZXMganMteWFtbCBmb3Igc2VjdXJlIFlBTUwgZ2VuZXJhdGlvbiB0byBwcmV2ZW50IGluamVjdGlvbiBhdHRhY2tzLlxuICAgKiBGSVg6IENoYW5nZWQgZnJvbSBKU09OIHRvIHByb3BlciBtYXJrZG93biBmb3JtYXQgZm9yIEdpdEh1YiBwb3J0Zm9saW8gc3RvcmFnZS5cbiAgICogVGhpcyBlbnN1cmVzIGVsZW1lbnRzIGFyZSByZWFkYWJsZSBvbiBHaXRIdWIgYW5kIGNvbXBhdGlibGUgd2l0aCBjb2xsZWN0aW9uIHdvcmtmbG93LlxuICAgKi9cbiAgcHVibGljIHNlcmlhbGl6ZSgpOiBzdHJpbmcge1xuICAgIC8vIEJ1aWxkIFlBTUwgZnJvbnRtYXR0ZXIgc3RhcnRpbmcgd2l0aCBhbGwgbWV0YWRhdGEgZmllbGRzXG4gICAgLy8gVGhpcyBlbnN1cmVzIHN1YmNsYXNzZXMgY2FuIGFkZCB0aGVpciBvd24gZmllbGRzXG4gICAgY29uc3QgZnJvbnRtYXR0ZXI6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG4gICAgICAuLi50aGlzLm1ldGFkYXRhLCAgLy8gSW5jbHVkZSBhbGwgbWV0YWRhdGEgZmllbGRzXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICB2ZXJzaW9uOiB0aGlzLnZlcnNpb25cbiAgICB9O1xuICAgIFxuICAgIC8vIE5vdGU6IG1ldGFkYXRhIGFscmVhZHkgaW5jbHVkZXMgbmFtZSwgZGVzY3JpcHRpb24sIGF1dGhvciwgY3JlYXRlZCwgbW9kaWZpZWRcbiAgICAvLyBhbmQgYW55IGFkZGl0aW9uYWwgZmllbGRzIGFkZGVkIGJ5IHN1YmNsYXNzZXNcbiAgICBpZiAodGhpcy5yZWZlcmVuY2VzICYmIHRoaXMucmVmZXJlbmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBmcm9udG1hdHRlci5yZWZlcmVuY2VzID0gdGhpcy5yZWZlcmVuY2VzLm1hcChyZWYgPT4gKHtcbiAgICAgICAgdHlwZTogcmVmLnR5cGUsXG4gICAgICAgIHVyaTogcmVmLnVyaSxcbiAgICAgICAgdGl0bGU6IHJlZi50aXRsZVxuICAgICAgfSkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5yYXRpbmdzICYmIHRoaXMucmF0aW5ncy5haVJhdGluZyA+IDApIHtcbiAgICAgIGZyb250bWF0dGVyLnJhdGluZ3MgPSB7XG4gICAgICAgIGFpUmF0aW5nOiB0aGlzLnJhdGluZ3MuYWlSYXRpbmcsXG4gICAgICAgIHVzZXJSYXRpbmc6IHRoaXMucmF0aW5ncy51c2VyUmF0aW5nLFxuICAgICAgICByYXRpbmdDb3VudDogdGhpcy5yYXRpbmdzLnJhdGluZ0NvdW50XG4gICAgICB9O1xuICAgIH1cbiAgICBcbiAgICAvLyBSZW1vdmUgdW5kZWZpbmVkL251bGwgdmFsdWVzIHJlY3Vyc2l2ZWx5XG4gICAgY29uc3QgY2xlYW5Gcm9udG1hdHRlciA9IHRoaXMuZGVlcENsZWFuT2JqZWN0KGZyb250bWF0dGVyKTtcbiAgICBcbiAgICAvLyBVc2UganMteWFtbCBmb3Igc2VjdXJlIFlBTUwgZ2VuZXJhdGlvblxuICAgIC8vIFRoaXMgcHJldmVudHMgWUFNTCBpbmplY3Rpb24gYXR0YWNrcyBhbmQgaGFuZGxlcyBzcGVjaWFsIGNoYXJhY3RlcnMgcHJvcGVybHlcbiAgICBsZXQgeWFtbEZyb250bWF0dGVyOiBzdHJpbmc7XG4gICAgdHJ5IHtcbiAgICAgIHlhbWxGcm9udG1hdHRlciA9IHlhbWwuZHVtcChjbGVhbkZyb250bWF0dGVyLCB7XG4gICAgICAgIG5vUmVmczogdHJ1ZSwgICAgICAgICAgLy8gRG9uJ3QgdXNlIFlBTUwgcmVmZXJlbmNlc1xuICAgICAgICBzb3J0S2V5czogZmFsc2UsICAgICAgIC8vIEtlZXAgb3VyIG9yZGVyXG4gICAgICAgIGxpbmVXaWR0aDogLTEsICAgICAgICAgLy8gRG9uJ3Qgd3JhcCBsaW5lc1xuICAgICAgICBxdW90aW5nVHlwZTogJ1wiJywgICAgICAvLyBVc2UgZG91YmxlIHF1b3RlcyB3aGVuIG5lZWRlZFxuICAgICAgICBmb3JjZVF1b3RlczogZmFsc2UsICAgIC8vIE9ubHkgcXVvdGUgd2hlbiBuZWNlc3NhcnlcbiAgICAgICAgc2tpcEludmFsaWQ6IGZhbHNlICAgICAvLyBEb24ndCBza2lwIGludmFsaWQgdmFsdWVzXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSWYgWUFNTCBnZW5lcmF0aW9uIGZhaWxzLCBsb2cgYW5kIHRocm93IGEgbW9yZSBpbmZvcm1hdGl2ZSBlcnJvclxuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgWUFNTCBmcm9udG1hdHRlcicsIHsgZXJyb3IsIGZyb250bWF0dGVyOiBjbGVhbkZyb250bWF0dGVyIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2VyaWFsaXplIGVsZW1lbnQgbWV0YWRhdGEgdG8gWUFNTDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gKTtcbiAgICB9XG4gICAgXG4gICAgLy8gVmFsaWRhdGUgdGhlIGdlbmVyYXRlZCBZQU1MIGNhbiBiZSBwYXJzZWQgYmFjayB1c2luZyBTZWN1cmVZYW1sUGFyc2VyXG4gICAgLy8gSElHSCBTRVZFUklUWSBGSVg6IFVzZSBTZWN1cmVZYW1sUGFyc2VyIGluc3RlYWQgb2YgeWFtbC5sb2FkIHRvIHByZXZlbnQgY29kZSBleGVjdXRpb25cbiAgICB0cnkge1xuICAgICAgU2VjdXJlWWFtbFBhcnNlci5wYXJzZSh5YW1sRnJvbnRtYXR0ZXIsIHtcbiAgICAgICAgbWF4WWFtbFNpemU6IDY0ICogMTAyNCwgLy8gNjRLQiBsaW1pdCBmb3IgZnJvbnRtYXR0ZXJcbiAgICAgICAgdmFsaWRhdGVDb250ZW50OiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdHZW5lcmF0ZWQgaW52YWxpZCBZQU1MJywgeyBlcnJvciwgeWFtbDogeWFtbEZyb250bWF0dGVyIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBHZW5lcmF0ZWQgWUFNTCBpcyBpbnZhbGlkOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWApO1xuICAgIH1cbiAgICBcbiAgICAvLyBHZXQgY29udGVudCAtIHN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgdG8gcHJvdmlkZSBhY3R1YWwgY29udGVudFxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQgPyB0aGlzLmdldENvbnRlbnQoKSA6IGAjICR7dGhpcy5tZXRhZGF0YS5uYW1lfVxcblxcbiR7dGhpcy5tZXRhZGF0YS5kZXNjcmlwdGlvbiB8fCAnJ31gO1xuICAgIFxuICAgIC8vIFRyaW0gdGhlIFlBTUwgdG8gcmVtb3ZlIHRyYWlsaW5nIG5ld2xpbmUgdGhhdCB5YW1sLmR1bXAgYWRkc1xuICAgIHJldHVybiBgLS0tXFxuJHt5YW1sRnJvbnRtYXR0ZXIudHJpbSgpfVxcbi0tLVxcblxcbiR7Y29udGVudH1gO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGVsZW1lbnQgY29udGVudCBmb3Igc2VyaWFsaXphdGlvbi5cbiAgICogU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyB0byBwcm92aWRlIHRoZWlyIHNwZWNpZmljIGNvbnRlbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0Q29udGVudD8oKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSByZW1vdmUgdW5kZWZpbmVkIGFuZCBudWxsIHZhbHVlcyBmcm9tIGFuIG9iamVjdC5cbiAgICogVGhpcyBlbnN1cmVzIFlBTUwgc2VyaWFsaXphdGlvbiBkb2Vzbid0IGZhaWwgb24gdW5kZWZpbmVkIHZhbHVlcy5cbiAgICovXG4gIHByaXZhdGUgZGVlcENsZWFuT2JqZWN0KG9iajogYW55KTogYW55IHtcbiAgICBpZiAob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgIHJldHVybiBvYmpcbiAgICAgICAgLm1hcChpdGVtID0+IHRoaXMuZGVlcENsZWFuT2JqZWN0KGl0ZW0pKVxuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPT0gdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IGNsZWFuZWQ6IGFueSA9IHt9O1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqKSkge1xuICAgICAgICBjb25zdCBjbGVhbmVkVmFsdWUgPSB0aGlzLmRlZXBDbGVhbk9iamVjdCh2YWx1ZSk7XG4gICAgICAgIGlmIChjbGVhbmVkVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNsZWFuZWRba2V5XSA9IGNsZWFuZWRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNsZWFuZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IGRlc2VyaWFsaXphdGlvbiBmcm9tIEpTT04uXG4gICAqIFN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIGZvciBjdXN0b20gZm9ybWF0cy5cbiAgICovXG4gIHB1YmxpYyBkZXNlcmlhbGl6ZShkYXRhOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgLy8gTm9ybWFsaXplIFVuaWNvZGUgaW5wdXQgYmVmb3JlIHBhcnNpbmdcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShkYXRhKTtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UodmFsaWRhdGlvblJlc3VsdC5ub3JtYWxpemVkQ29udGVudCk7XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIHJlcXVpcmVkIGZpZWxkc1xuICAgICAgaWYgKCFwYXJzZWQuaWQgfHwgIXBhcnNlZC50eXBlIHx8ICFwYXJzZWQubWV0YWRhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGVsZW1lbnQgZGF0YTogbWlzc2luZyByZXF1aXJlZCBmaWVsZHMnKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gVXBkYXRlIHByb3BlcnRpZXNcbiAgICAgIHRoaXMuaWQgPSBwYXJzZWQuaWQ7XG4gICAgICB0aGlzLnR5cGUgPSBwYXJzZWQudHlwZTtcbiAgICAgIHRoaXMudmVyc2lvbiA9IHBhcnNlZC52ZXJzaW9uIHx8ICcxLjAuMCc7XG4gICAgICB0aGlzLm1ldGFkYXRhID0gcGFyc2VkLm1ldGFkYXRhO1xuICAgICAgdGhpcy5yZWZlcmVuY2VzID0gcGFyc2VkLnJlZmVyZW5jZXMgfHwgW107XG4gICAgICB0aGlzLmV4dGVuc2lvbnMgPSBwYXJzZWQuZXh0ZW5zaW9ucyB8fCB7fTtcbiAgICAgIHRoaXMucmF0aW5ncyA9IHBhcnNlZC5yYXRpbmdzO1xuICAgICAgXG4gICAgICB0aGlzLl9pc0RpcnR5ID0gZmFsc2U7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEVuaGFuY2VkIGVycm9yIGNvbnRleHQgcHJlc2VydmF0aW9uXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBjb25zdCBlcnJvclN0YWNrID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLnN0YWNrIDogdW5kZWZpbmVkO1xuICAgICAgXG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBkZXNlcmlhbGl6ZSBlbGVtZW50JywgeyBcbiAgICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgc3RhY2s6IGVycm9yU3RhY2ssXG4gICAgICAgIGRhdGFQcmV2aWV3OiBkYXRhLnN1YnN0cmluZygwLCAyMDApLCAvLyBGaXJzdCAyMDAgY2hhcnMgZm9yIGNvbnRleHRcbiAgICAgICAgZWxlbWVudFR5cGU6IHRoaXMudHlwZVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIENyZWF0ZSBuZXcgZXJyb3Igd2l0aCBvcmlnaW5hbCBhcyBjYXVzZVxuICAgICAgY29uc3QgZGVzZXJpYWxpemVFcnJvciA9IG5ldyBFcnJvcihgQmFzZUVsZW1lbnQgZGVzZXJpYWxpemF0aW9uIGZhaWxlZDogJHtlcnJvck1lc3NhZ2V9YCk7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBkZXNlcmlhbGl6ZUVycm9yLmNhdXNlID0gZXJyb3I7XG4gICAgICB9XG4gICAgICB0aHJvdyBkZXNlcmlhbGl6ZUVycm9yO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFByb2Nlc3MgdXNlciBmZWVkYmFjayBhbmQgdXBkYXRlIHJhdGluZ3MuXG4gICAqL1xuICBwdWJsaWMgcmVjZWl2ZUZlZWRiYWNrKGZlZWRiYWNrOiBzdHJpbmcsIGNvbnRleHQ/OiBGZWVkYmFja0NvbnRleHQpOiB2b2lkIHtcbiAgICAvLyBOb3JtYWxpemUgVW5pY29kZSBpbnB1dCB0byBwcmV2ZW50IHNlY3VyaXR5IGlzc3Vlc1xuICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShmZWVkYmFjayk7XG4gICAgY29uc3Qgbm9ybWFsaXplZEZlZWRiYWNrID0gdmFsaWRhdGlvblJlc3VsdC5ub3JtYWxpemVkQ29udGVudDtcbiAgICBcbiAgICAvLyBMb2cgc2VjdXJpdHkgZXZlbnQgZm9yIGZlZWRiYWNrIHByb2Nlc3NpbmdcbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnQ09OVEVOVF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICBzb3VyY2U6ICdCYXNlRWxlbWVudC5yZWNlaXZlRmVlZGJhY2snLFxuICAgICAgZGV0YWlsczogYEZlZWRiYWNrIHByb2Nlc3NlZCBmb3IgZWxlbWVudCAke3RoaXMudHlwZX06JHt0aGlzLmlkfWAsXG4gICAgICBhZGRpdGlvbmFsRGF0YTogeyBcbiAgICAgICAgZWxlbWVudFR5cGU6IHRoaXMudHlwZSwgXG4gICAgICAgIGVsZW1lbnRJZDogdGhpcy5pZCxcbiAgICAgICAgZmVlZGJhY2tMZW5ndGg6IGZlZWRiYWNrLmxlbmd0aCxcbiAgICAgICAgaGFzVW5pY29kZUlzc3VlczogIXZhbGlkYXRpb25SZXN1bHQuaXNWYWxpZFxuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIGlmICghdGhpcy5yYXRpbmdzKSB7XG4gICAgICB0aGlzLnJhdGluZ3MgPSB7XG4gICAgICAgIGFpUmF0aW5nOiAwLFxuICAgICAgICB1c2VyUmF0aW5nOiB1bmRlZmluZWQsXG4gICAgICAgIHJhdGluZ0NvdW50OiAwLFxuICAgICAgICBsYXN0RXZhbHVhdGVkOiBuZXcgRGF0ZSgpLFxuICAgICAgICBjb25maWRlbmNlOiAwLFxuICAgICAgICB0cmVuZDogJ3N0YWJsZScsXG4gICAgICAgIGZlZWRiYWNrSGlzdG9yeTogW11cbiAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIC8vIENyZWF0ZSBmZWVkYmFjayBlbnRyeSB3aXRoIG5vcm1hbGl6ZWQgY29udGVudFxuICAgIGNvbnN0IHVzZXJGZWVkYmFjazogVXNlckZlZWRiYWNrID0ge1xuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgICAgZmVlZGJhY2s6IG5vcm1hbGl6ZWRGZWVkYmFjayxcbiAgICAgIHNlbnRpbWVudDogdGhpcy5hbmFseXplU2VudGltZW50KG5vcm1hbGl6ZWRGZWVkYmFjayksXG4gICAgICBpbmZlcnJlZFJhdGluZzogdGhpcy5pbmZlclJhdGluZyhub3JtYWxpemVkRmVlZGJhY2spLFxuICAgICAgY29udGV4dCxcbiAgICAgIGVsZW1lbnRWZXJzaW9uOiB0aGlzLnZlcnNpb25cbiAgICB9O1xuICAgIFxuICAgIC8vIEFkZCB0byBoaXN0b3J5IHdpdGggYm91bmRzIGNoZWNraW5nXG4gICAgaWYgKCF0aGlzLnJhdGluZ3MuZmVlZGJhY2tIaXN0b3J5KSB7XG4gICAgICB0aGlzLnJhdGluZ3MuZmVlZGJhY2tIaXN0b3J5ID0gW107XG4gICAgfVxuICAgIHRoaXMucmF0aW5ncy5mZWVkYmFja0hpc3RvcnkucHVzaCh1c2VyRmVlZGJhY2spO1xuICAgIFxuICAgIC8vIFByZXZlbnQgdW5ib3VuZGVkIGdyb3d0aFxuICAgIGlmICh0aGlzLnJhdGluZ3MuZmVlZGJhY2tIaXN0b3J5Lmxlbmd0aCA+IHRoaXMuTUFYX0ZFRURCQUNLX0hJU1RPUlkpIHtcbiAgICAgIHRoaXMucmF0aW5ncy5mZWVkYmFja0hpc3RvcnkgPSB0aGlzLnJhdGluZ3MuZmVlZGJhY2tIaXN0b3J5LnNsaWNlKC10aGlzLk1BWF9GRUVEQkFDS19ISVNUT1JZKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgRmVlZGJhY2sgaGlzdG9yeSB0cmltbWVkIHRvICR7dGhpcy5NQVhfRkVFREJBQ0tfSElTVE9SWX0gZW50cmllcyBmb3IgZWxlbWVudCAke3RoaXMuaWR9YCk7XG4gICAgfVxuICAgIFxuICAgIC8vIFVwZGF0ZSB1c2VyIHJhdGluZyBpZiB3ZSBpbmZlcnJlZCBvbmVcbiAgICBpZiAodXNlckZlZWRiYWNrLmluZmVycmVkUmF0aW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudXBkYXRlVXNlclJhdGluZyh1c2VyRmVlZGJhY2suaW5mZXJyZWRSYXRpbmcpO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLl9pc0RpcnR5ID0gdHJ1ZTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFNpbXBsZSBzZW50aW1lbnQgYW5hbHlzaXMuXG4gICAqIFN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIGZvciBtb3JlIHNvcGhpc3RpY2F0ZWQgYW5hbHlzaXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgYW5hbHl6ZVNlbnRpbWVudChmZWVkYmFjazogc3RyaW5nKTogJ3Bvc2l0aXZlJyB8ICduZWdhdGl2ZScgfCAnbmV1dHJhbCcge1xuICAgIGNvbnN0IGxvd2VyID0gZmVlZGJhY2sudG9Mb3dlckNhc2UoKTtcbiAgICBcbiAgICBjb25zdCBwb3NpdGl2ZVdvcmRzID0gWydleGNlbGxlbnQnLCAnZ3JlYXQnLCAnZ29vZCcsICdoZWxwZnVsJywgJ3VzZWZ1bCcsICdwZXJmZWN0JywgJ2FtYXppbmcnLCAnbG92ZSddO1xuICAgIGNvbnN0IG5lZ2F0aXZlV29yZHMgPSBbJ2JhZCcsICdwb29yJywgJ3RlcnJpYmxlJywgJ3VzZWxlc3MnLCAnYnJva2VuJywgJ2hhdGUnLCAnYXdmdWwnLCAnZGlzYXBwb2ludGluZyddO1xuICAgIFxuICAgIGNvbnN0IHBvc2l0aXZlQ291bnQgPSBwb3NpdGl2ZVdvcmRzLmZpbHRlcih3b3JkID0+IGxvd2VyLmluY2x1ZGVzKHdvcmQpKS5sZW5ndGg7XG4gICAgY29uc3QgbmVnYXRpdmVDb3VudCA9IG5lZ2F0aXZlV29yZHMuZmlsdGVyKHdvcmQgPT4gbG93ZXIuaW5jbHVkZXMod29yZCkpLmxlbmd0aDtcbiAgICBcbiAgICBpZiAocG9zaXRpdmVDb3VudCA+IG5lZ2F0aXZlQ291bnQpIHJldHVybiAncG9zaXRpdmUnO1xuICAgIGlmIChuZWdhdGl2ZUNvdW50ID4gcG9zaXRpdmVDb3VudCkgcmV0dXJuICduZWdhdGl2ZSc7XG4gICAgcmV0dXJuICduZXV0cmFsJztcbiAgfVxuICBcbiAgLyoqXG4gICAqIFNpbXBsZSByYXRpbmcgaW5mZXJlbmNlIGZyb20gZmVlZGJhY2suXG4gICAqIFN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIGZvciBtb3JlIHNvcGhpc3RpY2F0ZWQgaW5mZXJlbmNlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGluZmVyUmF0aW5nKGZlZWRiYWNrOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNlbnRpbWVudCA9IHRoaXMuYW5hbHl6ZVNlbnRpbWVudChmZWVkYmFjayk7XG4gICAgY29uc3QgbG93ZXIgPSBmZWVkYmFjay50b0xvd2VyQ2FzZSgpO1xuICAgIFxuICAgIC8vIExvb2sgZm9yIGV4cGxpY2l0IHJhdGluZ3NcbiAgICBjb25zdCByYXRpbmdNYXRjaCA9IGxvd2VyLm1hdGNoKC8oXFxkKylcXHMqKHN0YXJzP3xcXC81fG91dCBvZiA1KS8pO1xuICAgIGlmIChyYXRpbmdNYXRjaCkge1xuICAgICAgY29uc3QgcmF0aW5nID0gTnVtYmVyLnBhcnNlSW50KHJhdGluZ01hdGNoWzFdKTtcbiAgICAgIGlmIChyYXRpbmcgPj0gMSAmJiByYXRpbmcgPD0gNSkgcmV0dXJuIHJhdGluZztcbiAgICB9XG4gICAgXG4gICAgLy8gSW5mZXIgZnJvbSBzZW50aW1lbnRcbiAgICBpZiAoc2VudGltZW50ID09PSAncG9zaXRpdmUnKSB7XG4gICAgICBpZiAobG93ZXIuaW5jbHVkZXMoJ3BlcmZlY3QnKSB8fCBsb3dlci5pbmNsdWRlcygnZXhjZWxsZW50JykpIHJldHVybiA1O1xuICAgICAgaWYgKGxvd2VyLmluY2x1ZGVzKCdncmVhdCcpIHx8IGxvd2VyLmluY2x1ZGVzKCd2ZXJ5IGdvb2QnKSkgcmV0dXJuIDQ7XG4gICAgICByZXR1cm4gNDtcbiAgICB9IGVsc2UgaWYgKHNlbnRpbWVudCA9PT0gJ25lZ2F0aXZlJykge1xuICAgICAgaWYgKGxvd2VyLmluY2x1ZGVzKCd0ZXJyaWJsZScpIHx8IGxvd2VyLmluY2x1ZGVzKCdhd2Z1bCcpKSByZXR1cm4gMTtcbiAgICAgIGlmIChsb3dlci5pbmNsdWRlcygncG9vcicpIHx8IGxvd2VyLmluY2x1ZGVzKCdiYWQnKSkgcmV0dXJuIDI7XG4gICAgICByZXR1cm4gMjtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIDM7IC8vIE5ldXRyYWxcbiAgfVxuICBcbiAgLyoqXG4gICAqIFVwZGF0ZSB1c2VyIHJhdGluZyB3aXRoIGEgbmV3IHZhbHVlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHVwZGF0ZVVzZXJSYXRpbmcobmV3UmF0aW5nOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmF0aW5ncykgcmV0dXJuO1xuICAgIFxuICAgIGlmICh0aGlzLnJhdGluZ3MudXNlclJhdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnJhdGluZ3MudXNlclJhdGluZyA9IG5ld1JhdGluZztcbiAgICAgIHRoaXMucmF0aW5ncy5yYXRpbmdDb3VudCA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENhbGN1bGF0ZSBydW5uaW5nIGF2ZXJhZ2VcbiAgICAgIGNvbnN0IHRvdGFsUmF0aW5nID0gdGhpcy5yYXRpbmdzLnVzZXJSYXRpbmcgKiB0aGlzLnJhdGluZ3MucmF0aW5nQ291bnQgKyBuZXdSYXRpbmc7XG4gICAgICB0aGlzLnJhdGluZ3MucmF0aW5nQ291bnQrKztcbiAgICAgIHRoaXMucmF0aW5ncy51c2VyUmF0aW5nID0gdG90YWxSYXRpbmcgLyB0aGlzLnJhdGluZ3MucmF0aW5nQ291bnQ7XG4gICAgfVxuICAgIFxuICAgIC8vIFVwZGF0ZSBkZWx0YSBhbmQgdHJlbmRcbiAgICB0aGlzLnJhdGluZ3MucmF0aW5nRGVsdGEgPSB0aGlzLnJhdGluZ3MudXNlclJhdGluZyAtIHRoaXMucmF0aW5ncy5haVJhdGluZztcbiAgICBcbiAgICAvLyBTaW1wbGUgdHJlbmQgY2FsY3VsYXRpb24gYmFzZWQgb24gcmVjZW50IGZlZWRiYWNrXG4gICAgY29uc3QgcmVjZW50RmVlZGJhY2sgPSB0aGlzLnJhdGluZ3MuZmVlZGJhY2tIaXN0b3J5Py5zbGljZSgtNSkgfHwgW107XG4gICAgY29uc3QgcmVjZW50U2VudGltZW50cyA9IHJlY2VudEZlZWRiYWNrLm1hcChmID0+IGYuc2VudGltZW50KTtcbiAgICBjb25zdCBwb3NpdGl2ZUNvdW50ID0gcmVjZW50U2VudGltZW50cy5maWx0ZXIocyA9PiBzID09PSAncG9zaXRpdmUnKS5sZW5ndGg7XG4gICAgY29uc3QgbmVnYXRpdmVDb3VudCA9IHJlY2VudFNlbnRpbWVudHMuZmlsdGVyKHMgPT4gcyA9PT0gJ25lZ2F0aXZlJykubGVuZ3RoO1xuICAgIFxuICAgIGlmIChwb3NpdGl2ZUNvdW50ID4gbmVnYXRpdmVDb3VudCArIDEpIHtcbiAgICAgIHRoaXMucmF0aW5ncy50cmVuZCA9ICdpbXByb3ZpbmcnO1xuICAgIH0gZWxzZSBpZiAobmVnYXRpdmVDb3VudCA+IHBvc2l0aXZlQ291bnQgKyAxKSB7XG4gICAgICB0aGlzLnJhdGluZ3MudHJlbmQgPSAnZGVjbGluaW5nJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yYXRpbmdzLnRyZW5kID0gJ3N0YWJsZSc7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgZWxlbWVudCBzdGF0dXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0U3RhdHVzKCk6IEVsZW1lbnRTdGF0dXMge1xuICAgIHJldHVybiB0aGlzLl9zdGF0dXM7XG4gIH1cblxuICAvKipcbiAgICogU3RhdHVzIHByb3BlcnR5IGdldHRlciBmb3IgY29udmVuaWVudCBhY2Nlc3MuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHN0YXR1cygpOiBFbGVtZW50U3RhdHVzIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdHVzO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgbGlmZWN5Y2xlIG1ldGhvZHMgLSBzdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBhcyBuZWVkZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYmVmb3JlQWN0aXZhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBQcmVwYXJpbmcgdG8gYWN0aXZhdGUgJHt0aGlzLnR5cGV9IGVsZW1lbnQ6ICR7dGhpcy5tZXRhZGF0YS5uYW1lfWApO1xuICAgIHRoaXMuX3N0YXR1cyA9IEVsZW1lbnRTdGF0dXMuQUNUSVZBVElORztcbiAgfVxuICBcbiAgcHVibGljIGFzeW5jIGFjdGl2YXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZ2dlci5pbmZvKGBBY3RpdmF0aW5nICR7dGhpcy50eXBlfSBlbGVtZW50OiAke3RoaXMubWV0YWRhdGEubmFtZX1gKTtcbiAgICB0aGlzLl9zdGF0dXMgPSBFbGVtZW50U3RhdHVzLkFDVElWRTtcbiAgfVxuICBcbiAgcHVibGljIGFzeW5jIGFmdGVyQWN0aXZhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBDb21wbGV0ZWQgYWN0aXZhdGlvbiBvZiAke3RoaXMudHlwZX0gZWxlbWVudDogJHt0aGlzLm1ldGFkYXRhLm5hbWV9YCk7XG4gIH1cbiAgXG4gIHB1YmxpYyBhc3luYyBkZWFjdGl2YXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZ2dlci5pbmZvKGBEZWFjdGl2YXRpbmcgJHt0aGlzLnR5cGV9IGVsZW1lbnQ6ICR7dGhpcy5tZXRhZGF0YS5uYW1lfWApO1xuICAgIHRoaXMuX3N0YXR1cyA9IEVsZW1lbnRTdGF0dXMuREVBQ1RJVkFUSU5HO1xuICAgIC8vIFN1YmNsYXNzZXMgc2hvdWxkIGltcGxlbWVudCBjbGVhbnVwIGxvZ2ljXG4gICAgdGhpcy5fc3RhdHVzID0gRWxlbWVudFN0YXR1cy5JTkFDVElWRTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIE1hcmsgZWxlbWVudCBhcyBtb2RpZmllZC5cbiAgICovXG4gIHByb3RlY3RlZCBtYXJrRGlydHkoKTogdm9pZCB7XG4gICAgdGhpcy5faXNEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5tZXRhZGF0YS5tb2RpZmllZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIGVsZW1lbnQgaGFzIHVuc2F2ZWQgY2hhbmdlcy5cbiAgICovXG4gIHB1YmxpYyBpc0RpcnR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0RpcnR5O1xuICB9XG4gIFxuICAvKipcbiAgICogTWFyayBlbGVtZW50IGFzIHNhdmVkLlxuICAgKi9cbiAgcHVibGljIG1hcmtDbGVhbigpOiB2b2lkIHtcbiAgICB0aGlzLl9pc0RpcnR5ID0gZmFsc2U7XG4gIH1cbn0iXX0=
546
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZUVsZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZWxlbWVudHMvQmFzZUVsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUdMLGFBQWEsRUFRZCxNQUFNLDRCQUE0QixDQUFDO0FBRXBDLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHbkU7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxPQUFlO0lBQzlDLHlEQUF5RDtJQUN6RCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7SUFFeEUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsNkNBQTZDO1FBQzdDLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFBRSxLQUFLLEdBQUcsR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7SUFFL0QsZ0RBQWdEO0lBQ2hELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzlELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzlELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRTlELE9BQU8sR0FBRyxlQUFlLElBQUksZUFBZSxJQUFJLGVBQWUsR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUM3RSxDQUFDO0FBRUQsTUFBTSxPQUFnQixXQUFXO0lBQy9CLFdBQVc7SUFDSixFQUFFLENBQVM7SUFDWCxJQUFJLENBQWM7SUFDbEIsT0FBTyxDQUFTO0lBRXZCLFdBQVc7SUFDSixRQUFRLENBQW1CO0lBRWxDLDBDQUEwQztJQUMxQyxpRkFBaUY7SUFDakYsK0VBQStFO0lBQy9FLGtFQUFrRTtJQUNsRSw0RkFBNEY7SUFDbEYsYUFBYSxHQUFXLEVBQUUsQ0FBQztJQUMzQixRQUFRLEdBQVcsRUFBRSxDQUFDO0lBRWhDLElBQVcsWUFBWSxLQUFhLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDaEUsSUFBVyxZQUFZLENBQUMsS0FBYSxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUV0RSxJQUFXLE9BQU8sS0FBYSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3RELElBQVcsT0FBTyxDQUFDLEtBQWEsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFFNUQsV0FBVztJQUNKLFVBQVUsQ0FBZTtJQUN6QixVQUFVLENBQXVCO0lBQ2pDLE9BQU8sQ0FBa0I7SUFFaEMsaUJBQWlCO0lBQ1AsT0FBTyxHQUFrQixhQUFhLENBQUMsUUFBUSxDQUFDO0lBQ2hELFFBQVEsR0FBWSxLQUFLLENBQUM7SUFFcEMsWUFBWTtJQUNLLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztJQUU1QyxZQUNFLElBQWlCLEVBQ2pCLFdBQXNDLEVBQUUsRUFDeEMsZUFBZ0MsQ0FBRSw0QkFBNEI7O1FBRTlELHNFQUFzRTtRQUN0RSxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRTtZQUNuRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUUseURBQXlEO1NBQ2xGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3RFLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBRSxvRUFBb0U7UUFFbkgsb0NBQW9DO1FBQ3BDLE1BQU0sWUFBWSxHQUFRO1lBQ3hCLEdBQUcsVUFBVTtZQUNiLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFFLHFDQUFxQztTQUN2RCxDQUFDO1FBRUYsdUVBQXVFO1FBQ3ZFLGdGQUFnRjtRQUVoRiw4Q0FBOEM7UUFDOUMsSUFBSSxVQUFVLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUUsUUFBZ0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3hFLFlBQVksQ0FBQyxRQUFRLEdBQUksUUFBZ0IsQ0FBQyxRQUFRLENBQUM7UUFDckQsQ0FBQztRQUVELDJFQUEyRTtRQUMzRSwrRUFBK0U7UUFDL0UsSUFBSSxVQUFVLElBQUksUUFBUSxFQUFFLENBQUM7WUFDM0IsWUFBWSxDQUFDLFFBQVEsR0FBSSxRQUFnQixDQUFDLFFBQVEsQ0FBQztRQUNyRCxDQUFDO1FBQ0QsSUFBSSxVQUFVLElBQUksUUFBUSxFQUFFLENBQUM7WUFDM0IsWUFBWSxDQUFDLFFBQVEsR0FBSSxRQUFnQixDQUFDLFFBQVEsQ0FBQztRQUNyRCxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxZQUFZLENBQUM7UUFFN0IsK0JBQStCO1FBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDYixRQUFRLEVBQUUsQ0FBQztZQUNYLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLFdBQVcsRUFBRSxDQUFDO1lBQ2QsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFO1lBQ3pCLFVBQVUsRUFBRSxDQUFDO1lBQ2IsS0FBSyxFQUFFLFFBQVE7WUFDZixlQUFlLEVBQUUsRUFBRTtTQUNwQixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNPLFVBQVUsQ0FBQyxJQUFZO1FBQy9CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekMsTUFBTSxRQUFRLEdBQUcsSUFBSTthQUNsQixXQUFXLEVBQUU7YUFDYixVQUFVLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFFLDhDQUE4QzthQUM5RSxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUcsZ0NBQWdDO1FBQ25FLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUU3QixPQUFPLEdBQUcsUUFBUSxJQUFJLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksUUFBUTtRQUNiLE1BQU0sTUFBTSxHQUFzQixFQUFFLENBQUM7UUFDckMsTUFBTSxRQUFRLEdBQXdCLEVBQUUsQ0FBQztRQUN6QyxNQUFNLFdBQVcsR0FBYSxFQUFFLENBQUM7UUFFakMsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDYixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLENBQUMsQ0FBQztRQUMvRSxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQzFFLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ1osS0FBSyxFQUFFLHNCQUFzQjtnQkFDN0IsT0FBTyxFQUFFLG9DQUFvQztnQkFDN0MsUUFBUSxFQUFFLFFBQVE7YUFDbkIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELDJFQUEyRTtRQUMzRSxnRkFBZ0Y7UUFDaEYsMkZBQTJGO1FBQzNGLHlFQUF5RTtRQUN6RSx1RkFBdUY7UUFDdkYsd0VBQXdFO1FBQ3hFLE1BQU0sb0JBQW9CLEdBQUcsNERBQTRELENBQUM7UUFDMUYsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM3QyxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNWLEtBQUssRUFBRSxTQUFTO2dCQUNoQixPQUFPLEVBQUUsb1VBQW9VO2dCQUM3VSxJQUFJLEVBQUUsd0JBQXdCO2FBQy9CLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxzQkFBc0I7UUFDdEIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7b0JBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUM7d0JBQ1YsS0FBSyxFQUFFLGNBQWMsS0FBSyxPQUFPO3dCQUNqQyxPQUFPLEVBQUUsMkJBQTJCO3FCQUNyQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO29CQUMxQyxRQUFRLENBQUMsSUFBSSxDQUFDO3dCQUNaLEtBQUssRUFBRSxjQUFjLEtBQUssU0FBUzt3QkFDbkMsT0FBTyxFQUFFLGdDQUFnQzt3QkFDekMsUUFBUSxFQUFFLEtBQUs7cUJBQ2hCLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsOEJBQThCO1FBQzlCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMzRCxNQUFNLENBQUMsSUFBSSxDQUFDO29CQUNWLEtBQUssRUFBRSxrQkFBa0I7b0JBQ3pCLE9BQU8sRUFBRSxtQ0FBbUM7aUJBQzdDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxLQUFLLFNBQVM7Z0JBQ3JDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pFLE1BQU0sQ0FBQyxJQUFJLENBQUM7b0JBQ1YsS0FBSyxFQUFFLG9CQUFvQjtvQkFDM0IsT0FBTyxFQUFFLHFDQUFxQztpQkFDL0MsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFFRCxrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzRCxXQUFXLENBQUMsSUFBSSxDQUFDLGlEQUFpRCxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzFCLFdBQVcsQ0FBQyxJQUFJLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBRUQsT0FBTztZQUNMLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDMUIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDOUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDcEQsV0FBVyxFQUFFLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDOUQsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSSxlQUFlO1FBQ3BCLE1BQU0sSUFBSSxHQUFHO1lBQ1gsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ1gsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztTQUN0QixDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksU0FBUztRQUNkLDJEQUEyRDtRQUMzRCxtREFBbUQ7UUFDbkQsTUFBTSxXQUFXLEdBQXdCO1lBQ3ZDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRyw4QkFBOEI7WUFDakQsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQ3RCLENBQUM7UUFFRiwrRUFBK0U7UUFDL0UsZ0RBQWdEO1FBQ2hELElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsRCxXQUFXLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbkQsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO2dCQUNkLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRztnQkFDWixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7YUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDTixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzlDLFdBQVcsQ0FBQyxPQUFPLEdBQUc7Z0JBQ3BCLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVE7Z0JBQy9CLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVU7Z0JBQ25DLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVc7YUFDdEMsQ0FBQztRQUNKLENBQUM7UUFFRCwyQ0FBMkM7UUFDM0MsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTNELHlDQUF5QztRQUN6QywrRUFBK0U7UUFDL0UsSUFBSSxlQUF1QixDQUFDO1FBQzVCLElBQUksQ0FBQztZQUNILGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUM1QyxNQUFNLEVBQUUsSUFBSSxFQUFXLDRCQUE0QjtnQkFDbkQsUUFBUSxFQUFFLEtBQUssRUFBUSxpQkFBaUI7Z0JBQ3hDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBVSxtQkFBbUI7Z0JBQzFDLFdBQVcsRUFBRSxHQUFHLEVBQU8sZ0NBQWdDO2dCQUN2RCxXQUFXLEVBQUUsS0FBSyxFQUFLLDRCQUE0QjtnQkFDbkQsV0FBVyxFQUFFLEtBQUssQ0FBSyw0QkFBNEI7YUFDcEQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixtRUFBbUU7WUFDbkUsTUFBTSxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1lBQzlGLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFDL0gsQ0FBQztRQUVELHdFQUF3RTtRQUN4RSx5RkFBeUY7UUFDekYsSUFBSSxDQUFDO1lBQ0gsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRTtnQkFDdEMsV0FBVyxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsNkJBQTZCO2dCQUNyRCxlQUFlLEVBQUUsSUFBSTthQUN0QixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7WUFDekUsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUM1RyxDQUFDO1FBRUQsMEVBQTBFO1FBQzFFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUV0SCwrREFBK0Q7UUFDL0QsT0FBTyxRQUFRLGVBQWUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxPQUFPLEVBQUUsQ0FBQztJQUM3RCxDQUFDO0lBUUQ7OztPQUdHO0lBQ0ssZUFBZSxDQUFDLEdBQVE7UUFDOUIsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN0QyxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTyxHQUFHO2lCQUNQLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ3ZDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBRUQsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM1QixNQUFNLE9BQU8sR0FBUSxFQUFFLENBQUM7WUFDeEIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDL0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDakQsSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUM7Z0JBQzlCLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFdBQVcsQ0FBQyxJQUFZO1FBQzdCLElBQUksQ0FBQztZQUNILHlDQUF5QztZQUN6QyxNQUFNLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFFOUQsMkJBQTJCO1lBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbkQsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1lBQ25FLENBQUM7WUFFRCxvQkFBb0I7WUFDcEIsSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztZQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1lBRTlCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2Ysc0NBQXNDO1lBQ3RDLE1BQU0sWUFBWSxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1RSxNQUFNLFVBQVUsR0FBRyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFFcEUsTUFBTSxDQUFDLEtBQUssQ0FBQywrQkFBK0IsRUFBRTtnQkFDNUMsS0FBSyxFQUFFLFlBQVk7Z0JBQ25CLEtBQUssRUFBRSxVQUFVO2dCQUNqQixXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsOEJBQThCO2dCQUNuRSxXQUFXLEVBQUUsSUFBSSxDQUFDLElBQUk7YUFDdkIsQ0FBQyxDQUFDO1lBRUgsMENBQTBDO1lBQzFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxLQUFLLENBQUMsdUNBQXVDLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDMUYsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFLENBQUM7Z0JBQzNCLGdCQUFnQixDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDakMsQ0FBQztZQUNELE1BQU0sZ0JBQWdCLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNJLGVBQWUsQ0FBQyxRQUFnQixFQUFFLE9BQXlCO1FBQ2hFLHFEQUFxRDtRQUNyRCxNQUFNLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5RCxNQUFNLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDO1FBRTlELDZDQUE2QztRQUM3QyxlQUFlLENBQUMsZ0JBQWdCLENBQUM7WUFDL0IsSUFBSSxFQUFFLDJCQUEyQjtZQUNqQyxRQUFRLEVBQUUsS0FBSztZQUNmLE1BQU0sRUFBRSw2QkFBNkI7WUFDckMsT0FBTyxFQUFFLGtDQUFrQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDakUsY0FBYyxFQUFFO2dCQUNkLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDdEIsU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNsQixjQUFjLEVBQUUsUUFBUSxDQUFDLE1BQU07Z0JBQy9CLGdCQUFnQixFQUFFLENBQUMsZ0JBQWdCLENBQUMsT0FBTzthQUM1QztTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRztnQkFDYixRQUFRLEVBQUUsQ0FBQztnQkFDWCxVQUFVLEVBQUUsU0FBUztnQkFDckIsV0FBVyxFQUFFLENBQUM7Z0JBQ2QsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFO2dCQUN6QixVQUFVLEVBQUUsQ0FBQztnQkFDYixLQUFLLEVBQUUsUUFBUTtnQkFDZixlQUFlLEVBQUUsRUFBRTthQUNwQixDQUFDO1FBQ0osQ0FBQztRQUVELGdEQUFnRDtRQUNoRCxNQUFNLFlBQVksR0FBaUI7WUFDakMsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFO1lBQ3JCLFFBQVEsRUFBRSxrQkFBa0I7WUFDNUIsU0FBUyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQztZQUNwRCxjQUFjLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQztZQUNwRCxPQUFPO1lBQ1AsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQzdCLENBQUM7UUFFRixzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQ3BDLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFaEQsMkJBQTJCO1FBQzNCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3BFLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQzlGLE1BQU0sQ0FBQyxLQUFLLENBQUMsK0JBQStCLElBQUksQ0FBQyxvQkFBb0Isd0JBQXdCLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFHLENBQUM7UUFFRCx3Q0FBd0M7UUFDeEMsSUFBSSxZQUFZLENBQUMsY0FBYyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7O09BR0c7SUFDTyxnQkFBZ0IsQ0FBQyxRQUFnQjtRQUN6QyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFckMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEcsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFFekcsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDaEYsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFaEYsSUFBSSxhQUFhLEdBQUcsYUFBYTtZQUFFLE9BQU8sVUFBVSxDQUFDO1FBQ3JELElBQUksYUFBYSxHQUFHLGFBQWE7WUFBRSxPQUFPLFVBQVUsQ0FBQztRQUNyRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQ7OztPQUdHO0lBQ08sV0FBVyxDQUFDLFFBQWdCO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFckMsNEJBQTRCO1FBQzVCLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUNqRSxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0MsSUFBSSxNQUFNLElBQUksQ0FBQyxJQUFJLE1BQU0sSUFBSSxDQUFDO2dCQUFFLE9BQU8sTUFBTSxDQUFDO1FBQ2hELENBQUM7UUFFRCx1QkFBdUI7UUFDdkIsSUFBSSxTQUFTLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDN0IsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO2dCQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZFLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztnQkFBRSxPQUFPLENBQUMsQ0FBQztZQUNyRSxPQUFPLENBQUMsQ0FBQztRQUNYLENBQUM7YUFBTSxJQUFJLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNwQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7Z0JBQUUsT0FBTyxDQUFDLENBQUM7WUFDcEUsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzlELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztRQUVELE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVTtJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDTyxnQkFBZ0IsQ0FBQyxTQUFpQjtRQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBRTFCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUMvQixDQUFDO2FBQU0sQ0FBQztZQUNOLDRCQUE0QjtZQUM1QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7WUFDbkYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDbkUsQ0FBQztRQUVELHlCQUF5QjtRQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUUzRSxvREFBb0Q7UUFDcEQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JFLE1BQU0sZ0JBQWdCLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5RCxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzVFLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFNUUsSUFBSSxhQUFhLEdBQUcsYUFBYSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQztRQUNuQyxDQUFDO2FBQU0sSUFBSSxhQUFhLEdBQUcsYUFBYSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQztRQUNuQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUztRQUNkLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLE1BQU07UUFDZixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLGNBQWM7UUFDekIsTUFBTSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsSUFBSSxDQUFDLElBQUksYUFBYSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbEYsSUFBSSxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDO0lBQzFDLENBQUM7SUFFTSxLQUFLLENBQUMsUUFBUTtRQUNuQixJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxhQUFhLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBQ0Qsc0VBQXNFO1FBQ3RFLElBQUksQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztJQUN0QyxDQUFDO0lBRU0sS0FBSyxDQUFDLGFBQWE7UUFDeEIsTUFBTSxDQUFDLEtBQUssQ0FBQywyQkFBMkIsSUFBSSxDQUFDLElBQUksYUFBYSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVNLEtBQUssQ0FBQyxVQUFVO1FBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLGFBQWEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQztRQUMxQyw0Q0FBNEM7UUFDNUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7T0FFRztJQUNPLFNBQVM7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxPQUFPO1FBQ1osT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVM7UUFDZCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJhc2UgYWJzdHJhY3QgY2xhc3MgaW1wbGVtZW50aW5nIElFbGVtZW50IGludGVyZmFjZS5cbiAqIFByb3ZpZGVzIGNvbW1vbiBmdW5jdGlvbmFsaXR5IHRoYXQgYWxsIGVsZW1lbnQgdHlwZXMgY2FuIGV4dGVuZC5cbiAqL1xuXG5pbXBvcnQge1xuICBJRWxlbWVudCxcbiAgSUVsZW1lbnRNZXRhZGF0YSxcbiAgRWxlbWVudFN0YXR1cyxcbiAgRWxlbWVudFJhdGluZ3MsXG4gIFJlZmVyZW5jZSxcbiAgRWxlbWVudFZhbGlkYXRpb25SZXN1bHQsXG4gIFZhbGlkYXRpb25FcnJvcixcbiAgVmFsaWRhdGlvbldhcm5pbmcsXG4gIEZlZWRiYWNrQ29udGV4dCxcbiAgVXNlckZlZWRiYWNrXG59IGZyb20gJy4uL3R5cGVzL2VsZW1lbnRzL2luZGV4LmpzJztcbmltcG9ydCB7IEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vcG9ydGZvbGlvL3R5cGVzLmpzJztcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0ICogYXMgeWFtbCBmcm9tICdqcy15YW1sJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgeyBTZWN1cmVZYW1sUGFyc2VyIH0gZnJvbSAnLi4vc2VjdXJpdHkvc2VjdXJlWWFtbFBhcnNlci5qcyc7XG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9NZXRhZGF0YVNlcnZpY2UuanMnO1xuXG4vKipcbiAqIE5vcm1hbGl6ZXMgdmVyc2lvbiBzdHJpbmdzIHRvIGZ1bGwgc2VtdmVyIGZvcm1hdCAoWC5ZLlopXG4gKiBUaGlzIGhlbHBzIG1haW50YWluIGNvbnNpc3RlbmN5IHdoaWxlIGFjY2VwdGluZyBmbGV4aWJsZSBpbnB1dCBmb3JtYXRzXG4gKiBcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gVGhlIHZlcnNpb24gc3RyaW5nIHRvIG5vcm1hbGl6ZVxuICogQHJldHVybnMgTm9ybWFsaXplZCB2ZXJzaW9uIHN0cmluZyBpbiBYLlkuWiBmb3JtYXQgd2l0aCBsZWFkaW5nIHplcm9zIHJlbW92ZWRcbiAqIFxuICogQGV4YW1wbGVcbiAqIG5vcm1hbGl6ZVZlcnNpb24oXCIxXCIpICAgICAgICAvLyBcIjEuMC4wXCJcbiAqIG5vcm1hbGl6ZVZlcnNpb24oXCIxLjJcIikgICAgICAvLyBcIjEuMi4wXCJcbiAqIG5vcm1hbGl6ZVZlcnNpb24oXCIxLjIuM1wiKSAgICAvLyBcIjEuMi4zXCJcbiAqIG5vcm1hbGl6ZVZlcnNpb24oXCIxLjAtYmV0YVwiKSAvLyBcIjEuMC4wLWJldGFcIlxuICogbm9ybWFsaXplVmVyc2lvbihcIjAxLjAyLjAzXCIpIC8vIFwiMS4yLjNcIiAoc3RyaXBzIGxlYWRpbmcgemVyb3MpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVWZXJzaW9uKHZlcnNpb246IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIEV4dHJhY3QgYmFzZSB2ZXJzaW9uIGFuZCBhbnkgcHJlcmVsZWFzZS9idWlsZCBtZXRhZGF0YVxuICBjb25zdCBtYXRjaCA9IHZlcnNpb24ubWF0Y2goL14oXFxkKykoPzpcXC4oXFxkKykpPyg/OlxcLihcXGQrKSk/KFstK10uKyk/JC8pO1xuICBcbiAgaWYgKCFtYXRjaCkge1xuICAgIC8vIFJldHVybiBhcy1pcyBpZiBub3QgYSB2YWxpZCB2ZXJzaW9uIGZvcm1hdFxuICAgIHJldHVybiB2ZXJzaW9uO1xuICB9XG4gIFxuICBjb25zdCBbLCBtYWpvciwgbWlub3IgPSAnMCcsIHBhdGNoID0gJzAnLCBzdWZmaXggPSAnJ10gPSBtYXRjaDtcbiAgXG4gIC8vIFN0cmlwIGxlYWRpbmcgemVyb3MgYnV0IHByZXNlcnZlIFwiMFwiIGFzIHZhbGlkXG4gIGNvbnN0IG5vcm1hbGl6ZWRNYWpvciA9IE51bWJlci5wYXJzZUludChtYWpvciwgMTApLnRvU3RyaW5nKCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRNaW5vciA9IE51bWJlci5wYXJzZUludChtaW5vciwgMTApLnRvU3RyaW5nKCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRQYXRjaCA9IE51bWJlci5wYXJzZUludChwYXRjaCwgMTApLnRvU3RyaW5nKCk7XG4gIFxuICByZXR1cm4gYCR7bm9ybWFsaXplZE1ham9yfS4ke25vcm1hbGl6ZWRNaW5vcn0uJHtub3JtYWxpemVkUGF0Y2h9JHtzdWZmaXh9YDtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VFbGVtZW50IGltcGxlbWVudHMgSUVsZW1lbnQge1xuICAvLyBJZGVudGl0eVxuICBwdWJsaWMgaWQ6IHN0cmluZztcbiAgcHVibGljIHR5cGU6IEVsZW1lbnRUeXBlO1xuICBwdWJsaWMgdmVyc2lvbjogc3RyaW5nO1xuICBcbiAgLy8gTWV0YWRhdGFcbiAgcHVibGljIG1ldGFkYXRhOiBJRWxlbWVudE1ldGFkYXRhO1xuICBcbiAgLy8gRHVhbC1maWVsZCBzZW1hbnRpYyBhcmNoaXRlY3R1cmUgKHYyLjApXG4gIC8vIEFsbCBlbGVtZW50IHR5cGVzIGluaGVyaXQgdGhlc2U7IHN1YmNsYXNzZXMgbWF5IG92ZXJyaWRlIHdpdGggcmljaGVyIGJlaGF2aW9yLlxuICAvLyAtIGluc3RydWN0aW9uczogYmVoYXZpb3JhbCBkaXJlY3RpdmVzIChjb21tYW5kIHZvaWNlLCBpbXBlcmF0aXZlcyB0byBmb2xsb3cpXG4gIC8vIC0gY29udGVudDogcmVmZXJlbmNlIG1hdGVyaWFsIChpbmZvcm1hdGlvbmFsIGRhdGEgdG8gZHJhdyBmcm9tKVxuICAvLyBEZWNsYXJlZCBhcyBhY2Nlc3NvciBwYWlycyBzbyBzdWJjbGFzc2VzIChlLmcuLCBNZW1vcnkpIGNhbiBvdmVycmlkZSB3aXRoIGN1c3RvbSBnZXR0ZXJzLlxuICBwcm90ZWN0ZWQgX2luc3RydWN0aW9uczogc3RyaW5nID0gJyc7XG4gIHByb3RlY3RlZCBfY29udGVudDogc3RyaW5nID0gJyc7XG5cbiAgcHVibGljIGdldCBpbnN0cnVjdGlvbnMoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX2luc3RydWN0aW9uczsgfVxuICBwdWJsaWMgc2V0IGluc3RydWN0aW9ucyh2YWx1ZTogc3RyaW5nKSB7IHRoaXMuX2luc3RydWN0aW9ucyA9IHZhbHVlOyB9XG5cbiAgcHVibGljIGdldCBjb250ZW50KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9jb250ZW50OyB9XG4gIHB1YmxpYyBzZXQgY29udGVudCh2YWx1ZTogc3RyaW5nKSB7IHRoaXMuX2NvbnRlbnQgPSB2YWx1ZTsgfVxuXG4gIC8vIEZlYXR1cmVzXG4gIHB1YmxpYyByZWZlcmVuY2VzPzogUmVmZXJlbmNlW107XG4gIHB1YmxpYyBleHRlbnNpb25zPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgcHVibGljIHJhdGluZ3M/OiBFbGVtZW50UmF0aW5ncztcbiAgXG4gIC8vIEludGVybmFsIHN0YXRlXG4gIHByb3RlY3RlZCBfc3RhdHVzOiBFbGVtZW50U3RhdHVzID0gRWxlbWVudFN0YXR1cy5JTkFDVElWRTtcbiAgcHJvdGVjdGVkIF9pc0RpcnR5OiBib29sZWFuID0gZmFsc2U7XG4gIFxuICAvLyBDb25zdGFudHNcbiAgcHJpdmF0ZSByZWFkb25seSBNQVhfRkVFREJBQ0tfSElTVE9SWSA9IDEwMDtcbiAgXG4gIGNvbnN0cnVjdG9yKFxuICAgIHR5cGU6IEVsZW1lbnRUeXBlLFxuICAgIG1ldGFkYXRhOiBQYXJ0aWFsPElFbGVtZW50TWV0YWRhdGE+ID0ge30sXG4gICAgbWV0YWRhdGFTZXJ2aWNlOiBNZXRhZGF0YVNlcnZpY2UgIC8vIFJlcXVpcmVkIGluamVjdGlvbiBmb3IgRElcbiAgKSB7XG4gICAgLy8gTm9ybWFsaXplIGNvbW1vbiBtZXRhZGF0YSB2aWEgc2VydmljZSAoc2tpcCB0eXBlLXNwZWNpZmljIGRlZmF1bHRzKVxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBtZXRhZGF0YVNlcnZpY2Uubm9ybWFsaXplTWV0YWRhdGEobWV0YWRhdGEsIHR5cGUsIHtcbiAgICAgIHNraXBUeXBlRGVmYXVsdHM6IHRydWUgIC8vIExldCBlbGVtZW50LXNwZWNpZmljIGNsYXNzZXMgaGFuZGxlIHRoZWlyIG93biBkZWZhdWx0c1xuICAgIH0pO1xuXG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLmlkID0gbWV0YWRhdGEubmFtZSA/IHRoaXMuZ2VuZXJhdGVJZChub3JtYWxpemVkLm5hbWUpIDogdXVpZHY0KCk7XG4gICAgdGhpcy52ZXJzaW9uID0gbm9ybWFsaXplZC52ZXJzaW9uIHx8ICcxLjAuMCc7ICAvLyBHdWFyYW50ZWVkIGJ5IG5vcm1hbGl6ZU1ldGFkYXRhLCBidXQgYWRkIGZhbGxiYWNrIGZvciB0eXBlIHNhZmV0eVxuXG4gICAgLy8gU3ByZWFkIG5vcm1hbGl6ZWQgY29tbW9uIG1ldGFkYXRhXG4gICAgY29uc3QgYmFzZU1ldGFkYXRhOiBhbnkgPSB7XG4gICAgICAuLi5ub3JtYWxpemVkLFxuICAgICAgdHlwZTogdGhpcy50eXBlICAvLyBFbnN1cmUgdHlwZSBmaWVsZCBpcyBzZXQgY29ycmVjdGx5XG4gICAgfTtcblxuICAgIC8vIFByZXNlcnZlIGVsZW1lbnQtc3BlY2lmaWMgZmllbGRzIHRoYXQgTWV0YWRhdGFTZXJ2aWNlIGRvZXNuJ3QgaGFuZGxlXG4gICAgLy8gVGhlc2UgYXJlIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZCB2aWEgdGhlIHNwcmVhZCBvcGVyYXRvciBpbiBNZXRhZGF0YVNlcnZpY2VcblxuICAgIC8vIFByZXNlcnZlIHRyaWdnZXJzIChQZXJzb25hL01lbW9yeS1zcGVjaWZpYylcbiAgICBpZiAoJ3RyaWdnZXJzJyBpbiBtZXRhZGF0YSAmJiBBcnJheS5pc0FycmF5KChtZXRhZGF0YSBhcyBhbnkpLnRyaWdnZXJzKSkge1xuICAgICAgYmFzZU1ldGFkYXRhLnRyaWdnZXJzID0gKG1ldGFkYXRhIGFzIGFueSkudHJpZ2dlcnM7XG4gICAgfVxuXG4gICAgLy8gRklYICMxNDMwOiBQcmVzZXJ2ZSBNZW1vcnktc3BlY2lmaWMgbWV0YWRhdGEgZmllbGRzIChhdXRvTG9hZCwgcHJpb3JpdHkpXG4gICAgLy8gVGhlc2UgYXJlIGRlZmluZWQgaW4gTWVtb3J5TWV0YWRhdGEgYnV0IG5lZWQgdG8gYmUgcHJlc2VydmVkIGluIGJhc2VNZXRhZGF0YVxuICAgIGlmICgnYXV0b0xvYWQnIGluIG1ldGFkYXRhKSB7XG4gICAgICBiYXNlTWV0YWRhdGEuYXV0b0xvYWQgPSAobWV0YWRhdGEgYXMgYW55KS5hdXRvTG9hZDtcbiAgICB9XG4gICAgaWYgKCdwcmlvcml0eScgaW4gbWV0YWRhdGEpIHtcbiAgICAgIGJhc2VNZXRhZGF0YS5wcmlvcml0eSA9IChtZXRhZGF0YSBhcyBhbnkpLnByaW9yaXR5O1xuICAgIH1cblxuICAgIHRoaXMubWV0YWRhdGEgPSBiYXNlTWV0YWRhdGE7XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBvcHRpb25hbCBmZWF0dXJlc1xuICAgIHRoaXMucmVmZXJlbmNlcyA9IFtdO1xuICAgIHRoaXMuZXh0ZW5zaW9ucyA9IHt9O1xuICAgIHRoaXMucmF0aW5ncyA9IHtcbiAgICAgIGFpUmF0aW5nOiAwLFxuICAgICAgdXNlclJhdGluZzogdW5kZWZpbmVkLFxuICAgICAgcmF0aW5nQ291bnQ6IDAsXG4gICAgICBsYXN0RXZhbHVhdGVkOiBuZXcgRGF0ZSgpLFxuICAgICAgY29uZmlkZW5jZTogMCxcbiAgICAgIHRyZW5kOiAnc3RhYmxlJyxcbiAgICAgIGZlZWRiYWNrSGlzdG9yeTogW11cbiAgICB9O1xuICB9XG4gIFxuICAvKipcbiAgICogR2VuZXJhdGUgYSB1bmlxdWUgSUQgZm9yIHRoZSBlbGVtZW50IGJhc2VkIG9uIGl0cyBuYW1lIGFuZCB0eXBlLlxuICAgKiBGb3JtYXQ6IHR5cGVfbmFtZS1zbHVnX3RpbWVzdGFtcFxuICAgKi9cbiAgcHJvdGVjdGVkIGdlbmVyYXRlSWQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlU2x1ZyA9IHRoaXMudHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IG5hbWVTbHVnID0gbmFtZVxuICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgIC5yZXBsYWNlQWxsKC9bXmEtejAtOV0rL2csICctJykgIC8vIFJlcGxhY2Ugbm9uLWFscGhhbnVtZXJpYyBjaGFycyB3aXRoIGh5cGhlbnNcbiAgICAgIC5yZXBsYWNlQWxsKC8oXi0pfCgtJCkvZywgJycpOyAgIC8vIFRyaW0gbGVhZGluZy90cmFpbGluZyBoeXBoZW5zXG4gICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICBcbiAgICByZXR1cm4gYCR7dHlwZVNsdWd9XyR7bmFtZVNsdWd9XyR7dGltZXN0YW1wfWA7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDb3JlIHZhbGlkYXRpb24gdGhhdCBhbGwgZWxlbWVudHMgc2hhcmUuXG4gICAqIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIGFuZCBjYWxsIHN1cGVyLnZhbGlkYXRlKCkgZmlyc3QuXG4gICAqL1xuICBwdWJsaWMgdmFsaWRhdGUoKTogRWxlbWVudFZhbGlkYXRpb25SZXN1bHQge1xuICAgIGNvbnN0IGVycm9yczogVmFsaWRhdGlvbkVycm9yW10gPSBbXTtcbiAgICBjb25zdCB3YXJuaW5nczogVmFsaWRhdGlvbldhcm5pbmdbXSA9IFtdO1xuICAgIGNvbnN0IHN1Z2dlc3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAgIFxuICAgIC8vIFZhbGlkYXRlIHJlcXVpcmVkIGZpZWxkc1xuICAgIGlmICghdGhpcy5pZCkge1xuICAgICAgZXJyb3JzLnB1c2goeyBmaWVsZDogJ2lkJywgbWVzc2FnZTogJ0VsZW1lbnQgSUQgaXMgcmVxdWlyZWQnIH0pO1xuICAgIH1cbiAgICBcbiAgICBpZiAoIXRoaXMubWV0YWRhdGEubmFtZSB8fCB0aGlzLm1ldGFkYXRhLm5hbWUudHJpbSgpID09PSAnJykge1xuICAgICAgZXJyb3JzLnB1c2goeyBmaWVsZDogJ21ldGFkYXRhLm5hbWUnLCBtZXNzYWdlOiAnRWxlbWVudCBuYW1lIGlzIHJlcXVpcmVkJyB9KTtcbiAgICB9XG4gICAgXG4gICAgaWYgKCF0aGlzLm1ldGFkYXRhLmRlc2NyaXB0aW9uIHx8IHRoaXMubWV0YWRhdGEuZGVzY3JpcHRpb24udHJpbSgpID09PSAnJykge1xuICAgICAgd2FybmluZ3MucHVzaCh7IFxuICAgICAgICBmaWVsZDogJ21ldGFkYXRhLmRlc2NyaXB0aW9uJywgXG4gICAgICAgIG1lc3NhZ2U6ICdFbGVtZW50IGRlc2NyaXB0aW9uIGlzIHJlY29tbWVuZGVkJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgLy8gVmFsaWRhdGUgdmVyc2lvbiBmb3JtYXQgLSBtb3JlIGZsZXhpYmxlIHRvIHN1cHBvcnQgTExNLWdlbmVyYXRlZCBjb250ZW50XG4gICAgLy8gRklYIGZvciBJc3N1ZSAjOTM1OiBBbGxvdyBmbGV4aWJsZSB2ZXJzaW9uIGZvcm1hdHMgbGlrZSBcIjEuMFwiLCBcIjEuMVwiLCBcIjIuMC4wXCJcbiAgICAvLyBQcmV2aW91c2x5OiBTdHJpY3Qgc2VtdmVyIHJlZ2V4IHJlcXVpcmluZyBYLlkuWiBmb3JtYXQgY2F1c2VkIHNraWxscyBhY3RpdmF0aW9uIGZhaWx1cmVzXG4gICAgLy8gTm93OiBBY2NlcHQgY29tbW9uIHZlcnNpb24gcGF0dGVybnMgdGhhdCBMTE1zIGFuZCBodW1hbnMgbmF0dXJhbGx5IHVzZVxuICAgIC8vIE5vdGU6IExlYWRpbmcgemVyb3MgYXJlIGFsbG93ZWQgKGUuZy4sIFwiMDEuMDIuMDNcIikgYnV0IHdpbGwgYmUgbm9ybWFsaXplZCB0byBcIjEuMi4zXCJcbiAgICAvLyBTZWN1cml0eTogTm8gaW5qZWN0aW9uIHJpc2sgYXMgdmVyc2lvbiBpcyBqdXN0IG1ldGFkYXRhLCBub3QgZXhlY3V0ZWRcbiAgICBjb25zdCBmbGV4aWJsZVZlcnNpb25SZWdleCA9IC9eXFxkKyhcXC5cXGQrKT8oXFwuXFxkKyk/KC1bYS16QS1aMC05Li1dKyk/KFxcK1thLXpBLVowLTkuLV0rKT8kLztcbiAgICBpZiAoIWZsZXhpYmxlVmVyc2lvblJlZ2V4LnRlc3QodGhpcy52ZXJzaW9uKSkge1xuICAgICAgZXJyb3JzLnB1c2goeyBcbiAgICAgICAgZmllbGQ6ICd2ZXJzaW9uJywgXG4gICAgICAgIG1lc3NhZ2U6ICdWZXJzaW9uIG11c3Qgc3RhcnQgd2l0aCBudW1iZXJzIGluIGZvcm1hdDogTUFKT1JbLk1JTk9SXVsuUEFUQ0hdWy1QUkVSRUxFQVNFXVsrQlVJTERdLiBWYWxpZCBleGFtcGxlczogXCIxXCIsIFwiMS4wXCIsIFwiMS4wLjBcIiwgXCIyLjFcIiwgXCIxLjAuMC1iZXRhXCIsIFwiMS4wLjAtYWxwaGEuMVwiLCBcIjEuMC4wK2J1aWxkMTIzXCIuIFRoZSBtYWpvciB2ZXJzaW9uIGlzIHJlcXVpcmVkLCBtaW5vciBhbmQgcGF0Y2ggYXJlIG9wdGlvbmFsLiBOb3RlOiBMZWFkaW5nIHplcm9zIChlLmcuLCBcIjAxLjAyXCIpIGFyZSBhY2NlcHRlZCBidXQgd2lsbCBiZSBub3JtYWxpemVkIHRvIFwiMS4yXCIuJyxcbiAgICAgICAgY29kZTogJ0lOVkFMSURfVkVSU0lPTl9GT1JNQVQnXG4gICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgLy8gVmFsaWRhdGUgcmVmZXJlbmNlc1xuICAgIGlmICh0aGlzLnJlZmVyZW5jZXMpIHtcbiAgICAgIHRoaXMucmVmZXJlbmNlcy5mb3JFYWNoKChyZWYsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmICghcmVmLnVyaSB8fCByZWYudXJpLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgICBlcnJvcnMucHVzaCh7IFxuICAgICAgICAgICAgZmllbGQ6IGByZWZlcmVuY2VzWyR7aW5kZXh9XS51cmlgLCBcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdSZWZlcmVuY2UgVVJJIGlzIHJlcXVpcmVkJyBcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlZi50aXRsZSB8fCByZWYudGl0bGUudHJpbSgpID09PSAnJykge1xuICAgICAgICAgIHdhcm5pbmdzLnB1c2goeyBcbiAgICAgICAgICAgIGZpZWxkOiBgcmVmZXJlbmNlc1ske2luZGV4fV0udGl0bGVgLCBcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdSZWZlcmVuY2UgdGl0bGUgaXMgcmVjb21tZW5kZWQnLFxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdsb3cnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICAvLyBWYWxpZGF0ZSByYXRpbmdzIGlmIHByZXNlbnRcbiAgICBpZiAodGhpcy5yYXRpbmdzKSB7XG4gICAgICBpZiAodGhpcy5yYXRpbmdzLmFpUmF0aW5nIDwgMCB8fCB0aGlzLnJhdGluZ3MuYWlSYXRpbmcgPiA1KSB7XG4gICAgICAgIGVycm9ycy5wdXNoKHsgXG4gICAgICAgICAgZmllbGQ6ICdyYXRpbmdzLmFpUmF0aW5nJywgXG4gICAgICAgICAgbWVzc2FnZTogJ0FJIHJhdGluZyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNScgXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucmF0aW5ncy51c2VyUmF0aW5nICE9PSB1bmRlZmluZWQgJiYgXG4gICAgICAgICAgKHRoaXMucmF0aW5ncy51c2VyUmF0aW5nIDwgMCB8fCB0aGlzLnJhdGluZ3MudXNlclJhdGluZyA+IDUpKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKHsgXG4gICAgICAgICAgZmllbGQ6ICdyYXRpbmdzLnVzZXJSYXRpbmcnLCBcbiAgICAgICAgICBtZXNzYWdlOiAnVXNlciByYXRpbmcgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDUnIFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gQWRkIHN1Z2dlc3Rpb25zXG4gICAgaWYgKCF0aGlzLm1ldGFkYXRhLnRhZ3MgfHwgdGhpcy5tZXRhZGF0YS50YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgc3VnZ2VzdGlvbnMucHVzaCgnQ29uc2lkZXIgYWRkaW5nIHRhZ3MgdG8gaW1wcm92ZSBkaXNjb3ZlcmFiaWxpdHknKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKCF0aGlzLm1ldGFkYXRhLmF1dGhvcikge1xuICAgICAgc3VnZ2VzdGlvbnMucHVzaCgnQ29uc2lkZXIgYWRkaW5nIGF1dGhvciBpbmZvcm1hdGlvbicpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgdmFsaWQ6IGVycm9ycy5sZW5ndGggPT09IDAsXG4gICAgICBlcnJvcnM6IGVycm9ycy5sZW5ndGggPiAwID8gZXJyb3JzIDogdW5kZWZpbmVkLFxuICAgICAgd2FybmluZ3M6IHdhcm5pbmdzLmxlbmd0aCA+IDAgPyB3YXJuaW5ncyA6IHVuZGVmaW5lZCxcbiAgICAgIHN1Z2dlc3Rpb25zOiBzdWdnZXN0aW9ucy5sZW5ndGggPiAwID8gc3VnZ2VzdGlvbnMgOiB1bmRlZmluZWRcbiAgICB9O1xuICB9XG4gIFxuICAvKipcbiAgICogU2VyaWFsaXplIHRvIEpTT04gZm9ybWF0IGZvciBpbnRlcm5hbCB1c2UgYW5kIHRlc3RpbmcuXG4gICAqIE1haW50YWlucyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggZXhpc3RpbmcgdGVzdHMuXG4gICAqL1xuICBwdWJsaWMgc2VyaWFsaXplVG9KU09OKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgdmVyc2lvbjogdGhpcy52ZXJzaW9uLFxuICAgICAgbWV0YWRhdGE6IHRoaXMubWV0YWRhdGEsXG4gICAgICByZWZlcmVuY2VzOiB0aGlzLnJlZmVyZW5jZXMsXG4gICAgICBleHRlbnNpb25zOiB0aGlzLmV4dGVuc2lvbnMsXG4gICAgICByYXRpbmdzOiB0aGlzLnJhdGluZ3NcbiAgICB9O1xuICAgIFxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHNlcmlhbGl6YXRpb24gdG8gbWFya2Rvd24gd2l0aCBZQU1MIGZyb250bWF0dGVyLlxuICAgKiBVc2VzIGpzLXlhbWwgZm9yIHNlY3VyZSBZQU1MIGdlbmVyYXRpb24gdG8gcHJldmVudCBpbmplY3Rpb24gYXR0YWNrcy5cbiAgICogRklYOiBDaGFuZ2VkIGZyb20gSlNPTiB0byBwcm9wZXIgbWFya2Rvd24gZm9ybWF0IGZvciBHaXRIdWIgcG9ydGZvbGlvIHN0b3JhZ2UuXG4gICAqIFRoaXMgZW5zdXJlcyBlbGVtZW50cyBhcmUgcmVhZGFibGUgb24gR2l0SHViIGFuZCBjb21wYXRpYmxlIHdpdGggY29sbGVjdGlvbiB3b3JrZmxvdy5cbiAgICovXG4gIHB1YmxpYyBzZXJpYWxpemUoKTogc3RyaW5nIHtcbiAgICAvLyBCdWlsZCBZQU1MIGZyb250bWF0dGVyIHN0YXJ0aW5nIHdpdGggYWxsIG1ldGFkYXRhIGZpZWxkc1xuICAgIC8vIFRoaXMgZW5zdXJlcyBzdWJjbGFzc2VzIGNhbiBhZGQgdGhlaXIgb3duIGZpZWxkc1xuICAgIGNvbnN0IGZyb250bWF0dGVyOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xuICAgICAgLi4udGhpcy5tZXRhZGF0YSwgIC8vIEluY2x1ZGUgYWxsIG1ldGFkYXRhIGZpZWxkc1xuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgdmVyc2lvbjogdGhpcy52ZXJzaW9uXG4gICAgfTtcbiAgICBcbiAgICAvLyBOb3RlOiBtZXRhZGF0YSBhbHJlYWR5IGluY2x1ZGVzIG5hbWUsIGRlc2NyaXB0aW9uLCBhdXRob3IsIGNyZWF0ZWQsIG1vZGlmaWVkXG4gICAgLy8gYW5kIGFueSBhZGRpdGlvbmFsIGZpZWxkcyBhZGRlZCBieSBzdWJjbGFzc2VzXG4gICAgaWYgKHRoaXMucmVmZXJlbmNlcyAmJiB0aGlzLnJlZmVyZW5jZXMubGVuZ3RoID4gMCkge1xuICAgICAgZnJvbnRtYXR0ZXIucmVmZXJlbmNlcyA9IHRoaXMucmVmZXJlbmNlcy5tYXAocmVmID0+ICh7XG4gICAgICAgIHR5cGU6IHJlZi50eXBlLFxuICAgICAgICB1cmk6IHJlZi51cmksXG4gICAgICAgIHRpdGxlOiByZWYudGl0bGVcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucmF0aW5ncyAmJiB0aGlzLnJhdGluZ3MuYWlSYXRpbmcgPiAwKSB7XG4gICAgICBmcm9udG1hdHRlci5yYXRpbmdzID0ge1xuICAgICAgICBhaVJhdGluZzogdGhpcy5yYXRpbmdzLmFpUmF0aW5nLFxuICAgICAgICB1c2VyUmF0aW5nOiB0aGlzLnJhdGluZ3MudXNlclJhdGluZyxcbiAgICAgICAgcmF0aW5nQ291bnQ6IHRoaXMucmF0aW5ncy5yYXRpbmdDb3VudFxuICAgICAgfTtcbiAgICB9XG4gICAgXG4gICAgLy8gUmVtb3ZlIHVuZGVmaW5lZC9udWxsIHZhbHVlcyByZWN1cnNpdmVseVxuICAgIGNvbnN0IGNsZWFuRnJvbnRtYXR0ZXIgPSB0aGlzLmRlZXBDbGVhbk9iamVjdChmcm9udG1hdHRlcik7XG4gICAgXG4gICAgLy8gVXNlIGpzLXlhbWwgZm9yIHNlY3VyZSBZQU1MIGdlbmVyYXRpb25cbiAgICAvLyBUaGlzIHByZXZlbnRzIFlBTUwgaW5qZWN0aW9uIGF0dGFja3MgYW5kIGhhbmRsZXMgc3BlY2lhbCBjaGFyYWN0ZXJzIHByb3Blcmx5XG4gICAgbGV0IHlhbWxGcm9udG1hdHRlcjogc3RyaW5nO1xuICAgIHRyeSB7XG4gICAgICB5YW1sRnJvbnRtYXR0ZXIgPSB5YW1sLmR1bXAoY2xlYW5Gcm9udG1hdHRlciwge1xuICAgICAgICBub1JlZnM6IHRydWUsICAgICAgICAgIC8vIERvbid0IHVzZSBZQU1MIHJlZmVyZW5jZXNcbiAgICAgICAgc29ydEtleXM6IGZhbHNlLCAgICAgICAvLyBLZWVwIG91ciBvcmRlclxuICAgICAgICBsaW5lV2lkdGg6IC0xLCAgICAgICAgIC8vIERvbid0IHdyYXAgbGluZXNcbiAgICAgICAgcXVvdGluZ1R5cGU6ICdcIicsICAgICAgLy8gVXNlIGRvdWJsZSBxdW90ZXMgd2hlbiBuZWVkZWRcbiAgICAgICAgZm9yY2VRdW90ZXM6IGZhbHNlLCAgICAvLyBPbmx5IHF1b3RlIHdoZW4gbmVjZXNzYXJ5XG4gICAgICAgIHNraXBJbnZhbGlkOiBmYWxzZSAgICAgLy8gRG9uJ3Qgc2tpcCBpbnZhbGlkIHZhbHVlc1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIElmIFlBTUwgZ2VuZXJhdGlvbiBmYWlscywgbG9nIGFuZCB0aHJvdyBhIG1vcmUgaW5mb3JtYXRpdmUgZXJyb3JcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIFlBTUwgZnJvbnRtYXR0ZXInLCB7IGVycm9yLCBmcm9udG1hdHRlcjogY2xlYW5Gcm9udG1hdHRlciB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNlcmlhbGl6ZSBlbGVtZW50IG1ldGFkYXRhIHRvIFlBTUw6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YCk7XG4gICAgfVxuICAgIFxuICAgIC8vIFZhbGlkYXRlIHRoZSBnZW5lcmF0ZWQgWUFNTCBjYW4gYmUgcGFyc2VkIGJhY2sgdXNpbmcgU2VjdXJlWWFtbFBhcnNlclxuICAgIC8vIEhJR0ggU0VWRVJJVFkgRklYOiBVc2UgU2VjdXJlWWFtbFBhcnNlciBpbnN0ZWFkIG9mIHlhbWwubG9hZCB0byBwcmV2ZW50IGNvZGUgZXhlY3V0aW9uXG4gICAgdHJ5IHtcbiAgICAgIFNlY3VyZVlhbWxQYXJzZXIucGFyc2UoeWFtbEZyb250bWF0dGVyLCB7XG4gICAgICAgIG1heFlhbWxTaXplOiA2NCAqIDEwMjQsIC8vIDY0S0IgbGltaXQgZm9yIGZyb250bWF0dGVyXG4gICAgICAgIHZhbGlkYXRlQ29udGVudDogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignR2VuZXJhdGVkIGludmFsaWQgWUFNTCcsIHsgZXJyb3IsIHlhbWw6IHlhbWxGcm9udG1hdHRlciB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgR2VuZXJhdGVkIFlBTUwgaXMgaW52YWxpZDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gKTtcbiAgICB9XG4gICAgXG4gICAgLy8gR2V0IGNvbnRlbnQgLSBzdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSB0aGlzIHRvIHByb3ZpZGUgYWN0dWFsIGNvbnRlbnRcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50ID8gdGhpcy5nZXRDb250ZW50KCkgOiBgIyAke3RoaXMubWV0YWRhdGEubmFtZX1cXG5cXG4ke3RoaXMubWV0YWRhdGEuZGVzY3JpcHRpb24gfHwgJyd9YDtcbiAgICBcbiAgICAvLyBUcmltIHRoZSBZQU1MIHRvIHJlbW92ZSB0cmFpbGluZyBuZXdsaW5lIHRoYXQgeWFtbC5kdW1wIGFkZHNcbiAgICByZXR1cm4gYC0tLVxcbiR7eWFtbEZyb250bWF0dGVyLnRyaW0oKX1cXG4tLS1cXG5cXG4ke2NvbnRlbnR9YDtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBlbGVtZW50IGNvbnRlbnQgZm9yIHNlcmlhbGl6YXRpb24uXG4gICAqIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgdG8gcHJvdmlkZSB0aGVpciBzcGVjaWZpYyBjb250ZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldENvbnRlbnQ/KCk6IHN0cmluZztcblxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgcmVtb3ZlIHVuZGVmaW5lZCBhbmQgbnVsbCB2YWx1ZXMgZnJvbSBhbiBvYmplY3QuXG4gICAqIFRoaXMgZW5zdXJlcyBZQU1MIHNlcmlhbGl6YXRpb24gZG9lc24ndCBmYWlsIG9uIHVuZGVmaW5lZCB2YWx1ZXMuXG4gICAqL1xuICBwcml2YXRlIGRlZXBDbGVhbk9iamVjdChvYmo6IGFueSk6IGFueSB7XG4gICAgaWYgKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICByZXR1cm4gb2JqXG4gICAgICAgIC5tYXAoaXRlbSA9PiB0aGlzLmRlZXBDbGVhbk9iamVjdChpdGVtKSlcbiAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0gIT09IHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBjbGVhbmVkOiBhbnkgPSB7fTtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICAgICAgY29uc3QgY2xlYW5lZFZhbHVlID0gdGhpcy5kZWVwQ2xlYW5PYmplY3QodmFsdWUpO1xuICAgICAgICBpZiAoY2xlYW5lZFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjbGVhbmVkW2tleV0gPSBjbGVhbmVkVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGVhbmVkO1xuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCBkZXNlcmlhbGl6YXRpb24gZnJvbSBKU09OLlxuICAgKiBTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSBmb3IgY3VzdG9tIGZvcm1hdHMuXG4gICAqL1xuICBwdWJsaWMgZGVzZXJpYWxpemUoZGF0YTogc3RyaW5nKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIE5vcm1hbGl6ZSBVbmljb2RlIGlucHV0IGJlZm9yZSBwYXJzaW5nXG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoZGF0YSk7XG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHZhbGlkYXRpb25SZXN1bHQubm9ybWFsaXplZENvbnRlbnQpO1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSByZXF1aXJlZCBmaWVsZHNcbiAgICAgIGlmICghcGFyc2VkLmlkIHx8ICFwYXJzZWQudHlwZSB8fCAhcGFyc2VkLm1ldGFkYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBlbGVtZW50IGRhdGE6IG1pc3NpbmcgcmVxdWlyZWQgZmllbGRzJyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFVwZGF0ZSBwcm9wZXJ0aWVzXG4gICAgICB0aGlzLmlkID0gcGFyc2VkLmlkO1xuICAgICAgdGhpcy50eXBlID0gcGFyc2VkLnR5cGU7XG4gICAgICB0aGlzLnZlcnNpb24gPSBwYXJzZWQudmVyc2lvbiB8fCAnMS4wLjAnO1xuICAgICAgdGhpcy5tZXRhZGF0YSA9IHBhcnNlZC5tZXRhZGF0YTtcbiAgICAgIHRoaXMucmVmZXJlbmNlcyA9IHBhcnNlZC5yZWZlcmVuY2VzIHx8IFtdO1xuICAgICAgdGhpcy5leHRlbnNpb25zID0gcGFyc2VkLmV4dGVuc2lvbnMgfHwge307XG4gICAgICB0aGlzLnJhdGluZ3MgPSBwYXJzZWQucmF0aW5ncztcbiAgICAgIFxuICAgICAgdGhpcy5faXNEaXJ0eSA9IGZhbHNlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBFbmhhbmNlZCBlcnJvciBjb250ZXh0IHByZXNlcnZhdGlvblxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgY29uc3QgZXJyb3JTdGFjayA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5zdGFjayA6IHVuZGVmaW5lZDtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZGVzZXJpYWxpemUgZWxlbWVudCcsIHsgXG4gICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgIHN0YWNrOiBlcnJvclN0YWNrLFxuICAgICAgICBkYXRhUHJldmlldzogZGF0YS5zdWJzdHJpbmcoMCwgMjAwKSwgLy8gRmlyc3QgMjAwIGNoYXJzIGZvciBjb250ZXh0XG4gICAgICAgIGVsZW1lbnRUeXBlOiB0aGlzLnR5cGVcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBDcmVhdGUgbmV3IGVycm9yIHdpdGggb3JpZ2luYWwgYXMgY2F1c2VcbiAgICAgIGNvbnN0IGRlc2VyaWFsaXplRXJyb3IgPSBuZXcgRXJyb3IoYEJhc2VFbGVtZW50IGRlc2VyaWFsaXphdGlvbiBmYWlsZWQ6ICR7ZXJyb3JNZXNzYWdlfWApO1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgZGVzZXJpYWxpemVFcnJvci5jYXVzZSA9IGVycm9yO1xuICAgICAgfVxuICAgICAgdGhyb3cgZGVzZXJpYWxpemVFcnJvcjtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBQcm9jZXNzIHVzZXIgZmVlZGJhY2sgYW5kIHVwZGF0ZSByYXRpbmdzLlxuICAgKi9cbiAgcHVibGljIHJlY2VpdmVGZWVkYmFjayhmZWVkYmFjazogc3RyaW5nLCBjb250ZXh0PzogRmVlZGJhY2tDb250ZXh0KTogdm9pZCB7XG4gICAgLy8gTm9ybWFsaXplIFVuaWNvZGUgaW5wdXQgdG8gcHJldmVudCBzZWN1cml0eSBpc3N1ZXNcbiAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoZmVlZGJhY2spO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRGZWVkYmFjayA9IHZhbGlkYXRpb25SZXN1bHQubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgXG4gICAgLy8gTG9nIHNlY3VyaXR5IGV2ZW50IGZvciBmZWVkYmFjayBwcm9jZXNzaW5nXG4gICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgdHlwZTogJ0NPTlRFTlRfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnQmFzZUVsZW1lbnQucmVjZWl2ZUZlZWRiYWNrJyxcbiAgICAgIGRldGFpbHM6IGBGZWVkYmFjayBwcm9jZXNzZWQgZm9yIGVsZW1lbnQgJHt0aGlzLnR5cGV9OiR7dGhpcy5pZH1gLFxuICAgICAgYWRkaXRpb25hbERhdGE6IHsgXG4gICAgICAgIGVsZW1lbnRUeXBlOiB0aGlzLnR5cGUsIFxuICAgICAgICBlbGVtZW50SWQ6IHRoaXMuaWQsXG4gICAgICAgIGZlZWRiYWNrTGVuZ3RoOiBmZWVkYmFjay5sZW5ndGgsXG4gICAgICAgIGhhc1VuaWNvZGVJc3N1ZXM6ICF2YWxpZGF0aW9uUmVzdWx0LmlzVmFsaWRcbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICBpZiAoIXRoaXMucmF0aW5ncykge1xuICAgICAgdGhpcy5yYXRpbmdzID0ge1xuICAgICAgICBhaVJhdGluZzogMCxcbiAgICAgICAgdXNlclJhdGluZzogdW5kZWZpbmVkLFxuICAgICAgICByYXRpbmdDb3VudDogMCxcbiAgICAgICAgbGFzdEV2YWx1YXRlZDogbmV3IERhdGUoKSxcbiAgICAgICAgY29uZmlkZW5jZTogMCxcbiAgICAgICAgdHJlbmQ6ICdzdGFibGUnLFxuICAgICAgICBmZWVkYmFja0hpc3Rvcnk6IFtdXG4gICAgICB9O1xuICAgIH1cbiAgICBcbiAgICAvLyBDcmVhdGUgZmVlZGJhY2sgZW50cnkgd2l0aCBub3JtYWxpemVkIGNvbnRlbnRcbiAgICBjb25zdCB1c2VyRmVlZGJhY2s6IFVzZXJGZWVkYmFjayA9IHtcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICAgIGZlZWRiYWNrOiBub3JtYWxpemVkRmVlZGJhY2ssXG4gICAgICBzZW50aW1lbnQ6IHRoaXMuYW5hbHl6ZVNlbnRpbWVudChub3JtYWxpemVkRmVlZGJhY2spLFxuICAgICAgaW5mZXJyZWRSYXRpbmc6IHRoaXMuaW5mZXJSYXRpbmcobm9ybWFsaXplZEZlZWRiYWNrKSxcbiAgICAgIGNvbnRleHQsXG4gICAgICBlbGVtZW50VmVyc2lvbjogdGhpcy52ZXJzaW9uXG4gICAgfTtcbiAgICBcbiAgICAvLyBBZGQgdG8gaGlzdG9yeSB3aXRoIGJvdW5kcyBjaGVja2luZ1xuICAgIGlmICghdGhpcy5yYXRpbmdzLmZlZWRiYWNrSGlzdG9yeSkge1xuICAgICAgdGhpcy5yYXRpbmdzLmZlZWRiYWNrSGlzdG9yeSA9IFtdO1xuICAgIH1cbiAgICB0aGlzLnJhdGluZ3MuZmVlZGJhY2tIaXN0b3J5LnB1c2godXNlckZlZWRiYWNrKTtcbiAgICBcbiAgICAvLyBQcmV2ZW50IHVuYm91bmRlZCBncm93dGhcbiAgICBpZiAodGhpcy5yYXRpbmdzLmZlZWRiYWNrSGlzdG9yeS5sZW5ndGggPiB0aGlzLk1BWF9GRUVEQkFDS19ISVNUT1JZKSB7XG4gICAgICB0aGlzLnJhdGluZ3MuZmVlZGJhY2tIaXN0b3J5ID0gdGhpcy5yYXRpbmdzLmZlZWRiYWNrSGlzdG9yeS5zbGljZSgtdGhpcy5NQVhfRkVFREJBQ0tfSElTVE9SWSk7XG4gICAgICBsb2dnZXIuZGVidWcoYEZlZWRiYWNrIGhpc3RvcnkgdHJpbW1lZCB0byAke3RoaXMuTUFYX0ZFRURCQUNLX0hJU1RPUll9IGVudHJpZXMgZm9yIGVsZW1lbnQgJHt0aGlzLmlkfWApO1xuICAgIH1cbiAgICBcbiAgICAvLyBVcGRhdGUgdXNlciByYXRpbmcgaWYgd2UgaW5mZXJyZWQgb25lXG4gICAgaWYgKHVzZXJGZWVkYmFjay5pbmZlcnJlZFJhdGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnVwZGF0ZVVzZXJSYXRpbmcodXNlckZlZWRiYWNrLmluZmVycmVkUmF0aW5nKTtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5faXNEaXJ0eSA9IHRydWU7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTaW1wbGUgc2VudGltZW50IGFuYWx5c2lzLlxuICAgKiBTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSBmb3IgbW9yZSBzb3BoaXN0aWNhdGVkIGFuYWx5c2lzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFuYWx5emVTZW50aW1lbnQoZmVlZGJhY2s6IHN0cmluZyk6ICdwb3NpdGl2ZScgfCAnbmVnYXRpdmUnIHwgJ25ldXRyYWwnIHtcbiAgICBjb25zdCBsb3dlciA9IGZlZWRiYWNrLnRvTG93ZXJDYXNlKCk7XG4gICAgXG4gICAgY29uc3QgcG9zaXRpdmVXb3JkcyA9IFsnZXhjZWxsZW50JywgJ2dyZWF0JywgJ2dvb2QnLCAnaGVscGZ1bCcsICd1c2VmdWwnLCAncGVyZmVjdCcsICdhbWF6aW5nJywgJ2xvdmUnXTtcbiAgICBjb25zdCBuZWdhdGl2ZVdvcmRzID0gWydiYWQnLCAncG9vcicsICd0ZXJyaWJsZScsICd1c2VsZXNzJywgJ2Jyb2tlbicsICdoYXRlJywgJ2F3ZnVsJywgJ2Rpc2FwcG9pbnRpbmcnXTtcbiAgICBcbiAgICBjb25zdCBwb3NpdGl2ZUNvdW50ID0gcG9zaXRpdmVXb3Jkcy5maWx0ZXIod29yZCA9PiBsb3dlci5pbmNsdWRlcyh3b3JkKSkubGVuZ3RoO1xuICAgIGNvbnN0IG5lZ2F0aXZlQ291bnQgPSBuZWdhdGl2ZVdvcmRzLmZpbHRlcih3b3JkID0+IGxvd2VyLmluY2x1ZGVzKHdvcmQpKS5sZW5ndGg7XG4gICAgXG4gICAgaWYgKHBvc2l0aXZlQ291bnQgPiBuZWdhdGl2ZUNvdW50KSByZXR1cm4gJ3Bvc2l0aXZlJztcbiAgICBpZiAobmVnYXRpdmVDb3VudCA+IHBvc2l0aXZlQ291bnQpIHJldHVybiAnbmVnYXRpdmUnO1xuICAgIHJldHVybiAnbmV1dHJhbCc7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTaW1wbGUgcmF0aW5nIGluZmVyZW5jZSBmcm9tIGZlZWRiYWNrLlxuICAgKiBTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSBmb3IgbW9yZSBzb3BoaXN0aWNhdGVkIGluZmVyZW5jZS5cbiAgICovXG4gIHByb3RlY3RlZCBpbmZlclJhdGluZyhmZWVkYmFjazogc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzZW50aW1lbnQgPSB0aGlzLmFuYWx5emVTZW50aW1lbnQoZmVlZGJhY2spO1xuICAgIGNvbnN0IGxvd2VyID0gZmVlZGJhY2sudG9Mb3dlckNhc2UoKTtcbiAgICBcbiAgICAvLyBMb29rIGZvciBleHBsaWNpdCByYXRpbmdzXG4gICAgY29uc3QgcmF0aW5nTWF0Y2ggPSBsb3dlci5tYXRjaCgvKFxcZCspXFxzKihzdGFycz98XFwvNXxvdXQgb2YgNSkvKTtcbiAgICBpZiAocmF0aW5nTWF0Y2gpIHtcbiAgICAgIGNvbnN0IHJhdGluZyA9IE51bWJlci5wYXJzZUludChyYXRpbmdNYXRjaFsxXSk7XG4gICAgICBpZiAocmF0aW5nID49IDEgJiYgcmF0aW5nIDw9IDUpIHJldHVybiByYXRpbmc7XG4gICAgfVxuICAgIFxuICAgIC8vIEluZmVyIGZyb20gc2VudGltZW50XG4gICAgaWYgKHNlbnRpbWVudCA9PT0gJ3Bvc2l0aXZlJykge1xuICAgICAgaWYgKGxvd2VyLmluY2x1ZGVzKCdwZXJmZWN0JykgfHwgbG93ZXIuaW5jbHVkZXMoJ2V4Y2VsbGVudCcpKSByZXR1cm4gNTtcbiAgICAgIGlmIChsb3dlci5pbmNsdWRlcygnZ3JlYXQnKSB8fCBsb3dlci5pbmNsdWRlcygndmVyeSBnb29kJykpIHJldHVybiA0O1xuICAgICAgcmV0dXJuIDQ7XG4gICAgfSBlbHNlIGlmIChzZW50aW1lbnQgPT09ICduZWdhdGl2ZScpIHtcbiAgICAgIGlmIChsb3dlci5pbmNsdWRlcygndGVycmlibGUnKSB8fCBsb3dlci5pbmNsdWRlcygnYXdmdWwnKSkgcmV0dXJuIDE7XG4gICAgICBpZiAobG93ZXIuaW5jbHVkZXMoJ3Bvb3InKSB8fCBsb3dlci5pbmNsdWRlcygnYmFkJykpIHJldHVybiAyO1xuICAgICAgcmV0dXJuIDI7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiAzOyAvLyBOZXV0cmFsXG4gIH1cbiAgXG4gIC8qKlxuICAgKiBVcGRhdGUgdXNlciByYXRpbmcgd2l0aCBhIG5ldyB2YWx1ZS5cbiAgICovXG4gIHByb3RlY3RlZCB1cGRhdGVVc2VyUmF0aW5nKG5ld1JhdGluZzogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJhdGluZ3MpIHJldHVybjtcbiAgICBcbiAgICBpZiAodGhpcy5yYXRpbmdzLnVzZXJSYXRpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yYXRpbmdzLnVzZXJSYXRpbmcgPSBuZXdSYXRpbmc7XG4gICAgICB0aGlzLnJhdGluZ3MucmF0aW5nQ291bnQgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDYWxjdWxhdGUgcnVubmluZyBhdmVyYWdlXG4gICAgICBjb25zdCB0b3RhbFJhdGluZyA9IHRoaXMucmF0aW5ncy51c2VyUmF0aW5nICogdGhpcy5yYXRpbmdzLnJhdGluZ0NvdW50ICsgbmV3UmF0aW5nO1xuICAgICAgdGhpcy5yYXRpbmdzLnJhdGluZ0NvdW50Kys7XG4gICAgICB0aGlzLnJhdGluZ3MudXNlclJhdGluZyA9IHRvdGFsUmF0aW5nIC8gdGhpcy5yYXRpbmdzLnJhdGluZ0NvdW50O1xuICAgIH1cbiAgICBcbiAgICAvLyBVcGRhdGUgZGVsdGEgYW5kIHRyZW5kXG4gICAgdGhpcy5yYXRpbmdzLnJhdGluZ0RlbHRhID0gdGhpcy5yYXRpbmdzLnVzZXJSYXRpbmcgLSB0aGlzLnJhdGluZ3MuYWlSYXRpbmc7XG4gICAgXG4gICAgLy8gU2ltcGxlIHRyZW5kIGNhbGN1bGF0aW9uIGJhc2VkIG9uIHJlY2VudCBmZWVkYmFja1xuICAgIGNvbnN0IHJlY2VudEZlZWRiYWNrID0gdGhpcy5yYXRpbmdzLmZlZWRiYWNrSGlzdG9yeT8uc2xpY2UoLTUpIHx8IFtdO1xuICAgIGNvbnN0IHJlY2VudFNlbnRpbWVudHMgPSByZWNlbnRGZWVkYmFjay5tYXAoZiA9PiBmLnNlbnRpbWVudCk7XG4gICAgY29uc3QgcG9zaXRpdmVDb3VudCA9IHJlY2VudFNlbnRpbWVudHMuZmlsdGVyKHMgPT4gcyA9PT0gJ3Bvc2l0aXZlJykubGVuZ3RoO1xuICAgIGNvbnN0IG5lZ2F0aXZlQ291bnQgPSByZWNlbnRTZW50aW1lbnRzLmZpbHRlcihzID0+IHMgPT09ICduZWdhdGl2ZScpLmxlbmd0aDtcbiAgICBcbiAgICBpZiAocG9zaXRpdmVDb3VudCA+IG5lZ2F0aXZlQ291bnQgKyAxKSB7XG4gICAgICB0aGlzLnJhdGluZ3MudHJlbmQgPSAnaW1wcm92aW5nJztcbiAgICB9IGVsc2UgaWYgKG5lZ2F0aXZlQ291bnQgPiBwb3NpdGl2ZUNvdW50ICsgMSkge1xuICAgICAgdGhpcy5yYXRpbmdzLnRyZW5kID0gJ2RlY2xpbmluZyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmF0aW5ncy50cmVuZCA9ICdzdGFibGUnO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBjdXJyZW50IGVsZW1lbnQgc3RhdHVzLlxuICAgKi9cbiAgcHVibGljIGdldFN0YXR1cygpOiBFbGVtZW50U3RhdHVzIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdHVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXR1cyBwcm9wZXJ0eSBnZXR0ZXIgZm9yIGNvbnZlbmllbnQgYWNjZXNzLlxuICAgKi9cbiAgcHVibGljIGdldCBzdGF0dXMoKTogRWxlbWVudFN0YXR1cyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXR1cztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IGxpZmVjeWNsZSBtZXRob2RzIC0gc3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgYXMgbmVlZGVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGJlZm9yZUFjdGl2YXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhgUHJlcGFyaW5nIHRvIGFjdGl2YXRlICR7dGhpcy50eXBlfSBlbGVtZW50OiAke3RoaXMubWV0YWRhdGEubmFtZX1gKTtcbiAgICB0aGlzLl9zdGF0dXMgPSBFbGVtZW50U3RhdHVzLkFDVElWQVRJTkc7XG4gIH1cbiAgXG4gIHB1YmxpYyBhc3luYyBhY3RpdmF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fc3RhdHVzICE9PSBFbGVtZW50U3RhdHVzLkFDVElWRSkge1xuICAgICAgbG9nZ2VyLmluZm8oYEFjdGl2YXRpbmcgJHt0aGlzLnR5cGV9IGVsZW1lbnQ6ICR7dGhpcy5tZXRhZGF0YS5uYW1lfWApO1xuICAgIH1cbiAgICAvLyBSZS1hY3RpdmF0aW9ucyBvZiB0aGUgc2FtZSBlbGVtZW50IGFyZSBzaWxlbnQg4oCUIG5vIHZhbHVlIGluIGxvZ2dpbmdcbiAgICB0aGlzLl9zdGF0dXMgPSBFbGVtZW50U3RhdHVzLkFDVElWRTtcbiAgfVxuICBcbiAgcHVibGljIGFzeW5jIGFmdGVyQWN0aXZhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBDb21wbGV0ZWQgYWN0aXZhdGlvbiBvZiAke3RoaXMudHlwZX0gZWxlbWVudDogJHt0aGlzLm1ldGFkYXRhLm5hbWV9YCk7XG4gIH1cbiAgXG4gIHB1YmxpYyBhc3luYyBkZWFjdGl2YXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZ2dlci5pbmZvKGBEZWFjdGl2YXRpbmcgJHt0aGlzLnR5cGV9IGVsZW1lbnQ6ICR7dGhpcy5tZXRhZGF0YS5uYW1lfWApO1xuICAgIHRoaXMuX3N0YXR1cyA9IEVsZW1lbnRTdGF0dXMuREVBQ1RJVkFUSU5HO1xuICAgIC8vIFN1YmNsYXNzZXMgc2hvdWxkIGltcGxlbWVudCBjbGVhbnVwIGxvZ2ljXG4gICAgdGhpcy5fc3RhdHVzID0gRWxlbWVudFN0YXR1cy5JTkFDVElWRTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIE1hcmsgZWxlbWVudCBhcyBtb2RpZmllZC5cbiAgICovXG4gIHByb3RlY3RlZCBtYXJrRGlydHkoKTogdm9pZCB7XG4gICAgdGhpcy5faXNEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5tZXRhZGF0YS5tb2RpZmllZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIGVsZW1lbnQgaGFzIHVuc2F2ZWQgY2hhbmdlcy5cbiAgICovXG4gIHB1YmxpYyBpc0RpcnR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0RpcnR5O1xuICB9XG4gIFxuICAvKipcbiAgICogTWFyayBlbGVtZW50IGFzIHNhdmVkLlxuICAgKi9cbiAgcHVibGljIG1hcmtDbGVhbigpOiB2b2lkIHtcbiAgICB0aGlzLl9pc0RpcnR5ID0gZmFsc2U7XG4gIH1cbn0iXX0=
@@ -86,6 +86,21 @@ export declare abstract class BaseElementManager<T extends IElement> implements
86
86
  * Keyed by relative file path for deduplication.
87
87
  */
88
88
  private readonly invalidElements;
89
+ /**
90
+ * Tracks file paths whose load failure has already been logged at error level.
91
+ * Repeated failures with the same reason are demoted to debug to avoid log flooding.
92
+ * Cleared when the file changes on disk or loads successfully.
93
+ */
94
+ private readonly suppressedLoadPaths;
95
+ /**
96
+ * Returns true if the most recent load() failure for this path was suppressed
97
+ * because it was a repeat of an already-logged error.
98
+ * Subclasses can use this to avoid duplicate security event logging.
99
+ *
100
+ * @param filePath - Relative file path within the element directory
101
+ * @returns Whether the error for this path is currently suppressed
102
+ */
103
+ protected isLoadErrorSuppressed(filePath: string): boolean;
89
104
  protected afterLoad?(element: T, filePath: string): Promise<void>;
90
105
  protected beforeSave?(element: T, filePath: string): Promise<void>;
91
106
  protected afterSave?(element: T, filePath: string): Promise<void>;
@@ -319,6 +334,13 @@ export declare abstract class BaseElementManager<T extends IElement> implements
319
334
  elementCount: number;
320
335
  pathMappings: number;
321
336
  };
337
+ /**
338
+ * Expose internal LRU cache instances for metrics collection.
339
+ */
340
+ getMetricsCaches(): Array<{
341
+ name: string;
342
+ instance: LRUCache<unknown>;
343
+ }>;
322
344
  /**
323
345
  * Dispose of resources and cleanup
324
346
  * Subclasses should override to add their own cleanup logic
@@ -1 +1 @@
1
- {"version":3,"file":"BaseElementManager.d.ts","sourceRoot":"","sources":["../../../src/elements/base/BaseElementManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseElementManager.d.ts","sourceRoot":"","sources":["../../../src/elements/base/BaseElementManager.ts"],"names":[],"mappings":"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"}