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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. package/CHANGELOG.md +54 -17
  2. package/README.github.md +2 -2
  3. package/README.md +2 -2
  4. package/README.md.backup +284 -224
  5. package/README.npm.md +2 -2
  6. package/dist/cache/LRUCache.d.ts +3 -0
  7. package/dist/cache/LRUCache.d.ts.map +1 -1
  8. package/dist/cache/LRUCache.js +36 -26
  9. package/dist/config/env.d.ts +14 -4
  10. package/dist/config/env.d.ts.map +1 -1
  11. package/dist/config/env.js +20 -6
  12. package/dist/di/Container.d.ts +21 -0
  13. package/dist/di/Container.d.ts.map +1 -1
  14. package/dist/di/Container.js +250 -53
  15. package/dist/elements/BaseElement.d.ts.map +1 -1
  16. package/dist/elements/BaseElement.js +5 -10
  17. package/dist/elements/base/BaseElementManager.d.ts +22 -0
  18. package/dist/elements/base/BaseElementManager.d.ts.map +1 -1
  19. package/dist/elements/base/BaseElementManager.js +47 -7
  20. package/dist/elements/memories/Memory.d.ts +1 -0
  21. package/dist/elements/memories/Memory.d.ts.map +1 -1
  22. package/dist/elements/memories/Memory.js +12 -8
  23. package/dist/elements/memories/MemoryManager.d.ts.map +1 -1
  24. package/dist/elements/memories/MemoryManager.js +23 -42
  25. package/dist/elements/memories/MemorySearchIndex.js +2 -2
  26. package/dist/generated/version.d.ts +2 -2
  27. package/dist/generated/version.d.ts.map +1 -1
  28. package/dist/generated/version.js +3 -3
  29. package/dist/handlers/EnhancedIndexHandler.js +6 -6
  30. package/dist/handlers/element-crud/editElement.d.ts.map +1 -1
  31. package/dist/handlers/element-crud/editElement.js +39 -18
  32. package/dist/handlers/element-crud/helpers.d.ts.map +1 -1
  33. package/dist/handlers/element-crud/helpers.js +30 -3
  34. package/dist/handlers/element-crud/listElements.d.ts +2 -0
  35. package/dist/handlers/element-crud/listElements.d.ts.map +1 -1
  36. package/dist/handlers/element-crud/listElements.js +3 -1
  37. package/dist/handlers/mcp-aql/Gatekeeper.d.ts.map +1 -1
  38. package/dist/handlers/mcp-aql/Gatekeeper.js +23 -17
  39. package/dist/handlers/mcp-aql/GatekeeperTypes.d.ts +4 -0
  40. package/dist/handlers/mcp-aql/GatekeeperTypes.d.ts.map +1 -1
  41. package/dist/handlers/mcp-aql/GatekeeperTypes.js +1 -1
  42. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +33 -0
  43. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
  44. package/dist/handlers/mcp-aql/MCPAQLHandler.js +232 -23
  45. package/dist/handlers/mcp-aql/OperationRouter.d.ts.map +1 -1
  46. package/dist/handlers/mcp-aql/OperationRouter.js +13 -1
  47. package/dist/handlers/mcp-aql/OperationSchema.d.ts +7 -0
  48. package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
  49. package/dist/handlers/mcp-aql/OperationSchema.js +52 -1
  50. package/dist/handlers/mcp-aql/UnifiedEndpoint.d.ts.map +1 -1
  51. package/dist/handlers/mcp-aql/UnifiedEndpoint.js +4 -3
  52. package/dist/handlers/mcp-aql/evaluatePermission.d.ts +53 -0
  53. package/dist/handlers/mcp-aql/evaluatePermission.d.ts.map +1 -0
  54. package/dist/handlers/mcp-aql/evaluatePermission.js +132 -0
  55. package/dist/handlers/mcp-aql/policies/ElementPolicies.d.ts +17 -0
  56. package/dist/handlers/mcp-aql/policies/ElementPolicies.d.ts.map +1 -1
  57. package/dist/handlers/mcp-aql/policies/ElementPolicies.js +91 -1
  58. package/dist/handlers/mcp-aql/policies/ToolClassification.d.ts +5 -3
  59. package/dist/handlers/mcp-aql/policies/ToolClassification.d.ts.map +1 -1
  60. package/dist/handlers/mcp-aql/policies/ToolClassification.js +56 -2
  61. package/dist/handlers/mcp-aql/types.d.ts +22 -0
  62. package/dist/handlers/mcp-aql/types.d.ts.map +1 -1
  63. package/dist/handlers/mcp-aql/types.js +47 -1
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +3 -3
  66. package/dist/logging/LogHooks.js +11 -11
  67. package/dist/logging/LogManager.d.ts +0 -2
  68. package/dist/logging/LogManager.d.ts.map +1 -1
  69. package/dist/logging/LogManager.js +1 -3
  70. package/dist/logging/sinks/MemoryLogSink.d.ts +2 -0
  71. package/dist/logging/sinks/MemoryLogSink.d.ts.map +1 -1
  72. package/dist/logging/sinks/MemoryLogSink.js +12 -3
  73. package/dist/logging/types.d.ts +0 -2
  74. package/dist/logging/types.d.ts.map +1 -1
  75. package/dist/logging/types.js +1 -1
  76. package/dist/metrics/GatekeeperMetricsTracker.d.ts +32 -0
  77. package/dist/metrics/GatekeeperMetricsTracker.d.ts.map +1 -0
  78. package/dist/metrics/GatekeeperMetricsTracker.js +42 -0
  79. package/dist/metrics/MetricsManager.d.ts +47 -0
  80. package/dist/metrics/MetricsManager.d.ts.map +1 -0
  81. package/dist/metrics/MetricsManager.js +232 -0
  82. package/dist/metrics/OperationMetricsTracker.d.ts +32 -0
  83. package/dist/metrics/OperationMetricsTracker.d.ts.map +1 -0
  84. package/dist/metrics/OperationMetricsTracker.js +53 -0
  85. package/dist/metrics/collectors/DefaultElementProviderCollector.d.ts +27 -0
  86. package/dist/metrics/collectors/DefaultElementProviderCollector.d.ts.map +1 -0
  87. package/dist/metrics/collectors/DefaultElementProviderCollector.js +69 -0
  88. package/dist/metrics/collectors/FileLockManagerCollector.d.ts +16 -0
  89. package/dist/metrics/collectors/FileLockManagerCollector.d.ts.map +1 -0
  90. package/dist/metrics/collectors/FileLockManagerCollector.js +51 -0
  91. package/dist/metrics/collectors/GatekeeperMetricsCollector.d.ts +16 -0
  92. package/dist/metrics/collectors/GatekeeperMetricsCollector.d.ts.map +1 -0
  93. package/dist/metrics/collectors/GatekeeperMetricsCollector.js +76 -0
  94. package/dist/metrics/collectors/LRUCacheCollector.d.ts +18 -0
  95. package/dist/metrics/collectors/LRUCacheCollector.d.ts.map +1 -0
  96. package/dist/metrics/collectors/LRUCacheCollector.js +95 -0
  97. package/dist/metrics/collectors/OperationMetricsCollector.d.ts +16 -0
  98. package/dist/metrics/collectors/OperationMetricsCollector.d.ts.map +1 -0
  99. package/dist/metrics/collectors/OperationMetricsCollector.js +80 -0
  100. package/dist/metrics/collectors/OperationalTelemetryCollector.d.ts +17 -0
  101. package/dist/metrics/collectors/OperationalTelemetryCollector.d.ts.map +1 -0
  102. package/dist/metrics/collectors/OperationalTelemetryCollector.js +26 -0
  103. package/dist/metrics/collectors/PerformanceMonitorCollector.d.ts +14 -0
  104. package/dist/metrics/collectors/PerformanceMonitorCollector.d.ts.map +1 -0
  105. package/dist/metrics/collectors/PerformanceMonitorCollector.js +141 -0
  106. package/dist/metrics/collectors/SecurityMonitorCollector.d.ts +21 -0
  107. package/dist/metrics/collectors/SecurityMonitorCollector.d.ts.map +1 -0
  108. package/dist/metrics/collectors/SecurityMonitorCollector.js +56 -0
  109. package/dist/metrics/collectors/SecurityTelemetryCollector.d.ts +15 -0
  110. package/dist/metrics/collectors/SecurityTelemetryCollector.d.ts.map +1 -0
  111. package/dist/metrics/collectors/SecurityTelemetryCollector.js +112 -0
  112. package/dist/metrics/collectors/TriggerMetricsTrackerCollector.d.ts +16 -0
  113. package/dist/metrics/collectors/TriggerMetricsTrackerCollector.d.ts.map +1 -0
  114. package/dist/metrics/collectors/TriggerMetricsTrackerCollector.js +26 -0
  115. package/dist/metrics/collectors/index.d.ts +11 -0
  116. package/dist/metrics/collectors/index.d.ts.map +1 -0
  117. package/dist/metrics/collectors/index.js +11 -0
  118. package/dist/metrics/sinks/MemoryMetricsSink.d.ts +22 -0
  119. package/dist/metrics/sinks/MemoryMetricsSink.d.ts.map +1 -0
  120. package/dist/metrics/sinks/MemoryMetricsSink.js +121 -0
  121. package/dist/metrics/types.d.ts +98 -0
  122. package/dist/metrics/types.d.ts.map +1 -0
  123. package/dist/metrics/types.js +24 -0
  124. package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -1
  125. package/dist/portfolio/DefaultElementProvider.js +1 -7
  126. package/dist/portfolio/EnhancedIndexManager.d.ts.map +1 -1
  127. package/dist/portfolio/EnhancedIndexManager.js +18 -18
  128. package/dist/portfolio/NLPScoringManager.d.ts.map +1 -1
  129. package/dist/portfolio/NLPScoringManager.js +5 -9
  130. package/dist/portfolio/PortfolioIndexManager.js +2 -2
  131. package/dist/portfolio/RelationshipManager.js +2 -2
  132. package/dist/portfolio/VerbTriggerManager.d.ts.map +1 -1
  133. package/dist/portfolio/VerbTriggerManager.js +5 -19
  134. package/dist/portfolio/config/IndexConfig.d.ts.map +1 -1
  135. package/dist/portfolio/config/IndexConfig.js +1 -12
  136. package/dist/portfolio/enhanced-index/ElementDefinitionBuilder.d.ts.map +1 -1
  137. package/dist/portfolio/enhanced-index/ElementDefinitionBuilder.js +3 -15
  138. package/dist/portfolio/enhanced-index/SemanticRelationshipService.d.ts.map +1 -1
  139. package/dist/portfolio/enhanced-index/SemanticRelationshipService.js +2 -16
  140. package/dist/portfolio/types/RelationshipTypes.d.ts.map +1 -1
  141. package/dist/portfolio/types/RelationshipTypes.js +3 -17
  142. package/dist/security/audit/config/suppressions.d.ts.map +1 -1
  143. package/dist/security/audit/config/suppressions.js +36 -8
  144. package/dist/security/constants.d.ts.map +1 -1
  145. package/dist/security/constants.js +10 -6
  146. package/dist/security/fileLockManager.d.ts.map +1 -1
  147. package/dist/security/fileLockManager.js +8 -6
  148. package/dist/security/secureYamlParser.d.ts.map +1 -1
  149. package/dist/security/secureYamlParser.js +1 -13
  150. package/dist/security/securityMonitor.d.ts +2 -1
  151. package/dist/security/securityMonitor.d.ts.map +1 -1
  152. package/dist/security/securityMonitor.js +14 -3
  153. package/dist/security/telemetry/SecurityTelemetry.d.ts +16 -0
  154. package/dist/security/telemetry/SecurityTelemetry.d.ts.map +1 -1
  155. package/dist/security/telemetry/SecurityTelemetry.js +30 -2
  156. package/dist/security/tokenManager.d.ts +3 -0
  157. package/dist/security/tokenManager.d.ts.map +1 -1
  158. package/dist/security/tokenManager.js +13 -5
  159. package/dist/security/validation/BackgroundValidator.d.ts.map +1 -1
  160. package/dist/security/validation/BackgroundValidator.js +7 -7
  161. package/dist/server/startup.d.ts.map +1 -1
  162. package/dist/server/startup.js +8 -24
  163. package/dist/server/tools/MCPAQLTools.js +8 -1
  164. package/dist/services/ActivationStore.d.ts.map +1 -1
  165. package/dist/services/ActivationStore.js +9 -3
  166. package/dist/services/FileWatchService.d.ts +1 -0
  167. package/dist/services/FileWatchService.d.ts.map +1 -1
  168. package/dist/services/FileWatchService.js +83 -48
  169. package/dist/services/MetadataService.d.ts.map +1 -1
  170. package/dist/services/MetadataService.js +7 -2
  171. package/dist/services/PolicyExportService.d.ts.map +1 -1
  172. package/dist/services/PolicyExportService.js +8 -1
  173. package/dist/services/query/ElementQueryService.d.ts.map +1 -1
  174. package/dist/services/query/ElementQueryService.js +1 -41
  175. package/dist/services/query/PaginationService.d.ts.map +1 -1
  176. package/dist/services/query/PaginationService.js +1 -14
  177. package/dist/services/query/SortService.d.ts.map +1 -1
  178. package/dist/services/query/SortService.js +1 -6
  179. package/dist/services/validation/ValidationService.d.ts.map +1 -1
  180. package/dist/services/validation/ValidationService.js +3 -8
  181. package/dist/storage/ElementStorageLayer.d.ts.map +1 -1
  182. package/dist/storage/ElementStorageLayer.js +5 -2
  183. package/dist/storage/MemoryStorageLayer.d.ts.map +1 -1
  184. package/dist/storage/MemoryStorageLayer.js +5 -2
  185. package/dist/telemetry/OperationalTelemetry.js +2 -2
  186. package/dist/utils/EventDeduplicator.d.ts +44 -0
  187. package/dist/utils/EventDeduplicator.d.ts.map +1 -0
  188. package/dist/utils/EventDeduplicator.js +93 -0
  189. package/dist/utils/FileLock.d.ts.map +1 -1
  190. package/dist/utils/FileLock.js +1 -9
  191. package/dist/utils/PerformanceMonitor.d.ts.map +1 -1
  192. package/dist/utils/PerformanceMonitor.js +5 -5
  193. package/dist/utils/SlidingWindowRateLimiter.d.ts +13 -0
  194. package/dist/utils/SlidingWindowRateLimiter.d.ts.map +1 -0
  195. package/dist/utils/SlidingWindowRateLimiter.js +23 -0
  196. package/dist/web/console/IngestRoutes.d.ts +84 -0
  197. package/dist/web/console/IngestRoutes.d.ts.map +1 -0
  198. package/dist/web/console/IngestRoutes.js +252 -0
  199. package/dist/web/console/LeaderElection.d.ts +89 -0
  200. package/dist/web/console/LeaderElection.d.ts.map +1 -0
  201. package/dist/web/console/LeaderElection.js +205 -0
  202. package/dist/web/console/LeaderForwardingSink.d.ts +61 -0
  203. package/dist/web/console/LeaderForwardingSink.d.ts.map +1 -0
  204. package/dist/web/console/LeaderForwardingSink.js +197 -0
  205. package/dist/web/console/SessionNames.d.ts +46 -0
  206. package/dist/web/console/SessionNames.d.ts.map +1 -0
  207. package/dist/web/console/SessionNames.js +257 -0
  208. package/dist/web/console/UnifiedConsole.d.ts +64 -0
  209. package/dist/web/console/UnifiedConsole.d.ts.map +1 -0
  210. package/dist/web/console/UnifiedConsole.js +119 -0
  211. package/dist/web/contentPipeline.d.ts +58 -0
  212. package/dist/web/contentPipeline.d.ts.map +1 -0
  213. package/dist/web/contentPipeline.js +112 -0
  214. package/dist/web/portDiscovery.d.ts +58 -0
  215. package/dist/web/portDiscovery.d.ts.map +1 -0
  216. package/dist/web/portDiscovery.js +143 -0
  217. package/dist/web/public/app.js +148 -60
  218. package/dist/web/public/logs.js +638 -0
  219. package/dist/web/public/metrics.js +682 -0
  220. package/dist/web/public/permissions.js +394 -0
  221. package/dist/web/public/sessions.js +369 -0
  222. package/dist/web/routes/healthRoutes.d.ts +16 -0
  223. package/dist/web/routes/healthRoutes.d.ts.map +1 -0
  224. package/dist/web/routes/healthRoutes.js +29 -0
  225. package/dist/web/routes/logRoutes.d.ts +18 -0
  226. package/dist/web/routes/logRoutes.d.ts.map +1 -0
  227. package/dist/web/routes/logRoutes.js +126 -0
  228. package/dist/web/routes/metricsRoutes.d.ts +17 -0
  229. package/dist/web/routes/metricsRoutes.d.ts.map +1 -0
  230. package/dist/web/routes/metricsRoutes.js +90 -0
  231. package/dist/web/routes/permissionRoutes.d.ts +16 -0
  232. package/dist/web/routes/permissionRoutes.d.ts.map +1 -0
  233. package/dist/web/routes/permissionRoutes.js +133 -0
  234. package/dist/web/routes.d.ts.map +1 -1
  235. package/dist/web/routes.js +309 -339
  236. package/dist/web/server.d.ts +21 -1
  237. package/dist/web/server.d.ts.map +1 -1
  238. package/dist/web/server.js +42 -4
  239. package/dist/web/sinks/WebSSELogSink.d.ts +15 -0
  240. package/dist/web/sinks/WebSSELogSink.d.ts.map +1 -0
  241. package/dist/web/sinks/WebSSELogSink.js +22 -0
  242. package/dist/web/sinks/WebSSEMetricsSink.d.ts +16 -0
  243. package/dist/web/sinks/WebSSEMetricsSink.d.ts.map +1 -0
  244. package/dist/web/sinks/WebSSEMetricsSink.js +23 -0
  245. package/package.json +2 -2
  246. package/server.json +2 -2
  247. package/dist/constants/version.d.ts +0 -3
  248. package/dist/constants/version.d.ts.map +0 -1
  249. package/dist/constants/version.js +0 -4
  250. package/dist/logging/sinks/SSELogSink.d.ts +0 -35
  251. package/dist/logging/sinks/SSELogSink.d.ts.map +0 -1
  252. package/dist/logging/sinks/SSELogSink.js +0 -181
  253. package/dist/logging/viewer/viewerHtml.d.ts +0 -8
  254. package/dist/logging/viewer/viewerHtml.d.ts.map +0 -1
  255. package/dist/logging/viewer/viewerHtml.js +0 -204
  256. package/dist/web/public/public/app.js +0 -1878
