@dollhousemcp/mcp-server 2.0.0-rc.5 → 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 (256) hide show
  1. package/CHANGELOG.md +54 -17
  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/editElement.d.ts.map +1 -1
  31. package/dist/handlers/element-crud/editElement.js +39 -18
  32. package/dist/handlers/element-crud/helpers.d.ts.map +1 -1
  33. package/dist/handlers/element-crud/helpers.js +30 -3
  34. package/dist/handlers/element-crud/listElements.d.ts +2 -0
  35. package/dist/handlers/element-crud/listElements.d.ts.map +1 -1
  36. package/dist/handlers/element-crud/listElements.js +3 -1
  37. package/dist/handlers/mcp-aql/Gatekeeper.d.ts.map +1 -1
  38. package/dist/handlers/mcp-aql/Gatekeeper.js +23 -17
  39. package/dist/handlers/mcp-aql/GatekeeperTypes.d.ts +4 -0
  40. package/dist/handlers/mcp-aql/GatekeeperTypes.d.ts.map +1 -1
  41. package/dist/handlers/mcp-aql/GatekeeperTypes.js +1 -1
  42. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +33 -0
  43. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
  44. package/dist/handlers/mcp-aql/MCPAQLHandler.js +232 -23
  45. package/dist/handlers/mcp-aql/OperationRouter.d.ts.map +1 -1
  46. package/dist/handlers/mcp-aql/OperationRouter.js +13 -1
  47. package/dist/handlers/mcp-aql/OperationSchema.d.ts +7 -0
  48. package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
  49. package/dist/handlers/mcp-aql/OperationSchema.js +52 -1
  50. package/dist/handlers/mcp-aql/UnifiedEndpoint.d.ts.map +1 -1
  51. package/dist/handlers/mcp-aql/UnifiedEndpoint.js +4 -3
  52. package/dist/handlers/mcp-aql/evaluatePermission.d.ts +53 -0
  53. package/dist/handlers/mcp-aql/evaluatePermission.d.ts.map +1 -0
  54. package/dist/handlers/mcp-aql/evaluatePermission.js +132 -0
  55. package/dist/handlers/mcp-aql/policies/ElementPolicies.d.ts +17 -0
  56. package/dist/handlers/mcp-aql/policies/ElementPolicies.d.ts.map +1 -1
  57. package/dist/handlers/mcp-aql/policies/ElementPolicies.js +91 -1
  58. package/dist/handlers/mcp-aql/policies/ToolClassification.d.ts +5 -3
  59. package/dist/handlers/mcp-aql/policies/ToolClassification.d.ts.map +1 -1
  60. package/dist/handlers/mcp-aql/policies/ToolClassification.js +56 -2
  61. package/dist/handlers/mcp-aql/types.d.ts +22 -0
  62. package/dist/handlers/mcp-aql/types.d.ts.map +1 -1
  63. package/dist/handlers/mcp-aql/types.js +47 -1
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +3 -3
  66. package/dist/logging/LogHooks.js +11 -11
  67. package/dist/logging/LogManager.d.ts +0 -2
  68. package/dist/logging/LogManager.d.ts.map +1 -1
  69. package/dist/logging/LogManager.js +1 -3
  70. package/dist/logging/sinks/MemoryLogSink.d.ts +2 -0
  71. package/dist/logging/sinks/MemoryLogSink.d.ts.map +1 -1
  72. package/dist/logging/sinks/MemoryLogSink.js +12 -3
  73. package/dist/logging/types.d.ts +0 -2
  74. package/dist/logging/types.d.ts.map +1 -1
  75. package/dist/logging/types.js +1 -1
  76. package/dist/metrics/GatekeeperMetricsTracker.d.ts +32 -0
  77. package/dist/metrics/GatekeeperMetricsTracker.d.ts.map +1 -0
  78. package/dist/metrics/GatekeeperMetricsTracker.js +42 -0
  79. package/dist/metrics/MetricsManager.d.ts +47 -0
  80. package/dist/metrics/MetricsManager.d.ts.map +1 -0
  81. package/dist/metrics/MetricsManager.js +232 -0
  82. package/dist/metrics/OperationMetricsTracker.d.ts +32 -0
  83. package/dist/metrics/OperationMetricsTracker.d.ts.map +1 -0
  84. package/dist/metrics/OperationMetricsTracker.js +53 -0
  85. package/dist/metrics/collectors/DefaultElementProviderCollector.d.ts +27 -0
  86. package/dist/metrics/collectors/DefaultElementProviderCollector.d.ts.map +1 -0
  87. package/dist/metrics/collectors/DefaultElementProviderCollector.js +69 -0
  88. package/dist/metrics/collectors/FileLockManagerCollector.d.ts +16 -0
  89. package/dist/metrics/collectors/FileLockManagerCollector.d.ts.map +1 -0
  90. package/dist/metrics/collectors/FileLockManagerCollector.js +51 -0
  91. package/dist/metrics/collectors/GatekeeperMetricsCollector.d.ts +16 -0
  92. package/dist/metrics/collectors/GatekeeperMetricsCollector.d.ts.map +1 -0
  93. package/dist/metrics/collectors/GatekeeperMetricsCollector.js +76 -0
  94. package/dist/metrics/collectors/LRUCacheCollector.d.ts +18 -0
  95. package/dist/metrics/collectors/LRUCacheCollector.d.ts.map +1 -0
  96. package/dist/metrics/collectors/LRUCacheCollector.js +95 -0
  97. package/dist/metrics/collectors/OperationMetricsCollector.d.ts +16 -0
  98. package/dist/metrics/collectors/OperationMetricsCollector.d.ts.map +1 -0
  99. package/dist/metrics/collectors/OperationMetricsCollector.js +80 -0
  100. package/dist/metrics/collectors/OperationalTelemetryCollector.d.ts +17 -0
  101. package/dist/metrics/collectors/OperationalTelemetryCollector.d.ts.map +1 -0
  102. package/dist/metrics/collectors/OperationalTelemetryCollector.js +26 -0
  103. package/dist/metrics/collectors/PerformanceMonitorCollector.d.ts +14 -0
  104. package/dist/metrics/collectors/PerformanceMonitorCollector.d.ts.map +1 -0
  105. package/dist/metrics/collectors/PerformanceMonitorCollector.js +141 -0
  106. package/dist/metrics/collectors/SecurityMonitorCollector.d.ts +21 -0
  107. package/dist/metrics/collectors/SecurityMonitorCollector.d.ts.map +1 -0
  108. package/dist/metrics/collectors/SecurityMonitorCollector.js +56 -0
  109. package/dist/metrics/collectors/SecurityTelemetryCollector.d.ts +15 -0
  110. package/dist/metrics/collectors/SecurityTelemetryCollector.d.ts.map +1 -0
  111. package/dist/metrics/collectors/SecurityTelemetryCollector.js +112 -0
  112. package/dist/metrics/collectors/TriggerMetricsTrackerCollector.d.ts +16 -0
  113. package/dist/metrics/collectors/TriggerMetricsTrackerCollector.d.ts.map +1 -0
  114. package/dist/metrics/collectors/TriggerMetricsTrackerCollector.js +26 -0
  115. package/dist/metrics/collectors/index.d.ts +11 -0
  116. package/dist/metrics/collectors/index.d.ts.map +1 -0
  117. package/dist/metrics/collectors/index.js +11 -0
  118. package/dist/metrics/sinks/MemoryMetricsSink.d.ts +22 -0
  119. package/dist/metrics/sinks/MemoryMetricsSink.d.ts.map +1 -0
  120. package/dist/metrics/sinks/MemoryMetricsSink.js +121 -0
  121. package/dist/metrics/types.d.ts +98 -0
  122. package/dist/metrics/types.d.ts.map +1 -0
  123. package/dist/metrics/types.js +24 -0
  124. package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -1
  125. package/dist/portfolio/DefaultElementProvider.js +1 -7
  126. package/dist/portfolio/EnhancedIndexManager.d.ts.map +1 -1
  127. package/dist/portfolio/EnhancedIndexManager.js +18 -18
  128. package/dist/portfolio/NLPScoringManager.d.ts.map +1 -1
  129. package/dist/portfolio/NLPScoringManager.js +5 -9
  130. package/dist/portfolio/PortfolioIndexManager.js +2 -2
  131. package/dist/portfolio/RelationshipManager.js +2 -2
  132. package/dist/portfolio/VerbTriggerManager.d.ts.map +1 -1
  133. package/dist/portfolio/VerbTriggerManager.js +5 -19
  134. package/dist/portfolio/config/IndexConfig.d.ts.map +1 -1
  135. package/dist/portfolio/config/IndexConfig.js +1 -12
  136. package/dist/portfolio/enhanced-index/ElementDefinitionBuilder.d.ts.map +1 -1
  137. package/dist/portfolio/enhanced-index/ElementDefinitionBuilder.js +3 -15
  138. package/dist/portfolio/enhanced-index/SemanticRelationshipService.d.ts.map +1 -1
  139. package/dist/portfolio/enhanced-index/SemanticRelationshipService.js +2 -16
  140. package/dist/portfolio/types/RelationshipTypes.d.ts.map +1 -1
  141. package/dist/portfolio/types/RelationshipTypes.js +3 -17
  142. package/dist/security/audit/config/suppressions.d.ts.map +1 -1
  143. package/dist/security/audit/config/suppressions.js +36 -8
  144. package/dist/security/constants.d.ts.map +1 -1
  145. package/dist/security/constants.js +10 -6
  146. package/dist/security/fileLockManager.d.ts.map +1 -1
  147. package/dist/security/fileLockManager.js +8 -6
  148. package/dist/security/secureYamlParser.d.ts.map +1 -1
  149. package/dist/security/secureYamlParser.js +1 -13
  150. package/dist/security/securityMonitor.d.ts +2 -1
  151. package/dist/security/securityMonitor.d.ts.map +1 -1
  152. package/dist/security/securityMonitor.js +14 -3
  153. package/dist/security/telemetry/SecurityTelemetry.d.ts +16 -0
  154. package/dist/security/telemetry/SecurityTelemetry.d.ts.map +1 -1
  155. package/dist/security/telemetry/SecurityTelemetry.js +30 -2
  156. package/dist/security/tokenManager.d.ts +3 -0
  157. package/dist/security/tokenManager.d.ts.map +1 -1
  158. package/dist/security/tokenManager.js +13 -5
  159. package/dist/security/validation/BackgroundValidator.d.ts.map +1 -1
  160. package/dist/security/validation/BackgroundValidator.js +7 -7
  161. package/dist/server/startup.d.ts.map +1 -1
  162. package/dist/server/startup.js +8 -24
  163. package/dist/server/tools/MCPAQLTools.js +8 -1
  164. package/dist/services/ActivationStore.d.ts.map +1 -1
  165. package/dist/services/ActivationStore.js +9 -3
  166. package/dist/services/FileWatchService.d.ts +1 -0
  167. package/dist/services/FileWatchService.d.ts.map +1 -1
  168. package/dist/services/FileWatchService.js +83 -48
  169. package/dist/services/MetadataService.d.ts.map +1 -1
  170. package/dist/services/MetadataService.js +7 -2
  171. package/dist/services/PolicyExportService.d.ts.map +1 -1
  172. package/dist/services/PolicyExportService.js +8 -1
  173. package/dist/services/query/ElementQueryService.d.ts.map +1 -1
  174. package/dist/services/query/ElementQueryService.js +1 -41
  175. package/dist/services/query/PaginationService.d.ts.map +1 -1
  176. package/dist/services/query/PaginationService.js +1 -14
  177. package/dist/services/query/SortService.d.ts.map +1 -1
  178. package/dist/services/query/SortService.js +1 -6
  179. package/dist/services/validation/ValidationService.d.ts.map +1 -1
  180. package/dist/services/validation/ValidationService.js +3 -8
  181. package/dist/storage/ElementStorageLayer.d.ts.map +1 -1
  182. package/dist/storage/ElementStorageLayer.js +5 -2
  183. package/dist/storage/MemoryStorageLayer.d.ts.map +1 -1
  184. package/dist/storage/MemoryStorageLayer.js +5 -2
  185. package/dist/telemetry/OperationalTelemetry.js +2 -2
  186. package/dist/utils/EventDeduplicator.d.ts +44 -0
  187. package/dist/utils/EventDeduplicator.d.ts.map +1 -0
  188. package/dist/utils/EventDeduplicator.js +93 -0
  189. package/dist/utils/FileLock.d.ts.map +1 -1
  190. package/dist/utils/FileLock.js +1 -9
  191. package/dist/utils/PerformanceMonitor.d.ts.map +1 -1
  192. package/dist/utils/PerformanceMonitor.js +5 -5
  193. package/dist/utils/SlidingWindowRateLimiter.d.ts +13 -0
  194. package/dist/utils/SlidingWindowRateLimiter.d.ts.map +1 -0
  195. package/dist/utils/SlidingWindowRateLimiter.js +23 -0
  196. package/dist/web/console/IngestRoutes.d.ts +84 -0
  197. package/dist/web/console/IngestRoutes.d.ts.map +1 -0
  198. package/dist/web/console/IngestRoutes.js +252 -0
  199. package/dist/web/console/LeaderElection.d.ts +89 -0
  200. package/dist/web/console/LeaderElection.d.ts.map +1 -0
  201. package/dist/web/console/LeaderElection.js +205 -0
  202. package/dist/web/console/LeaderForwardingSink.d.ts +61 -0
  203. package/dist/web/console/LeaderForwardingSink.d.ts.map +1 -0
  204. package/dist/web/console/LeaderForwardingSink.js +197 -0
  205. package/dist/web/console/SessionNames.d.ts +46 -0
  206. package/dist/web/console/SessionNames.d.ts.map +1 -0
  207. package/dist/web/console/SessionNames.js +257 -0
  208. package/dist/web/console/UnifiedConsole.d.ts +64 -0
  209. package/dist/web/console/UnifiedConsole.d.ts.map +1 -0
  210. package/dist/web/console/UnifiedConsole.js +119 -0
  211. package/dist/web/contentPipeline.d.ts +58 -0
  212. package/dist/web/contentPipeline.d.ts.map +1 -0
  213. package/dist/web/contentPipeline.js +112 -0
  214. package/dist/web/portDiscovery.d.ts +58 -0
  215. package/dist/web/portDiscovery.d.ts.map +1 -0
  216. package/dist/web/portDiscovery.js +143 -0
  217. package/dist/web/public/app.js +148 -60
  218. package/dist/web/public/logs.js +638 -0
  219. package/dist/web/public/metrics.js +682 -0
  220. package/dist/web/public/permissions.js +394 -0
  221. package/dist/web/public/sessions.js +369 -0
  222. package/dist/web/routes/healthRoutes.d.ts +16 -0
  223. package/dist/web/routes/healthRoutes.d.ts.map +1 -0
  224. package/dist/web/routes/healthRoutes.js +29 -0
  225. package/dist/web/routes/logRoutes.d.ts +18 -0
  226. package/dist/web/routes/logRoutes.d.ts.map +1 -0
  227. package/dist/web/routes/logRoutes.js +126 -0
  228. package/dist/web/routes/metricsRoutes.d.ts +17 -0
  229. package/dist/web/routes/metricsRoutes.d.ts.map +1 -0
  230. package/dist/web/routes/metricsRoutes.js +90 -0
  231. package/dist/web/routes/permissionRoutes.d.ts +16 -0
  232. package/dist/web/routes/permissionRoutes.d.ts.map +1 -0
  233. package/dist/web/routes/permissionRoutes.js +133 -0
  234. package/dist/web/routes.d.ts.map +1 -1
  235. package/dist/web/routes.js +309 -339
  236. package/dist/web/server.d.ts +21 -1
  237. package/dist/web/server.d.ts.map +1 -1
  238. package/dist/web/server.js +42 -4
  239. package/dist/web/sinks/WebSSELogSink.d.ts +15 -0
  240. package/dist/web/sinks/WebSSELogSink.d.ts.map +1 -0
  241. package/dist/web/sinks/WebSSELogSink.js +22 -0
  242. package/dist/web/sinks/WebSSEMetricsSink.d.ts +16 -0
  243. package/dist/web/sinks/WebSSEMetricsSink.d.ts.map +1 -0
  244. package/dist/web/sinks/WebSSEMetricsSink.js +23 -0
  245. package/package.json +2 -2
  246. package/server.json +2 -2
  247. package/dist/constants/version.d.ts +0 -3
  248. package/dist/constants/version.d.ts.map +0 -1
  249. package/dist/constants/version.js +0 -4
  250. package/dist/logging/sinks/SSELogSink.d.ts +0 -35
  251. package/dist/logging/sinks/SSELogSink.d.ts.map +0 -1
  252. package/dist/logging/sinks/SSELogSink.js +0 -181
  253. package/dist/logging/viewer/viewerHtml.d.ts +0 -8
  254. package/dist/logging/viewer/viewerHtml.d.ts.map +0 -1
  255. package/dist/logging/viewer/viewerHtml.js +0 -204
  256. package/dist/web/public/public/app.js +0 -1878
