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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (238) hide show
  1. package/CHANGELOG.md +52 -61
  2. package/README.github.md +2 -2
  3. package/README.md +2 -2
  4. package/README.md.backup +284 -224
  5. package/README.npm.md +2 -2
  6. package/dist/cache/LRUCache.d.ts +3 -0
  7. package/dist/cache/LRUCache.d.ts.map +1 -1
  8. package/dist/cache/LRUCache.js +36 -26
  9. package/dist/config/env.d.ts +14 -4
  10. package/dist/config/env.d.ts.map +1 -1
  11. package/dist/config/env.js +20 -6
  12. package/dist/di/Container.d.ts +21 -0
  13. package/dist/di/Container.d.ts.map +1 -1
  14. package/dist/di/Container.js +250 -53
  15. package/dist/elements/BaseElement.d.ts.map +1 -1
  16. package/dist/elements/BaseElement.js +5 -10
  17. package/dist/elements/base/BaseElementManager.d.ts +22 -0
  18. package/dist/elements/base/BaseElementManager.d.ts.map +1 -1
  19. package/dist/elements/base/BaseElementManager.js +47 -7
  20. package/dist/elements/memories/Memory.d.ts +1 -0
  21. package/dist/elements/memories/Memory.d.ts.map +1 -1
  22. package/dist/elements/memories/Memory.js +12 -8
  23. package/dist/elements/memories/MemoryManager.d.ts.map +1 -1
  24. package/dist/elements/memories/MemoryManager.js +23 -42
  25. package/dist/elements/memories/MemorySearchIndex.js +2 -2
  26. package/dist/generated/version.d.ts +2 -2
  27. package/dist/generated/version.d.ts.map +1 -1
  28. package/dist/generated/version.js +3 -3
  29. package/dist/handlers/EnhancedIndexHandler.js +6 -6
  30. package/dist/handlers/element-crud/listElements.d.ts +2 -0
  31. package/dist/handlers/element-crud/listElements.d.ts.map +1 -1
  32. package/dist/handlers/element-crud/listElements.js +3 -1
  33. package/dist/handlers/mcp-aql/Gatekeeper.d.ts.map +1 -1
  34. package/dist/handlers/mcp-aql/Gatekeeper.js +23 -17
  35. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +14 -0
  36. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
  37. package/dist/handlers/mcp-aql/MCPAQLHandler.js +110 -14
  38. package/dist/handlers/mcp-aql/OperationRouter.d.ts.map +1 -1
  39. package/dist/handlers/mcp-aql/OperationRouter.js +13 -1
  40. package/dist/handlers/mcp-aql/OperationSchema.d.ts +7 -0
  41. package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
  42. package/dist/handlers/mcp-aql/OperationSchema.js +52 -1
  43. package/dist/handlers/mcp-aql/evaluatePermission.d.ts +53 -0
  44. package/dist/handlers/mcp-aql/evaluatePermission.d.ts.map +1 -0
  45. package/dist/handlers/mcp-aql/evaluatePermission.js +132 -0
  46. package/dist/handlers/mcp-aql/policies/ToolClassification.d.ts.map +1 -1
  47. package/dist/handlers/mcp-aql/policies/ToolClassification.js +2 -1
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +3 -3
  50. package/dist/logging/LogHooks.js +11 -11
  51. package/dist/logging/LogManager.d.ts +0 -2
  52. package/dist/logging/LogManager.d.ts.map +1 -1
  53. package/dist/logging/LogManager.js +1 -3
  54. package/dist/logging/sinks/MemoryLogSink.d.ts +2 -0
  55. package/dist/logging/sinks/MemoryLogSink.d.ts.map +1 -1
  56. package/dist/logging/sinks/MemoryLogSink.js +12 -3
  57. package/dist/logging/types.d.ts +0 -2
  58. package/dist/logging/types.d.ts.map +1 -1
  59. package/dist/logging/types.js +1 -1
  60. package/dist/metrics/GatekeeperMetricsTracker.d.ts +32 -0
  61. package/dist/metrics/GatekeeperMetricsTracker.d.ts.map +1 -0
  62. package/dist/metrics/GatekeeperMetricsTracker.js +42 -0
  63. package/dist/metrics/MetricsManager.d.ts +47 -0
  64. package/dist/metrics/MetricsManager.d.ts.map +1 -0
  65. package/dist/metrics/MetricsManager.js +232 -0
  66. package/dist/metrics/OperationMetricsTracker.d.ts +32 -0
  67. package/dist/metrics/OperationMetricsTracker.d.ts.map +1 -0
  68. package/dist/metrics/OperationMetricsTracker.js +53 -0
  69. package/dist/metrics/collectors/DefaultElementProviderCollector.d.ts +27 -0
  70. package/dist/metrics/collectors/DefaultElementProviderCollector.d.ts.map +1 -0
  71. package/dist/metrics/collectors/DefaultElementProviderCollector.js +69 -0
  72. package/dist/metrics/collectors/FileLockManagerCollector.d.ts +16 -0
  73. package/dist/metrics/collectors/FileLockManagerCollector.d.ts.map +1 -0
  74. package/dist/metrics/collectors/FileLockManagerCollector.js +51 -0
  75. package/dist/metrics/collectors/GatekeeperMetricsCollector.d.ts +16 -0
  76. package/dist/metrics/collectors/GatekeeperMetricsCollector.d.ts.map +1 -0
  77. package/dist/metrics/collectors/GatekeeperMetricsCollector.js +76 -0
  78. package/dist/metrics/collectors/LRUCacheCollector.d.ts +18 -0
  79. package/dist/metrics/collectors/LRUCacheCollector.d.ts.map +1 -0
  80. package/dist/metrics/collectors/LRUCacheCollector.js +95 -0
  81. package/dist/metrics/collectors/OperationMetricsCollector.d.ts +16 -0
  82. package/dist/metrics/collectors/OperationMetricsCollector.d.ts.map +1 -0
  83. package/dist/metrics/collectors/OperationMetricsCollector.js +80 -0
  84. package/dist/metrics/collectors/OperationalTelemetryCollector.d.ts +17 -0
  85. package/dist/metrics/collectors/OperationalTelemetryCollector.d.ts.map +1 -0
  86. package/dist/metrics/collectors/OperationalTelemetryCollector.js +26 -0
  87. package/dist/metrics/collectors/PerformanceMonitorCollector.d.ts +14 -0
  88. package/dist/metrics/collectors/PerformanceMonitorCollector.d.ts.map +1 -0
  89. package/dist/metrics/collectors/PerformanceMonitorCollector.js +141 -0
  90. package/dist/metrics/collectors/SecurityMonitorCollector.d.ts +21 -0
  91. package/dist/metrics/collectors/SecurityMonitorCollector.d.ts.map +1 -0
  92. package/dist/metrics/collectors/SecurityMonitorCollector.js +56 -0
  93. package/dist/metrics/collectors/SecurityTelemetryCollector.d.ts +15 -0
  94. package/dist/metrics/collectors/SecurityTelemetryCollector.d.ts.map +1 -0
  95. package/dist/metrics/collectors/SecurityTelemetryCollector.js +112 -0
  96. package/dist/metrics/collectors/TriggerMetricsTrackerCollector.d.ts +16 -0
  97. package/dist/metrics/collectors/TriggerMetricsTrackerCollector.d.ts.map +1 -0
  98. package/dist/metrics/collectors/TriggerMetricsTrackerCollector.js +26 -0
  99. package/dist/metrics/collectors/index.d.ts +11 -0
  100. package/dist/metrics/collectors/index.d.ts.map +1 -0
  101. package/dist/metrics/collectors/index.js +11 -0
  102. package/dist/metrics/sinks/MemoryMetricsSink.d.ts +22 -0
  103. package/dist/metrics/sinks/MemoryMetricsSink.d.ts.map +1 -0
  104. package/dist/metrics/sinks/MemoryMetricsSink.js +121 -0
  105. package/dist/metrics/types.d.ts +98 -0
  106. package/dist/metrics/types.d.ts.map +1 -0
  107. package/dist/metrics/types.js +24 -0
  108. package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -1
  109. package/dist/portfolio/DefaultElementProvider.js +1 -7
  110. package/dist/portfolio/EnhancedIndexManager.d.ts.map +1 -1
  111. package/dist/portfolio/EnhancedIndexManager.js +18 -18
  112. package/dist/portfolio/NLPScoringManager.d.ts.map +1 -1
  113. package/dist/portfolio/NLPScoringManager.js +5 -9
  114. package/dist/portfolio/PortfolioIndexManager.js +2 -2
  115. package/dist/portfolio/RelationshipManager.js +2 -2
  116. package/dist/portfolio/VerbTriggerManager.d.ts.map +1 -1
  117. package/dist/portfolio/VerbTriggerManager.js +5 -19
  118. package/dist/portfolio/config/IndexConfig.d.ts.map +1 -1
  119. package/dist/portfolio/config/IndexConfig.js +1 -12
  120. package/dist/portfolio/enhanced-index/ElementDefinitionBuilder.d.ts.map +1 -1
  121. package/dist/portfolio/enhanced-index/ElementDefinitionBuilder.js +3 -15
  122. package/dist/portfolio/enhanced-index/SemanticRelationshipService.d.ts.map +1 -1
  123. package/dist/portfolio/enhanced-index/SemanticRelationshipService.js +2 -16
  124. package/dist/portfolio/types/RelationshipTypes.d.ts.map +1 -1
  125. package/dist/portfolio/types/RelationshipTypes.js +3 -17
  126. package/dist/security/audit/config/suppressions.d.ts.map +1 -1
  127. package/dist/security/audit/config/suppressions.js +36 -8
  128. package/dist/security/constants.d.ts.map +1 -1
  129. package/dist/security/constants.js +10 -6
  130. package/dist/security/fileLockManager.d.ts.map +1 -1
  131. package/dist/security/fileLockManager.js +8 -6
  132. package/dist/security/secureYamlParser.d.ts.map +1 -1
  133. package/dist/security/secureYamlParser.js +1 -13
  134. package/dist/security/securityMonitor.d.ts +2 -1
  135. package/dist/security/securityMonitor.d.ts.map +1 -1
  136. package/dist/security/securityMonitor.js +14 -3
  137. package/dist/security/telemetry/SecurityTelemetry.d.ts +16 -0
  138. package/dist/security/telemetry/SecurityTelemetry.d.ts.map +1 -1
  139. package/dist/security/telemetry/SecurityTelemetry.js +30 -2
  140. package/dist/security/tokenManager.d.ts +3 -0
  141. package/dist/security/tokenManager.d.ts.map +1 -1
  142. package/dist/security/tokenManager.js +13 -5
  143. package/dist/security/validation/BackgroundValidator.d.ts.map +1 -1
  144. package/dist/security/validation/BackgroundValidator.js +7 -7
  145. package/dist/server/startup.d.ts.map +1 -1
  146. package/dist/server/startup.js +8 -24
  147. package/dist/server/tools/MCPAQLTools.js +4 -1
  148. package/dist/services/ActivationStore.d.ts.map +1 -1
  149. package/dist/services/ActivationStore.js +9 -3
  150. package/dist/services/FileWatchService.d.ts +1 -0
  151. package/dist/services/FileWatchService.d.ts.map +1 -1
  152. package/dist/services/FileWatchService.js +83 -48
  153. package/dist/services/MetadataService.d.ts.map +1 -1
  154. package/dist/services/MetadataService.js +7 -2
  155. package/dist/services/query/ElementQueryService.d.ts.map +1 -1
  156. package/dist/services/query/ElementQueryService.js +1 -41
  157. package/dist/services/query/PaginationService.d.ts.map +1 -1
  158. package/dist/services/query/PaginationService.js +1 -14
  159. package/dist/services/query/SortService.d.ts.map +1 -1
  160. package/dist/services/query/SortService.js +1 -6
  161. package/dist/services/validation/ValidationService.d.ts.map +1 -1
  162. package/dist/services/validation/ValidationService.js +3 -8
  163. package/dist/storage/ElementStorageLayer.d.ts.map +1 -1
  164. package/dist/storage/ElementStorageLayer.js +5 -2
  165. package/dist/storage/MemoryStorageLayer.d.ts.map +1 -1
  166. package/dist/storage/MemoryStorageLayer.js +5 -2
  167. package/dist/telemetry/OperationalTelemetry.js +2 -2
  168. package/dist/utils/EventDeduplicator.d.ts +44 -0
  169. package/dist/utils/EventDeduplicator.d.ts.map +1 -0
  170. package/dist/utils/EventDeduplicator.js +93 -0
  171. package/dist/utils/FileLock.d.ts.map +1 -1
  172. package/dist/utils/FileLock.js +1 -9
  173. package/dist/utils/PerformanceMonitor.d.ts.map +1 -1
  174. package/dist/utils/PerformanceMonitor.js +5 -5
  175. package/dist/utils/SlidingWindowRateLimiter.d.ts +13 -0
  176. package/dist/utils/SlidingWindowRateLimiter.d.ts.map +1 -0
  177. package/dist/utils/SlidingWindowRateLimiter.js +23 -0
  178. package/dist/web/console/IngestRoutes.d.ts +84 -0
  179. package/dist/web/console/IngestRoutes.d.ts.map +1 -0
  180. package/dist/web/console/IngestRoutes.js +252 -0
  181. package/dist/web/console/LeaderElection.d.ts +89 -0
  182. package/dist/web/console/LeaderElection.d.ts.map +1 -0
  183. package/dist/web/console/LeaderElection.js +205 -0
  184. package/dist/web/console/LeaderForwardingSink.d.ts +61 -0
  185. package/dist/web/console/LeaderForwardingSink.d.ts.map +1 -0
  186. package/dist/web/console/LeaderForwardingSink.js +197 -0
  187. package/dist/web/console/SessionNames.d.ts +46 -0
  188. package/dist/web/console/SessionNames.d.ts.map +1 -0
  189. package/dist/web/console/SessionNames.js +257 -0
  190. package/dist/web/console/UnifiedConsole.d.ts +64 -0
  191. package/dist/web/console/UnifiedConsole.d.ts.map +1 -0
  192. package/dist/web/console/UnifiedConsole.js +119 -0
  193. package/dist/web/contentPipeline.d.ts +58 -0
  194. package/dist/web/contentPipeline.d.ts.map +1 -0
  195. package/dist/web/contentPipeline.js +112 -0
  196. package/dist/web/portDiscovery.d.ts +58 -0
  197. package/dist/web/portDiscovery.d.ts.map +1 -0
  198. package/dist/web/portDiscovery.js +143 -0
  199. package/dist/web/public/app.js +148 -60
  200. package/dist/web/public/logs.js +638 -0
  201. package/dist/web/public/metrics.js +682 -0
  202. package/dist/web/public/permissions.js +394 -0
  203. package/dist/web/public/sessions.js +369 -0
  204. package/dist/web/routes/healthRoutes.d.ts +16 -0
  205. package/dist/web/routes/healthRoutes.d.ts.map +1 -0
  206. package/dist/web/routes/healthRoutes.js +29 -0
  207. package/dist/web/routes/logRoutes.d.ts +18 -0
  208. package/dist/web/routes/logRoutes.d.ts.map +1 -0
  209. package/dist/web/routes/logRoutes.js +126 -0
  210. package/dist/web/routes/metricsRoutes.d.ts +17 -0
  211. package/dist/web/routes/metricsRoutes.d.ts.map +1 -0
  212. package/dist/web/routes/metricsRoutes.js +90 -0
  213. package/dist/web/routes/permissionRoutes.d.ts +16 -0
  214. package/dist/web/routes/permissionRoutes.d.ts.map +1 -0
  215. package/dist/web/routes/permissionRoutes.js +133 -0
  216. package/dist/web/routes.d.ts.map +1 -1
  217. package/dist/web/routes.js +309 -339
  218. package/dist/web/server.d.ts +21 -1
  219. package/dist/web/server.d.ts.map +1 -1
  220. package/dist/web/server.js +42 -4
  221. package/dist/web/sinks/WebSSELogSink.d.ts +15 -0
  222. package/dist/web/sinks/WebSSELogSink.d.ts.map +1 -0
  223. package/dist/web/sinks/WebSSELogSink.js +22 -0
  224. package/dist/web/sinks/WebSSEMetricsSink.d.ts +16 -0
  225. package/dist/web/sinks/WebSSEMetricsSink.d.ts.map +1 -0
  226. package/dist/web/sinks/WebSSEMetricsSink.js +23 -0
  227. package/package.json +2 -2
  228. package/server.json +2 -2
  229. package/dist/constants/version.d.ts +0 -3
  230. package/dist/constants/version.d.ts.map +0 -1
  231. package/dist/constants/version.js +0 -4
  232. package/dist/logging/sinks/SSELogSink.d.ts +0 -35
  233. package/dist/logging/sinks/SSELogSink.d.ts.map +0 -1
  234. package/dist/logging/sinks/SSELogSink.js +0 -181
  235. package/dist/logging/viewer/viewerHtml.d.ts +0 -8
  236. package/dist/logging/viewer/viewerHtml.d.ts.map +0 -1
  237. package/dist/logging/viewer/viewerHtml.js +0 -204
  238. package/dist/web/public/public/app.js +0 -1878