@@ -469,18 +469,32 @@ export async function editElement(context, args, validationService) {
469
469
  const updateObj = {};
470
470
  const unrecognizedFieldWarnings = [];
471
471
  const collectionWarnings = [];
472
+ const appliedFields = [];
473
+ const skippedFields = [];
472
474
  // Fields handled by dedicated branches (not metadata routing)
473
475
  const specialRouteFields = new Set(['instructions', 'content', 'elements', 'metadata', 'entries', 'version']);
476
+ // Content context map shared by instructions and content validation branches
477
+ const contentContextMap = {
478
+ [ElementType.AGENT]: 'agent',
479
+ [ElementType.SKILL]: 'skill',
480
+ [ElementType.TEMPLATE]: 'template',
481
+ [ElementType.PERSONA]: 'persona',
482
+ [ElementType.MEMORY]: 'memory',
483
+ };
474
484
  for (const [key, value] of Object.entries(input)) {
475
485
  // Skip dangerous properties
476
486
  if (DANGEROUS_PROPERTIES.includes(key)) {
487
+ skippedFields.push(key);
477
488
  continue;
478
489
  }
479
490
  // Skip read-only fields
480
491
  if (READ_ONLY_FIELDS.has(key)) {
481
492
  logger.warn(`[editElement] Skipping read-only field: ${key}`);
493
+ skippedFields.push(key);
482
494
  continue;
483
495
  }
496
+ // Every branch below applies the field — track once at the end
497
+ let fieldApplied = true;
484
498
  // Map known metadata fields automatically (type-specific)
485
499
  if (metadataFields.has(key) && !specialRouteFields.has(key)) {
486
500
  if (!updateObj.metadata) {
@@ -515,13 +529,6 @@ export async function editElement(context, args, validationService) {
515
529
  }
516
530
  else if (key === 'instructions' && typeof value === 'string') {
517
531
  // Issue #602 resolved: 'instructions' is a first-class field (behavioral directives)
518
- const contentContextMap = {
519
- [ElementType.AGENT]: 'agent',
520
- [ElementType.SKILL]: 'skill',
521
- [ElementType.TEMPLATE]: 'template',
522
- [ElementType.PERSONA]: 'persona',
523
- [ElementType.MEMORY]: 'memory',
524
- };
525
532
  const contentValidation = ContentValidator.validateAndSanitize(value, {
526
533
  maxLength: SECURITY_LIMITS.MAX_CONTENT_LENGTH,
527
534
  contentContext: contentContextMap[normalizedType]
@@ -539,13 +546,6 @@ export async function editElement(context, args, validationService) {
539
546
  }
540
547
  else if (key === 'content' && typeof value === 'string') {
541
548
  // Issue #585/#602: Handle content updates (reference material)
542
- const contentContextMap = {
543
- [ElementType.AGENT]: 'agent',
544
- [ElementType.SKILL]: 'skill',
545
- [ElementType.TEMPLATE]: 'template',
546
- [ElementType.PERSONA]: 'persona',
547
- [ElementType.MEMORY]: 'memory',
548
- };
549
549
  const contentValidation = ContentValidator.validateAndSanitize(value, {
550
550
  maxLength: SECURITY_LIMITS.MAX_CONTENT_LENGTH,
551
551
  contentContext: contentContextMap[normalizedType]
@@ -554,7 +554,11 @@ export async function editElement(context, args, validationService) {
554
554
  // Set content on the element directly (all types now have this property)
555
555
  element.content = sanitizedContent;
556
556
  }
557
- else if (!specialRouteFields.has(key)) {
557
+ else if (specialRouteFields.has(key)) {
558
+ // Special route field — handled elsewhere, skip
559
+ fieldApplied = false;
560
+ }
561
+ else {
558
562
  // Issue #565: Field not in type-specific metadata set and not a special route —
559
563
  // still route to updateObj for backward compat, but warn that it may not persist
560
564
  updateObj[key] = value;
@@ -565,6 +569,9 @@ export async function editElement(context, args, validationService) {
565
569
  field: key,
566
570
  });
567
571
  }
572
+ if (fieldApplied) {
573
+ appliedFields.push(key);
574
+ }
568
575
  }
569
576
  // Deep merge the update into the element with security options
570
577
  const elementData = element;
@@ -630,7 +637,17 @@ export async function editElement(context, args, validationService) {
630
637
  }
631
638
  const label = getElementTypeLabel(normalizedType);
632
639
  const displayName = element.metadata?.name || name;
633
- const updatedFields = Object.keys(input).join(', ');
640
+ const updatedFields = appliedFields.join(', ');
641
+ // Issue #1656: If all fields were silently skipped, report honestly
642
+ if (appliedFields.length === 0 && skippedFields.length > 0) {
643
+ return {
644
+ content: [{
645
+ type: 'text',
646
+ text: `⚠️ No fields applied to ${label} '${displayName}'. ` +
647
+ `Skipped: ${skippedFields.join(', ')} (dangerous or read-only fields are not editable).`
648
+ }]
649
+ };
650
+ }
634
651
  // Issue #565: Include warnings for unrecognized fields in response
635
652
  let unrecognizedWarningText = '';
636
653
  if (unrecognizedFieldWarnings.length > 0) {
@@ -651,10 +668,14 @@ export async function editElement(context, args, validationService) {
651
668
  lines.push('');
652
669
  collectionWarningText = lines.join('\n');
653
670
  }
671
+ // Issue #1656: Report skipped fields so LLMs don't assume they were applied
672
+ const skippedText = skippedFields.length > 0
673
+ ? `\n⚠️ Skipped: ${skippedFields.join(', ')} (dangerous or read-only)`
674
+ : '';
654
675
  return {
655
676
  content: [{
656
677
  type: 'text',
657
- text: `${warningText}${resolutionWarningText}${unrecognizedWarningText}${collectionWarningText}✅ Updated ${label} '${displayName}' - fields: ${updatedFields}`
678
+ text: `${warningText}${resolutionWarningText}${unrecognizedWarningText}${collectionWarningText}✅ Updated ${label} '${displayName}' - fields: ${updatedFields}${skippedText}`
658
679
  }]
659
680
  };
660
681
  }
@@ -755,4 +776,4 @@ function autoIncrementVersion(element) {
755
776
  logger.error('Failed to auto-increment version', { error });
756
777
  }
757
778
  }
758
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdEVsZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaGFuZGxlcnMvZWxlbWVudC1jcnVkL2VkaXRFbGVtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUtsRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFaEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBNEIsTUFBTSxnREFBZ0QsQ0FBQztBQUM3RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNFLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsMkJBQTJCLEVBQzNCLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsb0JBQW9CLEVBRXBCLHlCQUF5QixFQUN6QiwrQkFBK0IsRUFDL0IsNkJBQTZCLEVBQzdCLCtCQUErQixFQUNoQyxNQUFNLGNBQWMsQ0FBQztBQWlDdEIsZ0VBQWdFO0FBQ2hFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDL0IsSUFBSTtJQUNKLE1BQU07SUFDTixVQUFVO0lBQ1YsVUFBVTtJQUNWLFNBQVM7SUFDVCxVQUFVO0NBQ1gsQ0FBQyxDQUFDO0FBRUg7Ozs7Ozs7R0FPRztBQUNILE1BQU0sZ0JBQWdCLEdBSWpCO0lBQ0gsdUNBQXVDO0lBQ3ZDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDdEUsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUMxRSxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ3pFLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQy9ELGFBQWEsRUFBRSxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDL0UsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDbkUsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDNUQsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDbEUsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDOUQsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDN0Qsc0VBQXNFO0lBQ3RFLFNBQVMsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQzVJLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQ3hJLFNBQVMsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRTtJQUN0RyxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxD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QyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUU7SUFDeEUsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRTtJQUNuRSxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRTtJQUM3RixRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO0lBQ3JFLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUU7SUFDbkUsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRTtJQUVqRSxnQkFBZ0I7SUFDaEIsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxZQUFZLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUU7SUFDM0csV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxZQUFZLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUU7SUFDNUcsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFB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RUQsMkJBQTJCO1FBQzNCLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50VHlwZSB9IGZyb20gJy4uLy4uL3BvcnRmb2xpby9Qb3J0Zm9saW9NYW5hZ2VyLmpzJztcbmltcG9ydCB7IFNraWxsIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvc2tpbGxzL1NraWxsLmpzJztcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvdGVtcGxhdGVzL1RlbXBsYXRlLmpzJztcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvYWdlbnRzL0FnZW50LmpzJztcbmltcG9ydCB7IE1lbW9yeSB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL21lbW9yaWVzL01lbW9yeS5qcyc7XG5pbXBvcnQgeyBFbnNlbWJsZSB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL2Vuc2VtYmxlcy9FbnNlbWJsZS5qcyc7XG5pbXBvcnQgdHlwZSB7IEVuc2VtYmxlRWxlbWVudElucHV0IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvZW5zZW1ibGVzL3R5cGVzLmpzJztcbmltcG9ydCB7IHJlc29sdmVFbGVtZW50VHlwZXMgfSBmcm9tICcuLi8uLi91dGlscy9lbGVtZW50VHlwZVJlc29sdmVyLmpzJztcbmltcG9ydCB7IEVsZW1lbnRDcnVkQ29udGV4dCB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVNZW1vcnlJZCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL21lbW9yaWVzL3V0aWxzLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBub3JtYWxpemVWZXJzaW9uIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvQmFzZUVsZW1lbnQuanMnO1xuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UsIHR5cGUgVmFsaWRhdGlvbkZpZWxkVHlwZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24vVmFsaWRhdGlvblNlcnZpY2UuanMnO1xuaW1wb3J0IHsgU0VDVVJJVFlfTElNSVRTIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IENvbnRlbnRWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9jb250ZW50VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IEVsZW1lbnROb3RGb3VuZEVycm9yIH0gZnJvbSAnLi4vLi4vdXRpbHMvRXJyb3JIYW5kbGVyLmpzJztcbmltcG9ydCB7IGRlZXBNZXJnZSwgREFOR0VST1VTX1BST1BFUlRJRVMgfSBmcm9tICcuLi8uLi91dGlscy9kZWVwTWVyZ2UuanMnO1xuaW1wb3J0IHtcbiAgbm9ybWFsaXplRWxlbWVudFR5cGVJbnB1dCxcbiAgZm9ybWF0VmFsaWRFbGVtZW50VHlwZXNMaXN0LFxuICBnZXRFbGVtZW50RmlsZW5hbWUsXG4gIGdldEVsZW1lbnRUeXBlTGFiZWwsXG4gIHJlc29sdmVFbGVtZW50QnlOYW1lLFxuICBFbGVtZW50TWFuYWdlck9wZXJhdGlvbnMsXG4gIEtOT1dOX01FVEFEQVRBX1BST1BFUlRJRVMsXG4gIGRldGVjdFVua25vd25NZXRhZGF0YVByb3BlcnRpZXMsXG4gIGZvcm1hdFVua25vd25Qcm9wZXJ0eVdhcm5pbmdzLFxuICBmb3JtYXRFbGVtZW50UmVzb2x1dGlvbldhcm5pbmdzXG59IGZyb20gJy4vaGVscGVycy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlc29sdmVFbGVtZW50VHlwZXNSZXN1bHQgfSBmcm9tICcuLi8uLi91dGlscy9lbGVtZW50VHlwZVJlc29sdmVyLmpzJztcblxudHlwZSBFbGVtZW50TWFuYWdlcldpdGhQZXJzaXN0ZW5jZTxUPiA9IEVsZW1lbnRNYW5hZ2VyT3BlcmF0aW9uczxUPiAmIHtcbiAgc2F2ZShlbGVtZW50OiBULCBmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbiAgZGVsZXRlPyhmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbn07XG5cbi8qKlxuICogR3JhcGhRTC1hbGlnbmVkIGlucHV0IGZvciBlZGl0aW5nIGVsZW1lbnRzLlxuICogVXNlcyBuZXN0ZWQgb2JqZWN0cyAobGlrZSBjcmVhdGVfZWxlbWVudCkgaW5zdGVhZCBvZiBNb25nb0RCLXN0eWxlIGRvdCBub3RhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVXBkYXRlIGRlc2NyaXB0aW9uIGFuZCBuZXN0ZWQgbWV0YWRhdGFcbiAqIHtcbiAqICAgbmFtZTogXCJteS1za2lsbFwiLFxuICogICB0eXBlOiBcInNraWxsc1wiLFxuICogICBpbnB1dDoge1xuICogICAgIGRlc2NyaXB0aW9uOiBcIlVwZGF0ZWQgZGVzY3JpcHRpb25cIixcbiAqICAgICBtZXRhZGF0YToge1xuICogICAgICAgdHJpZ2dlcnM6IFtcImNvZGVcIiwgXCJyZXZpZXdcIl0sXG4gKiAgICAgICBzZXR0aW5nczogeyB0aGVtZTogXCJkYXJrXCIgfVxuICogICAgIH1cbiAqICAgfVxuICogfVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRFbGVtZW50QXJncyB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICAvKiogTmVzdGVkIGlucHV0IG9iamVjdCAtIGZpZWxkcyBhcmUgZGVlcC1tZXJnZWQgd2l0aCBleGlzdGluZyBlbGVtZW50ICovXG4gIGlucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLy8gUmVhZC1vbmx5IGZpZWxkcyB0aGF0IGNhbm5vdCBiZSBtb2RpZmllZCB0aHJvdWdoIHRoZSBlZGl0IEFQSVxuY29uc3QgUkVBRF9PTkxZX0ZJRUxEUyA9IG5ldyBTZXQoW1xuICAnaWQnLFxuICAndHlwZScsXG4gICdmaWxlUGF0aCcsXG4gICdmaWxlbmFtZScsXG4gICdfc3RhdHVzJyxcbiAgJ19pc0RpcnR5J1xuXSk7XG5cbi8qKlxuICogSXNzdWUgIzY2MjogU3lzdGVtYXRpYyBmaWVsZCB0eXBlIHZhbGlkYXRpb24gYXQgdGhlIGVkaXRFbGVtZW50IGJvdW5kYXJ5LlxuICpcbiAqIERlZmluZXMgZXhwZWN0ZWQgdHlwZXMgZm9yIGtub3duIG1ldGFkYXRhIGZpZWxkcyBhY3Jvc3MgYWxsIGVsZW1lbnQgdHlwZXMuXG4gKiBQcmV2ZW50cyBzaWxlbnQgZGF0YSBjb3JydXB0aW9uIHdoZW4gTExNcyBzZW5kIHdyb25nIHR5cGVzIChlLmcuLCBkaWN0IGluc3RlYWQgb2YgYXJyYXkpLlxuICpcbiAqIEtleTogZmllbGQgbmFtZSwgVmFsdWU6IHsgZXhwZWN0ZWQ6IHR5cGUgZGVzY3JpcHRpb24sIGNoZWNrOiB2YWxpZGF0b3IgZnVuY3Rpb24gfVxuICovXG5jb25zdCBGSUVMRF9UWVBFX1JVTEVTOiBSZWNvcmQ8c3RyaW5nLCB7XG4gIGV4cGVjdGVkOiBzdHJpbmc7XG4gIGNoZWNrOiAodmFsdWU6IHVua25vd24pID0+IGJvb2xlYW47XG4gIGVsZW1lbnRUeXBlcz86IEVsZW1lbnRUeXBlW107XG59PiA9IHtcbiAgLy8gQXJyYXkgZmllbGRzIChhY3Jvc3MgbXVsdGlwbGUgdHlwZXMpXG4gIHRhZ3M6IHsgZXhwZWN0ZWQ6ICdhcnJheSBvZiBzdHJpbmdzJywgY2hlY2s6ICh2KSA9PiBBcnJheS5pc0FycmF5KHYpIH0sXG4gIHRyaWdnZXJzOiB7IGV4cGVjdGVkOiAnYXJyYXkgb2Ygc3RyaW5ncycsIGNoZWNrOiAodikgPT4gQXJyYXkuaXNBcnJheSh2KSB9LFxuICBkb21haW5zOiB7IGV4cGVjdGVkOiAnYXJyYXkgb2Ygc3RyaW5ncycsIGNoZWNrOiAodikgPT4gQXJyYXkuaXNBcnJheSh2KSB9LFxuICBleGFtcGxlczogeyBleHBlY3RlZDogJ2FycmF5JywgY2hlY2s6ICh2KSA9PiBBcnJheS5pc0FycmF5KHYpIH0sXG4gIHByZXJlcXVpc2l0ZXM6IHsgZXhwZWN0ZWQ6ICdhcnJheSBvZiBzdHJpbmdzJywgY2hlY2s6ICh2KSA9PiBBcnJheS5pc0FycmF5KHYpIH0sXG4gIGNhcGFiaWxpdGllczogeyBleHBlY3RlZDogJ2FycmF5JywgY2hlY2s6ICh2KSA9PiBBcnJheS5pc0FycmF5KHYpIH0sXG4gIGdvYWxzOiB7IGV4cGVjdGVkOiAnYXJyYXknLCBjaGVjazogKHYpID0+IEFycmF5LmlzQXJyYXkodikgfSxcbiAgY29uc3RyYWludHM6IHsgZXhwZWN0ZWQ6ICdhcnJheScsIGNoZWNrOiAodikgPT4gQXJyYXkuaXNBcnJheSh2KSB9LFxuICBhY3Rpb25zOiB7IGV4cGVjdGVkOiAnYXJyYXknLCBjaGVjazogKHYpID0+IEFycmF5LmlzQXJyYXkodikgfSxcbiAgc2tpbGxzOiB7IGV4cGVjdGVkOiAnYXJyYXknLCBjaGVjazogKHYpID0+IEFycmF5LmlzQXJyYXkodikgfSxcbiAgLy8gSXNzdWUgIzcyNDogYWN0aXZhdGVzIGFuZCB0b29scyBhcmUgb2JqZWN0cyBmb3IgYWdlbnRzIChub3QgYXJyYXlzKVxuICBhY3RpdmF0ZXM6IHsgZXhwZWN0ZWQ6ICdvYmplY3QnLCBjaGVjazogKHYpID0+IHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiB2ICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHYpLCBlbGVtZW50VHlwZXM6IFtFbGVtZW50VHlwZS5BR0VOVF0gfSxcbiAgdG9vbHM6IHsgZXhwZWN0ZWQ6ICdvYmplY3QnLCBjaGVjazogKHYpID0+IHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiB2ICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHYpLCBlbGVtZW50VHlwZXM6IFtFbGVtZW50VHlwZS5BR0VOVF0gfSxcbiAgdmFyaWFibGVzOiB7IGV4cGVjdGVkOiAnYXJyYXknLCBjaGVjazogKHYpID0+IEFycmF5LmlzQXJyYXkodiksIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLlRFTVBMQVRFXSB9LFxuICBlbnRyaWVzOiB7IGV4cGVjdGVkOiAnYXJyYXknLCBjaGVjazogKHYpID0+IEFycmF5LmlzQXJyYXkodiksIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLk1FTU9SWV0gfSxcbiAgLy8gZWxlbWVudHMgaGFuZGxlZCBzZXBhcmF0ZWx5IGJ5IHZhbGlkYXRlQW5kTm9ybWFsaXplRW5zZW1ibGVFbGVtZW50cyAoYWNjZXB0cyBkaWN0IHRvbylcblxuICAvLyBPYmplY3QgZmllbGRzXG4gIGdvYWw6IHsgZXhwZWN0ZWQ6ICdvYmplY3QnLCBjaGVjazogKHYpID0+IHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiB2ICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHYpLCBlbGVtZW50VHlwZXM6IFtFbGVtZW50VHlwZS5BR0VOVF0gfSxcbiAgYXV0b25vbXk6IHsgZXhwZWN0ZWQ6ICdvYmplY3QnLCBjaGVjazogKHYpID0+IHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiB2ICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHYpLCBlbGVtZW50VHlwZXM6IFtFbGVtZW50VHlwZS5BR0VOVF0gfSxcbiAgcmVzaWxpZW5jZTogeyBleHBlY3RlZDogJ29iamVjdCcsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodiksIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLkFHRU5UXSB9LFxuICBnYXRla2VlcGVyOiB7IGV4cGVjdGVkOiAnb2JqZWN0JywgY2hlY2s6ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2KSB9LFxuICByZXRlbnRpb25Qb2xpY3k6IHsgZXhwZWN0ZWQ6ICdvYmplY3QnLCBjaGVjazogKHYpID0+IHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiB2ICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHYpLCBlbGVtZW50VHlwZXM6IFtFbGVtZW50VHlwZS5NRU1PUlldIH0sXG4gIHJldGVudGlvbl9wb2xpY3k6IHsgZXhwZWN0ZWQ6ICdvYmplY3QnLCBjaGVjazogKHYpID0+IHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiB2ICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHYpLCBlbGVtZW50VHlwZXM6IFtFbGVtZW50VHlwZS5NRU1PUlldIH0sXG5cbiAgLy8gU3RyaW5nIGZpZWxkc1xuICAvLyBJc3N1ZSAjNzI0OiBzeXN0ZW1Qcm9tcHQgd2FzIG1pc3NpbmcgZnJvbSBmaWVsZCB0eXBlIHJ1bGVzLlxuICAvLyBCb3RoIGNhbWVsQ2FzZSBhbmQgc25ha2VfY2FzZSB2YXJpYW50cyBhY2NlcHRlZCBiZWNhdXNlIExMTXMgZnJlcXVlbnRseVxuICAvLyBwYXNzIHNuYWtlX2Nhc2Uga2V5czsgbm9ybWFsaXphdGlvbiB0byBjYW1lbENhc2UgaGFwcGVucyBkb3duc3RyZWFtIGluXG4gIC8vIEFnZW50TWFuYWdlci5wYXJzZU1ldGFkYXRhKCkgKElzc3VlICM3MjIpLlxuICBzeXN0ZW1Qcm9tcHQ6IHsgZXhwZWN0ZWQ6ICdzdHJpbmcnLCBjaGVjazogKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJywgZWxlbWVudFR5cGVzOiBbRWxlbWVudFR5cGUuQUdFTlRdIH0sXG4gIHN5c3RlbV9wcm9tcHQ6IHsgZXhwZWN0ZWQ6ICdzdHJpbmcnLCBjaGVjazogKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJywgZWxlbWVudFR5cGVzOiBbRWxlbWVudFR5cGUuQUdFTlRdIH0sXG4gIG5hbWU6IHsgZXhwZWN0ZWQ6ICdzdHJpbmcnLCBjaGVjazogKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyB9LFxuICBkZXNjcmlwdGlvbjogeyBleHBlY3RlZDogJ3N0cmluZycsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnIH0sXG4gIGF1dGhvcjogeyBleHBlY3RlZDogJ3N0cmluZycsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnIH0sXG4gIHZlcnNpb246IHsgZXhwZWN0ZWQ6ICdzdHJpbmcnLCBjaGVjazogKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdiA9PT0gJ251bWJlcicgfSxcbiAgY2F0ZWdvcnk6IHsgZXhwZWN0ZWQ6ICdzdHJpbmcnLCBjaGVjazogKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyB9LFxuICBkb21haW46IHsgZXhwZWN0ZWQ6ICdzdHJpbmcnLCBjaGVjazogKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyB9LFxuICB0b25lOiB7IGV4cGVjdGVkOiAnc3RyaW5nJywgY2hlY2s6ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ3N0cmluZycgfSxcblxuICAvLyBOdW1iZXIgZmllbGRzXG4gIG1heEVudHJpZXM6IHsgZXhwZWN0ZWQ6ICdudW1iZXInLCBjaGVjazogKHYpID0+IHR5cGVvZiB2ID09PSAnbnVtYmVyJywgZWxlbWVudFR5cGVzOiBbRWxlbWVudFR5cGUuTUVNT1JZXSB9LFxuICBtYXhfZW50cmllczogeyBleHBlY3RlZDogJ251bWJlcicsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInLCBlbGVtZW50VHlwZXM6IFtFbGVtZW50VHlwZS5NRU1PUlldIH0sXG4gIHByaW9yaXR5OiB7IGV4cGVjdGVkOiAnbnVtYmVyJywgY2hlY2s6ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicgfSxcbn07XG5cbi8qKlxuICogSXNzdWUgIzY2MjogVmFsaWRhdGUgZmllbGQgdHlwZXMgaW4gaW5wdXQgYmVmb3JlIGFwcGx5aW5nIHRvIGVsZW1lbnQuXG4gKlxuICogQ2hlY2tzIGVhY2ggZmllbGQgaW4gdGhlIGlucHV0IGFnYWluc3QgYEZJRUxEX1RZUEVfUlVMRVNgLiBGaWVsZHMgbm90IGluIHRoZVxuICogcnVsZXMgbWFwIGFyZSBza2lwcGVkICh0aGV5J2xsIGJlIGNhdWdodCBieSB1bmtub3duLXByb3BlcnR5IGRldGVjdGlvbiBsYXRlcikuXG4gKiBFbGVtZW50LXR5cGUtc2NvcGVkIHJ1bGVzIG9ubHkgYXBwbHkgd2hlbiB0aGUgdGFyZ2V0IHR5cGUgbWF0Y2hlcy5cbiAqXG4gKiBAcGFyYW0gaW5wdXQgLSBUaGUgZWRpdCBpbnB1dCBvYmplY3QgY29udGFpbmluZyBmaWVsZHMgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBlbGVtZW50VHlwZSAtIFRoZSBub3JtYWxpemVkIGVsZW1lbnQgdHlwZSBiZWluZyBlZGl0ZWRcbiAqIEByZXR1cm5zIEFycmF5IG9mIGVycm9yIG1lc3NhZ2VzIGZvciBmaWVsZHMgd2l0aCB3cm9uZyB0eXBlcyAoZW1wdHkgaWYgYWxsIHZhbGlkKVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUZpZWxkVHlwZXMoXG4gIGlucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IFtmaWVsZCwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGlucHV0KSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSBjb250aW51ZTtcblxuICAgIGNvbnN0IHJ1bGUgPSBGSUVMRF9UWVBFX1JVTEVTW2ZpZWxkXTtcbiAgICBpZiAoIXJ1bGUpIGNvbnRpbnVlO1xuXG4gICAgLy8gU2tpcCBpZiBydWxlIGRvZXNuJ3QgYXBwbHkgdG8gdGhpcyBlbGVtZW50IHR5cGVcbiAgICBpZiAocnVsZS5lbGVtZW50VHlwZXMgJiYgIXJ1bGUuZWxlbWVudFR5cGVzLmluY2x1ZGVzKGVsZW1lbnRUeXBlKSkgY29udGludWU7XG5cbiAgICBpZiAoIXJ1bGUuY2hlY2sodmFsdWUpKSB7XG4gICAgICBlcnJvcnMucHVzaChgRmllbGQgJyR7ZmllbGR9JyBleHBlY3RzICR7cnVsZS5leHBlY3RlZH0sIGdvdCAke0FycmF5LmlzQXJyYXkodmFsdWUpID8gJ2FycmF5JyA6IHR5cGVvZiB2YWx1ZX1gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vLyBNZXJnZSBvcHRpb25zIGZvciBzZWN1cmUgZGVlcCBtZXJnaW5nXG5jb25zdCBNRVJHRV9PUFRJT05TID0ge1xuICBza2lwUHJvcGVydGllczogREFOR0VST1VTX1BST1BFUlRJRVMsXG4gIHJlYWRPbmx5RmllbGRzOiBSRUFEX09OTFlfRklFTERTXG59O1xuXG4vKipcbiAqIE1hcCBmaWVsZCBuYW1lcyB0byB0aGVpciBhcHByb3ByaWF0ZSB2YWxpZGF0aW9uIGZpZWxkIHR5cGVzLlxuICogVGhpcyBlbnN1cmVzIGNvbnNpc3RlbnQgdmFsaWRhdGlvbiBiZXR3ZWVuIGVkaXQgKGlucHV0KSBhbmQgbG9hZCAob3V0cHV0KS5cbiAqL1xuZnVuY3Rpb24gZ2V0RmllbGRUeXBlRm9yVmFsaWRhdGlvbihmaWVsZE5hbWU6IHN0cmluZyk6IFZhbGlkYXRpb25GaWVsZFR5cGUgfCBudWxsIHtcbiAgLy8gTm9ybWFsaXplIGZpZWxkIG5hbWUgKGhhbmRsZSBib3RoICdkZXNjcmlwdGlvbicgYW5kICdtZXRhZGF0YS5kZXNjcmlwdGlvbicpXG4gIGNvbnN0IG5vcm1hbGl6ZWRGaWVsZCA9IGZpZWxkTmFtZS5yZXBsYWNlKC9ebWV0YWRhdGFcXC4vLCAnJyk7XG5cbiAgc3dpdGNoIChub3JtYWxpemVkRmllbGQpIHtcbiAgICBjYXNlICduYW1lJzpcbiAgICAgIHJldHVybiAnbmFtZSc7XG4gICAgY2FzZSAnZGVzY3JpcHRpb24nOlxuICAgICAgcmV0dXJuICdkZXNjcmlwdGlvbic7XG4gICAgY2FzZSAnY29udGVudCc6XG4gICAgICByZXR1cm4gJ2NvbnRlbnQnO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDsgLy8gTm8gc3BlY2lhbCB2YWxpZGF0aW9uIG5lZWRlZFxuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYSBmaWVsZCB2YWx1ZSBiZWZvcmUgc2V0dGluZyBpdCBvbiBhbiBlbGVtZW50LlxuICogUmV0dXJucyBudWxsIGlmIHZhbGlkLCBvciBhbiBlcnJvciBtZXNzYWdlIGlmIGludmFsaWQuXG4gKlxuICogQHBhcmFtIHZhbGlkYXRpb25TZXJ2aWNlIC0gSW5qZWN0ZWQgdmFsaWRhdGlvbiBzZXJ2aWNlIGZvciB0ZXN0YWJpbGl0eVxuICogQHBhcmFtIGZpZWxkIC0gVGhlIGZpZWxkIG5hbWUgYmVpbmcgdmFsaWRhdGVkXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gdmFsaWRhdGVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVGaWVsZFZhbHVlKFxuICB2YWxpZGF0aW9uU2VydmljZTogVmFsaWRhdGlvblNlcnZpY2UsXG4gIGZpZWxkOiBzdHJpbmcsXG4gIHZhbHVlOiB1bmtub3duXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgLy8gT25seSB2YWxpZGF0ZSBzdHJpbmcgdmFsdWVzIGZvciB0ZXh0IGZpZWxkc1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBudWxsOyAvLyBOb24tc3RyaW5nIHZhbHVlcyAoYXJyYXlzLCBvYmplY3RzLCBib29sZWFucywgbnVtYmVycykgc2tpcCB0ZXh0IHZhbGlkYXRpb25cbiAgfVxuXG4gIGNvbnN0IGZpZWxkVHlwZSA9IGdldEZpZWxkVHlwZUZvclZhbGlkYXRpb24oZmllbGQpO1xuICBpZiAoIWZpZWxkVHlwZSkge1xuICAgIHJldHVybiBudWxsOyAvLyBObyB2YWxpZGF0aW9uIHJ1bGVzIGZvciB0aGlzIGZpZWxkXG4gIH1cblxuICAvLyBEZXRlcm1pbmUgbWF4IGxlbmd0aCBiYXNlZCBvbiBmaWVsZCB0eXBlLCB1c2luZyBzeXN0ZW0gY29uc3RhbnRzXG4gIGNvbnN0IG1heExlbmd0aCA9IGZpZWxkVHlwZSA9PT0gJ25hbWUnID8gU0VDVVJJVFlfTElNSVRTLk1BWF9OQU1FX0xFTkdUSCA6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkVHlwZSA9PT0gJ2Rlc2NyaXB0aW9uJyA/IFNFQ1VSSVRZX0xJTUlUUy5NQVhfREVTQ1JJUFRJT05fTEVOR1RIIDpcbiAgICAgICAgICAgICAgICAgICAgZmllbGRUeXBlID09PSAnY29udGVudCcgPyBTRUNVUklUWV9MSU1JVFMuTUFYX0NPTlRFTlRfTEVOR1RIIDogU0VDVVJJVFlfTElNSVRTLk1BWF9DT01NQU5EX0FSR19MRU5HVEg7XG5cbiAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGlvblNlcnZpY2UudmFsaWRhdGVBbmRTYW5pdGl6ZUlucHV0KHZhbHVlLCB7XG4gICAgbWF4TGVuZ3RoLFxuICAgIGFsbG93U3BhY2VzOiB0cnVlLFxuICAgIGZpZWxkVHlwZVxuICB9KTtcblxuICBpZiAoIXJlc3VsdC5pc1ZhbGlkKSB7XG4gICAgcmV0dXJuIHJlc3VsdC5lcnJvcnM/LmpvaW4oJywgJykgfHwgJ1ZhbGlkYXRpb24gZmFpbGVkJztcbiAgfVxuXG4gIHJldHVybiBudWxsOyAvLyBWYWxpZFxufVxuXG4vKipcbiAqIFZhbGlkYXRlIGFuZCBub3JtYWxpemUgZW5zZW1ibGUgZWxlbWVudHMgaW5wdXQuXG4gKlxuICogSXNzdWUgIzY1ODogTExNcyBvZnRlbiBzZW5kIGVsZW1lbnRzIGluIGRpY3Qta2V5ZWQgZm9ybWF0IGluc3RlYWQgb2YgYXJyYXkgZm9ybWF0LlxuICogVGhpcyBmdW5jdGlvbiBub3JtYWxpemVzIGJvdGggZm9ybWF0cyB0byBhIHZhbGlkIGFycmF5IG9mIEVuc2VtYmxlRWxlbWVudC1saWtlIG9iamVjdHMuXG4gKlxuICogQWNjZXB0ZWQgZm9ybWF0czpcbiAqIC0gQXJyYXk6IFt7IGVsZW1lbnRfbmFtZTogXCJmb29cIiwgZWxlbWVudF90eXBlOiBcIm1lbW9yeVwiLCAuLi4gfV1cbiAqIC0gRGljdDogIHsgXCJmb29cIjogeyB0eXBlOiBcIm1lbW9yeVwiLCAuLi4gfSB9ICDihpIgY29udmVydGVkIHRvIGFycmF5XG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIGVsZW1lbnRzIGlucHV0IHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyBPYmplY3Qgd2l0aCBzdWNjZXNzIGZsYWcsIG5vcm1hbGl6ZWQgZWxlbWVudHMgYXJyYXksIGFuZCBvcHRpb25hbCBlcnJvclxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUFuZE5vcm1hbGl6ZUVuc2VtYmxlRWxlbWVudHModmFsdWU6IHVua25vd24pOiB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIGVsZW1lbnRzOiBFbnNlbWJsZUVsZW1lbnRJbnB1dFtdO1xuICBlcnJvcj86IHN0cmluZztcbn0ge1xuICAvLyBDYXNlIDE6IEFscmVhZHkgYW4gYXJyYXkg4oCUIHZhbGlkYXRlIGVhY2ggaXRlbVxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3Qgbm9ybWFsaXplZDogRW5zZW1ibGVFbGVtZW50SW5wdXRbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaXRlbSA9IHZhbHVlW2ldO1xuICAgICAgaWYgKCFpdGVtIHx8IHR5cGVvZiBpdGVtICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKGBFbGVtZW50IGF0IGluZGV4ICR7aX0gbXVzdCBiZSBhbiBvYmplY3Qgd2l0aCBlbGVtZW50X25hbWUgYW5kIGVsZW1lbnRfdHlwZWApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9iaiA9IGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICBjb25zdCBuYW1lID0gb2JqLmVsZW1lbnRfbmFtZSB8fCBvYmoubmFtZTtcbiAgICAgIGNvbnN0IHR5cGUgPSBvYmouZWxlbWVudF90eXBlIHx8IG9iai50eXBlO1xuICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKGBFbGVtZW50IGF0IGluZGV4ICR7aX0gaXMgbWlzc2luZyBlbGVtZW50X25hbWUgKG9yIG5hbWUpYCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gVmFsaWRhdGUgX3JlbW92ZSBpcyBzdHJpY3RseSBib29sZWFuIGlmIHByZXNlbnRcbiAgICAgIGlmICgnX3JlbW92ZScgaW4gb2JqICYmIHR5cGVvZiBvYmouX3JlbW92ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKGBFbGVtZW50ICcke1N0cmluZyhuYW1lKX0nIGhhcyBpbnZhbGlkIF9yZW1vdmUgdmFsdWUg4oCUIG11c3QgYmUgYm9vbGVhbiB0cnVlLCBnb3QgJHt0eXBlb2Ygb2JqLl9yZW1vdmV9YCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gTm9ybWFsaXplIHRvIHN0YW5kYXJkIGZpZWxkIG5hbWVzLCBvbmx5IGluY2x1ZGluZyBkZWZpbmVkIHZhbHVlc1xuICAgICAgY29uc3QgZW50cnk6IEVuc2VtYmxlRWxlbWVudElucHV0ID0geyAuLi5vYmosIGVsZW1lbnRfbmFtZTogU3RyaW5nKG5hbWUpIH07XG4gICAgICBpZiAodHlwZSkge1xuICAgICAgICBlbnRyeS5lbGVtZW50X3R5cGUgPSBTdHJpbmcodHlwZSk7XG4gICAgICB9XG4gICAgICBub3JtYWxpemVkLnB1c2goZW50cnkpO1xuICAgIH1cblxuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVsZW1lbnRzOiBbXSwgZXJyb3I6IGVycm9ycy5qb2luKCc7ICcpIH07XG4gICAgfVxuICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIGVsZW1lbnRzOiBub3JtYWxpemVkIH07XG4gIH1cblxuICAvLyBDYXNlIDI6IERpY3Qta2V5ZWQgZm9ybWF0IOKAlCBjb252ZXJ0IHRvIGFycmF5XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGNvbnN0IGRpY3QgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBub3JtYWxpemVkOiBFbnNlbWJsZUVsZW1lbnRJbnB1dFtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoZGljdCkpIHtcbiAgICAgIGlmICghdmFsIHx8IHR5cGVvZiB2YWwgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgIGVsZW1lbnRzOiBbXSxcbiAgICAgICAgICBlcnJvcjogYEVsZW1lbnQgJyR7a2V5fScgaW4gZGljdCBmb3JtYXQgbXVzdCBiZSBhbiBvYmplY3Qgd2l0aCBhdCBsZWFzdCBlbGVtZW50X3R5cGUgKG9yIHR5cGUpLiBgICtcbiAgICAgICAgICAgIGBFeHBlY3RlZDogeyBcIiR7a2V5fVwiOiB7IHR5cGU6IFwibWVtb3J5XCIsIHJvbGU6IFwic3VwcG9ydFwiLCAuLi4gfSB9YFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3QgaW5uZXIgPSB2YWwgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICBub3JtYWxpemVkLnB1c2goe1xuICAgICAgICAuLi5pbm5lcixcbiAgICAgICAgZWxlbWVudF9uYW1lOiBTdHJpbmcoaW5uZXIuZWxlbWVudF9uYW1lIHx8IGlubmVyLm5hbWUgfHwga2V5KSxcbiAgICAgICAgZWxlbWVudF90eXBlOiBTdHJpbmcoaW5uZXIuZWxlbWVudF90eXBlIHx8IGlubmVyLnR5cGUpLFxuICAgICAgICByb2xlOiAoaW5uZXIucm9sZSBhcyBFbnNlbWJsZUVsZW1lbnRJbnB1dFsncm9sZSddKSB8fCAnc3VwcG9ydCcsXG4gICAgICAgIGFjdGl2YXRpb246IChpbm5lci5hY3RpdmF0aW9uIGFzIEVuc2VtYmxlRWxlbWVudElucHV0WydhY3RpdmF0aW9uJ10pIHx8ICdhbHdheXMnLFxuICAgICAgICBwcmlvcml0eTogKGlubmVyLnByaW9yaXR5IGFzIG51bWJlcikgPz8gNTAsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgZWxlbWVudHM6IG5vcm1hbGl6ZWQgfTtcbiAgfVxuXG4gIC8vIENhc2UgMzogSW52YWxpZCB0eXBlXG4gIHJldHVybiB7XG4gICAgc3VjY2VzczogZmFsc2UsXG4gICAgZWxlbWVudHM6IFtdLFxuICAgIGVycm9yOiBgJ2VsZW1lbnRzJyBtdXN0IGJlIGFuIGFycmF5IG9mIG9iamVjdHMgb3IgYSBkaWN0LWtleWVkIG9iamVjdC4gR290OiAke3R5cGVvZiB2YWx1ZX1gXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgaW5jb21pbmcgZW5zZW1ibGUgZWxlbWVudHMgd2l0aCBleGlzdGluZyBlbGVtZW50cy5cbiAqXG4gKiBJc3N1ZSAjNjU4LyM2NjI6IFVuaWZpZWQgY29sbGVjdGlvbiBlZGl0aW5nIHNlbWFudGljcyDigJQgZWFjaCBpdGVtIGluIHRoZSBpbnB1dFxuICogZGVjbGFyZXMgaXRzIG93biBpbnRlbnQgdmlhIGl0cyBwcm9wZXJ0aWVzOlxuICpcbiAqIC0gRXhpc3RpbmcgZWxlbWVudCB3aXRoIHVwZGF0ZXMg4oaSIG1lcmdlIHByb3BlcnRpZXMgKGluY29taW5nIHdpbnMpXG4gKiAtIE5ldyBlbGVtZW50IChub3QgZm91bmQgYnkgbmFtZSkg4oaSIGFwcGVuZGVkXG4gKiAtIEVsZW1lbnQgd2l0aCBgX3JlbW92ZTogdHJ1ZWAg4oaSIGRyb3BwZWQgZnJvbSBjb2xsZWN0aW9uXG4gKiAtIEV4aXN0aW5nIGVsZW1lbnRzIG5vdCBpbiBpbmNvbWluZyDihpIgcHJlc2VydmVkIHVuY2hhbmdlZFxuICpcbiAqIFRoaXMgcGF0dGVybiBleHRlbmRzIHRvIGFueSBmdXR1cmUgZ3JvdXBpbmcgdHlwZSAod29ya2Zsb3dzLCBwaXBlbGluZXMsIHRlYW1zKS5cbiAqXG4gKiBAcGFyYW0gZXhpc3RpbmcgLSBDdXJyZW50IGVsZW1lbnRzIGFycmF5IGZyb20gdGhlIGVuc2VtYmxlXG4gKiBAcGFyYW0gaW5jb21pbmcgLSBOZXcvdXBkYXRlZC9yZW1vdmVkIGVsZW1lbnRzIGZyb20gdGhlIGVkaXQgaW5wdXRcbiAqIEByZXR1cm5zIE9iamVjdCB3aXRoIG1lcmdlZCBhcnJheSBhbmQgYW55IHdhcm5pbmdzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlRW5zZW1ibGVFbGVtZW50cyhcbiAgZXhpc3Rpbmc6IEVuc2VtYmxlRWxlbWVudElucHV0W10sXG4gIGluY29taW5nOiBFbnNlbWJsZUVsZW1lbnRJbnB1dFtdXG4pOiB7IGVsZW1lbnRzOiBFbnNlbWJsZUVsZW1lbnRJbnB1dFtdOyB3YXJuaW5nczogc3RyaW5nW10gfSB7XG4gIGNvbnN0IHJlc3VsdDogRW5zZW1ibGVFbGVtZW50SW5wdXRbXSA9IGV4aXN0aW5nLm1hcChlID0+ICh7IC4uLmUgfSkpO1xuICBjb25zdCB3YXJuaW5nczogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGluYyBvZiBpbmNvbWluZykge1xuICAgIGNvbnN0IG5hbWUgPSBTdHJpbmcoaW5jLmVsZW1lbnRfbmFtZSB8fCBpbmMubmFtZSB8fCAnJyk7XG4gICAgaWYgKCFuYW1lKSBjb250aW51ZTtcblxuICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSByZXN1bHQuZmluZEluZGV4KFxuICAgICAgZSA9PiBTdHJpbmcoZS5lbGVtZW50X25hbWUgfHwgZS5uYW1lIHx8ICcnKSA9PT0gbmFtZVxuICAgICk7XG5cbiAgICAvLyBJc3N1ZSAjNjYyOiBfcmVtb3ZlIG1hcmtlciDigJQgZHJvcCBlbGVtZW50IGZyb20gY29sbGVjdGlvblxuICAgIGlmIChpbmMuX3JlbW92ZSA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKGV4aXN0aW5nSW5kZXggPj0gMCkge1xuICAgICAgICByZXN1bHQuc3BsaWNlKGV4aXN0aW5nSW5kZXgsIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2FybmluZ3MucHVzaChgRWxlbWVudCAnJHtuYW1lfScgbm90IGZvdW5kIGluIGVuc2VtYmxlIOKAlCBub3RoaW5nIHRvIHJlbW92ZWApO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gU3RyaXAgdHJhbnNpZW50L2FsaWFzIGZpZWxkcyB0aGF0IHNob3VsZG4ndCBiZSBwZXJzaXN0ZWRcbiAgICBjb25zdCB7IF9yZW1vdmU6IF9kaXNjYXJkUmVtb3ZlLCBuYW1lOiBfZGlzY2FyZE5hbWUsIHR5cGU6IF9kaXNjYXJkVHlwZSwgLi4ucGVyc2lzdGFibGUgfSA9IGluYztcblxuICAgIGlmIChleGlzdGluZ0luZGV4ID49IDApIHtcbiAgICAgIC8vIFVwc2VydDogbWVyZ2UgaW5jb21pbmcgcHJvcGVydGllcyBpbnRvIGV4aXN0aW5nIChpbmNvbWluZyB3aW5zKVxuICAgICAgcmVzdWx0W2V4aXN0aW5nSW5kZXhdID0geyAuLi5yZXN1bHRbZXhpc3RpbmdJbmRleF0sIC4uLnBlcnNpc3RhYmxlIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFwcGVuZCBuZXcgZWxlbWVudFxuICAgICAgcmVzdWx0LnB1c2goeyAuLi5wZXJzaXN0YWJsZSB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBlbGVtZW50czogcmVzdWx0LCB3YXJuaW5ncyB9O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlLCBub3JtYWxpemUsIGFuZCBtZXJnZSBlbnNlbWJsZSBlbGVtZW50cyBpbnRvIHRoZSB1cGRhdGUgb2JqZWN0LlxuICogRXh0cmFjdGVkIHRvIGF2b2lkIGR1cGxpY2F0aW9uIGJldHdlZW4gdGhlIHRvcC1sZXZlbCBgZWxlbWVudHNgIGtleSBoYW5kbGVyXG4gKiBhbmQgdGhlIGBtZXRhZGF0YS5lbGVtZW50c2Aga2V5IGhhbmRsZXIgKENsYXVkZSByZXZpZXcpLlxuICpcbiAqIEByZXR1cm5zIEFuIGVycm9yIHN0cmluZyBpZiB2YWxpZGF0aW9uIGZhaWxzLCBvciBudWxsIG9uIHN1Y2Nlc3NcbiAqL1xuZnVuY3Rpb24gaXNFbnNlbWJsZUVsZW1lbnRJbnB1dCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEVuc2VtYmxlRWxlbWVudElucHV0IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBhcHBseUVuc2VtYmxlRWxlbWVudHNVcGRhdGUoXG4gIGVsZW1lbnRzSW5wdXQ6IHVua25vd24sXG4gIGVsZW1lbnQ6IHVua25vd24sXG4gIHVwZGF0ZU9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGNvbGxlY3Rpb25XYXJuaW5nczogc3RyaW5nW11cbik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZUFuZE5vcm1hbGl6ZUVuc2VtYmxlRWxlbWVudHMoZWxlbWVudHNJbnB1dCk7XG4gIGlmICghdmFsaWRhdGVkLnN1Y2Nlc3MpIHtcbiAgICByZXR1cm4gYEludmFsaWQgJ2VsZW1lbnRzJyBmb3JtYXQ6ICR7dmFsaWRhdGVkLmVycm9yfWA7XG4gIH1cbiAgY29uc3QgZWxlbWVudFJlY29yZCA9IGVsZW1lbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IG1ldGFkYXRhID0gZWxlbWVudFJlY29yZC5tZXRhZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgY29uc3QgcmF3RWxlbWVudHMgPSBtZXRhZGF0YT8uZWxlbWVudHM7XG4gIGNvbnN0IGV4aXN0aW5nVHlwZWQ6IEVuc2VtYmxlRWxlbWVudElucHV0W10gPSBBcnJheS5pc0FycmF5KHJhd0VsZW1lbnRzKVxuICAgID8gcmF3RWxlbWVudHMuZmlsdGVyKGlzRW5zZW1ibGVFbGVtZW50SW5wdXQpLm1hcChlID0+ICh7IC4uLmUgfSkpXG4gICAgOiBbXTtcbiAgY29uc3QgbWVyZ2VSZXN1bHQgPSBtZXJnZUVuc2VtYmxlRWxlbWVudHMoZXhpc3RpbmdUeXBlZCwgdmFsaWRhdGVkLmVsZW1lbnRzKTtcbiAgY29sbGVjdGlvbldhcm5pbmdzLnB1c2goLi4ubWVyZ2VSZXN1bHQud2FybmluZ3MpO1xuICBpZiAoIXVwZGF0ZU9iai5tZXRhZGF0YSkge1xuICAgIHVwZGF0ZU9iai5tZXRhZGF0YSA9IHt9O1xuICB9XG4gICh1cGRhdGVPYmoubWV0YWRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmVsZW1lbnRzID0gbWVyZ2VSZXN1bHQuZWxlbWVudHM7XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFN5bmMgZW5zZW1ibGUgZWxlbWVudHMgZnJvbSBtZXRhZGF0YSBhZnRlciBhbiB1cGRhdGUuXG4gKlxuICogRW5zZW1ibGVzIHN0b3JlIHRoZWlyIGVsZW1lbnQgcmVmZXJlbmNlcyBpbiBtZXRhZGF0YS5lbGVtZW50cyxcbiAqIGFuZCBuZWVkIHRvIHN5bmMgdGhlIGludGVybmFsIGVsZW1lbnRzIGFycmF5IHdoZW4gdGhhdCBjaGFuZ2VzLlxuICpcbiAqIElzc3VlICM0NjY6IEJlZm9yZSBzeW5jaW5nLCByZXNvbHZlIGFueSBtaXNzaW5nIGVsZW1lbnRfdHlwZSBmaWVsZHNcbiAqIGJ5IHNlYXJjaGluZyB0aGUgcG9ydGZvbGlvIHZpYSB0aGUgY29udGV4dCBtYW5hZ2Vycy5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbnNlbWJsZSBlbGVtZW50IHRvIHN5bmNcbiAqIEBwYXJhbSBpbnB1dCAtIFRoZSBpbnB1dCBvYmplY3QgdG8gY2hlY2sgZm9yIGVsZW1lbnQgdXBkYXRlc1xuICogQHBhcmFtIGNvbnRleHQgLSBFbGVtZW50IENSVUQgY29udGV4dCB3aXRoIG1hbmFnZXJzIGZvciB0eXBlIHJlc29sdXRpb25cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3luY0Vuc2VtYmxlRWxlbWVudHNJZk5lZWRlZChcbiAgZWxlbWVudDogdW5rbm93bixcbiAgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBjb250ZXh0PzogRWxlbWVudENydWRDb250ZXh0XG4pOiBQcm9taXNlPFJlc29sdmVFbGVtZW50VHlwZXNSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgaGFzRWxlbWVudHNVcGRhdGUgPSBpbnB1dC5lbGVtZW50cyB8fCAoaW5wdXQubWV0YWRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pPy5lbGVtZW50cztcblxuICBpZiAoaGFzRWxlbWVudHNVcGRhdGUgJiYgZWxlbWVudCBpbnN0YW5jZW9mIEVuc2VtYmxlKSB7XG4gICAgLy8gSXNzdWUgIzQ2NjogUmVzb2x2ZSBtaXNzaW5nIGVsZW1lbnRfdHlwZSB2aWEgcG9ydGZvbGlvIGxvb2t1cCBiZWZvcmUgc3luY1xuICAgIGlmIChjb250ZXh0ICYmIGVsZW1lbnQubWV0YWRhdGEuZWxlbWVudHMpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc29sdmVFbGVtZW50VHlwZXMoXG4gICAgICAgIGVsZW1lbnQubWV0YWRhdGEuZWxlbWVudHMsXG4gICAgICAgIHtcbiAgICAgICAgICBza2lsbE1hbmFnZXI6IGNvbnRleHQuc2tpbGxNYW5hZ2VyLFxuICAgICAgICAgIHRlbXBsYXRlTWFuYWdlcjogY29udGV4dC50ZW1wbGF0ZU1hbmFnZXIsXG4gICAgICAgICAgYWdlbnRNYW5hZ2VyOiBjb250ZXh0LmFnZW50TWFuYWdlcixcbiAgICAgICAgICBtZW1vcnlNYW5hZ2VyOiBjb250ZXh0Lm1lbW9yeU1hbmFnZXIsXG4gICAgICAgICAgcGVyc29uYU1hbmFnZXI6IGNvbnRleHQucGVyc29uYU1hbmFnZXIsXG4gICAgICAgICAgZW5zZW1ibGVNYW5hZ2VyOiBjb250ZXh0LmVuc2VtYmxlTWFuYWdlcixcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIGVsZW1lbnQubWV0YWRhdGEuZWxlbWVudHMgPSByZXN1bHQucmVzb2x2ZWQ7XG4gICAgICBlbGVtZW50LnN5bmNFbGVtZW50c0Zyb21NZXRhZGF0YSgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBlbGVtZW50LnN5bmNFbGVtZW50c0Zyb21NZXRhZGF0YSgpO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogSGFuZGxlIG1lbW9yeSBlbnRyeSB1cGRhdGVzIHdpdGggdmFsaWRhdGlvbiBhbmQgbm9ybWFsaXphdGlvbi5cbiAqXG4gKiBNZW1vcnkgZW50cmllcyByZXF1aXJlIHNwZWNpYWwgaGFuZGxpbmcgYmVjYXVzZSB0aGV5OlxuICogLSBOZWVkIElEIGdlbmVyYXRpb24gaWYgbWlzc2luZ1xuICogLSBSZXF1aXJlIHRpbWVzdGFtcCBwYXJzaW5nIGFuZCB2YWxpZGF0aW9uXG4gKiAtIFVzZSBhIE1hcCBzdHJ1Y3R1cmUgaW50ZXJuYWxseVxuICpcbiAqIEBwYXJhbSBlbnRyaWVzIC0gQXJyYXkgb2YgbWVtb3J5IGVudHJpZXMgZnJvbSBpbnB1dFxuICogQHJldHVybnMgUmVzdWx0IHdpdGggc3VjY2VzcyBzdGF0dXMsIG9wdGlvbmFsIGVycm9yIG1lc3NhZ2UsIGFuZCBub3JtYWxpemVkIGVudHJpZXMgbWFwXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZU1lbW9yeUVudHJ5VXBkYXRlKGVudHJpZXM6IHVua25vd25bXSk6IHtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgbWVzc2FnZT86IHN0cmluZztcbiAgZW50cmllc01hcDogTWFwPHN0cmluZywgdW5rbm93bj47XG59IHtcbiAgY29uc3QgZW50cmllc01hcCA9IG5ldyBNYXAoKTtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGVudHJ5ID0gZW50cmllc1tpXTtcbiAgICBpZiAoIWVudHJ5IHx8IHR5cGVvZiBlbnRyeSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIGVycm9ycy5wdXNoKGBFbnRyeSBhdCBpbmRleCAke2l9IGlzIG5vdCBhIHZhbGlkIG9iamVjdGApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgZW50cnlPYmogPSBlbnRyeSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBlbnRyeUlkID0gZW50cnlPYmouaWQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlmICghZW50cnlJZCkge1xuICAgICAgZW50cnlPYmouaWQgPSBnZW5lcmF0ZU1lbW9yeUlkKCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IGVudHJ5T2JqLnRpbWVzdGFtcCA/IG5ldyBEYXRlKGVudHJ5T2JqLnRpbWVzdGFtcCBhcyBzdHJpbmcpIDogbmV3IERhdGUoKTtcbiAgICAgIGlmIChOdW1iZXIuaXNOYU4odGltZXN0YW1wLmdldFRpbWUoKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHRpbWVzdGFtcCcpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub3JtYWxpemVkRW50cnkgPSB7XG4gICAgICAgIC4uLmVudHJ5T2JqLFxuICAgICAgICB0aW1lc3RhbXAsXG4gICAgICAgIHRhZ3M6IEFycmF5LmlzQXJyYXkoZW50cnlPYmoudGFncykgPyBlbnRyeU9iai50YWdzIDogW10sXG4gICAgICAgIG1ldGFkYXRhOiB0eXBlb2YgZW50cnlPYmoubWV0YWRhdGEgPT09ICdvYmplY3QnICYmIGVudHJ5T2JqLm1ldGFkYXRhICE9PSBudWxsID8gZW50cnlPYmoubWV0YWRhdGEgOiB7fVxuICAgICAgfTtcblxuICAgICAgZW50cmllc01hcC5zZXQoZW50cnlPYmouaWQsIG5vcm1hbGl6ZWRFbnRyeSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBlcnJvcnMucHVzaChgRW50cnkgJyR7ZW50cnlPYmouaWR9JyBoYXMgaW52YWxpZCB0aW1lc3RhbXBgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgbWVzc2FnZTogZXJyb3JzLmpvaW4oJ1xcbicpLCBlbnRyaWVzTWFwIH07XG4gIH1cblxuICByZXR1cm4geyBzdWNjZXNzOiB0cnVlLCBlbnRyaWVzTWFwIH07XG59XG5cbi8qKlxuICogRWRpdCBhbiBleGlzdGluZyBlbGVtZW50IHVzaW5nIEdyYXBoUUwtYWxpZ25lZCBuZXN0ZWQgaW5wdXQuXG4gKlxuICogQHBhcmFtIGNvbnRleHQgLSBFbGVtZW50IENSVUQgY29udGV4dCB3aXRoIG1hbmFnZXJzXG4gKiBAcGFyYW0gYXJncyAtIEVkaXQgYXJndW1lbnRzIChuYW1lLCB0eXBlLCBpbnB1dClcbiAqIEBwYXJhbSB2YWxpZGF0aW9uU2VydmljZSAtIE9wdGlvbmFsIHZhbGlkYXRpb24gc2VydmljZSBmb3IgREkgKGNyZWF0ZXMgZGVmYXVsdCBpZiBub3QgcHJvdmlkZWQpXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlZGl0RWxlbWVudChcbiAgY29udGV4dDogRWxlbWVudENydWRDb250ZXh0LFxuICBhcmdzOiBFZGl0RWxlbWVudEFyZ3MsXG4gIHZhbGlkYXRpb25TZXJ2aWNlPzogVmFsaWRhdGlvblNlcnZpY2Vcbikge1xuICBhd2FpdCBjb250ZXh0LmVuc3VyZUluaXRpYWxpemVkKCk7XG5cbiAgLy8gVXNlIGluamVjdGVkIHZhbGlkYXRpb24gc2VydmljZSBvciBjcmVhdGUgZGVmYXVsdFxuICBjb25zdCB2YWxpZGF0b3IgPSB2YWxpZGF0aW9uU2VydmljZSA/PyBuZXcgVmFsaWRhdGlvblNlcnZpY2UoKTtcblxuICBjb25zdCB7IG5hbWUsIHR5cGUsIGlucHV0IH0gPSBhcmdzO1xuXG4gIC8vIFZhbGlkYXRlIGlucHV0IGlzIHByb3ZpZGVkXG4gIGlmICghaW5wdXQgfHwgdHlwZW9mIGlucHV0ICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBlcnJvcignTWlzc2luZyBvciBpbnZhbGlkIGlucHV0IG9iamVjdC4gUHJvdmlkZSBmaWVsZHMgdG8gdXBkYXRlIGFzIGEgbmVzdGVkIG9iamVjdC4nKTtcbiAgfVxuXG4gIGNvbnN0IHsgdHlwZTogbm9ybWFsaXplZFR5cGUgfSA9IG5vcm1hbGl6ZUVsZW1lbnRUeXBlSW5wdXQodHlwZSk7XG5cbiAgaWYgKCFub3JtYWxpemVkVHlwZSkge1xuICAgIHJldHVybiBlcnJvcihgSW52YWxpZCBlbGVtZW50IHR5cGUgJyR7dHlwZX0nLiBWYWxpZCB0eXBlczogJHtmb3JtYXRWYWxpZEVsZW1lbnRUeXBlc0xpc3QoKX1gKTtcbiAgfVxuXG4gIGNvbnN0IG1hbmFnZXIgPSBnZXRNYW5hZ2VyRm9yVHlwZShjb250ZXh0LCBub3JtYWxpemVkVHlwZSk7XG4gIGlmICghbWFuYWdlcikge1xuICAgIGNvbnN0IGxhYmVsUGx1cmFsID0gZ2V0RWxlbWVudFR5cGVMYWJlbChub3JtYWxpemVkVHlwZSwgeyBwbHVyYWw6IHRydWUgfSk7XG4gICAgcmV0dXJuIGVycm9yKGBFbGVtZW50IHR5cGUgJyR7bGFiZWxQbHVyYWx9JyBpcyBub3QgeWV0IHN1cHBvcnRlZCBmb3IgZWRpdGluZ2ApO1xuICB9XG5cbiAgY29uc3QgZWxlbWVudCA9IGF3YWl0IHJlc29sdmVFbGVtZW50QnlOYW1lKG1hbmFnZXIsIG5vcm1hbGl6ZWRUeXBlLCBuYW1lKTtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgY29uc3QgbGFiZWwgPSBnZXRFbGVtZW50VHlwZUxhYmVsKG5vcm1hbGl6ZWRUeXBlKTtcbiAgICB0aHJvdyBuZXcgRWxlbWVudE5vdEZvdW5kRXJyb3IobGFiZWwsIG5hbWUpO1xuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIHVua25vd24gcHJvcGVydGllcyBhbmQgZ2VuZXJhdGUgd2FybmluZ3NcbiAgY29uc3QgdW5rbm93blByb3BlcnR5V2FybmluZ3MgPSBkZXRlY3RVbmtub3duTWV0YWRhdGFQcm9wZXJ0aWVzKFxuICAgIG5vcm1hbGl6ZWRUeXBlLFxuICAgIGlucHV0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk7XG5cbiAgLy8gQWxzbyB2YWxpZGF0ZSBuZXN0ZWQgbWV0YWRhdGEgc3ViLW9iamVjdCAodGhlIHRvcC1sZXZlbCAnbWV0YWRhdGEnIGtleSBpc1xuICAvLyBza2lwcGVkIGJ5IGRldGVjdFVua25vd25NZXRhZGF0YVByb3BlcnRpZXMgYXMgYSBzcGVjaWFsIHJvdXRlIGZpZWxkLCBzb1xuICAvLyBkYW5nZXJvdXMvdW5rbm93biBwcm9wZXJ0aWVzIGluc2lkZSBpdCB3b3VsZCBnbyB1bmNoZWNrZWQgb3RoZXJ3aXNlKVxuICBpZiAoaW5wdXQubWV0YWRhdGEgJiYgdHlwZW9mIGlucHV0Lm1ldGFkYXRhID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShpbnB1dC5tZXRhZGF0YSkpIHtcbiAgICBjb25zdCBuZXN0ZWRXYXJuaW5ncyA9IGRldGVjdFVua25vd25NZXRhZGF0YVByb3BlcnRpZXMoXG4gICAgICBub3JtYWxpemVkVHlwZSxcbiAgICAgIGlucHV0Lm1ldGFkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgKTtcbiAgICB1bmtub3duUHJvcGVydHlXYXJuaW5ncy5wdXNoKC4uLm5lc3RlZFdhcm5pbmdzKTtcbiAgfVxuXG4gIGNvbnN0IHdhcm5pbmdUZXh0ID0gZm9ybWF0VW5rbm93blByb3BlcnR5V2FybmluZ3ModW5rbm93blByb3BlcnR5V2FybmluZ3MpO1xuXG4gIGlmICh1bmtub3duUHJvcGVydHlXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgbG9nZ2VyLndhcm4oYFtlZGl0RWxlbWVudF0gVW5rbm93biBwcm9wZXJ0aWVzIGRldGVjdGVkYCwge1xuICAgICAgZWxlbWVudFR5cGU6IG5vcm1hbGl6ZWRUeXBlLFxuICAgICAgZWxlbWVudE5hbWU6IG5hbWUsXG4gICAgICB3YXJuaW5nQ291bnQ6IHVua25vd25Qcm9wZXJ0eVdhcm5pbmdzLmxlbmd0aCxcbiAgICAgIHVua25vd25Qcm9wZXJ0aWVzOiB1bmtub3duUHJvcGVydHlXYXJuaW5ncy5tYXAodyA9PiAoe1xuICAgICAgICBwcm9wZXJ0eTogdy5wcm9wZXJ0eSxcbiAgICAgICAgc3VnZ2VzdGlvbjogdy5zdWdnZXN0aW9uXG4gICAgICB9KSlcbiAgICB9KTtcbiAgfVxuXG4gIC8vIElzc3VlICMxNTkxOiBWYWxpZGF0ZSBlbGVtZW50LXNwZWNpZmljIGNvbnN0cmFpbnRzIGJlZm9yZSBhdHRlbXB0aW5nIGVkaXRzXG4gIC8vIE1lbW9yeSBjb250ZW50IGlzIHJlYWQtb25seSAoYXBwZW5kLW9ubHkgYXJjaGl0ZWN0dXJlKSAtIHJlamVjdCBhdHRlbXB0cyB0byBlZGl0IGl0XG4gIGlmIChub3JtYWxpemVkVHlwZSA9PT0gRWxlbWVudFR5cGUuTUVNT1JZICYmICdjb250ZW50JyBpbiBpbnB1dCkge1xuICAgIHJldHVybiBlcnJvcihcbiAgICAgIGBNZW1vcnkgY29udGVudCBjYW5ub3QgYmUgbW9kaWZpZWQgdmlhIGVkaXRfZWxlbWVudC4gYCArXG4gICAgICBgTWVtb3J5IHVzZXMgYW4gYXBwZW5kLW9ubHkgYXJjaGl0ZWN0dXJlLiBgICtcbiAgICAgIGBVc2UgdGhlICdhZGRFbnRyeScgb3BlcmF0aW9uIHRvIGFkZCBuZXcgZW50cmllcyB0byB0aGlzIG1lbW9yeS5gXG4gICAgKTtcbiAgfVxuXG4gIC8vIElzc3VlICM2NjI6IFZhbGlkYXRlIGZpZWxkIHR5cGVzIGJlZm9yZSBhcHBseWluZyAocHJldmVudHMgc2lsZW50IGRhdGEgY29ycnVwdGlvbilcbiAgY29uc3QgdHlwZUVycm9ycyA9IHZhbGlkYXRlRmllbGRUeXBlcyhpbnB1dCwgbm9ybWFsaXplZFR5cGUpO1xuICBpZiAodHlwZUVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGVycm9yKGBGaWVsZCB0eXBlIHZhbGlkYXRpb24gZmFpbGVkOlxcbiR7dHlwZUVycm9ycy5tYXAoZSA9PiBgICDigKIgJHtlfWApLmpvaW4oJ1xcbicpfWApO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgc3RyaW5nIGZpZWxkIHZhbHVlcyB1c2luZyBpbmplY3RlZCB2YWxpZGF0b3JcbiAgZm9yIChjb25zdCBbZmllbGQsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhpbnB1dCkpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbkVycm9yID0gdmFsaWRhdGVGaWVsZFZhbHVlKHZhbGlkYXRvciwgZmllbGQsIHZhbHVlKTtcbiAgICAgIGlmICh2YWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yKGBJbnZhbGlkIHZhbHVlIGZvciAnJHtmaWVsZH0nOiAke3ZhbGlkYXRpb25FcnJvcn1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBCdWlsZCB0aGUgdXBkYXRlIG9iamVjdCwgbWFwcGluZyB0b3AtbGV2ZWwgZmllbGRzIHRvIG1ldGFkYXRhIHdoZXJlIGFwcHJvcHJpYXRlXG4gIC8vIElzc3VlICM1NjU6IFVzZSB0eXBlLXNwZWNpZmljIG1ldGFkYXRhIHByb3BlcnRpZXMgZnJvbSBhdXRob3JpdGF0aXZlIHNvdXJjZVxuICBjb25zdCBtZXRhZGF0YUZpZWxkcyA9IEtOT1dOX01FVEFEQVRBX1BST1BFUlRJRVNbbm9ybWFsaXplZFR5cGVdID8/IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCB1cGRhdGVPYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGNvbnN0IHVucmVjb2duaXplZEZpZWxkV2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGNvbGxlY3Rpb25XYXJuaW5nczogc3RyaW5nW10gPSBbXTtcblxuICAvLyBGaWVsZHMgaGFuZGxlZCBieSBkZWRpY2F0ZWQgYnJhbmNoZXMgKG5vdCBtZXRhZGF0YSByb3V0aW5nKVxuICBjb25zdCBzcGVjaWFsUm91dGVGaWVsZHMgPSBuZXcgU2V0KFsnaW5zdHJ1Y3Rpb25zJywgJ2NvbnRlbnQnLCAnZWxlbWVudHMnLCAnbWV0YWRhdGEnLCAnZW50cmllcycsICd2ZXJzaW9uJ10pO1xuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGlucHV0KSkge1xuICAgIC8vIFNraXAgZGFuZ2Vyb3VzIHByb3BlcnRpZXNcbiAgICBpZiAoREFOR0VST1VTX1BST1BFUlRJRVMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gU2tpcCByZWFkLW9ubHkgZmllbGRzXG4gICAgaWYgKFJFQURfT05MWV9GSUVMRFMuaGFzKGtleSkpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBbZWRpdEVsZW1lbnRdIFNraXBwaW5nIHJlYWQtb25seSBmaWVsZDogJHtrZXl9YCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBNYXAga25vd24gbWV0YWRhdGEgZmllbGRzIGF1dG9tYXRpY2FsbHkgKHR5cGUtc3BlY2lmaWMpXG4gICAgaWYgKG1ldGFkYXRhRmllbGRzLmhhcyhrZXkpICYmICFzcGVjaWFsUm91dGVGaWVsZHMuaGFzKGtleSkpIHtcbiAgICAgIGlmICghdXBkYXRlT2JqLm1ldGFkYXRhKSB7XG4gICAgICAgIHVwZGF0ZU9iai5tZXRhZGF0YSA9IHt9O1xuICAgICAgfVxuICAgICAgKHVwZGF0ZU9iai5tZXRhZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XSA9IHZhbHVlO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnZWxlbWVudHMnICYmIG5vcm1hbGl6ZWRUeXBlID09PSBFbGVtZW50VHlwZS5FTlNFTUJMRSkge1xuICAgICAgLy8gSXNzdWUgIzY1ODogVmFsaWRhdGUgYW5kIG5vcm1hbGl6ZSBlbGVtZW50cyBpbnB1dCAoYXJyYXkgb3IgZGljdCBmb3JtYXQpXG4gICAgICBjb25zdCBlbGVtRXJyb3IgPSBhcHBseUVuc2VtYmxlRWxlbWVudHNVcGRhdGUodmFsdWUsIGVsZW1lbnQsIHVwZGF0ZU9iaiwgY29sbGVjdGlvbldhcm5pbmdzKTtcbiAgICAgIGlmIChlbGVtRXJyb3IpIHJldHVybiBlcnJvcihlbGVtRXJyb3IpO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbWV0YWRhdGEnICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG1ldGFWYWx1ZSA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgICAvLyBJZiBtZXRhZGF0YS5lbGVtZW50cyBpcyBwcm92aWRlZCBmb3IgYW4gZW5zZW1ibGUsIGV4dHJhY3QgYW5kIHJvdXRlIHRocm91Z2hcbiAgICAgIC8vIHRoZSBlbnNlbWJsZSBlbGVtZW50cyBoYW5kbGVyIGZvciBwcm9wZXIgdmFsaWRhdGlvbi9ub3JtYWxpemF0aW9uL21lcmdlLlxuICAgICAgaWYgKG5vcm1hbGl6ZWRUeXBlID09PSBFbGVtZW50VHlwZS5FTlNFTUJMRSAmJiBtZXRhVmFsdWUuZWxlbWVudHMpIHtcbiAgICAgICAgY29uc3QgZWxlbUVycm9yID0gYXBwbHlFbnNlbWJsZUVsZW1lbnRzVXBkYXRlKG1ldGFWYWx1ZS5lbGVtZW50cywgZWxlbWVudCwgdXBkYXRlT2JqLCBjb2xsZWN0aW9uV2FybmluZ3MpO1xuICAgICAgICBpZiAoZWxlbUVycm9yKSByZXR1cm4gZXJyb3IoZWxlbUVycm9yKTtcblxuICAgICAgICAvLyBSZW1vdmUgZWxlbWVudHMgZnJvbSBtZXRhZGF0YSB2YWx1ZSBiZWZvcmUgZGVlcCBtZXJnZSB0byBhdm9pZCBkb3VibGUtcHJvY2Vzc2luZ1xuICAgICAgICBjb25zdCB7IGVsZW1lbnRzOiBfZXh0cmFjdGVkLCAuLi5yZXN0TWV0YWRhdGEgfSA9IG1ldGFWYWx1ZTtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJlc3RNZXRhZGF0YSkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHVwZGF0ZU9iai5tZXRhZGF0YSA9IGRlZXBNZXJnZShcbiAgICAgICAgICAgIHVwZGF0ZU9iai5tZXRhZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgICAgICAgIHJlc3RNZXRhZGF0YSxcbiAgICAgICAgICAgIE1FUkdFX09QVElPTlNcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBNZXJnZSBuZXN0ZWQgbWV0YWRhdGEgd2l0aCBzZWN1cml0eSBvcHRpb25zXG4gICAgICAgIHVwZGF0ZU9iai5tZXRhZGF0YSA9IGRlZXBNZXJnZShcbiAgICAgICAgICAodXBkYXRlT2JqLm1ldGFkYXRhIHx8IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgICAgICBtZXRhVmFsdWUsXG4gICAgICAgICAgTUVSR0VfT1BUSU9OU1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnaW5zdHJ1Y3Rpb25zJyAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBJc3N1ZSAjNjAyIHJlc29sdmVkOiAnaW5zdHJ1Y3Rpb25zJyBpcyBhIGZpcnN0LWNsYXNzIGZpZWxkIChiZWhhdmlvcmFsIGRpcmVjdGl2ZXMpXG4gICAgICBjb25zdCBjb250ZW50Q29udGV4dE1hcDogUmVjb3JkPHN0cmluZywgJ3BlcnNvbmEnIHwgJ3NraWxsJyB8ICd0ZW1wbGF0ZScgfCAnYWdlbnQnIHwgJ21lbW9yeSc+ID0ge1xuICAgICAgICBbRWxlbWVudFR5cGUuQUdFTlRdOiAnYWdlbnQnLFxuICAgICAgICBbRWxlbWVudFR5cGUuU0tJTExdOiAnc2tpbGwnLFxuICAgICAgICBbRWxlbWVudFR5cGUuVEVNUExBVEVdOiAndGVtcGxhdGUnLFxuICAgICAgICBbRWxlbWVudFR5cGUuUEVSU09OQV06ICdwZXJzb25hJyxcbiAgICAgICAgW0VsZW1lbnRUeXBlLk1FTU9SWV06ICdtZW1vcnknLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbnRlbnRWYWxpZGF0aW9uID0gQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZUFuZFNhbml0aXplKHZhbHVlLCB7XG4gICAgICAgIG1heExlbmd0aDogU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCxcbiAgICAgICAgY29udGVudENvbnRleHQ6IGNvbnRlbnRDb250ZXh0TWFwW25vcm1hbGl6ZWRUeXBlXVxuICAgICAgfSk7XG4gICAgICBjb25zdCBzYW5pdGl6ZWRJbnN0cnVjdGlvbnMgPSBjb250ZW50VmFsaWRhdGlvbi5zYW5pdGl6ZWRDb250ZW50IHx8ICcnO1xuICAgICAgLy8gU2V0IGluc3RydWN0aW9ucyBvbiB0aGUgZWxlbWVudCBkaXJlY3RseSAoYWxsIHR5cGVzIG5vdyBoYXZlIHRoaXMgcHJvcGVydHkpXG4gICAgICAoZWxlbWVudCBhcyBhbnkpLmluc3RydWN0aW9ucyA9IHNhbml0aXplZEluc3RydWN0aW9ucztcbiAgICAgIC8vIEZvciBhZ2VudHMsIGFsc28gdXBkYXRlIGV4dGVuc2lvbnMuaW5zdHJ1Y3Rpb25zIGZvciBiYWNrd2FyZCBjb21wYXRcbiAgICAgIGlmIChub3JtYWxpemVkVHlwZSA9PT0gRWxlbWVudFR5cGUuQUdFTlQpIHtcbiAgICAgICAgaWYgKCFlbGVtZW50LmV4dGVuc2lvbnMpIHtcbiAgICAgICAgICAoZWxlbWVudCBhcyBhbnkpLmV4dGVuc2lvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICAoZWxlbWVudCBhcyBhbnkpLmV4dGVuc2lvbnMuaW5zdHJ1Y3Rpb25zID0gc2FuaXRpemVkSW5zdHJ1Y3Rpb25zO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnY29udGVudCcgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gSXNzdWUgIzU4NS8jNjAyOiBIYW5kbGUgY29udGVudCB1cGRhdGVzIChyZWZlcmVuY2UgbWF0ZXJpYWwpXG4gICAgICBjb25zdCBjb250ZW50Q29udGV4dE1hcDogUmVjb3JkPHN0cmluZywgJ3BlcnNvbmEnIHwgJ3NraWxsJyB8ICd0ZW1wbGF0ZScgfCAnYWdlbnQnIHwgJ21lbW9yeSc+ID0ge1xuICAgICAgICBbRWxlbWVudFR5cGUuQUdFTlRdOiAnYWdlbnQnLFxuICAgICAgICBbRWxlbWVudFR5cGUuU0tJTExdOiAnc2tpbGwnLFxuICAgICAgICBbRWxlbWVudFR5cGUuVEVNUExBVEVdOiAndGVtcGxhdGUnLFxuICAgICAgICBbRWxlbWVudFR5cGUuUEVSU09OQV06ICdwZXJzb25hJyxcbiAgICAgICAgW0VsZW1lbnRUeXBlLk1FTU9SWV06ICdtZW1vcnknLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbnRlbnRWYWxpZGF0aW9uID0gQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZUFuZFNhbml0aXplKHZhbHVlLCB7XG4gICAgICAgIG1heExlbmd0aDogU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCxcbiAgICAgICAgY29udGVudENvbnRleHQ6IGNvbnRlbnRDb250ZXh0TWFwW25vcm1hbGl6ZWRUeXBlXVxuICAgICAgfSk7XG4gICAgICBjb25zdCBzYW5pdGl6ZWRDb250ZW50ID0gY29udGVudFZhbGlkYXRpb24uc2FuaXRpemVkQ29udGVudCB8fCAnJztcbiAgICAgIC8vIFNldCBjb250ZW50IG9uIHRoZSBlbGVtZW50IGRpcmVjdGx5IChhbGwgdHlwZXMgbm93IGhhdmUgdGhpcyBwcm9wZXJ0eSlcbiAgICAgIChlbGVtZW50IGFzIGFueSkuY29udGVudCA9IHNhbml0aXplZENvbnRlbnQ7XG4gICAgfSBlbHNlIGlmICghc3BlY2lhbFJvdXRlRmllbGRzLmhhcyhrZXkpKSB7XG4gICAgICAvLyBJc3N1ZSAjNTY1OiBGaWVsZCBub3QgaW4gdHlwZS1zcGVjaWZpYyBtZXRhZGF0YSBzZXQgYW5kIG5vdCBhIHNwZWNpYWwgcm91dGUg4oCUXG4gICAgICAvLyBzdGlsbCByb3V0ZSB0byB1cGRhdGVPYmogZm9yIGJhY2t3YXJkIGNvbXBhdCwgYnV0IHdhcm4gdGhhdCBpdCBtYXkgbm90IHBlcnNpc3RcbiAgICAgIHVwZGF0ZU9ialtrZXldID0gdmFsdWU7XG4gICAgICB1bnJlY29nbml6ZWRGaWVsZFdhcm5pbmdzLnB1c2goXG4gICAgICAgIGBGaWVsZCAnJHtrZXl9JyBpcyBub3QgYSByZWNvZ25pemVkIG1ldGFkYXRhIHByb3BlcnR5IGZvciAke2dldEVsZW1lbnRUeXBlTGFiZWwobm9ybWFsaXplZFR5cGUpfSDigJQgaXQgbWF5IG5vdCBwZXJzaXN0IGFmdGVyIHNhdmUuYFxuICAgICAgKTtcbiAgICAgIGxvZ2dlci53YXJuKGBbZWRpdEVsZW1lbnRdIFVucmVjb2duaXplZCBmaWVsZCAnJHtrZXl9JyBmb3IgJHtub3JtYWxpemVkVHlwZX0sIHJvdXRpbmcgdG8gZWxlbWVudCBvYmplY3RgLCB7XG4gICAgICAgIGVsZW1lbnRUeXBlOiBub3JtYWxpemVkVHlwZSxcbiAgICAgICAgZWxlbWVudE5hbWU6IG5hbWUsXG4gICAgICAgIGZpZWxkOiBrZXksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBEZWVwIG1lcmdlIHRoZSB1cGRhdGUgaW50byB0aGUgZWxlbWVudCB3aXRoIHNlY3VyaXR5IG9wdGlvbnNcbiAgY29uc3QgZWxlbWVudERhdGEgPSBlbGVtZW50IGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IG1lcmdlZERhdGEgPSBkZWVwTWVyZ2UoZWxlbWVudERhdGEsIHVwZGF0ZU9iaiwgTUVSR0VfT1BUSU9OUyk7XG5cbiAgLy8gQXBwbHkgbWVyZ2VkIGRhdGEgYmFjayB0byBlbGVtZW50XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG1lcmdlZERhdGEpKSB7XG4gICAgaWYgKGtleSAhPT0gJ21ldGFkYXRhJykge1xuICAgICAgKGVsZW1lbnQgYXMgYW55KVtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgLy8gSGFuZGxlIG1ldGFkYXRhIHNlcGFyYXRlbHkgdG8gcHJlc2VydmUgZWxlbWVudCBzdHJ1Y3R1cmVcbiAgaWYgKG1lcmdlZERhdGEubWV0YWRhdGEgJiYgZWxlbWVudC5tZXRhZGF0YSkge1xuICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5tZXRhZGF0YSwgbWVyZ2VkRGF0YS5tZXRhZGF0YSk7XG4gIH1cblxuICAvLyBIYW5kbGUgbWVtb3J5IGVudHJpZXMgc3BlY2lhbGx5IChleHRyYWN0ZWQgZm9yIGNsYXJpdHkpXG4gIGlmIChub3JtYWxpemVkVHlwZSA9PT0gRWxlbWVudFR5cGUuTUVNT1JZICYmIGlucHV0LmVudHJpZXMgJiYgQXJyYXkuaXNBcnJheShpbnB1dC5lbnRyaWVzKSkge1xuICAgIGNvbnN0IG1lbW9yeVJlc3VsdCA9IGhhbmRsZU1lbW9yeUVudHJ5VXBkYXRlKGlucHV0LmVudHJpZXMpO1xuICAgIGlmICghbWVtb3J5UmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIHJldHVybiBlcnJvcihgTWVtb3J5IGVudHJ5IHZhbGlkYXRpb24gZXJyb3JzOlxcbiR7bWVtb3J5UmVzdWx0Lm1lc3NhZ2V9XFxuXFxuVmFsaWQgZW50cmllcyB3ZXJlIHNhdmVkLmApO1xuICAgIH1cbiAgICAoZWxlbWVudCBhcyBhbnkpLmVudHJpZXMgPSBtZW1vcnlSZXN1bHQuZW50cmllc01hcDtcbiAgfVxuXG4gIC8vIFN5bmMgZW5zZW1ibGUgZWxlbWVudHMgZnJvbSBtZXRhZGF0YSAoZXh0cmFjdGVkIGZvciBjbGFyaXR5KVxuICAvLyBJc3N1ZSAjNDY2OiBSZXNvbHZlIGVsZW1lbnRfdHlwZSB2aWEgcG9ydGZvbGlvIGxvb2t1cCBiZWZvcmUgc3luYywgc3VyZmFjZSB3YXJuaW5nc1xuICBsZXQgcmVzb2x1dGlvbldhcm5pbmdUZXh0ID0gJyc7XG4gIGlmIChub3JtYWxpemVkVHlwZSA9PT0gRWxlbWVudFR5cGUuRU5TRU1CTEUpIHtcbiAgICBjb25zdCByZXNvbHV0aW9uUmVzdWx0ID0gYXdhaXQgc3luY0Vuc2VtYmxlRWxlbWVudHNJZk5lZWRlZChlbGVtZW50LCBpbnB1dCwgY29udGV4dCk7XG4gICAgaWYgKHJlc29sdXRpb25SZXN1bHQpIHtcbiAgICAgIHJlc29sdXRpb25XYXJuaW5nVGV4dCA9IGZvcm1hdEVsZW1lbnRSZXNvbHV0aW9uV2FybmluZ3MocmVzb2x1dGlvblJlc3VsdCk7XG4gICAgfVxuICB9XG5cbiAgLy8gRml4ICM5MTE6IE5vcm1hbGl6ZSBtZXRhZGF0YSBhZnRlciBtZXJnZSB0byBlbnN1cmUgc3RydWN0dXJhbCBjb25zaXN0ZW5jeS5cbiAgLy8gQmFzZUVsZW1lbnQgY29uc3RydWN0b3IgcnVucyBub3JtYWxpemVNZXRhZGF0YSBvbiBjcmVhdGUvbG9hZCwgYnV0IHRoZSBlZGl0IHBhdGhcbiAgLy8gbW9kaWZpZXMgbWV0YWRhdGEgaW4tcGxhY2UuIFRoaXMgZW5zdXJlcyBlc3NlbnRpYWwgZGVmYXVsdHMgc3Vydml2ZSBlZGl0cy5cbiAgaWYgKGVsZW1lbnQubWV0YWRhdGEpIHtcbiAgICBlbGVtZW50Lm1ldGFkYXRhLmRlc2NyaXB0aW9uID8/PSAnJztcbiAgICBlbGVtZW50Lm1ldGFkYXRhLnRhZ3MgPz89IFtdO1xuICAgIC8vIFVwZGF0ZSBtb2RpZmllZCB0aW1lc3RhbXBcbiAgICBlbGVtZW50Lm1ldGFkYXRhLm1vZGlmaWVkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICB9XG5cbiAgLy8gSGFuZGxlIHZlcnNpb24gdXBkYXRlc1xuICBpZiAoaW5wdXQudmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgdXBkYXRlID0gdXBkYXRlVmVyc2lvbkV4cGxpY2l0KGVsZW1lbnQsIFN0cmluZyhpbnB1dC52ZXJzaW9uKSk7XG4gICAgaWYgKCF1cGRhdGUuc3VjY2Vzcykge1xuICAgICAgcmV0dXJuIGVycm9yKHVwZGF0ZS5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gdXBkYXRlIHZlcnNpb24nKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYXV0b0luY3JlbWVudFZlcnNpb24oZWxlbWVudCk7XG4gIH1cblxuICAvLyBEZXRlcm1pbmUgZmlsZSBwYXRoIGZvciBzYXZpbmdcbiAgY29uc3QgZmlsZVBhdGhDYW5kaWRhdGUgPSB0eXBlb2YgKGVsZW1lbnQgYXMgYW55KS5nZXRGaWxlUGF0aCA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gKGVsZW1lbnQgYXMgYW55KS5nZXRGaWxlUGF0aCgpXG4gICAgOiAoKGVsZW1lbnQgYXMgYW55KS5maWxlUGF0aCB8fCAoZWxlbWVudCBhcyBhbnkpLmZpbGVuYW1lKTtcbiAgY29uc3QgZmlsZW5hbWUgPSB0eXBlb2YgZmlsZVBhdGhDYW5kaWRhdGUgPT09ICdzdHJpbmcnICYmIGZpbGVQYXRoQ2FuZGlkYXRlLmxlbmd0aCA+IDBcbiAgICA/IGZpbGVQYXRoQ2FuZGlkYXRlXG4gICAgOiBnZXRFbGVtZW50RmlsZW5hbWUobm9ybWFsaXplZFR5cGUsIGVsZW1lbnQubWV0YWRhdGE/Lm5hbWUgfHwgbmFtZSk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBtYW5hZ2VyLnNhdmUoZWxlbWVudCwgZmlsZW5hbWUpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gZXJyb3IoYEZhaWxlZCB0byBzYXZlIGVsZW1lbnQ6ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gKTtcbiAgfVxuXG4gIGNvbnN0IGxhYmVsID0gZ2V0RWxlbWVudFR5cGVMYWJlbChub3JtYWxpemVkVHlwZSk7XG4gIGNvbnN0IGRpc3BsYXlOYW1lID0gZWxlbWVudC5tZXRhZGF0YT8ubmFtZSB8fCBuYW1lO1xuICBjb25zdCB1cGRhdGVkRmllbGRzID0gT2JqZWN0LmtleXMoaW5wdXQpLmpvaW4oJywgJyk7XG5cbiAgLy8gSXNzdWUgIzU2NTogSW5jbHVkZSB3YXJuaW5ncyBmb3IgdW5yZWNvZ25pemVkIGZpZWxkcyBpbiByZXNwb25zZVxuICBsZXQgdW5yZWNvZ25pemVkV2FybmluZ1RleHQgPSAnJztcbiAgaWYgKHVucmVjb2duaXplZEZpZWxkV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGxpbmVzID0gWyfimqDvuI8gKipVbnJlY29nbml6ZWQgRmllbGQgV2FybmluZ3M6KionXTtcbiAgICBmb3IgKGNvbnN0IHdhcm5pbmcgb2YgdW5yZWNvZ25pemVkRmllbGRXYXJuaW5ncykge1xuICAgICAgbGluZXMucHVzaChgICAg4oCiICR7d2FybmluZ31gKTtcbiAgICB9XG4gICAgbGluZXMucHVzaCgnJyk7XG4gICAgdW5yZWNvZ25pemVkV2FybmluZ1RleHQgPSBsaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8vIElzc3VlICM2NjI6IEluY2x1ZGUgY29sbGVjdGlvbiBvcGVyYXRpb24gd2FybmluZ3NcbiAgbGV0IGNvbGxlY3Rpb25XYXJuaW5nVGV4dCA9ICcnO1xuICBpZiAoY29sbGVjdGlvbldhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBsaW5lcyA9IFsn4pqg77iPICoqQ29sbGVjdGlvbiBXYXJuaW5nczoqKiddO1xuICAgIGZvciAoY29uc3Qgd2FybmluZyBvZiBjb2xsZWN0aW9uV2FybmluZ3MpIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgIOKAoiAke3dhcm5pbmd9YCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goJycpO1xuICAgIGNvbGxlY3Rpb25XYXJuaW5nVGV4dCA9IGxpbmVzLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjb250ZW50OiBbe1xuICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgdGV4dDogYCR7d2FybmluZ1RleHR9JHtyZXNvbHV0aW9uV2FybmluZ1RleHR9JHt1bnJlY29nbml6ZWRXYXJuaW5nVGV4dH0ke2NvbGxlY3Rpb25XYXJuaW5nVGV4dH3inIUgVXBkYXRlZCAke2xhYmVsfSAnJHtkaXNwbGF5TmFtZX0nIC0gZmllbGRzOiAke3VwZGF0ZWRGaWVsZHN9YFxuICAgIH1dXG4gIH07XG59XG5cbmZ1bmN0aW9uIGVycm9yKG1lc3NhZ2U6IHN0cmluZykge1xuICByZXR1cm4ge1xuICAgIGNvbnRlbnQ6IFt7XG4gICAgICB0eXBlOiAndGV4dCcsXG4gICAgICB0ZXh0OiBg4p2MICR7bWVzc2FnZX1gXG4gICAgfV1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0TWFuYWdlckZvclR5cGUoY29udGV4dDogRWxlbWVudENydWRDb250ZXh0LCB0eXBlOiBFbGVtZW50VHlwZSk6IEVsZW1lbnRNYW5hZ2VyV2l0aFBlcnNpc3RlbmNlPGFueT4gfCBudWxsIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBFbGVtZW50VHlwZS5QRVJTT05BOlxuICAgICAgcmV0dXJuIGNvbnRleHQucGVyc29uYU1hbmFnZXIgYXMgRWxlbWVudE1hbmFnZXJXaXRoUGVyc2lzdGVuY2U8YW55PjtcbiAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOlxuICAgICAgcmV0dXJuIGNvbnRleHQuc2tpbGxNYW5hZ2VyIGFzIEVsZW1lbnRNYW5hZ2VyV2l0aFBlcnNpc3RlbmNlPFNraWxsPjtcbiAgICBjYXNlIEVsZW1lbnRUeXBlLlRFTVBMQVRFOlxuICAgICAgcmV0dXJuIGNvbnRleHQudGVtcGxhdGVNYW5hZ2VyIGFzIEVsZW1lbnRNYW5hZ2VyV2l0aFBlcnNpc3RlbmNlPFRlbXBsYXRlPjtcbiAgICBjYXNlIEVsZW1lbnRUeXBlLkFHRU5UOlxuICAgICAgcmV0dXJuIGNvbnRleHQuYWdlbnRNYW5hZ2VyIGFzIEVsZW1lbnRNYW5hZ2VyV2l0aFBlcnNpc3RlbmNlPEFnZW50PjtcbiAgICBjYXNlIEVsZW1lbnRUeXBlLk1FTU9SWTpcbiAgICAgIHJldHVybiBjb250ZXh0Lm1lbW9yeU1hbmFnZXIgYXMgRWxlbWVudE1hbmFnZXJXaXRoUGVyc2lzdGVuY2U8TWVtb3J5PjtcbiAgICBjYXNlIEVsZW1lbnRUeXBlLkVOU0VNQkxFOlxuICAgICAgcmV0dXJuIGNvbnRleHQuZW5zZW1ibGVNYW5hZ2VyIGFzIEVsZW1lbnRNYW5hZ2VyV2l0aFBlcnNpc3RlbmNlPGFueT47XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVZlcnNpb25FeHBsaWNpdChlbGVtZW50OiBhbnksIHZlcnNpb25TdHJpbmc6IHN0cmluZykge1xuICBjb25zdCBpc1ZhbGlkID0gL14oXFxkKykoXFwuXFxkKyk/KFxcLlxcZCspPygtW2EtekEtWjAtOS4tXSspPyQvLnRlc3QodmVyc2lvblN0cmluZyk7XG4gIGlmICghaXNWYWxpZCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgIG1lc3NhZ2U6IGBJbnZhbGlkIHZlcnNpb24gZm9ybWF0OiAnJHt2ZXJzaW9uU3RyaW5nfScuIFBsZWFzZSB1c2UgZm9ybWF0IGxpa2UgMS4wLjAsIDEuMCwgb3IgMWBcbiAgICB9O1xuICB9XG5cbiAgdHJ5IHtcbiAgICBlbGVtZW50LnZlcnNpb24gPSB2ZXJzaW9uU3RyaW5nO1xuICAgIGlmIChlbGVtZW50Lm1ldGFkYXRhKSB7XG4gICAgICBlbGVtZW50Lm1ldGFkYXRhLnZlcnNpb24gPSB2ZXJzaW9uU3RyaW5nO1xuICAgIH1cbiAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gdXBkYXRlIHZlcnNpb24nLCB7IGVycm9yIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gdXBkYXRlIHZlcnNpb246ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gYXV0b0luY3JlbWVudFZlcnNpb24oZWxlbWVudDogYW55KSB7XG4gIHRyeSB7XG4gICAgaWYgKGVsZW1lbnQudmVyc2lvbikge1xuICAgICAgLy8gRmlyc3Qgbm9ybWFsaXplIHRoZSB2ZXJzaW9uIHRvIDMtcGFydCBmb3JtYXQgKGhhbmRsZXMgbGVnYWN5IDItcGFydCB2ZXJzaW9ucylcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVWZXJzaW9uKFN0cmluZyhlbGVtZW50LnZlcnNpb24pKTtcblxuICAgICAgLy8gQ2hlY2sgZm9yIHByZS1yZWxlYXNlIHZlcnNpb25zXG4gICAgICBjb25zdCBwcmVSZWxlYXNlTWF0Y2ggPSBub3JtYWxpemVkLm1hdGNoKC9eKFxcZCtcXC5cXGQrXFwuXFxkKykoLShbYS16QS1aMC05Li1dKykpPyQvKTtcblxuICAgICAgaWYgKHByZVJlbGVhc2VNYXRjaCkge1xuICAgICAgICBjb25zdCBiYXNlVmVyc2lvbiA9IHByZVJlbGVhc2VNYXRjaFsxXTtcbiAgICAgICAgY29uc3QgcHJlUmVsZWFzZVRhZyA9IHByZVJlbGVhc2VNYXRjaFszXTtcblxuICAgICAgICBpZiAocHJlUmVsZWFzZVRhZykge1xuICAgICAgICAgIC8vIEluY3JlbWVudCBwcmUtcmVsZWFzZSB2ZXJzaW9uIChlLmcuLCBcIjEuMC4wLWJldGEuMVwiIOKGkiBcIjEuMC4wLWJldGEuMlwiKVxuICAgICAgICAgIGNvbnN0IHByZVJlbGVhc2VOdW1iZXJNYXRjaCA9IHByZVJlbGVhc2VUYWcubWF0Y2goL14oW2EtekEtWl0rKVxcLj8oXFxkKyk/JC8pO1xuICAgICAgICAgIGlmIChwcmVSZWxlYXNlTnVtYmVyTWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZVJlbGVhc2VUeXBlID0gcHJlUmVsZWFzZU51bWJlck1hdGNoWzFdO1xuICAgICAgICAgICAgY29uc3QgcHJlUmVsZWFzZU51bWJlciA9IE51bWJlci5wYXJzZUludChwcmVSZWxlYXNlTnVtYmVyTWF0Y2hbMl0gfHwgJzAnKSArIDE7XG4gICAgICAgICAgICBlbGVtZW50LnZlcnNpb24gPSBgJHtiYXNlVmVyc2lvbn0tJHtwcmVSZWxlYXNlVHlwZX0uJHtwcmVSZWxlYXNlTnVtYmVyfWA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vIHByZS1yZWxlYXNlIG51bWJlciwgYnVtcCBwYXRjaFxuICAgICAgICAgICAgY29uc3QgW21ham9yLCBtaW5vciwgcGF0Y2hdID0gYmFzZVZlcnNpb24uc3BsaXQoJy4nKS5tYXAoTnVtYmVyKTtcbiAgICAgICAgICAgIGVsZW1lbnQudmVyc2lvbiA9IGAke21ham9yfS4ke21pbm9yfS4ke3BhdGNoICsgMX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTdGFuZGFyZCB2ZXJzaW9uLCBidW1wIHBhdGNoIChlLmcuLCBcIjEuMC4wXCIg4oaSIFwiMS4wLjFcIilcbiAgICAgICAgICBjb25zdCBbbWFqb3IsIG1pbm9yLCBwYXRjaF0gPSBiYXNlVmVyc2lvbi5zcGxpdCgnLicpLm1hcChOdW1iZXIpO1xuICAgICAgICAgIGVsZW1lbnQudmVyc2lvbiA9IGAke21ham9yfS4ke21pbm9yfS4ke3BhdGNoICsgMX1gO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTaG91bGRuJ3QgcmVhY2ggaGVyZSBhZnRlciBub3JtYWxpemF0aW9uLCBidXQgZmFsbGJhY2sgdG8gc2FmZSBkZWZhdWx0XG4gICAgICAgIGVsZW1lbnQudmVyc2lvbiA9ICcxLjAuMSc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIHZlcnNpb24sIHN0YXJ0IGF0IDEuMC4wXG4gICAgICBlbGVtZW50LnZlcnNpb24gPSAnMS4wLjAnO1xuICAgIH1cblxuICAgIC8vIFN5bmMgdmVyc2lvbiB0byBtZXRhZGF0YVxuICAgIGlmIChlbGVtZW50Lm1ldGFkYXRhKSB7XG4gICAgICBlbGVtZW50Lm1ldGFkYXRhLnZlcnNpb24gPSBlbGVtZW50LnZlcnNpb247XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGF1dG8taW5jcmVtZW50IHZlcnNpb24nLCB7IGVycm9yIH0pO1xuICB9XG59XG4iXX0=
779
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdEVsZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaGFuZGxlcnMvZWxlbWVudC1jcnVkL2VkaXRFbGVtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUtsRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFaEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBNEIsTUFBTSxnREFBZ0QsQ0FBQztBQUM3RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNFLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsMkJBQTJCLEVBQzNCLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsb0JBQW9CLEVBRXBCLHlCQUF5QixFQUN6QiwrQkFBK0IsRUFDL0IsNkJBQTZCLEVBQzdCLCtCQUErQixFQUNoQyxNQUFNLGNBQWMsQ0FBQztBQWlDdEIsZ0VBQWdFO0FBQ2hFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDL0IsSUFBSTtJQUNKLE1BQU07SUFDTixVQUFVO0lBQ1YsVUFBVTtJQUNWLFNBQVM7SUFDVCxVQUFVO0NBQ1gsQ0FBQyxDQUFDO0FBRUg7Ozs7Ozs7R0FPRztBQUNILE1BQU0sZ0JBQWdCLEdBSWpCO0lBQ0gsdUNBQXVDO0lBQ3ZDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDdEUsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUMxRSxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ3pFLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQy9ELGFBQWEsRUFBRSxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDL0UsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDbkUsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDNUQsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDbEUsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDOUQsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDN0Qsc0VBQXNFO0lBQ3RFLFNBQVMsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQzVJLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQ3hJLFNBQVMsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRTtJQUN0RyxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxD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QyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUU7SUFDeEUsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRTtJQUNuRSxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRTtJQUM3RixRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO0lBQ3JFLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUU7SUFDbkUsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRTtJQUVqRSxnQkFBZ0I7SUFDaEIsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxZQUFZLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUU7SUFDM0csV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxZQUFZLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUU7SUFDNUcsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFB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Q0FBQyxPQUFPLEdBQUcsR0FBRyxLQUFLLElBQUksS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDckQsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLENBQUM7b0JBQ04seURBQXlEO29CQUN6RCxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDakUsT0FBTyxDQUFDLE9BQU8sR0FBRyxHQUFHLEtBQUssSUFBSSxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNyRCxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLHlFQUF5RTtnQkFDekUsT0FBTyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sNkJBQTZCO1lBQzdCLE9BQU8sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQzVCLENBQUM7UUFFRCwyQkFBMkI7UUFDM0IsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vLi4vcG9ydGZvbGlvL1BvcnRmb2xpb01hbmFnZXIuanMnO1xuaW1wb3J0IHsgU2tpbGwgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9za2lsbHMvU2tpbGwuanMnO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICcuLi8uLi9lbGVtZW50cy90ZW1wbGF0ZXMvVGVtcGxhdGUuanMnO1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9hZ2VudHMvQWdlbnQuanMnO1xuaW1wb3J0IHsgTWVtb3J5IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvbWVtb3JpZXMvTWVtb3J5LmpzJztcbmltcG9ydCB7IEVuc2VtYmxlIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvZW5zZW1ibGVzL0Vuc2VtYmxlLmpzJztcbmltcG9ydCB0eXBlIHsgRW5zZW1ibGVFbGVtZW50SW5wdXQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9lbnNlbWJsZXMvdHlwZXMuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZUVsZW1lbnRUeXBlcyB9IGZyb20gJy4uLy4uL3V0aWxzL2VsZW1lbnRUeXBlUmVzb2x2ZXIuanMnO1xuaW1wb3J0IHsgRWxlbWVudENydWRDb250ZXh0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZU1lbW9yeUlkIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvbWVtb3JpZXMvdXRpbHMuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IG5vcm1hbGl6ZVZlcnNpb24gfSBmcm9tICcuLi8uLi9lbGVtZW50cy9CYXNlRWxlbWVudC5qcyc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uU2VydmljZSwgdHlwZSBWYWxpZGF0aW9uRmllbGRUeXBlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdmFsaWRhdGlvbi9WYWxpZGF0aW9uU2VydmljZS5qcyc7XG5pbXBvcnQgeyBTRUNVUklUWV9MSU1JVFMgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgQ29udGVudFZhbGlkYXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L2NvbnRlbnRWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgRWxlbWVudE5vdEZvdW5kRXJyb3IgfSBmcm9tICcuLi8uLi91dGlscy9FcnJvckhhbmRsZXIuanMnO1xuaW1wb3J0IHsgZGVlcE1lcmdlLCBEQU5HRVJPVVNfUFJPUEVSVElFUyB9IGZyb20gJy4uLy4uL3V0aWxzL2RlZXBNZXJnZS5qcyc7XG5pbXBvcnQge1xuICBub3JtYWxpemVFbGVtZW50VHlwZUlucHV0LFxuICBmb3JtYXRWYWxpZEVsZW1lbnRUeXBlc0xpc3QsXG4gIGdldEVsZW1lbnRGaWxlbmFtZSxcbiAgZ2V0RWxlbWVudFR5cGVMYWJlbCxcbiAgcmVzb2x2ZUVsZW1lbnRCeU5hbWUsXG4gIEVsZW1lbnRNYW5hZ2VyT3BlcmF0aW9ucyxcbiAgS05PV05fTUVUQURBVEFfUFJPUEVSVElFUyxcbiAgZGV0ZWN0VW5rbm93bk1ldGFkYXRhUHJvcGVydGllcyxcbiAgZm9ybWF0VW5rbm93blByb3BlcnR5V2FybmluZ3MsXG4gIGZvcm1hdEVsZW1lbnRSZXNvbHV0aW9uV2FybmluZ3Ncbn0gZnJvbSAnLi9oZWxwZXJzLmpzJztcbmltcG9ydCB0eXBlIHsgUmVzb2x2ZUVsZW1lbnRUeXBlc1Jlc3VsdCB9IGZyb20gJy4uLy4uL3V0aWxzL2VsZW1lbnRUeXBlUmVzb2x2ZXIuanMnO1xuXG50eXBlIEVsZW1lbnRNYW5hZ2VyV2l0aFBlcnNpc3RlbmNlPFQ+ID0gRWxlbWVudE1hbmFnZXJPcGVyYXRpb25zPFQ+ICYge1xuICBzYXZlKGVsZW1lbnQ6IFQsIGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICBkZWxldGU/KGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xufTtcblxuLyoqXG4gKiBHcmFwaFFMLWFsaWduZWQgaW5wdXQgZm9yIGVkaXRpbmcgZWxlbWVudHMuXG4gKiBVc2VzIG5lc3RlZCBvYmplY3RzIChsaWtlIGNyZWF0ZV9lbGVtZW50KSBpbnN0ZWFkIG9mIE1vbmdvREItc3R5bGUgZG90IG5vdGF0aW9uLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBVcGRhdGUgZGVzY3JpcHRpb24gYW5kIG5lc3RlZCBtZXRhZGF0YVxuICoge1xuICogICBuYW1lOiBcIm15LXNraWxsXCIsXG4gKiAgIHR5cGU6IFwic2tpbGxzXCIsXG4gKiAgIGlucHV0OiB7XG4gKiAgICAgZGVzY3JpcHRpb246IFwiVXBkYXRlZCBkZXNjcmlwdGlvblwiLFxuICogICAgIG1ldGFkYXRhOiB7XG4gKiAgICAgICB0cmlnZ2VyczogW1wiY29kZVwiLCBcInJldmlld1wiXSxcbiAqICAgICAgIHNldHRpbmdzOiB7IHRoZW1lOiBcImRhcmtcIiB9XG4gKiAgICAgfVxuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWRpdEVsZW1lbnRBcmdzIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIC8qKiBOZXN0ZWQgaW5wdXQgb2JqZWN0IC0gZmllbGRzIGFyZSBkZWVwLW1lcmdlZCB3aXRoIGV4aXN0aW5nIGVsZW1lbnQgKi9cbiAgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vLyBSZWFkLW9ubHkgZmllbGRzIHRoYXQgY2Fubm90IGJlIG1vZGlmaWVkIHRocm91Z2ggdGhlIGVkaXQgQVBJXG5jb25zdCBSRUFEX09OTFlfRklFTERTID0gbmV3IFNldChbXG4gICdpZCcsXG4gICd0eXBlJyxcbiAgJ2ZpbGVQYXRoJyxcbiAgJ2ZpbGVuYW1lJyxcbiAgJ19zdGF0dXMnLFxuICAnX2lzRGlydHknXG5dKTtcblxuLyoqXG4gKiBJc3N1ZSAjNjYyOiBTeXN0ZW1hdGljIGZpZWxkIHR5cGUgdmFsaWRhdGlvbiBhdCB0aGUgZWRpdEVsZW1lbnQgYm91bmRhcnkuXG4gKlxuICogRGVmaW5lcyBleHBlY3RlZCB0eXBlcyBmb3Iga25vd24gbWV0YWRhdGEgZmllbGRzIGFjcm9zcyBhbGwgZWxlbWVudCB0eXBlcy5cbiAqIFByZXZlbnRzIHNpbGVudCBkYXRhIGNvcnJ1cHRpb24gd2hlbiBMTE1zIHNlbmQgd3JvbmcgdHlwZXMgKGUuZy4sIGRpY3QgaW5zdGVhZCBvZiBhcnJheSkuXG4gKlxuICogS2V5OiBmaWVsZCBuYW1lLCBWYWx1ZTogeyBleHBlY3RlZDogdHlwZSBkZXNjcmlwdGlvbiwgY2hlY2s6IHZhbGlkYXRvciBmdW5jdGlvbiB9XG4gKi9cbmNvbnN0IEZJRUxEX1RZUEVfUlVMRVM6IFJlY29yZDxzdHJpbmcsIHtcbiAgZXhwZWN0ZWQ6IHN0cmluZztcbiAgY2hlY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gYm9vbGVhbjtcbiAgZWxlbWVudFR5cGVzPzogRWxlbWVudFR5cGVbXTtcbn0+ID0ge1xuICAvLyBBcnJheSBmaWVsZHMgKGFjcm9zcyBtdWx0aXBsZSB0eXBlcylcbiAgdGFnczogeyBleHBlY3RlZDogJ2FycmF5IG9mIHN0cmluZ3MnLCBjaGVjazogKHYpID0+IEFycmF5LmlzQXJyYXkodikgfSxcbiAgdHJpZ2dlcnM6IHsgZXhwZWN0ZWQ6ICdhcnJheSBvZiBzdHJpbmdzJywgY2hlY2s6ICh2KSA9PiBBcnJheS5pc0FycmF5KHYpIH0sXG4gIGRvbWFpbnM6IHsgZXhwZWN0ZWQ6ICdhcnJheSBvZiBzdHJpbmdzJywgY2hlY2s6ICh2KSA9PiBBcnJheS5pc0FycmF5KHYpIH0sXG4gIGV4YW1wbGVzOiB7IGV4cGVjdGVkOiAnYXJyYXknLCBjaGVjazogKHYpID0+IEFycmF5LmlzQXJyYXkodikgfSxcbiAgcHJlcmVxdWlzaXRlczogeyBleHBlY3RlZDogJ2FycmF5IG9mIHN0cmluZ3MnLCBjaGVjazogKHYpID0+IEFycmF5LmlzQXJyYXkodikgfSxcbiAgY2FwYWJpbGl0aWVzOiB7IGV4cGVjdGVkOiAnYXJyYXknLCBjaGVjazogKHYpID0+IEFycmF5LmlzQXJyYXkodikgfSxcbiAgZ29hbHM6IHsgZXhwZWN0ZWQ6ICdhcnJheScsIGNoZWNrOiAodikgPT4gQXJyYXkuaXNBcnJheSh2KSB9LFxuICBjb25zdHJhaW50czogeyBleHBlY3RlZDogJ2FycmF5JywgY2hlY2s6ICh2KSA9PiBBcnJheS5pc0FycmF5KHYpIH0sXG4gIGFjdGlvbnM6IHsgZXhwZWN0ZWQ6ICdhcnJheScsIGNoZWNrOiAodikgPT4gQXJyYXkuaXNBcnJheSh2KSB9LFxuICBza2lsbHM6IHsgZXhwZWN0ZWQ6ICdhcnJheScsIGNoZWNrOiAodikgPT4gQXJyYXkuaXNBcnJheSh2KSB9LFxuICAvLyBJc3N1ZSAjNzI0OiBhY3RpdmF0ZXMgYW5kIHRvb2xzIGFyZSBvYmplY3RzIGZvciBhZ2VudHMgKG5vdCBhcnJheXMpXG4gIGFjdGl2YXRlczogeyBleHBlY3RlZDogJ29iamVjdCcsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodiksIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLkFHRU5UXSB9LFxuICB0b29sczogeyBleHBlY3RlZDogJ29iamVjdCcsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodiksIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLkFHRU5UXSB9LFxuICB2YXJpYWJsZXM6IHsgZXhwZWN0ZWQ6ICdhcnJheScsIGNoZWNrOiAodikgPT4gQXJyYXkuaXNBcnJheSh2KSwgZWxlbWVudFR5cGVzOiBbRWxlbWVudFR5cGUuVEVNUExBVEVdIH0sXG4gIGVudHJpZXM6IHsgZXhwZWN0ZWQ6ICdhcnJheScsIGNoZWNrOiAodikgPT4gQXJyYXkuaXNBcnJheSh2KSwgZWxlbWVudFR5cGVzOiBbRWxlbWVudFR5cGUuTUVNT1JZXSB9LFxuICAvLyBlbGVtZW50cyBoYW5kbGVkIHNlcGFyYXRlbHkgYnkgdmFsaWRhdGVBbmROb3JtYWxpemVFbnNlbWJsZUVsZW1lbnRzIChhY2NlcHRzIGRpY3QgdG9vKVxuXG4gIC8vIE9iamVjdCBmaWVsZHNcbiAgZ29hbDogeyBleHBlY3RlZDogJ29iamVjdCcsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodiksIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLkFHRU5UXSB9LFxuICBhdXRvbm9teTogeyBleHBlY3RlZDogJ29iamVjdCcsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodiksIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLkFHRU5UXSB9LFxuICByZXNpbGllbmNlOiB7IGV4cGVjdGVkOiAnb2JqZWN0JywgY2hlY2s6ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2KSwgZWxlbWVudFR5cGVzOiBbRWxlbWVudFR5cGUuQUdFTlRdIH0sXG4gIGdhdGVrZWVwZXI6IHsgZXhwZWN0ZWQ6ICdvYmplY3QnLCBjaGVjazogKHYpID0+IHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiB2ICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHYpIH0sXG4gIHJldGVudGlvblBvbGljeTogeyBleHBlY3RlZDogJ29iamVjdCcsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodiksIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLk1FTU9SWV0gfSxcbiAgcmV0ZW50aW9uX3BvbGljeTogeyBleHBlY3RlZDogJ29iamVjdCcsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodiksIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLk1FTU9SWV0gfSxcblxuICAvLyBTdHJpbmcgZmllbGRzXG4gIC8vIElzc3VlICM3MjQ6IHN5c3RlbVByb21wdCB3YXMgbWlzc2luZyBmcm9tIGZpZWxkIHR5cGUgcnVsZXMuXG4gIC8vIEJvdGggY2FtZWxDYXNlIGFuZCBzbmFrZV9jYXNlIHZhcmlhbnRzIGFjY2VwdGVkIGJlY2F1c2UgTExNcyBmcmVxdWVudGx5XG4gIC8vIHBhc3Mgc25ha2VfY2FzZSBrZXlzOyBub3JtYWxpemF0aW9uIHRvIGNhbWVsQ2FzZSBoYXBwZW5zIGRvd25zdHJlYW0gaW5cbiAgLy8gQWdlbnRNYW5hZ2VyLnBhcnNlTWV0YWRhdGEoKSAoSXNzdWUgIzcyMikuXG4gIHN5c3RlbVByb21wdDogeyBleHBlY3RlZDogJ3N0cmluZycsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnLCBlbGVtZW50VHlwZXM6IFtFbGVtZW50VHlwZS5BR0VOVF0gfSxcbiAgc3lzdGVtX3Byb21wdDogeyBleHBlY3RlZDogJ3N0cmluZycsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnLCBlbGVtZW50VHlwZXM6IFtFbGVtZW50VHlwZS5BR0VOVF0gfSxcbiAgbmFtZTogeyBleHBlY3RlZDogJ3N0cmluZycsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnIH0sXG4gIGRlc2NyaXB0aW9uOiB7IGV4cGVjdGVkOiAnc3RyaW5nJywgY2hlY2s6ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ3N0cmluZycgfSxcbiAgYXV0aG9yOiB7IGV4cGVjdGVkOiAnc3RyaW5nJywgY2hlY2s6ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ3N0cmluZycgfSxcbiAgdmVyc2lvbjogeyBleHBlY3RlZDogJ3N0cmluZycsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2ID09PSAnbnVtYmVyJyB9LFxuICBjYXRlZ29yeTogeyBleHBlY3RlZDogJ3N0cmluZycsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnIH0sXG4gIGRvbWFpbjogeyBleHBlY3RlZDogJ3N0cmluZycsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnIH0sXG4gIHRvbmU6IHsgZXhwZWN0ZWQ6ICdzdHJpbmcnLCBjaGVjazogKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyB9LFxuXG4gIC8vIE51bWJlciBmaWVsZHNcbiAgbWF4RW50cmllczogeyBleHBlY3RlZDogJ251bWJlcicsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInLCBlbGVtZW50VHlwZXM6IFtFbGVtZW50VHlwZS5NRU1PUlldIH0sXG4gIG1heF9lbnRyaWVzOiB7IGV4cGVjdGVkOiAnbnVtYmVyJywgY2hlY2s6ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicsIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLk1FTU9SWV0gfSxcbiAgcHJpb3JpdHk6IHsgZXhwZWN0ZWQ6ICdudW1iZXInLCBjaGVjazogKHYpID0+IHR5cGVvZiB2ID09PSAnbnVtYmVyJyB9LFxufTtcblxuLyoqXG4gKiBJc3N1ZSAjNjYyOiBWYWxpZGF0ZSBmaWVsZCB0eXBlcyBpbiBpbnB1dCBiZWZvcmUgYXBwbHlpbmcgdG8gZWxlbWVudC5cbiAqXG4gKiBDaGVja3MgZWFjaCBmaWVsZCBpbiB0aGUgaW5wdXQgYWdhaW5zdCBgRklFTERfVFlQRV9SVUxFU2AuIEZpZWxkcyBub3QgaW4gdGhlXG4gKiBydWxlcyBtYXAgYXJlIHNraXBwZWQgKHRoZXknbGwgYmUgY2F1Z2h0IGJ5IHVua25vd24tcHJvcGVydHkgZGV0ZWN0aW9uIGxhdGVyKS5cbiAqIEVsZW1lbnQtdHlwZS1zY29wZWQgcnVsZXMgb25seSBhcHBseSB3aGVuIHRoZSB0YXJnZXQgdHlwZSBtYXRjaGVzLlxuICpcbiAqIEBwYXJhbSBpbnB1dCAtIFRoZSBlZGl0IGlucHV0IG9iamVjdCBjb250YWluaW5nIGZpZWxkcyB0byB2YWxpZGF0ZVxuICogQHBhcmFtIGVsZW1lbnRUeXBlIC0gVGhlIG5vcm1hbGl6ZWQgZWxlbWVudCB0eXBlIGJlaW5nIGVkaXRlZFxuICogQHJldHVybnMgQXJyYXkgb2YgZXJyb3IgbWVzc2FnZXMgZm9yIGZpZWxkcyB3aXRoIHdyb25nIHR5cGVzIChlbXB0eSBpZiBhbGwgdmFsaWQpXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRmllbGRUeXBlcyhcbiAgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVcbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgW2ZpZWxkLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoaW5wdXQpKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIGNvbnRpbnVlO1xuXG4gICAgY29uc3QgcnVsZSA9IEZJRUxEX1RZUEVfUlVMRVNbZmllbGRdO1xuICAgIGlmICghcnVsZSkgY29udGludWU7XG5cbiAgICAvLyBTa2lwIGlmIHJ1bGUgZG9lc24ndCBhcHBseSB0byB0aGlzIGVsZW1lbnQgdHlwZVxuICAgIGlmIChydWxlLmVsZW1lbnRUeXBlcyAmJiAhcnVsZS5lbGVtZW50VHlwZXMuaW5jbHVkZXMoZWxlbWVudFR5cGUpKSBjb250aW51ZTtcblxuICAgIGlmICghcnVsZS5jaGVjayh2YWx1ZSkpIHtcbiAgICAgIGVycm9ycy5wdXNoKGBGaWVsZCAnJHtmaWVsZH0nIGV4cGVjdHMgJHtydWxlLmV4cGVjdGVkfSwgZ290ICR7QXJyYXkuaXNBcnJheSh2YWx1ZSkgPyAnYXJyYXknIDogdHlwZW9mIHZhbHVlfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8vIE1lcmdlIG9wdGlvbnMgZm9yIHNlY3VyZSBkZWVwIG1lcmdpbmdcbmNvbnN0IE1FUkdFX09QVElPTlMgPSB7XG4gIHNraXBQcm9wZXJ0aWVzOiBEQU5HRVJPVVNfUFJPUEVSVElFUyxcbiAgcmVhZE9ubHlGaWVsZHM6IFJFQURfT05MWV9GSUVMRFNcbn07XG5cbi8qKlxuICogTWFwIGZpZWxkIG5hbWVzIHRvIHRoZWlyIGFwcHJvcHJpYXRlIHZhbGlkYXRpb24gZmllbGQgdHlwZXMuXG4gKiBUaGlzIGVuc3VyZXMgY29uc2lzdGVudCB2YWxpZGF0aW9uIGJldHdlZW4gZWRpdCAoaW5wdXQpIGFuZCBsb2FkIChvdXRwdXQpLlxuICovXG5mdW5jdGlvbiBnZXRGaWVsZFR5cGVGb3JWYWxpZGF0aW9uKGZpZWxkTmFtZTogc3RyaW5nKTogVmFsaWRhdGlvbkZpZWxkVHlwZSB8IG51bGwge1xuICAvLyBOb3JtYWxpemUgZmllbGQgbmFtZSAoaGFuZGxlIGJvdGggJ2Rlc2NyaXB0aW9uJyBhbmQgJ21ldGFkYXRhLmRlc2NyaXB0aW9uJylcbiAgY29uc3Qgbm9ybWFsaXplZEZpZWxkID0gZmllbGROYW1lLnJlcGxhY2UoL15tZXRhZGF0YVxcLi8sICcnKTtcblxuICBzd2l0Y2ggKG5vcm1hbGl6ZWRGaWVsZCkge1xuICAgIGNhc2UgJ25hbWUnOlxuICAgICAgcmV0dXJuICduYW1lJztcbiAgICBjYXNlICdkZXNjcmlwdGlvbic6XG4gICAgICByZXR1cm4gJ2Rlc2NyaXB0aW9uJztcbiAgICBjYXNlICdjb250ZW50JzpcbiAgICAgIHJldHVybiAnY29udGVudCc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsOyAvLyBObyBzcGVjaWFsIHZhbGlkYXRpb24gbmVlZGVkXG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhIGZpZWxkIHZhbHVlIGJlZm9yZSBzZXR0aW5nIGl0IG9uIGFuIGVsZW1lbnQuXG4gKiBSZXR1cm5zIG51bGwgaWYgdmFsaWQsIG9yIGFuIGVycm9yIG1lc3NhZ2UgaWYgaW52YWxpZC5cbiAqXG4gKiBAcGFyYW0gdmFsaWRhdGlvblNlcnZpY2UgLSBJbmplY3RlZCB2YWxpZGF0aW9uIHNlcnZpY2UgZm9yIHRlc3RhYmlsaXR5XG4gKiBAcGFyYW0gZmllbGQgLSBUaGUgZmllbGQgbmFtZSBiZWluZyB2YWxpZGF0ZWRcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB2YWxpZGF0ZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUZpZWxkVmFsdWUoXG4gIHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZSxcbiAgZmllbGQ6IHN0cmluZyxcbiAgdmFsdWU6IHVua25vd25cbik6IHN0cmluZyB8IG51bGwge1xuICAvLyBPbmx5IHZhbGlkYXRlIHN0cmluZyB2YWx1ZXMgZm9yIHRleHQgZmllbGRzXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bGw7IC8vIE5vbi1zdHJpbmcgdmFsdWVzIChhcnJheXMsIG9iamVjdHMsIGJvb2xlYW5zLCBudW1iZXJzKSBza2lwIHRleHQgdmFsaWRhdGlvblxuICB9XG5cbiAgY29uc3QgZmllbGRUeXBlID0gZ2V0RmllbGRUeXBlRm9yVmFsaWRhdGlvbihmaWVsZCk7XG4gIGlmICghZmllbGRUeXBlKSB7XG4gICAgcmV0dXJuIG51bGw7IC8vIE5vIHZhbGlkYXRpb24gcnVsZXMgZm9yIHRoaXMgZmllbGRcbiAgfVxuXG4gIC8vIERldGVybWluZSBtYXggbGVuZ3RoIGJhc2VkIG9uIGZpZWxkIHR5cGUsIHVzaW5nIHN5c3RlbSBjb25zdGFudHNcbiAgY29uc3QgbWF4TGVuZ3RoID0gZmllbGRUeXBlID09PSAnbmFtZScgPyBTRUNVUklUWV9MSU1JVFMuTUFYX05BTUVfTEVOR1RIIDpcbiAgICAgICAgICAgICAgICAgICAgZmllbGRUeXBlID09PSAnZGVzY3JpcHRpb24nID8gU0VDVVJJVFlfTElNSVRTLk1BWF9ERVNDUklQVElPTl9MRU5HVEggOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZFR5cGUgPT09ICdjb250ZW50JyA/IFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEggOiBTRUNVUklUWV9MSU1JVFMuTUFYX0NPTU1BTkRfQVJHX0xFTkdUSDtcblxuICBjb25zdCByZXN1bHQgPSB2YWxpZGF0aW9uU2VydmljZS52YWxpZGF0ZUFuZFNhbml0aXplSW5wdXQodmFsdWUsIHtcbiAgICBtYXhMZW5ndGgsXG4gICAgYWxsb3dTcGFjZXM6IHRydWUsXG4gICAgZmllbGRUeXBlXG4gIH0pO1xuXG4gIGlmICghcmVzdWx0LmlzVmFsaWQpIHtcbiAgICByZXR1cm4gcmVzdWx0LmVycm9ycz8uam9pbignLCAnKSB8fCAnVmFsaWRhdGlvbiBmYWlsZWQnO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7IC8vIFZhbGlkXG59XG5cbi8qKlxuICogVmFsaWRhdGUgYW5kIG5vcm1hbGl6ZSBlbnNlbWJsZSBlbGVtZW50cyBpbnB1dC5cbiAqXG4gKiBJc3N1ZSAjNjU4OiBMTE1zIG9mdGVuIHNlbmQgZWxlbWVudHMgaW4gZGljdC1rZXllZCBmb3JtYXQgaW5zdGVhZCBvZiBhcnJheSBmb3JtYXQuXG4gKiBUaGlzIGZ1bmN0aW9uIG5vcm1hbGl6ZXMgYm90aCBmb3JtYXRzIHRvIGEgdmFsaWQgYXJyYXkgb2YgRW5zZW1ibGVFbGVtZW50LWxpa2Ugb2JqZWN0cy5cbiAqXG4gKiBBY2NlcHRlZCBmb3JtYXRzOlxuICogLSBBcnJheTogW3sgZWxlbWVudF9uYW1lOiBcImZvb1wiLCBlbGVtZW50X3R5cGU6IFwibWVtb3J5XCIsIC4uLiB9XVxuICogLSBEaWN0OiAgeyBcImZvb1wiOiB7IHR5cGU6IFwibWVtb3J5XCIsIC4uLiB9IH0gIOKGkiBjb252ZXJ0ZWQgdG8gYXJyYXlcbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgZWxlbWVudHMgaW5wdXQgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIE9iamVjdCB3aXRoIHN1Y2Nlc3MgZmxhZywgbm9ybWFsaXplZCBlbGVtZW50cyBhcnJheSwgYW5kIG9wdGlvbmFsIGVycm9yXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQW5kTm9ybWFsaXplRW5zZW1ibGVFbGVtZW50cyh2YWx1ZTogdW5rbm93bik6IHtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgZWxlbWVudHM6IEVuc2VtYmxlRWxlbWVudElucHV0W107XG4gIGVycm9yPzogc3RyaW5nO1xufSB7XG4gIC8vIENhc2UgMTogQWxyZWFkeSBhbiBhcnJheSDigJQgdmFsaWRhdGUgZWFjaCBpdGVtXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBub3JtYWxpemVkOiBFbnNlbWJsZUVsZW1lbnRJbnB1dFtdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpdGVtID0gdmFsdWVbaV07XG4gICAgICBpZiAoIWl0ZW0gfHwgdHlwZW9mIGl0ZW0gIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYEVsZW1lbnQgYXQgaW5kZXggJHtpfSBtdXN0IGJlIGFuIG9iamVjdCB3aXRoIGVsZW1lbnRfbmFtZSBhbmQgZWxlbWVudF90eXBlYCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3Qgb2JqID0gaXRlbSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIGNvbnN0IG5hbWUgPSBvYmouZWxlbWVudF9uYW1lIHx8IG9iai5uYW1lO1xuICAgICAgY29uc3QgdHlwZSA9IG9iai5lbGVtZW50X3R5cGUgfHwgb2JqLnR5cGU7XG4gICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYEVsZW1lbnQgYXQgaW5kZXggJHtpfSBpcyBtaXNzaW5nIGVsZW1lbnRfbmFtZSAob3IgbmFtZSlgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBWYWxpZGF0ZSBfcmVtb3ZlIGlzIHN0cmljdGx5IGJvb2xlYW4gaWYgcHJlc2VudFxuICAgICAgaWYgKCdfcmVtb3ZlJyBpbiBvYmogJiYgdHlwZW9mIG9iai5fcmVtb3ZlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYEVsZW1lbnQgJyR7U3RyaW5nKG5hbWUpfScgaGFzIGludmFsaWQgX3JlbW92ZSB2YWx1ZSDigJQgbXVzdCBiZSBib29sZWFuIHRydWUsIGdvdCAke3R5cGVvZiBvYmouX3JlbW92ZX1gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBOb3JtYWxpemUgdG8gc3RhbmRhcmQgZmllbGQgbmFtZXMsIG9ubHkgaW5jbHVkaW5nIGRlZmluZWQgdmFsdWVzXG4gICAgICBjb25zdCBlbnRyeTogRW5zZW1ibGVFbGVtZW50SW5wdXQgPSB7IC4uLm9iaiwgZWxlbWVudF9uYW1lOiBTdHJpbmcobmFtZSkgfTtcbiAgICAgIGlmICh0eXBlKSB7XG4gICAgICAgIGVudHJ5LmVsZW1lbnRfdHlwZSA9IFN0cmluZyh0eXBlKTtcbiAgICAgIH1cbiAgICAgIG5vcm1hbGl6ZWQucHVzaChlbnRyeSk7XG4gICAgfVxuXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgZWxlbWVudHM6IFtdLCBlcnJvcjogZXJyb3JzLmpvaW4oJzsgJykgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgZWxlbWVudHM6IG5vcm1hbGl6ZWQgfTtcbiAgfVxuXG4gIC8vIENhc2UgMjogRGljdC1rZXllZCBmb3JtYXQg4oCUIGNvbnZlcnQgdG8gYXJyYXlcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgY29uc3QgZGljdCA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IEVuc2VtYmxlRWxlbWVudElucHV0W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhkaWN0KSkge1xuICAgICAgaWYgKCF2YWwgfHwgdHlwZW9mIHZhbCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgZWxlbWVudHM6IFtdLFxuICAgICAgICAgIGVycm9yOiBgRWxlbWVudCAnJHtrZXl9JyBpbiBkaWN0IGZvcm1hdCBtdXN0IGJlIGFuIG9iamVjdCB3aXRoIGF0IGxlYXN0IGVsZW1lbnRfdHlwZSAob3IgdHlwZSkuIGAgK1xuICAgICAgICAgICAgYEV4cGVjdGVkOiB7IFwiJHtrZXl9XCI6IHsgdHlwZTogXCJtZW1vcnlcIiwgcm9sZTogXCJzdXBwb3J0XCIsIC4uLiB9IH1gXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBpbm5lciA9IHZhbCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIG5vcm1hbGl6ZWQucHVzaCh7XG4gICAgICAgIC4uLmlubmVyLFxuICAgICAgICBlbGVtZW50X25hbWU6IFN0cmluZyhpbm5lci5lbGVtZW50X25hbWUgfHwgaW5uZXIubmFtZSB8fCBrZXkpLFxuICAgICAgICBlbGVtZW50X3R5cGU6IFN0cmluZyhpbm5lci5lbGVtZW50X3R5cGUgfHwgaW5uZXIudHlwZSksXG4gICAgICAgIHJvbGU6IChpbm5lci5yb2xlIGFzIEVuc2VtYmxlRWxlbWVudElucHV0Wydyb2xlJ10pIHx8ICdzdXBwb3J0JyxcbiAgICAgICAgYWN0aXZhdGlvbjogKGlubmVyLmFjdGl2YXRpb24gYXMgRW5zZW1ibGVFbGVtZW50SW5wdXRbJ2FjdGl2YXRpb24nXSkgfHwgJ2Fsd2F5cycsXG4gICAgICAgIHByaW9yaXR5OiAoaW5uZXIucHJpb3JpdHkgYXMgbnVtYmVyKSA/PyA1MCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlLCBlbGVtZW50czogbm9ybWFsaXplZCB9O1xuICB9XG5cbiAgLy8gQ2FzZSAzOiBJbnZhbGlkIHR5cGVcbiAgcmV0dXJuIHtcbiAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICBlbGVtZW50czogW10sXG4gICAgZXJyb3I6IGAnZWxlbWVudHMnIG11c3QgYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyBvciBhIGRpY3Qta2V5ZWQgb2JqZWN0LiBHb3Q6ICR7dHlwZW9mIHZhbHVlfWBcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBpbmNvbWluZyBlbnNlbWJsZSBlbGVtZW50cyB3aXRoIGV4aXN0aW5nIGVsZW1lbnRzLlxuICpcbiAqIElzc3VlICM2NTgvIzY2MjogVW5pZmllZCBjb2xsZWN0aW9uIGVkaXRpbmcgc2VtYW50aWNzIOKAlCBlYWNoIGl0ZW0gaW4gdGhlIGlucHV0XG4gKiBkZWNsYXJlcyBpdHMgb3duIGludGVudCB2aWEgaXRzIHByb3BlcnRpZXM6XG4gKlxuICogLSBFeGlzdGluZyBlbGVtZW50IHdpdGggdXBkYXRlcyDihpIgbWVyZ2UgcHJvcGVydGllcyAoaW5jb21pbmcgd2lucylcbiAqIC0gTmV3IGVsZW1lbnQgKG5vdCBmb3VuZCBieSBuYW1lKSDihpIgYXBwZW5kZWRcbiAqIC0gRWxlbWVudCB3aXRoIGBfcmVtb3ZlOiB0cnVlYCDihpIgZHJvcHBlZCBmcm9tIGNvbGxlY3Rpb25cbiAqIC0gRXhpc3RpbmcgZWxlbWVudHMgbm90IGluIGluY29taW5nIOKGkiBwcmVzZXJ2ZWQgdW5jaGFuZ2VkXG4gKlxuICogVGhpcyBwYXR0ZXJuIGV4dGVuZHMgdG8gYW55IGZ1dHVyZSBncm91cGluZyB0eXBlICh3b3JrZmxvd3MsIHBpcGVsaW5lcywgdGVhbXMpLlxuICpcbiAqIEBwYXJhbSBleGlzdGluZyAtIEN1cnJlbnQgZWxlbWVudHMgYXJyYXkgZnJvbSB0aGUgZW5zZW1ibGVcbiAqIEBwYXJhbSBpbmNvbWluZyAtIE5ldy91cGRhdGVkL3JlbW92ZWQgZWxlbWVudHMgZnJvbSB0aGUgZWRpdCBpbnB1dFxuICogQHJldHVybnMgT2JqZWN0IHdpdGggbWVyZ2VkIGFycmF5IGFuZCBhbnkgd2FybmluZ3NcbiAqL1xuZnVuY3Rpb24gbWVyZ2VFbnNlbWJsZUVsZW1lbnRzKFxuICBleGlzdGluZzogRW5zZW1ibGVFbGVtZW50SW5wdXRbXSxcbiAgaW5jb21pbmc6IEVuc2VtYmxlRWxlbWVudElucHV0W11cbik6IHsgZWxlbWVudHM6IEVuc2VtYmxlRWxlbWVudElucHV0W107IHdhcm5pbmdzOiBzdHJpbmdbXSB9IHtcbiAgY29uc3QgcmVzdWx0OiBFbnNlbWJsZUVsZW1lbnRJbnB1dFtdID0gZXhpc3RpbmcubWFwKGUgPT4gKHsgLi4uZSB9KSk7XG4gIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgaW5jIG9mIGluY29taW5nKSB7XG4gICAgY29uc3QgbmFtZSA9IFN0cmluZyhpbmMuZWxlbWVudF9uYW1lIHx8IGluYy5uYW1lIHx8ICcnKTtcbiAgICBpZiAoIW5hbWUpIGNvbnRpbnVlO1xuXG4gICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IHJlc3VsdC5maW5kSW5kZXgoXG4gICAgICBlID0+IFN0cmluZyhlLmVsZW1lbnRfbmFtZSB8fCBlLm5hbWUgfHwgJycpID09PSBuYW1lXG4gICAgKTtcblxuICAgIC8vIElzc3VlICM2NjI6IF9yZW1vdmUgbWFya2VyIOKAlCBkcm9wIGVsZW1lbnQgZnJvbSBjb2xsZWN0aW9uXG4gICAgaWYgKGluYy5fcmVtb3ZlID09PSB0cnVlKSB7XG4gICAgICBpZiAoZXhpc3RpbmdJbmRleCA+PSAwKSB7XG4gICAgICAgIHJlc3VsdC5zcGxpY2UoZXhpc3RpbmdJbmRleCwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3YXJuaW5ncy5wdXNoKGBFbGVtZW50ICcke25hbWV9JyBub3QgZm91bmQgaW4gZW5zZW1ibGUg4oCUIG5vdGhpbmcgdG8gcmVtb3ZlYCk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBTdHJpcCB0cmFuc2llbnQvYWxpYXMgZmllbGRzIHRoYXQgc2hvdWxkbid0IGJlIHBlcnNpc3RlZFxuICAgIGNvbnN0IHsgX3JlbW92ZTogX2Rpc2NhcmRSZW1vdmUsIG5hbWU6IF9kaXNjYXJkTmFtZSwgdHlwZTogX2Rpc2NhcmRUeXBlLCAuLi5wZXJzaXN0YWJsZSB9ID0gaW5jO1xuXG4gICAgaWYgKGV4aXN0aW5nSW5kZXggPj0gMCkge1xuICAgICAgLy8gVXBzZXJ0OiBtZXJnZSBpbmNvbWluZyBwcm9wZXJ0aWVzIGludG8gZXhpc3RpbmcgKGluY29taW5nIHdpbnMpXG4gICAgICByZXN1bHRbZXhpc3RpbmdJbmRleF0gPSB7IC4uLnJlc3VsdFtleGlzdGluZ0luZGV4XSwgLi4ucGVyc2lzdGFibGUgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQXBwZW5kIG5ldyBlbGVtZW50XG4gICAgICByZXN1bHQucHVzaCh7IC4uLnBlcnNpc3RhYmxlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGVsZW1lbnRzOiByZXN1bHQsIHdhcm5pbmdzIH07XG59XG5cbi8qKlxuICogVmFsaWRhdGUsIG5vcm1hbGl6ZSwgYW5kIG1lcmdlIGVuc2VtYmxlIGVsZW1lbnRzIGludG8gdGhlIHVwZGF0ZSBvYmplY3QuXG4gKiBFeHRyYWN0ZWQgdG8gYXZvaWQgZHVwbGljYXRpb24gYmV0d2VlbiB0aGUgdG9wLWxldmVsIGBlbGVtZW50c2Aga2V5IGhhbmRsZXJcbiAqIGFuZCB0aGUgYG1ldGFkYXRhLmVsZW1lbnRzYCBrZXkgaGFuZGxlciAoQ2xhdWRlIHJldmlldykuXG4gKlxuICogQHJldHVybnMgQW4gZXJyb3Igc3RyaW5nIGlmIHZhbGlkYXRpb24gZmFpbHMsIG9yIG51bGwgb24gc3VjY2Vzc1xuICovXG5mdW5jdGlvbiBpc0Vuc2VtYmxlRWxlbWVudElucHV0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgRW5zZW1ibGVFbGVtZW50SW5wdXQge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGFwcGx5RW5zZW1ibGVFbGVtZW50c1VwZGF0ZShcbiAgZWxlbWVudHNJbnB1dDogdW5rbm93bixcbiAgZWxlbWVudDogdW5rbm93bixcbiAgdXBkYXRlT2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgY29sbGVjdGlvbldhcm5pbmdzOiBzdHJpbmdbXVxuKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlQW5kTm9ybWFsaXplRW5zZW1ibGVFbGVtZW50cyhlbGVtZW50c0lucHV0KTtcbiAgaWYgKCF2YWxpZGF0ZWQuc3VjY2Vzcykge1xuICAgIHJldHVybiBgSW52YWxpZCAnZWxlbWVudHMnIGZvcm1hdDogJHt2YWxpZGF0ZWQuZXJyb3J9YDtcbiAgfVxuICBjb25zdCBlbGVtZW50UmVjb3JkID0gZWxlbWVudCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgbWV0YWRhdGEgPSBlbGVtZW50UmVjb3JkLm1ldGFkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICBjb25zdCByYXdFbGVtZW50cyA9IG1ldGFkYXRhPy5lbGVtZW50cztcbiAgY29uc3QgZXhpc3RpbmdUeXBlZDogRW5zZW1ibGVFbGVtZW50SW5wdXRbXSA9IEFycmF5LmlzQXJyYXkocmF3RWxlbWVudHMpXG4gICAgPyByYXdFbGVtZW50cy5maWx0ZXIoaXNFbnNlbWJsZUVsZW1lbnRJbnB1dCkubWFwKGUgPT4gKHsgLi4uZSB9KSlcbiAgICA6IFtdO1xuICBjb25zdCBtZXJnZVJlc3VsdCA9IG1lcmdlRW5zZW1ibGVFbGVtZW50cyhleGlzdGluZ1R5cGVkLCB2YWxpZGF0ZWQuZWxlbWVudHMpO1xuICBjb2xsZWN0aW9uV2FybmluZ3MucHVzaCguLi5tZXJnZVJlc3VsdC53YXJuaW5ncyk7XG4gIGlmICghdXBkYXRlT2JqLm1ldGFkYXRhKSB7XG4gICAgdXBkYXRlT2JqLm1ldGFkYXRhID0ge307XG4gIH1cbiAgKHVwZGF0ZU9iai5tZXRhZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuZWxlbWVudHMgPSBtZXJnZVJlc3VsdC5lbGVtZW50cztcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogU3luYyBlbnNlbWJsZSBlbGVtZW50cyBmcm9tIG1ldGFkYXRhIGFmdGVyIGFuIHVwZGF0ZS5cbiAqXG4gKiBFbnNlbWJsZXMgc3RvcmUgdGhlaXIgZWxlbWVudCByZWZlcmVuY2VzIGluIG1ldGFkYXRhLmVsZW1lbnRzLFxuICogYW5kIG5lZWQgdG8gc3luYyB0aGUgaW50ZXJuYWwgZWxlbWVudHMgYXJyYXkgd2hlbiB0aGF0IGNoYW5nZXMuXG4gKlxuICogSXNzdWUgIzQ2NjogQmVmb3JlIHN5bmNpbmcsIHJlc29sdmUgYW55IG1pc3NpbmcgZWxlbWVudF90eXBlIGZpZWxkc1xuICogYnkgc2VhcmNoaW5nIHRoZSBwb3J0Zm9saW8gdmlhIHRoZSBjb250ZXh0IG1hbmFnZXJzLlxuICpcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVuc2VtYmxlIGVsZW1lbnQgdG8gc3luY1xuICogQHBhcmFtIGlucHV0IC0gVGhlIGlucHV0IG9iamVjdCB0byBjaGVjayBmb3IgZWxlbWVudCB1cGRhdGVzXG4gKiBAcGFyYW0gY29udGV4dCAtIEVsZW1lbnQgQ1JVRCBjb250ZXh0IHdpdGggbWFuYWdlcnMgZm9yIHR5cGUgcmVzb2x1dGlvblxuICovXG5hc3luYyBmdW5jdGlvbiBzeW5jRW5zZW1ibGVFbGVtZW50c0lmTmVlZGVkKFxuICBlbGVtZW50OiB1bmtub3duLFxuICBpbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGNvbnRleHQ/OiBFbGVtZW50Q3J1ZENvbnRleHRcbik6IFByb21pc2U8UmVzb2x2ZUVsZW1lbnRUeXBlc1Jlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBoYXNFbGVtZW50c1VwZGF0ZSA9IGlucHV0LmVsZW1lbnRzIHx8IChpbnB1dC5tZXRhZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik/LmVsZW1lbnRzO1xuXG4gIGlmIChoYXNFbGVtZW50c1VwZGF0ZSAmJiBlbGVtZW50IGluc3RhbmNlb2YgRW5zZW1ibGUpIHtcbiAgICAvLyBJc3N1ZSAjNDY2OiBSZXNvbHZlIG1pc3NpbmcgZWxlbWVudF90eXBlIHZpYSBwb3J0Zm9saW8gbG9va3VwIGJlZm9yZSBzeW5jXG4gICAgaWYgKGNvbnRleHQgJiYgZWxlbWVudC5tZXRhZGF0YS5lbGVtZW50cykge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzb2x2ZUVsZW1lbnRUeXBlcyhcbiAgICAgICAgZWxlbWVudC5tZXRhZGF0YS5lbGVtZW50cyxcbiAgICAgICAge1xuICAgICAgICAgIHNraWxsTWFuYWdlcjogY29udGV4dC5za2lsbE1hbmFnZXIsXG4gICAgICAgICAgdGVtcGxhdGVNYW5hZ2VyOiBjb250ZXh0LnRlbXBsYXRlTWFuYWdlcixcbiAgICAgICAgICBhZ2VudE1hbmFnZXI6IGNvbnRleHQuYWdlbnRNYW5hZ2VyLFxuICAgICAgICAgIG1lbW9yeU1hbmFnZXI6IGNvbnRleHQubWVtb3J5TWFuYWdlcixcbiAgICAgICAgICBwZXJzb25hTWFuYWdlcjogY29udGV4dC5wZXJzb25hTWFuYWdlcixcbiAgICAgICAgICBlbnNlbWJsZU1hbmFnZXI6IGNvbnRleHQuZW5zZW1ibGVNYW5hZ2VyLFxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgZWxlbWVudC5tZXRhZGF0YS5lbGVtZW50cyA9IHJlc3VsdC5yZXNvbHZlZDtcbiAgICAgIGVsZW1lbnQuc3luY0VsZW1lbnRzRnJvbU1ldGFkYXRhKCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGVsZW1lbnQuc3luY0VsZW1lbnRzRnJvbU1ldGFkYXRhKCk7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBIYW5kbGUgbWVtb3J5IGVudHJ5IHVwZGF0ZXMgd2l0aCB2YWxpZGF0aW9uIGFuZCBub3JtYWxpemF0aW9uLlxuICpcbiAqIE1lbW9yeSBlbnRyaWVzIHJlcXVpcmUgc3BlY2lhbCBoYW5kbGluZyBiZWNhdXNlIHRoZXk6XG4gKiAtIE5lZWQgSUQgZ2VuZXJhdGlvbiBpZiBtaXNzaW5nXG4gKiAtIFJlcXVpcmUgdGltZXN0YW1wIHBhcnNpbmcgYW5kIHZhbGlkYXRpb25cbiAqIC0gVXNlIGEgTWFwIHN0cnVjdHVyZSBpbnRlcm5hbGx5XG4gKlxuICogQHBhcmFtIGVudHJpZXMgLSBBcnJheSBvZiBtZW1vcnkgZW50cmllcyBmcm9tIGlucHV0XG4gKiBAcmV0dXJucyBSZXN1bHQgd2l0aCBzdWNjZXNzIHN0YXR1cywgb3B0aW9uYWwgZXJyb3IgbWVzc2FnZSwgYW5kIG5vcm1hbGl6ZWQgZW50cmllcyBtYXBcbiAqL1xuZnVuY3Rpb24gaGFuZGxlTWVtb3J5RW50cnlVcGRhdGUoZW50cmllczogdW5rbm93bltdKToge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBtZXNzYWdlPzogc3RyaW5nO1xuICBlbnRyaWVzTWFwOiBNYXA8c3RyaW5nLCB1bmtub3duPjtcbn0ge1xuICBjb25zdCBlbnRyaWVzTWFwID0gbmV3IE1hcCgpO1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZW50cnkgPSBlbnRyaWVzW2ldO1xuICAgIGlmICghZW50cnkgfHwgdHlwZW9mIGVudHJ5ICE9PSAnb2JqZWN0Jykge1xuICAgICAgZXJyb3JzLnB1c2goYEVudHJ5IGF0IGluZGV4ICR7aX0gaXMgbm90IGEgdmFsaWQgb2JqZWN0YCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnRyeU9iaiA9IGVudHJ5IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IGVudHJ5SWQgPSBlbnRyeU9iai5pZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaWYgKCFlbnRyeUlkKSB7XG4gICAgICBlbnRyeU9iai5pZCA9IGdlbmVyYXRlTWVtb3J5SWQoKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdGltZXN0YW1wID0gZW50cnlPYmoudGltZXN0YW1wID8gbmV3IERhdGUoZW50cnlPYmoudGltZXN0YW1wIGFzIHN0cmluZykgOiBuZXcgRGF0ZSgpO1xuICAgICAgaWYgKE51bWJlci5pc05hTih0aW1lc3RhbXAuZ2V0VGltZSgpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdGltZXN0YW1wJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRFbnRyeSA9IHtcbiAgICAgICAgLi4uZW50cnlPYmosXG4gICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgdGFnczogQXJyYXkuaXNBcnJheShlbnRyeU9iai50YWdzKSA/IGVudHJ5T2JqLnRhZ3MgOiBbXSxcbiAgICAgICAgbWV0YWRhdGE6IHR5cGVvZiBlbnRyeU9iai5tZXRhZGF0YSA9PT0gJ29iamVjdCcgJiYgZW50cnlPYmoubWV0YWRhdGEgIT09IG51bGwgPyBlbnRyeU9iai5tZXRhZGF0YSA6IHt9XG4gICAgICB9O1xuXG4gICAgICBlbnRyaWVzTWFwLnNldChlbnRyeU9iai5pZCwgbm9ybWFsaXplZEVudHJ5KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGVycm9ycy5wdXNoKGBFbnRyeSAnJHtlbnRyeU9iai5pZH0nIGhhcyBpbnZhbGlkIHRpbWVzdGFtcGApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBtZXNzYWdlOiBlcnJvcnMuam9pbignXFxuJyksIGVudHJpZXNNYXAgfTtcbiAgfVxuXG4gIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIGVudHJpZXNNYXAgfTtcbn1cblxuLyoqXG4gKiBFZGl0IGFuIGV4aXN0aW5nIGVsZW1lbnQgdXNpbmcgR3JhcGhRTC1hbGlnbmVkIG5lc3RlZCBpbnB1dC5cbiAqXG4gKiBAcGFyYW0gY29udGV4dCAtIEVsZW1lbnQgQ1JVRCBjb250ZXh0IHdpdGggbWFuYWdlcnNcbiAqIEBwYXJhbSBhcmdzIC0gRWRpdCBhcmd1bWVudHMgKG5hbWUsIHR5cGUsIGlucHV0KVxuICogQHBhcmFtIHZhbGlkYXRpb25TZXJ2aWNlIC0gT3B0aW9uYWwgdmFsaWRhdGlvbiBzZXJ2aWNlIGZvciBESSAoY3JlYXRlcyBkZWZhdWx0IGlmIG5vdCBwcm92aWRlZClcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVkaXRFbGVtZW50KFxuICBjb250ZXh0OiBFbGVtZW50Q3J1ZENvbnRleHQsXG4gIGFyZ3M6IEVkaXRFbGVtZW50QXJncyxcbiAgdmFsaWRhdGlvblNlcnZpY2U/OiBWYWxpZGF0aW9uU2VydmljZVxuKSB7XG4gIGF3YWl0IGNvbnRleHQuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcblxuICAvLyBVc2UgaW5qZWN0ZWQgdmFsaWRhdGlvbiBzZXJ2aWNlIG9yIGNyZWF0ZSBkZWZhdWx0XG4gIGNvbnN0IHZhbGlkYXRvciA9IHZhbGlkYXRpb25TZXJ2aWNlID8/IG5ldyBWYWxpZGF0aW9uU2VydmljZSgpO1xuXG4gIGNvbnN0IHsgbmFtZSwgdHlwZSwgaW5wdXQgfSA9IGFyZ3M7XG5cbiAgLy8gVmFsaWRhdGUgaW5wdXQgaXMgcHJvdmlkZWRcbiAgaWYgKCFpbnB1dCB8fCB0eXBlb2YgaW5wdXQgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGVycm9yKCdNaXNzaW5nIG9yIGludmFsaWQgaW5wdXQgb2JqZWN0LiBQcm92aWRlIGZpZWxkcyB0byB1cGRhdGUgYXMgYSBuZXN0ZWQgb2JqZWN0LicpO1xuICB9XG5cbiAgY29uc3QgeyB0eXBlOiBub3JtYWxpemVkVHlwZSB9ID0gbm9ybWFsaXplRWxlbWVudFR5cGVJbnB1dCh0eXBlKTtcblxuICBpZiAoIW5vcm1hbGl6ZWRUeXBlKSB7XG4gICAgcmV0dXJuIGVycm9yKGBJbnZhbGlkIGVsZW1lbnQgdHlwZSAnJHt0eXBlfScuIFZhbGlkIHR5cGVzOiAke2Zvcm1hdFZhbGlkRWxlbWVudFR5cGVzTGlzdCgpfWApO1xuICB9XG5cbiAgY29uc3QgbWFuYWdlciA9IGdldE1hbmFnZXJGb3JUeXBlKGNvbnRleHQsIG5vcm1hbGl6ZWRUeXBlKTtcbiAgaWYgKCFtYW5hZ2VyKSB7XG4gICAgY29uc3QgbGFiZWxQbHVyYWwgPSBnZXRFbGVtZW50VHlwZUxhYmVsKG5vcm1hbGl6ZWRUeXBlLCB7IHBsdXJhbDogdHJ1ZSB9KTtcbiAgICByZXR1cm4gZXJyb3IoYEVsZW1lbnQgdHlwZSAnJHtsYWJlbFBsdXJhbH0nIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGZvciBlZGl0aW5nYCk7XG4gIH1cblxuICBjb25zdCBlbGVtZW50ID0gYXdhaXQgcmVzb2x2ZUVsZW1lbnRCeU5hbWUobWFuYWdlciwgbm9ybWFsaXplZFR5cGUsIG5hbWUpO1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICBjb25zdCBsYWJlbCA9IGdldEVsZW1lbnRUeXBlTGFiZWwobm9ybWFsaXplZFR5cGUpO1xuICAgIHRocm93IG5ldyBFbGVtZW50Tm90Rm91bmRFcnJvcihsYWJlbCwgbmFtZSk7XG4gIH1cblxuICAvLyBDaGVjayBmb3IgdW5rbm93biBwcm9wZXJ0aWVzIGFuZCBnZW5lcmF0ZSB3YXJuaW5nc1xuICBjb25zdCB1bmtub3duUHJvcGVydHlXYXJuaW5ncyA9IGRldGVjdFVua25vd25NZXRhZGF0YVByb3BlcnRpZXMoXG4gICAgbm9ybWFsaXplZFR5cGUsXG4gICAgaW5wdXQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKTtcblxuICAvLyBBbHNvIHZhbGlkYXRlIG5lc3RlZCBtZXRhZGF0YSBzdWItb2JqZWN0ICh0aGUgdG9wLWxldmVsICdtZXRhZGF0YScga2V5IGlzXG4gIC8vIHNraXBwZWQgYnkgZGV0ZWN0VW5rbm93bk1ldGFkYXRhUHJvcGVydGllcyBhcyBhIHNwZWNpYWwgcm91dGUgZmllbGQsIHNvXG4gIC8vIGRhbmdlcm91cy91bmtub3duIHByb3BlcnRpZXMgaW5zaWRlIGl0IHdvdWxkIGdvIHVuY2hlY2tlZCBvdGhlcndpc2UpXG4gIGlmIChpbnB1dC5tZXRhZGF0YSAmJiB0eXBlb2YgaW5wdXQubWV0YWRhdGEgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGlucHV0Lm1ldGFkYXRhKSkge1xuICAgIGNvbnN0IG5lc3RlZFdhcm5pbmdzID0gZGV0ZWN0VW5rbm93bk1ldGFkYXRhUHJvcGVydGllcyhcbiAgICAgIG5vcm1hbGl6ZWRUeXBlLFxuICAgICAgaW5wdXQubWV0YWRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICApO1xuICAgIHVua25vd25Qcm9wZXJ0eVdhcm5pbmdzLnB1c2goLi4ubmVzdGVkV2FybmluZ3MpO1xuICB9XG5cbiAgY29uc3Qgd2FybmluZ1RleHQgPSBmb3JtYXRVbmtub3duUHJvcGVydHlXYXJuaW5ncyh1bmtub3duUHJvcGVydHlXYXJuaW5ncyk7XG5cbiAgaWYgKHVua25vd25Qcm9wZXJ0eVdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICBsb2dnZXIud2FybihgW2VkaXRFbGVtZW50XSBVbmtub3duIHByb3BlcnRpZXMgZGV0ZWN0ZWRgLCB7XG4gICAgICBlbGVtZW50VHlwZTogbm9ybWFsaXplZFR5cGUsXG4gICAgICBlbGVtZW50TmFtZTogbmFtZSxcbiAgICAgIHdhcm5pbmdDb3VudDogdW5rbm93blByb3BlcnR5V2FybmluZ3MubGVuZ3RoLFxuICAgICAgdW5rbm93blByb3BlcnRpZXM6IHVua25vd25Qcm9wZXJ0eVdhcm5pbmdzLm1hcCh3ID0+ICh7XG4gICAgICAgIHByb3BlcnR5OiB3LnByb3BlcnR5LFxuICAgICAgICBzdWdnZXN0aW9uOiB3LnN1Z2dlc3Rpb25cbiAgICAgIH0pKVxuICAgIH0pO1xuICB9XG5cbiAgLy8gSXNzdWUgIzE1OTE6IFZhbGlkYXRlIGVsZW1lbnQtc3BlY2lmaWMgY29uc3RyYWludHMgYmVmb3JlIGF0dGVtcHRpbmcgZWRpdHNcbiAgLy8gTWVtb3J5IGNvbnRlbnQgaXMgcmVhZC1vbmx5IChhcHBlbmQtb25seSBhcmNoaXRlY3R1cmUpIC0gcmVqZWN0IGF0dGVtcHRzIHRvIGVkaXQgaXRcbiAgaWYgKG5vcm1hbGl6ZWRUeXBlID09PSBFbGVtZW50VHlwZS5NRU1PUlkgJiYgJ2NvbnRlbnQnIGluIGlucHV0KSB7XG4gICAgcmV0dXJuIGVycm9yKFxuICAgICAgYE1lbW9yeSBjb250ZW50IGNhbm5vdCBiZSBtb2RpZmllZCB2aWEgZWRpdF9lbGVtZW50LiBgICtcbiAgICAgIGBNZW1vcnkgdXNlcyBhbiBhcHBlbmQtb25seSBhcmNoaXRlY3R1cmUuIGAgK1xuICAgICAgYFVzZSB0aGUgJ2FkZEVudHJ5JyBvcGVyYXRpb24gdG8gYWRkIG5ldyBlbnRyaWVzIHRvIHRoaXMgbWVtb3J5LmBcbiAgICApO1xuICB9XG5cbiAgLy8gSXNzdWUgIzY2MjogVmFsaWRhdGUgZmllbGQgdHlwZXMgYmVmb3JlIGFwcGx5aW5nIChwcmV2ZW50cyBzaWxlbnQgZGF0YSBjb3JydXB0aW9uKVxuICBjb25zdCB0eXBlRXJyb3JzID0gdmFsaWRhdGVGaWVsZFR5cGVzKGlucHV0LCBub3JtYWxpemVkVHlwZSk7XG4gIGlmICh0eXBlRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gZXJyb3IoYEZpZWxkIHR5cGUgdmFsaWRhdGlvbiBmYWlsZWQ6XFxuJHt0eXBlRXJyb3JzLm1hcChlID0+IGAgIOKAoiAke2V9YCkuam9pbignXFxuJyl9YCk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBzdHJpbmcgZmllbGQgdmFsdWVzIHVzaW5nIGluamVjdGVkIHZhbGlkYXRvclxuICBmb3IgKGNvbnN0IFtmaWVsZCwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGlucHV0KSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uRXJyb3IgPSB2YWxpZGF0ZUZpZWxkVmFsdWUodmFsaWRhdG9yLCBmaWVsZCwgdmFsdWUpO1xuICAgICAgaWYgKHZhbGlkYXRpb25FcnJvcikge1xuICAgICAgICByZXR1cm4gZXJyb3IoYEludmFsaWQgdmFsdWUgZm9yICcke2ZpZWxkfSc6ICR7dmFsaWRhdGlvbkVycm9yfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEJ1aWxkIHRoZSB1cGRhdGUgb2JqZWN0LCBtYXBwaW5nIHRvcC1sZXZlbCBmaWVsZHMgdG8gbWV0YWRhdGEgd2hlcmUgYXBwcm9wcmlhdGVcbiAgLy8gSXNzdWUgIzU2NTogVXNlIHR5cGUtc3BlY2lmaWMgbWV0YWRhdGEgcHJvcGVydGllcyBmcm9tIGF1dGhvcml0YXRpdmUgc291cmNlXG4gIGNvbnN0IG1ldGFkYXRhRmllbGRzID0gS05PV05fTUVUQURBVEFfUFJPUEVSVElFU1tub3JtYWxpemVkVHlwZV0gPz8gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHVwZGF0ZU9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgY29uc3QgdW5yZWNvZ25pemVkRmllbGRXYXJuaW5nczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgY29sbGVjdGlvbldhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBhcHBsaWVkRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBza2lwcGVkRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIEZpZWxkcyBoYW5kbGVkIGJ5IGRlZGljYXRlZCBicmFuY2hlcyAobm90IG1ldGFkYXRhIHJvdXRpbmcpXG4gIGNvbnN0IHNwZWNpYWxSb3V0ZUZpZWxkcyA9IG5ldyBTZXQoWydpbnN0cnVjdGlvbnMnLCAnY29udGVudCcsICdlbGVtZW50cycsICdtZXRhZGF0YScsICdlbnRyaWVzJywgJ3ZlcnNpb24nXSk7XG5cbiAgLy8gQ29udGVudCBjb250ZXh0IG1hcCBzaGFyZWQgYnkgaW5zdHJ1Y3Rpb25zIGFuZCBjb250ZW50IHZhbGlkYXRpb24gYnJhbmNoZXNcbiAgY29uc3QgY29udGVudENvbnRleHRNYXA6IFJlY29yZDxzdHJpbmcsICdwZXJzb25hJyB8ICdza2lsbCcgfCAndGVtcGxhdGUnIHwgJ2FnZW50JyB8ICdtZW1vcnknPiA9IHtcbiAgICBbRWxlbWVudFR5cGUuQUdFTlRdOiAnYWdlbnQnLFxuICAgIFtFbGVtZW50VHlwZS5TS0lMTF06ICdza2lsbCcsXG4gICAgW0VsZW1lbnRUeXBlLlRFTVBMQVRFXTogJ3RlbXBsYXRlJyxcbiAgICBbRWxlbWVudFR5cGUuUEVSU09OQV06ICdwZXJzb25hJyxcbiAgICBbRWxlbWVudFR5cGUuTUVNT1JZXTogJ21lbW9yeScsXG4gIH07XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoaW5wdXQpKSB7XG4gICAgLy8gU2tpcCBkYW5nZXJvdXMgcHJvcGVydGllc1xuICAgIGlmIChEQU5HRVJPVVNfUFJPUEVSVElFUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICBza2lwcGVkRmllbGRzLnB1c2goa2V5KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIFNraXAgcmVhZC1vbmx5IGZpZWxkc1xuICAgIGlmIChSRUFEX09OTFlfRklFTERTLmhhcyhrZXkpKSB7XG4gICAgICBsb2dnZXIud2FybihgW2VkaXRFbGVtZW50XSBTa2lwcGluZyByZWFkLW9ubHkgZmllbGQ6ICR7a2V5fWApO1xuICAgICAgc2tpcHBlZEZpZWxkcy5wdXNoKGtleSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBFdmVyeSBicmFuY2ggYmVsb3cgYXBwbGllcyB0aGUgZmllbGQg4oCUIHRyYWNrIG9uY2UgYXQgdGhlIGVuZFxuICAgIGxldCBmaWVsZEFwcGxpZWQgPSB0cnVlO1xuXG4gICAgLy8gTWFwIGtub3duIG1ldGFkYXRhIGZpZWxkcyBhdXRvbWF0aWNhbGx5ICh0eXBlLXNwZWNpZmljKVxuICAgIGlmIChtZXRhZGF0YUZpZWxkcy5oYXMoa2V5KSAmJiAhc3BlY2lhbFJvdXRlRmllbGRzLmhhcyhrZXkpKSB7XG4gICAgICBpZiAoIXVwZGF0ZU9iai5tZXRhZGF0YSkge1xuICAgICAgICB1cGRhdGVPYmoubWV0YWRhdGEgPSB7fTtcbiAgICAgIH1cbiAgICAgICh1cGRhdGVPYmoubWV0YWRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0gPSB2YWx1ZTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2VsZW1lbnRzJyAmJiBub3JtYWxpemVkVHlwZSA9PT0gRWxlbWVudFR5cGUuRU5TRU1CTEUpIHtcbiAgICAgIC8vIElzc3VlICM2NTg6IFZhbGlkYXRlIGFuZCBub3JtYWxpemUgZWxlbWVudHMgaW5wdXQgKGFycmF5IG9yIGRpY3QgZm9ybWF0KVxuICAgICAgY29uc3QgZWxlbUVycm9yID0gYXBwbHlFbnNlbWJsZUVsZW1lbnRzVXBkYXRlKHZhbHVlLCBlbGVtZW50LCB1cGRhdGVPYmosIGNvbGxlY3Rpb25XYXJuaW5ncyk7XG4gICAgICBpZiAoZWxlbUVycm9yKSByZXR1cm4gZXJyb3IoZWxlbUVycm9yKTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ21ldGFkYXRhJyAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBtZXRhVmFsdWUgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAgICAgLy8gSWYgbWV0YWRhdGEuZWxlbWVudHMgaXMgcHJvdmlkZWQgZm9yIGFuIGVuc2VtYmxlLCBleHRyYWN0IGFuZCByb3V0ZSB0aHJvdWdoXG4gICAgICAvLyB0aGUgZW5zZW1ibGUgZWxlbWVudHMgaGFuZGxlciBmb3IgcHJvcGVyIHZhbGlkYXRpb24vbm9ybWFsaXphdGlvbi9tZXJnZS5cbiAgICAgIGlmIChub3JtYWxpemVkVHlwZSA9PT0gRWxlbWVudFR5cGUuRU5TRU1CTEUgJiYgbWV0YVZhbHVlLmVsZW1lbnRzKSB7XG4gICAgICAgIGNvbnN0IGVsZW1FcnJvciA9IGFwcGx5RW5zZW1ibGVFbGVtZW50c1VwZGF0ZShtZXRhVmFsdWUuZWxlbWVudHMsIGVsZW1lbnQsIHVwZGF0ZU9iaiwgY29sbGVjdGlvbldhcm5pbmdzKTtcbiAgICAgICAgaWYgKGVsZW1FcnJvcikgcmV0dXJuIGVycm9yKGVsZW1FcnJvcik7XG5cbiAgICAgICAgLy8gUmVtb3ZlIGVsZW1lbnRzIGZyb20gbWV0YWRhdGEgdmFsdWUgYmVmb3JlIGRlZXAgbWVyZ2UgdG8gYXZvaWQgZG91YmxlLXByb2Nlc3NpbmdcbiAgICAgICAgY29uc3QgeyBlbGVtZW50czogX2V4dHJhY3RlZCwgLi4ucmVzdE1ldGFkYXRhIH0gPSBtZXRhVmFsdWU7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhyZXN0TWV0YWRhdGEpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB1cGRhdGVPYmoubWV0YWRhdGEgPSBkZWVwTWVyZ2UoXG4gICAgICAgICAgICB1cGRhdGVPYmoubWV0YWRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICAgICAgICByZXN0TWV0YWRhdGEsXG4gICAgICAgICAgICBNRVJHRV9PUFRJT05TXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTWVyZ2UgbmVzdGVkIG1ldGFkYXRhIHdpdGggc2VjdXJpdHkgb3B0aW9uc1xuICAgICAgICB1cGRhdGVPYmoubWV0YWRhdGEgPSBkZWVwTWVyZ2UoXG4gICAgICAgICAgKHVwZGF0ZU9iai5tZXRhZGF0YSB8fCB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICAgICAgbWV0YVZhbHVlLFxuICAgICAgICAgIE1FUkdFX09QVElPTlNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2luc3RydWN0aW9ucycgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gSXNzdWUgIzYwMiByZXNvbHZlZDogJ2luc3RydWN0aW9ucycgaXMgYSBmaXJzdC1jbGFzcyBmaWVsZCAoYmVoYXZpb3JhbCBkaXJlY3RpdmVzKVxuICAgICAgY29uc3QgY29udGVudFZhbGlkYXRpb24gPSBDb250ZW50VmFsaWRhdG9yLnZhbGlkYXRlQW5kU2FuaXRpemUodmFsdWUsIHtcbiAgICAgICAgbWF4TGVuZ3RoOiBTRUNVUklUWV9MSU1JVFMuTUFYX0NPTlRFTlRfTEVOR1RILFxuICAgICAgICBjb250ZW50Q29udGV4dDogY29udGVudENvbnRleHRNYXBbbm9ybWFsaXplZFR5cGVdXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHNhbml0aXplZEluc3RydWN0aW9ucyA9IGNvbnRlbnRWYWxpZGF0aW9uLnNhbml0aXplZENvbnRlbnQgfHwgJyc7XG4gICAgICAvLyBTZXQgaW5zdHJ1Y3Rpb25zIG9uIHRoZSBlbGVtZW50IGRpcmVjdGx5IChhbGwgdHlwZXMgbm93IGhhdmUgdGhpcyBwcm9wZXJ0eSlcbiAgICAgIChlbGVtZW50IGFzIGFueSkuaW5zdHJ1Y3Rpb25zID0gc2FuaXRpemVkSW5zdHJ1Y3Rpb25zO1xuICAgICAgLy8gRm9yIGFnZW50cywgYWxzbyB1cGRhdGUgZXh0ZW5zaW9ucy5pbnN0cnVjdGlvbnMgZm9yIGJhY2t3YXJkIGNvbXBhdFxuICAgICAgaWYgKG5vcm1hbGl6ZWRUeXBlID09PSBFbGVtZW50VHlwZS5BR0VOVCkge1xuICAgICAgICBpZiAoIWVsZW1lbnQuZXh0ZW5zaW9ucykge1xuICAgICAgICAgIChlbGVtZW50IGFzIGFueSkuZXh0ZW5zaW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIChlbGVtZW50IGFzIGFueSkuZXh0ZW5zaW9ucy5pbnN0cnVjdGlvbnMgPSBzYW5pdGl6ZWRJbnN0cnVjdGlvbnM7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdjb250ZW50JyAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBJc3N1ZSAjNTg1LyM2MDI6IEhhbmRsZSBjb250ZW50IHVwZGF0ZXMgKHJlZmVyZW5jZSBtYXRlcmlhbClcbiAgICAgIGNvbnN0IGNvbnRlbnRWYWxpZGF0aW9uID0gQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZUFuZFNhbml0aXplKHZhbHVlLCB7XG4gICAgICAgIG1heExlbmd0aDogU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCxcbiAgICAgICAgY29udGVudENvbnRleHQ6IGNvbnRlbnRDb250ZXh0TWFwW25vcm1hbGl6ZWRUeXBlXVxuICAgICAgfSk7XG4gICAgICBjb25zdCBzYW5pdGl6ZWRDb250ZW50ID0gY29udGVudFZhbGlkYXRpb24uc2FuaXRpemVkQ29udGVudCB8fCAnJztcbiAgICAgIC8vIFNldCBjb250ZW50IG9uIHRoZSBlbGVtZW50IGRpcmVjdGx5IChhbGwgdHlwZXMgbm93IGhhdmUgdGhpcyBwcm9wZXJ0eSlcbiAgICAgIChlbGVtZW50IGFzIGFueSkuY29udGVudCA9IHNhbml0aXplZENvbnRlbnQ7XG4gICAgfSBlbHNlIGlmIChzcGVjaWFsUm91dGVGaWVsZHMuaGFzKGtleSkpIHtcbiAgICAgIC8vIFNwZWNpYWwgcm91dGUgZmllbGQg4oCUIGhhbmRsZWQgZWxzZXdoZXJlLCBza2lwXG4gICAgICBmaWVsZEFwcGxpZWQgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSXNzdWUgIzU2NTogRmllbGQgbm90IGluIHR5cGUtc3BlY2lmaWMgbWV0YWRhdGEgc2V0IGFuZCBub3QgYSBzcGVjaWFsIHJvdXRlIOKAlFxuICAgICAgLy8gc3RpbGwgcm91dGUgdG8gdXBkYXRlT2JqIGZvciBiYWNrd2FyZCBjb21wYXQsIGJ1dCB3YXJuIHRoYXQgaXQgbWF5IG5vdCBwZXJzaXN0XG4gICAgICB1cGRhdGVPYmpba2V5XSA9IHZhbHVlO1xuICAgICAgdW5yZWNvZ25pemVkRmllbGRXYXJuaW5ncy5wdXNoKFxuICAgICAgICBgRmllbGQgJyR7a2V5fScgaXMgbm90IGEgcmVjb2duaXplZCBtZXRhZGF0YSBwcm9wZXJ0eSBmb3IgJHtnZXRFbGVtZW50VHlwZUxhYmVsKG5vcm1hbGl6ZWRUeXBlKX0g4oCUIGl0IG1heSBub3QgcGVyc2lzdCBhZnRlciBzYXZlLmBcbiAgICAgICk7XG4gICAgICBsb2dnZXIud2FybihgW2VkaXRFbGVtZW50XSBVbnJlY29nbml6ZWQgZmllbGQgJyR7a2V5fScgZm9yICR7bm9ybWFsaXplZFR5cGV9LCByb3V0aW5nIHRvIGVsZW1lbnQgb2JqZWN0YCwge1xuICAgICAgICBlbGVtZW50VHlwZTogbm9ybWFsaXplZFR5cGUsXG4gICAgICAgIGVsZW1lbnROYW1lOiBuYW1lLFxuICAgICAgICBmaWVsZDoga2V5LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGZpZWxkQXBwbGllZCkge1xuICAgICAgYXBwbGllZEZpZWxkcy5wdXNoKGtleSk7XG4gICAgfVxuICB9XG5cbiAgLy8gRGVlcCBtZXJnZSB0aGUgdXBkYXRlIGludG8gdGhlIGVsZW1lbnQgd2l0aCBzZWN1cml0eSBvcHRpb25zXG4gIGNvbnN0IGVsZW1lbnREYXRhID0gZWxlbWVudCBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBtZXJnZWREYXRhID0gZGVlcE1lcmdlKGVsZW1lbnREYXRhLCB1cGRhdGVPYmosIE1FUkdFX09QVElPTlMpO1xuXG4gIC8vIEFwcGx5IG1lcmdlZCBkYXRhIGJhY2sgdG8gZWxlbWVudFxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtZXJnZWREYXRhKSkge1xuICAgIGlmIChrZXkgIT09ICdtZXRhZGF0YScpIHtcbiAgICAgIChlbGVtZW50IGFzIGFueSlba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBtZXRhZGF0YSBzZXBhcmF0ZWx5IHRvIHByZXNlcnZlIGVsZW1lbnQgc3RydWN0dXJlXG4gIGlmIChtZXJnZWREYXRhLm1ldGFkYXRhICYmIGVsZW1lbnQubWV0YWRhdGEpIHtcbiAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQubWV0YWRhdGEsIG1lcmdlZERhdGEubWV0YWRhdGEpO1xuICB9XG5cbiAgLy8gSGFuZGxlIG1lbW9yeSBlbnRyaWVzIHNwZWNpYWxseSAoZXh0cmFjdGVkIGZvciBjbGFyaXR5KVxuICBpZiAobm9ybWFsaXplZFR5cGUgPT09IEVsZW1lbnRUeXBlLk1FTU9SWSAmJiBpbnB1dC5lbnRyaWVzICYmIEFycmF5LmlzQXJyYXkoaW5wdXQuZW50cmllcykpIHtcbiAgICBjb25zdCBtZW1vcnlSZXN1bHQgPSBoYW5kbGVNZW1vcnlFbnRyeVVwZGF0ZShpbnB1dC5lbnRyaWVzKTtcbiAgICBpZiAoIW1lbW9yeVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICByZXR1cm4gZXJyb3IoYE1lbW9yeSBlbnRyeSB2YWxpZGF0aW9uIGVycm9yczpcXG4ke21lbW9yeVJlc3VsdC5tZXNzYWdlfVxcblxcblZhbGlkIGVudHJpZXMgd2VyZSBzYXZlZC5gKTtcbiAgICB9XG4gICAgKGVsZW1lbnQgYXMgYW55KS5lbnRyaWVzID0gbWVtb3J5UmVzdWx0LmVudHJpZXNNYXA7XG4gIH1cblxuICAvLyBTeW5jIGVuc2VtYmxlIGVsZW1lbnRzIGZyb20gbWV0YWRhdGEgKGV4dHJhY3RlZCBmb3IgY2xhcml0eSlcbiAgLy8gSXNzdWUgIzQ2NjogUmVzb2x2ZSBlbGVtZW50X3R5cGUgdmlhIHBvcnRmb2xpbyBsb29rdXAgYmVmb3JlIHN5bmMsIHN1cmZhY2Ugd2FybmluZ3NcbiAgbGV0IHJlc29sdXRpb25XYXJuaW5nVGV4dCA9ICcnO1xuICBpZiAobm9ybWFsaXplZFR5cGUgPT09IEVsZW1lbnRUeXBlLkVOU0VNQkxFKSB7XG4gICAgY29uc3QgcmVzb2x1dGlvblJlc3VsdCA9IGF3YWl0IHN5bmNFbnNlbWJsZUVsZW1lbnRzSWZOZWVkZWQoZWxlbWVudCwgaW5wdXQsIGNvbnRleHQpO1xuICAgIGlmIChyZXNvbHV0aW9uUmVzdWx0KSB7XG4gICAgICByZXNvbHV0aW9uV2FybmluZ1RleHQgPSBmb3JtYXRFbGVtZW50UmVzb2x1dGlvbldhcm5pbmdzKHJlc29sdXRpb25SZXN1bHQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZpeCAjOTExOiBOb3JtYWxpemUgbWV0YWRhdGEgYWZ0ZXIgbWVyZ2UgdG8gZW5zdXJlIHN0cnVjdHVyYWwgY29uc2lzdGVuY3kuXG4gIC8vIEJhc2VFbGVtZW50IGNvbnN0cnVjdG9yIHJ1bnMgbm9ybWFsaXplTWV0YWRhdGEgb24gY3JlYXRlL2xvYWQsIGJ1dCB0aGUgZWRpdCBwYXRoXG4gIC8vIG1vZGlmaWVzIG1ldGFkYXRhIGluLXBsYWNlLiBUaGlzIGVuc3VyZXMgZXNzZW50aWFsIGRlZmF1bHRzIHN1cnZpdmUgZWRpdHMuXG4gIGlmIChlbGVtZW50Lm1ldGFkYXRhKSB7XG4gICAgZWxlbWVudC5tZXRhZGF0YS5kZXNjcmlwdGlvbiA/Pz0gJyc7XG4gICAgZWxlbWVudC5tZXRhZGF0YS50YWdzID8/PSBbXTtcbiAgICAvLyBVcGRhdGUgbW9kaWZpZWQgdGltZXN0YW1wXG4gICAgZWxlbWVudC5tZXRhZGF0YS5tb2RpZmllZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgfVxuXG4gIC8vIEhhbmRsZSB2ZXJzaW9uIHVwZGF0ZXNcbiAgaWYgKGlucHV0LnZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHVwZGF0ZSA9IHVwZGF0ZVZlcnNpb25FeHBsaWNpdChlbGVtZW50LCBTdHJpbmcoaW5wdXQudmVyc2lvbikpO1xuICAgIGlmICghdXBkYXRlLnN1Y2Nlc3MpIHtcbiAgICAgIHJldHVybiBlcnJvcih1cGRhdGUubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHVwZGF0ZSB2ZXJzaW9uJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGF1dG9JbmNyZW1lbnRWZXJzaW9uKGVsZW1lbnQpO1xuICB9XG5cbiAgLy8gRGV0ZXJtaW5lIGZpbGUgcGF0aCBmb3Igc2F2aW5nXG4gIGNvbnN0IGZpbGVQYXRoQ2FuZGlkYXRlID0gdHlwZW9mIChlbGVtZW50IGFzIGFueSkuZ2V0RmlsZVBhdGggPT09ICdmdW5jdGlvbidcbiAgICA/IChlbGVtZW50IGFzIGFueSkuZ2V0RmlsZVBhdGgoKVxuICAgIDogKChlbGVtZW50IGFzIGFueSkuZmlsZVBhdGggfHwgKGVsZW1lbnQgYXMgYW55KS5maWxlbmFtZSk7XG4gIGNvbnN0IGZpbGVuYW1lID0gdHlwZW9mIGZpbGVQYXRoQ2FuZGlkYXRlID09PSAnc3RyaW5nJyAmJiBmaWxlUGF0aENhbmRpZGF0ZS5sZW5ndGggPiAwXG4gICAgPyBmaWxlUGF0aENhbmRpZGF0ZVxuICAgIDogZ2V0RWxlbWVudEZpbGVuYW1lKG5vcm1hbGl6ZWRUeXBlLCBlbGVtZW50Lm1ldGFkYXRhPy5uYW1lIHx8IG5hbWUpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgbWFuYWdlci5zYXZlKGVsZW1lbnQsIGZpbGVuYW1lKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGVycm9yKGBGYWlsZWQgdG8gc2F2ZSBlbGVtZW50OiAke2VyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YCk7XG4gIH1cblxuICBjb25zdCBsYWJlbCA9IGdldEVsZW1lbnRUeXBlTGFiZWwobm9ybWFsaXplZFR5cGUpO1xuICBjb25zdCBkaXNwbGF5TmFtZSA9IGVsZW1lbnQubWV0YWRhdGE/Lm5hbWUgfHwgbmFtZTtcbiAgY29uc3QgdXBkYXRlZEZpZWxkcyA9IGFwcGxpZWRGaWVsZHMuam9pbignLCAnKTtcblxuICAvLyBJc3N1ZSAjMTY1NjogSWYgYWxsIGZpZWxkcyB3ZXJlIHNpbGVudGx5IHNraXBwZWQsIHJlcG9ydCBob25lc3RseVxuICBpZiAoYXBwbGllZEZpZWxkcy5sZW5ndGggPT09IDAgJiYgc2tpcHBlZEZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgdGV4dDogYOKaoO+4jyBObyBmaWVsZHMgYXBwbGllZCB0byAke2xhYmVsfSAnJHtkaXNwbGF5TmFtZX0nLiBgICtcbiAgICAgICAgICBgU2tpcHBlZDogJHtza2lwcGVkRmllbGRzLmpvaW4oJywgJyl9IChkYW5nZXJvdXMgb3IgcmVhZC1vbmx5IGZpZWxkcyBhcmUgbm90IGVkaXRhYmxlKS5gXG4gICAgICB9XVxuICAgIH07XG4gIH1cblxuICAvLyBJc3N1ZSAjNTY1OiBJbmNsdWRlIHdhcm5pbmdzIGZvciB1bnJlY29nbml6ZWQgZmllbGRzIGluIHJlc3BvbnNlXG4gIGxldCB1bnJlY29nbml6ZWRXYXJuaW5nVGV4dCA9ICcnO1xuICBpZiAodW5yZWNvZ25pemVkRmllbGRXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgbGluZXMgPSBbJ+KaoO+4jyAqKlVucmVjb2duaXplZCBGaWVsZCBXYXJuaW5nczoqKiddO1xuICAgIGZvciAoY29uc3Qgd2FybmluZyBvZiB1bnJlY29nbml6ZWRGaWVsZFdhcm5pbmdzKSB7XG4gICAgICBsaW5lcy5wdXNoKGAgICDigKIgJHt3YXJuaW5nfWApO1xuICAgIH1cbiAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICB1bnJlY29nbml6ZWRXYXJuaW5nVGV4dCA9IGxpbmVzLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgLy8gSXNzdWUgIzY2MjogSW5jbHVkZSBjb2xsZWN0aW9uIG9wZXJhdGlvbiB3YXJuaW5nc1xuICBsZXQgY29sbGVjdGlvbldhcm5pbmdUZXh0ID0gJyc7XG4gIGlmIChjb2xsZWN0aW9uV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGxpbmVzID0gWyfimqDvuI8gKipDb2xsZWN0aW9uIFdhcm5pbmdzOioqJ107XG4gICAgZm9yIChjb25zdCB3YXJuaW5nIG9mIGNvbGxlY3Rpb25XYXJuaW5ncykge1xuICAgICAgbGluZXMucHVzaChgICAg4oCiICR7d2FybmluZ31gKTtcbiAgICB9XG4gICAgbGluZXMucHVzaCgnJyk7XG4gICAgY29sbGVjdGlvbldhcm5pbmdUZXh0ID0gbGluZXMuam9pbignXFxuJyk7XG4gIH1cblxuICAvLyBJc3N1ZSAjMTY1NjogUmVwb3J0IHNraXBwZWQgZmllbGRzIHNvIExMTXMgZG9uJ3QgYXNzdW1lIHRoZXkgd2VyZSBhcHBsaWVkXG4gIGNvbnN0IHNraXBwZWRUZXh0ID0gc2tpcHBlZEZpZWxkcy5sZW5ndGggPiAwXG4gICAgPyBgXFxu4pqg77iPIFNraXBwZWQ6ICR7c2tpcHBlZEZpZWxkcy5qb2luKCcsICcpfSAoZGFuZ2Vyb3VzIG9yIHJlYWQtb25seSlgXG4gICAgOiAnJztcblxuICByZXR1cm4ge1xuICAgIGNvbnRlbnQ6IFt7XG4gICAgICB0eXBlOiAndGV4dCcsXG4gICAgICB0ZXh0OiBgJHt3YXJuaW5nVGV4dH0ke3Jlc29sdXRpb25XYXJuaW5nVGV4dH0ke3VucmVjb2duaXplZFdhcm5pbmdUZXh0fSR7Y29sbGVjdGlvbldhcm5pbmdUZXh0feKchSBVcGRhdGVkICR7bGFiZWx9ICcke2Rpc3BsYXlOYW1lfScgLSBmaWVsZHM6ICR7dXBkYXRlZEZpZWxkc30ke3NraXBwZWRUZXh0fWBcbiAgICB9XVxuICB9O1xufVxuXG5mdW5jdGlvbiBlcnJvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHtcbiAgICBjb250ZW50OiBbe1xuICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgdGV4dDogYOKdjCAke21lc3NhZ2V9YFxuICAgIH1dXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldE1hbmFnZXJGb3JUeXBlKGNvbnRleHQ6IEVsZW1lbnRDcnVkQ29udGV4dCwgdHlwZTogRWxlbWVudFR5cGUpOiBFbGVtZW50TWFuYWdlcldpdGhQZXJzaXN0ZW5jZTxhbnk+IHwgbnVsbCB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgRWxlbWVudFR5cGUuUEVSU09OQTpcbiAgICAgIHJldHVybiBjb250ZXh0LnBlcnNvbmFNYW5hZ2VyIGFzIEVsZW1lbnRNYW5hZ2VyV2l0aFBlcnNpc3RlbmNlPGFueT47XG4gICAgY2FzZSBFbGVtZW50VHlwZS5TS0lMTDpcbiAgICAgIHJldHVybiBjb250ZXh0LnNraWxsTWFuYWdlciBhcyBFbGVtZW50TWFuYWdlcldpdGhQZXJzaXN0ZW5jZTxTa2lsbD47XG4gICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURTpcbiAgICAgIHJldHVybiBjb250ZXh0LnRlbXBsYXRlTWFuYWdlciBhcyBFbGVtZW50TWFuYWdlcldpdGhQZXJzaXN0ZW5jZTxUZW1wbGF0ZT47XG4gICAgY2FzZSBFbGVtZW50VHlwZS5BR0VOVDpcbiAgICAgIHJldHVybiBjb250ZXh0LmFnZW50TWFuYWdlciBhcyBFbGVtZW50TWFuYWdlcldpdGhQZXJzaXN0ZW5jZTxBZ2VudD47XG4gICAgY2FzZSBFbGVtZW50VHlwZS5NRU1PUlk6XG4gICAgICByZXR1cm4gY29udGV4dC5tZW1vcnlNYW5hZ2VyIGFzIEVsZW1lbnRNYW5hZ2VyV2l0aFBlcnNpc3RlbmNlPE1lbW9yeT47XG4gICAgY2FzZSBFbGVtZW50VHlwZS5FTlNFTUJMRTpcbiAgICAgIHJldHVybiBjb250ZXh0LmVuc2VtYmxlTWFuYWdlciBhcyBFbGVtZW50TWFuYWdlcldpdGhQZXJzaXN0ZW5jZTxhbnk+O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVWZXJzaW9uRXhwbGljaXQoZWxlbWVudDogYW55LCB2ZXJzaW9uU3RyaW5nOiBzdHJpbmcpIHtcbiAgY29uc3QgaXNWYWxpZCA9IC9eKFxcZCspKFxcLlxcZCspPyhcXC5cXGQrKT8oLVthLXpBLVowLTkuLV0rKT8kLy50ZXN0KHZlcnNpb25TdHJpbmcpO1xuICBpZiAoIWlzVmFsaWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICBtZXNzYWdlOiBgSW52YWxpZCB2ZXJzaW9uIGZvcm1hdDogJyR7dmVyc2lvblN0cmluZ30nLiBQbGVhc2UgdXNlIGZvcm1hdCBsaWtlIDEuMC4wLCAxLjAsIG9yIDFgXG4gICAgfTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgZWxlbWVudC52ZXJzaW9uID0gdmVyc2lvblN0cmluZztcbiAgICBpZiAoZWxlbWVudC5tZXRhZGF0YSkge1xuICAgICAgZWxlbWVudC5tZXRhZGF0YS52ZXJzaW9uID0gdmVyc2lvblN0cmluZztcbiAgICB9XG4gICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIHVwZGF0ZSB2ZXJzaW9uJywgeyBlcnJvciB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIHVwZGF0ZSB2ZXJzaW9uOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGF1dG9JbmNyZW1lbnRWZXJzaW9uKGVsZW1lbnQ6IGFueSkge1xuICB0cnkge1xuICAgIGlmIChlbGVtZW50LnZlcnNpb24pIHtcbiAgICAgIC8vIEZpcnN0IG5vcm1hbGl6ZSB0aGUgdmVyc2lvbiB0byAzLXBhcnQgZm9ybWF0IChoYW5kbGVzIGxlZ2FjeSAyLXBhcnQgdmVyc2lvbnMpXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplVmVyc2lvbihTdHJpbmcoZWxlbWVudC52ZXJzaW9uKSk7XG5cbiAgICAgIC8vIENoZWNrIGZvciBwcmUtcmVsZWFzZSB2ZXJzaW9uc1xuICAgICAgY29uc3QgcHJlUmVsZWFzZU1hdGNoID0gbm9ybWFsaXplZC5tYXRjaCgvXihcXGQrXFwuXFxkK1xcLlxcZCspKC0oW2EtekEtWjAtOS4tXSspKT8kLyk7XG5cbiAgICAgIGlmIChwcmVSZWxlYXNlTWF0Y2gpIHtcbiAgICAgICAgY29uc3QgYmFzZVZlcnNpb24gPSBwcmVSZWxlYXNlTWF0Y2hbMV07XG4gICAgICAgIGNvbnN0IHByZVJlbGVhc2VUYWcgPSBwcmVSZWxlYXNlTWF0Y2hbM107XG5cbiAgICAgICAgaWYgKHByZVJlbGVhc2VUYWcpIHtcbiAgICAgICAgICAvLyBJbmNyZW1lbnQgcHJlLXJlbGVhc2UgdmVyc2lvbiAoZS5nLiwgXCIxLjAuMC1iZXRhLjFcIiDihpIgXCIxLjAuMC1iZXRhLjJcIilcbiAgICAgICAgICBjb25zdCBwcmVSZWxlYXNlTnVtYmVyTWF0Y2ggPSBwcmVSZWxlYXNlVGFnLm1hdGNoKC9eKFthLXpBLVpdKylcXC4/KFxcZCspPyQvKTtcbiAgICAgICAgICBpZiAocHJlUmVsZWFzZU51bWJlck1hdGNoKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVSZWxlYXNlVHlwZSA9IHByZVJlbGVhc2VOdW1iZXJNYXRjaFsxXTtcbiAgICAgICAgICAgIGNvbnN0IHByZVJlbGVhc2VOdW1iZXIgPSBOdW1iZXIucGFyc2VJbnQocHJlUmVsZWFzZU51bWJlck1hdGNoWzJdIHx8ICcwJykgKyAxO1xuICAgICAgICAgICAgZWxlbWVudC52ZXJzaW9uID0gYCR7YmFzZVZlcnNpb259LSR7cHJlUmVsZWFzZVR5cGV9LiR7cHJlUmVsZWFzZU51bWJlcn1gO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBObyBwcmUtcmVsZWFzZSBudW1iZXIsIGJ1bXAgcGF0Y2hcbiAgICAgICAgICAgIGNvbnN0IFttYWpvciwgbWlub3IsIHBhdGNoXSA9IGJhc2VWZXJzaW9uLnNwbGl0KCcuJykubWFwKE51bWJlcik7XG4gICAgICAgICAgICBlbGVtZW50LnZlcnNpb24gPSBgJHttYWpvcn0uJHttaW5vcn0uJHtwYXRjaCArIDF9YDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU3RhbmRhcmQgdmVyc2lvbiwgYnVtcCBwYXRjaCAoZS5nLiwgXCIxLjAuMFwiIOKGkiBcIjEuMC4xXCIpXG4gICAgICAgICAgY29uc3QgW21ham9yLCBtaW5vciwgcGF0Y2hdID0gYmFzZVZlcnNpb24uc3BsaXQoJy4nKS5tYXAoTnVtYmVyKTtcbiAgICAgICAgICBlbGVtZW50LnZlcnNpb24gPSBgJHttYWpvcn0uJHttaW5vcn0uJHtwYXRjaCArIDF9YDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2hvdWxkbid0IHJlYWNoIGhlcmUgYWZ0ZXIgbm9ybWFsaXphdGlvbiwgYnV0IGZhbGxiYWNrIHRvIHNhZmUgZGVmYXVsdFxuICAgICAgICBlbGVtZW50LnZlcnNpb24gPSAnMS4wLjEnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyB2ZXJzaW9uLCBzdGFydCBhdCAxLjAuMFxuICAgICAgZWxlbWVudC52ZXJzaW9uID0gJzEuMC4wJztcbiAgICB9XG5cbiAgICAvLyBTeW5jIHZlcnNpb24gdG8gbWV0YWRhdGFcbiAgICBpZiAoZWxlbWVudC5tZXRhZGF0YSkge1xuICAgICAgZWxlbWVudC5tZXRhZGF0YS52ZXJzaW9uID0gZWxlbWVudC52ZXJzaW9uO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBhdXRvLWluY3JlbWVudCB2ZXJzaW9uJywgeyBlcnJvciB9KTtcbiAgfVxufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/handlers/element-crud/helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAWlE,wBAAgB,mBAAmB,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,EAC5E,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,CAAC,EAAE,GACf,CAAC,GAAG,SAAS,CA+Bf;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA8B/F;AAcD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG;IAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAkB9H;AAED,wBAAgB,2BAA2B,IAAI,MAAM,CAEpD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAMjG;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAI1E;AAED,MAAM,WAAW,wBAAwB,CAAC,CAAC;IACzC,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1B,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,OAAO,KAAK,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IACxE,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CACzC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAmEtE,CAAC;AAmCF;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,sBAAsB,EAAE,CA6C1B;AAgBD,wBAAgB,+BAA+B,CAC7C,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC5C,sBAAsB,EAAE,CAsD1B;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,sBAAsB,EAAE,GAAG,MAAM,CAgBxF;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAAC,MAAM,EAAE;IAAE,SAAS,EAAE,KAAK,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,MAAM,CAqBtJ;AAED,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,OAAO,EAAE,wBAAwB,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,EACvD,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CA4CxB"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/handlers/element-crud/helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAWlE,wBAAgB,mBAAmB,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,EAC5E,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,CAAC,EAAE,GACf,CAAC,GAAG,SAAS,CA+Bf;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA8B/F;AAcD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG;IAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAkB9H;AAED,wBAAgB,2BAA2B,IAAI,MAAM,CAEpD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAMjG;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAI1E;AAED,MAAM,WAAW,wBAAwB,CAAC,CAAC;IACzC,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1B,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,OAAO,KAAK,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IACxE,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CACzC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAmEtE,CAAC;AAmCF;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,sBAAsB,EAAE,CA0E1B;AAgBD,wBAAgB,+BAA+B,CAC7C,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC5C,sBAAsB,EAAE,CAsD1B;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,sBAAsB,EAAE,GAAG,MAAM,CAgBxF;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAAC,MAAM,EAAE;IAAE,SAAS,EAAE,KAAK,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,MAAM,CAqBtJ;AAED,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,OAAO,EAAE,wBAAwB,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,EACvD,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CA4CxB"}