@@ -28,6 +28,7 @@ function isNodeError(error) {
28
28
  */
29
29
  export class FileWatchService {
30
30
  watchers = new Map();
31
+ debounceTimers = new Map();
31
32
  /**
32
33
  * Watch a directory for changes. If the directory doesn't exist, it will be created.
33
34
  *
@@ -103,49 +104,65 @@ export class FileWatchService {
103
104
  });
104
105
  return undefined;
105
106
  }
106
- // Polling is a fallback for environments where fs.watch is unreliable/unavailable (e.g., EMFILE/ENOSPC).
107
+ // Adaptive polling interval: scale with directory size to prevent
108
+ // scan-overlaps on large portfolios (Issue #1687).
109
+ // Base: 2s, +2ms per file, capped at 10s.
110
+ const baseIntervalMs = 2000;
111
+ const perFileMs = 2;
112
+ const maxIntervalMs = 10_000;
113
+ const adaptiveInterval = Math.min(baseIntervalMs + previous.size * perFileMs, maxIntervalMs);
114
+ // Guard: skip poll if a previous scan is still being processed
115
+ let scanInProgress = false;
116
+ // Debounce: batch changed files and notify handlers once per cycle
107
117
  const interval = setInterval(() => {
108
- let next;
109
- try {
110
- next = snapshot();
111
- }
112
- catch {
118
+ if (scanInProgress)
113
119
  return;
114
- }
115
- for (const [filename, mtimeMs] of next) {
116
- const priorMtime = previous.get(filename);
117
- if (priorMtime === undefined || priorMtime !== mtimeMs) {
118
- for (const h of handlers) {
119
- try {
120
- h(filename);
121
- }
122
- catch (error) {
123
- logger.warn('FileWatchService polling handler failed', {
124
- directory: absoluteDir,
125
- error: error instanceof Error ? error.message : error
126
- });
127
- }
120
+ scanInProgress = true;
121
+ try {
122
+ let next;
123
+ try {
124
+ next = snapshot();
125
+ }
126
+ catch {
127
+ return;
128
+ }
129
+ // Collect all changed files before notifying handlers
130
+ const changedFiles = [];
131
+ for (const [filename, mtimeMs] of next) {
132
+ const priorMtime = previous.get(filename);
133
+ if (priorMtime === undefined || priorMtime !== mtimeMs) {
134
+ changedFiles.push(filename);
128
135
  }
129
136
  }
130
- }
131
- // Deletions: notify handlers so callers can rescan.
132
- for (const filename of previous.keys()) {
133
- if (!next.has(filename)) {
134
- for (const h of handlers) {
135
- try {
136
- h(filename);
137
- }
138
- catch (error) {
139
- logger.warn('FileWatchService polling handler failed', {
140
- directory: absoluteDir,
141
- error: error instanceof Error ? error.message : error
142
- });
137
+ // Deletions
138
+ for (const filename of previous.keys()) {
139
+ if (!next.has(filename)) {
140
+ changedFiles.push(filename);
141
+ }
142
+ }
143
+ // Notify handlers once per changed file (deduplicated)
144
+ if (changedFiles.length > 0) {
145
+ const uniqueChanges = [...new Set(changedFiles)];
146
+ for (const filename of uniqueChanges) {
147
+ for (const h of handlers) {
148
+ try {
149
+ h(filename);
150
+ }
151
+ catch (error) {
152
+ logger.warn('FileWatchService polling handler failed', {
153
+ directory: absoluteDir,
154
+ error: error instanceof Error ? error.message : error
155
+ });
156
+ }
143
157
  }
144
158
  }
145
159
  }
160
+ previous = next;
161
+ }
162
+ finally {
163
+ scanInProgress = false;
146
164
  }
147
- previous = next;
148
- }, 250);
165
+ }, adaptiveInterval);
149
166
  logger.warn('Falling back to polling directory watcher', {
150
167
  directory: absoluteDir,
151
168
  phase: reason?.phase,
@@ -157,22 +174,35 @@ export class FileWatchService {
157
174
  // Try to set up file watcher - may fail due to permission restrictions or platform limitations
158
175
  let watcher;
159
176
  try {
160
- watcher = watch(absoluteDir, { recursive: false }, (eventType, filename) => {
177
+ // Debounce fs.watch events coalesce rapid-fire notifications into
178
+ // a single handler call per file within a 500ms window (Issue #1687).
179
+ const pendingChanges = new Set();
180
+ watcher = watch(absoluteDir, { recursive: false }, (_eventType, filename) => {
161
181
  if (!filename) {
162
182
  return;
163
183
  }
164
- const relative = filename.toString();
165
- for (const h of handlers) {
166
- try {
167
- h(relative);
168
- }
169
- catch (error) {
170
- logger.warn('FileWatchService handler failed', {
171
- directory: absoluteDir,
172
- error: error instanceof Error ? error.message : error
173
- });
184
+ pendingChanges.add(filename.toString());
185
+ const existingTimer = this.debounceTimers.get(absoluteDir);
186
+ if (existingTimer)
187
+ clearTimeout(existingTimer);
188
+ this.debounceTimers.set(absoluteDir, setTimeout(() => {
189
+ this.debounceTimers.delete(absoluteDir);
190
+ const files = [...pendingChanges];
191
+ pendingChanges.clear();
192
+ for (const relative of files) {
193
+ for (const h of handlers) {
194
+ try {
195
+ h(relative);
196
+ }
197
+ catch (error) {
198
+ logger.warn('FileWatchService handler failed', {
199
+ directory: absoluteDir,
200
+ error: error instanceof Error ? error.message : error
201
+ });
202
+ }
203
+ }
174
204
  }
175
- }
205
+ }, 500));
176
206
  });
177
207
  }
178
208
  catch (watchError) {
@@ -257,6 +287,11 @@ export class FileWatchService {
257
287
  * This method is invoked by the DI container's dispose() method.
258
288
  */
259
289
  dispose() {
290
+ // Clear all pending debounce timers to prevent post-dispose handler calls
291
+ for (const [, timer] of this.debounceTimers) {
292
+ clearTimeout(timer);
293
+ }
294
+ this.debounceTimers.clear();
260
295
  for (const [dir, entry] of this.watchers) {
261
296
  try {
262
297
  entry.watcher.close();
@@ -273,4 +308,4 @@ export class FileWatchService {
273
308
  logger.debug('FileWatchService disposed', { watchersClosed: this.watchers.size === 0 });
274
309
  }
275
310
  }
276
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmlsZVdhdGNoU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9GaWxlV2F0Y2hTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxLQUFLLEVBQWEsVUFBVSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQVM1QyxNQUFNLGNBQWM7SUFDRCxRQUFRLENBQWlCO0lBRTFDLFlBQVksUUFBd0I7UUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVELEtBQUs7UUFDSCxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCw2REFBNkQ7SUFDN0QsRUFBRSxDQUFDLE1BQWMsRUFBRSxTQUF1QztRQUN4RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsU0FBUyxXQUFXLENBQUMsS0FBYztJQUNqQyxPQUFPLEtBQUssWUFBWSxLQUFLLElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQztBQUNuRCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ1YsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFzQixDQUFDO0lBRTFEOzs7Ozs7Ozs7Ozs7Ozs7T0FlRztJQUNILGNBQWMsQ0FBQyxPQUFlLEVBQUUsT0FBMEI7UUFDeEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVoRCxJQUFJLFFBQVEsRUFBRSxD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QyxJQUFJLENBQUMsc0NBQXNDLEVBQUU7b0JBQ2xELFNBQVMsRUFBRSxHQUFHO29CQUNkLEtBQUssRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2lCQUM5RCxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEIsTUFBTSxDQUFDLEtBQUssQ0FBQywyQkFBMkIsRUFBRSxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IHdhdGNoLCBGU1dhdGNoZXIsIGFjY2Vzc1N5bmMsIG1rZGlyU3luYywgcmVhZGRpclN5bmMsIHN0YXRTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuXG5leHBvcnQgdHlwZSBGaWxlQ2hhbmdlSGFuZGxlciA9IChyZWxhdGl2ZVBhdGg6IHN0cmluZykgPT4gdm9pZDtcblxuaW50ZXJmYWNlIFdhdGNoRW50cnkge1xuICB3YXRjaGVyOiBGU1dhdGNoZXIgfCBQb2xsaW5nV2F0Y2hlcjtcbiAgaGFuZGxlcnM6IFNldDxGaWxlQ2hhbmdlSGFuZGxlcj47XG59XG5cbmNsYXNzIFBvbGxpbmdXYXRjaGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBpbnRlcnZhbDogTm9kZUpTLlRpbWVvdXQ7XG5cbiAgY29uc3RydWN0b3IoaW50ZXJ2YWw6IE5vZGVKUy5UaW1lb3V0KSB7XG4gICAgdGhpcy5pbnRlcnZhbCA9IGludGVydmFsO1xuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTtcbiAgfVxuXG4gIC8vIE1hdGNoIHRoZSBmcy5GU1dhdGNoZXIgc2hhcGUgd2VsbCBlbm91Z2ggZm9yIGludGVybmFsIHVzZS5cbiAgb24oX2V2ZW50OiBzdHJpbmcsIF9saXN0ZW5lcjogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhbiBlcnJvciBpcyBhIE5vZGUuanMgc3lzdGVtIGVycm9yIHdpdGggYW4gZXJyb3IgY29kZVxuICovXG5mdW5jdGlvbiBpc05vZGVFcnJvcihlcnJvcjogdW5rbm93bik6IGVycm9yIGlzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbiB7XG4gIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICdjb2RlJyBpbiBlcnJvcjtcbn1cblxuLyoqXG4gKiBUaGluIHdyYXBwZXIgb3ZlciBmcy53YXRjaCB0aGF0IGZhbi1vdXRzIGNoYW5nZSBldmVudHMgdG8gaW50ZXJlc3RlZCBtYW5hZ2Vycy5cbiAqXG4gKiBUaGlzIHNlcnZpY2UgaXMgbWFuYWdlZCBhcyBhIHNpbmdsZXRvbiBieSB0aGUgREkgY29udGFpbmVyLlxuICogSW5qZWN0IGl0IHZpYSBjb25zdHJ1Y3RvciBpbmplY3Rpb24gcmF0aGVyIHRoYW4gdXNpbmcgYSBzdGF0aWMgZ2V0SW5zdGFuY2UoKSBtZXRob2QuXG4gKi9cbmV4cG9ydCBjbGFzcyBGaWxlV2F0Y2hTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSB3YXRjaGVycyA9IG5ldyBNYXA8c3RyaW5nLCBXYXRjaEVudHJ5PigpO1xuXG4gIC8qKlxuICAgKiBXYXRjaCBhIGRpcmVjdG9yeSBmb3IgY2hhbmdlcy4gSWYgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBkaXJQYXRoIC0gUGF0aCB0byBkaXJlY3RvcnkgdG8gd2F0Y2hcbiAgICogQHBhcmFtIGhhbmRsZXIgLSBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gZmlsZXMgY2hhbmdlXG4gICAqIEByZXR1cm5zIENsZWFudXAgZnVuY3Rpb24gdG8gc3RvcCB3YXRjaGluZ1xuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIG1ldGhvZCBlbnN1cmVzIHRoZSBkaXJlY3RvcnkgZXhpc3RzIGJlZm9yZSBzZXR0aW5nIHVwIHRoZSB3YXRjaGVyLlxuICAgKiBmcy53YXRjaCB0aHJvd3MgRU5PRU5UIGlmIHRoZSBkaXJlY3RvcnkgZG9lc24ndCBleGlzdCwgc28gd2UgY3JlYXRlIGl0XG4gICAqIHdpdGggcmVjdXJzaXZlOnRydWUgdG8gaGFuZGxlIHRlc3Qgc2NlbmFyaW9zIGFuZCBlZGdlIGNhc2VzIGdyYWNlZnVsbHkuXG4gICAqXG4gICAqIEZpbGUgd2F0Y2hpbmcgaXMgb3B0aW9uYWwgZnVuY3Rpb25hbGl0eS4gSWYgZnMud2F0Y2goKSBmYWlscyBkdWUgdG8gcGVybWlzc2lvblxuICAgKiByZXN0cmljdGlvbnMgb3IgcGxhdGZvcm0gbGltaXRhdGlvbnMsIGEgbm8tb3AgY2xlYW51cCBmdW5jdGlvbiBpcyByZXR1cm5lZCBhbmRcbiAgICogdGhlIGFwcGxpY2F0aW9uIGNvbnRpbnVlcyB3aXRob3V0IGZpbGUgd2F0Y2hpbmcgZm9yIHRoYXQgZGlyZWN0b3J5LlxuICAgKi9cbiAgd2F0Y2hEaXJlY3RvcnkoZGlyUGF0aDogc3RyaW5nLCBoYW5kbGVyOiBGaWxlQ2hhbmdlSGFuZGxlcik6ICgpID0+IHZvaWQge1xuICAgIGNvbnN0IGFic29sdXRlRGlyID0gcGF0aC5yZXNvbHZlKGRpclBhdGgpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy53YXRjaGVycy5nZXQoYWJzb2x1dGVEaXIpO1xuXG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICBleGlzdGluZy5oYW5kbGVycy5hZGQoaGFuZGxlcik7XG4gICAgICByZXR1cm4gKCkgPT4gdGhpcy5kZXRhY2hIYW5kbGVyKGFic29sdXRlRGlyLCBoYW5kbGVyKTtcbiAgICB9XG5cbiAgICAvLyBFbnN1cmUgZGlyZWN0b3J5IGV4aXN0cyBiZWZvcmUgd2F0Y2hpbmdcbiAgICAvLyBmcy53YXRjaCB0aHJvd3MgRU5PRU5UIGlmIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LCBzbyB3ZSBjcmVhdGUgaXQgZmlyc3RcbiAgICB0cnkge1xuICAgICAgYWNjZXNzU3luYyhhYnNvbHV0ZURpcik7XG4gICAgfSBjYXRjaCAoX2Vycm9yKSB7XG4gICAgICAvLyBEaXJlY3RvcnkgZG9lc24ndCBleGlzdCAtIGNyZWF0ZSBpdFxuICAgICAgdHJ5IHtcbiAgICAgICAgbWtkaXJTeW5jKGFic29sdXRlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdDcmVhdGVkIGRpcmVjdG9yeSBmb3Igd2F0Y2hpbmcnLCB7IGRpcmVjdG9yeTogYWJzb2x1dGVEaXIgfSk7XG4gICAgICB9IGNhdGNoIChta2RpckVycm9yKSB7XG4gICAgICAgIC8vIEZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5IC0gbG9nIGFuZCByZXR1cm4gbm8tb3AgY2xlYW51cFxuICAgICAgICBsb2dnZXIud2FybignRmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgZm9yIHdhdGNoaW5nIC0gd2F0Y2hlciB3aWxsIG5vdCBiZSBzZXQgdXAnLCB7XG4gICAgICAgICAgZGlyZWN0b3J5OiBhYnNvbHV0ZURpcixcbiAgICAgICAgICBlcnJvcjogbWtkaXJFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gbWtkaXJFcnJvci5tZXNzYWdlIDogU3RyaW5nKG1rZGlyRXJyb3IpXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBSZXR1cm4gYSBuby1vcCBjbGVhbnVwIGZ1bmN0aW9uIHNpbmNlIHdhdGNoZXIgd2FzIG5vdCBjcmVhdGVkXG4gICAgICAgIHJldHVybiAoKSA9PiB7fTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVycyA9IG5ldyBTZXQ8RmlsZUNoYW5nZUhhbmRsZXI+KFtoYW5kbGVyXSk7XG5cbiAgICBjb25zdCBzdGFydFBvbGxpbmdXYXRjaGVyID0gKHJlYXNvbjogeyBlcnJvcjogdW5rbm93bjsgcGhhc2U6ICdzZXR1cCcgfCAncnVudGltZScgfSB8IHVuZGVmaW5lZCk6IFBvbGxpbmdXYXRjaGVyIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgIGNvbnN0IHNuYXBzaG90ID0gKCk6IE1hcDxzdHJpbmcsIG51bWJlcj4gPT4ge1xuICAgICAgICBjb25zdCBuZXh0ID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiByZWFkZGlyU3luYyhhYnNvbHV0ZURpciwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pKSB7XG4gICAgICAgICAgaWYgKCFlbnRyeS5pc0ZpbGUoKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0cyA9IHN0YXRTeW5jKHBhdGguam9pbihhYnNvbHV0ZURpciwgZW50cnkubmFtZSkpO1xuICAgICAgICAgICAgbmV4dC5zZXQoZW50cnkubmFtZSwgc3RhdHMubXRpbWVNcyk7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBJZ25vcmUgcmFjZXMgKGZpbGUgcmVtb3ZlZCBiZXR3ZWVuIHJlYWRkaXIgYW5kIHN0YXQsIGV0Yy4pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgfTtcblxuICAgICAgbGV0IHByZXZpb3VzOiBNYXA8c3RyaW5nLCBudW1iZXI+O1xuICAgICAgdHJ5IHtcbiAgICAgICAgcHJldmlvdXMgPSBzbmFwc2hvdCgpO1xuICAgICAgfSBjYXRjaCAocG9sbFNldHVwRXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byBpbml0aWFsaXplIHBvbGxpbmcgZGlyZWN0b3J5IHdhdGNoZXInLCB7XG4gICAgICAgICAgZGlyZWN0b3J5OiBhYnNvbHV0ZURpcixcbiAgICAgICAgICBwaGFzZTogcmVhc29uPy5waGFzZSxcbiAgICAgICAgICBvcmlnaW5hbEVycm9yOiByZWFzb24/LmVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyByZWFzb24uZXJyb3IubWVzc2FnZSA6IHJlYXNvbj8uZXJyb3IsXG4gICAgICAgICAgZXJyb3I6IHBvbGxTZXR1cEVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBwb2xsU2V0dXBFcnJvci5tZXNzYWdlIDogU3RyaW5nKHBvbGxTZXR1cEVycm9yKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIFBvbGxpbmcgaXMgYSBmYWxsYmFjayBmb3IgZW52aXJvbm1lbnRzIHdoZXJlIGZzLndhdGNoIGlzIHVucmVsaWFibGUvdW5hdmFpbGFibGUgKGUuZy4sIEVNRklMRS9FTk9TUEMpLlxuICAgICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIGxldCBuZXh0OiBNYXA8c3RyaW5nLCBudW1iZXI+O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG5leHQgPSBzbmFwc2hvdCgpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IFtmaWxlbmFtZSwgbXRpbWVNc10gb2YgbmV4dCkge1xuICAgICAgICAgIGNvbnN0IHByaW9yTXRpbWUgPSBwcmV2aW91cy5nZXQoZmlsZW5hbWUpO1xuICAgICAgICAgIGlmIChwcmlvck10aW1lID09PSB1bmRlZmluZWQgfHwgcHJpb3JNdGltZSAhPT0gbXRpbWVNcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBoIG9mIGhhbmRsZXJzKSB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaChmaWxlbmFtZSk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ0ZpbGVXYXRjaFNlcnZpY2UgcG9sbGluZyBoYW5kbGVyIGZhaWxlZCcsIHtcbiAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeTogYWJzb2x1dGVEaXIsXG4gICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBlcnJvclxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVsZXRpb25zOiBub3RpZnkgaGFuZGxlcnMgc28gY2FsbGVycyBjYW4gcmVzY2FuLlxuICAgICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIHByZXZpb3VzLmtleXMoKSkge1xuICAgICAgICAgIGlmICghbmV4dC5oYXMoZmlsZW5hbWUpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGggb2YgaGFuZGxlcnMpIHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBoKGZpbGVuYW1lKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIud2FybignRmlsZVdhdGNoU2VydmljZSBwb2xsaW5nIGhhbmRsZXIgZmFpbGVkJywge1xuICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5OiBhYnNvbHV0ZURpcixcbiAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IGVycm9yXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91cyA9IG5leHQ7XG4gICAgICB9LCAyNTApO1xuXG4gICAgICBsb2dnZXIud2FybignRmFsbGluZyBiYWNrIHRvIHBvbGxpbmcgZGlyZWN0b3J5IHdhdGNoZXInLCB7XG4gICAgICAgIGRpcmVjdG9yeTogYWJzb2x1dGVEaXIsXG4gICAgICAgIHBoYXNlOiByZWFzb24/LnBoYXNlLFxuICAgICAgICBvcmlnaW5hbEVycm9yOiByZWFzb24/LmVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyByZWFzb24uZXJyb3IubWVzc2FnZSA6IHJlYXNvbj8uZXJyb3IsXG4gICAgICAgIGNvZGU6IHJlYXNvbj8uZXJyb3IgJiYgaXNOb2RlRXJyb3IocmVhc29uLmVycm9yKSA/IHJlYXNvbi5lcnJvci5jb2RlIDogdW5kZWZpbmVkXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG5ldyBQb2xsaW5nV2F0Y2hlcihpbnRlcnZhbCk7XG4gICAgfTtcblxuICAgIC8vIFRyeSB0byBzZXQgdXAgZmlsZSB3YXRjaGVyIC0gbWF5IGZhaWwgZHVlIHRvIHBlcm1pc3Npb24gcmVzdHJpY3Rpb25zIG9yIHBsYXRmb3JtIGxpbWl0YXRpb25zXG4gICAgbGV0IHdhdGNoZXI6IEZTV2F0Y2hlciB8IFBvbGxpbmdXYXRjaGVyIHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICB3YXRjaGVyID0gd2F0Y2goYWJzb2x1dGVEaXIsIHsgcmVjdXJzaXZlOiBmYWxzZSB9LCAoZXZlbnRUeXBlLCBmaWxlbmFtZSkgPT4ge1xuICAgICAgICBpZiAoIWZpbGVuYW1lKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlID0gZmlsZW5hbWUudG9TdHJpbmcoKTtcbiAgICAgICAgZm9yIChjb25zdCBoIG9mIGhhbmRsZXJzKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGgocmVsYXRpdmUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBsb2dnZXIud2FybignRmlsZVdhdGNoU2VydmljZSBoYW5kbGVyIGZhaWxlZCcsIHtcbiAgICAgICAgICAgICAgZGlyZWN0b3J5OiBhYnNvbHV0ZURpcixcbiAgICAgICAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogZXJyb3JcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAod2F0Y2hFcnJvcikge1xuICAgICAgLy8gRmlsZSB3YXRjaGluZyBmYWlsZWQgLSBmYWxsIGJhY2sgdG8gcG9sbGluZyAob3Igbm8tb3AgaWYgcG9sbGluZyBhbHNvIGZhaWxzKS5cbiAgICAgIC8vIENvbW1vbiBvbiBwbGF0Zm9ybXMgd2l0aCB3YXRjaCBsaW1pdHMgKEVNRklMRS9FTk9TUEMpIG9yIHJlc3RyaWN0ZWQgcGVybWlzc2lvbnMuXG4gICAgICBsb2dnZXIud2FybignRmFpbGVkIHRvIHNldCB1cCBmaWxlIHdhdGNoZXInLCB7XG4gICAgICAgIGRpcmVjdG9yeTogYWJzb2x1dGVEaXIsXG4gICAgICAgIGVycm9yOiB3YXRjaEVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyB3YXRjaEVycm9yLm1lc3NhZ2UgOiBTdHJpbmcod2F0Y2hFcnJvciksXG4gICAgICAgIGNvZGU6IGlzTm9kZUVycm9yKHdhdGNoRXJyb3IpID8gd2F0Y2hFcnJvci5jb2RlIDogdW5kZWZpbmVkXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcG9sbGluZ1dhdGNoZXIgPSBzdGFydFBvbGxpbmdXYXRjaGVyKHsgZXJyb3I6IHdhdGNoRXJyb3IsIHBoYXNlOiAnc2V0dXAnIH0pO1xuICAgICAgaWYgKCFwb2xsaW5nV2F0Y2hlcikge1xuICAgICAgICAvLyBSZXR1cm4gYSBuby1vcCBjbGVhbnVwIGZ1bmN0aW9uIHNpbmNlIHdhdGNoZXIgd2FzIG5vdCBjcmVhdGVkXG4gICAgICAgIHJldHVybiAoKSA9PiB7fTtcbiAgICAgIH1cblxuICAgICAgdGhpcy53YXRjaGVycy5zZXQoYWJzb2x1dGVEaXIsIHsgd2F0Y2hlcjogcG9sbGluZ1dhdGNoZXIsIGhhbmRsZXJzIH0pO1xuICAgICAgcmV0dXJuICgpID0+IHRoaXMuZGV0YWNoSGFuZGxlcihhYnNvbHV0ZURpciwgaGFuZGxlcik7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGVycm9yIGV2ZW50cyBmcm9tIHRoZSB3YXRjaGVyIChyZXF1aXJlZCBmb3IgV2luZG93cylcbiAgICAvLyBPbiBXaW5kb3dzLCBmcy53YXRjaCBlbWl0cyBlcnJvciBldmVudHMgZm9yIHBlcm1pc3Npb24gaXNzdWVzIChFUEVSTSlcbiAgICAvLyBXaXRob3V0IHRoaXMgaGFuZGxlciwgTm9kZS5qcyB0aHJvd3MgXCJVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFwiXG4gICAgbGV0IGVhcmx5V2F0Y2hFcnJvcjogdW5rbm93biB8IHVuZGVmaW5lZDtcbiAgICB3YXRjaGVyLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgLy8gSWYgdGhlIHdhdGNoZXIgZXJyb3JzIGltbWVkaWF0ZWx5IChiZWZvcmUgd2Ugc3RvcmUgaXQpLCByZWNvcmQgYW5kIGhhbmRsZSBhZnRlciBzZXR1cC5cbiAgICAgIGlmICghdGhpcy53YXRjaGVycy5oYXMoYWJzb2x1dGVEaXIpKSB7XG4gICAgICAgIGVhcmx5V2F0Y2hFcnJvciA9IGVycm9yO1xuICAgICAgICB3YXRjaGVyLmNsb3NlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbG9nZ2VyLndhcm4oJ0ZpbGUgd2F0Y2hlciBlcnJvciAtIGNsb3Npbmcgd2F0Y2hlcicsIHtcbiAgICAgICAgZGlyZWN0b3J5OiBhYnNvbHV0ZURpcixcbiAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICAgICAgY29kZTogaXNOb2RlRXJyb3IoZXJyb3IpID8gZXJyb3IuY29kZSA6IHVuZGVmaW5lZFxuICAgICAgfSk7XG5cbiAgICAgIC8vIENsb3NlIHRoZSB3YXRjaGVyIGFzIHJlY29tbWVuZGVkIGluIE5vZGUuanMgZG9jdW1lbnRhdGlvbi5cbiAgICAgIC8vIElmIHRoZSB3YXRjaGVyIGlzIGZhaWxpbmcgKGUuZy4sIEVNRklMRS9FTk9TUEMpLCBmYWxsIGJhY2sgdG8gcG9sbGluZyBzbyB0aGUgYXBwIGNhbiBzdGlsbCByZWFjdC5cbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLndhdGNoZXJzLmdldChhYnNvbHV0ZURpcik7XG4gICAgICBjb25zdCBpc0N1cnJlbnRXYXRjaGVyID0gY3VycmVudD8ud2F0Y2hlciA9PT0gd2F0Y2hlcjtcblxuICAgICAgd2F0Y2hlci5jbG9zZSgpO1xuXG4gICAgICBpZiAoaXNDdXJyZW50V2F0Y2hlcikge1xuICAgICAgICBjb25zdCBwb2xsaW5nV2F0Y2hlciA9IHN0YXJ0UG9sbGluZ1dhdGNoZXIoeyBlcnJvciwgcGhhc2U6ICdydW50aW1lJyB9KTtcbiAgICAgICAgaWYgKHBvbGxpbmdXYXRjaGVyKSB7XG4gICAgICAgICAgdGhpcy53YXRjaGVycy5zZXQoYWJzb2x1dGVEaXIsIHsgd2F0Y2hlcjogcG9sbGluZ1dhdGNoZXIsIGhhbmRsZXJzIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMud2F0Y2hlcnMuZGVsZXRlKGFic29sdXRlRGlyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy53YXRjaGVycy5zZXQoYWJzb2x1dGVEaXIsIHsgd2F0Y2hlciwgaGFuZGxlcnMgfSk7XG4gICAgbG9nZ2VyLmRlYnVnKCdTdGFydGVkIGRpcmVjdG9yeSB3YXRjaGVyJywgeyBkaXJlY3Rvcnk6IGFic29sdXRlRGlyIH0pO1xuXG4gICAgaWYgKGVhcmx5V2F0Y2hFcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ0ZpbGUgd2F0Y2hlciBlcnJvciBkdXJpbmcgaW5pdGlhbGl6YXRpb24gLSBzd2l0Y2hpbmcgdG8gcG9sbGluZycsIHtcbiAgICAgICAgZGlyZWN0b3J5OiBhYnNvbHV0ZURpcixcbiAgICAgICAgZXJyb3I6IGVhcmx5V2F0Y2hFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZWFybHlXYXRjaEVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZWFybHlXYXRjaEVycm9yKSxcbiAgICAgICAgY29kZTogaXNOb2RlRXJyb3IoZWFybHlXYXRjaEVycm9yKSA/IGVhcmx5V2F0Y2hFcnJvci5jb2RlIDogdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHBvbGxpbmdXYXRjaGVyID0gc3RhcnRQb2xsaW5nV2F0Y2hlcih7IGVycm9yOiBlYXJseVdhdGNoRXJyb3IsIHBoYXNlOiAncnVudGltZScgfSk7XG4gICAgICBpZiAocG9sbGluZ1dhdGNoZXIpIHtcbiAgICAgICAgdGhpcy53YXRjaGVycy5zZXQoYWJzb2x1dGVEaXIsIHsgd2F0Y2hlcjogcG9sbGluZ1dhdGNoZXIsIGhhbmRsZXJzIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy53YXRjaGVycy5kZWxldGUoYWJzb2x1dGVEaXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB0aGlzLmRldGFjaEhhbmRsZXIoYWJzb2x1dGVEaXIsIGhhbmRsZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRhY2hIYW5kbGVyKGRpcjogc3RyaW5nLCBoYW5kbGVyOiBGaWxlQ2hhbmdlSGFuZGxlcik6IHZvaWQge1xuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy53YXRjaGVycy5nZXQoZGlyKTtcbiAgICBpZiAoIWVudHJ5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVudHJ5LmhhbmRsZXJzLmRlbGV0ZShoYW5kbGVyKTtcbiAgICBpZiAoZW50cnkuaGFuZGxlcnMuc2l6ZSA9PT0gMCkge1xuICAgICAgZW50cnkud2F0Y2hlci5jbG9zZSgpO1xuICAgICAgdGhpcy53YXRjaGVycy5kZWxldGUoZGlyKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnU3RvcHBlZCBkaXJlY3Rvcnkgd2F0Y2hlcicsIHsgZGlyZWN0b3J5OiBkaXIgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2Ugb2YgYWxsIGZpbGUgd2F0Y2hlcnMuIENhbGxlZCBkdXJpbmcgZ3JhY2VmdWwgc2h1dGRvd24uXG4gICAqIFRoaXMgbWV0aG9kIGlzIGludm9rZWQgYnkgdGhlIERJIGNvbnRhaW5lcidzIGRpc3Bvc2UoKSBtZXRob2QuXG4gICAqL1xuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgW2RpciwgZW50cnldIG9mIHRoaXMud2F0Y2hlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGVudHJ5LndhdGNoZXIuY2xvc2UoKTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdDbG9zZWQgZGlyZWN0b3J5IHdhdGNoZXIgZHVyaW5nIGRpc3Bvc2UnLCB7IGRpcmVjdG9yeTogZGlyIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0Vycm9yIGNsb3Npbmcgd2F0Y2hlciBkdXJpbmcgZGlzcG9zZScsIHtcbiAgICAgICAgICBkaXJlY3Rvcnk6IGRpcixcbiAgICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLndhdGNoZXJzLmNsZWFyKCk7XG4gICAgbG9nZ2VyLmRlYnVnKCdGaWxlV2F0Y2hTZXJ2aWNlIGRpc3Bvc2VkJywgeyB3YXRjaGVyc0Nsb3NlZDogdGhpcy53YXRjaGVycy5zaXplID09PSAwIH0pO1xuICB9XG59XG4iXX0=
311
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmlsZVdhdGNoU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9GaWxlV2F0Y2hTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxLQUFLLEVBQWEsVUFBVSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQVM1QyxNQUFNLGNBQWM7SUFDRCxRQUFRLENBQWlCO0lBRTFDLFlBQVksUUFBd0I7UUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVELEtBQUs7UUFDSCxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCw2REFBNkQ7SUFDN0QsRUFBRSxDQUFDLE1BQWMsRUFBRSxTQUF1QztRQUN4RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsU0FBUyxXQUFXLENBQUMsS0FBYztJQUNqQyxPQUFPLEtBQUssWUFBWSxLQUFLLElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQztBQUNuRCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ1YsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFzQixDQUFDO0lBQ3pDLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBeUMsQ0FBQztJQUVuRjs7Ozs7Ozs7Ozs7Ozs7O09BZUc7SUFDSCxjQUFjLENBQUMsT0FBZSxFQUFFLE9BQTBCO1FBQ3hELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMs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QyxRQUFRLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUM7Z0JBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxDQUFDLEtBQUssQ0FBQyx5Q0FBeUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzlFLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0NBQXNDLEVBQUU7b0JBQ2xELFNBQVMsRUFBRSxHQUFHO29CQUNkLEtBQUssRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2lCQUM5RCxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEIsTUFBTSxDQUFDLEtBQUssQ0FBQywyQkFBMkIsRUFBRSxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IHdhdGNoLCBGU1dhdGNoZXIsIGFjY2Vzc1N5bmMsIG1rZGlyU3luYywgcmVhZGRpclN5bmMsIHN0YXRTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuXG5leHBvcnQgdHlwZSBGaWxlQ2hhbmdlSGFuZGxlciA9IChyZWxhdGl2ZVBhdGg6IHN0cmluZykgPT4gdm9pZDtcblxuaW50ZXJmYWNlIFdhdGNoRW50cnkge1xuICB3YXRjaGVyOiBGU1dhdGNoZXIgfCBQb2xsaW5nV2F0Y2hlcjtcbiAgaGFuZGxlcnM6IFNldDxGaWxlQ2hhbmdlSGFuZGxlcj47XG59XG5cbmNsYXNzIFBvbGxpbmdXYXRjaGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBpbnRlcnZhbDogTm9kZUpTLlRpbWVvdXQ7XG5cbiAgY29uc3RydWN0b3IoaW50ZXJ2YWw6IE5vZGVKUy5UaW1lb3V0KSB7XG4gICAgdGhpcy5pbnRlcnZhbCA9IGludGVydmFsO1xuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTtcbiAgfVxuXG4gIC8vIE1hdGNoIHRoZSBmcy5GU1dhdGNoZXIgc2hhcGUgd2VsbCBlbm91Z2ggZm9yIGludGVybmFsIHVzZS5cbiAgb24oX2V2ZW50OiBzdHJpbmcsIF9saXN0ZW5lcjogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhbiBlcnJvciBpcyBhIE5vZGUuanMgc3lzdGVtIGVycm9yIHdpdGggYW4gZXJyb3IgY29kZVxuICovXG5mdW5jdGlvbiBpc05vZGVFcnJvcihlcnJvcjogdW5rbm93bik6IGVycm9yIGlzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbiB7XG4gIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICdjb2RlJyBpbiBlcnJvcjtcbn1cblxuLyoqXG4gKiBUaGluIHdyYXBwZXIgb3ZlciBmcy53YXRjaCB0aGF0IGZhbi1vdXRzIGNoYW5nZSBldmVudHMgdG8gaW50ZXJlc3RlZCBtYW5hZ2Vycy5cbiAqXG4gKiBUaGlzIHNlcnZpY2UgaXMgbWFuYWdlZCBhcyBhIHNpbmdsZXRvbiBieSB0aGUgREkgY29udGFpbmVyLlxuICogSW5qZWN0IGl0IHZpYSBjb25zdHJ1Y3RvciBpbmplY3Rpb24gcmF0aGVyIHRoYW4gdXNpbmcgYSBzdGF0aWMgZ2V0SW5zdGFuY2UoKSBtZXRob2QuXG4gKi9cbmV4cG9ydCBjbGFzcyBGaWxlV2F0Y2hTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSB3YXRjaGVycyA9IG5ldyBNYXA8c3RyaW5nLCBXYXRjaEVudHJ5PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlYm91bmNlVGltZXJzID0gbmV3IE1hcDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+PigpO1xuXG4gIC8qKlxuICAgKiBXYXRjaCBhIGRpcmVjdG9yeSBmb3IgY2hhbmdlcy4gSWYgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBkaXJQYXRoIC0gUGF0aCB0byBkaXJlY3RvcnkgdG8gd2F0Y2hcbiAgICogQHBhcmFtIGhhbmRsZXIgLSBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIHdoZW4gZmlsZXMgY2hhbmdlXG4gICAqIEByZXR1cm5zIENsZWFudXAgZnVuY3Rpb24gdG8gc3RvcCB3YXRjaGluZ1xuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIG1ldGhvZCBlbnN1cmVzIHRoZSBkaXJlY3RvcnkgZXhpc3RzIGJlZm9yZSBzZXR0aW5nIHVwIHRoZSB3YXRjaGVyLlxuICAgKiBmcy53YXRjaCB0aHJvd3MgRU5PRU5UIGlmIHRoZSBkaXJlY3RvcnkgZG9lc24ndCBleGlzdCwgc28gd2UgY3JlYXRlIGl0XG4gICAqIHdpdGggcmVjdXJzaXZlOnRydWUgdG8gaGFuZGxlIHRlc3Qgc2NlbmFyaW9zIGFuZCBlZGdlIGNhc2VzIGdyYWNlZnVsbHkuXG4gICAqXG4gICAqIEZpbGUgd2F0Y2hpbmcgaXMgb3B0aW9uYWwgZnVuY3Rpb25hbGl0eS4gSWYgZnMud2F0Y2goKSBmYWlscyBkdWUgdG8gcGVybWlzc2lvblxuICAgKiByZXN0cmljdGlvbnMgb3IgcGxhdGZvcm0gbGltaXRhdGlvbnMsIGEgbm8tb3AgY2xlYW51cCBmdW5jdGlvbiBpcyByZXR1cm5lZCBhbmRcbiAgICogdGhlIGFwcGxpY2F0aW9uIGNvbnRpbnVlcyB3aXRob3V0IGZpbGUgd2F0Y2hpbmcgZm9yIHRoYXQgZGlyZWN0b3J5LlxuICAgKi9cbiAgd2F0Y2hEaXJlY3RvcnkoZGlyUGF0aDogc3RyaW5nLCBoYW5kbGVyOiBGaWxlQ2hhbmdlSGFuZGxlcik6ICgpID0+IHZvaWQge1xuICAgIGNvbnN0IGFic29sdXRlRGlyID0gcGF0aC5yZXNvbHZlKGRpclBhdGgpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy53YXRjaGVycy5nZXQoYWJzb2x1dGVEaXIpO1xuXG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICBleGlzdGluZy5oYW5kbGVycy5hZGQoaGFuZGxlcik7XG4gICAgICByZXR1cm4gKCkgPT4gdGhpcy5kZXRhY2hIYW5kbGVyKGFic29sdXRlRGlyLCBoYW5kbGVyKTtcbiAgICB9XG5cbiAgICAvLyBFbnN1cmUgZGlyZWN0b3J5IGV4aXN0cyBiZWZvcmUgd2F0Y2hpbmdcbiAgICAvLyBmcy53YXRjaCB0aHJvd3MgRU5PRU5UIGlmIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LCBzbyB3ZSBjcmVhdGUgaXQgZmlyc3RcbiAgICB0cnkge1xuICAgICAgYWNjZXNzU3luYyhhYnNvbHV0ZURpcik7XG4gICAgfSBjYXRjaCAoX2Vycm9yKSB7XG4gICAgICAvLyBEaXJlY3RvcnkgZG9lc24ndCBleGlzdCAtIGNyZWF0ZSBpdFxuICAgICAgdHJ5IHtcbiAgICAgICAgbWtkaXJTeW5jKGFic29sdXRlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdDcmVhdGVkIGRpcmVjdG9yeSBmb3Igd2F0Y2hpbmcnLCB7IGRpcmVjdG9yeTogYWJzb2x1dGVEaXIgfSk7XG4gICAgICB9IGNhdGNoIChta2RpckVycm9yKSB7XG4gICAgICAgIC8vIEZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5IC0gbG9nIGFuZCByZXR1cm4gbm8tb3AgY2xlYW51cFxuICAgICAgICBsb2dnZXIud2FybignRmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgZm9yIHdhdGNoaW5nIC0gd2F0Y2hlciB3aWxsIG5vdCBiZSBzZXQgdXAnLCB7XG4gICAgICAgICAgZGlyZWN0b3J5OiBhYnNvbHV0ZURpcixcbiAgICAgICAgICBlcnJvcjogbWtkaXJFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gbWtkaXJFcnJvci5tZXNzYWdlIDogU3RyaW5nKG1rZGlyRXJyb3IpXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBSZXR1cm4gYSBuby1vcCBjbGVhbnVwIGZ1bmN0aW9uIHNpbmNlIHdhdGNoZXIgd2FzIG5vdCBjcmVhdGVkXG4gICAgICAgIHJldHVybiAoKSA9PiB7fTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVycyA9IG5ldyBTZXQ8RmlsZUNoYW5nZUhhbmRsZXI+KFtoYW5kbGVyXSk7XG5cbiAgICBjb25zdCBzdGFydFBvbGxpbmdXYXRjaGVyID0gKHJlYXNvbjogeyBlcnJvcjogdW5rbm93bjsgcGhhc2U6ICdzZXR1cCcgfCAncnVudGltZScgfSB8IHVuZGVmaW5lZCk6IFBvbGxpbmdXYXRjaGVyIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgIGNvbnN0IHNuYXBzaG90ID0gKCk6IE1hcDxzdHJpbmcsIG51bWJlcj4gPT4ge1xuICAgICAgICBjb25zdCBuZXh0ID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiByZWFkZGlyU3luYyhhYnNvbHV0ZURpciwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pKSB7XG4gICAgICAgICAgaWYgKCFlbnRyeS5pc0ZpbGUoKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0cyA9IHN0YXRTeW5jKHBhdGguam9pbihhYnNvbHV0ZURpciwgZW50cnkubmFtZSkpO1xuICAgICAgICAgICAgbmV4dC5zZXQoZW50cnkubmFtZSwgc3RhdHMubXRpbWVNcyk7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBJZ25vcmUgcmFjZXMgKGZpbGUgcmVtb3ZlZCBiZXR3ZWVuIHJlYWRkaXIgYW5kIHN0YXQsIGV0Yy4pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgfTtcblxuICAgICAgbGV0IHByZXZpb3VzOiBNYXA8c3RyaW5nLCBudW1iZXI+O1xuICAgICAgdHJ5IHtcbiAgICAgICAgcHJldmlvdXMgPSBzbmFwc2hvdCgpO1xuICAgICAgfSBjYXRjaCAocG9sbFNldHVwRXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byBpbml0aWFsaXplIHBvbGxpbmcgZGlyZWN0b3J5IHdhdGNoZXInLCB7XG4gICAgICAgICAgZGlyZWN0b3J5OiBhYnNvbHV0ZURpcixcbiAgICAgICAgICBwaGFzZTogcmVhc29uPy5waGFzZSxcbiAgICAgICAgICBvcmlnaW5hbEVycm9yOiByZWFzb24/LmVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyByZWFzb24uZXJyb3IubWVzc2FnZSA6IHJlYXNvbj8uZXJyb3IsXG4gICAgICAgICAgZXJyb3I6IHBvbGxTZXR1cEVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBwb2xsU2V0dXBFcnJvci5tZXNzYWdlIDogU3RyaW5nKHBvbGxTZXR1cEVycm9yKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkYXB0aXZlIHBvbGxpbmcgaW50ZXJ2YWw6IHNjYWxlIHdpdGggZGlyZWN0b3J5IHNpemUgdG8gcHJldmVudFxuICAgICAgLy8gc2Nhbi1vdmVybGFwcyBvbiBsYXJnZSBwb3J0Zm9saW9zIChJc3N1ZSAjMTY4NykuXG4gICAgICAvLyBCYXNlOiAycywgKzJtcyBwZXIgZmlsZSwgY2FwcGVkIGF0IDEwcy5cbiAgICAgIGNvbnN0IGJhc2VJbnRlcnZhbE1zID0gMjAwMDtcbiAgICAgIGNvbnN0IHBlckZpbGVNcyA9IDI7XG4gICAgICBjb25zdCBtYXhJbnRlcnZhbE1zID0gMTBfMDAwO1xuICAgICAgY29uc3QgYWRhcHRpdmVJbnRlcnZhbCA9IE1hdGgubWluKFxuICAgICAgICBiYXNlSW50ZXJ2YWxNcyArIHByZXZpb3VzLnNpemUgKiBwZXJGaWxlTXMsXG4gICAgICAgIG1heEludGVydmFsTXMsXG4gICAgICApO1xuXG4gICAgICAvLyBHdWFyZDogc2tpcCBwb2xsIGlmIGEgcHJldmlvdXMgc2NhbiBpcyBzdGlsbCBiZWluZyBwcm9jZXNzZWRcbiAgICAgIGxldCBzY2FuSW5Qcm9ncmVzcyA9IGZhbHNlO1xuXG4gICAgICAvLyBEZWJvdW5jZTogYmF0Y2ggY2hhbmdlZCBmaWxlcyBhbmQgbm90aWZ5IGhhbmRsZXJzIG9uY2UgcGVyIGN5Y2xlXG4gICAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgaWYgKHNjYW5JblByb2dyZXNzKSByZXR1cm47XG4gICAgICAgIHNjYW5JblByb2dyZXNzID0gdHJ1ZTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGxldCBuZXh0OiBNYXA8c3RyaW5nLCBudW1iZXI+O1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXh0ID0gc25hcHNob3QoKTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDb2xsZWN0IGFsbCBjaGFuZ2VkIGZpbGVzIGJlZm9yZSBub3RpZnlpbmcgaGFuZGxlcnNcbiAgICAgICAgICBjb25zdCBjaGFuZ2VkRmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IFtmaWxlbmFtZSwgbXRpbWVNc10gb2YgbmV4dCkge1xuICAgICAgICAgICAgY29uc3QgcHJpb3JNdGltZSA9IHByZXZpb3VzLmdldChmaWxlbmFtZSk7XG4gICAgICAgICAgICBpZiAocHJpb3JNdGltZSA9PT0gdW5kZWZpbmVkIHx8IHByaW9yTXRpbWUgIT09IG10aW1lTXMpIHtcbiAgICAgICAgICAgICAgY2hhbmdlZEZpbGVzLnB1c2goZmlsZW5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIERlbGV0aW9uc1xuICAgICAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgcHJldmlvdXMua2V5cygpKSB7XG4gICAgICAgICAgICBpZiAoIW5leHQuaGFzKGZpbGVuYW1lKSkge1xuICAgICAgICAgICAgICBjaGFuZ2VkRmlsZXMucHVzaChmaWxlbmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gTm90aWZ5IGhhbmRsZXJzIG9uY2UgcGVyIGNoYW5nZWQgZmlsZSAoZGVkdXBsaWNhdGVkKVxuICAgICAgICAgIGlmIChjaGFuZ2VkRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgdW5pcXVlQ2hhbmdlcyA9IFsuLi5uZXcgU2V0KGNoYW5nZWRGaWxlcyldO1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiB1bmlxdWVDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgaCBvZiBoYW5kbGVycykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBoKGZpbGVuYW1lKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ0ZpbGVXYXRjaFNlcnZpY2UgcG9sbGluZyBoYW5kbGVyIGZhaWxlZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5OiBhYnNvbHV0ZURpcixcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogZXJyb3JcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHByZXZpb3VzID0gbmV4dDtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzY2FuSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9LCBhZGFwdGl2ZUludGVydmFsKTtcblxuICAgICAgbG9nZ2VyLndhcm4oJ0ZhbGxpbmcgYmFjayB0byBwb2xsaW5nIGRpcmVjdG9yeSB3YXRjaGVyJywge1xuICAgICAgICBkaXJlY3Rvcnk6IGFic29sdXRlRGlyLFxuICAgICAgICBwaGFzZTogcmVhc29uPy5waGFzZSxcbiAgICAgICAgb3JpZ2luYWxFcnJvcjogcmVhc29uPy5lcnJvciBpbnN0YW5jZW9mIEVycm9yID8gcmVhc29uLmVycm9yLm1lc3NhZ2UgOiByZWFzb24/LmVycm9yLFxuICAgICAgICBjb2RlOiByZWFzb24/LmVycm9yICYmIGlzTm9kZUVycm9yKHJlYXNvbi5lcnJvcikgPyByZWFzb24uZXJyb3IuY29kZSA6IHVuZGVmaW5lZFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBuZXcgUG9sbGluZ1dhdGNoZXIoaW50ZXJ2YWwpO1xuICAgIH07XG5cbiAgICAvLyBUcnkgdG8gc2V0IHVwIGZpbGUgd2F0Y2hlciAtIG1heSBmYWlsIGR1ZSB0byBwZXJtaXNzaW9uIHJlc3RyaWN0aW9ucyBvciBwbGF0Zm9ybSBsaW1pdGF0aW9uc1xuICAgIGxldCB3YXRjaGVyOiBGU1dhdGNoZXIgfCBQb2xsaW5nV2F0Y2hlciB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgLy8gRGVib3VuY2UgZnMud2F0Y2ggZXZlbnRzIOKAlCBjb2FsZXNjZSByYXBpZC1maXJlIG5vdGlmaWNhdGlvbnMgaW50b1xuICAgICAgLy8gYSBzaW5nbGUgaGFuZGxlciBjYWxsIHBlciBmaWxlIHdpdGhpbiBhIDUwMG1zIHdpbmRvdyAoSXNzdWUgIzE2ODcpLlxuICAgICAgY29uc3QgcGVuZGluZ0NoYW5nZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgd2F0Y2hlciA9IHdhdGNoKGFic29sdXRlRGlyLCB7IHJlY3Vyc2l2ZTogZmFsc2UgfSwgKF9ldmVudFR5cGUsIGZpbGVuYW1lKSA9PiB7XG4gICAgICAgIGlmICghZmlsZW5hbWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcGVuZGluZ0NoYW5nZXMuYWRkKGZpbGVuYW1lLnRvU3RyaW5nKCkpO1xuXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nVGltZXIgPSB0aGlzLmRlYm91bmNlVGltZXJzLmdldChhYnNvbHV0ZURpcik7XG4gICAgICAgIGlmIChleGlzdGluZ1RpbWVyKSBjbGVhclRpbWVvdXQoZXhpc3RpbmdUaW1lcik7XG4gICAgICAgIHRoaXMuZGVib3VuY2VUaW1lcnMuc2V0KGFic29sdXRlRGlyLCBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmRlYm91bmNlVGltZXJzLmRlbGV0ZShhYnNvbHV0ZURpcik7XG4gICAgICAgICAgY29uc3QgZmlsZXMgPSBbLi4ucGVuZGluZ0NoYW5nZXNdO1xuICAgICAgICAgIHBlbmRpbmdDaGFuZ2VzLmNsZWFyKCk7XG4gICAgICAgICAgZm9yIChjb25zdCByZWxhdGl2ZSBvZiBmaWxlcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBoIG9mIGhhbmRsZXJzKSB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaChyZWxhdGl2ZSk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ0ZpbGVXYXRjaFNlcnZpY2UgaGFuZGxlciBmYWlsZWQnLCB7XG4gICAgICAgICAgICAgICAgICBkaXJlY3Rvcnk6IGFic29sdXRlRGlyLFxuICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogZXJyb3JcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSwgNTAwKSk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoICh3YXRjaEVycm9yKSB7XG4gICAgICAvLyBGaWxlIHdhdGNoaW5nIGZhaWxlZCAtIGZhbGwgYmFjayB0byBwb2xsaW5nIChvciBuby1vcCBpZiBwb2xsaW5nIGFsc28gZmFpbHMpLlxuICAgICAgLy8gQ29tbW9uIG9uIHBsYXRmb3JtcyB3aXRoIHdhdGNoIGxpbWl0cyAoRU1GSUxFL0VOT1NQQykgb3IgcmVzdHJpY3RlZCBwZXJtaXNzaW9ucy5cbiAgICAgIGxvZ2dlci53YXJuKCdGYWlsZWQgdG8gc2V0IHVwIGZpbGUgd2F0Y2hlcicsIHtcbiAgICAgICAgZGlyZWN0b3J5OiBhYnNvbHV0ZURpcixcbiAgICAgICAgZXJyb3I6IHdhdGNoRXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IHdhdGNoRXJyb3IubWVzc2FnZSA6IFN0cmluZyh3YXRjaEVycm9yKSxcbiAgICAgICAgY29kZTogaXNOb2RlRXJyb3Iod2F0Y2hFcnJvcikgPyB3YXRjaEVycm9yLmNvZGUgOiB1bmRlZmluZWRcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBwb2xsaW5nV2F0Y2hlciA9IHN0YXJ0UG9sbGluZ1dhdGNoZXIoeyBlcnJvcjogd2F0Y2hFcnJvciwgcGhhc2U6ICdzZXR1cCcgfSk7XG4gICAgICBpZiAoIXBvbGxpbmdXYXRjaGVyKSB7XG4gICAgICAgIC8vIFJldHVybiBhIG5vLW9wIGNsZWFudXAgZnVuY3Rpb24gc2luY2Ugd2F0Y2hlciB3YXMgbm90IGNyZWF0ZWRcbiAgICAgICAgcmV0dXJuICgpID0+IHt9O1xuICAgICAgfVxuXG4gICAgICB0aGlzLndhdGNoZXJzLnNldChhYnNvbHV0ZURpciwgeyB3YXRjaGVyOiBwb2xsaW5nV2F0Y2hlciwgaGFuZGxlcnMgfSk7XG4gICAgICByZXR1cm4gKCkgPT4gdGhpcy5kZXRhY2hIYW5kbGVyKGFic29sdXRlRGlyLCBoYW5kbGVyKTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgZXJyb3IgZXZlbnRzIGZyb20gdGhlIHdhdGNoZXIgKHJlcXVpcmVkIGZvciBXaW5kb3dzKVxuICAgIC8vIE9uIFdpbmRvd3MsIGZzLndhdGNoIGVtaXRzIGVycm9yIGV2ZW50cyBmb3IgcGVybWlzc2lvbiBpc3N1ZXMgKEVQRVJNKVxuICAgIC8vIFdpdGhvdXQgdGhpcyBoYW5kbGVyLCBOb2RlLmpzIHRocm93cyBcIlVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XCJcbiAgICBsZXQgZWFybHlXYXRjaEVycm9yOiB1bmtub3duIHwgdW5kZWZpbmVkO1xuICAgIHdhdGNoZXIub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAvLyBJZiB0aGUgd2F0Y2hlciBlcnJvcnMgaW1tZWRpYXRlbHkgKGJlZm9yZSB3ZSBzdG9yZSBpdCksIHJlY29yZCBhbmQgaGFuZGxlIGFmdGVyIHNldHVwLlxuICAgICAgaWYgKCF0aGlzLndhdGNoZXJzLmhhcyhhYnNvbHV0ZURpcikpIHtcbiAgICAgICAgZWFybHlXYXRjaEVycm9yID0gZXJyb3I7XG4gICAgICAgIHdhdGNoZXIuY2xvc2UoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIud2FybignRmlsZSB3YXRjaGVyIGVycm9yIC0gY2xvc2luZyB3YXRjaGVyJywge1xuICAgICAgICBkaXJlY3Rvcnk6IGFic29sdXRlRGlyLFxuICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICBjb2RlOiBpc05vZGVFcnJvcihlcnJvcikgPyBlcnJvci5jb2RlIDogdW5kZWZpbmVkXG4gICAgICB9KTtcblxuICAgICAgLy8gQ2xvc2UgdGhlIHdhdGNoZXIgYXMgcmVjb21tZW5kZWQgaW4gTm9kZS5qcyBkb2N1bWVudGF0aW9uLlxuICAgICAgLy8gSWYgdGhlIHdhdGNoZXIgaXMgZmFpbGluZyAoZS5nLiwgRU1GSUxFL0VOT1NQQyksIGZhbGwgYmFjayB0byBwb2xsaW5nIHNvIHRoZSBhcHAgY2FuIHN0aWxsIHJlYWN0LlxuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMud2F0Y2hlcnMuZ2V0KGFic29sdXRlRGlyKTtcbiAgICAgIGNvbnN0IGlzQ3VycmVudFdhdGNoZXIgPSBjdXJyZW50Py53YXRjaGVyID09PSB3YXRjaGVyO1xuXG4gICAgICB3YXRjaGVyLmNsb3NlKCk7XG5cbiAgICAgIGlmIChpc0N1cnJlbnRXYXRjaGVyKSB7XG4gICAgICAgIGNvbnN0IHBvbGxpbmdXYXRjaGVyID0gc3RhcnRQb2xsaW5nV2F0Y2hlcih7IGVycm9yLCBwaGFzZTogJ3J1bnRpbWUnIH0pO1xuICAgICAgICBpZiAocG9sbGluZ1dhdGNoZXIpIHtcbiAgICAgICAgICB0aGlzLndhdGNoZXJzLnNldChhYnNvbHV0ZURpciwgeyB3YXRjaGVyOiBwb2xsaW5nV2F0Y2hlciwgaGFuZGxlcnMgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy53YXRjaGVycy5kZWxldGUoYWJzb2x1dGVEaXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLndhdGNoZXJzLnNldChhYnNvbHV0ZURpciwgeyB3YXRjaGVyLCBoYW5kbGVycyB9KTtcbiAgICBsb2dnZXIuZGVidWcoJ1N0YXJ0ZWQgZGlyZWN0b3J5IHdhdGNoZXInLCB7IGRpcmVjdG9yeTogYWJzb2x1dGVEaXIgfSk7XG5cbiAgICBpZiAoZWFybHlXYXRjaEVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignRmlsZSB3YXRjaGVyIGVycm9yIGR1cmluZyBpbml0aWFsaXphdGlvbiAtIHN3aXRjaGluZyB0byBwb2xsaW5nJywge1xuICAgICAgICBkaXJlY3Rvcnk6IGFic29sdXRlRGlyLFxuICAgICAgICBlcnJvcjogZWFybHlXYXRjaEVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlYXJseVdhdGNoRXJyb3IubWVzc2FnZSA6IFN0cmluZyhlYXJseVdhdGNoRXJyb3IpLFxuICAgICAgICBjb2RlOiBpc05vZGVFcnJvcihlYXJseVdhdGNoRXJyb3IpID8gZWFybHlXYXRjaEVycm9yLmNvZGUgOiB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcG9sbGluZ1dhdGNoZXIgPSBzdGFydFBvbGxpbmdXYXRjaGVyKHsgZXJyb3I6IGVhcmx5V2F0Y2hFcnJvciwgcGhhc2U6ICdydW50aW1lJyB9KTtcbiAgICAgIGlmIChwb2xsaW5nV2F0Y2hlcikge1xuICAgICAgICB0aGlzLndhdGNoZXJzLnNldChhYnNvbHV0ZURpciwgeyB3YXRjaGVyOiBwb2xsaW5nV2F0Y2hlciwgaGFuZGxlcnMgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLndhdGNoZXJzLmRlbGV0ZShhYnNvbHV0ZURpcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHRoaXMuZGV0YWNoSGFuZGxlcihhYnNvbHV0ZURpciwgaGFuZGxlcik7XG4gIH1cblxuICBwcml2YXRlIGRldGFjaEhhbmRsZXIoZGlyOiBzdHJpbmcsIGhhbmRsZXI6IEZpbGVDaGFuZ2VIYW5kbGVyKTogdm9pZCB7XG4gICAgY29uc3QgZW50cnkgPSB0aGlzLndhdGNoZXJzLmdldChkaXIpO1xuICAgIGlmICghZW50cnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZW50cnkuaGFuZGxlcnMuZGVsZXRlKGhhbmRsZXIpO1xuICAgIGlmIChlbnRyeS5oYW5kbGVycy5zaXplID09PSAwKSB7XG4gICAgICBlbnRyeS53YXRjaGVyLmNsb3NlKCk7XG4gICAgICB0aGlzLndhdGNoZXJzLmRlbGV0ZShkaXIpO1xuICAgICAgbG9nZ2VyLmRlYnVnKCdTdG9wcGVkIGRpcmVjdG9yeSB3YXRjaGVyJywgeyBkaXJlY3Rvcnk6IGRpciB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGlzcG9zZSBvZiBhbGwgZmlsZSB3YXRjaGVycy4gQ2FsbGVkIGR1cmluZyBncmFjZWZ1bCBzaHV0ZG93bi5cbiAgICogVGhpcyBtZXRob2QgaXMgaW52b2tlZCBieSB0aGUgREkgY29udGFpbmVyJ3MgZGlzcG9zZSgpIG1ldGhvZC5cbiAgICovXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgLy8gQ2xlYXIgYWxsIHBlbmRpbmcgZGVib3VuY2UgdGltZXJzIHRvIHByZXZlbnQgcG9zdC1kaXNwb3NlIGhhbmRsZXIgY2FsbHNcbiAgICBmb3IgKGNvbnN0IFssIHRpbWVyXSBvZiB0aGlzLmRlYm91bmNlVGltZXJzKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgIH1cbiAgICB0aGlzLmRlYm91bmNlVGltZXJzLmNsZWFyKCk7XG5cbiAgICBmb3IgKGNvbnN0IFtkaXIsIGVudHJ5XSBvZiB0aGlzLndhdGNoZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBlbnRyeS53YXRjaGVyLmNsb3NlKCk7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnQ2xvc2VkIGRpcmVjdG9yeSB3YXRjaGVyIGR1cmluZyBkaXNwb3NlJywgeyBkaXJlY3Rvcnk6IGRpciB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdFcnJvciBjbG9zaW5nIHdhdGNoZXIgZHVyaW5nIGRpc3Bvc2UnLCB7XG4gICAgICAgICAgZGlyZWN0b3J5OiBkaXIsXG4gICAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy53YXRjaGVycy5jbGVhcigpO1xuICAgIGxvZ2dlci5kZWJ1ZygnRmlsZVdhdGNoU2VydmljZSBkaXNwb3NlZCcsIHsgd2F0Y2hlcnNDbG9zZWQ6IHRoaXMud2F0Y2hlcnMuc2l6ZSA9PT0gMCB9KTtcbiAgfVxufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataService.d.ts","sourceRoot":"","sources":["../../src/services/MetadataService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAMpD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,wFAAwF;IACxF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,+DAA+D;IAC/D,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,0DAA0D;IAC1D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,4DAA4D;IAC5D,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,mDAAmD;IACnD,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEnC,8FAA8F;IAC9F,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAuB;IAE1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH,iBAAiB,CAAC,CAAC,SAAS,YAAY,EACtC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EACf,WAAW,EAAE,WAAW,EACxB,OAAO,GAAE,4BAAiC,GACzC,CAAC;IAiFJ;;;;;;;;;;;;;;OAcG;IACH,uBAAuB,CACrB,WAAW,EAAE,WAAW,EACxB,SAAS,GAAE,OAAO,CAAC,YAAY,CAAM,GACpC,YAAY;IAcf;;;;;;;;;;;;;;;;;OAiBG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAKpD;;;;;;;;;;;;;OAaG;IACH,cAAc,IAAI,MAAM;IAqBxB;;;;;;;;OAQG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAK7C;;;;;;;;;;;;;;;;;;;OAmBG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAKzC;;;;;;;;;;;;;;;;OAgBG;IACH,YAAY,CAAC,MAAM,GAAE,MAAM,GAAG,WAAoB,GAAG,MAAM;IAY3D;;;;;;;;;;;;;;;;;OAiBG;IACH,gBAAgB,CACd,QAAQ,EAAE,YAAY,EACtB,WAAW,EAAE,WAAW,GACvB;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE;IAkDxC;;;OAGG;IACH,OAAO,CAAC,kBAAkB;CAY3B"}
1
+ {"version":3,"file":"MetadataService.d.ts","sourceRoot":"","sources":["../../src/services/MetadataService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAMpD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,wFAAwF;IACxF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,+DAA+D;IAC/D,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,0DAA0D;IAC1D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,4DAA4D;IAC5D,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,mDAAmD;IACnD,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEnC,8FAA8F;IAC9F,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAuB;IAE1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH,iBAAiB,CAAC,CAAC,SAAS,YAAY,EACtC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EACf,WAAW,EAAE,WAAW,EACxB,OAAO,GAAE,4BAAiC,GACzC,CAAC;IAqFJ;;;;;;;;;;;;;;OAcG;IACH,uBAAuB,CACrB,WAAW,EAAE,WAAW,EACxB,SAAS,GAAE,OAAO,CAAC,YAAY,CAAM,GACpC,YAAY;IAcf;;;;;;;;;;;;;;;;;OAiBG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAKpD;;;;;;;;;;;;;OAaG;IACH,cAAc,IAAI,MAAM;IAqBxB;;;;;;;;OAQG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAK7C;;;;;;;;;;;;;;;;;;;OAmBG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAKzC;;;;;;;;;;;;;;;;OAgBG;IACH,YAAY,CAAC,MAAM,GAAE,MAAM,GAAG,WAAoB,GAAG,MAAM;IAY3D;;;;;;;;;;;;;;;;;OAiBG;IACH,gBAAgB,CACd,QAAQ,EAAE,YAAY,EACtB,WAAW,EAAE,WAAW,GACvB;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE;IAkDxC;;;OAGG;IACH,OAAO,CAAC,kBAAkB;CAY3B"}
@@ -134,7 +134,12 @@ export class MetadataService {
134
134
  }
135
135
  // Created date (YYYY-MM-DD format, matching PersonaManager line 178)
136
136
  if (opts.setCreated && !normalized.created) {
137
- normalized.created = this.generateDate('date-only');
137
+ if (normalized.created_date) {
138
+ normalized.created = String(normalized.created_date).split('T')[0];
139
+ }
140
+ else {
141
+ normalized.created = this.generateDate('date-only');
142
+ }
138
143
  }
139
144
  // Modified date (ISO 8601 full format, matching AgentManager line 231)
140
145
  if (opts.setModified && !normalized.modified) {
@@ -378,4 +383,4 @@ export class MetadataService {
378
383
  return typeNames[elementType] || 'Element';
379
384
  }
380
385
  }
381
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWV0YWRhdGFTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL01ldGFkYXRhU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUVILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbkMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUErQzVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBQ2xCLFdBQVcsR0FBa0IsSUFBSSxDQUFDO0lBRTFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0E4Qkc7SUFDSCxpQkFBaUIsQ0FDZixHQUFlLEVBQ2YsV0FBd0IsRUFDeEIsVUFBd0MsRUFBRTtRQUUxQyxzQkFBc0I7UUFDdEIsTUFBTSxJQUFJLEdBQUc7WUFDWCxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsZ0JBQWdCLElBQUksS0FBSztZQUNuRCxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsSUFBSSxJQUFJO1lBQ3RDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJO1lBQ2xELFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxJQUFJLElBQUk7WUFDcEMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksSUFBSTtZQUN0QyxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVcsSUFBSSxJQUFJO1lB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LE1BQU0sS0FBSyxDQUFDO1lBQzFCLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQy9DLENBQUM7SUFDSixDQUFDO0lBRUQseUJBQXlCO0lBRXpCOzs7T0FHRztJQUNLLGtCQUFrQixDQUFDLFdBQXdCO1FBQ2pELE1BQU0sU0FBUyxHQUFnQztZQUM3QyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPO1lBQzVCLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFNBQVM7WUFDaEMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsVUFBVTtZQUNsQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPO1lBQzVCLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVE7WUFDOUIsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsVUFBVTtTQUNuQyxDQUFDO1FBRUYsT0FBTyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksU0FBUyxDQUFDO0lBQzdDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTWV0YWRhdGFTZXJ2aWNlIC0gQ2VudHJhbGl6ZWQgbWV0YWRhdGEgbm9ybWFsaXphdGlvbiBhbmQgZGVmYXVsdHNcbiAqXG4gKiBFbGltaW5hdGVzIH4zMDAgTE9DIG9mIGR1cGxpY2F0ZSBtZXRhZGF0YSBoYW5kbGluZyBhY3Jvc3MgNiBlbGVtZW50IG1hbmFnZXJzLlxuICpcbiAqIEtleSBGZWF0dXJlczpcbiAqIC0gQ29uc2lzdGVudCBtZXRhZGF0YSBzdHJ1Y3R1cmUgYWNyb3NzIGFsbCBlbGVtZW50IHR5cGVzXG4gKiAtIEF1dG9tYXRpYyBkZWZhdWx0IHZhbHVlIGFzc2lnbm1lbnRcbiAqIC0gVmVyc2lvbiBub3JtYWxpemF0aW9uICgxLjAg4oaSIDEuMC4wKVxuICogLSBVbmlxdWUgSUQgZ2VuZXJhdGlvblxuICogLSBVc2VyIGF0dHJpYnV0aW9uIHdpdGggZmFsbGJhY2sgY2hhaW5cbiAqIC0gRGF0ZSBmb3JtYXR0aW5nIChJU08gODYwMSlcbiAqXG4gKiBBcmNoaXRlY3R1cmU6XG4gKiAtIFB1cmUgc2VydmljZSAobm8gc3RhdGUgZXhjZXB0IGN1cnJlbnRVc2VyKVxuICogLSBUeXBlLXNhZmUgd2l0aCBUeXBlU2NyaXB0IHN0cmljdCBtb2RlXG4gKiAtIFNlY3VyaXR5LWZpcnN0ICh2YWxpZGF0ZXMgYWxsIGlucHV0cylcbiAqIC0gUHJlc2VydmVzIGV4YWN0IGN1cnJlbnQgYmVoYXZpb3IgZnJvbSBtYW5hZ2Vyc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBtZXRhZGF0YSA9IG1ldGFkYXRhU2VydmljZS5ub3JtYWxpemVNZXRhZGF0YShcbiAqICAgeyBuYW1lOiAnTXkgU2tpbGwnLCBkZXNjcmlwdGlvbjogJ0RvZXMgdGhpbmdzJyB9LFxuICogICBFbGVtZW50VHlwZS5TS0lMTFxuICogKTtcbiAqIC8vIFJldHVybnM6IHsgbmFtZTogJ015IFNraWxsJywgZGVzY3JpcHRpb246ICdEb2VzIHRoaW5ncycsXG4gKiAvLyAgICAgICAgICAgdmVyc2lvbjogJzEuMC4wJywgYXV0aG9yOiAndXNlcicsIGNyZWF0ZWQ6ICcyMDI1LTExLTE5JywgLi4uIH1cbiAqIGBgYFxuICovXG5cbmltcG9ydCB7IHVzZXJJbmZvIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBFbGVtZW50VHlwZSB9IGZyb20gJy4uL3BvcnRmb2xpby90eXBlcy5qcyc7XG5pbXBvcnQgeyB0b1Npbmd1bGFyTGFiZWwgfSBmcm9tICcuLi91dGlscy9lbGVtZW50VHlwZU5vcm1hbGl6YXRpb24uanMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVBbm9ueW1vdXNJZCwgZ2VuZXJhdGVVbmlxdWVJZCB9IGZyb20gJy4uL3V0aWxzL2ZpbGVzeXN0ZW0uanMnO1xuaW1wb3J0IHsgbm9ybWFsaXplVmVyc2lvbiB9IGZyb20gJy4uL2VsZW1lbnRzL0Jhc2VFbGVtZW50LmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5cbi8qKlxuICogQmFzZSBtZXRhZGF0YSBpbnRlcmZhY2UgKGNvbW1vbiB0byBhbGwgZWxlbWVudHMpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZU1ldGFkYXRhIHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICB2ZXJzaW9uPzogc3RyaW5nOyAgLy8gTWFkZSBvcHRpb25hbCAtIG5vcm1hbGl6ZU1ldGFkYXRhIHdpbGwgc2V0IGRlZmF1bHQgJzEuMC4wJ1xuICBhdXRob3I/OiBzdHJpbmc7XG4gIGNyZWF0ZWQ/OiBzdHJpbmc7XG4gIG1vZGlmaWVkPzogc3RyaW5nO1xuICB0YWdzPzogc3RyaW5nW107XG4gIHRyaWdnZXJzPzogc3RyaW5nW107XG4gIHVuaXF1ZV9pZD86IHN0cmluZztcbiAgdHlwZT86IEVsZW1lbnRUeXBlO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIG1ldGFkYXRhIG5vcm1hbGl6YXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXRhZGF0YU5vcm1hbGl6YXRpb25PcHRpb25zIHtcbiAgLyoqIFdoZXRoZXIgdG8gcHJlc2VydmUgZXhpc3RpbmcgdmFsdWVzIGluc3RlYWQgb2YgYXBwbHlpbmcgZGVmYXVsdHMgKGRlZmF1bHQ6IGZhbHNlKSAqL1xuICBwcmVzZXJ2ZUV4aXN0aW5nPzogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciB0byBnZW5lcmF0ZSB1bmlxdWUgSUQgaWYgbWlzc2luZyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgZ2VuZXJhdGVJZD86IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdG8gbm9ybWFsaXplIHZlcnNpb24gZm9ybWF0IChkZWZhdWx0OiB0cnVlKSAqL1xuICBub3JtYWxpemVWZXJzaW9uPzogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciB0byBzZXQgY3VycmVudCB1c2VyIGFzIGF1dGhvciAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgc2V0QXV0aG9yPzogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciB0byBzZXQgY3JlYXRpb24gZGF0ZSBpZiBtaXNzaW5nIChkZWZhdWx0OiB0cnVlKSAqL1xuICBzZXRDcmVhdGVkPzogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciB0byBzZXQgbW9kaWZpZWQgZGF0ZSAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgc2V0TW9kaWZpZWQ/OiBib29sZWFuO1xuXG4gIC8qKiBBZGRpdGlvbmFsIHR5cGUtc3BlY2lmaWMgZGVmYXVsdHMgdG8gbWVyZ2UgKi9cbiAgdHlwZURlZmF1bHRzPzogUmVjb3JkPHN0cmluZywgYW55PjtcblxuICAvKiogU2tpcCBhcHBseWluZyB0eXBlRGVmYXVsdHMgKGZvciBCYXNlRWxlbWVudCBjb25zdHJ1Y3RvcikgLSBvbmx5IG5vcm1hbGl6ZSBjb21tb24gZmllbGRzICovXG4gIHNraXBUeXBlRGVmYXVsdHM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE1ldGFkYXRhU2VydmljZSAtIENlbnRyYWxpemVkIG1ldGFkYXRhIG5vcm1hbGl6YXRpb24gYW5kIGRlZmF1bHRzXG4gKlxuICogWkVSTyBGVU5DVElPTkFMSVRZIExPU1M6XG4gKiBUaGlzIHNlcnZpY2UgZXh0cmFjdHMgZXhhY3QgYmVoYXZpb3IgZnJvbSBhbGwgNiBtYW5hZ2VycyB3aXRob3V0IGFueSBjaGFuZ2VzLlxuICogRXZlcnkgZGVmYXVsdCB2YWx1ZSwgZXZlcnkgbm9ybWFsaXphdGlvbiBydWxlLCBldmVyeSBlZGdlIGNhc2UgaXMgcHJlc2VydmVkLlxuICpcbiAqIFVTQUdFOlxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgbWV0YWRhdGEgPSBtZXRhZGF0YVNlcnZpY2Uubm9ybWFsaXplTWV0YWRhdGEoXG4gKiAgIHJhd01ldGFkYXRhLFxuICogICBFbGVtZW50VHlwZS5TS0lMTCxcbiAqICAge1xuICogICAgIHR5cGVEZWZhdWx0czoge1xuICogICAgICAgY2F0ZWdvcnk6ICdnZW5lcmFsJyxcbiAqICAgICAgIGRpZmZpY3VsdHk6ICdpbnRlcm1lZGlhdGUnXG4gKiAgICAgfVxuICogICB9XG4gKiApO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBNZXRhZGF0YVNlcnZpY2Uge1xuICBwcml2YXRlIGN1cnJlbnRVc2VyOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogTm9ybWFsaXplIG1ldGFkYXRhIHdpdGggdHlwZS1zcGVjaWZpYyBkZWZhdWx0c1xuICAgKlxuICAgKiBBcHBsaWVzOlxuICAgKiAtIERlZmF1bHQgdmFsdWVzIGZvciBtaXNzaW5nIGZpZWxkc1xuICAgKiAtIFZlcnNpb24gbm9ybWFsaXphdGlvbiAoMS4wIOKGkiAxLjAuMClcbiAgICogLSBVbmlxdWUgSUQgZ2VuZXJhdGlvblxuICAgKiAtIFVzZXIgYXR0cmlidXRpb25cbiAgICogLSBEYXRlIGZvcm1hdHRpbmcgKElTTyA4NjAxKVxuICAgKlxuICAgKiBQUkVTRVJWRVMgRVhBQ1QgQkVIQVZJT1I6XG4gICAqIC0gUGVyc29uYU1hbmFnZXI6IGxpbmVzIDE2NC0yMDUgKG5vcm1hbGl6ZVBlcnNvbmFGb3JTYXZlKVxuICAgKiAtIEFnZW50TWFuYWdlcjogbGluZXMgMTEzLCA2NDItNjQ0IChnZXRDdXJyZW50VXNlckZvckF0dHJpYnV0aW9uKVxuICAgKiAtIE1lbW9yeU1hbmFnZXI6IGxpbmVzIDEzNDItMTQyMSAocGFyc2VNZW1vcnlGaWxlIG1ldGFkYXRhIGRlZmF1bHRzKVxuICAgKiAtIFNraWxsTWFuYWdlcjogbGluZXMgNDQtMTAyIChjcmVhdGUgbWV0aG9kIGRlZmF1bHRzKVxuICAgKiAtIFRlbXBsYXRlTWFuYWdlcjogbGluZXMgMjk4LTM3NSAodmFsaWRhdGVNZXRhZGF0YSBkZWZhdWx0cylcbiAgICogLSBFbnNlbWJsZU1hbmFnZXI6IGxpbmVzIDg2LTM0NyAocGFyc2VNZXRhZGF0YSBkZWZhdWx0cylcbiAgICpcbiAgICogQHBhcmFtIHJhdyAtIFJhdyBtZXRhZGF0YSBmcm9tIHVzZXIgaW5wdXQgb3IgZmlsZVxuICAgKiBAcGFyYW0gZWxlbWVudFR5cGUgLSBUeXBlIG9mIGVsZW1lbnQgYmVpbmcgY3JlYXRlZFxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE5vcm1hbGl6YXRpb24gb3B0aW9uc1xuICAgKiBAcmV0dXJucyBGdWxseSBub3JtYWxpemVkIG1ldGFkYXRhXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IG1ldGFkYXRhID0gbWV0YWRhdGFTZXJ2aWNlLm5vcm1hbGl6ZU1ldGFkYXRhKFxuICAgKiAgIHsgbmFtZTogJ015IFNraWxsJywgZGVzY3JpcHRpb246ICdEb2VzIHRoaW5ncycgfSxcbiAgICogICBFbGVtZW50VHlwZS5TS0lMTFxuICAgKiApO1xuICAgKiAvLyBSZXR1cm5zOiB7IG5hbWU6ICdNeSBTa2lsbCcsIGRlc2NyaXB0aW9uOiAnRG9lcyB0aGluZ3MnLFxuICAgKiAvLyAgICAgICAgICAgdmVyc2lvbjogJzEuMC4wJywgYXV0aG9yOiAndXNlcicsIGNyZWF0ZWQ6ICcyMDI1LTExLTE5JywgLi4uIH1cbiAgICovXG4gIG5vcm1hbGl6ZU1ldGFkYXRhPFQgZXh0ZW5kcyBCYXNlTWV0YWRhdGE+KFxuICAgIHJhdzogUGFydGlhbDxUPixcbiAgICBlbGVtZW50VHlwZTogRWxlbWVudFR5cGUsXG4gICAgb3B0aW9uczogTWV0YWRhdGFOb3JtYWxpemF0aW9uT3B0aW9ucyA9IHt9XG4gICk6IFQge1xuICAgIC8vIFNldCBkZWZhdWx0IG9wdGlvbnNcbiAgICBjb25zdCBvcHRzID0ge1xuICAgICAgcHJlc2VydmVFeGlzdGluZzogb3B0aW9ucy5wcmVzZXJ2ZUV4aXN0aW5nID8/IGZhbHNlLFxuICAgICAgZ2VuZXJhdGVJZDogb3B0aW9ucy5nZW5lcmF0ZUlkID8/IHRydWUsXG4gICAgICBub3JtYWxpemVWZXJzaW9uOiBvcHRpb25zLm5vcm1hbGl6ZVZlcnNpb24gPz8gdHJ1ZSxcbiAgICAgIHNldEF1dGhvcjogb3B0aW9ucy5zZXRBdXRob3IgPz8gdHJ1ZSxcbiAgICAgIHNldENyZWF0ZWQ6IG9wdGlvbnMuc2V0Q3JlYXRlZCA/PyB0cnVlLFxuICAgICAgc2V0TW9kaWZpZWQ6IG9wdGlvbnMuc2V0TW9kaWZpZWQgPz8gdHJ1ZSxcbiAgICAgIHR5cGVEZWZhdWx0czogb3B0aW9ucy50eXBlRGVmYXVsdHMgPz8ge30sXG4gICAgICBza2lwVHlwZURlZmF1bHRzOiBvcHRpb25zLnNraXBUeXBlRGVmYXVsdHMgPz8gZmFsc2VcbiAgICB9O1xuXG4gICAgLy8gU3RhcnQgd2l0aCByYXcgbWV0YWRhdGFcbiAgICBjb25zdCBub3JtYWxpemVkOiBhbnkgPSB7IC4uLnJhdyB9O1xuXG4gICAgLy8gQXBwbHkgdHlwZS1zcGVjaWZpYyBkZWZhdWx0cyBGSVJTVCAoY2FuIGJlIG92ZXJyaWRkZW4gYnkgc3RhbmRhcmQgZGVmYXVsdHMpXG4gICAgLy8gU2tpcCBpZiBza2lwVHlwZURlZmF1bHRzIGlzIHRydWUgKGZvciBCYXNlRWxlbWVudCBjb25zdHJ1Y3RvcilcbiAgICBpZiAob3B0cy50eXBlRGVmYXVsdHMgJiYgT2JqZWN0LmtleXMob3B0cy50eXBlRGVmYXVsdHMpLmxlbmd0aCA+IDAgJiYgIW9wdHMuc2tpcFR5cGVEZWZhdWx0cykge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob3B0cy50eXBlRGVmYXVsdHMpKSB7XG4gICAgICAgIGlmIChub3JtYWxpemVkW2tleV0gPT09IHVuZGVmaW5lZCB8fCAob3B0cy5wcmVzZXJ2ZUV4aXN0aW5nID09PSBmYWxzZSAmJiAhbm9ybWFsaXplZFtrZXldKSkge1xuICAgICAgICAgIG5vcm1hbGl6ZWRba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgc3RhbmRhcmQgbWV0YWRhdGEgZGVmYXVsdHNcblxuICAgIC8vIE5hbWUgKHJlcXVpcmVkIGZpZWxkLCBzaG91bGQgYWxyZWFkeSBiZSBzZXQsIGJ1dCBlbnN1cmUgaXQgZXhpc3RzKVxuICAgIGlmICghbm9ybWFsaXplZC5uYW1lKSB7XG4gICAgICBub3JtYWxpemVkLm5hbWUgPSBgVW50aXRsZWQgJHt0aGlzLmdldEVsZW1lbnRUeXBlTmFtZShlbGVtZW50VHlwZSl9YDtcbiAgICB9XG5cbiAgICAvLyBEZXNjcmlwdGlvblxuICAgIGlmIChub3JtYWxpemVkLmRlc2NyaXB0aW9uID09PSB1bmRlZmluZWQgfHwgbm9ybWFsaXplZC5kZXNjcmlwdGlvbiA9PT0gbnVsbCkge1xuICAgICAgbm9ybWFsaXplZC5kZXNjcmlwdGlvbiA9ICcnO1xuICAgIH1cblxuICAgIC8vIFZlcnNpb24gbm9ybWFsaXphdGlvblxuICAgIGlmIChvcHRzLm5vcm1hbGl6ZVZlcnNpb24pIHtcbiAgICAgIGlmICghbm9ybWFsaXplZC52ZXJzaW9uKSB7XG4gICAgICAgIG5vcm1hbGl6ZWQudmVyc2lvbiA9ICcxLjAuMCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub3JtYWxpemVkLnZlcnNpb24gPSB0aGlzLm5vcm1hbGl6ZVZlcnNpb24oU3RyaW5nKG5vcm1hbGl6ZWQudmVyc2lvbikpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEF1dGhvciBhdHRyaWJ1dGlvblxuICAgIGlmIChvcHRzLnNldEF1dGhvciAmJiAhbm9ybWFsaXplZC5hdXRob3IpIHtcbiAgICAgIG5vcm1hbGl6ZWQuYXV0aG9yID0gdGhpcy5nZXRDdXJyZW50VXNlcigpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZWQgZGF0ZSAoWVlZWS1NTS1ERCBmb3JtYXQsIG1hdGNoaW5nIFBlcnNvbmFNYW5hZ2VyIGxpbmUgMTc4KVxuICAgIGlmIChvcHRzLnNldENyZWF0ZWQgJiYgIW5vcm1hbGl6ZWQuY3JlYXRlZCkge1xuICAgICAgbm9ybWFsaXplZC5jcmVhdGVkID0gdGhpcy5nZW5lcmF0ZURhdGUoJ2RhdGUtb25seScpO1xuICAgIH1cblxuICAgIC8vIE1vZGlmaWVkIGRhdGUgKElTTyA4NjAxIGZ1bGwgZm9ybWF0LCBtYXRjaGluZyBBZ2VudE1hbmFnZXIgbGluZSAyMzEpXG4gICAgaWYgKG9wdHMuc2V0TW9kaWZpZWQgJiYgIW5vcm1hbGl6ZWQubW9kaWZpZWQpIHtcbiAgICAgIG5vcm1hbGl6ZWQubW9kaWZpZWQgPSB0aGlzLmdlbmVyYXRlRGF0ZSgnZnVsbCcpO1xuICAgIH1cblxuICAgIC8vIFRhZ3MgKGluaXRpYWxpemUgZW1wdHkgYXJyYXkgaWYgbm90IHByb3ZpZGVkKVxuICAgIGlmICghbm9ybWFsaXplZC50YWdzKSB7XG4gICAgICBub3JtYWxpemVkLnRhZ3MgPSBbXTtcbiAgICB9XG5cbiAgICAvLyBVbmlxdWUgSUQgZ2VuZXJhdGlvbiAoaWYgZW5hYmxlZCBhbmQgbWlzc2luZylcbiAgICBpZiAob3B0cy5nZW5lcmF0ZUlkICYmICFub3JtYWxpemVkLnVuaXF1ZV9pZCkge1xuICAgICAgY29uc3QgYXV0aG9yID0gbm9ybWFsaXplZC5hdXRob3IgfHwgdGhpcy5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgbm9ybWFsaXplZC51bmlxdWVfaWQgPSB0aGlzLmFzc2lnblVuaXF1ZUlkKG5vcm1hbGl6ZWQubmFtZSwgYXV0aG9yKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgZWxlbWVudCB0eXBlIGlmIG5vdCBwcmVzZW50XG4gICAgaWYgKCFub3JtYWxpemVkLnR5cGUpIHtcbiAgICAgIG5vcm1hbGl6ZWQudHlwZSA9IGVsZW1lbnRUeXBlO1xuICAgIH1cblxuICAgIHJldHVybiBub3JtYWxpemVkIGFzIFQ7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgZGVmYXVsdCBtZXRhZGF0YSBmb3IgYW4gZWxlbWVudCB0eXBlXG4gICAqXG4gICAqIFByb3ZpZGVzIGJhc2VsaW5lIG1ldGFkYXRhIHN0cnVjdHVyZSB3aXRoIGFsbCByZXF1aXJlZCBmaWVsZHMgcG9wdWxhdGVkLlxuICAgKiBVc2VmdWwgZm9yIGNyZWF0aW5nIG5ldyBlbGVtZW50cyBvciB0ZXN0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gZWxlbWVudFR5cGUgLSBUeXBlIG9mIGVsZW1lbnRcbiAgICogQHBhcmFtIG92ZXJyaWRlcyAtIE9wdGlvbmFsIGZpZWxkIG92ZXJyaWRlc1xuICAgKiBAcmV0dXJucyBEZWZhdWx0IG1ldGFkYXRhIHN0cnVjdHVyZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBkZWZhdWx0cyA9IG1ldGFkYXRhU2VydmljZS5nZW5lcmF0ZURlZmF1bHRNZXRhZGF0YShFbGVtZW50VHlwZS5TS0lMTCk7XG4gICAqIC8vIFJldHVybnM6IHsgbmFtZTogJ1VudGl0bGVkIFNraWxsJywgZGVzY3JpcHRpb246ICcnLFxuICAgKiAvLyAgICAgICAgICAgdmVyc2lvbjogJzEuMC4wJywgYXV0aG9yOiAnYW5vbnltb3VzJywgLi4uIH1cbiAgICovXG4gIGdlbmVyYXRlRGVmYXVsdE1ldGFkYXRhKFxuICAgIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZSxcbiAgICBvdmVycmlkZXM6IFBhcnRpYWw8QmFzZU1ldGFkYXRhPiA9IHt9XG4gICk6IEJhc2VNZXRhZGF0YSB7XG4gICAgY29uc3QgZGVmYXVsdHM6IEJhc2VNZXRhZGF0YSA9IHtcbiAgICAgIG5hbWU6IGBVbnRpdGxlZCAke3RoaXMuZ2V0RWxlbWVudFR5cGVOYW1lKGVsZW1lbnRUeXBlKX1gLFxuICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgdmVyc2lvbjogJzEuMC4wJyxcbiAgICAgIGF1dGhvcjogdGhpcy5nZXRDdXJyZW50VXNlcigpLFxuICAgICAgY3JlYXRlZDogdGhpcy5nZW5lcmF0ZURhdGUoJ2RhdGUtb25seScpLFxuICAgICAgbW9kaWZpZWQ6IHRoaXMuZ2VuZXJhdGVEYXRlKCdmdWxsJyksXG4gICAgICB0eXBlOiBlbGVtZW50VHlwZVxuICAgIH07XG5cbiAgICByZXR1cm4geyAuLi5kZWZhdWx0cywgLi4ub3ZlcnJpZGVzIH07XG4gIH1cblxuICAvKipcbiAgICogQXNzaWduIGEgdW5pcXVlIElEIGJhc2VkIG9uIG5hbWUgYW5kIGF1dGhvclxuICAgKlxuICAgKiBGb3JtYXQ6IFVzZXMgZXhpc3RpbmcgZ2VuZXJhdGVVbmlxdWVJZCB1dGlsaXR5IHdoaWNoIGNyZWF0ZXM6XG4gICAqIGB7c2x1Z2lmaWVkLW5hbWV9LXthdXRob3ItaGFzaH1gIG9yIHJhbmRvbSBVVUlEXG4gICAqXG4gICAqIFBSRVNFUlZFUyBFWEFDVCBCRUhBVklPUjpcbiAgICogLSBQZXJzb25hTWFuYWdlciBsaW5lIDE4MS0xODI6IGdlbmVyYXRlVW5pcXVlSWQobWV0YWRhdGEubmFtZSwgbWV0YWRhdGEuYXV0aG9yKVxuICAgKiAtIFBlcnNvbmFNYW5hZ2VyIGxpbmUgNTY3OiBnZW5lcmF0ZVVuaXF1ZUlkKHNhbml0aXplZE5hbWUsIHRoaXMuZ2V0Q3VycmVudFVzZXJGb3JBdHRyaWJ1dGlvbigpIHx8IHVuZGVmaW5lZClcbiAgICpcbiAgICogQHBhcmFtIG5hbWUgLSBFbGVtZW50IG5hbWVcbiAgICogQHBhcmFtIGF1dGhvciAtIEVsZW1lbnQgYXV0aG9yXG4gICAqIEByZXR1cm5zIFVuaXF1ZSBpZGVudGlmaWVyIHN0cmluZ1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBpZCA9IG1ldGFkYXRhU2VydmljZS5hc3NpZ25VbmlxdWVJZCgnTXkgU2tpbGwnLCAnam9obicpO1xuICAgKiAvLyBSZXR1cm5zOiAnbXktc2tpbGwtYTNmOGQ5ZTInIChvciBzaW1pbGFyIGhhc2gpXG4gICAqL1xuICBhc3NpZ25VbmlxdWVJZChuYW1lOiBzdHJpbmcsIGF1dGhvcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBVc2UgZXhpc3RpbmcgdXRpbGl0eSBmdW5jdGlvbiAocHJlc2VydmVzIGV4YWN0IGJlaGF2aW9yKVxuICAgIHJldHVybiBnZW5lcmF0ZVVuaXF1ZUlkKG5hbWUsIGF1dGhvcik7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgdXNlciBmb3IgYXR0cmlidXRpb25cbiAgICpcbiAgICogUHJpb3JpdHk6XG4gICAqIDEuIFNlcnZpY2UtbGV2ZWwgY3VycmVudFVzZXIgKHNldCB2aWEgc2V0Q3VycmVudFVzZXIpXG4gICAqIDIuIEVudmlyb25tZW50IHZhcmlhYmxlIERPTExIT1VTRV9VU0VSXG4gICAqIDMuIE9TIHN5c3RlbSB1c2VybmFtZSAob3MudXNlckluZm8oKS51c2VybmFtZSlcbiAgICogNC4gQW5vbnltb3VzIElEIGdlbmVyYXRpb24gKGxhc3QgcmVzb3J0KVxuICAgKlxuICAgKiBUaGUgcmVzdWx0IGlzIGNhY2hlZCBvbiBmaXJzdCByZXNvbHV0aW9uIHNvIHN1YnNlcXVlbnQgY2FsbHNcbiAgICogcmV0dXJuIHRoZSBzYW1lIHZhbHVlIHdpdGhvdXQgcmUtcmVzb2x2aW5nLlxuICAgKlxuICAgKiBAcmV0dXJucyBVc2VybmFtZSBvciBhbm9ueW1vdXMgSURcbiAgICovXG4gIGdldEN1cnJlbnRVc2VyKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRVc2VyKSB7XG4gICAgICBjb25zdCBlbnZVc2VyID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX1VTRVI7XG4gICAgICBpZiAoZW52VXNlcikge1xuICAgICAgICB0aGlzLmN1cnJlbnRVc2VyID0gZW52VXNlcjtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdbTWV0YWRhdGFTZXJ2aWNlXSBVc2VyIHJlc29sdmVkIGZyb20gRE9MTEhPVVNFX1VTRVIgZW52IHZhcicsIHsgdXNlcjogZW52VXNlciB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBvc1VzZXI6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgICAgICB0cnkgeyBvc1VzZXIgPSB1c2VySW5mbygpLnVzZXJuYW1lIHx8IG51bGw7IH0gY2F0Y2ggeyAvKiBwbGF0Zm9ybSB1bnN1cHBvcnRlZCAqLyB9XG4gICAgICAgIGlmIChvc1VzZXIpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRVc2VyID0gb3NVc2VyO1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnW01ldGFkYXRhU2VydmljZV0gVXNlciByZXNvbHZlZCBmcm9tIE9TIHVzZXJuYW1lJywgeyB1c2VyOiBvc1VzZXIgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VXNlciA9IGdlbmVyYXRlQW5vbnltb3VzSWQoKTtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoJ1tNZXRhZGF0YVNlcnZpY2VdIFVzZXIgcmVzb2x2ZWQgYXMgYW5vbnltb3VzIChubyBlbnYgdmFyIG9yIE9TIHVzZXJuYW1lIGF2YWlsYWJsZSknLCB7IHVzZXI6IHRoaXMuY3VycmVudFVzZXIgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFVzZXI7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGN1cnJlbnQgdXNlciBpZGVudGl0eVxuICAgKlxuICAgKiBAcGFyYW0gdXNlcm5hbWUgLSBVc2VybmFtZSB0byBzZXQgKG51bGwgdG8gY2xlYXIpXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIG1ldGFkYXRhU2VydmljZS5zZXRDdXJyZW50VXNlcignam9obicpO1xuICAgKiBtZXRhZGF0YVNlcnZpY2Uuc2V0Q3VycmVudFVzZXIobnVsbCk7IC8vIENsZWFyXG4gICAqL1xuICBzZXRDdXJyZW50VXNlcih1c2VybmFtZTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudFVzZXIgPSB1c2VybmFtZTtcbiAgICBsb2dnZXIuZGVidWcoJ1tNZXRhZGF0YVNlcnZpY2VdIEN1cnJlbnQgdXNlciBzZXQnLCB7IHVzZXJuYW1lIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vcm1hbGl6ZSB2ZXJzaW9uIHN0cmluZyB0byBzZW1hbnRpYyB2ZXJzaW9uaW5nIGZvcm1hdFxuICAgKlxuICAgKiBIYW5kbGVzOlxuICAgKiAtIDEuMCDihpIgMS4wLjBcbiAgICogLSAyIOKGkiAyLjAuMFxuICAgKiAtIDEuMi4zLWJldGEg4oaSIDEuMi4zLWJldGEgKHByZXNlcnZlcyBwcmUtcmVsZWFzZSlcbiAgICpcbiAgICogUFJFU0VSVkVTIEVYQUNUIEJFSEFWSU9SOlxuICAgKiAtIFBlcnNvbmFNYW5hZ2VyIGxpbmUgMTczOiBtZXRhZGF0YS52ZXJzaW9uID0gbm9ybWFsaXplVmVyc2lvbihtZXRhZGF0YS52ZXJzaW9uKVxuICAgKiAtIFBlcnNvbmFNYW5hZ2VyIGxpbmUgNzg2LTc4Nzogbm9ybWFsaXplVmVyc2lvbihTdHJpbmcoZWRpdGFibGVQZXJzb25hLnZlcnNpb24pKVxuICAgKiAtIFVzZXMgZXhpc3Rpbmcgbm9ybWFsaXplVmVyc2lvbigpIHV0aWxpdHkgZnJvbSBCYXNlRWxlbWVudFxuICAgKlxuICAgKiBAcGFyYW0gdmVyc2lvbiAtIFZlcnNpb24gc3RyaW5nIHRvIG5vcm1hbGl6ZVxuICAgKiBAcmV0dXJucyBOb3JtYWxpemVkIHZlcnNpb24gc3RyaW5nXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IHYgPSBtZXRhZGF0YVNlcnZpY2Uubm9ybWFsaXplVmVyc2lvbignMS4wJyk7XG4gICAqIC8vIFJldHVybnM6ICcxLjAuMCdcbiAgICovXG4gIG5vcm1hbGl6ZVZlcnNpb24odmVyc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBVc2UgZXhpc3RpbmcgdXRpbGl0eSBmdW5jdGlvbiAocHJlc2VydmVzIGV4YWN0IGJlaGF2aW9yKVxuICAgIHJldHVybiBub3JtYWxpemVWZXJzaW9uKHZlcnNpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIElTTyA4NjAxIGRhdGUgc3RyaW5nXG4gICAqXG4gICAqIFBSRVNFUlZFUyBFWEFDVCBCRUhBVklPUjpcbiAgICogLSBQZXJzb25hTWFuYWdlciBsaW5lIDE3ODogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF0gKGRhdGUtb25seSlcbiAgICogLSBBZ2VudE1hbmFnZXIgbGluZSAyMzE6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSAoZnVsbClcbiAgICpcbiAgICogQHBhcmFtIGZvcm1hdCAtIERhdGUgZm9ybWF0ICgnZnVsbCcgb3IgJ2RhdGUtb25seScpXG4gICAqIEByZXR1cm5zIEZvcm1hdHRlZCBkYXRlIHN0cmluZ1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBkYXRlID0gbWV0YWRhdGFTZXJ2aWNlLmdlbmVyYXRlRGF0ZSgnZGF0ZS1vbmx5Jyk7XG4gICAqIC8vIFJldHVybnM6ICcyMDI1LTExLTE5J1xuICAgKlxuICAgKiBjb25zdCBkYXRldGltZSA9IG1ldGFkYXRhU2VydmljZS5nZW5lcmF0ZURhdGUoJ2Z1bGwnKTtcbiAgICogLy8gUmV0dXJuczogJzIwMjUtMTEtMTlUMTA6MzA6NDUuMTIzWidcbiAgICovXG4gIGdlbmVyYXRlRGF0ZShmb3JtYXQ6ICdmdWxsJyB8ICdkYXRlLW9ubHknID0gJ2Z1bGwnKTogc3RyaW5nIHtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG5cbiAgICBpZiAoZm9ybWF0ID09PSAnZGF0ZS1vbmx5Jykge1xuICAgICAgLy8gTWF0Y2ggUGVyc29uYU1hbmFnZXIgbGluZSAxNzggZXhhY3RseVxuICAgICAgcmV0dXJuIG5vdy5zcGxpdCgnVCcpWzBdO1xuICAgIH1cblxuICAgIC8vIEZ1bGwgSVNPIDg2MDEgZm9ybWF0XG4gICAgcmV0dXJuIG5vdztcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBtZXRhZGF0YSBjb21wbGV0ZW5lc3NcbiAgICpcbiAgICogQ2hlY2tzOlxuICAgKiAtIFJlcXVpcmVkIGZpZWxkcyBwcmVzZW50IChuYW1lLCBkZXNjcmlwdGlvbilcbiAgICogLSBWYWxpZCB0eXBlcyBmb3IgYWxsIGZpZWxkc1xuICAgKiAtIFZhbHVlIGNvbnN0cmFpbnRzICh2ZXJzaW9uIGZvcm1hdCwgZXRjLilcbiAgICpcbiAgICogQHBhcmFtIG1ldGFkYXRhIC0gTWV0YWRhdGEgdG8gdmFsaWRhdGVcbiAgICogQHBhcmFtIGVsZW1lbnRUeXBlIC0gRWxlbWVudCB0eXBlIGZvciB0eXBlLXNwZWNpZmljIHZhbGlkYXRpb25cbiAgICogQHJldHVybnMgVmFsaWRhdGlvbiByZXN1bHRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3QgcmVzdWx0ID0gbWV0YWRhdGFTZXJ2aWNlLnZhbGlkYXRlTWV0YWRhdGEobWV0YWRhdGEsIEVsZW1lbnRUeXBlLlNLSUxMKTtcbiAgICogaWYgKCFyZXN1bHQudmFsaWQpIHtcbiAgICogICBjb25zb2xlLmVycm9yKCdWYWxpZGF0aW9uIGVycm9yczonLCByZXN1bHQuZXJyb3JzKTtcbiAgICogfVxuICAgKi9cbiAgdmFsaWRhdGVNZXRhZGF0YShcbiAgICBtZXRhZGF0YTogQmFzZU1ldGFkYXRhLFxuICAgIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZVxuICApOiB7IHZhbGlkOiBib29sZWFuOyBlcnJvcnM/OiBzdHJpbmdbXSB9IHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBSZXF1aXJlZCBmaWVsZHNcbiAgICBpZiAoIW1ldGFkYXRhLm5hbWUgfHwgdHlwZW9mIG1ldGFkYXRhLm5hbWUgIT09ICdzdHJpbmcnIHx8IG1ldGFkYXRhLm5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZXJyb3JzLnB1c2goJ25hbWUgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgaWYgKG1ldGFkYXRhLmRlc2NyaXB0aW9uID09PSB1bmRlZmluZWQgfHwgbWV0YWRhdGEuZGVzY3JpcHRpb24gPT09IG51bGwpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdkZXNjcmlwdGlvbiBpcyByZXF1aXJlZCAoY2FuIGJlIGVtcHR5IHN0cmluZyknKTtcbiAgICB9XG5cbiAgICBpZiAoIW1ldGFkYXRhLnZlcnNpb24gfHwgdHlwZW9mIG1ldGFkYXRhLnZlcnNpb24gIT09ICdzdHJpbmcnKSB7XG4gICAgICBlcnJvcnMucHVzaCgndmVyc2lvbiBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhIHN0cmluZycpO1xuICAgIH1cblxuICAgIC8vIFR5cGUgdmFsaWRhdGlvblxuICAgIGlmIChtZXRhZGF0YS5hdXRob3IgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgbWV0YWRhdGEuYXV0aG9yICE9PSAnc3RyaW5nJykge1xuICAgICAgZXJyb3JzLnB1c2goJ2F1dGhvciBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgaWYgKG1ldGFkYXRhLmNyZWF0ZWQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgbWV0YWRhdGEuY3JlYXRlZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdjcmVhdGVkIG11c3QgYmUgYSBkYXRlIHN0cmluZycpO1xuICAgIH1cblxuICAgIGlmIChtZXRhZGF0YS5tb2RpZmllZCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBtZXRhZGF0YS5tb2RpZmllZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdtb2RpZmllZCBtdXN0IGJlIGEgZGF0ZSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICBpZiAobWV0YWRhdGEudGFncyAhPT0gdW5kZWZpbmVkICYmICFBcnJheS5pc0FycmF5KG1ldGFkYXRhLnRhZ3MpKSB7XG4gICAgICBlcnJvcnMucHVzaCgndGFncyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgfVxuXG4gICAgaWYgKG1ldGFkYXRhLnRyaWdnZXJzICE9PSB1bmRlZmluZWQgJiYgIUFycmF5LmlzQXJyYXkobWV0YWRhdGEudHJpZ2dlcnMpKSB7XG4gICAgICBlcnJvcnMucHVzaCgndHJpZ2dlcnMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgIH1cblxuICAgIC8vIElzc3VlICM3NTU6IEFjY2VwdCBib3RoIHBsdXJhbCBFbGVtZW50VHlwZSAoJ2FnZW50cycpIGFuZCBzaW5ndWxhciBsYWJlbCAoJ2FnZW50JylcbiAgICBpZiAobWV0YWRhdGEudHlwZSAhPT0gdW5kZWZpbmVkICYmIG1ldGFkYXRhLnR5cGUgIT09IGVsZW1lbnRUeXBlICYmIG1ldGFkYXRhLnR5cGUgIT09IHRvU2luZ3VsYXJMYWJlbChlbGVtZW50VHlwZSkpIHtcbiAgICAgIGVycm9ycy5wdXNoKGB0eXBlIG11c3QgbWF0Y2ggZWxlbWVudCB0eXBlIChleHBlY3RlZDogJHtlbGVtZW50VHlwZX0sIGdvdDogJHttZXRhZGF0YS50eXBlfSlgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmFsaWQ6IGVycm9ycy5sZW5ndGggPT09IDAsXG4gICAgICBlcnJvcnM6IGVycm9ycy5sZW5ndGggPiAwID8gZXJyb3JzIDogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuXG4gIC8vIFByaXZhdGUgaGVscGVyIG1ldGhvZHNcblxuICAvKipcbiAgICogR2V0IGh1bWFuLXJlYWRhYmxlIGVsZW1lbnQgdHlwZSBuYW1lXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGdldEVsZW1lbnRUeXBlTmFtZShlbGVtZW50VHlwZTogRWxlbWVudFR5cGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVOYW1lczogUmVjb3JkPEVsZW1lbnRUeXBlLCBzdHJpbmc+ID0ge1xuICAgICAgW0VsZW1lbnRUeXBlLlNLSUxMXTogJ1NraWxsJyxcbiAgICAgIFtFbGVtZW50VHlwZS5QRVJTT05BXTogJ1BlcnNvbmEnLFxuICAgICAgW0VsZW1lbnRUeXBlLlRFTVBMQVRFXTogJ1RlbXBsYXRlJyxcbiAgICAgIFtFbGVtZW50VHlwZS5BR0VOVF06ICdBZ2VudCcsXG4gICAgICBbRWxlbWVudFR5cGUuTUVNT1JZXTogJ01lbW9yeScsXG4gICAgICBbRWxlbWVudFR5cGUuRU5TRU1CTEVdOiAnRW5zZW1ibGUnXG4gICAgfTtcblxuICAgIHJldHVybiB0eXBlTmFtZXNbZWxlbWVudFR5cGVdIHx8ICdFbGVtZW50JztcbiAgfVxufVxuIl19
386
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWV0YWRhdGFTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL01ldGFkYXRhU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUVILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbkMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUErQzVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBQ2xCLFdBQVcsR0FBa0IsSUFBSSxDQUFDO0lBRTFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0E4Qkc7SUFDSCxpQkFBaUIsQ0FDZixHQUFlLEVBQ2YsV0FBd0IsRUFDeEIsVUFBd0MsRUFBRTtRQUUxQyxzQkFBc0I7UUFDdEIsTUFBTSxJQUFJLEdBQUc7WUFDWCxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsZ0JBQWdCLElBQUksS0FBSztZQUNuRCxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsSUFBSSxJQUFJO1lBQ3RDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJO1lBQ2xELFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxJQUFJLElBQUk7WUFDcEMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksSUFBSTtZQUN0QyxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVcsSUFBSSxJQUFJO1lB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SSxRQUFRLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ25ILE1BQU0sQ0FBQyxJQUFJLENBQUMsMkNBQTJDLFdBQVcsVUFBVSxRQUFRLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNoRyxDQUFDO1FBRUQsT0FBTztZQUNMLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDMUIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDL0MsQ0FBQztJQUNKLENBQUM7SUFFRCx5QkFBeUI7SUFFekI7OztPQUdHO0lBQ0ssa0JBQWtCLENBQUMsV0FBd0I7UUFDakQsTUFBTSxTQUFTLEdBQWdDO1lBQzdDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU87WUFDNUIsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUztZQUNoQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxVQUFVO1lBQ2xDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU87WUFDNUIsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUTtZQUM5QixDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxVQUFVO1NBQ25DLENBQUM7UUFFRixPQUFPLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxTQUFTLENBQUM7SUFDN0MsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNZXRhZGF0YVNlcnZpY2UgLSBDZW50cmFsaXplZCBtZXRhZGF0YSBub3JtYWxpemF0aW9uIGFuZCBkZWZhdWx0c1xuICpcbiAqIEVsaW1pbmF0ZXMgfjMwMCBMT0Mgb2YgZHVwbGljYXRlIG1ldGFkYXRhIGhhbmRsaW5nIGFjcm9zcyA2IGVsZW1lbnQgbWFuYWdlcnMuXG4gKlxuICogS2V5IEZlYXR1cmVzOlxuICogLSBDb25zaXN0ZW50IG1ldGFkYXRhIHN0cnVjdHVyZSBhY3Jvc3MgYWxsIGVsZW1lbnQgdHlwZXNcbiAqIC0gQXV0b21hdGljIGRlZmF1bHQgdmFsdWUgYXNzaWdubWVudFxuICogLSBWZXJzaW9uIG5vcm1hbGl6YXRpb24gKDEuMCDihpIgMS4wLjApXG4gKiAtIFVuaXF1ZSBJRCBnZW5lcmF0aW9uXG4gKiAtIFVzZXIgYXR0cmlidXRpb24gd2l0aCBmYWxsYmFjayBjaGFpblxuICogLSBEYXRlIGZvcm1hdHRpbmcgKElTTyA4NjAxKVxuICpcbiAqIEFyY2hpdGVjdHVyZTpcbiAqIC0gUHVyZSBzZXJ2aWNlIChubyBzdGF0ZSBleGNlcHQgY3VycmVudFVzZXIpXG4gKiAtIFR5cGUtc2FmZSB3aXRoIFR5cGVTY3JpcHQgc3RyaWN0IG1vZGVcbiAqIC0gU2VjdXJpdHktZmlyc3QgKHZhbGlkYXRlcyBhbGwgaW5wdXRzKVxuICogLSBQcmVzZXJ2ZXMgZXhhY3QgY3VycmVudCBiZWhhdmlvciBmcm9tIG1hbmFnZXJzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG1ldGFkYXRhID0gbWV0YWRhdGFTZXJ2aWNlLm5vcm1hbGl6ZU1ldGFkYXRhKFxuICogICB7IG5hbWU6ICdNeSBTa2lsbCcsIGRlc2NyaXB0aW9uOiAnRG9lcyB0aGluZ3MnIH0sXG4gKiAgIEVsZW1lbnRUeXBlLlNLSUxMXG4gKiApO1xuICogLy8gUmV0dXJuczogeyBuYW1lOiAnTXkgU2tpbGwnLCBkZXNjcmlwdGlvbjogJ0RvZXMgdGhpbmdzJyxcbiAqIC8vICAgICAgICAgICB2ZXJzaW9uOiAnMS4wLjAnLCBhdXRob3I6ICd1c2VyJywgY3JlYXRlZDogJzIwMjUtMTEtMTknLCAuLi4gfVxuICogYGBgXG4gKi9cblxuaW1wb3J0IHsgdXNlckluZm8gfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vcG9ydGZvbGlvL3R5cGVzLmpzJztcbmltcG9ydCB7IHRvU2luZ3VsYXJMYWJlbCB9IGZyb20gJy4uL3V0aWxzL2VsZW1lbnRUeXBlTm9ybWFsaXphdGlvbi5qcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZUFub255bW91c0lkLCBnZW5lcmF0ZVVuaXF1ZUlkIH0gZnJvbSAnLi4vdXRpbHMvZmlsZXN5c3RlbS5qcyc7XG5pbXBvcnQgeyBub3JtYWxpemVWZXJzaW9uIH0gZnJvbSAnLi4vZWxlbWVudHMvQmFzZUVsZW1lbnQuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcblxuLyoqXG4gKiBCYXNlIG1ldGFkYXRhIGludGVyZmFjZSAoY29tbW9uIHRvIGFsbCBlbGVtZW50cylcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlTWV0YWRhdGEge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHZlcnNpb24/OiBzdHJpbmc7ICAvLyBNYWRlIG9wdGlvbmFsIC0gbm9ybWFsaXplTWV0YWRhdGEgd2lsbCBzZXQgZGVmYXVsdCAnMS4wLjAnXG4gIGF1dGhvcj86IHN0cmluZztcbiAgY3JlYXRlZD86IHN0cmluZztcbiAgbW9kaWZpZWQ/OiBzdHJpbmc7XG4gIHRhZ3M/OiBzdHJpbmdbXTtcbiAgdHJpZ2dlcnM/OiBzdHJpbmdbXTtcbiAgdW5pcXVlX2lkPzogc3RyaW5nO1xuICB0eXBlPzogRWxlbWVudFR5cGU7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgbWV0YWRhdGEgbm9ybWFsaXphdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1ldGFkYXRhTm9ybWFsaXphdGlvbk9wdGlvbnMge1xuICAvKiogV2hldGhlciB0byBwcmVzZXJ2ZSBleGlzdGluZyB2YWx1ZXMgaW5zdGVhZCBvZiBhcHBseWluZyBkZWZhdWx0cyAoZGVmYXVsdDogZmFsc2UpICovXG4gIHByZXNlcnZlRXhpc3Rpbmc/OiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRvIGdlbmVyYXRlIHVuaXF1ZSBJRCBpZiBtaXNzaW5nIChkZWZhdWx0OiB0cnVlKSAqL1xuICBnZW5lcmF0ZUlkPzogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciB0byBub3JtYWxpemUgdmVyc2lvbiBmb3JtYXQgKGRlZmF1bHQ6IHRydWUpICovXG4gIG5vcm1hbGl6ZVZlcnNpb24/OiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHNldCBjdXJyZW50IHVzZXIgYXMgYXV0aG9yIChkZWZhdWx0OiB0cnVlKSAqL1xuICBzZXRBdXRob3I/OiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHNldCBjcmVhdGlvbiBkYXRlIGlmIG1pc3NpbmcgKGRlZmF1bHQ6IHRydWUpICovXG4gIHNldENyZWF0ZWQ/OiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHNldCBtb2RpZmllZCBkYXRlIChkZWZhdWx0OiB0cnVlKSAqL1xuICBzZXRNb2RpZmllZD86IGJvb2xlYW47XG5cbiAgLyoqIEFkZGl0aW9uYWwgdHlwZS1zcGVjaWZpYyBkZWZhdWx0cyB0byBtZXJnZSAqL1xuICB0eXBlRGVmYXVsdHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIC8qKiBTa2lwIGFwcGx5aW5nIHR5cGVEZWZhdWx0cyAoZm9yIEJhc2VFbGVtZW50IGNvbnN0cnVjdG9yKSAtIG9ubHkgbm9ybWFsaXplIGNvbW1vbiBmaWVsZHMgKi9cbiAgc2tpcFR5cGVEZWZhdWx0cz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogTWV0YWRhdGFTZXJ2aWNlIC0gQ2VudHJhbGl6ZWQgbWV0YWRhdGEgbm9ybWFsaXphdGlvbiBhbmQgZGVmYXVsdHNcbiAqXG4gKiBaRVJPIEZVTkNUSU9OQUxJVFkgTE9TUzpcbiAqIFRoaXMgc2VydmljZSBleHRyYWN0cyBleGFjdCBiZWhhdmlvciBmcm9tIGFsbCA2IG1hbmFnZXJzIHdpdGhvdXQgYW55IGNoYW5nZXMuXG4gKiBFdmVyeSBkZWZhdWx0IHZhbHVlLCBldmVyeSBub3JtYWxpemF0aW9uIHJ1bGUsIGV2ZXJ5IGVkZ2UgY2FzZSBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogVVNBR0U6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBtZXRhZGF0YSA9IG1ldGFkYXRhU2VydmljZS5ub3JtYWxpemVNZXRhZGF0YShcbiAqICAgcmF3TWV0YWRhdGEsXG4gKiAgIEVsZW1lbnRUeXBlLlNLSUxMLFxuICogICB7XG4gKiAgICAgdHlwZURlZmF1bHRzOiB7XG4gKiAgICAgICBjYXRlZ29yeTogJ2dlbmVyYWwnLFxuICogICAgICAgZGlmZmljdWx0eTogJ2ludGVybWVkaWF0ZSdcbiAqICAgICB9XG4gKiAgIH1cbiAqICk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIE1ldGFkYXRhU2VydmljZSB7XG4gIHByaXZhdGUgY3VycmVudFVzZXI6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBOb3JtYWxpemUgbWV0YWRhdGEgd2l0aCB0eXBlLXNwZWNpZmljIGRlZmF1bHRzXG4gICAqXG4gICAqIEFwcGxpZXM6XG4gICAqIC0gRGVmYXVsdCB2YWx1ZXMgZm9yIG1pc3NpbmcgZmllbGRzXG4gICAqIC0gVmVyc2lvbiBub3JtYWxpemF0aW9uICgxLjAg4oaSIDEuMC4wKVxuICAgKiAtIFVuaXF1ZSBJRCBnZW5lcmF0aW9uXG4gICAqIC0gVXNlciBhdHRyaWJ1dGlvblxuICAgKiAtIERhdGUgZm9ybWF0dGluZyAoSVNPIDg2MDEpXG4gICAqXG4gICAqIFBSRVNFUlZFUyBFWEFDVCBCRUhBVklPUjpcbiAgICogLSBQZXJzb25hTWFuYWdlcjogbGluZXMgMTY0LTIwNSAobm9ybWFsaXplUGVyc29uYUZvclNhdmUpXG4gICAqIC0gQWdlbnRNYW5hZ2VyOiBsaW5lcyAxMTMsIDY0Mi02NDQgKGdldEN1cnJlbnRVc2VyRm9yQXR0cmlidXRpb24pXG4gICAqIC0gTWVtb3J5TWFuYWdlcjogbGluZXMgMTM0Mi0xNDIxIChwYXJzZU1lbW9yeUZpbGUgbWV0YWRhdGEgZGVmYXVsdHMpXG4gICAqIC0gU2tpbGxNYW5hZ2VyOiBsaW5lcyA0NC0xMDIgKGNyZWF0ZSBtZXRob2QgZGVmYXVsdHMpXG4gICAqIC0gVGVtcGxhdGVNYW5hZ2VyOiBsaW5lcyAyOTgtMzc1ICh2YWxpZGF0ZU1ldGFkYXRhIGRlZmF1bHRzKVxuICAgKiAtIEVuc2VtYmxlTWFuYWdlcjogbGluZXMgODYtMzQ3IChwYXJzZU1ldGFkYXRhIGRlZmF1bHRzKVxuICAgKlxuICAgKiBAcGFyYW0gcmF3IC0gUmF3IG1ldGFkYXRhIGZyb20gdXNlciBpbnB1dCBvciBmaWxlXG4gICAqIEBwYXJhbSBlbGVtZW50VHlwZSAtIFR5cGUgb2YgZWxlbWVudCBiZWluZyBjcmVhdGVkXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gTm9ybWFsaXphdGlvbiBvcHRpb25zXG4gICAqIEByZXR1cm5zIEZ1bGx5IG5vcm1hbGl6ZWQgbWV0YWRhdGFcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3QgbWV0YWRhdGEgPSBtZXRhZGF0YVNlcnZpY2Uubm9ybWFsaXplTWV0YWRhdGEoXG4gICAqICAgeyBuYW1lOiAnTXkgU2tpbGwnLCBkZXNjcmlwdGlvbjogJ0RvZXMgdGhpbmdzJyB9LFxuICAgKiAgIEVsZW1lbnRUeXBlLlNLSUxMXG4gICAqICk7XG4gICAqIC8vIFJldHVybnM6IHsgbmFtZTogJ015IFNraWxsJywgZGVzY3JpcHRpb246ICdEb2VzIHRoaW5ncycsXG4gICAqIC8vICAgICAgICAgICB2ZXJzaW9uOiAnMS4wLjAnLCBhdXRob3I6ICd1c2VyJywgY3JlYXRlZDogJzIwMjUtMTEtMTknLCAuLi4gfVxuICAgKi9cbiAgbm9ybWFsaXplTWV0YWRhdGE8VCBleHRlbmRzIEJhc2VNZXRhZGF0YT4oXG4gICAgcmF3OiBQYXJ0aWFsPFQ+LFxuICAgIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZSxcbiAgICBvcHRpb25zOiBNZXRhZGF0YU5vcm1hbGl6YXRpb25PcHRpb25zID0ge31cbiAgKTogVCB7XG4gICAgLy8gU2V0IGRlZmF1bHQgb3B0aW9uc1xuICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICBwcmVzZXJ2ZUV4aXN0aW5nOiBvcHRpb25zLnByZXNlcnZlRXhpc3RpbmcgPz8gZmFsc2UsXG4gICAgICBnZW5lcmF0ZUlkOiBvcHRpb25zLmdlbmVyYXRlSWQgPz8gdHJ1ZSxcbiAgICAgIG5vcm1hbGl6ZVZlcnNpb246IG9wdGlvbnMubm9ybWFsaXplVmVyc2lvbiA/PyB0cnVlLFxuICAgICAgc2V0QXV0aG9yOiBvcHRpb25zLnNldEF1dGhvciA/PyB0cnVlLFxuICAgICAgc2V0Q3JlYXRlZDogb3B0aW9ucy5zZXRDcmVhdGVkID8/IHRydWUsXG4gICAgICBzZXRNb2RpZmllZDogb3B0aW9ucy5zZXRNb2RpZmllZCA/PyB0cnVlLFxuICAgICAgdHlwZURlZmF1bHRzOiBvcHRpb25zLnR5cGVEZWZhdWx0cyA/PyB7fSxcbiAgICAgIHNraXBUeXBlRGVmYXVsdHM6IG9wdGlvbnMuc2tpcFR5cGVEZWZhdWx0cyA/PyBmYWxzZVxuICAgIH07XG5cbiAgICAvLyBTdGFydCB3aXRoIHJhdyBtZXRhZGF0YVxuICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IGFueSA9IHsgLi4ucmF3IH07XG5cbiAgICAvLyBBcHBseSB0eXBlLXNwZWNpZmljIGRlZmF1bHRzIEZJUlNUIChjYW4gYmUgb3ZlcnJpZGRlbiBieSBzdGFuZGFyZCBkZWZhdWx0cylcbiAgICAvLyBTa2lwIGlmIHNraXBUeXBlRGVmYXVsdHMgaXMgdHJ1ZSAoZm9yIEJhc2VFbGVtZW50IGNvbnN0cnVjdG9yKVxuICAgIGlmIChvcHRzLnR5cGVEZWZhdWx0cyAmJiBPYmplY3Qua2V5cyhvcHRzLnR5cGVEZWZhdWx0cykubGVuZ3RoID4gMCAmJiAhb3B0cy5za2lwVHlwZURlZmF1bHRzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvcHRzLnR5cGVEZWZhdWx0cykpIHtcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRba2V5XSA9PT0gdW5kZWZpbmVkIHx8IChvcHRzLnByZXNlcnZlRXhpc3RpbmcgPT09IGZhbHNlICYmICFub3JtYWxpemVkW2tleV0pKSB7XG4gICAgICAgICAgbm9ybWFsaXplZFtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBcHBseSBzdGFuZGFyZCBtZXRhZGF0YSBkZWZhdWx0c1xuXG4gICAgLy8gTmFtZSAocmVxdWlyZWQgZmllbGQsIHNob3VsZCBhbHJlYWR5IGJlIHNldCwgYnV0IGVuc3VyZSBpdCBleGlzdHMpXG4gICAgaWYgKCFub3JtYWxpemVkLm5hbWUpIHtcbiAgICAgIG5vcm1hbGl6ZWQubmFtZSA9IGBVbnRpdGxlZCAke3RoaXMuZ2V0RWxlbWVudFR5cGVOYW1lKGVsZW1lbnRUeXBlKX1gO1xuICAgIH1cblxuICAgIC8vIERlc2NyaXB0aW9uXG4gICAgaWYgKG5vcm1hbGl6ZWQuZGVzY3JpcHRpb24gPT09IHVuZGVmaW5lZCB8fCBub3JtYWxpemVkLmRlc2NyaXB0aW9uID09PSBudWxsKSB7XG4gICAgICBub3JtYWxpemVkLmRlc2NyaXB0aW9uID0gJyc7XG4gICAgfVxuXG4gICAgLy8gVmVyc2lvbiBub3JtYWxpemF0aW9uXG4gICAgaWYgKG9wdHMubm9ybWFsaXplVmVyc2lvbikge1xuICAgICAgaWYgKCFub3JtYWxpemVkLnZlcnNpb24pIHtcbiAgICAgICAgbm9ybWFsaXplZC52ZXJzaW9uID0gJzEuMC4wJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vcm1hbGl6ZWQudmVyc2lvbiA9IHRoaXMubm9ybWFsaXplVmVyc2lvbihTdHJpbmcobm9ybWFsaXplZC52ZXJzaW9uKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXV0aG9yIGF0dHJpYnV0aW9uXG4gICAgaWYgKG9wdHMuc2V0QXV0aG9yICYmICFub3JtYWxpemVkLmF1dGhvcikge1xuICAgICAgbm9ybWFsaXplZC5hdXRob3IgPSB0aGlzLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlZCBkYXRlIChZWVlZLU1NLUREIGZvcm1hdCwgbWF0Y2hpbmcgUGVyc29uYU1hbmFnZXIgbGluZSAxNzgpXG4gICAgaWYgKG9wdHMuc2V0Q3JlYXRlZCAmJiAhbm9ybWFsaXplZC5jcmVhdGVkKSB7XG4gICAgICBpZiAobm9ybWFsaXplZC5jcmVhdGVkX2RhdGUpIHtcbiAgICAgICAgbm9ybWFsaXplZC5jcmVhdGVkID0gU3RyaW5nKG5vcm1hbGl6ZWQuY3JlYXRlZF9kYXRlKS5zcGxpdCgnVCcpWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9ybWFsaXplZC5jcmVhdGVkID0gdGhpcy5nZW5lcmF0ZURhdGUoJ2RhdGUtb25seScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1vZGlmaWVkIGRhdGUgKElTTyA4NjAxIGZ1bGwgZm9ybWF0LCBtYXRjaGluZyBBZ2VudE1hbmFnZXIgbGluZSAyMzEpXG4gICAgaWYgKG9wdHMuc2V0TW9kaWZpZWQgJiYgIW5vcm1hbGl6ZWQubW9kaWZpZWQpIHtcbiAgICAgIG5vcm1hbGl6ZWQubW9kaWZpZWQgPSB0aGlzLmdlbmVyYXRlRGF0ZSgnZnVsbCcpO1xuICAgIH1cblxuICAgIC8vIFRhZ3MgKGluaXRpYWxpemUgZW1wdHkgYXJyYXkgaWYgbm90IHByb3ZpZGVkKVxuICAgIGlmICghbm9ybWFsaXplZC50YWdzKSB7XG4gICAgICBub3JtYWxpemVkLnRhZ3MgPSBbXTtcbiAgICB9XG5cbiAgICAvLyBVbmlxdWUgSUQgZ2VuZXJhdGlvbiAoaWYgZW5hYmxlZCBhbmQgbWlzc2luZylcbiAgICBpZiAob3B0cy5nZW5lcmF0ZUlkICYmICFub3JtYWxpemVkLnVuaXF1ZV9pZCkge1xuICAgICAgY29uc3QgYXV0aG9yID0gbm9ybWFsaXplZC5hdXRob3IgfHwgdGhpcy5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgbm9ybWFsaXplZC51bmlxdWVfaWQgPSB0aGlzLmFzc2lnblVuaXF1ZUlkKG5vcm1hbGl6ZWQubmFtZSwgYXV0aG9yKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgZWxlbWVudCB0eXBlIGlmIG5vdCBwcmVzZW50XG4gICAgaWYgKCFub3JtYWxpemVkLnR5cGUpIHtcbiAgICAgIG5vcm1hbGl6ZWQudHlwZSA9IGVsZW1lbnRUeXBlO1xuICAgIH1cblxuICAgIHJldHVybiBub3JtYWxpemVkIGFzIFQ7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgZGVmYXVsdCBtZXRhZGF0YSBmb3IgYW4gZWxlbWVudCB0eXBlXG4gICAqXG4gICAqIFByb3ZpZGVzIGJhc2VsaW5lIG1ldGFkYXRhIHN0cnVjdHVyZSB3aXRoIGFsbCByZXF1aXJlZCBmaWVsZHMgcG9wdWxhdGVkLlxuICAgKiBVc2VmdWwgZm9yIGNyZWF0aW5nIG5ldyBlbGVtZW50cyBvciB0ZXN0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gZWxlbWVudFR5cGUgLSBUeXBlIG9mIGVsZW1lbnRcbiAgICogQHBhcmFtIG92ZXJyaWRlcyAtIE9wdGlvbmFsIGZpZWxkIG92ZXJyaWRlc1xuICAgKiBAcmV0dXJucyBEZWZhdWx0IG1ldGFkYXRhIHN0cnVjdHVyZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBkZWZhdWx0cyA9IG1ldGFkYXRhU2VydmljZS5nZW5lcmF0ZURlZmF1bHRNZXRhZGF0YShFbGVtZW50VHlwZS5TS0lMTCk7XG4gICAqIC8vIFJldHVybnM6IHsgbmFtZTogJ1VudGl0bGVkIFNraWxsJywgZGVzY3JpcHRpb246ICcnLFxuICAgKiAvLyAgICAgICAgICAgdmVyc2lvbjogJzEuMC4wJywgYXV0aG9yOiAnYW5vbnltb3VzJywgLi4uIH1cbiAgICovXG4gIGdlbmVyYXRlRGVmYXVsdE1ldGFkYXRhKFxuICAgIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZSxcbiAgICBvdmVycmlkZXM6IFBhcnRpYWw8QmFzZU1ldGFkYXRhPiA9IHt9XG4gICk6IEJhc2VNZXRhZGF0YSB7XG4gICAgY29uc3QgZGVmYXVsdHM6IEJhc2VNZXRhZGF0YSA9IHtcbiAgICAgIG5hbWU6IGBVbnRpdGxlZCAke3RoaXMuZ2V0RWxlbWVudFR5cGVOYW1lKGVsZW1lbnRUeXBlKX1gLFxuICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgdmVyc2lvbjogJzEuMC4wJyxcbiAgICAgIGF1dGhvcjogdGhpcy5nZXRDdXJyZW50VXNlcigpLFxuICAgICAgY3JlYXRlZDogdGhpcy5nZW5lcmF0ZURhdGUoJ2RhdGUtb25seScpLFxuICAgICAgbW9kaWZpZWQ6IHRoaXMuZ2VuZXJhdGVEYXRlKCdmdWxsJyksXG4gICAgICB0eXBlOiBlbGVtZW50VHlwZVxuICAgIH07XG5cbiAgICByZXR1cm4geyAuLi5kZWZhdWx0cywgLi4ub3ZlcnJpZGVzIH07XG4gIH1cblxuICAvKipcbiAgICogQXNzaWduIGEgdW5pcXVlIElEIGJhc2VkIG9uIG5hbWUgYW5kIGF1dGhvclxuICAgKlxuICAgKiBGb3JtYXQ6IFVzZXMgZXhpc3RpbmcgZ2VuZXJhdGVVbmlxdWVJZCB1dGlsaXR5IHdoaWNoIGNyZWF0ZXM6XG4gICAqIGB7c2x1Z2lmaWVkLW5hbWV9LXthdXRob3ItaGFzaH1gIG9yIHJhbmRvbSBVVUlEXG4gICAqXG4gICAqIFBSRVNFUlZFUyBFWEFDVCBCRUhBVklPUjpcbiAgICogLSBQZXJzb25hTWFuYWdlciBsaW5lIDE4MS0xODI6IGdlbmVyYXRlVW5pcXVlSWQobWV0YWRhdGEubmFtZSwgbWV0YWRhdGEuYXV0aG9yKVxuICAgKiAtIFBlcnNvbmFNYW5hZ2VyIGxpbmUgNTY3OiBnZW5lcmF0ZVVuaXF1ZUlkKHNhbml0aXplZE5hbWUsIHRoaXMuZ2V0Q3VycmVudFVzZXJGb3JBdHRyaWJ1dGlvbigpIHx8IHVuZGVmaW5lZClcbiAgICpcbiAgICogQHBhcmFtIG5hbWUgLSBFbGVtZW50IG5hbWVcbiAgICogQHBhcmFtIGF1dGhvciAtIEVsZW1lbnQgYXV0aG9yXG4gICAqIEByZXR1cm5zIFVuaXF1ZSBpZGVudGlmaWVyIHN0cmluZ1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBpZCA9IG1ldGFkYXRhU2VydmljZS5hc3NpZ25VbmlxdWVJZCgnTXkgU2tpbGwnLCAnam9obicpO1xuICAgKiAvLyBSZXR1cm5zOiAnbXktc2tpbGwtYTNmOGQ5ZTInIChvciBzaW1pbGFyIGhhc2gpXG4gICAqL1xuICBhc3NpZ25VbmlxdWVJZChuYW1lOiBzdHJpbmcsIGF1dGhvcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBVc2UgZXhpc3RpbmcgdXRpbGl0eSBmdW5jdGlvbiAocHJlc2VydmVzIGV4YWN0IGJlaGF2aW9yKVxuICAgIHJldHVybiBnZW5lcmF0ZVVuaXF1ZUlkKG5hbWUsIGF1dGhvcik7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgdXNlciBmb3IgYXR0cmlidXRpb25cbiAgICpcbiAgICogUHJpb3JpdHk6XG4gICAqIDEuIFNlcnZpY2UtbGV2ZWwgY3VycmVudFVzZXIgKHNldCB2aWEgc2V0Q3VycmVudFVzZXIpXG4gICAqIDIuIEVudmlyb25tZW50IHZhcmlhYmxlIERPTExIT1VTRV9VU0VSXG4gICAqIDMuIE9TIHN5c3RlbSB1c2VybmFtZSAob3MudXNlckluZm8oKS51c2VybmFtZSlcbiAgICogNC4gQW5vbnltb3VzIElEIGdlbmVyYXRpb24gKGxhc3QgcmVzb3J0KVxuICAgKlxuICAgKiBUaGUgcmVzdWx0IGlzIGNhY2hlZCBvbiBmaXJzdCByZXNvbHV0aW9uIHNvIHN1YnNlcXVlbnQgY2FsbHNcbiAgICogcmV0dXJuIHRoZSBzYW1lIHZhbHVlIHdpdGhvdXQgcmUtcmVzb2x2aW5nLlxuICAgKlxuICAgKiBAcmV0dXJucyBVc2VybmFtZSBvciBhbm9ueW1vdXMgSURcbiAgICovXG4gIGdldEN1cnJlbnRVc2VyKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRVc2VyKSB7XG4gICAgICBjb25zdCBlbnZVc2VyID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX1VTRVI7XG4gICAgICBpZiAoZW52VXNlcikge1xuICAgICAgICB0aGlzLmN1cnJlbnRVc2VyID0gZW52VXNlcjtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdbTWV0YWRhdGFTZXJ2aWNlXSBVc2VyIHJlc29sdmVkIGZyb20gRE9MTEhPVVNFX1VTRVIgZW52IHZhcicsIHsgdXNlcjogZW52VXNlciB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBvc1VzZXI6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgICAgICB0cnkgeyBvc1VzZXIgPSB1c2VySW5mbygpLnVzZXJuYW1lIHx8IG51bGw7IH0gY2F0Y2ggeyAvKiBwbGF0Zm9ybSB1bnN1cHBvcnRlZCAqLyB9XG4gICAgICAgIGlmIChvc1VzZXIpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRVc2VyID0gb3NVc2VyO1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnW01ldGFkYXRhU2VydmljZV0gVXNlciByZXNvbHZlZCBmcm9tIE9TIHVzZXJuYW1lJywgeyB1c2VyOiBvc1VzZXIgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VXNlciA9IGdlbmVyYXRlQW5vbnltb3VzSWQoKTtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoJ1tNZXRhZGF0YVNlcnZpY2VdIFVzZXIgcmVzb2x2ZWQgYXMgYW5vbnltb3VzIChubyBlbnYgdmFyIG9yIE9TIHVzZXJuYW1lIGF2YWlsYWJsZSknLCB7IHVzZXI6IHRoaXMuY3VycmVudFVzZXIgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFVzZXI7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGN1cnJlbnQgdXNlciBpZGVudGl0eVxuICAgKlxuICAgKiBAcGFyYW0gdXNlcm5hbWUgLSBVc2VybmFtZSB0byBzZXQgKG51bGwgdG8gY2xlYXIpXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIG1ldGFkYXRhU2VydmljZS5zZXRDdXJyZW50VXNlcignam9obicpO1xuICAgKiBtZXRhZGF0YVNlcnZpY2Uuc2V0Q3VycmVudFVzZXIobnVsbCk7IC8vIENsZWFyXG4gICAqL1xuICBzZXRDdXJyZW50VXNlcih1c2VybmFtZTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudFVzZXIgPSB1c2VybmFtZTtcbiAgICBsb2dnZXIuZGVidWcoJ1tNZXRhZGF0YVNlcnZpY2VdIEN1cnJlbnQgdXNlciBzZXQnLCB7IHVzZXJuYW1lIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vcm1hbGl6ZSB2ZXJzaW9uIHN0cmluZyB0byBzZW1hbnRpYyB2ZXJzaW9uaW5nIGZvcm1hdFxuICAgKlxuICAgKiBIYW5kbGVzOlxuICAgKiAtIDEuMCDihpIgMS4wLjBcbiAgICogLSAyIOKGkiAyLjAuMFxuICAgKiAtIDEuMi4zLWJldGEg4oaSIDEuMi4zLWJldGEgKHByZXNlcnZlcyBwcmUtcmVsZWFzZSlcbiAgICpcbiAgICogUFJFU0VSVkVTIEVYQUNUIEJFSEFWSU9SOlxuICAgKiAtIFBlcnNvbmFNYW5hZ2VyIGxpbmUgMTczOiBtZXRhZGF0YS52ZXJzaW9uID0gbm9ybWFsaXplVmVyc2lvbihtZXRhZGF0YS52ZXJzaW9uKVxuICAgKiAtIFBlcnNvbmFNYW5hZ2VyIGxpbmUgNzg2LTc4Nzogbm9ybWFsaXplVmVyc2lvbihTdHJpbmcoZWRpdGFibGVQZXJzb25hLnZlcnNpb24pKVxuICAgKiAtIFVzZXMgZXhpc3Rpbmcgbm9ybWFsaXplVmVyc2lvbigpIHV0aWxpdHkgZnJvbSBCYXNlRWxlbWVudFxuICAgKlxuICAgKiBAcGFyYW0gdmVyc2lvbiAtIFZlcnNpb24gc3RyaW5nIHRvIG5vcm1hbGl6ZVxuICAgKiBAcmV0dXJucyBOb3JtYWxpemVkIHZlcnNpb24gc3RyaW5nXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IHYgPSBtZXRhZGF0YVNlcnZpY2Uubm9ybWFsaXplVmVyc2lvbignMS4wJyk7XG4gICAqIC8vIFJldHVybnM6ICcxLjAuMCdcbiAgICovXG4gIG5vcm1hbGl6ZVZlcnNpb24odmVyc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBVc2UgZXhpc3RpbmcgdXRpbGl0eSBmdW5jdGlvbiAocHJlc2VydmVzIGV4YWN0IGJlaGF2aW9yKVxuICAgIHJldHVybiBub3JtYWxpemVWZXJzaW9uKHZlcnNpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIElTTyA4NjAxIGRhdGUgc3RyaW5nXG4gICAqXG4gICAqIFBSRVNFUlZFUyBFWEFDVCBCRUhBVklPUjpcbiAgICogLSBQZXJzb25hTWFuYWdlciBsaW5lIDE3ODogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF0gKGRhdGUtb25seSlcbiAgICogLSBBZ2VudE1hbmFnZXIgbGluZSAyMzE6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSAoZnVsbClcbiAgICpcbiAgICogQHBhcmFtIGZvcm1hdCAtIERhdGUgZm9ybWF0ICgnZnVsbCcgb3IgJ2RhdGUtb25seScpXG4gICAqIEByZXR1cm5zIEZvcm1hdHRlZCBkYXRlIHN0cmluZ1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBkYXRlID0gbWV0YWRhdGFTZXJ2aWNlLmdlbmVyYXRlRGF0ZSgnZGF0ZS1vbmx5Jyk7XG4gICAqIC8vIFJldHVybnM6ICcyMDI1LTExLTE5J1xuICAgKlxuICAgKiBjb25zdCBkYXRldGltZSA9IG1ldGFkYXRhU2VydmljZS5nZW5lcmF0ZURhdGUoJ2Z1bGwnKTtcbiAgICogLy8gUmV0dXJuczogJzIwMjUtMTEtMTlUMTA6MzA6NDUuMTIzWidcbiAgICovXG4gIGdlbmVyYXRlRGF0ZShmb3JtYXQ6ICdmdWxsJyB8ICdkYXRlLW9ubHknID0gJ2Z1bGwnKTogc3RyaW5nIHtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG5cbiAgICBpZiAoZm9ybWF0ID09PSAnZGF0ZS1vbmx5Jykge1xuICAgICAgLy8gTWF0Y2ggUGVyc29uYU1hbmFnZXIgbGluZSAxNzggZXhhY3RseVxuICAgICAgcmV0dXJuIG5vdy5zcGxpdCgnVCcpWzBdO1xuICAgIH1cblxuICAgIC8vIEZ1bGwgSVNPIDg2MDEgZm9ybWF0XG4gICAgcmV0dXJuIG5vdztcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBtZXRhZGF0YSBjb21wbGV0ZW5lc3NcbiAgICpcbiAgICogQ2hlY2tzOlxuICAgKiAtIFJlcXVpcmVkIGZpZWxkcyBwcmVzZW50IChuYW1lLCBkZXNjcmlwdGlvbilcbiAgICogLSBWYWxpZCB0eXBlcyBmb3IgYWxsIGZpZWxkc1xuICAgKiAtIFZhbHVlIGNvbnN0cmFpbnRzICh2ZXJzaW9uIGZvcm1hdCwgZXRjLilcbiAgICpcbiAgICogQHBhcmFtIG1ldGFkYXRhIC0gTWV0YWRhdGEgdG8gdmFsaWRhdGVcbiAgICogQHBhcmFtIGVsZW1lbnRUeXBlIC0gRWxlbWVudCB0eXBlIGZvciB0eXBlLXNwZWNpZmljIHZhbGlkYXRpb25cbiAgICogQHJldHVybnMgVmFsaWRhdGlvbiByZXN1bHRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3QgcmVzdWx0ID0gbWV0YWRhdGFTZXJ2aWNlLnZhbGlkYXRlTWV0YWRhdGEobWV0YWRhdGEsIEVsZW1lbnRUeXBlLlNLSUxMKTtcbiAgICogaWYgKCFyZXN1bHQudmFsaWQpIHtcbiAgICogICBjb25zb2xlLmVycm9yKCdWYWxpZGF0aW9uIGVycm9yczonLCByZXN1bHQuZXJyb3JzKTtcbiAgICogfVxuICAgKi9cbiAgdmFsaWRhdGVNZXRhZGF0YShcbiAgICBtZXRhZGF0YTogQmFzZU1ldGFkYXRhLFxuICAgIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZVxuICApOiB7IHZhbGlkOiBib29sZWFuOyBlcnJvcnM/OiBzdHJpbmdbXSB9IHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBSZXF1aXJlZCBmaWVsZHNcbiAgICBpZiAoIW1ldGFkYXRhLm5hbWUgfHwgdHlwZW9mIG1ldGFkYXRhLm5hbWUgIT09ICdzdHJpbmcnIHx8IG1ldGFkYXRhLm5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZXJyb3JzLnB1c2goJ25hbWUgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgaWYgKG1ldGFkYXRhLmRlc2NyaXB0aW9uID09PSB1bmRlZmluZWQgfHwgbWV0YWRhdGEuZGVzY3JpcHRpb24gPT09IG51bGwpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdkZXNjcmlwdGlvbiBpcyByZXF1aXJlZCAoY2FuIGJlIGVtcHR5IHN0cmluZyknKTtcbiAgICB9XG5cbiAgICBpZiAoIW1ldGFkYXRhLnZlcnNpb24gfHwgdHlwZW9mIG1ldGFkYXRhLnZlcnNpb24gIT09ICdzdHJpbmcnKSB7XG4gICAgICBlcnJvcnMucHVzaCgndmVyc2lvbiBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhIHN0cmluZycpO1xuICAgIH1cblxuICAgIC8vIFR5cGUgdmFsaWRhdGlvblxuICAgIGlmIChtZXRhZGF0YS5hdXRob3IgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgbWV0YWRhdGEuYXV0aG9yICE9PSAnc3RyaW5nJykge1xuICAgICAgZXJyb3JzLnB1c2goJ2F1dGhvciBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgaWYgKG1ldGFkYXRhLmNyZWF0ZWQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgbWV0YWRhdGEuY3JlYXRlZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdjcmVhdGVkIG11c3QgYmUgYSBkYXRlIHN0cmluZycpO1xuICAgIH1cblxuICAgIGlmIChtZXRhZGF0YS5tb2RpZmllZCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBtZXRhZGF0YS5tb2RpZmllZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdtb2RpZmllZCBtdXN0IGJlIGEgZGF0ZSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICBpZiAobWV0YWRhdGEudGFncyAhPT0gdW5kZWZpbmVkICYmICFBcnJheS5pc0FycmF5KG1ldGFkYXRhLnRhZ3MpKSB7XG4gICAgICBlcnJvcnMucHVzaCgndGFncyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgfVxuXG4gICAgaWYgKG1ldGFkYXRhLnRyaWdnZXJzICE9PSB1bmRlZmluZWQgJiYgIUFycmF5LmlzQXJyYXkobWV0YWRhdGEudHJpZ2dlcnMpKSB7XG4gICAgICBlcnJvcnMucHVzaCgndHJpZ2dlcnMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgIH1cblxuICAgIC8vIElzc3VlICM3NTU6IEFjY2VwdCBib3RoIHBsdXJhbCBFbGVtZW50VHlwZSAoJ2FnZW50cycpIGFuZCBzaW5ndWxhciBsYWJlbCAoJ2FnZW50JylcbiAgICBpZiAobWV0YWRhdGEudHlwZSAhPT0gdW5kZWZpbmVkICYmIG1ldGFkYXRhLnR5cGUgIT09IGVsZW1lbnRUeXBlICYmIG1ldGFkYXRhLnR5cGUgIT09IHRvU2luZ3VsYXJMYWJlbChlbGVtZW50VHlwZSkpIHtcbiAgICAgIGVycm9ycy5wdXNoKGB0eXBlIG11c3QgbWF0Y2ggZWxlbWVudCB0eXBlIChleHBlY3RlZDogJHtlbGVtZW50VHlwZX0sIGdvdDogJHttZXRhZGF0YS50eXBlfSlgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmFsaWQ6IGVycm9ycy5sZW5ndGggPT09IDAsXG4gICAgICBlcnJvcnM6IGVycm9ycy5sZW5ndGggPiAwID8gZXJyb3JzIDogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuXG4gIC8vIFByaXZhdGUgaGVscGVyIG1ldGhvZHNcblxuICAvKipcbiAgICogR2V0IGh1bWFuLXJlYWRhYmxlIGVsZW1lbnQgdHlwZSBuYW1lXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGdldEVsZW1lbnRUeXBlTmFtZShlbGVtZW50VHlwZTogRWxlbWVudFR5cGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVOYW1lczogUmVjb3JkPEVsZW1lbnRUeXBlLCBzdHJpbmc+ID0ge1xuICAgICAgW0VsZW1lbnRUeXBlLlNLSUxMXTogJ1NraWxsJyxcbiAgICAgIFtFbGVtZW50VHlwZS5QRVJTT05BXTogJ1BlcnNvbmEnLFxuICAgICAgW0VsZW1lbnRUeXBlLlRFTVBMQVRFXTogJ1RlbXBsYXRlJyxcbiAgICAgIFtFbGVtZW50VHlwZS5BR0VOVF06ICdBZ2VudCcsXG4gICAgICBbRWxlbWVudFR5cGUuTUVNT1JZXTogJ01lbW9yeScsXG4gICAgICBbRWxlbWVudFR5cGUuRU5TRU1CTEVdOiAnRW5zZW1ibGUnXG4gICAgfTtcblxuICAgIHJldHVybiB0eXBlTmFtZXNbZWxlbWVudFR5cGVdIHx8ICdFbGVtZW50JztcbiAgfVxufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"PolicyExportService.d.ts","sourceRoot":"","sources":["../../src/services/PolicyExportService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAYH,MAAM,WAAW,gBAAgB;IAC/B,0BAA0B,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC,CAAC;IACpH,gBAAgB,EAAE,MAAM,MAAM,CAAC;CAChC;AASD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,IAAI,CAAmB;gBAEnB,IAAI,EAAE,gBAAgB;IAIlC;;;;;;;OAOG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAkDrC,OAAO,CAAC,oBAAoB;CAwC7B"}
1
+ {"version":3,"file":"PolicyExportService.d.ts","sourceRoot":"","sources":["../../src/services/PolicyExportService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAYH,MAAM,WAAW,gBAAgB;IAC/B,0BAA0B,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC,CAAC;IACpH,gBAAgB,EAAE,MAAM,MAAM,CAAC;CAChC;AAUD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,IAAI,CAAmB;gBAEnB,IAAI,EAAE,gBAAgB;IAIlC;;;;;;;OAOG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAkDrC,OAAO,CAAC,oBAAoB;CA+C7B"}
@@ -79,6 +79,7 @@ export class PolicyExportService {
79
79
  buildElementPolicies(activeElements) {
80
80
  const elements = [];
81
81
  const combinedAllow = [];
82
+ const combinedConfirm = [];
82
83
  const combinedDeny = [];
83
84
  let ensembleName;
84
85
  for (const element of activeElements) {
@@ -90,6 +91,9 @@ export class PolicyExportService {
90
91
  const allowPatterns = Array.isArray(external?.allowPatterns)
91
92
  ? external.allowPatterns.filter((p) => typeof p === 'string')
92
93
  : [];
94
+ const confirmPatterns = Array.isArray(external?.confirmPatterns)
95
+ ? external.confirmPatterns.filter((p) => typeof p === 'string')
96
+ : [];
93
97
  const denyPatterns = Array.isArray(external?.denyPatterns)
94
98
  ? external.denyPatterns.filter((p) => typeof p === 'string')
95
99
  : [];
@@ -97,9 +101,11 @@ export class PolicyExportService {
97
101
  type: element.type,
98
102
  name: element.name,
99
103
  allow_patterns: allowPatterns,
104
+ confirm_patterns: confirmPatterns,
100
105
  deny_patterns: denyPatterns,
101
106
  });
102
107
  combinedAllow.push(...allowPatterns);
108
+ combinedConfirm.push(...confirmPatterns);
103
109
  combinedDeny.push(...denyPatterns);
104
110
  }
105
111
  return {
@@ -107,8 +113,9 @@ export class PolicyExportService {
107
113
  ...(ensembleName ? { ensemble_name: ensembleName } : {}),
108
114
  elements,
109
115
  combined_allow_patterns: [...new Set(combinedAllow)],
116
+ combined_confirm_patterns: [...new Set(combinedConfirm)],
110
117
  combined_deny_patterns: [...new Set(combinedDeny)],
111
118
  };
112
119
  }
113
120
  }
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9saWN5RXhwb3J0U2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9Qb2xpY3lFeHBvcnRTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNsQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXZDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNsRixNQUFNLGVBQWUsR0FBRyxrQ0FBa0MsQ0FBQztBQWMzRCxNQUFNLE9BQU8sbUJBQW1CO0lBQ3RCLElBQUksQ0FBbUI7SUFFL0IsWUFBWSxJQUFzQjtRQUNoQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILEtBQUssQ0FBQyxjQUFjO1FBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsK0JBQStCLEVBQUUsQ0FBQztZQUN6QyxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILHlEQUF5RDtZQUN6RCxNQUFNLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1Asa0VBQWtFO1lBQ2xFLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxX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QUFlLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUM7Z0JBQ3hGLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFFUCxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNaLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtnQkFDbEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO2dCQUNsQixjQUFjLEVBQUUsYUFBYTtnQkFDN0IsYUFBYSxFQUFFLFlBQVk7YUFDNUIsQ0FBQyxDQUFDO1lBRUgsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDO1lBQ3JDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBRUQsT0FBTztZQUNMLG9CQUFvQixFQUFFLFFBQVEsQ0FBQyxNQUFNO1lBQ3JDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDeEQsUUFBUTtZQUNSLHVCQUF1QixFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNwRCxzQkFBc0IsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDbkQsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUG9saWN5RXhwb3J0U2VydmljZSAtIEV4cG9ydHMgdG9vbCBjbGFzc2lmaWNhdGlvbiBwb2xpY2llcyBmb3IgYnJpZGdlIGNvbnN1bXB0aW9uXG4gKlxuICogV3JpdGVzIGEgSlNPTiBwb2xpY3kgZmlsZSB0byB+Ly5kb2xsaG91c2UvYnJpZGdlL2ltcG9ydHMvcG9saWNpZXMvIHNvIHRoZVxuICogRG9sbGhvdXNlQnJpZGdlIHBlcm1pc3Npb24tcHJvbXB0IHNlcnZlciBjYW4gZXZhbHVhdGUgcGVybWlzc2lvbnMgbG9jYWxseS5cbiAqXG4gKiBXcml0ZS1vbmx5OiBwdWJsaXNoZXMgYW5kIGZvcmdldHMuIFNraXBzIHNpbGVudGx5IGlmIHRoZSBicmlkZ2UgZm9sZGVyXG4gKiBkb2Vzbid0IGV4aXN0IChicmlkZ2UgbWF5IG5vdCBiZSBpbnN0YWxsZWQpLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL0RvbGxob3VzZU1DUC9tY3Atc2VydmVyLXYyLXJlZmFjdG9yL2lzc3Vlcy83NjJcbiAqL1xuXG5pbXBvcnQgeyB3cml0ZUZpbGUsIGFjY2VzcyB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBnZXRTdGF0aWNQb2xpY3lEYXRhIH0gZnJvbSAnLi4vaGFuZGxlcnMvbWNwLWFxbC9wb2xpY2llcy9Ub29sQ2xhc3NpZmljYXRpb24uanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IGVudiB9IGZyb20gJy4uL2NvbmZpZy9lbnYuanMnO1xuXG5jb25zdCBQT0xJQ1lfRElSID0gam9pbihob21lZGlyKCksICcuZG9sbGhvdXNlJywgJ2JyaWRnZScsICdpbXBvcnRzJywgJ3BvbGljaWVzJyk7XG5jb25zdCBQT0xJQ1lfRklMRU5BTUUgPSAnZG9sbGhvdXNlbWNwLWNydWRlLXBvbGljaWVzLmpzb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBvbGljeUV4cG9ydERlcHMge1xuICBnZXRBY3RpdmVFbGVtZW50c0ZvclBvbGljeTogKCkgPT4gUHJvbWlzZTxBcnJheTx7IHR5cGU6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT4+O1xuICBnZXRTZXJ2ZXJWZXJzaW9uOiAoKSA9PiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBFbGVtZW50UG9saWN5RW50cnkge1xuICB0eXBlOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgYWxsb3dfcGF0dGVybnM6IHN0cmluZ1tdO1xuICBkZW55X3BhdHRlcm5zOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNsYXNzIFBvbGljeUV4cG9ydFNlcnZpY2Uge1xuICBwcml2YXRlIGRlcHM6IFBvbGljeUV4cG9ydERlcHM7XG5cbiAgY29uc3RydWN0b3IoZGVwczogUG9saWN5RXhwb3J0RGVwcykge1xuICAgIHRoaXMuZGVwcyA9IGRlcHM7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IGN1cnJlbnQgcG9saWN5IHN0YXRlIHRvIHRoZSBicmlkZ2UgaW1wb3J0cyBmb2xkZXIuXG4gICAqXG4gICAqIEdhdGhlcnMgc3RhdGljIGNsYXNzaWZpY2F0aW9uIHJ1bGVzIGFuZCBhY3RpdmUgZWxlbWVudCBwb2xpY2llcyxcbiAgICogd3JpdGVzIGEgc2luZ2xlIEpTT04gZmlsZSBjb25mb3JtaW5nIHRvIGJyaWRnZSBwb2xpY3kgc2NoZW1hIHYxLjAuXG4gICAqXG4gICAqIFNraXBzIHNpbGVudGx5IGlmIHRoZSBicmlkZ2UgaW1wb3J0cyBkaXJlY3RvcnkgZG9lc24ndCBleGlzdC5cbiAgICovXG4gIGFzeW5jIGV4cG9ydFBvbGljaWVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghZW52LkRPTExIT1VTRV9QT0xJQ1lfRVhQT1JUX0VOQUJMRUQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gQ2hlY2sgaWYgYnJpZGdlIGltcG9ydHMgZGlyZWN0b3J5IGV4aXN0cyDigJQgc2tpcCBpZiBub3RcbiAgICAgIGF3YWl0IGFjY2VzcyhQT0xJQ1lfRElSKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEJyaWRnZSBub3QgaW5zdGFsbGVkIG9yIGltcG9ydHMgZGlyIG5vdCBjcmVhdGVkIOKAlCBza2lwIHNpbGVudGx5XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXRpY1J1bGVzID0gZ2V0U3RhdGljUG9saWN5RGF0YSgpO1xuICAgICAgY29uc3QgYWN0aXZlRWxlbWVudHMgPSBhd2FpdCB0aGlzLmRlcHMuZ2V0QWN0aXZlRWxlbWVudHNGb3JQb2xpY3koKTtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmRlcHMuZ2V0U2VydmVyVmVyc2lvbigpO1xuXG4gICAgICBjb25zdCBlbGVtZW50UG9saWNpZXMgPSB0aGlzLmJ1aWxkRWxlbWVudFBvbGljaWVzKGFjdGl2ZUVsZW1lbnRzKTtcblxuICAgICAgY29uc3QgcG9saWN5ID0ge1xuICAgICAgICBzY2hlbWFfdmVyc2lvbjogJzEuMCcsXG4gICAgICAgIHNlcnZlcjoge1xuICAgICAgICAgIG5hbWU6ICdEb2xsaG91c2VNQ1AtVjItUmVmYWN0b3IgQ1JVREUnLFxuICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgIH0sXG4gICAgICAgIGV4cG9ydGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHN0YXRpY19ydWxlczoge1xuICAgICAgICAgIHNhZmVfdG9vbHM6IHN0YXRpY1J1bGVzLnNhZmVfdG9vbHMsXG4gICAgICAgICAgc2FmZV9iYXNoX3BhdHRlcm5zOiBzdGF0aWNSdWxlcy5zYWZlX2Jhc2hfcGF0dGVybnMsXG4gICAgICAgICAgZGFuZ2Vyb3VzX2Jhc2hfcGF0dGVybnM6IHN0YXRpY1J1bGVzLmRhbmdlcm91c19iYXNoX3BhdHRlcm5zLFxuICAgICAgICAgIGJsb2NrZWRfYmFzaF9wYXR0ZXJuczogc3RhdGljUnVsZXMuYmxvY2tlZF9iYXNoX3BhdHRlcm5zLFxuICAgICAgICAgIGlycmV2ZXJzaWJsZV9wYXR0ZXJuczogc3RhdGljUnVsZXMuaXJyZXZlcnNpYmxlX3BhdHRlcm5zLFxuICAgICAgICAgIHNlbnNpdGl2ZV9wYXRoX3ByZWZpeGVzOiBzdGF0aWNSdWxlcy5zZW5zaXRpdmVfcGF0aF9wcmVmaXhlcyxcbiAgICAgICAgICBnYXRla2VlcGVyX2Vzc2VudGlhbF9vcGVyYXRpb25zOiBzdGF0aWNSdWxlcy5nYXRla2VlcGVyX2Vzc2VudGlhbF9vcGVyYXRpb25zLFxuICAgICAgICAgIHNhZmVfbWNwX29wZXJhdGlvbnM6IHN0YXRpY1J1bGVzLnNhZmVfbWNwX29wZXJhdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICAgIGVsZW1lbnRfcG9saWNpZXM6IGVsZW1lbnRQb2xpY2llcyxcbiAgICAgICAgcmlza19zY29yZXM6IHN0YXRpY1J1bGVzLnJpc2tfc2NvcmVzLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgZmlsZVBhdGggPSBqb2luKFBPTElDWV9ESVIsIFBPTElDWV9GSUxFTkFNRSk7XG4gICAgICBhd2FpdCB3cml0ZUZpbGUoZmlsZVBhdGgsIEpTT04uc3RyaW5naWZ5KHBvbGljeSwgbnVsbCwgMiksICd1dGYtOCcpO1xuICAgICAgbG9nZ2VyLmluZm8oJ1tQb2xpY3lFeHBvcnRTZXJ2aWNlXSBQb2xpY2llcyBleHBvcnRlZCcsIHsgZmlsZVBhdGgsIGVsZW1lbnRDb3VudDogZWxlbWVudFBvbGljaWVzLmFjdGl2ZV9lbGVtZW50X2NvdW50IH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gTm9uLWZhdGFsOiBsb2cgYW5kIGNvbnRpbnVlXG4gICAgICBsb2dnZXIud2FybignW1BvbGljeUV4cG9ydFNlcnZpY2VdIEZhaWxlZCB0byBleHBvcnQgcG9saWNpZXMnLCB7IGVycm9yOiAoZXJyIGFzIEVycm9yKS5tZXNzYWdlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRFbGVtZW50UG9saWNpZXMoYWN0aXZlRWxlbWVudHM6IEFycmF5PHsgdHlwZTogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9Pikge1xuICAgIGNvbnN0IGVsZW1lbnRzOiBFbGVtZW50UG9saWN5RW50cnlbXSA9IFtdO1xuICAgIGNvbnN0IGNvbWJpbmVkQWxsb3c6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgY29tYmluZWREZW55OiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBlbnNlbWJsZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBhY3RpdmVFbGVtZW50cykge1xuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ2Vuc2VtYmxlJykge1xuICAgICAgICBlbnNlbWJsZU5hbWUgPSBlbGVtZW50Lm5hbWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGdhdGVrZWVwZXIgPSBlbGVtZW50Lm1ldGFkYXRhPy5nYXRla2VlcGVyIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZXh0ZXJuYWwgPSBnYXRla2VlcGVyPy5leHRlcm5hbFJlc3RyaWN0aW9ucyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgYWxsb3dQYXR0ZXJucyA9IEFycmF5LmlzQXJyYXkoZXh0ZXJuYWw/LmFsbG93UGF0dGVybnMpXG4gICAgICAgID8gKGV4dGVybmFsLmFsbG93UGF0dGVybnMgYXMgdW5rbm93bltdKS5maWx0ZXIoKHApOiBwIGlzIHN0cmluZyA9PiB0eXBlb2YgcCA9PT0gJ3N0cmluZycpXG4gICAgICAgIDogW107XG4gICAgICBjb25zdCBkZW55UGF0dGVybnMgPSBBcnJheS5pc0FycmF5KGV4dGVybmFsPy5kZW55UGF0dGVybnMpXG4gICAgICAgID8gKGV4dGVybmFsLmRlbnlQYXR0ZXJucyBhcyB1bmtub3duW10pLmZpbHRlcigocCk6IHAgaXMgc3RyaW5nID0+IHR5cGVvZiBwID09PSAnc3RyaW5nJylcbiAgICAgICAgOiBbXTtcblxuICAgICAgZWxlbWVudHMucHVzaCh7XG4gICAgICAgIHR5cGU6IGVsZW1lbnQudHlwZSxcbiAgICAgICAgbmFtZTogZWxlbWVudC5uYW1lLFxuICAgICAgICBhbGxvd19wYXR0ZXJuczogYWxsb3dQYXR0ZXJucyxcbiAgICAgICAgZGVueV9wYXR0ZXJuczogZGVueVBhdHRlcm5zLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbWJpbmVkQWxsb3cucHVzaCguLi5hbGxvd1BhdHRlcm5zKTtcbiAgICAgIGNvbWJpbmVkRGVueS5wdXNoKC4uLmRlbnlQYXR0ZXJucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdGl2ZV9lbGVtZW50X2NvdW50OiBlbGVtZW50cy5sZW5ndGgsXG4gICAgICAuLi4oZW5zZW1ibGVOYW1lID8geyBlbnNlbWJsZV9uYW1lOiBlbnNlbWJsZU5hbWUgfSA6IHt9KSxcbiAgICAgIGVsZW1lbnRzLFxuICAgICAgY29tYmluZWRfYWxsb3dfcGF0dGVybnM6IFsuLi5uZXcgU2V0KGNvbWJpbmVkQWxsb3cpXSxcbiAgICAgIGNvbWJpbmVkX2RlbnlfcGF0dGVybnM6IFsuLi5uZXcgU2V0KGNvbWJpbmVkRGVueSldLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9saWN5RXhwb3J0U2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9Qb2xpY3lFeHBvcnRTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNsQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXZDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNsRixNQUFNLGVBQWUsR0FBRyxrQ0FBa0MsQ0FBQztBQWUzRCxNQUFNLE9BQU8sbUJBQW1CO0lBQ3RCLElBQUksQ0FBbUI7SUFFL0IsWUFBWSxJQUFzQjtRQUNoQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILEtBQUssQ0FBQyxjQUFjO1FBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsK0JBQStCLEVBQUUsQ0FBQztZQUN6QyxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILHlEQUF5RDtZQUN6RCxNQUFNLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1Asa0VBQWtFO1lBQ2xFLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxX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QUFZLENBQUMsQ0FBQztTQUNuRCxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQb2xpY3lFeHBvcnRTZXJ2aWNlIC0gRXhwb3J0cyB0b29sIGNsYXNzaWZpY2F0aW9uIHBvbGljaWVzIGZvciBicmlkZ2UgY29uc3VtcHRpb25cbiAqXG4gKiBXcml0ZXMgYSBKU09OIHBvbGljeSBmaWxlIHRvIH4vLmRvbGxob3VzZS9icmlkZ2UvaW1wb3J0cy9wb2xpY2llcy8gc28gdGhlXG4gKiBEb2xsaG91c2VCcmlkZ2UgcGVybWlzc2lvbi1wcm9tcHQgc2VydmVyIGNhbiBldmFsdWF0ZSBwZXJtaXNzaW9ucyBsb2NhbGx5LlxuICpcbiAqIFdyaXRlLW9ubHk6IHB1Ymxpc2hlcyBhbmQgZm9yZ2V0cy4gU2tpcHMgc2lsZW50bHkgaWYgdGhlIGJyaWRnZSBmb2xkZXJcbiAqIGRvZXNuJ3QgZXhpc3QgKGJyaWRnZSBtYXkgbm90IGJlIGluc3RhbGxlZCkuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vRG9sbGhvdXNlTUNQL21jcC1zZXJ2ZXItdjItcmVmYWN0b3IvaXNzdWVzLzc2MlxuICovXG5cbmltcG9ydCB7IHdyaXRlRmlsZSwgYWNjZXNzIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGdldFN0YXRpY1BvbGljeURhdGEgfSBmcm9tICcuLi9oYW5kbGVycy9tY3AtYXFsL3BvbGljaWVzL1Rvb2xDbGFzc2lmaWNhdGlvbi5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZW52IH0gZnJvbSAnLi4vY29uZmlnL2Vudi5qcyc7XG5cbmNvbnN0IFBPTElDWV9ESVIgPSBqb2luKGhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAnYnJpZGdlJywgJ2ltcG9ydHMnLCAncG9saWNpZXMnKTtcbmNvbnN0IFBPTElDWV9GSUxFTkFNRSA9ICdkb2xsaG91c2VtY3AtY3J1ZGUtcG9saWNpZXMuanNvbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9saWN5RXhwb3J0RGVwcyB7XG4gIGdldEFjdGl2ZUVsZW1lbnRzRm9yUG9saWN5OiAoKSA9PiBQcm9taXNlPEFycmF5PHsgdHlwZTogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9Pj47XG4gIGdldFNlcnZlclZlcnNpb246ICgpID0+IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEVsZW1lbnRQb2xpY3lFbnRyeSB7XG4gIHR5cGU6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBhbGxvd19wYXR0ZXJuczogc3RyaW5nW107XG4gIGNvbmZpcm1fcGF0dGVybnM6IHN0cmluZ1tdO1xuICBkZW55X3BhdHRlcm5zOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNsYXNzIFBvbGljeUV4cG9ydFNlcnZpY2Uge1xuICBwcml2YXRlIGRlcHM6IFBvbGljeUV4cG9ydERlcHM7XG5cbiAgY29uc3RydWN0b3IoZGVwczogUG9saWN5RXhwb3J0RGVwcykge1xuICAgIHRoaXMuZGVwcyA9IGRlcHM7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IGN1cnJlbnQgcG9saWN5IHN0YXRlIHRvIHRoZSBicmlkZ2UgaW1wb3J0cyBmb2xkZXIuXG4gICAqXG4gICAqIEdhdGhlcnMgc3RhdGljIGNsYXNzaWZpY2F0aW9uIHJ1bGVzIGFuZCBhY3RpdmUgZWxlbWVudCBwb2xpY2llcyxcbiAgICogd3JpdGVzIGEgc2luZ2xlIEpTT04gZmlsZSBjb25mb3JtaW5nIHRvIGJyaWRnZSBwb2xpY3kgc2NoZW1hIHYxLjAuXG4gICAqXG4gICAqIFNraXBzIHNpbGVudGx5IGlmIHRoZSBicmlkZ2UgaW1wb3J0cyBkaXJlY3RvcnkgZG9lc24ndCBleGlzdC5cbiAgICovXG4gIGFzeW5jIGV4cG9ydFBvbGljaWVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghZW52LkRPTExIT1VTRV9QT0xJQ1lfRVhQT1JUX0VOQUJMRUQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gQ2hlY2sgaWYgYnJpZGdlIGltcG9ydHMgZGlyZWN0b3J5IGV4aXN0cyDigJQgc2tpcCBpZiBub3RcbiAgICAgIGF3YWl0IGFjY2VzcyhQT0xJQ1lfRElSKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEJyaWRnZSBub3QgaW5zdGFsbGVkIG9yIGltcG9ydHMgZGlyIG5vdCBjcmVhdGVkIOKAlCBza2lwIHNpbGVudGx5XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXRpY1J1bGVzID0gZ2V0U3RhdGljUG9saWN5RGF0YSgpO1xuICAgICAgY29uc3QgYWN0aXZlRWxlbWVudHMgPSBhd2FpdCB0aGlzLmRlcHMuZ2V0QWN0aXZlRWxlbWVudHNGb3JQb2xpY3koKTtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmRlcHMuZ2V0U2VydmVyVmVyc2lvbigpO1xuXG4gICAgICBjb25zdCBlbGVtZW50UG9saWNpZXMgPSB0aGlzLmJ1aWxkRWxlbWVudFBvbGljaWVzKGFjdGl2ZUVsZW1lbnRzKTtcblxuICAgICAgY29uc3QgcG9saWN5ID0ge1xuICAgICAgICBzY2hlbWFfdmVyc2lvbjogJzEuMCcsXG4gICAgICAgIHNlcnZlcjoge1xuICAgICAgICAgIG5hbWU6ICdEb2xsaG91c2VNQ1AtVjItUmVmYWN0b3IgQ1JVREUnLFxuICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgIH0sXG4gICAgICAgIGV4cG9ydGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHN0YXRpY19ydWxlczoge1xuICAgICAgICAgIHNhZmVfdG9vbHM6IHN0YXRpY1J1bGVzLnNhZmVfdG9vbHMsXG4gICAgICAgICAgc2FmZV9iYXNoX3BhdHRlcm5zOiBzdGF0aWNSdWxlcy5zYWZlX2Jhc2hfcGF0dGVybnMsXG4gICAgICAgICAgZGFuZ2Vyb3VzX2Jhc2hfcGF0dGVybnM6IHN0YXRpY1J1bGVzLmRhbmdlcm91c19iYXNoX3BhdHRlcm5zLFxuICAgICAgICAgIGJsb2NrZWRfYmFzaF9wYXR0ZXJuczogc3RhdGljUnVsZXMuYmxvY2tlZF9iYXNoX3BhdHRlcm5zLFxuICAgICAgICAgIGlycmV2ZXJzaWJsZV9wYXR0ZXJuczogc3RhdGljUnVsZXMuaXJyZXZlcnNpYmxlX3BhdHRlcm5zLFxuICAgICAgICAgIHNlbnNpdGl2ZV9wYXRoX3ByZWZpeGVzOiBzdGF0aWNSdWxlcy5zZW5zaXRpdmVfcGF0aF9wcmVmaXhlcyxcbiAgICAgICAgICBnYXRla2VlcGVyX2Vzc2VudGlhbF9vcGVyYXRpb25zOiBzdGF0aWNSdWxlcy5nYXRla2VlcGVyX2Vzc2VudGlhbF9vcGVyYXRpb25zLFxuICAgICAgICAgIHNhZmVfbWNwX29wZXJhdGlvbnM6IHN0YXRpY1J1bGVzLnNhZmVfbWNwX29wZXJhdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICAgIGVsZW1lbnRfcG9saWNpZXM6IGVsZW1lbnRQb2xpY2llcyxcbiAgICAgICAgcmlza19zY29yZXM6IHN0YXRpY1J1bGVzLnJpc2tfc2NvcmVzLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgZmlsZVBhdGggPSBqb2luKFBPTElDWV9ESVIsIFBPTElDWV9GSUxFTkFNRSk7XG4gICAgICBhd2FpdCB3cml0ZUZpbGUoZmlsZVBhdGgsIEpTT04uc3RyaW5naWZ5KHBvbGljeSwgbnVsbCwgMiksICd1dGYtOCcpO1xuICAgICAgbG9nZ2VyLmluZm8oJ1tQb2xpY3lFeHBvcnRTZXJ2aWNlXSBQb2xpY2llcyBleHBvcnRlZCcsIHsgZmlsZVBhdGgsIGVsZW1lbnRDb3VudDogZWxlbWVudFBvbGljaWVzLmFjdGl2ZV9lbGVtZW50X2NvdW50IH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gTm9uLWZhdGFsOiBsb2cgYW5kIGNvbnRpbnVlXG4gICAgICBsb2dnZXIud2FybignW1BvbGljeUV4cG9ydFNlcnZpY2VdIEZhaWxlZCB0byBleHBvcnQgcG9saWNpZXMnLCB7IGVycm9yOiAoZXJyIGFzIEVycm9yKS5tZXNzYWdlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRFbGVtZW50UG9saWNpZXMoYWN0aXZlRWxlbWVudHM6IEFycmF5PHsgdHlwZTogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9Pikge1xuICAgIGNvbnN0IGVsZW1lbnRzOiBFbGVtZW50UG9saWN5RW50cnlbXSA9IFtdO1xuICAgIGNvbnN0IGNvbWJpbmVkQWxsb3c6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgY29tYmluZWRDb25maXJtOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGNvbWJpbmVkRGVueTogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgZW5zZW1ibGVOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYWN0aXZlRWxlbWVudHMpIHtcbiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdlbnNlbWJsZScpIHtcbiAgICAgICAgZW5zZW1ibGVOYW1lID0gZWxlbWVudC5uYW1lO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBnYXRla2VlcGVyID0gZWxlbWVudC5tZXRhZGF0YT8uZ2F0ZWtlZXBlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGV4dGVybmFsID0gZ2F0ZWtlZXBlcj8uZXh0ZXJuYWxSZXN0cmljdGlvbnMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IGFsbG93UGF0dGVybnMgPSBBcnJheS5pc0FycmF5KGV4dGVybmFsPy5hbGxvd1BhdHRlcm5zKVxuICAgICAgICA/IChleHRlcm5hbC5hbGxvd1BhdHRlcm5zIGFzIHVua25vd25bXSkuZmlsdGVyKChwKTogcCBpcyBzdHJpbmcgPT4gdHlwZW9mIHAgPT09ICdzdHJpbmcnKVxuICAgICAgICA6IFtdO1xuICAgICAgY29uc3QgY29uZmlybVBhdHRlcm5zID0gQXJyYXkuaXNBcnJheShleHRlcm5hbD8uY29uZmlybVBhdHRlcm5zKVxuICAgICAgICA/IChleHRlcm5hbC5jb25maXJtUGF0dGVybnMgYXMgdW5rbm93bltdKS5maWx0ZXIoKHApOiBwIGlzIHN0cmluZyA9PiB0eXBlb2YgcCA9PT0gJ3N0cmluZycpXG4gICAgICAgIDogW107XG4gICAgICBjb25zdCBkZW55UGF0dGVybnMgPSBBcnJheS5pc0FycmF5KGV4dGVybmFsPy5kZW55UGF0dGVybnMpXG4gICAgICAgID8gKGV4dGVybmFsLmRlbnlQYXR0ZXJucyBhcyB1bmtub3duW10pLmZpbHRlcigocCk6IHAgaXMgc3RyaW5nID0+IHR5cGVvZiBwID09PSAnc3RyaW5nJylcbiAgICAgICAgOiBbXTtcblxuICAgICAgZWxlbWVudHMucHVzaCh7XG4gICAgICAgIHR5cGU6IGVsZW1lbnQudHlwZSxcbiAgICAgICAgbmFtZTogZWxlbWVudC5uYW1lLFxuICAgICAgICBhbGxvd19wYXR0ZXJuczogYWxsb3dQYXR0ZXJucyxcbiAgICAgICAgY29uZmlybV9wYXR0ZXJuczogY29uZmlybVBhdHRlcm5zLFxuICAgICAgICBkZW55X3BhdHRlcm5zOiBkZW55UGF0dGVybnMsXG4gICAgICB9KTtcblxuICAgICAgY29tYmluZWRBbGxvdy5wdXNoKC4uLmFsbG93UGF0dGVybnMpO1xuICAgICAgY29tYmluZWRDb25maXJtLnB1c2goLi4uY29uZmlybVBhdHRlcm5zKTtcbiAgICAgIGNvbWJpbmVkRGVueS5wdXNoKC4uLmRlbnlQYXR0ZXJucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdGl2ZV9lbGVtZW50X2NvdW50OiBlbGVtZW50cy5sZW5ndGgsXG4gICAgICAuLi4oZW5zZW1ibGVOYW1lID8geyBlbnNlbWJsZV9uYW1lOiBlbnNlbWJsZU5hbWUgfSA6IHt9KSxcbiAgICAgIGVsZW1lbnRzLFxuICAgICAgY29tYmluZWRfYWxsb3dfcGF0dGVybnM6IFsuLi5uZXcgU2V0KGNvbWJpbmVkQWxsb3cpXSxcbiAgICAgIGNvbWJpbmVkX2NvbmZpcm1fcGF0dGVybnM6IFsuLi5uZXcgU2V0KGNvbWJpbmVkQ29uZmlybSldLFxuICAgICAgY29tYmluZWRfZGVueV9wYXR0ZXJuczogWy4uLm5ldyBTZXQoY29tYmluZWREZW55KV0sXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"ElementQueryService.d.ts","sourceRoot":"","sources":["../../../src/services/query/ElementQueryService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAE5D,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,WAAW,EAEZ,MAAM,YAAY,CAAC;AAKpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBAAa,mBAAmB,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ,CAAE,YAAW,oBAAoB,CAAC,CAAC,CAAC;IAe9F,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAhB9B;;;;;;;;;;;;OAYG;gBAEgB,iBAAiB,EAAE,kBAAkB,CAAC,CAAC,CAAC,EACxC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC,EAChC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IAG/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoDG;IACI,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC;IAgEhE;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACI,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,CAAC,EAAE;IAc1D;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACI,iBAAiB,IAAI,QAAQ,CAAC,YAAY,CAAC;IAiBlD;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACI,eAAe,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO;IAsCvD;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,2BAA2B;CAapC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,QAAQ,KAAK,oBAAoB,CAAC,CAAC,CAAC,CAMvF;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,mBAAmB,gCAAwC,CAAC"}
1
+ {"version":3,"file":"ElementQueryService.d.ts","sourceRoot":"","sources":["../../../src/services/query/ElementQueryService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAE5D,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,WAAW,EAEZ,MAAM,YAAY,CAAC;AAKpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBAAa,mBAAmB,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ,CAAE,YAAW,oBAAoB,CAAC,CAAC,CAAC;IAe9F,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAhB9B;;;;;;;;;;;;OAYG;gBAEgB,iBAAiB,EAAE,kBAAkB,CAAC,CAAC,CAAC,EACxC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC,EAChC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IAG/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoDG;IACI,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC;IA+BhE;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACI,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,CAAC,EAAE;IAK1D;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACI,iBAAiB,IAAI,QAAQ,CAAC,YAAY,CAAC;IAiBlD;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACI,eAAe,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO;IA+BvD;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,2BAA2B;CAapC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,QAAQ,KAAK,oBAAoB,CAAC,CAAC,CAAC,CAMvF;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,mBAAmB,gCAAwC,CAAC"}