@@ -142,41 +142,19 @@ export class ElementQueryService {
142
142
  * ```
143
143
  */
144
144
  query(items, options) {
145
- logger.debug('ElementQueryService.query called', {
146
- totalItems: items.length,
147
- hasFilters: !!options?.filters,
148
- hasSort: !!options?.sort,
149
- hasPagination: !!options?.pagination,
150
- });
151
145
  // Step 1: Validate all options
152
146
  this.validateOptions(options);
153
147
  // Step 2: Apply filters
154
148
  const filteredItems = this.filterService.filter(items, options?.filters);
155
149
  const appliedFilters = this.filterService.summarizeFilters(options?.filters);
156
- logger.debug('ElementQueryService.query: Filtering complete', {
157
- inputItems: items.length,
158
- filteredItems: filteredItems.length,
159
- filtersApplied: appliedFilters.count,
160
- });
161
150
  // Step 3: Sort filtered items
162
151
  const sortedItems = this.sortService.sort(filteredItems, options?.sort);
163
152
  const appliedSorting = {
164
153
  sortBy: options?.sort?.sortBy ?? this.sortService.getDefaultSorting().sortBy,
165
154
  sortOrder: options?.sort?.sortOrder ?? this.sortService.getDefaultSorting().sortOrder,
166
155
  };
167
- logger.debug('ElementQueryService.query: Sorting complete', {
168
- sortBy: appliedSorting.sortBy,
169
- sortOrder: appliedSorting.sortOrder,
170
- itemCount: sortedItems.length,
171
- });
172
156
  // Step 4: Paginate sorted items
173
157
  const paginatedResult = this.paginationService.paginate(sortedItems, options?.pagination);
174
- logger.debug('ElementQueryService.query: Pagination complete', {
175
- page: paginatedResult.pagination.page,
176
- pageSize: paginatedResult.pagination.pageSize,
177
- totalPages: paginatedResult.pagination.totalPages,
178
- returnedItems: paginatedResult.items.length,
179
- });
180
158
  // Step 5: Build complete query result
181
159
  const result = {
182
160
  items: paginatedResult.items,
@@ -186,12 +164,6 @@ export class ElementQueryService {
186
164
  applied: appliedFilters,
187
165
  },
188
166
  };
189
- logger.debug('ElementQueryService.query completed', {
190
- resultItems: result.items.length,
191
- totalItems: result.pagination.totalItems,
192
- filtersApplied: result.filters.applied.count,
193
- sortBy: result.sorting.sortBy,
194
- });
195
167
  return result;
196
168
  }
197
169
  /**
@@ -221,13 +193,7 @@ export class ElementQueryService {
221
193
  * ```
222
194
  */
223
195
  queryItems(items, options) {
224
- logger.debug('ElementQueryService.queryItems called', {
225
- totalItems: items.length,
226
- });
227
196
  const result = this.query(items, options);
228
- logger.debug('ElementQueryService.queryItems completed', {
229
- returnedItems: result.items.length,
230
- });
231
197
  return result.items;
232
198
  }
233
199
  /**
@@ -304,11 +270,6 @@ export class ElementQueryService {
304
270
  if (!options) {
305
271
  return true; // No options is valid (use defaults)
306
272
  }
307
- logger.debug('ElementQueryService.validateOptions called', {
308
- hasFilters: !!options.filters,
309
- hasSort: !!options.sort,
310
- hasPagination: !!options.pagination,
311
- });
312
273
  try {
313
274
  // Validate filter criteria
314
275
  if (options.filters) {
@@ -323,7 +284,6 @@ export class ElementQueryService {
323
284
  if (options.pagination) {
324
285
  this.validatePaginationStructure(options.pagination);
325
286
  }
326
- logger.debug('ElementQueryService.validateOptions: All options valid');
327
287
  return true;
328
288
  }
329
289
  catch (error) {
@@ -406,4 +366,4 @@ export function createElementQueryService() {
406
366
  * ```
407
367
  */
408
368
  export const elementQueryService = createElementQueryService();
409
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWxlbWVudFF1ZXJ5U2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9xdWVyeS9FbGVtZW50UXVlcnlTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ0c7QUFHSCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFVL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFDSCxNQUFNLE9BQU8sbUJBQW1CO0lBZVg7SUFDQTtJQUNBO0lBaEJuQjs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxZQUNtQixpQkFBd0MsRUFDeEMsYUFBZ0MsRUFDaEMsV0FBNEI7UUFGNUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUF1QjtRQUN4QyxrQkFBYSxHQUFiLGFBQWEsQ0FBbUI7UUFDaEMsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO0lBQzVDLENBQUM7SUFFSjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQW9ERztJQUNJLEtBQUssQ0FBQyxLQUFVLEVBQUUsT0FBc0I7UUFDN0MsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsRUFBRTtZQUMvQyxVQUFVLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDeEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTztZQUM5QixPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJO1lBQ3hCLGFBQWEsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVU7U0FDckMsQ0FB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QUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDdEUsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFDSCxNQUFNLFVBQVUseUJBQXlCO0lBQ3ZDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxpQkFBaUIsRUFBSyxDQUFDO0lBQ3JELE1BQU0sYUFBYSxHQUFHLElBQUksYUFBYSxFQUFLLENBQUM7SUFDN0MsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUssQ0FBQztJQUV6QyxPQUFPLElBQUksbUJBQW1CLENBQUksaUJBQWlCLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ25GLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLHlCQUF5QixFQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEVsZW1lbnRRdWVyeVNlcnZpY2UgLSBPcmNoZXN0cmF0b3IgZm9yIGVsZW1lbnQgcXVlcnlpbmdcbiAqXG4gKiBDb29yZGluYXRlcyBwYWdpbmF0aW9uLCBmaWx0ZXJpbmcsIGFuZCBzb3J0aW5nIHNlcnZpY2VzIHRvIHByb3ZpZGVcbiAqIGEgdW5pZmllZCBxdWVyeSBpbnRlcmZhY2UgZm9yIGVsZW1lbnQgY29sbGVjdGlvbnMuXG4gKlxuICogREVTSUdOIFBSSU5DSVBMRVM6XG4gKiAxLiBDb21wb3NpdGlvbiBvdmVyIGluaGVyaXRhbmNlIC0gb3JjaGVzdHJhdGVzIGluZGVwZW5kZW50IHNlcnZpY2VzXG4gKiAyLiBDb3JyZWN0IG9wZXJhdGlvbiBvcmRlcjogZmlsdGVyIOKGkiBzb3J0IOKGkiBwYWdpbmF0ZVxuICogMy4gQ29tcGxldGUgbWV0YWRhdGEgLSByZXR1cm5zIGFsbCBxdWVyeSBjb250ZXh0IGZvciBkZWJ1Z2dpbmdcbiAqIDQuIFN0YXRlbGVzcyAtIHNhZmUgZm9yIGNvbmN1cnJlbnQgdXNlIGFuZCBESSBpbmplY3Rpb25cbiAqIDUuIFZhbGlkYXRpb24gLSB2YWxpZGF0ZXMgYWxsIGlucHV0cyBiZWZvcmUgcHJvY2Vzc2luZ1xuICpcbiAqIE9QRVJBVElPTiBPUkRFUjpcbiAqIFRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGlzIGNyaXRpY2FsIGZvciBjb3JyZWN0bmVzcyBhbmQgcGVyZm9ybWFuY2U6XG4gKiAxLiBGaWx0ZXI6IFJlZHVjZSBkYXRhc2V0IHRvIG1hdGNoaW5nIGl0ZW1zIG9ubHlcbiAqIDIuIFNvcnQ6IE9yZGVyIHRoZSBmaWx0ZXJlZCByZXN1bHRzXG4gKiAzLiBQYWdpbmF0ZTogRXh0cmFjdCByZXF1ZXN0ZWQgcGFnZSBmcm9tIHNvcnRlZCByZXN1bHRzXG4gKlxuICogVGhpcyBlbnN1cmVzIHRoYXQ6XG4gKiAtIFBhZ2luYXRpb24gb3BlcmF0ZXMgb24gY29tcGxldGUgZmlsdGVyZWQrc29ydGVkIGRhdGFzZXRcbiAqIC0gU29ydCBvcGVyYXRlcyBvbiBmaWx0ZXJlZCBkYXRhc2V0IChtb3JlIGVmZmljaWVudClcbiAqIC0gUmVzdWx0cyBhcmUgZGV0ZXJtaW5pc3RpYyBhbmQgcmVwcm9kdWNpYmxlXG4gKlxuICogQ09OQ1VSUkVOVCBNT0RJRklDQVRJT04gQkVIQVZJT1I6XG4gKiBUaGlzIHNlcnZpY2Ugb3BlcmF0ZXMgb24gZWxlbWVudCBzbmFwc2hvdHMgcGFzc2VkIHZpYSB0aGUgaXRlbXMgcGFyYW1ldGVyLlxuICogSXQgZG9lcyBub3QgcmVhZCBmcm9tIGRpc2sgb3IgdHJhY2sgZmlsZSBzeXN0ZW0gY2hhbmdlcy4gSWYgZWxlbWVudHMgYXJlXG4gKiBtb2RpZmllZCBvbiBkaXNrIGJldHdlZW4gZmV0Y2ggYW5kIHF1ZXJ5LCByZXN1bHRzIG1heSBiZSBpbmNvbnNpc3RlbnQgd2l0aFxuICogdGhlIGN1cnJlbnQgZmlsZSBzeXN0ZW0gc3RhdGUuIFRoaXMgaXMgZXhwZWN0ZWQgYmVoYXZpb3IgLSB0aGUgc2VydmljZSBpc1xuICogc3RhdGVsZXNzIGFuZCBkZXNpZ25lZCBmb3IgcGVyZm9ybWFuY2UuIEZvciByZWFsLXRpbWUgY29uc2lzdGVuY3ksIGNhbGxlcnNcbiAqIHNob3VsZCByZS1mZXRjaCBlbGVtZW50cyBiZWZvcmUgZWFjaCBxdWVyeSBvcGVyYXRpb24uXG4gKlxuICogQG1vZHVsZSBFbGVtZW50UXVlcnlTZXJ2aWNlXG4gKi9cblxuaW1wb3J0IHsgSUVsZW1lbnQgfSBmcm9tICcuLi8uLi90eXBlcy9lbGVtZW50cy9JRWxlbWVudC5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHtcbiAgSUVsZW1lbnRRdWVyeVNlcnZpY2UsXG4gIElQYWdpbmF0aW9uU2VydmljZSxcbiAgSUZpbHRlclNlcnZpY2UsXG4gIElTb3J0U2VydmljZSxcbiAgUXVlcnlPcHRpb25zLFxuICBRdWVyeVJlc3VsdCxcbiAgUGFnaW5hdGlvbk9wdGlvbnMsXG59IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgUGFnaW5hdGlvblNlcnZpY2UgfSBmcm9tICcuL1BhZ2luYXRpb25TZXJ2aWNlLmpzJztcbmltcG9ydCB7IEZpbHRlclNlcnZpY2UgfSBmcm9tICcuL0ZpbHRlclNlcnZpY2UuanMnO1xuaW1wb3J0IHsgU29ydFNlcnZpY2UgfSBmcm9tICcuL1NvcnRTZXJ2aWNlLmpzJztcblxuLyoqXG4gKiBFbGVtZW50UXVlcnlTZXJ2aWNlIGltcGxlbWVudGF0aW9uXG4gKlxuICogT3JjaGVzdHJhdGVzIHRocmVlIGluZGVwZW5kZW50IHNlcnZpY2VzIHRvIHByb3ZpZGUgY29tcGxldGUgcXVlcnkgY2FwYWJpbGl0aWVzOlxuICogLSBGaWx0ZXJTZXJ2aWNlOiBBcHBsaWVzIGZpbHRlciBjcml0ZXJpYSB0byBlbGVtZW50IGFycmF5c1xuICogLSBTb3J0U2VydmljZTogU29ydHMgZWxlbWVudHMgYnkgc3BlY2lmaWVkIGZpZWxkc1xuICogLSBQYWdpbmF0aW9uU2VydmljZTogUGFnaW5hdGVzIHNvcnRlZCByZXN1bHRzXG4gKlxuICogQWxsIHNlcnZpY2VzIGFyZSBpbmplY3RlZCB2aWEgY29uc3RydWN0b3IgZm9yIHRlc3RhYmlsaXR5IGFuZCBmbGV4aWJpbGl0eS5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIEVsZW1lbnQgdHlwZSBleHRlbmRpbmcgSUVsZW1lbnRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gVXNpbmcgZmFjdG9yeSAocmVjb21tZW5kZWQpXG4gKiBjb25zdCBxdWVyeVNlcnZpY2UgPSBjcmVhdGVFbGVtZW50UXVlcnlTZXJ2aWNlPE15RWxlbWVudD4oKTtcbiAqXG4gKiAvLyBRdWVyeSB3aXRoIGFsbCBvcHRpb25zXG4gKiBjb25zdCByZXN1bHQgPSBxdWVyeVNlcnZpY2UucXVlcnkoZWxlbWVudHMsIHtcbiAqICAgZmlsdGVyczogeyB0YWdzOiBbJ3R5cGVzY3JpcHQnXSwgc3RhdHVzOiAnYWN0aXZlJyB9LFxuICogICBzb3J0OiB7IHNvcnRCeTogJ21vZGlmaWVkJywgc29ydE9yZGVyOiAnZGVzYycgfSxcbiAqICAgcGFnaW5hdGlvbjogeyBwYWdlOiAyLCBwYWdlU2l6ZTogMjUgfVxuICogfSk7XG4gKlxuICogY29uc29sZS5sb2cocmVzdWx0Lml0ZW1zKTsgICAgICAgICAgIC8vIFBhZ2luYXRlZCBpdGVtc1xuICogY29uc29sZS5sb2cocmVzdWx0LnBhZ2luYXRpb24pOyAgICAgIC8vIFBhZ2luYXRpb24gbWV0YWRhdGFcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5zb3J0aW5nKTsgICAgICAgICAvLyBBcHBsaWVkIHNvcnRpbmdcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5maWx0ZXJzLmFwcGxpZWQpOyAvLyBBcHBsaWVkIGZpbHRlcnNcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgRWxlbWVudFF1ZXJ5U2VydmljZTxUIGV4dGVuZHMgSUVsZW1lbnQgPSBJRWxlbWVudD4gaW1wbGVtZW50cyBJRWxlbWVudFF1ZXJ5U2VydmljZTxUPiB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgRWxlbWVudFF1ZXJ5U2VydmljZSB3aXRoIGluamVjdGVkIGRlcGVuZGVuY2llc1xuICAgKlxuICAgKiBERVBFTkRFTkNZIElOSkVDVElPTjpcbiAgICogQWxsIHNlcnZpY2VzIGFyZSBwcm92aWRlZCB2aWEgY29uc3RydWN0b3IgdG8gZW5hYmxlOlxuICAgKiAtIEVhc3kgdGVzdGluZyB3aXRoIG1vY2tzXG4gICAqIC0gU2VydmljZSBjdXN0b21pemF0aW9uXG4gICAqIC0gQ29udGFpbmVyLWJhc2VkIERJIGludGVncmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBwYWdpbmF0aW9uU2VydmljZSAtIFNlcnZpY2UgZm9yIHBhZ2luYXRpb24gb3BlcmF0aW9uc1xuICAgKiBAcGFyYW0gZmlsdGVyU2VydmljZSAtIFNlcnZpY2UgZm9yIGZpbHRlcmluZyBvcGVyYXRpb25zXG4gICAqIEBwYXJhbSBzb3J0U2VydmljZSAtIFNlcnZpY2UgZm9yIHNvcnRpbmcgb3BlcmF0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBwYWdpbmF0aW9uU2VydmljZTogSVBhZ2luYXRpb25TZXJ2aWNlPFQ+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmlsdGVyU2VydmljZTogSUZpbHRlclNlcnZpY2U8VD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBzb3J0U2VydmljZTogSVNvcnRTZXJ2aWNlPFQ+XG4gICkge31cblxuICAvKipcbiAgICogRXhlY3V0ZSBhIGNvbXBsZXRlIHF1ZXJ5IG9wZXJhdGlvbiB3aXRoIGZ1bGwgbWV0YWRhdGFcbiAgICpcbiAgICogT1BFUkFUSU9OIE9SREVSOlxuICAgKiAxLiBWYWxpZGF0ZSBhbGwgcXVlcnkgb3B0aW9uc1xuICAgKiAyLiBGaWx0ZXIgaXRlbXMgYmFzZWQgb24gY3JpdGVyaWFcbiAgICogMy4gU29ydCBmaWx0ZXJlZCBpdGVtc1xuICAgKiA0LiBQYWdpbmF0ZSBzb3J0ZWQgaXRlbXNcbiAgICogNS4gQnVpbGQgY29tcGxldGUgcmVzdWx0IHdpdGggbWV0YWRhdGFcbiAgICpcbiAgICogVGhlIHJldHVybmVkIFF1ZXJ5UmVzdWx0IGluY2x1ZGVzOlxuICAgKiAtIGl0ZW1zOiBUaGUgcGFnaW5hdGVkIHN1YnNldCBvZiBtYXRjaGluZyBpdGVtc1xuICAgKiAtIHBhZ2luYXRpb246IENvbXBsZXRlIHBhZ2luYXRpb24gbWV0YWRhdGFcbiAgICogLSBzb3J0aW5nOiBBcHBsaWVkIHNvcnRpbmcgY29uZmlndXJhdGlvblxuICAgKiAtIGZpbHRlcnM6IFN1bW1hcnkgb2YgYXBwbGllZCBmaWx0ZXJzXG4gICAqXG4gICAqIFNOQVBTSE9UIFNFTUFOVElDUzpcbiAgICogVGhpcyBtZXRob2Qgb3BlcmF0ZXMgb24gdGhlIGl0ZW1zIGFycmF5IHBhc3NlZCB0byBpdCBhdCB0aGUgdGltZSBvZiB0aGUgY2FsbC5cbiAgICogSXQgZG9lcyBub3QgcmUtcmVhZCBlbGVtZW50cyBmcm9tIGRpc2sgb3IgdHJhY2sgZmlsZSBzeXN0ZW0gY2hhbmdlcy4gSWYgZWxlbWVudHNcbiAgICogYXJlIG1vZGlmaWVkIG9uIGRpc2sgYmV0d2VlbiB3aGVuIHRoZXkgYXJlIGZldGNoZWQgYW5kIHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLFxuICAgKiB0aGUgcmVzdWx0cyB3aWxsIHJlZmxlY3QgdGhlIHN0YXRlIGF0IGZldGNoIHRpbWUsIG5vdCB0aGUgY3VycmVudCBmaWxlIHN5c3RlbSBzdGF0ZS5cbiAgICogVGhpcyBpcyBleHBlY3RlZCBiZWhhdmlvciBmb3IgYSBzdGF0ZWxlc3MgcXVlcnkgc2VydmljZS4gRm9yIHJlYWwtdGltZSBjb25zaXN0ZW5jeSxcbiAgICogY2FsbGVycyBzaG91bGQgcmUtZmV0Y2ggZWxlbWVudHMgaW1tZWRpYXRlbHkgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QuXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtcyAtIEFycmF5IG9mIGVsZW1lbnRzIHRvIHF1ZXJ5IChzbmFwc2hvdCBhdCB0aW1lIG9mIGNhbGwpXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQ29tcGxldGUgcXVlcnkgY29uZmlndXJhdGlvblxuICAgKiBAcmV0dXJucyBRdWVyeSByZXN1bHQgd2l0aCBpdGVtcyBhbmQgY29tcGxldGUgbWV0YWRhdGFcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHF1ZXJ5IG9wdGlvbnMgYXJlIGludmFsaWRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCByZXN1bHQgPSBxdWVyeVNlcnZpY2UucXVlcnkoYWxsUGVyc29uYXMsIHtcbiAgICogICBmaWx0ZXJzOiB7XG4gICAqICAgICBuYW1lQ29udGFpbnM6ICdjb2RlJyxcbiAgICogICAgIHRhZ3M6IFsndHlwZXNjcmlwdCddLFxuICAgKiAgICAgc3RhdHVzOiAnYWN0aXZlJ1xuICAgKiAgIH0sXG4gICAqICAgc29ydDoge1xuICAgKiAgICAgc29ydEJ5OiAnbW9kaWZpZWQnLFxuICAgKiAgICAgc29ydE9yZGVyOiAnZGVzYydcbiAgICogICB9LFxuICAgKiAgIHBhZ2luYXRpb246IHtcbiAgICogICAgIHBhZ2U6IDEsXG4gICAqICAgICBwYWdlU2l6ZTogMTBcbiAgICogICB9XG4gICAqIH0pO1xuICAgKlxuICAgKiAvLyBVc2UgcmVzdWx0XG4gICAqIGNvbnNvbGUubG9nKGBTaG93aW5nICR7cmVzdWx0Lml0ZW1zLmxlbmd0aH0gb2YgJHtyZXN1bHQucGFnaW5hdGlvbi50b3RhbEl0ZW1zfSBpdGVtc2ApO1xuICAgKiBjb25zb2xlLmxvZyhgU29ydGVkIGJ5ICR7cmVzdWx0LnNvcnRpbmcuc29ydEJ5fSAoJHtyZXN1bHQuc29ydGluZy5zb3J0T3JkZXJ9KWApO1xuICAgKiBjb25zb2xlLmxvZyhgQXBwbGllZCAke3Jlc3VsdC5maWx0ZXJzLmFwcGxpZWQuY291bnR9IGZpbHRlcnNgKTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgcXVlcnkoaXRlbXM6IFRbXSwgb3B0aW9ucz86IFF1ZXJ5T3B0aW9ucyk6IFF1ZXJ5UmVzdWx0PFQ+IHtcbiAgICBsb2dnZXIuZGVidWcoJ0VsZW1lbnRRdWVyeVNlcnZpY2UucXVlcnkgY2FsbGVkJywge1xuICAgICAgdG90YWxJdGVtczogaXRlbXMubGVuZ3RoLFxuICAgICAgaGFzRmlsdGVyczogISFvcHRpb25zPy5maWx0ZXJzLFxuICAgICAgaGFzU29ydDogISFvcHRpb25zPy5zb3J0LFxuICAgICAgaGFzUGFnaW5hdGlvbjogISFvcHRpb25zPy5wYWdpbmF0aW9uLFxuICAgIH0pO1xuXG4gICAgLy8gU3RlcCAxOiBWYWxpZGF0ZSBhbGwgb3B0aW9uc1xuICAgIHRoaXMudmFsaWRhdGVPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgLy8gU3RlcCAyOiBBcHBseSBmaWx0ZXJzXG4gICAgY29uc3QgZmlsdGVyZWRJdGVtcyA9IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXIoaXRlbXMsIG9wdGlvbnM/LmZpbHRlcnMpO1xuICAgIGNvbnN0IGFwcGxpZWRGaWx0ZXJzID0gdGhpcy5maWx0ZXJTZXJ2aWNlLnN1bW1hcml6ZUZpbHRlcnMob3B0aW9ucz8uZmlsdGVycyk7XG5cbiAgICBsb2dnZXIuZGVidWcoJ0VsZW1lbnRRdWVyeVNlcnZpY2UucXVlcnk6IEZpbHRlcmluZyBjb21wbGV0ZScsIHtcbiAgICAgIGlucHV0SXRlbXM6IGl0ZW1zLmxlbmd0aCxcbiAgICAgIGZpbHRlcmVkSXRlbXM6IGZpbHRlcmVkSXRlbXMubGVuZ3RoLFxuICAgICAgZmlsdGVyc0FwcGxpZWQ6IGFwcGxpZWRGaWx0ZXJzLmNvdW50LFxuICAgIH0pO1xuXG4gICAgLy8gU3RlcCAzOiBTb3J0IGZpbHRlcmVkIGl0ZW1zXG4gICAgY29uc3Qgc29ydGVkSXRlbXMgPSB0aGlzLnNvcnRTZXJ2aWNlLnNvcnQoZmlsdGVyZWRJdGVtcywgb3B0aW9ucz8uc29ydCk7XG4gICAgY29uc3QgYXBwbGllZFNvcnRpbmcgPSB7XG4gICAgICBzb3J0Qnk6IG9wdGlvbnM/LnNvcnQ/LnNvcnRCeSA/PyB0aGlzLnNvcnRTZXJ2aWNlLmdldERlZmF1bHRTb3J0aW5nKCkuc29ydEJ5LFxuICAgICAgc29ydE9yZGVyOiBvcHRpb25zPy5zb3J0Py5zb3J0T3JkZXIgPz8gdGhpcy5zb3J0U2VydmljZS5nZXREZWZhdWx0U29ydGluZygpLnNvcnRPcmRlcixcbiAgICB9O1xuXG4gICAgbG9nZ2VyLmRlYnVnKCdFbGVtZW50UXVlcnlTZXJ2aWNlLnF1ZXJ5OiBTb3J0aW5nIGNvbXBsZXRlJywge1xuICAgICAgc29ydEJ5OiBhcHBsaWVkU29ydGluZy5zb3J0QnksXG4gICAgICBzb3J0T3JkZXI6IGFwcGxpZWRTb3J0aW5nLnNvcnRPcmRlcixcbiAgICAgIGl0ZW1Db3VudDogc29ydGVkSXRlbXMubGVuZ3RoLFxuICAgIH0pO1xuXG4gICAgLy8gU3RlcCA0OiBQYWdpbmF0ZSBzb3J0ZWQgaXRlbXNcbiAgICBjb25zdCBwYWdpbmF0ZWRSZXN1bHQgPSB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnBhZ2luYXRlKHNvcnRlZEl0ZW1zLCBvcHRpb25zPy5wYWdpbmF0aW9uKTtcblxuICAgIGxvZ2dlci5kZWJ1ZygnRWxlbWVudFF1ZXJ5U2VydmljZS5xdWVyeTogUGFnaW5hdGlvbiBjb21wbGV0ZScsIHtcbiAgICAgIHBhZ2U6IHBhZ2luYXRlZFJlc3VsdC5wYWdpbmF0aW9uLnBhZ2UsXG4gICAgICBwYWdlU2l6ZTogcGFnaW5hdGVkUmVzdWx0LnBhZ2luYXRpb24ucGFnZVNpemUsXG4gICAgICB0b3RhbFBhZ2VzOiBwYWdpbmF0ZWRSZXN1bHQucGFnaW5hdGlvbi50b3RhbFBhZ2VzLFxuICAgICAgcmV0dXJuZWRJdGVtczogcGFnaW5hdGVkUmVzdWx0Lml0ZW1zLmxlbmd0aCxcbiAgICB9KTtcblxuICAgIC8vIFN0ZXAgNTogQnVpbGQgY29tcGxldGUgcXVlcnkgcmVzdWx0XG4gICAgY29uc3QgcmVzdWx0OiBRdWVyeVJlc3VsdDxUPiA9IHtcbiAgICAgIGl0ZW1zOiBwYWdpbmF0ZWRSZXN1bHQuaXRlbXMsXG4gICAgICBwYWdpbmF0aW9uOiBwYWdpbmF0ZWRSZXN1bHQucGFnaW5hdGlvbixcbiAgICAgIHNvcnRpbmc6IGFwcGxpZWRTb3J0aW5nLFxuICAgICAgZmlsdGVyczoge1xuICAgICAgICBhcHBsaWVkOiBhcHBsaWVkRmlsdGVycyxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGxvZ2dlci5kZWJ1ZygnRWxlbWVudFF1ZXJ5U2VydmljZS5xdWVyeSBjb21wbGV0ZWQnLCB7XG4gICAgICByZXN1bHRJdGVtczogcmVzdWx0Lml0ZW1zLmxlbmd0aCxcbiAgICAgIHRvdGFsSXRlbXM6IHJlc3VsdC5wYWdpbmF0aW9uLnRvdGFsSXRlbXMsXG4gICAgICBmaWx0ZXJzQXBwbGllZDogcmVzdWx0LmZpbHRlcnMuYXBwbGllZC5jb3VudCxcbiAgICAgIHNvcnRCeTogcmVzdWx0LnNvcnRpbmcuc29ydEJ5LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIHF1ZXJ5IGFuZCByZXR1cm4gb25seSB0aGUgaXRlbXMgKG5vIG1ldGFkYXRhKVxuICAgKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGNhc2VzIHdoZXJlIHlvdSBvbmx5IG5lZWQgdGhlIGl0ZW1zXG4gICAqIGFuZCBkb24ndCBjYXJlIGFib3V0IHBhZ2luYXRpb24gbWV0YWRhdGEsIGFwcGxpZWQgZmlsdGVycywgZXRjLlxuICAgKlxuICAgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyBxdWVyeSgpIGFuZCBleHRyYWN0aW5nIHJlc3VsdC5pdGVtcyxcbiAgICogYnV0IG1heSBiZSBtb3JlIGNvbnZlbmllbnQgZm9yIHNpbXBsZSB1c2UgY2FzZXMuXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtcyAtIEFycmF5IG9mIGVsZW1lbnRzIHRvIHF1ZXJ5XG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQ29tcGxldGUgcXVlcnkgY29uZmlndXJhdGlvblxuICAgKiBAcmV0dXJucyBBcnJheSBvZiBpdGVtcyBtYXRjaGluZyBxdWVyeSAocGFnaW5hdGVkKVxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgcXVlcnkgb3B0aW9ucyBhcmUgaW52YWxpZFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIEdldCBqdXN0IHRoZSBpdGVtcywgaWdub3JlIG1ldGFkYXRhXG4gICAqIGNvbnN0IGl0ZW1zID0gcXVlcnlTZXJ2aWNlLnF1ZXJ5SXRlbXMoYWxsUGVyc29uYXMsIHtcbiAgICogICBmaWx0ZXJzOiB7IHN0YXR1czogJ2FjdGl2ZScgfSxcbiAgICogICBzb3J0OiB7IHNvcnRCeTogJ25hbWUnIH1cbiAgICogfSk7XG4gICAqXG4gICAqIC8vIFVzZSBpdGVtcyBkaXJlY3RseVxuICAgKiBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4gY29uc29sZS5sb2coaXRlbS5tZXRhZGF0YS5uYW1lKSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIHF1ZXJ5SXRlbXMoaXRlbXM6IFRbXSwgb3B0aW9ucz86IFF1ZXJ5T3B0aW9ucyk6IFRbXSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdFbGVtZW50UXVlcnlTZXJ2aWNlLnF1ZXJ5SXRlbXMgY2FsbGVkJywge1xuICAgICAgdG90YWxJdGVtczogaXRlbXMubGVuZ3RoLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5xdWVyeShpdGVtcywgb3B0aW9ucyk7XG5cbiAgICBsb2dnZXIuZGVidWcoJ0VsZW1lbnRRdWVyeVNlcnZpY2UucXVlcnlJdGVtcyBjb21wbGV0ZWQnLCB7XG4gICAgICByZXR1cm5lZEl0ZW1zOiByZXN1bHQuaXRlbXMubGVuZ3RoLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5pdGVtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlZmF1bHQgcXVlcnkgb3B0aW9uc1xuICAgKlxuICAgKiBSZXR1cm5zIGEgY29tcGxldGUgUXVlcnlPcHRpb25zIG9iamVjdCB3aXRoIGFsbCBkZWZhdWx0cyBmaWxsZWQgaW4uXG4gICAqIFVzZWZ1bCBmb3I6XG4gICAqIC0gVW5kZXJzdGFuZGluZyB3aGF0IGRlZmF1bHRzIGFyZSB1c2VkXG4gICAqIC0gQnVpbGRpbmcgb3B0aW9uIG9iamVjdHMgaW5jcmVtZW50YWxseVxuICAgKiAtIFRlc3RpbmcgYW5kIGRvY3VtZW50YXRpb25cbiAgICpcbiAgICogQHJldHVybnMgRGVmYXVsdCBxdWVyeSBjb25maWd1cmF0aW9uIHdpdGggYWxsIGZpZWxkcyBzcGVjaWZpZWRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBkZWZhdWx0cyA9IHF1ZXJ5U2VydmljZS5nZXREZWZhdWx0T3B0aW9ucygpO1xuICAgKiBjb25zb2xlLmxvZyhkZWZhdWx0cyk7XG4gICAqIC8vIHtcbiAgICogLy8gICBwYWdpbmF0aW9uOiB7IHBhZ2U6IDEsIHBhZ2VTaXplOiAyNSB9LFxuICAgKiAvLyAgIGZpbHRlcnM6IHt9LFxuICAgKiAvLyAgIHNvcnQ6IHsgc29ydEJ5OiAnbmFtZScsIHNvcnRPcmRlcjogJ2FzYycgfVxuICAgKiAvLyB9XG4gICAqXG4gICAqIC8vIFVzZSBhcyBiYXNlIGZvciBjdXN0b20gb3B0aW9uc1xuICAgKiBjb25zdCBjdXN0b21PcHRpb25zID0ge1xuICAgKiAgIC4uLmRlZmF1bHRzLFxuICAgKiAgIGZpbHRlcnM6IHsgc3RhdHVzOiAnYWN0aXZlJyB9XG4gICAqIH07XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGdldERlZmF1bHRPcHRpb25zKCk6IFJlcXVpcmVkPFF1ZXJ5T3B0aW9ucz4ge1xuICAgIGNvbnN0IGRlZmF1bHRTb3J0aW5nID0gdGhpcy5zb3J0U2VydmljZS5nZXREZWZhdWx0U29ydGluZygpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgcGFnZTogMSxcbiAgICAgICAgcGFnZVNpemU6IDIwLFxuICAgICAgfSxcbiAgICAgIGZpbHRlcnM6IHt9LFxuICAgICAgc29ydDoge1xuICAgICAgICBzb3J0Qnk6IGRlZmF1bHRTb3J0aW5nLnNvcnRCeSxcbiAgICAgICAgc29ydE9yZGVyOiBkZWZhdWx0U29ydGluZy5zb3J0T3JkZXIsXG4gICAgICB9LFxuICAgICAgYWdncmVnYXRlOiB7fSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHF1ZXJ5IG9wdGlvbnMgd2l0aG91dCBleGVjdXRpbmcgcXVlcnlcbiAgICpcbiAgICogVmFsaWRhdGVzIGFsbCB0aHJlZSBvcHRpb24gdHlwZXM6XG4gICAqIC0gUGFnaW5hdGlvbiBvcHRpb25zIHZpYSBQYWdpbmF0aW9uU2VydmljZVxuICAgKiAtIEZpbHRlciBjcml0ZXJpYSB2aWEgRmlsdGVyU2VydmljZVxuICAgKiAtIFNvcnQgb3B0aW9ucyB2aWEgU29ydFNlcnZpY2VcbiAgICpcbiAgICogVXNlIHRoaXMgdG8gdmFsaWRhdGUgdXNlciBpbnB1dCBiZWZvcmUgZXhlY3V0aW5nIGEgcXVlcnksXG4gICAqIG9yIHRvIHRlc3Qgb3B0aW9uIHZhbGlkaXR5IGR1cmluZyBkZXZlbG9wbWVudC5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBRdWVyeSBvcHRpb25zIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIFRydWUgaWYgYWxsIG9wdGlvbnMgYXJlIHZhbGlkXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBhbnkgb3B0aW9ucyBhcmUgaW52YWxpZCB3aXRoIGRlc2NyaXB0aXZlIG1lc3NhZ2VcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiB0cnkge1xuICAgKiAgIHF1ZXJ5U2VydmljZS52YWxpZGF0ZU9wdGlvbnModXNlck9wdGlvbnMpO1xuICAgKiAgIC8vIE9wdGlvbnMgYXJlIHZhbGlkLCBwcm9jZWVkIHdpdGggcXVlcnlcbiAgICogICBjb25zdCByZXN1bHQgPSBxdWVyeVNlcnZpY2UucXVlcnkoaXRlbXMsIHVzZXJPcHRpb25zKTtcbiAgICogfSBjYXRjaCAoZXJyb3IpIHtcbiAgICogICAvLyBPcHRpb25zIGFyZSBpbnZhbGlkLCBzaG93IGVycm9yIHRvIHVzZXJcbiAgICogICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIHF1ZXJ5IG9wdGlvbnM6JywgZXJyb3IubWVzc2FnZSk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgdmFsaWRhdGVPcHRpb25zKG9wdGlvbnM/OiBRdWVyeU9wdGlvbnMpOiBib29sZWFuIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0cnVlOyAvLyBObyBvcHRpb25zIGlzIHZhbGlkICh1c2UgZGVmYXVsdHMpXG4gICAgfVxuXG4gICAgbG9nZ2VyLmRlYnVnKCdFbGVtZW50UXVlcnlTZXJ2aWNlLnZhbGlkYXRlT3B0aW9ucyBjYWxsZWQnLCB7XG4gICAgICBoYXNGaWx0ZXJzOiAhIW9wdGlvbnMuZmlsdGVycyxcbiAgICAgIGhhc1NvcnQ6ICEhb3B0aW9ucy5zb3J0LFxuICAgICAgaGFzUGFnaW5hdGlvbjogISFvcHRpb25zLnBhZ2luYXRpb24sXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gVmFsaWRhdGUgZmlsdGVyIGNyaXRlcmlhXG4gICAgICBpZiAob3B0aW9ucy5maWx0ZXJzKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyU2VydmljZS52YWxpZGF0ZUNyaXRlcmlhKG9wdGlvbnMuZmlsdGVycyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIHNvcnQgb3B0aW9uc1xuICAgICAgaWYgKG9wdGlvbnMuc29ydCkge1xuICAgICAgICB0aGlzLnNvcnRTZXJ2aWNlLnZhbGlkYXRlT3B0aW9ucyhvcHRpb25zLnNvcnQpO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBwYWdpbmF0aW9uIG9wdGlvbnNcbiAgICAgIC8vIFBhZ2luYXRpb25TZXJ2aWNlIHZhbGlkYXRlcyBpbiBwYWdpbmF0ZSgpLCBidXQgd2UgY2FuIHZhbGlkYXRlIHN0cnVjdHVyZSBoZXJlXG4gICAgICBpZiAob3B0aW9ucy5wYWdpbmF0aW9uKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVQYWdpbmF0aW9uU3RydWN0dXJlKG9wdGlvbnMucGFnaW5hdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5kZWJ1ZygnRWxlbWVudFF1ZXJ5U2VydmljZS52YWxpZGF0ZU9wdGlvbnM6IEFsbCBvcHRpb25zIHZhbGlkJyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdFbGVtZW50UXVlcnlTZXJ2aWNlLnZhbGlkYXRlT3B0aW9ucyBmYWlsZWQnLCB7XG4gICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBwYWdpbmF0aW9uIG9wdGlvbnMgc3RydWN0dXJlXG4gICAqXG4gICAqIFBlcmZvcm1zIGJhc2ljIHR5cGUgYW5kIHJhbmdlIHZhbGlkYXRpb24gZm9yIHBhZ2luYXRpb24gb3B0aW9ucy5cbiAgICogVGhlIFBhZ2luYXRpb25TZXJ2aWNlIHdpbGwgcGVyZm9ybSBhZGRpdGlvbmFsIHZhbGlkYXRpb24gZHVyaW5nXG4gICAqIGFjdHVhbCBwYWdpbmF0aW9uLCBidXQgdGhpcyBjYXRjaGVzIG9idmlvdXMgZXJyb3JzIGVhcmx5LlxuICAgKlxuICAgKiBAcGFyYW0gcGFnaW5hdGlvbiAtIFBhZ2luYXRpb24gb3B0aW9ucyB0byB2YWxpZGF0ZVxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgcGFnaW5hdGlvbiBvcHRpb25zIGFyZSBpbnZhbGlkXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUGFnaW5hdGlvblN0cnVjdHVyZShwYWdpbmF0aW9uOiBQYWdpbmF0aW9uT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmIChwYWdpbmF0aW9uLnBhZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHBhZ2luYXRpb24ucGFnZSkgfHwgcGFnaW5hdGlvbi5wYWdlIDwgMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhZ2luYXRpb24gcGFnZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwYWdpbmF0aW9uLnBhZ2VTaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihwYWdpbmF0aW9uLnBhZ2VTaXplKSB8fCBwYWdpbmF0aW9uLnBhZ2VTaXplIDwgMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhZ2luYXRpb24gcGFnZVNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBFbGVtZW50UXVlcnlTZXJ2aWNlIGluc3RhbmNlXG4gKlxuICogQ3JlYXRlcyBhIGNvbXBsZXRlIEVsZW1lbnRRdWVyeVNlcnZpY2Ugd2l0aCBhbGwgZGVwZW5kZW5jaWVzIGluc3RhbnRpYXRlZC5cbiAqIFRoaXMgaXMgdGhlIHJlY29tbWVuZGVkIHdheSB0byBjcmVhdGUgYSBxdWVyeSBzZXJ2aWNlIGZvciBtb3N0IHVzZSBjYXNlcy5cbiAqXG4gKiBGb3IgY3VzdG9tIGRlcGVuZGVuY3kgaW5qZWN0aW9uIG9yIHRlc3RpbmcsIHlvdSBjYW4gY29uc3RydWN0XG4gKiBFbGVtZW50UXVlcnlTZXJ2aWNlIGRpcmVjdGx5IHdpdGggbW9jayBzZXJ2aWNlcy5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIEVsZW1lbnQgdHlwZSBleHRlbmRpbmcgSUVsZW1lbnRcbiAqIEByZXR1cm5zIE5ldyBFbGVtZW50UXVlcnlTZXJ2aWNlIGluc3RhbmNlIHdpdGggYWxsIGRlcGVuZGVuY2llc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBDcmVhdGUgc2VydmljZSBmb3IgYSBzcGVjaWZpYyBlbGVtZW50IHR5cGVcbiAqIGNvbnN0IHBlcnNvbmFRdWVyeVNlcnZpY2UgPSBjcmVhdGVFbGVtZW50UXVlcnlTZXJ2aWNlPFBlcnNvbmE+KCk7XG4gKiBjb25zdCBza2lsbFF1ZXJ5U2VydmljZSA9IGNyZWF0ZUVsZW1lbnRRdWVyeVNlcnZpY2U8U2tpbGw+KCk7XG4gKlxuICogLy8gVXNlIGltbWVkaWF0ZWx5XG4gKiBjb25zdCByZXN1bHRzID0gcGVyc29uYVF1ZXJ5U2VydmljZS5xdWVyeShwZXJzb25hcywge1xuICogICBmaWx0ZXJzOiB7IHN0YXR1czogJ2FjdGl2ZScgfSxcbiAqICAgc29ydDogeyBzb3J0Qnk6ICduYW1lJyB9LFxuICogICBwYWdpbmF0aW9uOiB7IHBhZ2U6IDEsIHBhZ2VTaXplOiAxMCB9XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFF1ZXJ5U2VydmljZTxUIGV4dGVuZHMgSUVsZW1lbnQ+KCk6IElFbGVtZW50UXVlcnlTZXJ2aWNlPFQ+IHtcbiAgY29uc3QgcGFnaW5hdGlvblNlcnZpY2UgPSBuZXcgUGFnaW5hdGlvblNlcnZpY2U8VD4oKTtcbiAgY29uc3QgZmlsdGVyU2VydmljZSA9IG5ldyBGaWx0ZXJTZXJ2aWNlPFQ+KCk7XG4gIGNvbnN0IHNvcnRTZXJ2aWNlID0gbmV3IFNvcnRTZXJ2aWNlPFQ+KCk7XG5cbiAgcmV0dXJuIG5ldyBFbGVtZW50UXVlcnlTZXJ2aWNlPFQ+KHBhZ2luYXRpb25TZXJ2aWNlLCBmaWx0ZXJTZXJ2aWNlLCBzb3J0U2VydmljZSk7XG59XG5cbi8qKlxuICogU2luZ2xldG9uIGluc3RhbmNlIGZvciBjb252ZW5pZW5jZVxuICpcbiAqIFByb3ZpZGVzIGEgcmVhZHktdG8tdXNlIHF1ZXJ5IHNlcnZpY2UgZm9yIGNhc2VzIHdoZXJlIERJIGlzIG5vdCBuZWVkZWRcbiAqIG9yIHdoZW4gc2hhcmluZyBhIHNpbmdsZSBpbnN0YW5jZSBhY3Jvc3MgdGhlIGFwcGxpY2F0aW9uIGlzIGFjY2VwdGFibGUuXG4gKlxuICogU2luY2UgdGhlIHNlcnZpY2UgaXMgc3RhdGVsZXNzLCBzaGFyaW5nIGlzIHNhZmUgZm9yIGNvbmN1cnJlbnQgdXNlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBlbGVtZW50UXVlcnlTZXJ2aWNlIH0gZnJvbSAnLi9FbGVtZW50UXVlcnlTZXJ2aWNlLmpzJztcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBlbGVtZW50UXVlcnlTZXJ2aWNlLnF1ZXJ5KGl0ZW1zLCBvcHRpb25zKTtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgZWxlbWVudFF1ZXJ5U2VydmljZSA9IGNyZWF0ZUVsZW1lbnRRdWVyeVNlcnZpY2U8SUVsZW1lbnQ+KCk7XG4iXX0=
369
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWxlbWVudFF1ZXJ5U2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9xdWVyeS9FbGVtZW50UXVlcnlTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ0c7QUFHSCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFVL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFDSCxNQUFNLE9BQU8sbUJBQW1CO0lBZVg7SUFDQTtJQUNBO0lBaEJuQjs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxZQUNtQixpQkFBd0MsRUFDeEMsYUFBZ0MsRUFDaEMsV0FBNEI7UUFGNUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUF1QjtRQUN4QyxrQkFBYSxHQUFiLGFBQWEsQ0FBbUI7UUFDaEMsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO0lBQzVDLENBQUM7SUFFSjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQW9ERztJQUNJLEtBQUssQ0FBQyxLQUFVLEVBQUUsT0FBc0I7UUFDN0MsK0JBQStCO1FBQy9CLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFOUIsd0JBQXdCO1FBQ3hCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDekUsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0Is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Iiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFbGVtZW50UXVlcnlTZXJ2aWNlIC0gT3JjaGVzdHJhdG9yIGZvciBlbGVtZW50IHF1ZXJ5aW5nXG4gKlxuICogQ29vcmRpbmF0ZXMgcGFnaW5hdGlvbiwgZmlsdGVyaW5nLCBhbmQgc29ydGluZyBzZXJ2aWNlcyB0byBwcm92aWRlXG4gKiBhIHVuaWZpZWQgcXVlcnkgaW50ZXJmYWNlIGZvciBlbGVtZW50IGNvbGxlY3Rpb25zLlxuICpcbiAqIERFU0lHTiBQUklOQ0lQTEVTOlxuICogMS4gQ29tcG9zaXRpb24gb3ZlciBpbmhlcml0YW5jZSAtIG9yY2hlc3RyYXRlcyBpbmRlcGVuZGVudCBzZXJ2aWNlc1xuICogMi4gQ29ycmVjdCBvcGVyYXRpb24gb3JkZXI6IGZpbHRlciDihpIgc29ydCDihpIgcGFnaW5hdGVcbiAqIDMuIENvbXBsZXRlIG1ldGFkYXRhIC0gcmV0dXJucyBhbGwgcXVlcnkgY29udGV4dCBmb3IgZGVidWdnaW5nXG4gKiA0LiBTdGF0ZWxlc3MgLSBzYWZlIGZvciBjb25jdXJyZW50IHVzZSBhbmQgREkgaW5qZWN0aW9uXG4gKiA1LiBWYWxpZGF0aW9uIC0gdmFsaWRhdGVzIGFsbCBpbnB1dHMgYmVmb3JlIHByb2Nlc3NpbmdcbiAqXG4gKiBPUEVSQVRJT04gT1JERVI6XG4gKiBUaGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBpcyBjcml0aWNhbCBmb3IgY29ycmVjdG5lc3MgYW5kIHBlcmZvcm1hbmNlOlxuICogMS4gRmlsdGVyOiBSZWR1Y2UgZGF0YXNldCB0byBtYXRjaGluZyBpdGVtcyBvbmx5XG4gKiAyLiBTb3J0OiBPcmRlciB0aGUgZmlsdGVyZWQgcmVzdWx0c1xuICogMy4gUGFnaW5hdGU6IEV4dHJhY3QgcmVxdWVzdGVkIHBhZ2UgZnJvbSBzb3J0ZWQgcmVzdWx0c1xuICpcbiAqIFRoaXMgZW5zdXJlcyB0aGF0OlxuICogLSBQYWdpbmF0aW9uIG9wZXJhdGVzIG9uIGNvbXBsZXRlIGZpbHRlcmVkK3NvcnRlZCBkYXRhc2V0XG4gKiAtIFNvcnQgb3BlcmF0ZXMgb24gZmlsdGVyZWQgZGF0YXNldCAobW9yZSBlZmZpY2llbnQpXG4gKiAtIFJlc3VsdHMgYXJlIGRldGVybWluaXN0aWMgYW5kIHJlcHJvZHVjaWJsZVxuICpcbiAqIENPTkNVUlJFTlQgTU9ESUZJQ0FUSU9OIEJFSEFWSU9SOlxuICogVGhpcyBzZXJ2aWNlIG9wZXJhdGVzIG9uIGVsZW1lbnQgc25hcHNob3RzIHBhc3NlZCB2aWEgdGhlIGl0ZW1zIHBhcmFtZXRlci5cbiAqIEl0IGRvZXMgbm90IHJlYWQgZnJvbSBkaXNrIG9yIHRyYWNrIGZpbGUgc3lzdGVtIGNoYW5nZXMuIElmIGVsZW1lbnRzIGFyZVxuICogbW9kaWZpZWQgb24gZGlzayBiZXR3ZWVuIGZldGNoIGFuZCBxdWVyeSwgcmVzdWx0cyBtYXkgYmUgaW5jb25zaXN0ZW50IHdpdGhcbiAqIHRoZSBjdXJyZW50IGZpbGUgc3lzdGVtIHN0YXRlLiBUaGlzIGlzIGV4cGVjdGVkIGJlaGF2aW9yIC0gdGhlIHNlcnZpY2UgaXNcbiAqIHN0YXRlbGVzcyBhbmQgZGVzaWduZWQgZm9yIHBlcmZvcm1hbmNlLiBGb3IgcmVhbC10aW1lIGNvbnNpc3RlbmN5LCBjYWxsZXJzXG4gKiBzaG91bGQgcmUtZmV0Y2ggZWxlbWVudHMgYmVmb3JlIGVhY2ggcXVlcnkgb3BlcmF0aW9uLlxuICpcbiAqIEBtb2R1bGUgRWxlbWVudFF1ZXJ5U2VydmljZVxuICovXG5cbmltcG9ydCB7IElFbGVtZW50IH0gZnJvbSAnLi4vLi4vdHlwZXMvZWxlbWVudHMvSUVsZW1lbnQuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7XG4gIElFbGVtZW50UXVlcnlTZXJ2aWNlLFxuICBJUGFnaW5hdGlvblNlcnZpY2UsXG4gIElGaWx0ZXJTZXJ2aWNlLFxuICBJU29ydFNlcnZpY2UsXG4gIFF1ZXJ5T3B0aW9ucyxcbiAgUXVlcnlSZXN1bHQsXG4gIFBhZ2luYXRpb25PcHRpb25zLFxufSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IFBhZ2luYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9QYWdpbmF0aW9uU2VydmljZS5qcyc7XG5pbXBvcnQgeyBGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9GaWx0ZXJTZXJ2aWNlLmpzJztcbmltcG9ydCB7IFNvcnRTZXJ2aWNlIH0gZnJvbSAnLi9Tb3J0U2VydmljZS5qcyc7XG5cbi8qKlxuICogRWxlbWVudFF1ZXJ5U2VydmljZSBpbXBsZW1lbnRhdGlvblxuICpcbiAqIE9yY2hlc3RyYXRlcyB0aHJlZSBpbmRlcGVuZGVudCBzZXJ2aWNlcyB0byBwcm92aWRlIGNvbXBsZXRlIHF1ZXJ5IGNhcGFiaWxpdGllczpcbiAqIC0gRmlsdGVyU2VydmljZTogQXBwbGllcyBmaWx0ZXIgY3JpdGVyaWEgdG8gZWxlbWVudCBhcnJheXNcbiAqIC0gU29ydFNlcnZpY2U6IFNvcnRzIGVsZW1lbnRzIGJ5IHNwZWNpZmllZCBmaWVsZHNcbiAqIC0gUGFnaW5hdGlvblNlcnZpY2U6IFBhZ2luYXRlcyBzb3J0ZWQgcmVzdWx0c1xuICpcbiAqIEFsbCBzZXJ2aWNlcyBhcmUgaW5qZWN0ZWQgdmlhIGNvbnN0cnVjdG9yIGZvciB0ZXN0YWJpbGl0eSBhbmQgZmxleGliaWxpdHkuXG4gKlxuICogQHRlbXBsYXRlIFQgLSBFbGVtZW50IHR5cGUgZXh0ZW5kaW5nIElFbGVtZW50XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIFVzaW5nIGZhY3RvcnkgKHJlY29tbWVuZGVkKVxuICogY29uc3QgcXVlcnlTZXJ2aWNlID0gY3JlYXRlRWxlbWVudFF1ZXJ5U2VydmljZTxNeUVsZW1lbnQ+KCk7XG4gKlxuICogLy8gUXVlcnkgd2l0aCBhbGwgb3B0aW9uc1xuICogY29uc3QgcmVzdWx0ID0gcXVlcnlTZXJ2aWNlLnF1ZXJ5KGVsZW1lbnRzLCB7XG4gKiAgIGZpbHRlcnM6IHsgdGFnczogWyd0eXBlc2NyaXB0J10sIHN0YXR1czogJ2FjdGl2ZScgfSxcbiAqICAgc29ydDogeyBzb3J0Qnk6ICdtb2RpZmllZCcsIHNvcnRPcmRlcjogJ2Rlc2MnIH0sXG4gKiAgIHBhZ2luYXRpb246IHsgcGFnZTogMiwgcGFnZVNpemU6IDI1IH1cbiAqIH0pO1xuICpcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5pdGVtcyk7ICAgICAgICAgICAvLyBQYWdpbmF0ZWQgaXRlbXNcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5wYWdpbmF0aW9uKTsgICAgICAvLyBQYWdpbmF0aW9uIG1ldGFkYXRhXG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuc29ydGluZyk7ICAgICAgICAgLy8gQXBwbGllZCBzb3J0aW5nXG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZmlsdGVycy5hcHBsaWVkKTsgLy8gQXBwbGllZCBmaWx0ZXJzXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEVsZW1lbnRRdWVyeVNlcnZpY2U8VCBleHRlbmRzIElFbGVtZW50ID0gSUVsZW1lbnQ+IGltcGxlbWVudHMgSUVsZW1lbnRRdWVyeVNlcnZpY2U8VD4ge1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEVsZW1lbnRRdWVyeVNlcnZpY2Ugd2l0aCBpbmplY3RlZCBkZXBlbmRlbmNpZXNcbiAgICpcbiAgICogREVQRU5ERU5DWSBJTkpFQ1RJT046XG4gICAqIEFsbCBzZXJ2aWNlcyBhcmUgcHJvdmlkZWQgdmlhIGNvbnN0cnVjdG9yIHRvIGVuYWJsZTpcbiAgICogLSBFYXN5IHRlc3Rpbmcgd2l0aCBtb2Nrc1xuICAgKiAtIFNlcnZpY2UgY3VzdG9taXphdGlvblxuICAgKiAtIENvbnRhaW5lci1iYXNlZCBESSBpbnRlZ3JhdGlvblxuICAgKlxuICAgKiBAcGFyYW0gcGFnaW5hdGlvblNlcnZpY2UgLSBTZXJ2aWNlIGZvciBwYWdpbmF0aW9uIG9wZXJhdGlvbnNcbiAgICogQHBhcmFtIGZpbHRlclNlcnZpY2UgLSBTZXJ2aWNlIGZvciBmaWx0ZXJpbmcgb3BlcmF0aW9uc1xuICAgKiBAcGFyYW0gc29ydFNlcnZpY2UgLSBTZXJ2aWNlIGZvciBzb3J0aW5nIG9wZXJhdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFnaW5hdGlvblNlcnZpY2U6IElQYWdpbmF0aW9uU2VydmljZTxUPixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZpbHRlclNlcnZpY2U6IElGaWx0ZXJTZXJ2aWNlPFQ+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc29ydFNlcnZpY2U6IElTb3J0U2VydmljZTxUPlxuICApIHt9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjb21wbGV0ZSBxdWVyeSBvcGVyYXRpb24gd2l0aCBmdWxsIG1ldGFkYXRhXG4gICAqXG4gICAqIE9QRVJBVElPTiBPUkRFUjpcbiAgICogMS4gVmFsaWRhdGUgYWxsIHF1ZXJ5IG9wdGlvbnNcbiAgICogMi4gRmlsdGVyIGl0ZW1zIGJhc2VkIG9uIGNyaXRlcmlhXG4gICAqIDMuIFNvcnQgZmlsdGVyZWQgaXRlbXNcbiAgICogNC4gUGFnaW5hdGUgc29ydGVkIGl0ZW1zXG4gICAqIDUuIEJ1aWxkIGNvbXBsZXRlIHJlc3VsdCB3aXRoIG1ldGFkYXRhXG4gICAqXG4gICAqIFRoZSByZXR1cm5lZCBRdWVyeVJlc3VsdCBpbmNsdWRlczpcbiAgICogLSBpdGVtczogVGhlIHBhZ2luYXRlZCBzdWJzZXQgb2YgbWF0Y2hpbmcgaXRlbXNcbiAgICogLSBwYWdpbmF0aW9uOiBDb21wbGV0ZSBwYWdpbmF0aW9uIG1ldGFkYXRhXG4gICAqIC0gc29ydGluZzogQXBwbGllZCBzb3J0aW5nIGNvbmZpZ3VyYXRpb25cbiAgICogLSBmaWx0ZXJzOiBTdW1tYXJ5IG9mIGFwcGxpZWQgZmlsdGVyc1xuICAgKlxuICAgKiBTTkFQU0hPVCBTRU1BTlRJQ1M6XG4gICAqIFRoaXMgbWV0aG9kIG9wZXJhdGVzIG9uIHRoZSBpdGVtcyBhcnJheSBwYXNzZWQgdG8gaXQgYXQgdGhlIHRpbWUgb2YgdGhlIGNhbGwuXG4gICAqIEl0IGRvZXMgbm90IHJlLXJlYWQgZWxlbWVudHMgZnJvbSBkaXNrIG9yIHRyYWNrIGZpbGUgc3lzdGVtIGNoYW5nZXMuIElmIGVsZW1lbnRzXG4gICAqIGFyZSBtb2RpZmllZCBvbiBkaXNrIGJldHdlZW4gd2hlbiB0aGV5IGFyZSBmZXRjaGVkIGFuZCB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCxcbiAgICogdGhlIHJlc3VsdHMgd2lsbCByZWZsZWN0IHRoZSBzdGF0ZSBhdCBmZXRjaCB0aW1lLCBub3QgdGhlIGN1cnJlbnQgZmlsZSBzeXN0ZW0gc3RhdGUuXG4gICAqIFRoaXMgaXMgZXhwZWN0ZWQgYmVoYXZpb3IgZm9yIGEgc3RhdGVsZXNzIHF1ZXJ5IHNlcnZpY2UuIEZvciByZWFsLXRpbWUgY29uc2lzdGVuY3ksXG4gICAqIGNhbGxlcnMgc2hvdWxkIHJlLWZldGNoIGVsZW1lbnRzIGltbWVkaWF0ZWx5IGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLlxuICAgKlxuICAgKiBAcGFyYW0gaXRlbXMgLSBBcnJheSBvZiBlbGVtZW50cyB0byBxdWVyeSAoc25hcHNob3QgYXQgdGltZSBvZiBjYWxsKVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIENvbXBsZXRlIHF1ZXJ5IGNvbmZpZ3VyYXRpb25cbiAgICogQHJldHVybnMgUXVlcnkgcmVzdWx0IHdpdGggaXRlbXMgYW5kIGNvbXBsZXRlIG1ldGFkYXRhXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBxdWVyeSBvcHRpb25zIGFyZSBpbnZhbGlkXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgcmVzdWx0ID0gcXVlcnlTZXJ2aWNlLnF1ZXJ5KGFsbFBlcnNvbmFzLCB7XG4gICAqICAgZmlsdGVyczoge1xuICAgKiAgICAgbmFtZUNvbnRhaW5zOiAnY29kZScsXG4gICAqICAgICB0YWdzOiBbJ3R5cGVzY3JpcHQnXSxcbiAgICogICAgIHN0YXR1czogJ2FjdGl2ZSdcbiAgICogICB9LFxuICAgKiAgIHNvcnQ6IHtcbiAgICogICAgIHNvcnRCeTogJ21vZGlmaWVkJyxcbiAgICogICAgIHNvcnRPcmRlcjogJ2Rlc2MnXG4gICAqICAgfSxcbiAgICogICBwYWdpbmF0aW9uOiB7XG4gICAqICAgICBwYWdlOiAxLFxuICAgKiAgICAgcGFnZVNpemU6IDEwXG4gICAqICAgfVxuICAgKiB9KTtcbiAgICpcbiAgICogLy8gVXNlIHJlc3VsdFxuICAgKiBjb25zb2xlLmxvZyhgU2hvd2luZyAke3Jlc3VsdC5pdGVtcy5sZW5ndGh9IG9mICR7cmVzdWx0LnBhZ2luYXRpb24udG90YWxJdGVtc30gaXRlbXNgKTtcbiAgICogY29uc29sZS5sb2coYFNvcnRlZCBieSAke3Jlc3VsdC5zb3J0aW5nLnNvcnRCeX0gKCR7cmVzdWx0LnNvcnRpbmcuc29ydE9yZGVyfSlgKTtcbiAgICogY29uc29sZS5sb2coYEFwcGxpZWQgJHtyZXN1bHQuZmlsdGVycy5hcHBsaWVkLmNvdW50fSBmaWx0ZXJzYCk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIHF1ZXJ5KGl0ZW1zOiBUW10sIG9wdGlvbnM/OiBRdWVyeU9wdGlvbnMpOiBRdWVyeVJlc3VsdDxUPiB7XG4gICAgLy8gU3RlcCAxOiBWYWxpZGF0ZSBhbGwgb3B0aW9uc1xuICAgIHRoaXMudmFsaWRhdGVPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgLy8gU3RlcCAyOiBBcHBseSBmaWx0ZXJzXG4gICAgY29uc3QgZmlsdGVyZWRJdGVtcyA9IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXIoaXRlbXMsIG9wdGlvbnM/LmZpbHRlcnMpO1xuICAgIGNvbnN0IGFwcGxpZWRGaWx0ZXJzID0gdGhpcy5maWx0ZXJTZXJ2aWNlLnN1bW1hcml6ZUZpbHRlcnMob3B0aW9ucz8uZmlsdGVycyk7XG5cbiAgICAvLyBTdGVwIDM6IFNvcnQgZmlsdGVyZWQgaXRlbXNcbiAgICBjb25zdCBzb3J0ZWRJdGVtcyA9IHRoaXMuc29ydFNlcnZpY2Uuc29ydChmaWx0ZXJlZEl0ZW1zLCBvcHRpb25zPy5zb3J0KTtcbiAgICBjb25zdCBhcHBsaWVkU29ydGluZyA9IHtcbiAgICAgIHNvcnRCeTogb3B0aW9ucz8uc29ydD8uc29ydEJ5ID8/IHRoaXMuc29ydFNlcnZpY2UuZ2V0RGVmYXVsdFNvcnRpbmcoKS5zb3J0QnksXG4gICAgICBzb3J0T3JkZXI6IG9wdGlvbnM/LnNvcnQ/LnNvcnRPcmRlciA/PyB0aGlzLnNvcnRTZXJ2aWNlLmdldERlZmF1bHRTb3J0aW5nKCkuc29ydE9yZGVyLFxuICAgIH07XG5cbiAgICAvLyBTdGVwIDQ6IFBhZ2luYXRlIHNvcnRlZCBpdGVtc1xuICAgIGNvbnN0IHBhZ2luYXRlZFJlc3VsdCA9IHRoaXMucGFnaW5hdGlvblNlcnZpY2UucGFnaW5hdGUoc29ydGVkSXRlbXMsIG9wdGlvbnM/LnBhZ2luYXRpb24pO1xuXG4gICAgLy8gU3RlcCA1OiBCdWlsZCBjb21wbGV0ZSBxdWVyeSByZXN1bHRcbiAgICBjb25zdCByZXN1bHQ6IFF1ZXJ5UmVzdWx0PFQ+ID0ge1xuICAgICAgaXRlbXM6IHBhZ2luYXRlZFJlc3VsdC5pdGVtcyxcbiAgICAgIHBhZ2luYXRpb246IHBhZ2luYXRlZFJlc3VsdC5wYWdpbmF0aW9uLFxuICAgICAgc29ydGluZzogYXBwbGllZFNvcnRpbmcsXG4gICAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGFwcGxpZWQ6IGFwcGxpZWRGaWx0ZXJzLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIHF1ZXJ5IGFuZCByZXR1cm4gb25seSB0aGUgaXRlbXMgKG5vIG1ldGFkYXRhKVxuICAgKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGNhc2VzIHdoZXJlIHlvdSBvbmx5IG5lZWQgdGhlIGl0ZW1zXG4gICAqIGFuZCBkb24ndCBjYXJlIGFib3V0IHBhZ2luYXRpb24gbWV0YWRhdGEsIGFwcGxpZWQgZmlsdGVycywgZXRjLlxuICAgKlxuICAgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyBxdWVyeSgpIGFuZCBleHRyYWN0aW5nIHJlc3VsdC5pdGVtcyxcbiAgICogYnV0IG1heSBiZSBtb3JlIGNvbnZlbmllbnQgZm9yIHNpbXBsZSB1c2UgY2FzZXMuXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtcyAtIEFycmF5IG9mIGVsZW1lbnRzIHRvIHF1ZXJ5XG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQ29tcGxldGUgcXVlcnkgY29uZmlndXJhdGlvblxuICAgKiBAcmV0dXJucyBBcnJheSBvZiBpdGVtcyBtYXRjaGluZyBxdWVyeSAocGFnaW5hdGVkKVxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgcXVlcnkgb3B0aW9ucyBhcmUgaW52YWxpZFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIEdldCBqdXN0IHRoZSBpdGVtcywgaWdub3JlIG1ldGFkYXRhXG4gICAqIGNvbnN0IGl0ZW1zID0gcXVlcnlTZXJ2aWNlLnF1ZXJ5SXRlbXMoYWxsUGVyc29uYXMsIHtcbiAgICogICBmaWx0ZXJzOiB7IHN0YXR1czogJ2FjdGl2ZScgfSxcbiAgICogICBzb3J0OiB7IHNvcnRCeTogJ25hbWUnIH1cbiAgICogfSk7XG4gICAqXG4gICAqIC8vIFVzZSBpdGVtcyBkaXJlY3RseVxuICAgKiBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4gY29uc29sZS5sb2coaXRlbS5tZXRhZGF0YS5uYW1lKSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIHF1ZXJ5SXRlbXMoaXRlbXM6IFRbXSwgb3B0aW9ucz86IFF1ZXJ5T3B0aW9ucyk6IFRbXSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5xdWVyeShpdGVtcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHJlc3VsdC5pdGVtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlZmF1bHQgcXVlcnkgb3B0aW9uc1xuICAgKlxuICAgKiBSZXR1cm5zIGEgY29tcGxldGUgUXVlcnlPcHRpb25zIG9iamVjdCB3aXRoIGFsbCBkZWZhdWx0cyBmaWxsZWQgaW4uXG4gICAqIFVzZWZ1bCBmb3I6XG4gICAqIC0gVW5kZXJzdGFuZGluZyB3aGF0IGRlZmF1bHRzIGFyZSB1c2VkXG4gICAqIC0gQnVpbGRpbmcgb3B0aW9uIG9iamVjdHMgaW5jcmVtZW50YWxseVxuICAgKiAtIFRlc3RpbmcgYW5kIGRvY3VtZW50YXRpb25cbiAgICpcbiAgICogQHJldHVybnMgRGVmYXVsdCBxdWVyeSBjb25maWd1cmF0aW9uIHdpdGggYWxsIGZpZWxkcyBzcGVjaWZpZWRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBkZWZhdWx0cyA9IHF1ZXJ5U2VydmljZS5nZXREZWZhdWx0T3B0aW9ucygpO1xuICAgKiBjb25zb2xlLmxvZyhkZWZhdWx0cyk7XG4gICAqIC8vIHtcbiAgICogLy8gICBwYWdpbmF0aW9uOiB7IHBhZ2U6IDEsIHBhZ2VTaXplOiAyNSB9LFxuICAgKiAvLyAgIGZpbHRlcnM6IHt9LFxuICAgKiAvLyAgIHNvcnQ6IHsgc29ydEJ5OiAnbmFtZScsIHNvcnRPcmRlcjogJ2FzYycgfVxuICAgKiAvLyB9XG4gICAqXG4gICAqIC8vIFVzZSBhcyBiYXNlIGZvciBjdXN0b20gb3B0aW9uc1xuICAgKiBjb25zdCBjdXN0b21PcHRpb25zID0ge1xuICAgKiAgIC4uLmRlZmF1bHRzLFxuICAgKiAgIGZpbHRlcnM6IHsgc3RhdHVzOiAnYWN0aXZlJyB9XG4gICAqIH07XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGdldERlZmF1bHRPcHRpb25zKCk6IFJlcXVpcmVkPFF1ZXJ5T3B0aW9ucz4ge1xuICAgIGNvbnN0IGRlZmF1bHRTb3J0aW5nID0gdGhpcy5zb3J0U2VydmljZS5nZXREZWZhdWx0U29ydGluZygpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgcGFnZTogMSxcbiAgICAgICAgcGFnZVNpemU6IDIwLFxuICAgICAgfSxcbiAgICAgIGZpbHRlcnM6IHt9LFxuICAgICAgc29ydDoge1xuICAgICAgICBzb3J0Qnk6IGRlZmF1bHRTb3J0aW5nLnNvcnRCeSxcbiAgICAgICAgc29ydE9yZGVyOiBkZWZhdWx0U29ydGluZy5zb3J0T3JkZXIsXG4gICAgICB9LFxuICAgICAgYWdncmVnYXRlOiB7fSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHF1ZXJ5IG9wdGlvbnMgd2l0aG91dCBleGVjdXRpbmcgcXVlcnlcbiAgICpcbiAgICogVmFsaWRhdGVzIGFsbCB0aHJlZSBvcHRpb24gdHlwZXM6XG4gICAqIC0gUGFnaW5hdGlvbiBvcHRpb25zIHZpYSBQYWdpbmF0aW9uU2VydmljZVxuICAgKiAtIEZpbHRlciBjcml0ZXJpYSB2aWEgRmlsdGVyU2VydmljZVxuICAgKiAtIFNvcnQgb3B0aW9ucyB2aWEgU29ydFNlcnZpY2VcbiAgICpcbiAgICogVXNlIHRoaXMgdG8gdmFsaWRhdGUgdXNlciBpbnB1dCBiZWZvcmUgZXhlY3V0aW5nIGEgcXVlcnksXG4gICAqIG9yIHRvIHRlc3Qgb3B0aW9uIHZhbGlkaXR5IGR1cmluZyBkZXZlbG9wbWVudC5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBRdWVyeSBvcHRpb25zIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIFRydWUgaWYgYWxsIG9wdGlvbnMgYXJlIHZhbGlkXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBhbnkgb3B0aW9ucyBhcmUgaW52YWxpZCB3aXRoIGRlc2NyaXB0aXZlIG1lc3NhZ2VcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiB0cnkge1xuICAgKiAgIHF1ZXJ5U2VydmljZS52YWxpZGF0ZU9wdGlvbnModXNlck9wdGlvbnMpO1xuICAgKiAgIC8vIE9wdGlvbnMgYXJlIHZhbGlkLCBwcm9jZWVkIHdpdGggcXVlcnlcbiAgICogICBjb25zdCByZXN1bHQgPSBxdWVyeVNlcnZpY2UucXVlcnkoaXRlbXMsIHVzZXJPcHRpb25zKTtcbiAgICogfSBjYXRjaCAoZXJyb3IpIHtcbiAgICogICAvLyBPcHRpb25zIGFyZSBpbnZhbGlkLCBzaG93IGVycm9yIHRvIHVzZXJcbiAgICogICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIHF1ZXJ5IG9wdGlvbnM6JywgZXJyb3IubWVzc2FnZSk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgdmFsaWRhdGVPcHRpb25zKG9wdGlvbnM/OiBRdWVyeU9wdGlvbnMpOiBib29sZWFuIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0cnVlOyAvLyBObyBvcHRpb25zIGlzIHZhbGlkICh1c2UgZGVmYXVsdHMpXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFZhbGlkYXRlIGZpbHRlciBjcml0ZXJpYVxuICAgICAgaWYgKG9wdGlvbnMuZmlsdGVycykge1xuICAgICAgICB0aGlzLmZpbHRlclNlcnZpY2UudmFsaWRhdGVDcml0ZXJpYShvcHRpb25zLmZpbHRlcnMpO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBzb3J0IG9wdGlvbnNcbiAgICAgIGlmIChvcHRpb25zLnNvcnQpIHtcbiAgICAgICAgdGhpcy5zb3J0U2VydmljZS52YWxpZGF0ZU9wdGlvbnMob3B0aW9ucy5zb3J0KTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgcGFnaW5hdGlvbiBvcHRpb25zXG4gICAgICAvLyBQYWdpbmF0aW9uU2VydmljZSB2YWxpZGF0ZXMgaW4gcGFnaW5hdGUoKSwgYnV0IHdlIGNhbiB2YWxpZGF0ZSBzdHJ1Y3R1cmUgaGVyZVxuICAgICAgaWYgKG9wdGlvbnMucGFnaW5hdGlvbikge1xuICAgICAgICB0aGlzLnZhbGlkYXRlUGFnaW5hdGlvblN0cnVjdHVyZShvcHRpb25zLnBhZ2luYXRpb24pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdFbGVtZW50UXVlcnlTZXJ2aWNlLnZhbGlkYXRlT3B0aW9ucyBmYWlsZWQnLCB7XG4gICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBwYWdpbmF0aW9uIG9wdGlvbnMgc3RydWN0dXJlXG4gICAqXG4gICAqIFBlcmZvcm1zIGJhc2ljIHR5cGUgYW5kIHJhbmdlIHZhbGlkYXRpb24gZm9yIHBhZ2luYXRpb24gb3B0aW9ucy5cbiAgICogVGhlIFBhZ2luYXRpb25TZXJ2aWNlIHdpbGwgcGVyZm9ybSBhZGRpdGlvbmFsIHZhbGlkYXRpb24gZHVyaW5nXG4gICAqIGFjdHVhbCBwYWdpbmF0aW9uLCBidXQgdGhpcyBjYXRjaGVzIG9idmlvdXMgZXJyb3JzIGVhcmx5LlxuICAgKlxuICAgKiBAcGFyYW0gcGFnaW5hdGlvbiAtIFBhZ2luYXRpb24gb3B0aW9ucyB0byB2YWxpZGF0ZVxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgcGFnaW5hdGlvbiBvcHRpb25zIGFyZSBpbnZhbGlkXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUGFnaW5hdGlvblN0cnVjdHVyZShwYWdpbmF0aW9uOiBQYWdpbmF0aW9uT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmIChwYWdpbmF0aW9uLnBhZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHBhZ2luYXRpb24ucGFnZSkgfHwgcGFnaW5hdGlvbi5wYWdlIDwgMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhZ2luYXRpb24gcGFnZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwYWdpbmF0aW9uLnBhZ2VTaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihwYWdpbmF0aW9uLnBhZ2VTaXplKSB8fCBwYWdpbmF0aW9uLnBhZ2VTaXplIDwgMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhZ2luYXRpb24gcGFnZVNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBFbGVtZW50UXVlcnlTZXJ2aWNlIGluc3RhbmNlXG4gKlxuICogQ3JlYXRlcyBhIGNvbXBsZXRlIEVsZW1lbnRRdWVyeVNlcnZpY2Ugd2l0aCBhbGwgZGVwZW5kZW5jaWVzIGluc3RhbnRpYXRlZC5cbiAqIFRoaXMgaXMgdGhlIHJlY29tbWVuZGVkIHdheSB0byBjcmVhdGUgYSBxdWVyeSBzZXJ2aWNlIGZvciBtb3N0IHVzZSBjYXNlcy5cbiAqXG4gKiBGb3IgY3VzdG9tIGRlcGVuZGVuY3kgaW5qZWN0aW9uIG9yIHRlc3RpbmcsIHlvdSBjYW4gY29uc3RydWN0XG4gKiBFbGVtZW50UXVlcnlTZXJ2aWNlIGRpcmVjdGx5IHdpdGggbW9jayBzZXJ2aWNlcy5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIEVsZW1lbnQgdHlwZSBleHRlbmRpbmcgSUVsZW1lbnRcbiAqIEByZXR1cm5zIE5ldyBFbGVtZW50UXVlcnlTZXJ2aWNlIGluc3RhbmNlIHdpdGggYWxsIGRlcGVuZGVuY2llc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBDcmVhdGUgc2VydmljZSBmb3IgYSBzcGVjaWZpYyBlbGVtZW50IHR5cGVcbiAqIGNvbnN0IHBlcnNvbmFRdWVyeVNlcnZpY2UgPSBjcmVhdGVFbGVtZW50UXVlcnlTZXJ2aWNlPFBlcnNvbmE+KCk7XG4gKiBjb25zdCBza2lsbFF1ZXJ5U2VydmljZSA9IGNyZWF0ZUVsZW1lbnRRdWVyeVNlcnZpY2U8U2tpbGw+KCk7XG4gKlxuICogLy8gVXNlIGltbWVkaWF0ZWx5XG4gKiBjb25zdCByZXN1bHRzID0gcGVyc29uYVF1ZXJ5U2VydmljZS5xdWVyeShwZXJzb25hcywge1xuICogICBmaWx0ZXJzOiB7IHN0YXR1czogJ2FjdGl2ZScgfSxcbiAqICAgc29ydDogeyBzb3J0Qnk6ICduYW1lJyB9LFxuICogICBwYWdpbmF0aW9uOiB7IHBhZ2U6IDEsIHBhZ2VTaXplOiAxMCB9XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFF1ZXJ5U2VydmljZTxUIGV4dGVuZHMgSUVsZW1lbnQ+KCk6IElFbGVtZW50UXVlcnlTZXJ2aWNlPFQ+IHtcbiAgY29uc3QgcGFnaW5hdGlvblNlcnZpY2UgPSBuZXcgUGFnaW5hdGlvblNlcnZpY2U8VD4oKTtcbiAgY29uc3QgZmlsdGVyU2VydmljZSA9IG5ldyBGaWx0ZXJTZXJ2aWNlPFQ+KCk7XG4gIGNvbnN0IHNvcnRTZXJ2aWNlID0gbmV3IFNvcnRTZXJ2aWNlPFQ+KCk7XG5cbiAgcmV0dXJuIG5ldyBFbGVtZW50UXVlcnlTZXJ2aWNlPFQ+KHBhZ2luYXRpb25TZXJ2aWNlLCBmaWx0ZXJTZXJ2aWNlLCBzb3J0U2VydmljZSk7XG59XG5cbi8qKlxuICogU2luZ2xldG9uIGluc3RhbmNlIGZvciBjb252ZW5pZW5jZVxuICpcbiAqIFByb3ZpZGVzIGEgcmVhZHktdG8tdXNlIHF1ZXJ5IHNlcnZpY2UgZm9yIGNhc2VzIHdoZXJlIERJIGlzIG5vdCBuZWVkZWRcbiAqIG9yIHdoZW4gc2hhcmluZyBhIHNpbmdsZSBpbnN0YW5jZSBhY3Jvc3MgdGhlIGFwcGxpY2F0aW9uIGlzIGFjY2VwdGFibGUuXG4gKlxuICogU2luY2UgdGhlIHNlcnZpY2UgaXMgc3RhdGVsZXNzLCBzaGFyaW5nIGlzIHNhZmUgZm9yIGNvbmN1cnJlbnQgdXNlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBlbGVtZW50UXVlcnlTZXJ2aWNlIH0gZnJvbSAnLi9FbGVtZW50UXVlcnlTZXJ2aWNlLmpzJztcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBlbGVtZW50UXVlcnlTZXJ2aWNlLnF1ZXJ5KGl0ZW1zLCBvcHRpb25zKTtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgZWxlbWVudFF1ZXJ5U2VydmljZSA9IGNyZWF0ZUVsZW1lbnRRdWVyeVNlcnZpY2U8SUVsZW1lbnQ+KCk7XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"PaginationService.d.ts","sourceRoot":"","sources":["../../../src/services/query/PaginationService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAiBxG;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,iBAAiB,CAAC,CAAC,GAAG,GAAG,CAAE,YAAW,kBAAkB,CAAC,CAAC,CAAC;IACtE;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACI,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,eAAe,CAAC,CAAC,CAAC;IAwD5E;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACI,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,kBAAkB;IA4C7F;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,yBAAyB;CAwClC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,GAAG,GAAG,KAAK,kBAAkB,CAAC,CAAC,CAAC,CAExE;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,iBAAiB,wBAA0B,CAAC"}
1
+ {"version":3,"file":"PaginationService.d.ts","sourceRoot":"","sources":["../../../src/services/query/PaginationService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAiBxG;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,iBAAiB,CAAC,CAAC,GAAG,GAAG,CAAE,YAAW,kBAAkB,CAAC,CAAC,CAAC;IACtE;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACI,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,eAAe,CAAC,CAAC,CAAC;IAyC5E;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACI,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,kBAAkB;IA4C7F;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,yBAAyB;CAwClC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,GAAG,GAAG,KAAK,kBAAkB,CAAC,CAAC,CAAC,CAExE;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,iBAAiB,wBAA0B,CAAC"}
@@ -79,10 +79,6 @@ export class PaginationService {
79
79
  * ```
80
80
  */
81
81
  paginate(items, options) {
82
- logger.debug('PaginationService.paginate called', {
83
- itemCount: items.length,
84
- options,
85
- });
86
82
  // Apply defaults
87
83
  const page = options?.page ?? PAGINATION_CONSTANTS.MIN_PAGE;
88
84
  const pageSize = options?.pageSize ?? PAGINATION_CONSTANTS.DEFAULT_PAGE_SIZE;
@@ -111,15 +107,6 @@ export class PaginationService {
111
107
  hasNextPage,
112
108
  hasPrevPage,
113
109
  };
114
- logger.debug('PaginationService.paginate completed', {
115
- page,
116
- pageSize,
117
- totalItems,
118
- totalPages,
119
- returnedItems: pageItems.length,
120
- hasNextPage,
121
- hasPrevPage,
122
- });
123
110
  return {
124
111
  items: pageItems,
125
112
  pagination: metadata,
@@ -267,4 +254,4 @@ export function createPaginationService() {
267
254
  * ```
268
255
  */
269
256
  export const paginationService = new PaginationService();
270
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFnaW5hdGlvblNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvcXVlcnkvUGFnaW5hdGlvblNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBR0gsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRS9DOztHQUVHO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRztJQUMzQiwwRkFBMEY7SUFDMUYsaUJBQWlCLEVBQUUsRUFBRTtJQUNyQiwrQ0FBK0M7SUFDL0MsYUFBYSxFQUFFLEdBQUc7SUFDbEIsNENBQTRDO0lBQzVDLFFBQVEsRUFBRSxDQUFDO0lBQ1gsOEJBQThCO0lBQzlCLGFBQWEsRUFBRSxDQUFDO0NBQ1IsQ0FBQztBQUVYOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUM1Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0F1Qkc7SUFDSSxRQUFRLENBQUMsS0FBVSxFQUFFLE9BQTJCO1FBQ3JELE1BQU0sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLEVBQUU7WUFDaEQsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNO1lBQ3ZCLE9BQU87U0FDUixDQUFDLENBQUM7UUFFSCxpQkFBaUI7UUFDakIsTUFBTSxJQUFJLEdBQUcsT0FBTyxFQUFFLElBQUksSUFBSSxvQkFBb0IsQ0FBQyxRQUFRLENBQUM7UUFDNUQsTUFBTSxRQUFRLEdBQUcsT0FBTyxFQUFFLFFBQVEsSUFBSSxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQztRQUU3RSxrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUUvQyxrQ0FBa0M7UUFDbEMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNoQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMs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Q0gsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUsdUJBQXVCO0lBQ3JDLE9BQU8sSUFBSSxpQkFBaUIsRUFBSyxDQUFDO0FBQ3BDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYWdpbmF0aW9uU2VydmljZSAtIEVsZW1lbnQtYWdub3N0aWMgcGFnaW5hdGlvbiBzZXJ2aWNlXG4gKlxuICogUHJvdmlkZXMgY29uc2lzdGVudCBwYWdpbmF0aW9uIGJlaGF2aW9yIGFjcm9zcyBhbGwgZWxlbWVudCB0eXBlcyBmb2xsb3dpbmdcbiAqIHRoZSBwYXR0ZXJucyBlc3RhYmxpc2hlZCBpbiBDb2xsZWN0aW9uU2VhcmNoLnRzLlxuICpcbiAqIEtleSBGZWF0dXJlczpcbiAqIC0gMS1pbmRleGVkIHBhZ2VzIChwYWdlIDEgPSBmaXJzdCBwYWdlKVxuICogLSBDb25maWd1cmFibGUgcGFnZSBzaXplIHdpdGggc2Vuc2libGUgZGVmYXVsdHNcbiAqIC0gQ29tcGxldGUgcGFnaW5hdGlvbiBtZXRhZGF0YSBmb3IgVUkvQVBJIHJlc3BvbnNlc1xuICogLSBJbnB1dCB2YWxpZGF0aW9uIGFuZCBzZWN1cml0eSBsb2dnaW5nXG4gKiAtIFN0YXRlbGVzcyBhbmQgaW5qZWN0YWJsZSB2aWEgRElcbiAqXG4gKiBTZWN1cml0eTpcbiAqIC0gVmFsaWRhdGVzIGFsbCBpbnB1dHMgdG8gcHJldmVudCBEb1MgYXR0YWNrc1xuICogLSBMb2dzIHZhbGlkYXRpb24gZmFpbHVyZXMgdmlhIFNlY3VyaXR5TW9uaXRvclxuICogLSBFbmZvcmNlcyBtYXhpbXVtIHBhZ2Ugc2l6ZSBsaW1pdHNcbiAqXG4gKiBAc2VlIHNyYy90eXBlcy9xdWVyeS90eXBlcy50cyBmb3IgaW50ZXJmYWNlIGRlZmluaXRpb25zXG4gKiBAc2VlIHNyYy9jb2xsZWN0aW9uL0NvbGxlY3Rpb25TZWFyY2gudHMgZm9yIHBhZ2luYXRpb24gcGF0dGVybnNcbiAqL1xuXG5pbXBvcnQgeyBJUGFnaW5hdGlvblNlcnZpY2UsIFBhZ2luYXRpb25PcHRpb25zLCBQYWdpbmF0ZWRSZXN1bHQsIFBhZ2luYXRpb25NZXRhZGF0YSB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcblxuLyoqXG4gKiBDb25zdGFudHMgZm9yIHBhZ2luYXRpb24gY29uZmlndXJhdGlvblxuICovXG5jb25zdCBQQUdJTkFUSU9OX0NPTlNUQU5UUyA9IHtcbiAgLyoqIERlZmF1bHQgbnVtYmVyIG9mIGl0ZW1zIHBlciBwYWdlIChJc3N1ZSAjMjk5OiByZWR1Y2VkIGZyb20gMjUgZm9yIHRva2VuIGVmZmljaWVuY3kpICovXG4gIERFRkFVTFRfUEFHRV9TSVpFOiAyMCxcbiAgLyoqIE1heGltdW0gYWxsb3dlZCBwYWdlIHNpemUgdG8gcHJldmVudCBEb1MgKi9cbiAgTUFYX1BBR0VfU0laRTogMTAwLFxuICAvKiogTWluaW11bSB2YWxpZCBwYWdlIG51bWJlciAoMS1pbmRleGVkKSAqL1xuICBNSU5fUEFHRTogMSxcbiAgLyoqIE1pbmltdW0gdmFsaWQgcGFnZSBzaXplICovXG4gIE1JTl9QQUdFX1NJWkU6IDEsXG59IGFzIGNvbnN0O1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIElQYWdpbmF0aW9uU2VydmljZSBwcm92aWRpbmcgZWxlbWVudC1hZ25vc3RpYyBwYWdpbmF0aW9uXG4gKlxuICogVGhpcyBzZXJ2aWNlIGlzIHN0YXRlbGVzcyBhbmQgY2FuIGJlIHNhZmVseSBzaGFyZWQgYWNyb3NzIG11bHRpcGxlIGNvbnN1bWVycy5cbiAqIEl0IGZvbGxvd3MgdGhlIHBhZ2luYXRpb24gcGF0dGVybnMgZnJvbSBDb2xsZWN0aW9uU2VhcmNoLnRzOlxuICogLSAxLWluZGV4ZWQgcGFnZXNcbiAqIC0gRGVmYXVsdCBwYWdlU2l6ZSBvZiAyNVxuICogLSBNYXhpbXVtIHBhZ2VTaXplIG9mIDEwMFxuICogLSBBY2N1cmF0ZSBoYXNOZXh0UGFnZS9oYXNQcmV2UGFnZSBjYWxjdWxhdGlvbnNcbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFR5cGUgb2YgaXRlbXMgYmVpbmcgcGFnaW5hdGVkIChjYW4gYmUgYW55IHR5cGUpXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHNlcnZpY2UgPSBuZXcgUGFnaW5hdGlvblNlcnZpY2UoKTtcbiAqIGNvbnN0IHJlc3VsdCA9IHNlcnZpY2UucGFnaW5hdGUoaXRlbXMsIHsgcGFnZTogMiwgcGFnZVNpemU6IDEwIH0pO1xuICogY29uc29sZS5sb2cocmVzdWx0Lml0ZW1zKTsgLy8gaXRlbXMgMTEtMjBcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5wYWdpbmF0aW9uLmhhc05leHRQYWdlKTsgLy8gdHJ1ZSBpZiBtb3JlIGl0ZW1zIGV4aXN0XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFBhZ2luYXRpb25TZXJ2aWNlPFQgPSBhbnk+IGltcGxlbWVudHMgSVBhZ2luYXRpb25TZXJ2aWNlPFQ+IHtcbiAgLyoqXG4gICAqIFBhZ2luYXRlIGFuIGFycmF5IG9mIGl0ZW1zXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtcyAtIENvbXBsZXRlIGFycmF5IG9mIGl0ZW1zIHRvIHBhZ2luYXRlXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUGFnaW5hdGlvbiBjb25maWd1cmF0aW9uIChwYWdlLCBwYWdlU2l6ZSlcbiAgICogQHJldHVybnMgUGFnaW5hdGVkIHJlc3VsdCB3aXRoIGl0ZW1zIGFuZCBtZXRhZGF0YVxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgcGFnaW5hdGlvbiBvcHRpb25zIGFyZSBpbnZhbGlkXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3Qgc2VydmljZSA9IG5ldyBQYWdpbmF0aW9uU2VydmljZSgpO1xuICAgKlxuICAgKiAvLyBCYXNpYyB1c2FnZSB3aXRoIGRlZmF1bHRzIChwYWdlIDEsIHBhZ2VTaXplIDI1KVxuICAgKiBjb25zdCByZXN1bHQxID0gc2VydmljZS5wYWdpbmF0ZShpdGVtcyk7XG4gICAqXG4gICAqIC8vIEN1c3RvbSBwYWdlIGFuZCBwYWdlIHNpemVcbiAgICogY29uc3QgcmVzdWx0MiA9IHNlcnZpY2UucGFnaW5hdGUoaXRlbXMsIHsgcGFnZTogMywgcGFnZVNpemU6IDUwIH0pO1xuICAgKlxuICAgKiAvLyBBY2Nlc3MgcmVzdWx0c1xuICAgKiBjb25zb2xlLmxvZyhyZXN1bHQyLml0ZW1zKTsgLy8gSXRlbXMgMTAxLTE1MFxuICAgKiBjb25zb2xlLmxvZyhyZXN1bHQyLnBhZ2luYXRpb24udG90YWxQYWdlcyk7IC8vIFRvdGFsIG51bWJlciBvZiBwYWdlc1xuICAgKiBjb25zb2xlLmxvZyhyZXN1bHQyLnBhZ2luYXRpb24uaGFzTmV4dFBhZ2UpOyAvLyB0cnVlIGlmIHBhZ2UgNCBleGlzdHNcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgcGFnaW5hdGUoaXRlbXM6IFRbXSwgb3B0aW9ucz86IFBhZ2luYXRpb25PcHRpb25zKTogUGFnaW5hdGVkUmVzdWx0PFQ+IHtcbiAgICBsb2dnZXIuZGVidWcoJ1BhZ2luYXRpb25TZXJ2aWNlLnBhZ2luYXRlIGNhbGxlZCcsIHtcbiAgICAgIGl0ZW1Db3VudDogaXRlbXMubGVuZ3RoLFxuICAgICAgb3B0aW9ucyxcbiAgICB9KTtcblxuICAgIC8vIEFwcGx5IGRlZmF1bHRzXG4gICAgY29uc3QgcGFnZSA9IG9wdGlvbnM/LnBhZ2UgPz8gUEFHSU5BVElPTl9DT05TVEFOVFMuTUlOX1BBR0U7XG4gICAgY29uc3QgcGFnZVNpemUgPSBvcHRpb25zPy5wYWdlU2l6ZSA/PyBQQUdJTkFUSU9OX0NPTlNUQU5UUy5ERUZBVUxUX1BBR0VfU0laRTtcblxuICAgIC8vIFZhbGlkYXRlIGlucHV0c1xuICAgIHRoaXMudmFsaWRhdGVQYWdpbmF0aW9uT3B0aW9ucyhwYWdlLCBwYWdlU2l6ZSk7XG5cbiAgICAvLyBDYWxjdWxhdGUgcGFnaW5hdGlvbiBib3VuZGFyaWVzXG4gICAgY29uc3QgdG90YWxJdGVtcyA9IGl0ZW1zLmxlbmd0aDtcbiAgICBjb25zdCB0b3RhbFBhZ2VzID0gTWF0aC5jZWlsKHRvdGFsSXRlbXMgLyBwYWdlU2l6ZSk7XG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IChwYWdlIC0gMSkgKiBwYWdlU2l6ZTtcbiAgICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBwYWdlU2l6ZTtcblxuICAgIC8vIEV4dHJhY3QgaXRlbXMgZm9yIGN1cnJlbnQgcGFnZVxuICAgIC8vIEhhbmRsZSBlZGdlIGNhc2VzOlxuICAgIC8vIC0gRW1wdHkgYXJyYXlzOiBzbGljZSByZXR1cm5zIFtdXG4gICAgLy8gLSBQYWdlIGJleW9uZCBkYXRhOiBzbGljZSByZXR1cm5zIFtdXG4gICAgLy8gLSBwYWdlU2l6ZSBsYXJnZXIgdGhhbiB0b3RhbDogc2xpY2UgcmV0dXJucyByZW1haW5pbmcgaXRlbXNcbiAgICBjb25zdCBwYWdlSXRlbXMgPSBpdGVtcy5zbGljZShzdGFydEluZGV4LCBlbmRJbmRleCk7XG5cbiAgICAvLyBDYWxjdWxhdGUgbmF2aWdhdGlvbiBmbGFnc1xuICAgIGNvbnN0IGhhc05leHRQYWdlID0gZW5kSW5kZXggPCB0b3RhbEl0ZW1zO1xuICAgIGNvbnN0IGhhc1ByZXZQYWdlID0gcGFnZSA+IDE7XG5cbiAgICAvLyBCdWlsZCBtZXRhZGF0YVxuICAgIGNvbnN0IG1ldGFkYXRhOiBQYWdpbmF0aW9uTWV0YWRhdGEgPSB7XG4gICAgICBwYWdlLFxuICAgICAgcGFnZVNpemUsXG4gICAgICB0b3RhbEl0ZW1zLFxuICAgICAgdG90YWxQYWdlcyxcbiAgICAgIGhhc05leHRQYWdlLFxuICAgICAgaGFzUHJldlBhZ2UsXG4gICAgfTtcblxuICAgIGxvZ2dlci5kZWJ1ZygnUGFnaW5hdGlvblNlcnZpY2UucGFnaW5hdGUgY29tcGxldGVkJywge1xuICAgICAgcGFnZSxcbiAgICAgIHBhZ2VTaXplLFxuICAgICAgdG90YWxJdGVtcyxcbiAgICAgIHRvdGFsUGFnZXMsXG4gICAgICByZXR1cm5lZEl0ZW1zOiBwYWdlSXRlbXMubGVuZ3RoLFxuICAgICAgaGFzTmV4dFBhZ2UsXG4gICAgICBoYXNQcmV2UGFnZSxcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBpdGVtczogcGFnZUl0ZW1zLFxuICAgICAgcGFnaW5hdGlvbjogbWV0YWRhdGEsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgcGFnaW5hdGlvbiBtZXRhZGF0YSB3aXRob3V0IHJldHVybmluZyBpdGVtc1xuICAgKlxuICAgKiBVc2VmdWwgZm9yIEFQSSByZXNwb25zZXMgd2hlcmUgeW91IG5lZWQgbWV0YWRhdGEgYnV0IGFscmVhZHlcbiAgICogaGF2ZSB0aGUgaXRlbXMsIG9yIHdoZW4geW91IG5lZWQgdG8gcHJvdmlkZSBwYWdpbmF0aW9uIGluZm9cbiAgICogYmVmb3JlIGZldGNoaW5nIHRoZSBhY3R1YWwgZGF0YS5cbiAgICpcbiAgICogQHBhcmFtIHRvdGFsSXRlbXMgLSBUb3RhbCBudW1iZXIgb2YgaXRlbXMgaW4gZnVsbCByZXN1bHQgc2V0XG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUGFnaW5hdGlvbiBjb25maWd1cmF0aW9uIChwYWdlLCBwYWdlU2l6ZSlcbiAgICogQHJldHVybnMgUGFnaW5hdGlvbiBtZXRhZGF0YSBvbmx5XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBwYWdpbmF0aW9uIG9wdGlvbnMgYXJlIGludmFsaWRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBzZXJ2aWNlID0gbmV3IFBhZ2luYXRpb25TZXJ2aWNlKCk7XG4gICAqXG4gICAqIC8vIENhbGN1bGF0ZSBtZXRhZGF0YSBmb3IgYSBrbm93biB0b3RhbCBjb3VudFxuICAgKiBjb25zdCBtZXRhZGF0YSA9IHNlcnZpY2UuY2FsY3VsYXRlTWV0YWRhdGEoMjM3LCB7IHBhZ2U6IDUsIHBhZ2VTaXplOiAyNSB9KTtcbiAgICogY29uc29sZS5sb2cobWV0YWRhdGEudG90YWxQYWdlcyk7IC8vIDEwXG4gICAqIGNvbnNvbGUubG9nKG1ldGFkYXRhLmhhc05leHRQYWdlKTsgLy8gdHJ1ZSAocGFnZXMgNi0xMCBleGlzdClcbiAgICogY29uc29sZS5sb2cobWV0YWRhdGEuaGFzUHJldlBhZ2UpOyAvLyB0cnVlIChwYWdlcyAxLTQgZXhpc3QpXG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGNhbGN1bGF0ZU1ldGFkYXRhKHRvdGFsSXRlbXM6IG51bWJlciwgb3B0aW9ucz86IFBhZ2luYXRpb25PcHRpb25zKTogUGFnaW5hdGlvbk1ldGFkYXRhIHtcbiAgICBsb2dnZXIuZGVidWcoJ1BhZ2luYXRpb25TZXJ2aWNlLmNhbGN1bGF0ZU1ldGFkYXRhIGNhbGxlZCcsIHtcbiAgICAgIHRvdGFsSXRlbXMsXG4gICAgICBvcHRpb25zLFxuICAgIH0pO1xuXG4gICAgLy8gVmFsaWRhdGUgdG90YWxJdGVtc1xuICAgIGlmICh0b3RhbEl0ZW1zIDwgMCkge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ1RvdGFsIGl0ZW1zIGNvdW50IG11c3QgYmUgbm9uLW5lZ2F0aXZlJyk7XG4gICAgICBsb2dnZXIuZXJyb3IoJ1BhZ2luYXRpb25TZXJ2aWNlLmNhbGN1bGF0ZU1ldGFkYXRhOiBJbnZhbGlkIHRvdGFsIGl0ZW1zIGNvdW50Jywge1xuICAgICAgICB0b3RhbEl0ZW1zLFxuICAgICAgICByZWFzb246ICdOZWdhdGl2ZSB0b3RhbCBpdGVtcyBjb3VudCcsXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IGRlZmF1bHRzXG4gICAgY29uc3QgcGFnZSA9IG9wdGlvbnM/LnBhZ2UgPz8gUEFHSU5BVElPTl9DT05TVEFOVFMuTUlOX1BBR0U7XG4gICAgY29uc3QgcGFnZVNpemUgPSBvcHRpb25zPy5wYWdlU2l6ZSA/PyBQQUdJTkFUSU9OX0NPTlNUQU5UUy5ERUZBVUxUX1BBR0VfU0laRTtcblxuICAgIC8vIFZhbGlkYXRlIGlucHV0c1xuICAgIHRoaXMudmFsaWRhdGVQYWdpbmF0aW9uT3B0aW9ucyhwYWdlLCBwYWdlU2l6ZSk7XG5cbiAgICAvLyBDYWxjdWxhdGUgbWV0YWRhdGFcbiAgICBjb25zdCB0b3RhbFBhZ2VzID0gTWF0aC5jZWlsKHRvdGFsSXRlbXMgLyBwYWdlU2l6ZSk7XG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IChwYWdlIC0gMSkgKiBwYWdlU2l6ZTtcbiAgICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBwYWdlU2l6ZTtcbiAgICBjb25zdCBoYXNOZXh0UGFnZSA9IGVuZEluZGV4IDwgdG90YWxJdGVtcztcbiAgICBjb25zdCBoYXNQcmV2UGFnZSA9IHBhZ2UgPiAxO1xuXG4gICAgY29uc3QgbWV0YWRhdGE6IFBhZ2luYXRpb25NZXRhZGF0YSA9IHtcbiAgICAgIHBhZ2UsXG4gICAgICBwYWdlU2l6ZSxcbiAgICAgIHRvdGFsSXRlbXMsXG4gICAgICB0b3RhbFBhZ2VzLFxuICAgICAgaGFzTmV4dFBhZ2UsXG4gICAgICBoYXNQcmV2UGFnZSxcbiAgICB9O1xuXG4gICAgbG9nZ2VyLmRlYnVnKCdQYWdpbmF0aW9uU2VydmljZS5jYWxjdWxhdGVNZXRhZGF0YSBjb21wbGV0ZWQnLCBtZXRhZGF0YSk7XG5cbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgcGFnaW5hdGlvbiBvcHRpb25zXG4gICAqXG4gICAqIEVuc3VyZXMgdGhhdCBwYWdlIGFuZCBwYWdlU2l6ZSB2YWx1ZXMgYXJlIHdpdGhpbiBhY2NlcHRhYmxlIHJhbmdlc1xuICAgKiB0byBwcmV2ZW50IERvUyBhdHRhY2tzIGFuZCBpbnZhbGlkIHBhZ2luYXRpb24gc3RhdGVzLlxuICAgKlxuICAgKiBTZWN1cml0eSBjb25zaWRlcmF0aW9uczpcbiAgICogLSBQYWdlIG11c3QgYmUgPj0gMSAoMS1pbmRleGVkKVxuICAgKiAtIFBhZ2VTaXplIG11c3QgYmUgPj0gMVxuICAgKiAtIFBhZ2VTaXplIG11c3QgYmUgPD0gTUFYX1BBR0VfU0laRSAocHJldmVudHMgbWVtb3J5IGV4aGF1c3Rpb24pXG4gICAqXG4gICAqIEBwYXJhbSBwYWdlIC0gUGFnZSBudW1iZXIgdG8gdmFsaWRhdGVcbiAgICogQHBhcmFtIHBhZ2VTaXplIC0gUGFnZSBzaXplIHRvIHZhbGlkYXRlXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUGFnaW5hdGlvbk9wdGlvbnMocGFnZTogbnVtYmVyLCBwYWdlU2l6ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgLy8gVmFsaWRhdGUgcGFnZSBudW1iZXJcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIocGFnZSkgfHwgcGFnZSA8IFBBR0lOQVRJT05fQ09OU1RBTlRTLk1JTl9QQUdFKSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgYFBhZ2UgbnVtYmVyIG11c3QgYmUgYW4gaW50ZWdlciA+PSAke1BBR0lOQVRJT05fQ09OU1RBTlRTLk1JTl9QQUdFfSwgZ290OiAke3BhZ2V9YFxuICAgICAgKTtcbiAgICAgIGxvZ2dlci5lcnJvcignUGFnaW5hdGlvblNlcnZpY2UgdmFsaWRhdGlvbiBmYWlsZWQ6IEludmFsaWQgcGFnZSBudW1iZXInLCB7XG4gICAgICAgIHBhZ2UsXG4gICAgICAgIG1pblBhZ2U6IFBBR0lOQVRJT05fQ09OU1RBTlRTLk1JTl9QQUdFLFxuICAgICAgICByZWFzb246ICdQYWdlIG51bWJlciBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicsXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHBhZ2Ugc2l6ZSBtaW5pbXVtXG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHBhZ2VTaXplKSB8fCBwYWdlU2l6ZSA8IFBBR0lOQVRJT05fQ09OU1RBTlRTLk1JTl9QQUdFX1NJWkUpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICBgUGFnZSBzaXplIG11c3QgYmUgYW4gaW50ZWdlciA+PSAke1BBR0lOQVRJT05fQ09OU1RBTlRTLk1JTl9QQUdFX1NJWkV9LCBnb3Q6ICR7cGFnZVNpemV9YFxuICAgICAgKTtcbiAgICAgIGxvZ2dlci5lcnJvcignUGFnaW5hdGlvblNlcnZpY2UgdmFsaWRhdGlvbiBmYWlsZWQ6IEludmFsaWQgcGFnZSBzaXplICh0b28gc21hbGwpJywge1xuICAgICAgICBwYWdlU2l6ZSxcbiAgICAgICAgbWluUGFnZVNpemU6IFBBR0lOQVRJT05fQ09OU1RBTlRTLk1JTl9QQUdFX1NJWkUsXG4gICAgICAgIHJlYXNvbjogJ1BhZ2Ugc2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicsXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHBhZ2Ugc2l6ZSBtYXhpbXVtIChEb1MgcHJldmVudGlvbilcbiAgICBpZiAocGFnZVNpemUgPiBQQUdJTkFUSU9OX0NPTlNUQU5UUy5NQVhfUEFHRV9TSVpFKSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgYFBhZ2Ugc2l6ZSBtdXN0IGJlIDw9ICR7UEFHSU5BVElPTl9DT05TVEFOVFMuTUFYX1BBR0VfU0laRX0sIGdvdDogJHtwYWdlU2l6ZX1gXG4gICAgICApO1xuICAgICAgbG9nZ2VyLmVycm9yKCdQYWdpbmF0aW9uU2VydmljZSB2YWxpZGF0aW9uIGZhaWxlZDogRXhjZXNzaXZlIHBhZ2Ugc2l6ZScsIHtcbiAgICAgICAgcGFnZVNpemUsXG4gICAgICAgIG1heFBhZ2VTaXplOiBQQUdJTkFUSU9OX0NPTlNUQU5UUy5NQVhfUEFHRV9TSVpFLFxuICAgICAgICByZWFzb246ICdQYWdlIHNpemUgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgKERvUyBwcmV2ZW50aW9uKScsXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IFBhZ2luYXRpb25TZXJ2aWNlIGluc3RhbmNlXG4gKlxuICogVXNlZnVsIGZvciBkZXBlbmRlbmN5IGluamVjdGlvbiBzY2VuYXJpb3Mgd2hlcmUgeW91IHdhbnQgdG8gZW5zdXJlXG4gKiBhIGZyZXNoIGluc3RhbmNlIHBlciBjb25zdW1lci5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFR5cGUgb2YgaXRlbXMgYmVpbmcgcGFnaW5hdGVkXG4gKiBAcmV0dXJucyBOZXcgUGFnaW5hdGlvblNlcnZpY2UgaW5zdGFuY2VcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcGFnaW5hdGlvblNlcnZpY2UgPSBjcmVhdGVQYWdpbmF0aW9uU2VydmljZTxNeUVsZW1lbnRUeXBlPigpO1xuICogY29uc3QgcmVzdWx0ID0gcGFnaW5hdGlvblNlcnZpY2UucGFnaW5hdGUoaXRlbXMsIHsgcGFnZTogMSwgcGFnZVNpemU6IDI1IH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYWdpbmF0aW9uU2VydmljZTxUID0gYW55PigpOiBJUGFnaW5hdGlvblNlcnZpY2U8VD4ge1xuICByZXR1cm4gbmV3IFBhZ2luYXRpb25TZXJ2aWNlPFQ+KCk7XG59XG5cbi8qKlxuICogU2luZ2xldG9uIGluc3RhbmNlIGZvciBjb252ZW5pZW5jZVxuICpcbiAqIFVzZSB0aGlzIHdoZW4geW91IGRvbid0IG5lZWQgREkgb3Igd2hlbiBzaGFyaW5nIGEgc2luZ2xlIGluc3RhbmNlXG4gKiBhY3Jvc3MgdGhlIGFwcGxpY2F0aW9uIGlzIGFjY2VwdGFibGUuIFNpbmNlIHRoZSBzZXJ2aWNlIGlzIHN0YXRlbGVzcyxcbiAqIHNoYXJpbmcgaXMgc2FmZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgcGFnaW5hdGlvblNlcnZpY2UgfSBmcm9tICcuL1BhZ2luYXRpb25TZXJ2aWNlLmpzJztcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBwYWdpbmF0aW9uU2VydmljZS5wYWdpbmF0ZShpdGVtcywgeyBwYWdlOiAyLCBwYWdlU2l6ZTogNTAgfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IHBhZ2luYXRpb25TZXJ2aWNlID0gbmV3IFBhZ2luYXRpb25TZXJ2aWNlKCk7XG4iXX0=
257
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFnaW5hdGlvblNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvcXVlcnkvUGFnaW5hdGlvblNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBR0gsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRS9DOztHQUVHO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRztJQUMzQiwwRkFBMEY7SUFDMUYsaUJBQWlCLEVBQUUsRUFBRTtJQUNyQiwrQ0FBK0M7SUFDL0MsYUFBYSxFQUFFLEdBQUc7SUFDbEIsNENBQTRDO0lBQzVDLFFBQVEsRUFBRSxDQUFDO0lBQ1gsOEJBQThCO0lBQzlCLGFBQWEsRUFBRSxDQUFDO0NBQ1IsQ0FBQztBQUVYOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUM1Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0F1Qkc7SUFDSSxRQUFRLENBQUMsS0FBVSxFQUFFLE9BQTJCO1FBQ3JELGlCQUFpQjtRQUNqQixNQUFNLElBQUksR0FBRyxPQUFPLEVBQUUsSUFBSSxJQUFJLG9CQUFvQixDQUFDLFFBQVEsQ0FBQztRQUM1RCxNQUFNLFFBQVEsR0FBRyxPQUFPLEVBQUUsUUFBUSxJQUFJLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDO1FBRTdFLGtCQUFrQjtRQUNsQixJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRS9DLGtDQUFrQztRQUNsQyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ2hDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FB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Z2luYXRpb25TZXJ2aWNlIC0gRWxlbWVudC1hZ25vc3RpYyBwYWdpbmF0aW9uIHNlcnZpY2VcbiAqXG4gKiBQcm92aWRlcyBjb25zaXN0ZW50IHBhZ2luYXRpb24gYmVoYXZpb3IgYWNyb3NzIGFsbCBlbGVtZW50IHR5cGVzIGZvbGxvd2luZ1xuICogdGhlIHBhdHRlcm5zIGVzdGFibGlzaGVkIGluIENvbGxlY3Rpb25TZWFyY2gudHMuXG4gKlxuICogS2V5IEZlYXR1cmVzOlxuICogLSAxLWluZGV4ZWQgcGFnZXMgKHBhZ2UgMSA9IGZpcnN0IHBhZ2UpXG4gKiAtIENvbmZpZ3VyYWJsZSBwYWdlIHNpemUgd2l0aCBzZW5zaWJsZSBkZWZhdWx0c1xuICogLSBDb21wbGV0ZSBwYWdpbmF0aW9uIG1ldGFkYXRhIGZvciBVSS9BUEkgcmVzcG9uc2VzXG4gKiAtIElucHV0IHZhbGlkYXRpb24gYW5kIHNlY3VyaXR5IGxvZ2dpbmdcbiAqIC0gU3RhdGVsZXNzIGFuZCBpbmplY3RhYmxlIHZpYSBESVxuICpcbiAqIFNlY3VyaXR5OlxuICogLSBWYWxpZGF0ZXMgYWxsIGlucHV0cyB0byBwcmV2ZW50IERvUyBhdHRhY2tzXG4gKiAtIExvZ3MgdmFsaWRhdGlvbiBmYWlsdXJlcyB2aWEgU2VjdXJpdHlNb25pdG9yXG4gKiAtIEVuZm9yY2VzIG1heGltdW0gcGFnZSBzaXplIGxpbWl0c1xuICpcbiAqIEBzZWUgc3JjL3R5cGVzL3F1ZXJ5L3R5cGVzLnRzIGZvciBpbnRlcmZhY2UgZGVmaW5pdGlvbnNcbiAqIEBzZWUgc3JjL2NvbGxlY3Rpb24vQ29sbGVjdGlvblNlYXJjaC50cyBmb3IgcGFnaW5hdGlvbiBwYXR0ZXJuc1xuICovXG5cbmltcG9ydCB7IElQYWdpbmF0aW9uU2VydmljZSwgUGFnaW5hdGlvbk9wdGlvbnMsIFBhZ2luYXRlZFJlc3VsdCwgUGFnaW5hdGlvbk1ldGFkYXRhIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuXG4vKipcbiAqIENvbnN0YW50cyBmb3IgcGFnaW5hdGlvbiBjb25maWd1cmF0aW9uXG4gKi9cbmNvbnN0IFBBR0lOQVRJT05fQ09OU1RBTlRTID0ge1xuICAvKiogRGVmYXVsdCBudW1iZXIgb2YgaXRlbXMgcGVyIHBhZ2UgKElzc3VlICMyOTk6IHJlZHVjZWQgZnJvbSAyNSBmb3IgdG9rZW4gZWZmaWNpZW5jeSkgKi9cbiAgREVGQVVMVF9QQUdFX1NJWkU6IDIwLFxuICAvKiogTWF4aW11bSBhbGxvd2VkIHBhZ2Ugc2l6ZSB0byBwcmV2ZW50IERvUyAqL1xuICBNQVhfUEFHRV9TSVpFOiAxMDAsXG4gIC8qKiBNaW5pbXVtIHZhbGlkIHBhZ2UgbnVtYmVyICgxLWluZGV4ZWQpICovXG4gIE1JTl9QQUdFOiAxLFxuICAvKiogTWluaW11bSB2YWxpZCBwYWdlIHNpemUgKi9cbiAgTUlOX1BBR0VfU0laRTogMSxcbn0gYXMgY29uc3Q7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgSVBhZ2luYXRpb25TZXJ2aWNlIHByb3ZpZGluZyBlbGVtZW50LWFnbm9zdGljIHBhZ2luYXRpb25cbiAqXG4gKiBUaGlzIHNlcnZpY2UgaXMgc3RhdGVsZXNzIGFuZCBjYW4gYmUgc2FmZWx5IHNoYXJlZCBhY3Jvc3MgbXVsdGlwbGUgY29uc3VtZXJzLlxuICogSXQgZm9sbG93cyB0aGUgcGFnaW5hdGlvbiBwYXR0ZXJucyBmcm9tIENvbGxlY3Rpb25TZWFyY2gudHM6XG4gKiAtIDEtaW5kZXhlZCBwYWdlc1xuICogLSBEZWZhdWx0IHBhZ2VTaXplIG9mIDI1XG4gKiAtIE1heGltdW0gcGFnZVNpemUgb2YgMTAwXG4gKiAtIEFjY3VyYXRlIGhhc05leHRQYWdlL2hhc1ByZXZQYWdlIGNhbGN1bGF0aW9uc1xuICpcbiAqIEB0ZW1wbGF0ZSBUIC0gVHlwZSBvZiBpdGVtcyBiZWluZyBwYWdpbmF0ZWQgKGNhbiBiZSBhbnkgdHlwZSlcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgc2VydmljZSA9IG5ldyBQYWdpbmF0aW9uU2VydmljZSgpO1xuICogY29uc3QgcmVzdWx0ID0gc2VydmljZS5wYWdpbmF0ZShpdGVtcywgeyBwYWdlOiAyLCBwYWdlU2l6ZTogMTAgfSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuaXRlbXMpOyAvLyBpdGVtcyAxMS0yMFxuICogY29uc29sZS5sb2cocmVzdWx0LnBhZ2luYXRpb24uaGFzTmV4dFBhZ2UpOyAvLyB0cnVlIGlmIG1vcmUgaXRlbXMgZXhpc3RcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUGFnaW5hdGlvblNlcnZpY2U8VCA9IGFueT4gaW1wbGVtZW50cyBJUGFnaW5hdGlvblNlcnZpY2U8VD4ge1xuICAvKipcbiAgICogUGFnaW5hdGUgYW4gYXJyYXkgb2YgaXRlbXNcbiAgICpcbiAgICogQHBhcmFtIGl0ZW1zIC0gQ29tcGxldGUgYXJyYXkgb2YgaXRlbXMgdG8gcGFnaW5hdGVcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBQYWdpbmF0aW9uIGNvbmZpZ3VyYXRpb24gKHBhZ2UsIHBhZ2VTaXplKVxuICAgKiBAcmV0dXJucyBQYWdpbmF0ZWQgcmVzdWx0IHdpdGggaXRlbXMgYW5kIG1ldGFkYXRhXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBwYWdpbmF0aW9uIG9wdGlvbnMgYXJlIGludmFsaWRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBzZXJ2aWNlID0gbmV3IFBhZ2luYXRpb25TZXJ2aWNlKCk7XG4gICAqXG4gICAqIC8vIEJhc2ljIHVzYWdlIHdpdGggZGVmYXVsdHMgKHBhZ2UgMSwgcGFnZVNpemUgMjUpXG4gICAqIGNvbnN0IHJlc3VsdDEgPSBzZXJ2aWNlLnBhZ2luYXRlKGl0ZW1zKTtcbiAgICpcbiAgICogLy8gQ3VzdG9tIHBhZ2UgYW5kIHBhZ2Ugc2l6ZVxuICAgKiBjb25zdCByZXN1bHQyID0gc2VydmljZS5wYWdpbmF0ZShpdGVtcywgeyBwYWdlOiAzLCBwYWdlU2l6ZTogNTAgfSk7XG4gICAqXG4gICAqIC8vIEFjY2VzcyByZXN1bHRzXG4gICAqIGNvbnNvbGUubG9nKHJlc3VsdDIuaXRlbXMpOyAvLyBJdGVtcyAxMDEtMTUwXG4gICAqIGNvbnNvbGUubG9nKHJlc3VsdDIucGFnaW5hdGlvbi50b3RhbFBhZ2VzKTsgLy8gVG90YWwgbnVtYmVyIG9mIHBhZ2VzXG4gICAqIGNvbnNvbGUubG9nKHJlc3VsdDIucGFnaW5hdGlvbi5oYXNOZXh0UGFnZSk7IC8vIHRydWUgaWYgcGFnZSA0IGV4aXN0c1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBwYWdpbmF0ZShpdGVtczogVFtdLCBvcHRpb25zPzogUGFnaW5hdGlvbk9wdGlvbnMpOiBQYWdpbmF0ZWRSZXN1bHQ8VD4ge1xuICAgIC8vIEFwcGx5IGRlZmF1bHRzXG4gICAgY29uc3QgcGFnZSA9IG9wdGlvbnM/LnBhZ2UgPz8gUEFHSU5BVElPTl9DT05TVEFOVFMuTUlOX1BBR0U7XG4gICAgY29uc3QgcGFnZVNpemUgPSBvcHRpb25zPy5wYWdlU2l6ZSA/PyBQQUdJTkFUSU9OX0NPTlNUQU5UUy5ERUZBVUxUX1BBR0VfU0laRTtcblxuICAgIC8vIFZhbGlkYXRlIGlucHV0c1xuICAgIHRoaXMudmFsaWRhdGVQYWdpbmF0aW9uT3B0aW9ucyhwYWdlLCBwYWdlU2l6ZSk7XG5cbiAgICAvLyBDYWxjdWxhdGUgcGFnaW5hdGlvbiBib3VuZGFyaWVzXG4gICAgY29uc3QgdG90YWxJdGVtcyA9IGl0ZW1zLmxlbmd0aDtcbiAgICBjb25zdCB0b3RhbFBhZ2VzID0gTWF0aC5jZWlsKHRvdGFsSXRlbXMgLyBwYWdlU2l6ZSk7XG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IChwYWdlIC0gMSkgKiBwYWdlU2l6ZTtcbiAgICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBwYWdlU2l6ZTtcblxuICAgIC8vIEV4dHJhY3QgaXRlbXMgZm9yIGN1cnJlbnQgcGFnZVxuICAgIC8vIEhhbmRsZSBlZGdlIGNhc2VzOlxuICAgIC8vIC0gRW1wdHkgYXJyYXlzOiBzbGljZSByZXR1cm5zIFtdXG4gICAgLy8gLSBQYWdlIGJleW9uZCBkYXRhOiBzbGljZSByZXR1cm5zIFtdXG4gICAgLy8gLSBwYWdlU2l6ZSBsYXJnZXIgdGhhbiB0b3RhbDogc2xpY2UgcmV0dXJucyByZW1haW5pbmcgaXRlbXNcbiAgICBjb25zdCBwYWdlSXRlbXMgPSBpdGVtcy5zbGljZShzdGFydEluZGV4LCBlbmRJbmRleCk7XG5cbiAgICAvLyBDYWxjdWxhdGUgbmF2aWdhdGlvbiBmbGFnc1xuICAgIGNvbnN0IGhhc05leHRQYWdlID0gZW5kSW5kZXggPCB0b3RhbEl0ZW1zO1xuICAgIGNvbnN0IGhhc1ByZXZQYWdlID0gcGFnZSA+IDE7XG5cbiAgICAvLyBCdWlsZCBtZXRhZGF0YVxuICAgIGNvbnN0IG1ldGFkYXRhOiBQYWdpbmF0aW9uTWV0YWRhdGEgPSB7XG4gICAgICBwYWdlLFxuICAgICAgcGFnZVNpemUsXG4gICAgICB0b3RhbEl0ZW1zLFxuICAgICAgdG90YWxQYWdlcyxcbiAgICAgIGhhc05leHRQYWdlLFxuICAgICAgaGFzUHJldlBhZ2UsXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBpdGVtczogcGFnZUl0ZW1zLFxuICAgICAgcGFnaW5hdGlvbjogbWV0YWRhdGEsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgcGFnaW5hdGlvbiBtZXRhZGF0YSB3aXRob3V0IHJldHVybmluZyBpdGVtc1xuICAgKlxuICAgKiBVc2VmdWwgZm9yIEFQSSByZXNwb25zZXMgd2hlcmUgeW91IG5lZWQgbWV0YWRhdGEgYnV0IGFscmVhZHlcbiAgICogaGF2ZSB0aGUgaXRlbXMsIG9yIHdoZW4geW91IG5lZWQgdG8gcHJvdmlkZSBwYWdpbmF0aW9uIGluZm9cbiAgICogYmVmb3JlIGZldGNoaW5nIHRoZSBhY3R1YWwgZGF0YS5cbiAgICpcbiAgICogQHBhcmFtIHRvdGFsSXRlbXMgLSBUb3RhbCBudW1iZXIgb2YgaXRlbXMgaW4gZnVsbCByZXN1bHQgc2V0XG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUGFnaW5hdGlvbiBjb25maWd1cmF0aW9uIChwYWdlLCBwYWdlU2l6ZSlcbiAgICogQHJldHVybnMgUGFnaW5hdGlvbiBtZXRhZGF0YSBvbmx5XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBwYWdpbmF0aW9uIG9wdGlvbnMgYXJlIGludmFsaWRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBzZXJ2aWNlID0gbmV3IFBhZ2luYXRpb25TZXJ2aWNlKCk7XG4gICAqXG4gICAqIC8vIENhbGN1bGF0ZSBtZXRhZGF0YSBmb3IgYSBrbm93biB0b3RhbCBjb3VudFxuICAgKiBjb25zdCBtZXRhZGF0YSA9IHNlcnZpY2UuY2FsY3VsYXRlTWV0YWRhdGEoMjM3LCB7IHBhZ2U6IDUsIHBhZ2VTaXplOiAyNSB9KTtcbiAgICogY29uc29sZS5sb2cobWV0YWRhdGEudG90YWxQYWdlcyk7IC8vIDEwXG4gICAqIGNvbnNvbGUubG9nKG1ldGFkYXRhLmhhc05leHRQYWdlKTsgLy8gdHJ1ZSAocGFnZXMgNi0xMCBleGlzdClcbiAgICogY29uc29sZS5sb2cobWV0YWRhdGEuaGFzUHJldlBhZ2UpOyAvLyB0cnVlIChwYWdlcyAxLTQgZXhpc3QpXG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGNhbGN1bGF0ZU1ldGFkYXRhKHRvdGFsSXRlbXM6IG51bWJlciwgb3B0aW9ucz86IFBhZ2luYXRpb25PcHRpb25zKTogUGFnaW5hdGlvbk1ldGFkYXRhIHtcbiAgICBsb2dnZXIuZGVidWcoJ1BhZ2luYXRpb25TZXJ2aWNlLmNhbGN1bGF0ZU1ldGFkYXRhIGNhbGxlZCcsIHtcbiAgICAgIHRvdGFsSXRlbXMsXG4gICAgICBvcHRpb25zLFxuICAgIH0pO1xuXG4gICAgLy8gVmFsaWRhdGUgdG90YWxJdGVtc1xuICAgIGlmICh0b3RhbEl0ZW1zIDwgMCkge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ1RvdGFsIGl0ZW1zIGNvdW50IG11c3QgYmUgbm9uLW5lZ2F0aXZlJyk7XG4gICAgICBsb2dnZXIuZXJyb3IoJ1BhZ2luYXRpb25TZXJ2aWNlLmNhbGN1bGF0ZU1ldGFkYXRhOiBJbnZhbGlkIHRvdGFsIGl0ZW1zIGNvdW50Jywge1xuICAgICAgICB0b3RhbEl0ZW1zLFxuICAgICAgICByZWFzb246ICdOZWdhdGl2ZSB0b3RhbCBpdGVtcyBjb3VudCcsXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IGRlZmF1bHRzXG4gICAgY29uc3QgcGFnZSA9IG9wdGlvbnM/LnBhZ2UgPz8gUEFHSU5BVElPTl9DT05TVEFOVFMuTUlOX1BBR0U7XG4gICAgY29uc3QgcGFnZVNpemUgPSBvcHRpb25zPy5wYWdlU2l6ZSA/PyBQQUdJTkFUSU9OX0NPTlNUQU5UUy5ERUZBVUxUX1BBR0VfU0laRTtcblxuICAgIC8vIFZhbGlkYXRlIGlucHV0c1xuICAgIHRoaXMudmFsaWRhdGVQYWdpbmF0aW9uT3B0aW9ucyhwYWdlLCBwYWdlU2l6ZSk7XG5cbiAgICAvLyBDYWxjdWxhdGUgbWV0YWRhdGFcbiAgICBjb25zdCB0b3RhbFBhZ2VzID0gTWF0aC5jZWlsKHRvdGFsSXRlbXMgLyBwYWdlU2l6ZSk7XG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IChwYWdlIC0gMSkgKiBwYWdlU2l6ZTtcbiAgICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBwYWdlU2l6ZTtcbiAgICBjb25zdCBoYXNOZXh0UGFnZSA9IGVuZEluZGV4IDwgdG90YWxJdGVtcztcbiAgICBjb25zdCBoYXNQcmV2UGFnZSA9IHBhZ2UgPiAxO1xuXG4gICAgY29uc3QgbWV0YWRhdGE6IFBhZ2luYXRpb25NZXRhZGF0YSA9IHtcbiAgICAgIHBhZ2UsXG4gICAgICBwYWdlU2l6ZSxcbiAgICAgIHRvdGFsSXRlbXMsXG4gICAgICB0b3RhbFBhZ2VzLFxuICAgICAgaGFzTmV4dFBhZ2UsXG4gICAgICBoYXNQcmV2UGFnZSxcbiAgICB9O1xuXG4gICAgbG9nZ2VyLmRlYnVnKCdQYWdpbmF0aW9uU2VydmljZS5jYWxjdWxhdGVNZXRhZGF0YSBjb21wbGV0ZWQnLCBtZXRhZGF0YSk7XG5cbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgcGFnaW5hdGlvbiBvcHRpb25zXG4gICAqXG4gICAqIEVuc3VyZXMgdGhhdCBwYWdlIGFuZCBwYWdlU2l6ZSB2YWx1ZXMgYXJlIHdpdGhpbiBhY2NlcHRhYmxlIHJhbmdlc1xuICAgKiB0byBwcmV2ZW50IERvUyBhdHRhY2tzIGFuZCBpbnZhbGlkIHBhZ2luYXRpb24gc3RhdGVzLlxuICAgKlxuICAgKiBTZWN1cml0eSBjb25zaWRlcmF0aW9uczpcbiAgICogLSBQYWdlIG11c3QgYmUgPj0gMSAoMS1pbmRleGVkKVxuICAgKiAtIFBhZ2VTaXplIG11c3QgYmUgPj0gMVxuICAgKiAtIFBhZ2VTaXplIG11c3QgYmUgPD0gTUFYX1BBR0VfU0laRSAocHJldmVudHMgbWVtb3J5IGV4aGF1c3Rpb24pXG4gICAqXG4gICAqIEBwYXJhbSBwYWdlIC0gUGFnZSBudW1iZXIgdG8gdmFsaWRhdGVcbiAgICogQHBhcmFtIHBhZ2VTaXplIC0gUGFnZSBzaXplIHRvIHZhbGlkYXRlXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUGFnaW5hdGlvbk9wdGlvbnMocGFnZTogbnVtYmVyLCBwYWdlU2l6ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgLy8gVmFsaWRhdGUgcGFnZSBudW1iZXJcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIocGFnZSkgfHwgcGFnZSA8IFBBR0lOQVRJT05fQ09OU1RBTlRTLk1JTl9QQUdFKSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgYFBhZ2UgbnVtYmVyIG11c3QgYmUgYW4gaW50ZWdlciA+PSAke1BBR0lOQVRJT05fQ09OU1RBTlRTLk1JTl9QQUdFfSwgZ290OiAke3BhZ2V9YFxuICAgICAgKTtcbiAgICAgIGxvZ2dlci5lcnJvcignUGFnaW5hdGlvblNlcnZpY2UgdmFsaWRhdGlvbiBmYWlsZWQ6IEludmFsaWQgcGFnZSBudW1iZXInLCB7XG4gICAgICAgIHBhZ2UsXG4gICAgICAgIG1pblBhZ2U6IFBBR0lOQVRJT05fQ09OU1RBTlRTLk1JTl9QQUdFLFxuICAgICAgICByZWFzb246ICdQYWdlIG51bWJlciBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicsXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHBhZ2Ugc2l6ZSBtaW5pbXVtXG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHBhZ2VTaXplKSB8fCBwYWdlU2l6ZSA8IFBBR0lOQVRJT05fQ09OU1RBTlRTLk1JTl9QQUdFX1NJWkUpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICBgUGFnZSBzaXplIG11c3QgYmUgYW4gaW50ZWdlciA+PSAke1BBR0lOQVRJT05fQ09OU1RBTlRTLk1JTl9QQUdFX1NJWkV9LCBnb3Q6ICR7cGFnZVNpemV9YFxuICAgICAgKTtcbiAgICAgIGxvZ2dlci5lcnJvcignUGFnaW5hdGlvblNlcnZpY2UgdmFsaWRhdGlvbiBmYWlsZWQ6IEludmFsaWQgcGFnZSBzaXplICh0b28gc21hbGwpJywge1xuICAgICAgICBwYWdlU2l6ZSxcbiAgICAgICAgbWluUGFnZVNpemU6IFBBR0lOQVRJT05fQ09OU1RBTlRTLk1JTl9QQUdFX1NJWkUsXG4gICAgICAgIHJlYXNvbjogJ1BhZ2Ugc2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicsXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHBhZ2Ugc2l6ZSBtYXhpbXVtIChEb1MgcHJldmVudGlvbilcbiAgICBpZiAocGFnZVNpemUgPiBQQUdJTkFUSU9OX0NPTlNUQU5UUy5NQVhfUEFHRV9TSVpFKSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgYFBhZ2Ugc2l6ZSBtdXN0IGJlIDw9ICR7UEFHSU5BVElPTl9DT05TVEFOVFMuTUFYX1BBR0VfU0laRX0sIGdvdDogJHtwYWdlU2l6ZX1gXG4gICAgICApO1xuICAgICAgbG9nZ2VyLmVycm9yKCdQYWdpbmF0aW9uU2VydmljZSB2YWxpZGF0aW9uIGZhaWxlZDogRXhjZXNzaXZlIHBhZ2Ugc2l6ZScsIHtcbiAgICAgICAgcGFnZVNpemUsXG4gICAgICAgIG1heFBhZ2VTaXplOiBQQUdJTkFUSU9OX0NPTlNUQU5UUy5NQVhfUEFHRV9TSVpFLFxuICAgICAgICByZWFzb246ICdQYWdlIHNpemUgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgKERvUyBwcmV2ZW50aW9uKScsXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IFBhZ2luYXRpb25TZXJ2aWNlIGluc3RhbmNlXG4gKlxuICogVXNlZnVsIGZvciBkZXBlbmRlbmN5IGluamVjdGlvbiBzY2VuYXJpb3Mgd2hlcmUgeW91IHdhbnQgdG8gZW5zdXJlXG4gKiBhIGZyZXNoIGluc3RhbmNlIHBlciBjb25zdW1lci5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFR5cGUgb2YgaXRlbXMgYmVpbmcgcGFnaW5hdGVkXG4gKiBAcmV0dXJucyBOZXcgUGFnaW5hdGlvblNlcnZpY2UgaW5zdGFuY2VcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcGFnaW5hdGlvblNlcnZpY2UgPSBjcmVhdGVQYWdpbmF0aW9uU2VydmljZTxNeUVsZW1lbnRUeXBlPigpO1xuICogY29uc3QgcmVzdWx0ID0gcGFnaW5hdGlvblNlcnZpY2UucGFnaW5hdGUoaXRlbXMsIHsgcGFnZTogMSwgcGFnZVNpemU6IDI1IH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYWdpbmF0aW9uU2VydmljZTxUID0gYW55PigpOiBJUGFnaW5hdGlvblNlcnZpY2U8VD4ge1xuICByZXR1cm4gbmV3IFBhZ2luYXRpb25TZXJ2aWNlPFQ+KCk7XG59XG5cbi8qKlxuICogU2luZ2xldG9uIGluc3RhbmNlIGZvciBjb252ZW5pZW5jZVxuICpcbiAqIFVzZSB0aGlzIHdoZW4geW91IGRvbid0IG5lZWQgREkgb3Igd2hlbiBzaGFyaW5nIGEgc2luZ2xlIGluc3RhbmNlXG4gKiBhY3Jvc3MgdGhlIGFwcGxpY2F0aW9uIGlzIGFjY2VwdGFibGUuIFNpbmNlIHRoZSBzZXJ2aWNlIGlzIHN0YXRlbGVzcyxcbiAqIHNoYXJpbmcgaXMgc2FmZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgcGFnaW5hdGlvblNlcnZpY2UgfSBmcm9tICcuL1BhZ2luYXRpb25TZXJ2aWNlLmpzJztcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBwYWdpbmF0aW9uU2VydmljZS5wYWdpbmF0ZShpdGVtcywgeyBwYWdlOiAyLCBwYWdlU2l6ZTogNTAgfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IHBhZ2luYXRpb25TZXJ2aWNlID0gbmV3IFBhZ2luYXRpb25TZXJ2aWNlKCk7XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"SortService.d.ts","sourceRoot":"","sources":["../../../src/services/query/SortService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAE5D,OAAO,EACL,WAAW,EAGX,cAAc,EACd,YAAY,EAEb,MAAM,YAAY,CAAC;AAEpB;;;;;;;GAOG;AACH,qBAAa,WAAW,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC;IAChF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAyB;IAChE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAoB;IAC9D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAM9B;IAEX;;;;;;;;;;;;;OAaG;IACI,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,CAAC,EAAE;IA+BnD;;;;OAIG;IACI,iBAAiB,IAAI,cAAc;IAO1C;;;;;;;;OAQG;IACI,eAAe,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO;IA0BtD;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,eAAe;IAwCvB;;;;;;;;OAQG;IACH,OAAO,CAAC,cAAc;IAItB;;;;;;;;;OASG;IACH,OAAO,CAAC,YAAY;IAkBpB;;;;;;;;;OASG;IACH,OAAO,CAAC,eAAe;IAuBvB;;;;;;;;OAQG;IACH,OAAO,CAAC,YAAY;IAapB;;;;;;;;OAQG;IACH,OAAO,CAAC,cAAc;CAcvB"}
1
+ {"version":3,"file":"SortService.d.ts","sourceRoot":"","sources":["../../../src/services/query/SortService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAE5D,OAAO,EACL,WAAW,EAGX,cAAc,EACd,YAAY,EAEb,MAAM,YAAY,CAAC;AAEpB;;;;;;;GAOG;AACH,qBAAa,WAAW,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC;IAChF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAyB;IAChE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAoB;IAC9D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAM9B;IAEX;;;;;;;;;;;;;OAaG;IACI,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,CAAC,EAAE;IAyBnD;;;;OAIG;IACI,iBAAiB,IAAI,cAAc;IAO1C;;;;;;;;OAQG;IACI,eAAe,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO;IA0BtD;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,eAAe;IAwCvB;;;;;;;;OAQG;IACH,OAAO,CAAC,cAAc;IAItB;;;;;;;;;OASG;IACH,OAAO,CAAC,YAAY;IAkBpB;;;;;;;;;OASG;IACH,OAAO,CAAC,eAAe;IAuBvB;;;;;;;;OAQG;IACH,OAAO,CAAC,YAAY;IAapB;;;;;;;;OAQG;IACH,OAAO,CAAC,cAAc;CAcvB"}
@@ -61,11 +61,6 @@ export class SortService {
61
61
  // Extract validated options with defaults
62
62
  const sortBy = options?.sortBy ?? SortService.DEFAULT_SORT_BY;
63
63
  const sortOrder = options?.sortOrder ?? SortService.DEFAULT_SORT_ORDER;
64
- logger.debug('SortService.sort', {
65
- itemCount: items.length,
66
- sortBy,
67
- sortOrder,
68
- });
69
64
  // Create shallow copy to avoid mutation
70
65
  const sortedItems = [...items];
71
66
  // Sort with field-specific comparator
@@ -272,4 +267,4 @@ export class SortService {
272
267
  return a - b;
273
268
  }
274
269
  }
275
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU29ydFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvcXVlcnkvU29ydFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUdILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBTUwsZ0JBQWdCLEdBQ2pCLE1BQU0sWUFBWSxDQUFDO0FBRXBCOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLE9BQU8sV0FBVztJQUNkLE1BQU0sQ0FBVSxlQUFlLEdBQWtCLE1BQU0sQ0FBQztJQUN4RCxNQUFNLENBQVUsa0JBQWtCLEdBQWMsS0FBSyxDQUFDO0lBQ3RELE1BQU0sQ0FBVSxpQkFBaUIsR0FBNkI7UUFDcEUsTUFBTTtRQUNOLFNBQVM7UUFDVCxVQUFVO1FBQ1YsU0FBUztRQUNULFdBQVc7S0FDSCxDQUFDO0lBRVg7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNJLElBQUksQ0FBQyxLQUFVLEVBQUUsT0FBcUI7UUFDM0MsbUJBQW1CO1FBQ25CLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFOUIsMkJBQTJCO1FBQzNCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCwwQ0FBMEM7UUFDMUMsTUFBTSxNQUFNLEdBQUcsT0FBTyxFQUFFLE1BQU0sSUFBSSxXQUFXLENBQUMsZUFBZSxDQUFDO1FBQzlELE1BQU0sU0FBUyxHQUFHLE9BQU8sRUFBRSxTQUFTLElBQUksV0FBVyxDQUFDLGtCQUFrQixDQUFDO1FBRXZFLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUU7WUFDL0IsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNO1lBQ3ZCLE1BQU07WUFDTixTQUFTO1NBQ1YsQ0FBQyxDQUFDO1FBRUgsd0NBQXdDO1FB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TSxDQUFDLEtBQUssQ0FBQztJQUNyQyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSyxZQUFZLENBQUMsT0FBZTtRQUNsQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTztZQUNMLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM3QixLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDN0IsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1NBQzlCLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSyxjQUFjLENBQUMsQ0FBUyxFQUFFLENBQVM7UUFDekMsYUFBYTtRQUNiLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsQ0FBQztRQUNYLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNaLENBQUM7UUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTb3J0U2VydmljZSAtIEVsZW1lbnQtYWdub3N0aWMgc29ydGluZyBzZXJ2aWNlXG4gKlxuICogUHJvdmlkZXMgc3RhYmxlLCBzZWN1cmUgc29ydGluZyBmb3IgYW55IGVsZW1lbnQgdHlwZSB3aXRoIHN1cHBvcnQgZm9yOlxuICogLSBNdWx0aXBsZSBzb3J0YWJsZSBmaWVsZHMgKG5hbWUsIGNyZWF0ZWQsIG1vZGlmaWVkLCB2ZXJzaW9uLCByZXRlbnRpb24pXG4gKiAtIEFzY2VuZGluZyBhbmQgZGVzY2VuZGluZyBvcmRlclxuICogLSBTZW1hbnRpYyB2ZXJzaW9uIGNvbXBhcmlzb25cbiAqIC0gSVNPIDg2MDEgZGF0ZSBjb21wYXJpc29uXG4gKiAtIE51bGwtc2FmZSBoYW5kbGluZyAoc29ydHMgbnVsbHMgbGFzdClcbiAqIC0gSW1tdXRhYmlsaXR5IChkb2VzIG5vdCBtdXRhdGUgaW5wdXQgYXJyYXkpXG4gKlxuICogU0VDVVJJVFkgTk9URVM6XG4gKiAtIEFsbCBzb3J0QnkgdmFsdWVzIHZhbGlkYXRlZCBhZ2FpbnN0IFNvcnRhYmxlRmllbGQgZW51bVxuICogLSBObyBhcmJpdHJhcnkgZmllbGQgYWNjZXNzIGFsbG93ZWRcbiAqIC0gU3RhYmxlIHNvcnQgcHJldmVudHMgdGltaW5nIGF0dGFja3NcbiAqIC0gSW5wdXQgdmFsaWRhdGlvbiBwcmV2ZW50cyBpbmplY3Rpb25cbiAqXG4gKiBAbW9kdWxlIFNvcnRTZXJ2aWNlXG4gKi9cblxuaW1wb3J0IHsgSUVsZW1lbnQgfSBmcm9tICcuLi8uLi90eXBlcy9lbGVtZW50cy9JRWxlbWVudC5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHtcbiAgU29ydE9wdGlvbnMsXG4gIFNvcnRhYmxlRmllbGQsXG4gIFNvcnRPcmRlcixcbiAgQXBwbGllZFNvcnRpbmcsXG4gIElTb3J0U2VydmljZSxcbiAgZXh0cmFjdFNvcnRWYWx1ZSxcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8qKlxuICogU2VydmljZSBmb3Igc29ydGluZyBhcnJheXMgb2YgZWxlbWVudHNcbiAqXG4gKiBJbXBsZW1lbnRzIElTb3J0U2VydmljZSB3aXRoIHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvcnQgZmllbGRzIGFuZCBzdGFibGUgb3JkZXJpbmcuXG4gKiBEZXNpZ25lZCB0byBiZSBzdGF0ZWxlc3MgYW5kIGluamVjdGFibGUgdmlhIGRlcGVuZGVuY3kgaW5qZWN0aW9uLlxuICpcbiAqIEB0ZW1wbGF0ZSBUIC0gRWxlbWVudCB0eXBlIGV4dGVuZGluZyBJRWxlbWVudFxuICovXG5leHBvcnQgY2xhc3MgU29ydFNlcnZpY2U8VCBleHRlbmRzIElFbGVtZW50ID0gSUVsZW1lbnQ+IGltcGxlbWVudHMgSVNvcnRTZXJ2aWNlPFQ+IHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9TT1JUX0JZOiBTb3J0YWJsZUZpZWxkID0gJ25hbWUnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1NPUlRfT1JERVI6IFNvcnRPcmRlciA9ICdhc2MnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBWQUxJRF9TT1JUX0ZJRUxEUzogcmVhZG9ubHkgU29ydGFibGVGaWVsZFtdID0gW1xuICAgICduYW1lJyxcbiAgICAnY3JlYXRlZCcsXG4gICAgJ21vZGlmaWVkJyxcbiAgICAndmVyc2lvbicsXG4gICAgJ3JldGVudGlvbicsXG4gIF0gYXMgY29uc3Q7XG5cbiAgLyoqXG4gICAqIFNvcnQgYW4gYXJyYXkgb2YgZWxlbWVudHMgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgb3B0aW9uc1xuICAgKlxuICAgKiBJTVBMRU1FTlRBVElPTiBOT1RFUzpcbiAgICogLSBEb2VzIE5PVCBtdXRhdGUgdGhlIGlucHV0IGFycmF5IChjcmVhdGVzIGEgc2hhbGxvdyBjb3B5KVxuICAgKiAtIE1haW50YWlucyBzdGFibGUgc29ydCBvcmRlciAoaXRlbXMgd2l0aCBlcXVhbCB2YWx1ZXMgcmV0YWluIG9yaWdpbmFsIG9yZGVyKVxuICAgKiAtIEhhbmRsZXMgbWlzc2luZyB2YWx1ZXMgYnkgc29ydGluZyB0aGVtIGxhc3RcbiAgICogLSBWYWxpZGF0ZXMgc29ydEJ5IGZpZWxkIGFnYWluc3QgYWxsb3dlZCBlbnVtIHZhbHVlc1xuICAgKlxuICAgKiBAcGFyYW0gaXRlbXMgLSBBcnJheSBvZiBlbGVtZW50cyB0byBzb3J0XG4gICAqIEBwYXJhbSBvcHRpb25zIC0gU29ydGluZyBjb25maWd1cmF0aW9uXG4gICAqIEByZXR1cm5zIE5ldyBzb3J0ZWQgYXJyYXlcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHNvcnQgb3B0aW9ucyBhcmUgaW52YWxpZFxuICAgKi9cbiAgcHVibGljIHNvcnQoaXRlbXM6IFRbXSwgb3B0aW9ucz86IFNvcnRPcHRpb25zKTogVFtdIHtcbiAgICAvLyBWYWxpZGF0ZSBvcHRpb25zXG4gICAgdGhpcy52YWxpZGF0ZU9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAvLyBSZXR1cm4gZW1wdHkgYXJyYXkgYXMtaXNcbiAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gRXh0cmFjdCB2YWxpZGF0ZWQgb3B0aW9ucyB3aXRoIGRlZmF1bHRzXG4gICAgY29uc3Qgc29ydEJ5ID0gb3B0aW9ucz8uc29ydEJ5ID8/IFNvcnRTZXJ2aWNlLkRFRkFVTFRfU09SVF9CWTtcbiAgICBjb25zdCBzb3J0T3JkZXIgPSBvcHRpb25zPy5zb3J0T3JkZXIgPz8gU29ydFNlcnZpY2UuREVGQVVMVF9TT1JUX09SREVSO1xuXG4gICAgbG9nZ2VyLmRlYnVnKCdTb3J0U2VydmljZS5zb3J0Jywge1xuICAgICAgaXRlbUNvdW50OiBpdGVtcy5sZW5ndGgsXG4gICAgICBzb3J0QnksXG4gICAgICBzb3J0T3JkZXIsXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgc2hhbGxvdyBjb3B5IHRvIGF2b2lkIG11dGF0aW9uXG4gICAgY29uc3Qgc29ydGVkSXRlbXMgPSBbLi4uaXRlbXNdO1xuXG4gICAgLy8gU29ydCB3aXRoIGZpZWxkLXNwZWNpZmljIGNvbXBhcmF0b3JcbiAgICBzb3J0ZWRJdGVtcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNvbXBhcmVFbGVtZW50cyhhLCBiLCBzb3J0QnkpO1xuICAgICAgcmV0dXJuIHNvcnRPcmRlciA9PT0gJ2Rlc2MnID8gLXJlc3VsdCA6IHJlc3VsdDtcbiAgICB9KTtcblxuICAgIHJldHVybiBzb3J0ZWRJdGVtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlZmF1bHQgc29ydGluZyBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEByZXR1cm5zIERlZmF1bHQgc29ydCBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgZ2V0RGVmYXVsdFNvcnRpbmcoKTogQXBwbGllZFNvcnRpbmcge1xuICAgIHJldHVybiB7XG4gICAgICBzb3J0Qnk6IFNvcnRTZXJ2aWNlLkRFRkFVTFRfU09SVF9CWSxcbiAgICAgIHNvcnRPcmRlcjogU29ydFNlcnZpY2UuREVGQVVMVF9TT1JUX09SREVSLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgc29ydCBvcHRpb25zIHdpdGhvdXQgYXBwbHlpbmcgdGhlbVxuICAgKlxuICAgKiBTRUNVUklUWTogVmFsaWRhdGVzIHNvcnRCeSBhZ2FpbnN0IGVudW0gdG8gcHJldmVudCBhcmJpdHJhcnkgZmllbGQgYWNjZXNzXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gU29ydCBvcHRpb25zIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIFRydWUgaWYgb3B0aW9ucyBhcmUgdmFsaWRcbiAgICogQHRocm93cyB7RXJyb3J9IElmIG9wdGlvbnMgYXJlIGludmFsaWRcbiAgICovXG4gIHB1YmxpYyB2YWxpZGF0ZU9wdGlvbnMob3B0aW9ucz86IFNvcnRPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gTm8gb3B0aW9ucyBtZWFucyB1c2UgZGVmYXVsdHNcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBzb3J0QnkgZmllbGRcbiAgICBpZiAob3B0aW9ucy5zb3J0QnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFTb3J0U2VydmljZS5WQUxJRF9TT1JUX0ZJRUxEUy5pbmNsdWRlcyhvcHRpb25zLnNvcnRCeSkpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBgSW52YWxpZCBzb3J0QnkgZmllbGQ6ICR7b3B0aW9ucy5zb3J0Qnl9LiBNdXN0IGJlIG9uZSBvZjogJHtTb3J0U2VydmljZS5WQUxJRF9TT1JUX0ZJRUxEUy5qb2luKCcsICcpfWA7XG4gICAgICAgIGxvZ2dlci5lcnJvcignU29ydFNlcnZpY2UudmFsaWRhdGVPcHRpb25zJywgeyBlcnJvciB9KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBzb3J0T3JkZXJcbiAgICBpZiAob3B0aW9ucy5zb3J0T3JkZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG9wdGlvbnMuc29ydE9yZGVyICE9PSAnYXNjJyAmJiBvcHRpb25zLnNvcnRPcmRlciAhPT0gJ2Rlc2MnKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gYEludmFsaWQgc29ydE9yZGVyOiAke29wdGlvbnMuc29ydE9yZGVyfS4gTXVzdCBiZSAnYXNjJyBvciAnZGVzYydgO1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ1NvcnRTZXJ2aWNlLnZhbGlkYXRlT3B0aW9ucycsIHsgZXJyb3IgfSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGFyZSB0d28gZWxlbWVudHMgZm9yIHNvcnRpbmdcbiAgICpcbiAgICogSU1QTEVNRU5UQVRJT04gTk9URVM6XG4gICAqIC0gUmV0dXJucyBuZWdhdGl2ZSBpZiBhIDwgYiwgcG9zaXRpdmUgaWYgYSA+IGIsIHplcm8gaWYgZXF1YWxcbiAgICogLSBIYW5kbGVzIG51bGwvdW5kZWZpbmVkIHZhbHVlcyBieSBzb3J0aW5nIHRoZW0gbGFzdFxuICAgKiAtIFVzZXMgZmllbGQtc3BlY2lmaWMgY29tcGFyaXNvbiBsb2dpY1xuICAgKiAtIE1haW50YWlucyBzdGFibGUgc29ydCAocmV0dXJucyAwIGZvciBlcXVhbCB2YWx1ZXMpXG4gICAqXG4gICAqIEBwYXJhbSBhIC0gRmlyc3QgZWxlbWVudFxuICAgKiBAcGFyYW0gYiAtIFNlY29uZCBlbGVtZW50XG4gICAqIEBwYXJhbSBmaWVsZCAtIEZpZWxkIHRvIGNvbXBhcmVcbiAgICogQHJldHVybnMgQ29tcGFyaXNvbiByZXN1bHQgKC0xLCAwLCAxKVxuICAgKi9cbiAgcHJpdmF0ZSBjb21wYXJlRWxlbWVudHMoYTogVCwgYjogVCwgZmllbGQ6IFNvcnRhYmxlRmllbGQpOiBudW1iZXIge1xuICAgIGNvbnN0IHZhbHVlQSA9IGV4dHJhY3RTb3J0VmFsdWUoYSwgZmllbGQpO1xuICAgIGNvbnN0IHZhbHVlQiA9IGV4dHJhY3RTb3J0VmFsdWUoYiwgZmllbGQpO1xuXG4gICAgLy8gSGFuZGxlIG51bGwvdW5kZWZpbmVkIC0gc29ydCBsYXN0XG4gICAgaWYgKHZhbHVlQSA9PT0gdW5kZWZpbmVkICYmIHZhbHVlQiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgaWYgKHZhbHVlQSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gMTsgLy8gYSBpcyBudWxsLCBzb3J0IGFmdGVyIGJcbiAgICB9XG4gICAgaWYgKHZhbHVlQiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gLTE7IC8vIGIgaXMgbnVsbCwgc29ydCBhIGJlZm9yZSBiXG4gICAgfVxuXG4gICAgLy8gRmllbGQtc3BlY2lmaWMgY29tcGFyaXNvblxuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICAgIGNhc2UgJ25hbWUnOlxuICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlU3RyaW5ncyhTdHJpbmcodmFsdWVBKSwgU3RyaW5nKHZhbHVlQikpO1xuXG4gICAgICBjYXNlICdjcmVhdGVkJzpcbiAgICAgIGNhc2UgJ21vZGlmaWVkJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZURhdGVzKFN0cmluZyh2YWx1ZUEpLCBTdHJpbmcodmFsdWVCKSk7XG5cbiAgICAgIGNhc2UgJ3ZlcnNpb24nOlxuICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlVmVyc2lvbnMoU3RyaW5nKHZhbHVlQSksIFN0cmluZyh2YWx1ZUIpKTtcblxuICAgICAgY2FzZSAncmV0ZW50aW9uJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZU51bWJlcnMoTnVtYmVyKHZhbHVlQSksIE51bWJlcih2YWx1ZUIpKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gU2hvdWxkIG5ldmVyIHJlYWNoIGhlcmUgZHVlIHRvIHZhbGlkYXRpb25cbiAgICAgICAgbG9nZ2VyLndhcm4oJ1NvcnRTZXJ2aWNlLmNvbXBhcmVFbGVtZW50cycsIHtcbiAgICAgICAgICBtZXNzYWdlOiAnVW5rbm93biBzb3J0IGZpZWxkLCB1c2luZyBzdHJpbmcgY29tcGFyaXNvbicsXG4gICAgICAgICAgZmllbGQsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlU3RyaW5ncyhTdHJpbmcodmFsdWVBKSwgU3RyaW5nKHZhbHVlQikpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlIHR3byBzdHJpbmdzIGNhc2UtaW5zZW5zaXRpdmVseVxuICAgKlxuICAgKiBVc2VzIGxvY2FsZUNvbXBhcmUgZm9yIHByb3BlciBVbmljb2RlIGhhbmRsaW5nIGFuZCBzdGFibGUgb3JkZXJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBhIC0gRmlyc3Qgc3RyaW5nXG4gICAqIEBwYXJhbSBiIC0gU2Vjb25kIHN0cmluZ1xuICAgKiBAcmV0dXJucyBDb21wYXJpc29uIHJlc3VsdFxuICAgKi9cbiAgcHJpdmF0ZSBjb21wYXJlU3RyaW5ncyhhOiBzdHJpbmcsIGI6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIGEubG9jYWxlQ29tcGFyZShiLCB1bmRlZmluZWQsIHsgc2Vuc2l0aXZpdHk6ICdiYXNlJyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlIHR3byBJU08gODYwMSBkYXRlIHN0cmluZ3MgYXMgdGltZXN0YW1wc1xuICAgKlxuICAgKiBDb252ZXJ0cyB0byBEYXRlIG9iamVjdHMgYW5kIGNvbXBhcmVzIG51bWVyaWNhbGx5LlxuICAgKiBJbnZhbGlkIGRhdGVzIGFyZSB0cmVhdGVkIGFzIHVuZGVmaW5lZCAoc29ydGVkIGxhc3QpLlxuICAgKlxuICAgKiBAcGFyYW0gYSAtIEZpcnN0IGRhdGUgc3RyaW5nXG4gICAqIEBwYXJhbSBiIC0gU2Vjb25kIGRhdGUgc3RyaW5nXG4gICAqIEByZXR1cm5zIENvbXBhcmlzb24gcmVzdWx0XG4gICAqL1xuICBwcml2YXRlIGNvbXBhcmVEYXRlcyhhOiBzdHJpbmcsIGI6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgZGF0ZUEgPSBuZXcgRGF0ZShhKS5nZXRUaW1lKCk7XG4gICAgY29uc3QgZGF0ZUIgPSBuZXcgRGF0ZShiKS5nZXRUaW1lKCk7XG5cbiAgICAvLyBIYW5kbGUgaW52YWxpZCBkYXRlc1xuICAgIGlmIChpc05hTihkYXRlQSkgJiYgaXNOYU4oZGF0ZUIpKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgaWYgKGlzTmFOKGRhdGVBKSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGlmIChpc05hTihkYXRlQikpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0ZUEgLSBkYXRlQjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlIHR3byBzZW1hbnRpYyB2ZXJzaW9uIHN0cmluZ3MgKHgueS56IGZvcm1hdClcbiAgICpcbiAgICogQ29tcGFyZXMgbWFqb3IsIG1pbm9yLCBhbmQgcGF0Y2ggdmVyc2lvbnMgbnVtZXJpY2FsbHkuXG4gICAqIEludmFsaWQgdmVyc2lvbnMgYXJlIHNvcnRlZCB1c2luZyBzdHJpbmcgY29tcGFyaXNvbi5cbiAgICpcbiAgICogQHBhcmFtIGEgLSBGaXJzdCB2ZXJzaW9uIHN0cmluZ1xuICAgKiBAcGFyYW0gYiAtIFNlY29uZCB2ZXJzaW9uIHN0cmluZ1xuICAgKiBAcmV0dXJucyBDb21wYXJpc29uIHJlc3VsdFxuICAgKi9cbiAgcHJpdmF0ZSBjb21wYXJlVmVyc2lvbnMoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IHBhcnRzQSA9IHRoaXMucGFyc2VWZXJzaW9uKGEpO1xuICAgIGNvbnN0IHBhcnRzQiA9IHRoaXMucGFyc2VWZXJzaW9uKGIpO1xuXG4gICAgLy8gSWYgZWl0aGVyIHZlcnNpb24gaXMgaW52YWxpZCwgZmFsbCBiYWNrIHRvIHN0cmluZyBjb21wYXJpc29uXG4gICAgaWYgKCFwYXJ0c0EgfHwgIXBhcnRzQikge1xuICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZVN0cmluZ3MoYSwgYik7XG4gICAgfVxuXG4gICAgLy8gQ29tcGFyZSBtYWpvciB2ZXJzaW9uXG4gICAgaWYgKHBhcnRzQS5tYWpvciAhPT0gcGFydHNCLm1ham9yKSB7XG4gICAgICByZXR1cm4gcGFydHNBLm1ham9yIC0gcGFydHNCLm1ham9yO1xuICAgIH1cblxuICAgIC8vIENvbXBhcmUgbWlub3IgdmVyc2lvblxuICAgIGlmIChwYXJ0c0EubWlub3IgIT09IHBhcnRzQi5taW5vcikge1xuICAgICAgcmV0dXJuIHBhcnRzQS5taW5vciAtIHBhcnRzQi5taW5vcjtcbiAgICB9XG5cbiAgICAvLyBDb21wYXJlIHBhdGNoIHZlcnNpb25cbiAgICByZXR1cm4gcGFydHNBLnBhdGNoIC0gcGFydHNCLnBhdGNoO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGEgc2VtYW50aWMgdmVyc2lvbiBzdHJpbmcgaW50byBjb21wb25lbnRzXG4gICAqXG4gICAqIEhhbmRsZXMgZm9ybWF0cyBsaWtlIFwiMS4wLjBcIiwgXCIyLjUuM1wiLCBldGMuXG4gICAqIFJldHVybnMgbnVsbCBmb3IgaW52YWxpZCB2ZXJzaW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHZlcnNpb24gLSBWZXJzaW9uIHN0cmluZyB0byBwYXJzZVxuICAgKiBAcmV0dXJucyBQYXJzZWQgdmVyc2lvbiBjb21wb25lbnRzIG9yIG51bGxcbiAgICovXG4gIHByaXZhdGUgcGFyc2VWZXJzaW9uKHZlcnNpb246IHN0cmluZyk6IHsgbWFqb3I6IG51bWJlcjsgbWlub3I6IG51bWJlcjsgcGF0Y2g6IG51bWJlciB9IHwgbnVsbCB7XG4gICAgY29uc3QgbWF0Y2ggPSB2ZXJzaW9uLm1hdGNoKC9eKFxcZCspXFwuKFxcZCspXFwuKFxcZCspLyk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG1ham9yOiBwYXJzZUludChtYXRjaFsxXSwgMTApLFxuICAgICAgbWlub3I6IHBhcnNlSW50KG1hdGNoWzJdLCAxMCksXG4gICAgICBwYXRjaDogcGFyc2VJbnQobWF0Y2hbM10sIDEwKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmUgdHdvIG51bWJlcnNcbiAgICpcbiAgICogSGFuZGxlcyBOYU4gYnkgdHJlYXRpbmcgYXMgdW5kZWZpbmVkIChzb3J0ZWQgbGFzdCkuXG4gICAqXG4gICAqIEBwYXJhbSBhIC0gRmlyc3QgbnVtYmVyXG4gICAqIEBwYXJhbSBiIC0gU2Vjb25kIG51bWJlclxuICAgKiBAcmV0dXJucyBDb21wYXJpc29uIHJlc3VsdFxuICAgKi9cbiAgcHJpdmF0ZSBjb21wYXJlTnVtYmVycyhhOiBudW1iZXIsIGI6IG51bWJlcik6IG51bWJlciB7XG4gICAgLy8gSGFuZGxlIE5hTlxuICAgIGlmIChpc05hTihhKSAmJiBpc05hTihiKSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGlmIChpc05hTihhKSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGlmIChpc05hTihiKSkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHJldHVybiBhIC0gYjtcbiAgfVxufVxuIl19
270
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU29ydFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvcXVlcnkvU29ydFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUdILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBTUwsZ0JBQWdCLEdBQ2pCLE1BQU0sWUFBWSxDQUFDO0FBRXBCOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLE9BQU8sV0FBVztJQUNkLE1BQU0sQ0FBVSxlQUFlLEdBQWtCLE1BQU0sQ0FBQztJQUN4RCxNQUFNLENBQVUsa0JBQWtCLEdBQWMsS0FBSyxDQUFDO0lBQ3RELE1BQU0sQ0FBVSxpQkFBaUIsR0FBNkI7UUFDcEUsTUFBTTtRQUNOLFNBQVM7UUFDVCxVQUFVO1FBQ1YsU0FBUztRQUNULFdBQVc7S0FDSCxDQUFDO0lBRVg7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNJLElBQUksQ0FBQyxLQUFVLEVBQUUsT0FBcUI7UUFDM0MsbUJBQW1CO1FBQ25CLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFOUIsMkJBQTJCO1FBQzNCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCwwQ0FBMEM7UUFDMUMsTUFBTSxNQUFNLEdBQUcsT0FBTyxFQUFFLE1BQU0sSUFBSSxXQUFXLENBQUMsZUFBZSxDQUFDO1FBQzlELE1BQU0sU0FBUyxHQUFHLE9BQU8sRUFBRSxTQUFTLElBQUksV0FBVyxDQUFDLGtCQUFrQixDQUFDO1FBRXZFLHdDQUF3QztRQUN4QyxNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFFL0Isc0NBQXNDO1FBQ3RDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxF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QyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE9BQU87WUFDTCxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDN0IsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzdCLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztTQUM5QixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ssY0FBYyxDQUFDLENBQVMsRUFBRSxDQUFTO1FBQ3pDLGFBQWE7UUFDYixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN6QixPQUFPLENBQUMsQ0FBQztRQUNYLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDWixDQUFDO1FBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU29ydFNlcnZpY2UgLSBFbGVtZW50LWFnbm9zdGljIHNvcnRpbmcgc2VydmljZVxuICpcbiAqIFByb3ZpZGVzIHN0YWJsZSwgc2VjdXJlIHNvcnRpbmcgZm9yIGFueSBlbGVtZW50IHR5cGUgd2l0aCBzdXBwb3J0IGZvcjpcbiAqIC0gTXVsdGlwbGUgc29ydGFibGUgZmllbGRzIChuYW1lLCBjcmVhdGVkLCBtb2RpZmllZCwgdmVyc2lvbiwgcmV0ZW50aW9uKVxuICogLSBBc2NlbmRpbmcgYW5kIGRlc2NlbmRpbmcgb3JkZXJcbiAqIC0gU2VtYW50aWMgdmVyc2lvbiBjb21wYXJpc29uXG4gKiAtIElTTyA4NjAxIGRhdGUgY29tcGFyaXNvblxuICogLSBOdWxsLXNhZmUgaGFuZGxpbmcgKHNvcnRzIG51bGxzIGxhc3QpXG4gKiAtIEltbXV0YWJpbGl0eSAoZG9lcyBub3QgbXV0YXRlIGlucHV0IGFycmF5KVxuICpcbiAqIFNFQ1VSSVRZIE5PVEVTOlxuICogLSBBbGwgc29ydEJ5IHZhbHVlcyB2YWxpZGF0ZWQgYWdhaW5zdCBTb3J0YWJsZUZpZWxkIGVudW1cbiAqIC0gTm8gYXJiaXRyYXJ5IGZpZWxkIGFjY2VzcyBhbGxvd2VkXG4gKiAtIFN0YWJsZSBzb3J0IHByZXZlbnRzIHRpbWluZyBhdHRhY2tzXG4gKiAtIElucHV0IHZhbGlkYXRpb24gcHJldmVudHMgaW5qZWN0aW9uXG4gKlxuICogQG1vZHVsZSBTb3J0U2VydmljZVxuICovXG5cbmltcG9ydCB7IElFbGVtZW50IH0gZnJvbSAnLi4vLi4vdHlwZXMvZWxlbWVudHMvSUVsZW1lbnQuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7XG4gIFNvcnRPcHRpb25zLFxuICBTb3J0YWJsZUZpZWxkLFxuICBTb3J0T3JkZXIsXG4gIEFwcGxpZWRTb3J0aW5nLFxuICBJU29ydFNlcnZpY2UsXG4gIGV4dHJhY3RTb3J0VmFsdWUsXG59IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vKipcbiAqIFNlcnZpY2UgZm9yIHNvcnRpbmcgYXJyYXlzIG9mIGVsZW1lbnRzXG4gKlxuICogSW1wbGVtZW50cyBJU29ydFNlcnZpY2Ugd2l0aCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3J0IGZpZWxkcyBhbmQgc3RhYmxlIG9yZGVyaW5nLlxuICogRGVzaWduZWQgdG8gYmUgc3RhdGVsZXNzIGFuZCBpbmplY3RhYmxlIHZpYSBkZXBlbmRlbmN5IGluamVjdGlvbi5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIEVsZW1lbnQgdHlwZSBleHRlbmRpbmcgSUVsZW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIFNvcnRTZXJ2aWNlPFQgZXh0ZW5kcyBJRWxlbWVudCA9IElFbGVtZW50PiBpbXBsZW1lbnRzIElTb3J0U2VydmljZTxUPiB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfU09SVF9CWTogU29ydGFibGVGaWVsZCA9ICduYW1lJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9TT1JUX09SREVSOiBTb3J0T3JkZXIgPSAnYXNjJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVkFMSURfU09SVF9GSUVMRFM6IHJlYWRvbmx5IFNvcnRhYmxlRmllbGRbXSA9IFtcbiAgICAnbmFtZScsXG4gICAgJ2NyZWF0ZWQnLFxuICAgICdtb2RpZmllZCcsXG4gICAgJ3ZlcnNpb24nLFxuICAgICdyZXRlbnRpb24nLFxuICBdIGFzIGNvbnN0O1xuXG4gIC8qKlxuICAgKiBTb3J0IGFuIGFycmF5IG9mIGVsZW1lbnRzIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIG9wdGlvbnNcbiAgICpcbiAgICogSU1QTEVNRU5UQVRJT04gTk9URVM6XG4gICAqIC0gRG9lcyBOT1QgbXV0YXRlIHRoZSBpbnB1dCBhcnJheSAoY3JlYXRlcyBhIHNoYWxsb3cgY29weSlcbiAgICogLSBNYWludGFpbnMgc3RhYmxlIHNvcnQgb3JkZXIgKGl0ZW1zIHdpdGggZXF1YWwgdmFsdWVzIHJldGFpbiBvcmlnaW5hbCBvcmRlcilcbiAgICogLSBIYW5kbGVzIG1pc3NpbmcgdmFsdWVzIGJ5IHNvcnRpbmcgdGhlbSBsYXN0XG4gICAqIC0gVmFsaWRhdGVzIHNvcnRCeSBmaWVsZCBhZ2FpbnN0IGFsbG93ZWQgZW51bSB2YWx1ZXNcbiAgICpcbiAgICogQHBhcmFtIGl0ZW1zIC0gQXJyYXkgb2YgZWxlbWVudHMgdG8gc29ydFxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFNvcnRpbmcgY29uZmlndXJhdGlvblxuICAgKiBAcmV0dXJucyBOZXcgc29ydGVkIGFycmF5XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBzb3J0IG9wdGlvbnMgYXJlIGludmFsaWRcbiAgICovXG4gIHB1YmxpYyBzb3J0KGl0ZW1zOiBUW10sIG9wdGlvbnM/OiBTb3J0T3B0aW9ucyk6IFRbXSB7XG4gICAgLy8gVmFsaWRhdGUgb3B0aW9uc1xuICAgIHRoaXMudmFsaWRhdGVPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgLy8gUmV0dXJuIGVtcHR5IGFycmF5IGFzLWlzXG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8vIEV4dHJhY3QgdmFsaWRhdGVkIG9wdGlvbnMgd2l0aCBkZWZhdWx0c1xuICAgIGNvbnN0IHNvcnRCeSA9IG9wdGlvbnM/LnNvcnRCeSA/PyBTb3J0U2VydmljZS5ERUZBVUxUX1NPUlRfQlk7XG4gICAgY29uc3Qgc29ydE9yZGVyID0gb3B0aW9ucz8uc29ydE9yZGVyID8/IFNvcnRTZXJ2aWNlLkRFRkFVTFRfU09SVF9PUkRFUjtcblxuICAgIC8vIENyZWF0ZSBzaGFsbG93IGNvcHkgdG8gYXZvaWQgbXV0YXRpb25cbiAgICBjb25zdCBzb3J0ZWRJdGVtcyA9IFsuLi5pdGVtc107XG5cbiAgICAvLyBTb3J0IHdpdGggZmllbGQtc3BlY2lmaWMgY29tcGFyYXRvclxuICAgIHNvcnRlZEl0ZW1zLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY29tcGFyZUVsZW1lbnRzKGEsIGIsIHNvcnRCeSk7XG4gICAgICByZXR1cm4gc29ydE9yZGVyID09PSAnZGVzYycgPyAtcmVzdWx0IDogcmVzdWx0O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNvcnRlZEl0ZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVmYXVsdCBzb3J0aW5nIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQHJldHVybnMgRGVmYXVsdCBzb3J0IG9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBnZXREZWZhdWx0U29ydGluZygpOiBBcHBsaWVkU29ydGluZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNvcnRCeTogU29ydFNlcnZpY2UuREVGQVVMVF9TT1JUX0JZLFxuICAgICAgc29ydE9yZGVyOiBTb3J0U2VydmljZS5ERUZBVUxUX1NPUlRfT1JERVIsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBzb3J0IG9wdGlvbnMgd2l0aG91dCBhcHBseWluZyB0aGVtXG4gICAqXG4gICAqIFNFQ1VSSVRZOiBWYWxpZGF0ZXMgc29ydEJ5IGFnYWluc3QgZW51bSB0byBwcmV2ZW50IGFyYml0cmFyeSBmaWVsZCBhY2Nlc3NcbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBTb3J0IG9wdGlvbnMgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMgVHJ1ZSBpZiBvcHRpb25zIGFyZSB2YWxpZFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgb3B0aW9ucyBhcmUgaW52YWxpZFxuICAgKi9cbiAgcHVibGljIHZhbGlkYXRlT3B0aW9ucyhvcHRpb25zPzogU29ydE9wdGlvbnMpOiBib29sZWFuIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0cnVlOyAvLyBObyBvcHRpb25zIG1lYW5zIHVzZSBkZWZhdWx0c1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHNvcnRCeSBmaWVsZFxuICAgIGlmIChvcHRpb25zLnNvcnRCeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIVNvcnRTZXJ2aWNlLlZBTElEX1NPUlRfRklFTERTLmluY2x1ZGVzKG9wdGlvbnMuc29ydEJ5KSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IGBJbnZhbGlkIHNvcnRCeSBmaWVsZDogJHtvcHRpb25zLnNvcnRCeX0uIE11c3QgYmUgb25lIG9mOiAke1NvcnRTZXJ2aWNlLlZBTElEX1NPUlRfRklFTERTLmpvaW4oJywgJyl9YDtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdTb3J0U2VydmljZS52YWxpZGF0ZU9wdGlvbnMnLCB7IGVycm9yIH0pO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHNvcnRPcmRlclxuICAgIGlmIChvcHRpb25zLnNvcnRPcmRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAob3B0aW9ucy5zb3J0T3JkZXIgIT09ICdhc2MnICYmIG9wdGlvbnMuc29ydE9yZGVyICE9PSAnZGVzYycpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBgSW52YWxpZCBzb3J0T3JkZXI6ICR7b3B0aW9ucy5zb3J0T3JkZXJ9LiBNdXN0IGJlICdhc2MnIG9yICdkZXNjJ2A7XG4gICAgICAgIGxvZ2dlci5lcnJvcignU29ydFNlcnZpY2UudmFsaWRhdGVPcHRpb25zJywgeyBlcnJvciB9KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlIHR3byBlbGVtZW50cyBmb3Igc29ydGluZ1xuICAgKlxuICAgKiBJTVBMRU1FTlRBVElPTiBOT1RFUzpcbiAgICogLSBSZXR1cm5zIG5lZ2F0aXZlIGlmIGEgPCBiLCBwb3NpdGl2ZSBpZiBhID4gYiwgemVybyBpZiBlcXVhbFxuICAgKiAtIEhhbmRsZXMgbnVsbC91bmRlZmluZWQgdmFsdWVzIGJ5IHNvcnRpbmcgdGhlbSBsYXN0XG4gICAqIC0gVXNlcyBmaWVsZC1zcGVjaWZpYyBjb21wYXJpc29uIGxvZ2ljXG4gICAqIC0gTWFpbnRhaW5zIHN0YWJsZSBzb3J0IChyZXR1cm5zIDAgZm9yIGVxdWFsIHZhbHVlcylcbiAgICpcbiAgICogQHBhcmFtIGEgLSBGaXJzdCBlbGVtZW50XG4gICAqIEBwYXJhbSBiIC0gU2Vjb25kIGVsZW1lbnRcbiAgICogQHBhcmFtIGZpZWxkIC0gRmllbGQgdG8gY29tcGFyZVxuICAgKiBAcmV0dXJucyBDb21wYXJpc29uIHJlc3VsdCAoLTEsIDAsIDEpXG4gICAqL1xuICBwcml2YXRlIGNvbXBhcmVFbGVtZW50cyhhOiBULCBiOiBULCBmaWVsZDogU29ydGFibGVGaWVsZCk6IG51bWJlciB7XG4gICAgY29uc3QgdmFsdWVBID0gZXh0cmFjdFNvcnRWYWx1ZShhLCBmaWVsZCk7XG4gICAgY29uc3QgdmFsdWVCID0gZXh0cmFjdFNvcnRWYWx1ZShiLCBmaWVsZCk7XG5cbiAgICAvLyBIYW5kbGUgbnVsbC91bmRlZmluZWQgLSBzb3J0IGxhc3RcbiAgICBpZiAodmFsdWVBID09PSB1bmRlZmluZWQgJiYgdmFsdWVCID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBpZiAodmFsdWVBID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAxOyAvLyBhIGlzIG51bGwsIHNvcnQgYWZ0ZXIgYlxuICAgIH1cbiAgICBpZiAodmFsdWVCID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAtMTsgLy8gYiBpcyBudWxsLCBzb3J0IGEgYmVmb3JlIGJcbiAgICB9XG5cbiAgICAvLyBGaWVsZC1zcGVjaWZpYyBjb21wYXJpc29uXG4gICAgc3dpdGNoIChmaWVsZCkge1xuICAgICAgY2FzZSAnbmFtZSc6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVTdHJpbmdzKFN0cmluZyh2YWx1ZUEpLCBTdHJpbmcodmFsdWVCKSk7XG5cbiAgICAgIGNhc2UgJ2NyZWF0ZWQnOlxuICAgICAgY2FzZSAnbW9kaWZpZWQnOlxuICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlRGF0ZXMoU3RyaW5nKHZhbHVlQSksIFN0cmluZyh2YWx1ZUIpKTtcblxuICAgICAgY2FzZSAndmVyc2lvbic6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVWZXJzaW9ucyhTdHJpbmcodmFsdWVBKSwgU3RyaW5nKHZhbHVlQikpO1xuXG4gICAgICBjYXNlICdyZXRlbnRpb24nOlxuICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlTnVtYmVycyhOdW1iZXIodmFsdWVBKSwgTnVtYmVyKHZhbHVlQikpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBTaG91bGQgbmV2ZXIgcmVhY2ggaGVyZSBkdWUgdG8gdmFsaWRhdGlvblxuICAgICAgICBsb2dnZXIud2FybignU29ydFNlcnZpY2UuY29tcGFyZUVsZW1lbnRzJywge1xuICAgICAgICAgIG1lc3NhZ2U6ICdVbmtub3duIHNvcnQgZmllbGQsIHVzaW5nIHN0cmluZyBjb21wYXJpc29uJyxcbiAgICAgICAgICBmaWVsZCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVTdHJpbmdzKFN0cmluZyh2YWx1ZUEpLCBTdHJpbmcodmFsdWVCKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmUgdHdvIHN0cmluZ3MgY2FzZS1pbnNlbnNpdGl2ZWx5XG4gICAqXG4gICAqIFVzZXMgbG9jYWxlQ29tcGFyZSBmb3IgcHJvcGVyIFVuaWNvZGUgaGFuZGxpbmcgYW5kIHN0YWJsZSBvcmRlcmluZy5cbiAgICpcbiAgICogQHBhcmFtIGEgLSBGaXJzdCBzdHJpbmdcbiAgICogQHBhcmFtIGIgLSBTZWNvbmQgc3RyaW5nXG4gICAqIEByZXR1cm5zIENvbXBhcmlzb24gcmVzdWx0XG4gICAqL1xuICBwcml2YXRlIGNvbXBhcmVTdHJpbmdzKGE6IHN0cmluZywgYjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gYS5sb2NhbGVDb21wYXJlKGIsIHVuZGVmaW5lZCwgeyBzZW5zaXRpdml0eTogJ2Jhc2UnIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmUgdHdvIElTTyA4NjAxIGRhdGUgc3RyaW5ncyBhcyB0aW1lc3RhbXBzXG4gICAqXG4gICAqIENvbnZlcnRzIHRvIERhdGUgb2JqZWN0cyBhbmQgY29tcGFyZXMgbnVtZXJpY2FsbHkuXG4gICAqIEludmFsaWQgZGF0ZXMgYXJlIHRyZWF0ZWQgYXMgdW5kZWZpbmVkIChzb3J0ZWQgbGFzdCkuXG4gICAqXG4gICAqIEBwYXJhbSBhIC0gRmlyc3QgZGF0ZSBzdHJpbmdcbiAgICogQHBhcmFtIGIgLSBTZWNvbmQgZGF0ZSBzdHJpbmdcbiAgICogQHJldHVybnMgQ29tcGFyaXNvbiByZXN1bHRcbiAgICovXG4gIHByaXZhdGUgY29tcGFyZURhdGVzKGE6IHN0cmluZywgYjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBkYXRlQSA9IG5ldyBEYXRlKGEpLmdldFRpbWUoKTtcbiAgICBjb25zdCBkYXRlQiA9IG5ldyBEYXRlKGIpLmdldFRpbWUoKTtcblxuICAgIC8vIEhhbmRsZSBpbnZhbGlkIGRhdGVzXG4gICAgaWYgKGlzTmFOKGRhdGVBKSAmJiBpc05hTihkYXRlQikpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBpZiAoaXNOYU4oZGF0ZUEpKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgaWYgKGlzTmFOKGRhdGVCKSkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRlQSAtIGRhdGVCO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmUgdHdvIHNlbWFudGljIHZlcnNpb24gc3RyaW5ncyAoeC55LnogZm9ybWF0KVxuICAgKlxuICAgKiBDb21wYXJlcyBtYWpvciwgbWlub3IsIGFuZCBwYXRjaCB2ZXJzaW9ucyBudW1lcmljYWxseS5cbiAgICogSW52YWxpZCB2ZXJzaW9ucyBhcmUgc29ydGVkIHVzaW5nIHN0cmluZyBjb21wYXJpc29uLlxuICAgKlxuICAgKiBAcGFyYW0gYSAtIEZpcnN0IHZlcnNpb24gc3RyaW5nXG4gICAqIEBwYXJhbSBiIC0gU2Vjb25kIHZlcnNpb24gc3RyaW5nXG4gICAqIEByZXR1cm5zIENvbXBhcmlzb24gcmVzdWx0XG4gICAqL1xuICBwcml2YXRlIGNvbXBhcmVWZXJzaW9ucyhhOiBzdHJpbmcsIGI6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgcGFydHNBID0gdGhpcy5wYXJzZVZlcnNpb24oYSk7XG4gICAgY29uc3QgcGFydHNCID0gdGhpcy5wYXJzZVZlcnNpb24oYik7XG5cbiAgICAvLyBJZiBlaXRoZXIgdmVyc2lvbiBpcyBpbnZhbGlkLCBmYWxsIGJhY2sgdG8gc3RyaW5nIGNvbXBhcmlzb25cbiAgICBpZiAoIXBhcnRzQSB8fCAhcGFydHNCKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb21wYXJlU3RyaW5ncyhhLCBiKTtcbiAgICB9XG5cbiAgICAvLyBDb21wYXJlIG1ham9yIHZlcnNpb25cbiAgICBpZiAocGFydHNBLm1ham9yICE9PSBwYXJ0c0IubWFqb3IpIHtcbiAgICAgIHJldHVybiBwYXJ0c0EubWFqb3IgLSBwYXJ0c0IubWFqb3I7XG4gICAgfVxuXG4gICAgLy8gQ29tcGFyZSBtaW5vciB2ZXJzaW9uXG4gICAgaWYgKHBhcnRzQS5taW5vciAhPT0gcGFydHNCLm1pbm9yKSB7XG4gICAgICByZXR1cm4gcGFydHNBLm1pbm9yIC0gcGFydHNCLm1pbm9yO1xuICAgIH1cblxuICAgIC8vIENvbXBhcmUgcGF0Y2ggdmVyc2lvblxuICAgIHJldHVybiBwYXJ0c0EucGF0Y2ggLSBwYXJ0c0IucGF0Y2g7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgYSBzZW1hbnRpYyB2ZXJzaW9uIHN0cmluZyBpbnRvIGNvbXBvbmVudHNcbiAgICpcbiAgICogSGFuZGxlcyBmb3JtYXRzIGxpa2UgXCIxLjAuMFwiLCBcIjIuNS4zXCIsIGV0Yy5cbiAgICogUmV0dXJucyBudWxsIGZvciBpbnZhbGlkIHZlcnNpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gdmVyc2lvbiAtIFZlcnNpb24gc3RyaW5nIHRvIHBhcnNlXG4gICAqIEByZXR1cm5zIFBhcnNlZCB2ZXJzaW9uIGNvbXBvbmVudHMgb3IgbnVsbFxuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZVZlcnNpb24odmVyc2lvbjogc3RyaW5nKTogeyBtYWpvcjogbnVtYmVyOyBtaW5vcjogbnVtYmVyOyBwYXRjaDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICBjb25zdCBtYXRjaCA9IHZlcnNpb24ubWF0Y2goL14oXFxkKylcXC4oXFxkKylcXC4oXFxkKykvKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbWFqb3I6IHBhcnNlSW50KG1hdGNoWzFdLCAxMCksXG4gICAgICBtaW5vcjogcGFyc2VJbnQobWF0Y2hbMl0sIDEwKSxcbiAgICAgIHBhdGNoOiBwYXJzZUludChtYXRjaFszXSwgMTApLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29tcGFyZSB0d28gbnVtYmVyc1xuICAgKlxuICAgKiBIYW5kbGVzIE5hTiBieSB0cmVhdGluZyBhcyB1bmRlZmluZWQgKHNvcnRlZCBsYXN0KS5cbiAgICpcbiAgICogQHBhcmFtIGEgLSBGaXJzdCBudW1iZXJcbiAgICogQHBhcmFtIGIgLSBTZWNvbmQgbnVtYmVyXG4gICAqIEByZXR1cm5zIENvbXBhcmlzb24gcmVzdWx0XG4gICAqL1xuICBwcml2YXRlIGNvbXBhcmVOdW1iZXJzKGE6IG51bWJlciwgYjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAvLyBIYW5kbGUgTmFOXG4gICAgaWYgKGlzTmFOKGEpICYmIGlzTmFOKGIpKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgaWYgKGlzTmFOKGEpKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgaWYgKGlzTmFOKGIpKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGEgLSBiO1xuICB9XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"ValidationService.d.ts","sourceRoot":"","sources":["../../../src/services/validation/ValidationService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ValidationService.d.ts","sourceRoot":"","sources":["../../../src/services/validation/ValidationService.ts"],"names":[],"mappings":"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"}