@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.
- package/CHANGELOG.md +54 -17
- package/README.github.md +2 -2
- package/README.md +2 -2
- package/README.md.backup +284 -224
- package/README.npm.md +2 -2
- package/dist/cache/LRUCache.d.ts +3 -0
- package/dist/cache/LRUCache.d.ts.map +1 -1
- package/dist/cache/LRUCache.js +36 -26
- package/dist/config/env.d.ts +14 -4
- package/dist/config/env.d.ts.map +1 -1
- package/dist/config/env.js +20 -6
- package/dist/di/Container.d.ts +21 -0
- package/dist/di/Container.d.ts.map +1 -1
- package/dist/di/Container.js +250 -53
- package/dist/elements/BaseElement.d.ts.map +1 -1
- package/dist/elements/BaseElement.js +5 -10
- package/dist/elements/base/BaseElementManager.d.ts +22 -0
- package/dist/elements/base/BaseElementManager.d.ts.map +1 -1
- package/dist/elements/base/BaseElementManager.js +47 -7
- package/dist/elements/memories/Memory.d.ts +1 -0
- package/dist/elements/memories/Memory.d.ts.map +1 -1
- package/dist/elements/memories/Memory.js +12 -8
- package/dist/elements/memories/MemoryManager.d.ts.map +1 -1
- package/dist/elements/memories/MemoryManager.js +23 -42
- package/dist/elements/memories/MemorySearchIndex.js +2 -2
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.d.ts.map +1 -1
- package/dist/generated/version.js +3 -3
- package/dist/handlers/EnhancedIndexHandler.js +6 -6
- package/dist/handlers/element-crud/editElement.d.ts.map +1 -1
- package/dist/handlers/element-crud/editElement.js +39 -18
- package/dist/handlers/element-crud/helpers.d.ts.map +1 -1
- package/dist/handlers/element-crud/helpers.js +30 -3
- package/dist/handlers/element-crud/listElements.d.ts +2 -0
- package/dist/handlers/element-crud/listElements.d.ts.map +1 -1
- package/dist/handlers/element-crud/listElements.js +3 -1
- package/dist/handlers/mcp-aql/Gatekeeper.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/Gatekeeper.js +23 -17
- package/dist/handlers/mcp-aql/GatekeeperTypes.d.ts +4 -0
- package/dist/handlers/mcp-aql/GatekeeperTypes.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/GatekeeperTypes.js +1 -1
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +33 -0
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/MCPAQLHandler.js +232 -23
- package/dist/handlers/mcp-aql/OperationRouter.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/OperationRouter.js +13 -1
- package/dist/handlers/mcp-aql/OperationSchema.d.ts +7 -0
- package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/OperationSchema.js +52 -1
- package/dist/handlers/mcp-aql/UnifiedEndpoint.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/UnifiedEndpoint.js +4 -3
- package/dist/handlers/mcp-aql/evaluatePermission.d.ts +53 -0
- package/dist/handlers/mcp-aql/evaluatePermission.d.ts.map +1 -0
- package/dist/handlers/mcp-aql/evaluatePermission.js +132 -0
- package/dist/handlers/mcp-aql/policies/ElementPolicies.d.ts +17 -0
- package/dist/handlers/mcp-aql/policies/ElementPolicies.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/policies/ElementPolicies.js +91 -1
- package/dist/handlers/mcp-aql/policies/ToolClassification.d.ts +5 -3
- package/dist/handlers/mcp-aql/policies/ToolClassification.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/policies/ToolClassification.js +56 -2
- package/dist/handlers/mcp-aql/types.d.ts +22 -0
- package/dist/handlers/mcp-aql/types.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/types.js +47 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/logging/LogHooks.js +11 -11
- package/dist/logging/LogManager.d.ts +0 -2
- package/dist/logging/LogManager.d.ts.map +1 -1
- package/dist/logging/LogManager.js +1 -3
- package/dist/logging/sinks/MemoryLogSink.d.ts +2 -0
- package/dist/logging/sinks/MemoryLogSink.d.ts.map +1 -1
- package/dist/logging/sinks/MemoryLogSink.js +12 -3
- package/dist/logging/types.d.ts +0 -2
- package/dist/logging/types.d.ts.map +1 -1
- package/dist/logging/types.js +1 -1
- package/dist/metrics/GatekeeperMetricsTracker.d.ts +32 -0
- package/dist/metrics/GatekeeperMetricsTracker.d.ts.map +1 -0
- package/dist/metrics/GatekeeperMetricsTracker.js +42 -0
- package/dist/metrics/MetricsManager.d.ts +47 -0
- package/dist/metrics/MetricsManager.d.ts.map +1 -0
- package/dist/metrics/MetricsManager.js +232 -0
- package/dist/metrics/OperationMetricsTracker.d.ts +32 -0
- package/dist/metrics/OperationMetricsTracker.d.ts.map +1 -0
- package/dist/metrics/OperationMetricsTracker.js +53 -0
- package/dist/metrics/collectors/DefaultElementProviderCollector.d.ts +27 -0
- package/dist/metrics/collectors/DefaultElementProviderCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/DefaultElementProviderCollector.js +69 -0
- package/dist/metrics/collectors/FileLockManagerCollector.d.ts +16 -0
- package/dist/metrics/collectors/FileLockManagerCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/FileLockManagerCollector.js +51 -0
- package/dist/metrics/collectors/GatekeeperMetricsCollector.d.ts +16 -0
- package/dist/metrics/collectors/GatekeeperMetricsCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/GatekeeperMetricsCollector.js +76 -0
- package/dist/metrics/collectors/LRUCacheCollector.d.ts +18 -0
- package/dist/metrics/collectors/LRUCacheCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/LRUCacheCollector.js +95 -0
- package/dist/metrics/collectors/OperationMetricsCollector.d.ts +16 -0
- package/dist/metrics/collectors/OperationMetricsCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/OperationMetricsCollector.js +80 -0
- package/dist/metrics/collectors/OperationalTelemetryCollector.d.ts +17 -0
- package/dist/metrics/collectors/OperationalTelemetryCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/OperationalTelemetryCollector.js +26 -0
- package/dist/metrics/collectors/PerformanceMonitorCollector.d.ts +14 -0
- package/dist/metrics/collectors/PerformanceMonitorCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/PerformanceMonitorCollector.js +141 -0
- package/dist/metrics/collectors/SecurityMonitorCollector.d.ts +21 -0
- package/dist/metrics/collectors/SecurityMonitorCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/SecurityMonitorCollector.js +56 -0
- package/dist/metrics/collectors/SecurityTelemetryCollector.d.ts +15 -0
- package/dist/metrics/collectors/SecurityTelemetryCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/SecurityTelemetryCollector.js +112 -0
- package/dist/metrics/collectors/TriggerMetricsTrackerCollector.d.ts +16 -0
- package/dist/metrics/collectors/TriggerMetricsTrackerCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/TriggerMetricsTrackerCollector.js +26 -0
- package/dist/metrics/collectors/index.d.ts +11 -0
- package/dist/metrics/collectors/index.d.ts.map +1 -0
- package/dist/metrics/collectors/index.js +11 -0
- package/dist/metrics/sinks/MemoryMetricsSink.d.ts +22 -0
- package/dist/metrics/sinks/MemoryMetricsSink.d.ts.map +1 -0
- package/dist/metrics/sinks/MemoryMetricsSink.js +121 -0
- package/dist/metrics/types.d.ts +98 -0
- package/dist/metrics/types.d.ts.map +1 -0
- package/dist/metrics/types.js +24 -0
- package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -1
- package/dist/portfolio/DefaultElementProvider.js +1 -7
- package/dist/portfolio/EnhancedIndexManager.d.ts.map +1 -1
- package/dist/portfolio/EnhancedIndexManager.js +18 -18
- package/dist/portfolio/NLPScoringManager.d.ts.map +1 -1
- package/dist/portfolio/NLPScoringManager.js +5 -9
- package/dist/portfolio/PortfolioIndexManager.js +2 -2
- package/dist/portfolio/RelationshipManager.js +2 -2
- package/dist/portfolio/VerbTriggerManager.d.ts.map +1 -1
- package/dist/portfolio/VerbTriggerManager.js +5 -19
- package/dist/portfolio/config/IndexConfig.d.ts.map +1 -1
- package/dist/portfolio/config/IndexConfig.js +1 -12
- package/dist/portfolio/enhanced-index/ElementDefinitionBuilder.d.ts.map +1 -1
- package/dist/portfolio/enhanced-index/ElementDefinitionBuilder.js +3 -15
- package/dist/portfolio/enhanced-index/SemanticRelationshipService.d.ts.map +1 -1
- package/dist/portfolio/enhanced-index/SemanticRelationshipService.js +2 -16
- package/dist/portfolio/types/RelationshipTypes.d.ts.map +1 -1
- package/dist/portfolio/types/RelationshipTypes.js +3 -17
- package/dist/security/audit/config/suppressions.d.ts.map +1 -1
- package/dist/security/audit/config/suppressions.js +36 -8
- package/dist/security/constants.d.ts.map +1 -1
- package/dist/security/constants.js +10 -6
- package/dist/security/fileLockManager.d.ts.map +1 -1
- package/dist/security/fileLockManager.js +8 -6
- package/dist/security/secureYamlParser.d.ts.map +1 -1
- package/dist/security/secureYamlParser.js +1 -13
- package/dist/security/securityMonitor.d.ts +2 -1
- package/dist/security/securityMonitor.d.ts.map +1 -1
- package/dist/security/securityMonitor.js +14 -3
- package/dist/security/telemetry/SecurityTelemetry.d.ts +16 -0
- package/dist/security/telemetry/SecurityTelemetry.d.ts.map +1 -1
- package/dist/security/telemetry/SecurityTelemetry.js +30 -2
- package/dist/security/tokenManager.d.ts +3 -0
- package/dist/security/tokenManager.d.ts.map +1 -1
- package/dist/security/tokenManager.js +13 -5
- package/dist/security/validation/BackgroundValidator.d.ts.map +1 -1
- package/dist/security/validation/BackgroundValidator.js +7 -7
- package/dist/server/startup.d.ts.map +1 -1
- package/dist/server/startup.js +8 -24
- package/dist/server/tools/MCPAQLTools.js +8 -1
- package/dist/services/ActivationStore.d.ts.map +1 -1
- package/dist/services/ActivationStore.js +9 -3
- package/dist/services/FileWatchService.d.ts +1 -0
- package/dist/services/FileWatchService.d.ts.map +1 -1
- package/dist/services/FileWatchService.js +83 -48
- package/dist/services/MetadataService.d.ts.map +1 -1
- package/dist/services/MetadataService.js +7 -2
- package/dist/services/PolicyExportService.d.ts.map +1 -1
- package/dist/services/PolicyExportService.js +8 -1
- package/dist/services/query/ElementQueryService.d.ts.map +1 -1
- package/dist/services/query/ElementQueryService.js +1 -41
- package/dist/services/query/PaginationService.d.ts.map +1 -1
- package/dist/services/query/PaginationService.js +1 -14
- package/dist/services/query/SortService.d.ts.map +1 -1
- package/dist/services/query/SortService.js +1 -6
- package/dist/services/validation/ValidationService.d.ts.map +1 -1
- package/dist/services/validation/ValidationService.js +3 -8
- package/dist/storage/ElementStorageLayer.d.ts.map +1 -1
- package/dist/storage/ElementStorageLayer.js +5 -2
- package/dist/storage/MemoryStorageLayer.d.ts.map +1 -1
- package/dist/storage/MemoryStorageLayer.js +5 -2
- package/dist/telemetry/OperationalTelemetry.js +2 -2
- package/dist/utils/EventDeduplicator.d.ts +44 -0
- package/dist/utils/EventDeduplicator.d.ts.map +1 -0
- package/dist/utils/EventDeduplicator.js +93 -0
- package/dist/utils/FileLock.d.ts.map +1 -1
- package/dist/utils/FileLock.js +1 -9
- package/dist/utils/PerformanceMonitor.d.ts.map +1 -1
- package/dist/utils/PerformanceMonitor.js +5 -5
- package/dist/utils/SlidingWindowRateLimiter.d.ts +13 -0
- package/dist/utils/SlidingWindowRateLimiter.d.ts.map +1 -0
- package/dist/utils/SlidingWindowRateLimiter.js +23 -0
- package/dist/web/console/IngestRoutes.d.ts +84 -0
- package/dist/web/console/IngestRoutes.d.ts.map +1 -0
- package/dist/web/console/IngestRoutes.js +252 -0
- package/dist/web/console/LeaderElection.d.ts +89 -0
- package/dist/web/console/LeaderElection.d.ts.map +1 -0
- package/dist/web/console/LeaderElection.js +205 -0
- package/dist/web/console/LeaderForwardingSink.d.ts +61 -0
- package/dist/web/console/LeaderForwardingSink.d.ts.map +1 -0
- package/dist/web/console/LeaderForwardingSink.js +197 -0
- package/dist/web/console/SessionNames.d.ts +46 -0
- package/dist/web/console/SessionNames.d.ts.map +1 -0
- package/dist/web/console/SessionNames.js +257 -0
- package/dist/web/console/UnifiedConsole.d.ts +64 -0
- package/dist/web/console/UnifiedConsole.d.ts.map +1 -0
- package/dist/web/console/UnifiedConsole.js +119 -0
- package/dist/web/contentPipeline.d.ts +58 -0
- package/dist/web/contentPipeline.d.ts.map +1 -0
- package/dist/web/contentPipeline.js +112 -0
- package/dist/web/portDiscovery.d.ts +58 -0
- package/dist/web/portDiscovery.d.ts.map +1 -0
- package/dist/web/portDiscovery.js +143 -0
- package/dist/web/public/app.js +148 -60
- package/dist/web/public/logs.js +638 -0
- package/dist/web/public/metrics.js +682 -0
- package/dist/web/public/permissions.js +394 -0
- package/dist/web/public/sessions.js +369 -0
- package/dist/web/routes/healthRoutes.d.ts +16 -0
- package/dist/web/routes/healthRoutes.d.ts.map +1 -0
- package/dist/web/routes/healthRoutes.js +29 -0
- package/dist/web/routes/logRoutes.d.ts +18 -0
- package/dist/web/routes/logRoutes.d.ts.map +1 -0
- package/dist/web/routes/logRoutes.js +126 -0
- package/dist/web/routes/metricsRoutes.d.ts +17 -0
- package/dist/web/routes/metricsRoutes.d.ts.map +1 -0
- package/dist/web/routes/metricsRoutes.js +90 -0
- package/dist/web/routes/permissionRoutes.d.ts +16 -0
- package/dist/web/routes/permissionRoutes.d.ts.map +1 -0
- package/dist/web/routes/permissionRoutes.js +133 -0
- package/dist/web/routes.d.ts.map +1 -1
- package/dist/web/routes.js +309 -339
- package/dist/web/server.d.ts +21 -1
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +42 -4
- package/dist/web/sinks/WebSSELogSink.d.ts +15 -0
- package/dist/web/sinks/WebSSELogSink.d.ts.map +1 -0
- package/dist/web/sinks/WebSSELogSink.js +22 -0
- package/dist/web/sinks/WebSSEMetricsSink.d.ts +16 -0
- package/dist/web/sinks/WebSSEMetricsSink.d.ts.map +1 -0
- package/dist/web/sinks/WebSSEMetricsSink.js +23 -0
- package/package.json +2 -2
- package/server.json +2 -2
- package/dist/constants/version.d.ts +0 -3
- package/dist/constants/version.d.ts.map +0 -1
- package/dist/constants/version.js +0 -4
- package/dist/logging/sinks/SSELogSink.d.ts +0 -35
- package/dist/logging/sinks/SSELogSink.d.ts.map +0 -1
- package/dist/logging/sinks/SSELogSink.js +0 -181
- package/dist/logging/viewer/viewerHtml.d.ts +0 -8
- package/dist/logging/viewer/viewerHtml.d.ts.map +0 -1
- package/dist/logging/viewer/viewerHtml.js +0 -204
- package/dist/web/public/public/app.js +0 -1878
|
@@ -126,17 +126,6 @@ export class IndexConfigManager {
|
|
|
126
126
|
* Update configuration with validation
|
|
127
127
|
*/
|
|
128
128
|
async updateConfig(updates) {
|
|
129
|
-
// SECURITY FIX: Add audit logging for configuration changes (DMCP-SEC-006)
|
|
130
|
-
SecurityMonitor.logSecurityEvent({
|
|
131
|
-
type: 'RULE_ENGINE_CONFIG_UPDATE', // Using existing config update type
|
|
132
|
-
severity: 'LOW',
|
|
133
|
-
source: 'IndexConfigManager.updateConfig',
|
|
134
|
-
details: 'Index configuration update attempted',
|
|
135
|
-
additionalData: {
|
|
136
|
-
configType: 'index',
|
|
137
|
-
updateKeys: Object.keys(updates)
|
|
138
|
-
}
|
|
139
|
-
});
|
|
140
129
|
// Validate the updates before applying
|
|
141
130
|
this.validateConfig(updates);
|
|
142
131
|
this.config = deepMerge(this.config, updates);
|
|
@@ -357,4 +346,4 @@ export class IndexConfigManager {
|
|
|
357
346
|
await this.saveConfig();
|
|
358
347
|
}
|
|
359
348
|
}
|
|
360
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5kZXhDb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcG9ydGZvbGlvL2NvbmZpZy9JbmRleENvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEtBQUssTUFBTSxNQUFNLElBQUksQ0FBQztBQUM3QixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQW1FckQsTUFBTSxPQUFPLGtCQUFrQjtJQUNyQixNQUFNLENBQXFCO0lBQzNCLFVBQVUsQ0FBUztJQUNuQixhQUFhLEdBQXVCO1FBQzFDLEtBQUssRUFBRTtZQUNMLFVBQVUsRUFBRSxDQUFDO1lBQ2IsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixhQUFhLEVBQUUsSUFBSTtZQUNuQixhQUFhLEVBQUUsSUFBSTtZQUNuQixtQkFBbUIsRUFBRSxDQUFDO1NBQ3ZCO1FBQ0QsV0FBVyxFQUFFO1lBQ1gsd0JBQXdCLEVBQUUsR0FBRztZQUM3Qix3QkFBd0IsRUFBRSxLQUFLO1lBQy9CLDBCQUEwQixFQUFFLEdBQUc7WUFDL0IsbUJBQW1CLEVBQUUsRUFBRTtZQUN2QixtQkFBbUIsRUFBRSxHQUFHO1lBQ3hCLDBCQUEwQixFQUFFLEdBQUc7WUFDL0IsbUJBQW1CLEVBQUUsRUFBRTtZQUN2QixzQkFBc0IsRUFBRSxFQUFFO1lBQzFCLGtCQUFrQixFQUFFLElBQUk7WUFDeEIsdUJBQXVCLEVBQUUsSUFBSTtTQUM5QjtRQUNELFFBQVEsRUFBRTtZQUNSLGNBQWMsRUFBRSxFQUFFO1lBQ2xCLFdBQVcsRUFBRSxHQUFHO1lB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SCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUcsQ0FBQztRQUM5QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBYSxDQUFDO1FBRWhDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUMxRCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLENBQUM7WUFDRCxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLENBQUM7UUFFRCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzFCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgRW5oYW5jZWQgSW5kZXggc3lzdGVtXG4gKlxuICogQ2VudHJhbGl6ZXMgYWxsIHR1bmFibGUgcGFyYW1ldGVycyBmb3IgdGhlIGluZGV4LCBOTFAgc2NvcmluZyxcbiAqIGFuZCByZWxhdGlvbnNoaXAgZGlzY292ZXJ5IHN5c3RlbXMuXG4gKlxuICogRklYRVMgSU1QTEVNRU5URUQgKElzc3VlICMxMTAwKTpcbiAqIC0gQWRkZWQgYWxsIG1hZ2ljIG51bWJlcnMgZnJvbSBFbmhhbmNlZCBJbmRleCB0byBjb25maWd1cmF0aW9uXG4gKiAtIENlbnRyYWxpemVkIHRocmVzaG9sZHMsIGxpbWl0cywgYW5kIHRpbWVvdXRzXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgZnNTeW5jIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcbmltcG9ydCB7IGRlZXBNZXJnZSB9IGZyb20gJy4uLy4uL3V0aWxzL2RlZXBNZXJnZS5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXhDb25maWd1cmF0aW9uIHtcbiAgLy8gSW5kZXggTWFuYWdlbWVudFxuICBpbmRleDoge1xuICAgIHR0bE1pbnV0ZXM6IG51bWJlcjsgICAgICAgICAgICAgICAgICAgIC8vIENhY2hlIFRUTCBmb3IgaW5kZXggKGRlZmF1bHQ6IDUpXG4gICAgcmVidWlsZE9uU3RhcnR1cDogYm9vbGVhbjsgICAgICAgICAgICAgLy8gRm9yY2UgcmVidWlsZCBvbiBzdGFydHVwIChkZWZhdWx0OiBmYWxzZSlcbiAgICBwZXJzaXN0VG9EaXNrOiBib29sZWFuOyAgICAgICAgICAgICAgICAvLyBTYXZlIGluZGV4IHRvIGRpc2sgKGRlZmF1bHQ6IHRydWUpXG4gICAgbG9ja1RpbWVvdXRNczogbnVtYmVyOyAgICAgICAgICAgICAgICAgLy8gRmlsZSBsb2NrIHRpbWVvdXQgKGRlZmF1bHQ6IDUwMDApXG4gICAgbWF4Q29uY3VycmVudEJ1aWxkczogbnVtYmVyOyAgICAgICAgICAgLy8gTWF4IGNvbmN1cnJlbnQgYnVpbGRzIChkZWZhdWx0OiAxKVxuICB9O1xuXG4gIC8vIFBlcmZvcm1hbmNlIExpbWl0c1xuICBwZXJmb3JtYW5jZToge1xuICAgIG1heEVsZW1lbnRzRm9yRnVsbE1hdHJpeDogbnVtYmVyOyAgICAgIC8vIE1heCBlbGVtZW50cyBmb3IgZnVsbCBzaW1pbGFyaXR5IG1hdHJpeCAoZGVmYXVsdDogMTAwKVxuICAgIG1heFNpbWlsYXJpdHlDb21wYXJpc29uczogbnVtYmVyOyAgICAgIC8vIE1heCB0b3RhbCBjb21wYXJpc29ucyAoZGVmYXVsdDogMTAwMDApXG4gICAgbWF4UmVsYXRpb25zaGlwQ29tcGFyaXNvbnM6IG51bWJlcjsgICAgLy8gTWF4IGNvbXBhcmlzb25zIGZvciByZWxhdGlvbnNoaXAgZGlzY292ZXJ5IChkZWZhdWx0OiAxMDApXG4gICAgc2ltaWxhcml0eUJhdGNoU2l6ZTogbnVtYmVyOyAgICAgICAgICAgLy8gQmF0Y2ggc2l6ZSBmb3IgYXN5bmMgcHJvY2Vzc2luZyAoZGVmYXVsdDogNTApXG4gICAgc2ltaWxhcml0eVRocmVzaG9sZDogbnVtYmVyOyAgICAgICAgICAgLy8gTWluIHNjb3JlIHRvIHN0b3JlIHJlbGF0aW9uc2hpcCAoZGVmYXVsdDogMC41KVxuICAgIGRlZmF1bHRTaW1pbGFyaXR5VGhyZXNob2xkOiBudW1iZXI7ICAgIC8vIERlZmF1bHQgc2ltaWxhcml0eSB0aHJlc2hvbGQgZm9yIHF1ZXJpZXMgKGRlZmF1bHQ6IDAuMylcbiAgICBkZWZhdWx0U2ltaWxhckxpbWl0OiBudW1iZXI7ICAgICAgICAgICAvLyBEZWZhdWx0IGxpbWl0IGZvciBzaW1pbGFyIGVsZW1lbnRzIChkZWZhdWx0OiA1KVxuICAgIGRlZmF1bHRWZXJiU2VhcmNoTGltaXQ6IG51bWJlcjsgICAgICAgIC8vIERlZmF1bHQgbGltaXQgZm9yIHZlcmIgc2VhcmNoIChkZWZhdWx0OiAxMClcbiAgICBwYXJhbGxlbFByb2Nlc3Npbmc6IGJvb2xlYW47ICAgICAgICAgICAvLyBVc2UgcGFyYWxsZWwgcHJvY2Vzc2luZyAoZGVmYXVsdDogdHJ1ZSlcbiAgICBjaXJjdWl0QnJlYWtlclRpbWVvdXRNczogbnVtYmVyOyAgICAgICAvLyBDaXJjdWl0IGJyZWFrZXIgdGltZW91dCAoZGVmYXVsdDogNTAwMClcbiAgfTtcblxuICAvLyBTYW1wbGluZyBDb25maWd1cmF0aW9uXG4gIHNhbXBsaW5nOiB7XG4gICAgYmFzZVNhbXBsZVNpemU6IG51bWJlcjsgICAgICAgICAgICAgICAgLy8gQmFzZSBzYW1wbGUgc2l6ZSBmb3IgcmVsYXRpb25zaGlwcyAoZGVmYXVsdDogMTApXG4gICAgc2FtcGxlUmF0aW86IG51bWJlcjsgICAgICAgICAgICAgICAgICAgLy8gU2FtcGxlIHJhdGlvIGZvciBsYXJnZSBkYXRhc2V0cyAoZGVmYXVsdDogMC4xKVxuICAgIGNsdXN0ZXJTYW1wbGVMaW1pdDogbnVtYmVyOyAgICAgICAgICAgIC8vIE1heCBzYW1wbGUgc2l6ZSB3aXRoaW4gY2x1c3RlcnMgKGRlZmF1bHQ6IDIwKVxuICB9O1xuXG4gIC8vIE5MUCBTY29yaW5nXG4gIG5scDoge1xuICAgIGNhY2hlRXhwaXJ5TWludXRlczogbnVtYmVyOyAgICAgICAgICAgLy8gTkxQIGNhY2hlIGV4cGlyeSAoZGVmYXVsdDogNSlcbiAgICBtaW5Ub2tlbkxlbmd0aDogbnVtYmVyOyAgICAgICAgICAgICAgIC8vIE1pbiB0b2tlbiBsZW5ndGggKGRlZmF1bHQ6IDIpXG4gICAgZW50cm9weUJhbmRzOiB7XG4gICAgICBsb3c6IG51bWJlcjsgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb3cgZW50cm9weSB0aHJlc2hvbGQgKGRlZmF1bHQ6IDMuMClcbiAgICAgIG1vZGVyYXRlOiBudW1iZXI7ICAgICAgICAgICAgICAgICAgIC8vIE1vZGVyYXRlIGVudHJvcHkgKGRlZmF1bHQ6IDQuNSlcbiAgICAgIGhpZ2g6IG51bWJlcjsgICAgICAgICAgICAgICAgICAgICAgIC8vIEhpZ2ggZW50cm9weSAoZGVmYXVsdDogNi4wKVxuICAgIH07XG4gICAgamFjY2FyZFRocmVzaG9sZHM6IHtcbiAgICAgIGxvdzogbnVtYmVyOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvdyBzaW1pbGFyaXR5IChkZWZhdWx0OiAwLjIpXG4gICAgICBtb2RlcmF0ZTogbnVtYmVyOyAgICAgICAgICAgICAgICAgICAvLyBNb2RlcmF0ZSBzaW1pbGFyaXR5IChkZWZhdWx0OiAwLjQpXG4gICAgICBoaWdoOiBudW1iZXI7ICAgICAgICAgICAgICAgICAgICAgICAvLyBIaWdoIHNpbWlsYXJpdHkgKGRlZmF1bHQ6IDAuNilcbiAgICB9O1xuICB9O1xuXG4gIC8vIFZlcmIgVHJpZ2dlcnNcbiAgdmVyYnM6IHtcbiAgICBjb25maWRlbmNlVGhyZXNob2xkOiBudW1iZXI7ICAgICAgICAgIC8vIE1pbiBjb25maWRlbmNlIGZvciB2ZXJiIG1hdGNoIChkZWZhdWx0OiAwLjUpXG4gICAgbWF4UmVjdXJzaW9uRGVwdGg6IG51bWJlcjsgICAgICAgICAgICAvLyBNYXggc3lub255bSByZWN1cnNpb24gZGVwdGggKGRlZmF1bHQ6IDMpXG4gICAgbWF4RWxlbWVudHNQZXJWZXJiOiBudW1iZXI7ICAgICAgICAgICAvLyBNYXggZWxlbWVudHMgcGVyIHZlcmIgKGRlZmF1bHQ6IDEwKVxuICAgIGluY2x1ZGVTeW5vbnltczogYm9vbGVhbjsgICAgICAgICAgICAgLy8gSW5jbHVkZSBzeW5vbnltIGV4cGFuc2lvbiAoZGVmYXVsdDogdHJ1ZSlcbiAgfTtcblxuICAvLyBNZW1vcnkgTWFuYWdlbWVudFxuICBtZW1vcnk6IHtcbiAgICBtYXhDYWNoZVNpemU6IG51bWJlcjsgICAgICAgICAgICAgICAgIC8vIE1heCBjYWNoZSBlbnRyaWVzIChkZWZhdWx0OiAxMDAwKVxuICAgIGVuYWJsZUdhcmJhZ2VDb2xsZWN0aW9uOiBib29sZWFuOyAgICAgLy8gRW5hYmxlIHBlcmlvZGljIEdDIChkZWZhdWx0OiB0cnVlKVxuICAgIGdjSW50ZXJ2YWxNaW51dGVzOiBudW1iZXI7ICAgICAgICAgICAgLy8gR0MgaW50ZXJ2YWwgKGRlZmF1bHQ6IDMwKVxuICAgIGNsZWFudXBJbnRlcnZhbE1pbnV0ZXM6IG51bWJlcjsgICAgICAgLy8gTWVtb3J5IGNsZWFudXAgaW50ZXJ2YWwgKGRlZmF1bHQ6IDUpXG4gICAgc3RhbGVJbmRleE11bHRpcGxpZXI6IG51bWJlcjsgICAgICAgICAvLyBNdWx0aXBsaWVyIGZvciBzdGFsZSBpbmRleCBjbGVhbnVwIChkZWZhdWx0OiAyKVxuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgSW5kZXhDb25maWdNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBjb25maWc6IEluZGV4Q29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSBjb25maWdQYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgZGVmYXVsdENvbmZpZzogSW5kZXhDb25maWd1cmF0aW9uID0ge1xuICAgIGluZGV4OiB7XG4gICAgICB0dGxNaW51dGVzOiA1LFxuICAgICAgcmVidWlsZE9uU3RhcnR1cDogZmFsc2UsXG4gICAgICBwZXJzaXN0VG9EaXNrOiB0cnVlLFxuICAgICAgbG9ja1RpbWVvdXRNczogNTAwMCxcbiAgICAgIG1heENvbmN1cnJlbnRCdWlsZHM6IDFcbiAgICB9LFxuICAgIHBlcmZvcm1hbmNlOiB7XG4gICAgICBtYXhFbGVtZW50c0ZvckZ1bGxNYXRyaXg6IDEwMCxcbiAgICAgIG1heFNpbWlsYXJpdHlDb21wYXJpc29uczogMTAwMDAsXG4gICAgICBtYXhSZWxhdGlvbnNoaXBDb21wYXJpc29uczogMTAwLFxuICAgICAgc2ltaWxhcml0eUJhdGNoU2l6ZTogNTAsXG4gICAgICBzaW1pbGFyaXR5VGhyZXNob2xkOiAwLjUsXG4gICAgICBkZWZhdWx0U2ltaWxhcml0eVRocmVzaG9sZDogMC41LFxuICAgICAgZGVmYXVsdFNpbWlsYXJMaW1pdDogMTAsXG4gICAgICBkZWZhdWx0VmVyYlNlYXJjaExpbWl0OiAyMCxcbiAgICAgIHBhcmFsbGVsUHJvY2Vzc2luZzogdHJ1ZSxcbiAgICAgIGNpcmN1aXRCcmVha2VyVGltZW91dE1zOiA1MDAwXG4gICAgfSxcbiAgICBzYW1wbGluZzoge1xuICAgICAgYmFzZVNhbXBsZVNpemU6IDEwLFxuICAgICAgc2FtcGxlUmF0aW86IDAuMSxcbiAgICAgIGNsdXN0ZXJTYW1wbGVMaW1pdDogMjBcbiAgICB9LFxuICAgIG5scDoge1xuICAgICAgY2FjaGVFeHBpcnlNaW51dGVzOiA1LFxuICAgICAgbWluVG9rZW5MZW5ndGg6IDIsXG4gICAgICBlbnRyb3B5QmFuZHM6IHtcbiAgICAgICAgbG93OiAzLjAsXG4gICAgICAgIG1vZGVyYXRlOiA0LjUsXG4gICAgICAgIGhpZ2g6IDYuMFxuICAgICAgfSxcbiAgICAgIGphY2NhcmRUaHJlc2hvbGRzOiB7XG4gICAgICAgIGxvdzogMC4yLFxuICAgICAgICBtb2RlcmF0ZTogMC40LFxuICAgICAgICBoaWdoOiAwLjZcbiAgICAgIH1cbiAgICB9LFxuICAgIHZlcmJzOiB7XG4gICAgICBjb25maWRlbmNlVGhyZXNob2xkOiAwLjUsXG4gICAgICBtYXhSZWN1cnNpb25EZXB0aDogMyxcbiAgICAgIG1heEVsZW1lbnRzUGVyVmVyYjogMTAsXG4gICAgICBpbmNsdWRlU3lub255bXM6IHRydWVcbiAgICB9LFxuICAgIG1lbW9yeToge1xuICAgICAgbWF4Q2FjaGVTaXplOiAxMDAwLFxuICAgICAgZW5hYmxlR2FyYmFnZUNvbGxlY3Rpb246IHRydWUsXG4gICAgICBnY0ludGVydmFsTWludXRlczogMzAsXG4gICAgICBjbGVhbnVwSW50ZXJ2YWxNaW51dGVzOiA1LFxuICAgICAgc3RhbGVJbmRleE11bHRpcGxpZXI6IDJcbiAgICB9XG4gIH07XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcG9ydGZvbGlvUGF0aCA9IHBhdGguam9pbihwcm9jZXNzLmVudi5IT01FIHx8ICcnLCAnLmRvbGxob3VzZScsICdwb3J0Zm9saW8nKTtcbiAgICB0aGlzLmNvbmZpZ1BhdGggPSBwYXRoLmpvaW4ocG9ydGZvbGlvUGF0aCwgJy5jb25maWcnLCAnaW5kZXgtY29uZmlnLmpzb24nKTtcbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4udGhpcy5kZWZhdWx0Q29uZmlnIH07XG4gICAgLy8gRklYOiBSYWNlIGNvbmRpdGlvbiAtIGxvYWRDb25maWcgaXMgYXN5bmMgYnV0IGNhbGxlZCBzeW5jIGluIGNvbnN0cnVjdG9yXG4gICAgLy8gTm93IHVzaW5nIHN5bmNocm9ub3VzIGxvYWRpbmcgaW4gY29uc3RydWN0b3JcbiAgICB0aGlzLmxvYWRDb25maWdTeW5jKCk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBjb25maWd1cmF0aW9uIGZyb20gZGlzayBzeW5jaHJvbm91c2x5IChmb3IgY29uc3RydWN0b3IpXG4gICAqL1xuICBwcml2YXRlIGxvYWRDb25maWdTeW5jKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICAvLyBDaGVjayBpZiBmaWxlIGV4aXN0c1xuICAgICAgaWYgKCFmc1N5bmMuZXhpc3RzU3luYyh0aGlzLmNvbmZpZ1BhdGgpKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdObyBjb25maWcgZmlsZSBmb3VuZCwgdXNpbmcgZGVmYXVsdHMnLCB7IHBhdGg6IHRoaXMuY29uZmlnUGF0aCB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb25maWdEYXRhID0gZnNTeW5jLnJlYWRGaWxlU3luYyh0aGlzLmNvbmZpZ1BhdGgsICd1dGYtOCcpO1xuICAgICAgY29uc3QgbG9hZGVkQ29uZmlnID0gSlNPTi5wYXJzZShjb25maWdEYXRhKTtcblxuICAgICAgLy8gRGVlcCBtZXJnZSB3aXRoIGRlZmF1bHRzIHRvIGhhbmRsZSBtaXNzaW5nIGZpZWxkc1xuICAgICAgLy8gRklYOiBMb2FkZWQgY29uZmlnIHNob3VsZCBvdmVycmlkZSBkZWZhdWx0c1xuICAgICAgdGhpcy5jb25maWcgPSBkZWVwTWVyZ2U8SW5kZXhDb25maWd1cmF0aW9uPih0aGlzLmRlZmF1bHRDb25maWcsIGxvYWRlZENvbmZpZyk7XG5cbiAgICAgIGxvZ2dlci5pbmZvKCdJbmRleCBjb25maWd1cmF0aW9uIGxvYWRlZCcsIHsgcGF0aDogdGhpcy5jb25maWdQYXRoIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignRmFpbGVkIHRvIGxvYWQgaW5kZXggY29uZmlnLCB1c2luZyBkZWZhdWx0cycsIHtcbiAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICAgICAgcGF0aDogdGhpcy5jb25maWdQYXRoXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBTYXZlIGN1cnJlbnQgY29uZmlndXJhdGlvbiB0byBkaXNrXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2F2ZUNvbmZpZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnRGlyID0gcGF0aC5kaXJuYW1lKHRoaXMuY29uZmlnUGF0aCk7XG4gICAgICBhd2FpdCBmcy5ta2Rpcihjb25maWdEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUoXG4gICAgICAgIHRoaXMuY29uZmlnUGF0aCxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcsIG51bGwsIDIpLFxuICAgICAgICAndXRmLTgnXG4gICAgICApO1xuXG4gICAgICBsb2dnZXIuZGVidWcoJ0luZGV4IGNvbmZpZ3VyYXRpb24gc2F2ZWQnLCB7IHBhdGg6IHRoaXMuY29uZmlnUGF0aCB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2F2ZSBpbmRleCBjb25maWcnLCB7IGVycm9yIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHVibGljIGdldENvbmZpZygpOiBJbmRleENvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB7IC4uLnRoaXMuY29uZmlnIH07XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGNvbmZpZ3VyYXRpb24gd2l0aCB2YWxpZGF0aW9uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdXBkYXRlQ29uZmlnKHVwZGF0ZXM6IFBhcnRpYWw8SW5kZXhDb25maWd1cmF0aW9uPik6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFNFQ1VSSVRZIEZJWDogQWRkIGF1ZGl0IGxvZ2dpbmcgZm9yIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyAoRE1DUC1TRUMtMDA2KVxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdSVUxFX0VOR0lORV9DT05GSUdfVVBEQVRFJyBhcyBhbnksIC8vIFVzaW5nIGV4aXN0aW5nIGNvbmZpZyB1cGRhdGUgdHlwZVxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnSW5kZXhDb25maWdNYW5hZ2VyLnVwZGF0ZUNvbmZpZycsXG4gICAgICBkZXRhaWxzOiAnSW5kZXggY29uZmlndXJhdGlvbiB1cGRhdGUgYXR0ZW1wdGVkJyxcbiAgICAgIGFkZGl0aW9uYWxEYXRhOiB7XG4gICAgICAgIGNvbmZpZ1R5cGU6ICdpbmRleCcsXG4gICAgICAgIHVwZGF0ZUtleXM6IE9iamVjdC5rZXlzKHVwZGF0ZXMpXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGUgdXBkYXRlcyBiZWZvcmUgYXBwbHlpbmdcbiAgICB0aGlzLnZhbGlkYXRlQ29uZmlnKHVwZGF0ZXMpO1xuXG4gICAgdGhpcy5jb25maWcgPSBkZWVwTWVyZ2U8SW5kZXhDb25maWd1cmF0aW9uPih0aGlzLmNvbmZpZywgdXBkYXRlcyk7XG4gICAgYXdhaXQgdGhpcy5zYXZlQ29uZmlnKCk7XG5cbiAgICBsb2dnZXIuaW5mbygnSW5kZXggY29uZmlndXJhdGlvbiB1cGRhdGVkJywgeyB1cGRhdGVzIH0pO1xuXG4gICAgLy8gTG9nIHN1Y2Nlc3NmdWwgdXBkYXRlXG4gICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgdHlwZTogJ1JVTEVfRU5HSU5FX0NPTkZJR19VUERBVEUnIGFzIGFueSxcbiAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgIHNvdXJjZTogJ0luZGV4Q29uZmlnTWFuYWdlci51cGRhdGVDb25maWcnLFxuICAgICAgZGV0YWlsczogJ0luZGV4IGNvbmZpZ3VyYXRpb24gdXBkYXRlIHN1Y2Nlc3NmdWwnLFxuICAgICAgYWRkaXRpb25hbERhdGE6IHtcbiAgICAgICAgY29uZmlnVHlwZTogJ2luZGV4JyxcbiAgICAgICAgdXBkYXRlZEZpZWxkczogT2JqZWN0LmtleXModXBkYXRlcylcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBjb25maWd1cmF0aW9uIHZhbHVlc1xuICAgKiBUaHJvd3MgYW4gZXJyb3IgaWYgYW55IHZhbHVlIGlzIGludmFsaWRcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVDb25maWcoY29uZmlnOiBQYXJ0aWFsPEluZGV4Q29uZmlndXJhdGlvbj4pOiB2b2lkIHtcbiAgICAvLyBWYWxpZGF0ZSBwZXJmb3JtYW5jZSB0aHJlc2hvbGRzICgwLTEgcmFuZ2UpXG4gICAgaWYgKGNvbmZpZy5wZXJmb3JtYW5jZSkge1xuICAgICAgY29uc3QgcGVyZiA9IGNvbmZpZy5wZXJmb3JtYW5jZTtcblxuICAgICAgLy8gU2ltaWxhcml0eSB0aHJlc2hvbGRzIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxXG4gICAgICBpZiAocGVyZi5zaW1pbGFyaXR5VGhyZXNob2xkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHBlcmYuc2ltaWxhcml0eVRocmVzaG9sZCA8IDAgfHwgcGVyZi5zaW1pbGFyaXR5VGhyZXNob2xkID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgc2ltaWxhcml0eVRocmVzaG9sZCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMSwgZ290ICR7cGVyZi5zaW1pbGFyaXR5VGhyZXNob2xkfWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwZXJmLmRlZmF1bHRTaW1pbGFyaXR5VGhyZXNob2xkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHBlcmYuZGVmYXVsdFNpbWlsYXJpdHlUaHJlc2hvbGQgPCAwIHx8IHBlcmYuZGVmYXVsdFNpbWlsYXJpdHlUaHJlc2hvbGQgPiAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBkZWZhdWx0U2ltaWxhcml0eVRocmVzaG9sZCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMSwgZ290ICR7cGVyZi5kZWZhdWx0U2ltaWxhcml0eVRocmVzaG9sZH1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBQb3NpdGl2ZSBpbnRlZ2VyIHZhbGlkYXRpb25zXG4gICAgICBpZiAocGVyZi5tYXhFbGVtZW50c0ZvckZ1bGxNYXRyaXggIT09IHVuZGVmaW5lZCAmJiBwZXJmLm1heEVsZW1lbnRzRm9yRnVsbE1hdHJpeCA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgbWF4RWxlbWVudHNGb3JGdWxsTWF0cml4IG11c3QgYmUgcG9zaXRpdmUsIGdvdCAke3BlcmYubWF4RWxlbWVudHNGb3JGdWxsTWF0cml4fWApO1xuICAgICAgfVxuXG4gICAgICBpZiAocGVyZi5tYXhTaW1pbGFyaXR5Q29tcGFyaXNvbnMgIT09IHVuZGVmaW5lZCAmJiBwZXJmLm1heFNpbWlsYXJpdHlDb21wYXJpc29ucyA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgbWF4U2ltaWxhcml0eUNvbXBhcmlzb25zIG11c3QgYmUgcG9zaXRpdmUsIGdvdCAke3BlcmYubWF4U2ltaWxhcml0eUNvbXBhcmlzb25zfWApO1xuICAgICAgfVxuXG4gICAgICBpZiAocGVyZi5tYXhSZWxhdGlvbnNoaXBDb21wYXJpc29ucyAhPT0gdW5kZWZpbmVkICYmIHBlcmYubWF4UmVsYXRpb25zaGlwQ29tcGFyaXNvbnMgPD0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG1heFJlbGF0aW9uc2hpcENvbXBhcmlzb25zIG11c3QgYmUgcG9zaXRpdmUsIGdvdCAke3BlcmYubWF4UmVsYXRpb25zaGlwQ29tcGFyaXNvbnN9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwZXJmLnNpbWlsYXJpdHlCYXRjaFNpemUgIT09IHVuZGVmaW5lZCAmJiBwZXJmLnNpbWlsYXJpdHlCYXRjaFNpemUgPD0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNpbWlsYXJpdHlCYXRjaFNpemUgbXVzdCBiZSBwb3NpdGl2ZSwgZ290ICR7cGVyZi5zaW1pbGFyaXR5QmF0Y2hTaXplfWApO1xuICAgICAgfVxuXG4gICAgICBpZiAocGVyZi5kZWZhdWx0U2ltaWxhckxpbWl0ICE9PSB1bmRlZmluZWQgJiYgcGVyZi5kZWZhdWx0U2ltaWxhckxpbWl0IDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBkZWZhdWx0U2ltaWxhckxpbWl0IG11c3QgYmUgcG9zaXRpdmUsIGdvdCAke3BlcmYuZGVmYXVsdFNpbWlsYXJMaW1pdH1gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHBlcmYuZGVmYXVsdFZlcmJTZWFyY2hMaW1pdCAhPT0gdW5kZWZpbmVkICYmIHBlcmYuZGVmYXVsdFZlcmJTZWFyY2hMaW1pdCA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZGVmYXVsdFZlcmJTZWFyY2hMaW1pdCBtdXN0IGJlIHBvc2l0aXZlLCBnb3QgJHtwZXJmLmRlZmF1bHRWZXJiU2VhcmNoTGltaXR9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwZXJmLmNpcmN1aXRCcmVha2VyVGltZW91dE1zICE9PSB1bmRlZmluZWQgJiYgcGVyZi5jaXJjdWl0QnJlYWtlclRpbWVvdXRNcyA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY2lyY3VpdEJyZWFrZXJUaW1lb3V0TXMgbXVzdCBiZSBwb3NpdGl2ZSwgZ290ICR7cGVyZi5jaXJjdWl0QnJlYWtlclRpbWVvdXRNc31gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBzYW1wbGluZyBjb25maWd1cmF0aW9uXG4gICAgaWYgKGNvbmZpZy5zYW1wbGluZykge1xuICAgICAgY29uc3Qgc2FtcGxpbmcgPSBjb25maWcuc2FtcGxpbmc7XG5cbiAgICAgIC8vIFNhbXBsZSByYXRpbyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMVxuICAgICAgaWYgKHNhbXBsaW5nLnNhbXBsZVJhdGlvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHNhbXBsaW5nLnNhbXBsZVJhdGlvIDw9IDAgfHwgc2FtcGxpbmcuc2FtcGxlUmF0aW8gPiAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzYW1wbGVSYXRpbyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMSwgZ290ICR7c2FtcGxpbmcuc2FtcGxlUmF0aW99YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHNhbXBsaW5nLmJhc2VTYW1wbGVTaXplICE9PSB1bmRlZmluZWQgJiYgc2FtcGxpbmcuYmFzZVNhbXBsZVNpemUgPD0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGJhc2VTYW1wbGVTaXplIG11c3QgYmUgcG9zaXRpdmUsIGdvdCAke3NhbXBsaW5nLmJhc2VTYW1wbGVTaXplfWApO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2FtcGxpbmcuY2x1c3RlclNhbXBsZUxpbWl0ICE9PSB1bmRlZmluZWQgJiYgc2FtcGxpbmcuY2x1c3RlclNhbXBsZUxpbWl0IDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjbHVzdGVyU2FtcGxlTGltaXQgbXVzdCBiZSBwb3NpdGl2ZSwgZ290ICR7c2FtcGxpbmcuY2x1c3RlclNhbXBsZUxpbWl0fWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIE5MUCBjb25maWd1cmF0aW9uXG4gICAgaWYgKGNvbmZpZy5ubHApIHtcbiAgICAgIGNvbnN0IG5scCA9IGNvbmZpZy5ubHA7XG5cbiAgICAgIC8vIEphY2NhcmQgdGhyZXNob2xkcyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMVxuICAgICAgaWYgKG5scC5qYWNjYXJkVGhyZXNob2xkcykge1xuICAgICAgICBjb25zdCBqYWNjYXJkID0gbmxwLmphY2NhcmRUaHJlc2hvbGRzO1xuICAgICAgICBpZiAoamFjY2FyZC5sb3cgIT09IHVuZGVmaW5lZCAmJiAoamFjY2FyZC5sb3cgPCAwIHx8IGphY2NhcmQubG93ID4gMSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGphY2NhcmRUaHJlc2hvbGRzLmxvdyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMSwgZ290ICR7amFjY2FyZC5sb3d9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGphY2NhcmQubW9kZXJhdGUgIT09IHVuZGVmaW5lZCAmJiAoamFjY2FyZC5tb2RlcmF0ZSA8IDAgfHwgamFjY2FyZC5tb2RlcmF0ZSA+IDEpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBqYWNjYXJkVGhyZXNob2xkcy5tb2RlcmF0ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMSwgZ290ICR7amFjY2FyZC5tb2RlcmF0ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoamFjY2FyZC5oaWdoICE9PSB1bmRlZmluZWQgJiYgKGphY2NhcmQuaGlnaCA8IDAgfHwgamFjY2FyZC5oaWdoID4gMSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGphY2NhcmRUaHJlc2hvbGRzLmhpZ2ggbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEsIGdvdCAke2phY2NhcmQuaGlnaH1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBFbnRyb3B5IGJhbmRzIG11c3QgYmUgcG9zaXRpdmVcbiAgICAgIGlmIChubHAuZW50cm9weUJhbmRzKSB7XG4gICAgICAgIGNvbnN0IGVudHJvcHkgPSBubHAuZW50cm9weUJhbmRzO1xuICAgICAgICBpZiAoZW50cm9weS5sb3cgIT09IHVuZGVmaW5lZCAmJiBlbnRyb3B5LmxvdyA8IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGVudHJvcHlCYW5kcy5sb3cgbXVzdCBiZSBub24tbmVnYXRpdmUsIGdvdCAke2VudHJvcHkubG93fWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRyb3B5Lm1vZGVyYXRlICE9PSB1bmRlZmluZWQgJiYgZW50cm9weS5tb2RlcmF0ZSA8IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGVudHJvcHlCYW5kcy5tb2RlcmF0ZSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSwgZ290ICR7ZW50cm9weS5tb2RlcmF0ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW50cm9weS5oaWdoICE9PSB1bmRlZmluZWQgJiYgZW50cm9weS5oaWdoIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZW50cm9weUJhbmRzLmhpZ2ggbXVzdCBiZSBub24tbmVnYXRpdmUsIGdvdCAke2VudHJvcHkuaGlnaH1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobmxwLmNhY2hlRXhwaXJ5TWludXRlcyAhPT0gdW5kZWZpbmVkICYmIG5scC5jYWNoZUV4cGlyeU1pbnV0ZXMgPD0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNhY2hlRXhwaXJ5TWludXRlcyBtdXN0IGJlIHBvc2l0aXZlLCBnb3QgJHtubHAuY2FjaGVFeHBpcnlNaW51dGVzfWApO1xuICAgICAgfVxuXG4gICAgICBpZiAobmxwLm1pblRva2VuTGVuZ3RoICE9PSB1bmRlZmluZWQgJiYgbmxwLm1pblRva2VuTGVuZ3RoIDwgMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG1pblRva2VuTGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgMSwgZ290ICR7bmxwLm1pblRva2VuTGVuZ3RofWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHZlcmIgY29uZmlndXJhdGlvblxuICAgIGlmIChjb25maWcudmVyYnMpIHtcbiAgICAgIGNvbnN0IHZlcmJzID0gY29uZmlnLnZlcmJzO1xuXG4gICAgICBpZiAodmVyYnMuY29uZmlkZW5jZVRocmVzaG9sZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh2ZXJicy5jb25maWRlbmNlVGhyZXNob2xkIDwgMCB8fCB2ZXJicy5jb25maWRlbmNlVGhyZXNob2xkID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgY29uZmlkZW5jZVRocmVzaG9sZCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMSwgZ290ICR7dmVyYnMuY29uZmlkZW5jZVRocmVzaG9sZH1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodmVyYnMubWF4UmVjdXJzaW9uRGVwdGggIT09IHVuZGVmaW5lZCAmJiB2ZXJicy5tYXhSZWN1cnNpb25EZXB0aCA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgbWF4UmVjdXJzaW9uRGVwdGggbXVzdCBiZSBwb3NpdGl2ZSwgZ290ICR7dmVyYnMubWF4UmVjdXJzaW9uRGVwdGh9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh2ZXJicy5tYXhFbGVtZW50c1BlclZlcmIgIT09IHVuZGVmaW5lZCAmJiB2ZXJicy5tYXhFbGVtZW50c1BlclZlcmIgPD0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG1heEVsZW1lbnRzUGVyVmVyYiBtdXN0IGJlIHBvc2l0aXZlLCBnb3QgJHt2ZXJicy5tYXhFbGVtZW50c1BlclZlcmJ9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbWVtb3J5IGNvbmZpZ3VyYXRpb25cbiAgICBpZiAoY29uZmlnLm1lbW9yeSkge1xuICAgICAgY29uc3QgbWVtb3J5ID0gY29uZmlnLm1lbW9yeTtcblxuICAgICAgaWYgKG1lbW9yeS5tYXhDYWNoZVNpemUgIT09IHVuZGVmaW5lZCAmJiBtZW1vcnkubWF4Q2FjaGVTaXplIDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBtYXhDYWNoZVNpemUgbXVzdCBiZSBwb3NpdGl2ZSwgZ290ICR7bWVtb3J5Lm1heENhY2hlU2l6ZX1gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1lbW9yeS5nY0ludGVydmFsTWludXRlcyAhPT0gdW5kZWZpbmVkICYmIG1lbW9yeS5nY0ludGVydmFsTWludXRlcyA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZ2NJbnRlcnZhbE1pbnV0ZXMgbXVzdCBiZSBwb3NpdGl2ZSwgZ290ICR7bWVtb3J5LmdjSW50ZXJ2YWxNaW51dGVzfWApO1xuICAgICAgfVxuXG4gICAgICBpZiAobWVtb3J5LmNsZWFudXBJbnRlcnZhbE1pbnV0ZXMgIT09IHVuZGVmaW5lZCAmJiBtZW1vcnkuY2xlYW51cEludGVydmFsTWludXRlcyA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY2xlYW51cEludGVydmFsTWludXRlcyBtdXN0IGJlIHBvc2l0aXZlLCBnb3QgJHttZW1vcnkuY2xlYW51cEludGVydmFsTWludXRlc31gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1lbW9yeS5zdGFsZUluZGV4TXVsdGlwbGllciAhPT0gdW5kZWZpbmVkICYmIG1lbW9yeS5zdGFsZUluZGV4TXVsdGlwbGllciA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgc3RhbGVJbmRleE11bHRpcGxpZXIgbXVzdCBiZSBwb3NpdGl2ZSwgZ290ICR7bWVtb3J5LnN0YWxlSW5kZXhNdWx0aXBsaWVyfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGluZGV4IGNvbmZpZ3VyYXRpb25cbiAgICBpZiAoY29uZmlnLmluZGV4KSB7XG4gICAgICBjb25zdCBpbmRleCA9IGNvbmZpZy5pbmRleDtcblxuICAgICAgaWYgKGluZGV4LnR0bE1pbnV0ZXMgIT09IHVuZGVmaW5lZCAmJiBpbmRleC50dGxNaW51dGVzIDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB0dGxNaW51dGVzIG11c3QgYmUgcG9zaXRpdmUsIGdvdCAke2luZGV4LnR0bE1pbnV0ZXN9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpbmRleC5sb2NrVGltZW91dE1zICE9PSB1bmRlZmluZWQgJiYgaW5kZXgubG9ja1RpbWVvdXRNcyA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgbG9ja1RpbWVvdXRNcyBtdXN0IGJlIHBvc2l0aXZlLCBnb3QgJHtpbmRleC5sb2NrVGltZW91dE1zfWApO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5kZXgubWF4Q29uY3VycmVudEJ1aWxkcyAhPT0gdW5kZWZpbmVkICYmIGluZGV4Lm1heENvbmN1cnJlbnRCdWlsZHMgPD0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG1heENvbmN1cnJlbnRCdWlsZHMgbXVzdCBiZSBwb3NpdGl2ZSwgZ290ICR7aW5kZXgubWF4Q29uY3VycmVudEJ1aWxkc31gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdG8gZGVmYXVsdCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVzZXRUb0RlZmF1bHRzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFNFQ1VSSVRZIEZJWDogQWRkIGF1ZGl0IGxvZ2dpbmcgZm9yIGNvbmZpZ3VyYXRpb24gcmVzZXQgKERNQ1AtU0VDLTAwNilcbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnUlVMRV9FTkdJTkVfQ09ORklHX1VQREFURScgYXMgYW55LFxuICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLCAvLyBIaWdoZXIgc2V2ZXJpdHkgZm9yIGZ1bGwgcmVzZXRcbiAgICAgIHNvdXJjZTogJ0luZGV4Q29uZmlnTWFuYWdlci5yZXNldFRvRGVmYXVsdHMnLFxuICAgICAgZGV0YWlsczogJ0luZGV4IGNvbmZpZ3VyYXRpb24gcmVzZXQgdG8gZGVmYXVsdHMnLFxuICAgICAgYWRkaXRpb25hbERhdGE6IHtcbiAgICAgICAgY29uZmlnVHlwZTogJ2luZGV4JyxcbiAgICAgICAgYWN0aW9uOiAncmVzZXQnXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4udGhpcy5kZWZhdWx0Q29uZmlnIH07XG4gICAgYXdhaXQgdGhpcy5zYXZlQ29uZmlnKCk7XG5cbiAgICBsb2dnZXIuaW5mbygnSW5kZXggY29uZmlndXJhdGlvbiByZXNldCB0byBkZWZhdWx0cycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHZhbHVlIGJ5IHBhdGhcbiAgICovXG4gIHB1YmxpYyBnZXQocGF0aDogc3RyaW5nKTogYW55IHtcbiAgICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5jb25maWcgYXMgYW55O1xuXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgICBpZiAocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmIHBhcnQgaW4gcmVzdWx0KSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdFtwYXJ0XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiB2YWx1ZSBieSBwYXRoXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0KHBhdGg6IHN0cmluZywgdmFsdWU6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFNFQ1VSSVRZIEZJWDogQWRkIGF1ZGl0IGxvZ2dpbmcgZm9yIGRpcmVjdCBjb25maWcgbW9kaWZpY2F0aW9ucyAoRE1DUC1TRUMtMDA2KVxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdSVUxFX0VOR0lORV9DT05GSUdfVVBEQVRFJyBhcyBhbnksXG4gICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICBzb3VyY2U6ICdJbmRleENvbmZpZ01hbmFnZXIuc2V0JyxcbiAgICAgIGRldGFpbHM6IGBJbmRleCBjb25maWd1cmF0aW9uIHZhbHVlIHNldDogJHtwYXRofWAsXG4gICAgICBhZGRpdGlvbmFsRGF0YToge1xuICAgICAgICBjb25maWdUeXBlOiAnaW5kZXgnLFxuICAgICAgICBwYXRoLFxuICAgICAgICB2YWx1ZVR5cGU6IHR5cGVvZiB2YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgY29uc3QgbGFzdFBhcnQgPSBwYXJ0cy5wb3AoKSE7XG4gICAgbGV0IHRhcmdldCA9IHRoaXMuY29uZmlnIGFzIGFueTtcblxuICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgICAgaWYgKCEocGFydCBpbiB0YXJnZXQpIHx8IHR5cGVvZiB0YXJnZXRbcGFydF0gIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRhcmdldFtwYXJ0XSA9IHt9O1xuICAgICAgfVxuICAgICAgdGFyZ2V0ID0gdGFyZ2V0W3BhcnRdO1xuICAgIH1cblxuICAgIHRhcmdldFtsYXN0UGFydF0gPSB2YWx1ZTtcbiAgICBhd2FpdCB0aGlzLnNhdmVDb25maWcoKTtcbiAgfVxufSJdfQ==
|
|
349
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5kZXhDb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcG9ydGZvbGlvL2NvbmZpZy9JbmRleENvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEtBQUssTUFBTSxNQUFNLElBQUksQ0FBQztBQUM3QixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQW1FckQsTUFBTSxPQUFPLGtCQUFrQjtJQUNyQixNQUFNLENBQXFCO0lBQzNCLFVBQVUsQ0FBUztJQUNuQixhQUFhLEdBQXVCO1FBQzFDLEtBQUssRUFBRTtZQUNMLFVBQVUsRUFBRSxDQUFDO1lBQ2IsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixhQUFhLEVBQUUsSUFBSTtZQUNuQixhQUFhLEVBQUUsSUFBSTtZQUNuQixtQkFBbUIsRUFBRSxDQUFDO1NBQ3ZCO1FBQ0QsV0FBVyxFQUFFO1lBQ1gsd0JBQXdCLEVBQUUsR0FBRztZQUM3Qix3QkFBd0IsRUFBRSxLQUFLO1lBQy9CLDBCQUEwQixFQUFFLEdBQUc7WUFDL0IsbUJBQW1CLEVBQUUsRUFBRTtZQUN2QixtQkFBbUIsRUFBRSxHQUFHO1lBQ3hCLDBCQUEwQixFQUFFLEdBQUc7WUFDL0IsbUJBQW1CLEVBQUUsRUFBRTtZQUN2QixzQkFBc0IsRUFBRSxFQUFFO1lBQzFCLGtCQUFrQixFQUFFLElBQUk7WUFDeEIsdUJBQXVCLEVBQUUsSUFBSTtTQUM5QjtRQUNELFFBQVEsRUFBRTtZQUNSLGNBQWMsRUFBRSxFQUFFO1lBQ2xCLFdBQVcsRUFBRSxHQUFHO1lB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Q0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUMxRCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLENBQUM7WUFDRCxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLENBQUM7UUFFRCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzFCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgRW5oYW5jZWQgSW5kZXggc3lzdGVtXG4gKlxuICogQ2VudHJhbGl6ZXMgYWxsIHR1bmFibGUgcGFyYW1ldGVycyBmb3IgdGhlIGluZGV4LCBOTFAgc2NvcmluZyxcbiAqIGFuZCByZWxhdGlvbnNoaXAgZGlzY292ZXJ5IHN5c3RlbXMuXG4gKlxuICogRklYRVMgSU1QTEVNRU5URUQgKElzc3VlICMxMTAwKTpcbiAqIC0gQWRkZWQgYWxsIG1hZ2ljIG51bWJlcnMgZnJvbSBFbmhhbmNlZCBJbmRleCB0byBjb25maWd1cmF0aW9uXG4gKiAtIENlbnRyYWxpemVkIHRocmVzaG9sZHMsIGxpbWl0cywgYW5kIHRpbWVvdXRzXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgZnNTeW5jIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcbmltcG9ydCB7IGRlZXBNZXJnZSB9IGZyb20gJy4uLy4uL3V0aWxzL2RlZXBNZXJnZS5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXhDb25maWd1cmF0aW9uIHtcbiAgLy8gSW5kZXggTWFuYWdlbWVudFxuICBpbmRleDoge1xuICAgIHR0bE1pbnV0ZXM6IG51bWJlcjsgICAgICAgICAgICAgICAgICAgIC8vIENhY2hlIFRUTCBmb3IgaW5kZXggKGRlZmF1bHQ6IDUpXG4gICAgcmVidWlsZE9uU3RhcnR1cDogYm9vbGVhbjsgICAgICAgICAgICAgLy8gRm9yY2UgcmVidWlsZCBvbiBzdGFydHVwIChkZWZhdWx0OiBmYWxzZSlcbiAgICBwZXJzaXN0VG9EaXNrOiBib29sZWFuOyAgICAgICAgICAgICAgICAvLyBTYXZlIGluZGV4IHRvIGRpc2sgKGRlZmF1bHQ6IHRydWUpXG4gICAgbG9ja1RpbWVvdXRNczogbnVtYmVyOyAgICAgICAgICAgICAgICAgLy8gRmlsZSBsb2NrIHRpbWVvdXQgKGRlZmF1bHQ6IDUwMDApXG4gICAgbWF4Q29uY3VycmVudEJ1aWxkczogbnVtYmVyOyAgICAgICAgICAgLy8gTWF4IGNvbmN1cnJlbnQgYnVpbGRzIChkZWZhdWx0OiAxKVxuICB9O1xuXG4gIC8vIFBlcmZvcm1hbmNlIExpbWl0c1xuICBwZXJmb3JtYW5jZToge1xuICAgIG1heEVsZW1lbnRzRm9yRnVsbE1hdHJpeDogbnVtYmVyOyAgICAgIC8vIE1heCBlbGVtZW50cyBmb3IgZnVsbCBzaW1pbGFyaXR5IG1hdHJpeCAoZGVmYXVsdDogMTAwKVxuICAgIG1heFNpbWlsYXJpdHlDb21wYXJpc29uczogbnVtYmVyOyAgICAgIC8vIE1heCB0b3RhbCBjb21wYXJpc29ucyAoZGVmYXVsdDogMTAwMDApXG4gICAgbWF4UmVsYXRpb25zaGlwQ29tcGFyaXNvbnM6IG51bWJlcjsgICAgLy8gTWF4IGNvbXBhcmlzb25zIGZvciByZWxhdGlvbnNoaXAgZGlzY292ZXJ5IChkZWZhdWx0OiAxMDApXG4gICAgc2ltaWxhcml0eUJhdGNoU2l6ZTogbnVtYmVyOyAgICAgICAgICAgLy8gQmF0Y2ggc2l6ZSBmb3IgYXN5bmMgcHJvY2Vzc2luZyAoZGVmYXVsdDogNTApXG4gICAgc2ltaWxhcml0eVRocmVzaG9sZDogbnVtYmVyOyAgICAgICAgICAgLy8gTWluIHNjb3JlIHRvIHN0b3JlIHJlbGF0aW9uc2hpcCAoZGVmYXVsdDogMC41KVxuICAgIGRlZmF1bHRTaW1pbGFyaXR5VGhyZXNob2xkOiBudW1iZXI7ICAgIC8vIERlZmF1bHQgc2ltaWxhcml0eSB0aHJlc2hvbGQgZm9yIHF1ZXJpZXMgKGRlZmF1bHQ6IDAuMylcbiAgICBkZWZhdWx0U2ltaWxhckxpbWl0OiBudW1iZXI7ICAgICAgICAgICAvLyBEZWZhdWx0IGxpbWl0IGZvciBzaW1pbGFyIGVsZW1lbnRzIChkZWZhdWx0OiA1KVxuICAgIGRlZmF1bHRWZXJiU2VhcmNoTGltaXQ6IG51bWJlcjsgICAgICAgIC8vIERlZmF1bHQgbGltaXQgZm9yIHZlcmIgc2VhcmNoIChkZWZhdWx0OiAxMClcbiAgICBwYXJhbGxlbFByb2Nlc3Npbmc6IGJvb2xlYW47ICAgICAgICAgICAvLyBVc2UgcGFyYWxsZWwgcHJvY2Vzc2luZyAoZGVmYXVsdDogdHJ1ZSlcbiAgICBjaXJjdWl0QnJlYWtlclRpbWVvdXRNczogbnVtYmVyOyAgICAgICAvLyBDaXJjdWl0IGJyZWFrZXIgdGltZW91dCAoZGVmYXVsdDogNTAwMClcbiAgfTtcblxuICAvLyBTYW1wbGluZyBDb25maWd1cmF0aW9uXG4gIHNhbXBsaW5nOiB7XG4gICAgYmFzZVNhbXBsZVNpemU6IG51bWJlcjsgICAgICAgICAgICAgICAgLy8gQmFzZSBzYW1wbGUgc2l6ZSBmb3IgcmVsYXRpb25zaGlwcyAoZGVmYXVsdDogMTApXG4gICAgc2FtcGxlUmF0aW86IG51bWJlcjsgICAgICAgICAgICAgICAgICAgLy8gU2FtcGxlIHJhdGlvIGZvciBsYXJnZSBkYXRhc2V0cyAoZGVmYXVsdDogMC4xKVxuICAgIGNsdXN0ZXJTYW1wbGVMaW1pdDogbnVtYmVyOyAgICAgICAgICAgIC8vIE1heCBzYW1wbGUgc2l6ZSB3aXRoaW4gY2x1c3RlcnMgKGRlZmF1bHQ6IDIwKVxuICB9O1xuXG4gIC8vIE5MUCBTY29yaW5nXG4gIG5scDoge1xuICAgIGNhY2hlRXhwaXJ5TWludXRlczogbnVtYmVyOyAgICAgICAgICAgLy8gTkxQIGNhY2hlIGV4cGlyeSAoZGVmYXVsdDogNSlcbiAgICBtaW5Ub2tlbkxlbmd0aDogbnVtYmVyOyAgICAgICAgICAgICAgIC8vIE1pbiB0b2tlbiBsZW5ndGggKGRlZmF1bHQ6IDIpXG4gICAgZW50cm9weUJhbmRzOiB7XG4gICAgICBsb3c6IG51bWJlcjsgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb3cgZW50cm9weSB0aHJlc2hvbGQgKGRlZmF1bHQ6IDMuMClcbiAgICAgIG1vZGVyYXRlOiBudW1iZXI7ICAgICAgICAgICAgICAgICAgIC8vIE1vZGVyYXRlIGVudHJvcHkgKGRlZmF1bHQ6IDQuNSlcbiAgICAgIGhpZ2g6IG51bWJlcjsgICAgICAgICAgICAgICAgICAgICAgIC8vIEhpZ2ggZW50cm9weSAoZGVmYXVsdDogNi4wKVxuICAgIH07XG4gICAgamFjY2FyZFRocmVzaG9sZHM6IHtcbiAgICAgIGxvdzogbnVtYmVyOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvdyBzaW1pbGFyaXR5IChkZWZhdWx0OiAwLjIpXG4gICAgICBtb2RlcmF0ZTogbnVtYmVyOyAgICAgICAgICAgICAgICAgICAvLyBNb2RlcmF0ZSBzaW1pbGFyaXR5IChkZWZhdWx0OiAwLjQpXG4gICAgICBoaWdoOiBudW1iZXI7ICAgICAgICAgICAgICAgICAgICAgICAvLyBIaWdoIHNpbWlsYXJpdHkgKGRlZmF1bHQ6IDAuNilcbiAgICB9O1xuICB9O1xuXG4gIC8vIFZlcmIgVHJpZ2dlcnNcbiAgdmVyYnM6IHtcbiAgICBjb25maWRlbmNlVGhyZXNob2xkOiBudW1iZXI7ICAgICAgICAgIC8vIE1pbiBjb25maWRlbmNlIGZvciB2ZXJiIG1hdGNoIChkZWZhdWx0OiAwLjUpXG4gICAgbWF4UmVjdXJzaW9uRGVwdGg6IG51bWJlcjsgICAgICAgICAgICAvLyBNYXggc3lub255bSByZWN1cnNpb24gZGVwdGggKGRlZmF1bHQ6IDMpXG4gICAgbWF4RWxlbWVudHNQZXJWZXJiOiBudW1iZXI7ICAgICAgICAgICAvLyBNYXggZWxlbWVudHMgcGVyIHZlcmIgKGRlZmF1bHQ6IDEwKVxuICAgIGluY2x1ZGVTeW5vbnltczogYm9vbGVhbjsgICAgICAgICAgICAgLy8gSW5jbHVkZSBzeW5vbnltIGV4cGFuc2lvbiAoZGVmYXVsdDogdHJ1ZSlcbiAgfTtcblxuICAvLyBNZW1vcnkgTWFuYWdlbWVudFxuICBtZW1vcnk6IHtcbiAgICBtYXhDYWNoZVNpemU6IG51bWJlcjsgICAgICAgICAgICAgICAgIC8vIE1heCBjYWNoZSBlbnRyaWVzIChkZWZhdWx0OiAxMDAwKVxuICAgIGVuYWJsZUdhcmJhZ2VDb2xsZWN0aW9uOiBib29sZWFuOyAgICAgLy8gRW5hYmxlIHBlcmlvZGljIEdDIChkZWZhdWx0OiB0cnVlKVxuICAgIGdjSW50ZXJ2YWxNaW51dGVzOiBudW1iZXI7ICAgICAgICAgICAgLy8gR0MgaW50ZXJ2YWwgKGRlZmF1bHQ6IDMwKVxuICAgIGNsZWFudXBJbnRlcnZhbE1pbnV0ZXM6IG51bWJlcjsgICAgICAgLy8gTWVtb3J5IGNsZWFudXAgaW50ZXJ2YWwgKGRlZmF1bHQ6IDUpXG4gICAgc3RhbGVJbmRleE11bHRpcGxpZXI6IG51bWJlcjsgICAgICAgICAvLyBNdWx0aXBsaWVyIGZvciBzdGFsZSBpbmRleCBjbGVhbnVwIChkZWZhdWx0OiAyKVxuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgSW5kZXhDb25maWdNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBjb25maWc6IEluZGV4Q29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSBjb25maWdQYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgZGVmYXVsdENvbmZpZzogSW5kZXhDb25maWd1cmF0aW9uID0ge1xuICAgIGluZGV4OiB7XG4gICAgICB0dGxNaW51dGVzOiA1LFxuICAgICAgcmVidWlsZE9uU3RhcnR1cDogZmFsc2UsXG4gICAgICBwZXJzaXN0VG9EaXNrOiB0cnVlLFxuICAgICAgbG9ja1RpbWVvdXRNczogNTAwMCxcbiAgICAgIG1heENvbmN1cnJlbnRCdWlsZHM6IDFcbiAgICB9LFxuICAgIHBlcmZvcm1hbmNlOiB7XG4gICAgICBtYXhFbGVtZW50c0ZvckZ1bGxNYXRyaXg6IDEwMCxcbiAgICAgIG1heFNpbWlsYXJpdHlDb21wYXJpc29uczogMTAwMDAsXG4gICAgICBtYXhSZWxhdGlvbnNoaXBDb21wYXJpc29uczogMTAwLFxuICAgICAgc2ltaWxhcml0eUJhdGNoU2l6ZTogNTAsXG4gICAgICBzaW1pbGFyaXR5VGhyZXNob2xkOiAwLjUsXG4gICAgICBkZWZhdWx0U2ltaWxhcml0eVRocmVzaG9sZDogMC41LFxuICAgICAgZGVmYXVsdFNpbWlsYXJMaW1pdDogMTAsXG4gICAgICBkZWZhdWx0VmVyYlNlYXJjaExpbWl0OiAyMCxcbiAgICAgIHBhcmFsbGVsUHJvY2Vzc2luZzogdHJ1ZSxcbiAgICAgIGNpcmN1aXRCcmVha2VyVGltZW91dE1zOiA1MDAwXG4gICAgfSxcbiAgICBzYW1wbGluZzoge1xuICAgICAgYmFzZVNhbXBsZVNpemU6IDEwLFxuICAgICAgc2FtcGxlUmF0aW86IDAuMSxcbiAgICAgIGNsdXN0ZXJTYW1wbGVMaW1pdDogMjBcbiAgICB9LFxuICAgIG5scDoge1xuICAgICAgY2FjaGVFeHBpcnlNaW51dGVzOiA1LFxuICAgICAgbWluVG9rZW5MZW5ndGg6IDIsXG4gICAgICBlbnRyb3B5QmFuZHM6IHtcbiAgICAgICAgbG93OiAzLjAsXG4gICAgICAgIG1vZGVyYXRlOiA0LjUsXG4gICAgICAgIGhpZ2g6IDYuMFxuICAgICAgfSxcbiAgICAgIGphY2NhcmRUaHJlc2hvbGRzOiB7XG4gICAgICAgIGxvdzogMC4yLFxuICAgICAgICBtb2RlcmF0ZTogMC40LFxuICAgICAgICBoaWdoOiAwLjZcbiAgICAgIH1cbiAgICB9LFxuICAgIHZlcmJzOiB7XG4gICAgICBjb25maWRlbmNlVGhyZXNob2xkOiAwLjUsXG4gICAgICBtYXhSZWN1cnNpb25EZXB0aDogMyxcbiAgICAgIG1heEVsZW1lbnRzUGVyVmVyYjogMTAsXG4gICAgICBpbmNsdWRlU3lub255bXM6IHRydWVcbiAgICB9LFxuICAgIG1lbW9yeToge1xuICAgICAgbWF4Q2FjaGVTaXplOiAxMDAwLFxuICAgICAgZW5hYmxlR2FyYmFnZUNvbGxlY3Rpb246IHRydWUsXG4gICAgICBnY0ludGVydmFsTWludXRlczogMzAsXG4gICAgICBjbGVhbnVwSW50ZXJ2YWxNaW51dGVzOiA1LFxuICAgICAgc3RhbGVJbmRleE11bHRpcGxpZXI6IDJcbiAgICB9XG4gIH07XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcG9ydGZvbGlvUGF0aCA9IHBhdGguam9pbihwcm9jZXNzLmVudi5IT01FIHx8ICcnLCAnLmRvbGxob3VzZScsICdwb3J0Zm9saW8nKTtcbiAgICB0aGlzLmNvbmZpZ1BhdGggPSBwYXRoLmpvaW4ocG9ydGZvbGlvUGF0aCwgJy5jb25maWcnLCAnaW5kZXgtY29uZmlnLmpzb24nKTtcbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4udGhpcy5kZWZhdWx0Q29uZmlnIH07XG4gICAgLy8gRklYOiBSYWNlIGNvbmRpdGlvbiAtIGxvYWRDb25maWcgaXMgYXN5bmMgYnV0IGNhbGxlZCBzeW5jIGluIGNvbnN0cnVjdG9yXG4gICAgLy8gTm93IHVzaW5nIHN5bmNocm9ub3VzIGxvYWRpbmcgaW4gY29uc3RydWN0b3JcbiAgICB0aGlzLmxvYWRDb25maWdTeW5jKCk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBjb25maWd1cmF0aW9uIGZyb20gZGlzayBzeW5jaHJvbm91c2x5IChmb3IgY29uc3RydWN0b3IpXG4gICAqL1xuICBwcml2YXRlIGxvYWRDb25maWdTeW5jKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICAvLyBDaGVjayBpZiBmaWxlIGV4aXN0c1xuICAgICAgaWYgKCFmc1N5bmMuZXhpc3RzU3luYyh0aGlzLmNvbmZpZ1BhdGgpKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdObyBjb25maWcgZmlsZSBmb3VuZCwgdXNpbmcgZGVmYXVsdHMnLCB7IHBhdGg6IHRoaXMuY29uZmlnUGF0aCB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb25maWdEYXRhID0gZnNTeW5jLnJlYWRGaWxlU3luYyh0aGlzLmNvbmZpZ1BhdGgsICd1dGYtOCcpO1xuICAgICAgY29uc3QgbG9hZGVkQ29uZmlnID0gSlNPTi5wYXJzZShjb25maWdEYXRhKTtcblxuICAgICAgLy8gRGVlcCBtZXJnZSB3aXRoIGRlZmF1bHRzIHRvIGhhbmRsZSBtaXNzaW5nIGZpZWxkc1xuICAgICAgLy8gRklYOiBMb2FkZWQgY29uZmlnIHNob3VsZCBvdmVycmlkZSBkZWZhdWx0c1xuICAgICAgdGhpcy5jb25maWcgPSBkZWVwTWVyZ2U8SW5kZXhDb25maWd1cmF0aW9uPih0aGlzLmRlZmF1bHRDb25maWcsIGxvYWRlZENvbmZpZyk7XG5cbiAgICAgIGxvZ2dlci5pbmZvKCdJbmRleCBjb25maWd1cmF0aW9uIGxvYWRlZCcsIHsgcGF0aDogdGhpcy5jb25maWdQYXRoIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignRmFpbGVkIHRvIGxvYWQgaW5kZXggY29uZmlnLCB1c2luZyBkZWZhdWx0cycsIHtcbiAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICAgICAgcGF0aDogdGhpcy5jb25maWdQYXRoXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBTYXZlIGN1cnJlbnQgY29uZmlndXJhdGlvbiB0byBkaXNrXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2F2ZUNvbmZpZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnRGlyID0gcGF0aC5kaXJuYW1lKHRoaXMuY29uZmlnUGF0aCk7XG4gICAgICBhd2FpdCBmcy5ta2Rpcihjb25maWdEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUoXG4gICAgICAgIHRoaXMuY29uZmlnUGF0aCxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcsIG51bGwsIDIpLFxuICAgICAgICAndXRmLTgnXG4gICAgICApO1xuXG4gICAgICBsb2dnZXIuZGVidWcoJ0luZGV4IGNvbmZpZ3VyYXRpb24gc2F2ZWQnLCB7IHBhdGg6IHRoaXMuY29uZmlnUGF0aCB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2F2ZSBpbmRleCBjb25maWcnLCB7IGVycm9yIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHVibGljIGdldENvbmZpZygpOiBJbmRleENvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB7IC4uLnRoaXMuY29uZmlnIH07XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGNvbmZpZ3VyYXRpb24gd2l0aCB2YWxpZGF0aW9uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdXBkYXRlQ29uZmlnKHVwZGF0ZXM6IFBhcnRpYWw8SW5kZXhDb25maWd1cmF0aW9uPik6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFZhbGlkYXRlIHRoZSB1cGRhdGVzIGJlZm9yZSBhcHBseWluZ1xuICAgIHRoaXMudmFsaWRhdGVDb25maWcodXBkYXRlcyk7XG5cbiAgICB0aGlzLmNvbmZpZyA9IGRlZXBNZXJnZTxJbmRleENvbmZpZ3VyYXRpb24+KHRoaXMuY29uZmlnLCB1cGRhdGVzKTtcbiAgICBhd2FpdCB0aGlzLnNhdmVDb25maWcoKTtcblxuICAgIGxvZ2dlci5pbmZvKCdJbmRleCBjb25maWd1cmF0aW9uIHVwZGF0ZWQnLCB7IHVwZGF0ZXMgfSk7XG5cbiAgICAvLyBMb2cgc3VjY2Vzc2Z1bCB1cGRhdGVcbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnUlVMRV9FTkdJTkVfQ09ORklHX1VQREFURScgYXMgYW55LFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnSW5kZXhDb25maWdNYW5hZ2VyLnVwZGF0ZUNvbmZpZycsXG4gICAgICBkZXRhaWxzOiAnSW5kZXggY29uZmlndXJhdGlvbiB1cGRhdGUgc3VjY2Vzc2Z1bCcsXG4gICAgICBhZGRpdGlvbmFsRGF0YToge1xuICAgICAgICBjb25maWdUeXBlOiAnaW5kZXgnLFxuICAgICAgICB1cGRhdGVkRmllbGRzOiBPYmplY3Qua2V5cyh1cGRhdGVzKVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGNvbmZpZ3VyYXRpb24gdmFsdWVzXG4gICAqIFRocm93cyBhbiBlcnJvciBpZiBhbnkgdmFsdWUgaXMgaW52YWxpZFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUNvbmZpZyhjb25maWc6IFBhcnRpYWw8SW5kZXhDb25maWd1cmF0aW9uPik6IHZvaWQge1xuICAgIC8vIFZhbGlkYXRlIHBlcmZvcm1hbmNlIHRocmVzaG9sZHMgKDAtMSByYW5nZSlcbiAgICBpZiAoY29uZmlnLnBlcmZvcm1hbmNlKSB7XG4gICAgICBjb25zdCBwZXJmID0gY29uZmlnLnBlcmZvcm1hbmNlO1xuXG4gICAgICAvLyBTaW1pbGFyaXR5IHRocmVzaG9sZHMgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDFcbiAgICAgIGlmIChwZXJmLnNpbWlsYXJpdHlUaHJlc2hvbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAocGVyZi5zaW1pbGFyaXR5VGhyZXNob2xkIDwgMCB8fCBwZXJmLnNpbWlsYXJpdHlUaHJlc2hvbGQgPiAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzaW1pbGFyaXR5VGhyZXNob2xkIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLCBnb3QgJHtwZXJmLnNpbWlsYXJpdHlUaHJlc2hvbGR9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBlcmYuZGVmYXVsdFNpbWlsYXJpdHlUaHJlc2hvbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAocGVyZi5kZWZhdWx0U2ltaWxhcml0eVRocmVzaG9sZCA8IDAgfHwgcGVyZi5kZWZhdWx0U2ltaWxhcml0eVRocmVzaG9sZCA+IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGRlZmF1bHRTaW1pbGFyaXR5VGhyZXNob2xkIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLCBnb3QgJHtwZXJmLmRlZmF1bHRTaW1pbGFyaXR5VGhyZXNob2xkfWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFBvc2l0aXZlIGludGVnZXIgdmFsaWRhdGlvbnNcbiAgICAgIGlmIChwZXJmLm1heEVsZW1lbnRzRm9yRnVsbE1hdHJpeCAhPT0gdW5kZWZpbmVkICYmIHBlcmYubWF4RWxlbWVudHNGb3JGdWxsTWF0cml4IDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBtYXhFbGVtZW50c0ZvckZ1bGxNYXRyaXggbXVzdCBiZSBwb3NpdGl2ZSwgZ290ICR7cGVyZi5tYXhFbGVtZW50c0ZvckZ1bGxNYXRyaXh9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwZXJmLm1heFNpbWlsYXJpdHlDb21wYXJpc29ucyAhPT0gdW5kZWZpbmVkICYmIHBlcmYubWF4U2ltaWxhcml0eUNvbXBhcmlzb25zIDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBtYXhTaW1pbGFyaXR5Q29tcGFyaXNvbnMgbXVzdCBiZSBwb3NpdGl2ZSwgZ290ICR7cGVyZi5tYXhTaW1pbGFyaXR5Q29tcGFyaXNvbnN9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwZXJmLm1heFJlbGF0aW9uc2hpcENvbXBhcmlzb25zICE9PSB1bmRlZmluZWQgJiYgcGVyZi5tYXhSZWxhdGlvbnNoaXBDb21wYXJpc29ucyA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgbWF4UmVsYXRpb25zaGlwQ29tcGFyaXNvbnMgbXVzdCBiZSBwb3NpdGl2ZSwgZ290ICR7cGVyZi5tYXhSZWxhdGlvbnNoaXBDb21wYXJpc29uc31gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHBlcmYuc2ltaWxhcml0eUJhdGNoU2l6ZSAhPT0gdW5kZWZpbmVkICYmIHBlcmYuc2ltaWxhcml0eUJhdGNoU2l6ZSA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgc2ltaWxhcml0eUJhdGNoU2l6ZSBtdXN0IGJlIHBvc2l0aXZlLCBnb3QgJHtwZXJmLnNpbWlsYXJpdHlCYXRjaFNpemV9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwZXJmLmRlZmF1bHRTaW1pbGFyTGltaXQgIT09IHVuZGVmaW5lZCAmJiBwZXJmLmRlZmF1bHRTaW1pbGFyTGltaXQgPD0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGRlZmF1bHRTaW1pbGFyTGltaXQgbXVzdCBiZSBwb3NpdGl2ZSwgZ290ICR7cGVyZi5kZWZhdWx0U2ltaWxhckxpbWl0fWApO1xuICAgICAgfVxuXG4gICAgICBpZiAocGVyZi5kZWZhdWx0VmVyYlNlYXJjaExpbWl0ICE9PSB1bmRlZmluZWQgJiYgcGVyZi5kZWZhdWx0VmVyYlNlYXJjaExpbWl0IDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBkZWZhdWx0VmVyYlNlYXJjaExpbWl0IG11c3QgYmUgcG9zaXRpdmUsIGdvdCAke3BlcmYuZGVmYXVsdFZlcmJTZWFyY2hMaW1pdH1gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHBlcmYuY2lyY3VpdEJyZWFrZXJUaW1lb3V0TXMgIT09IHVuZGVmaW5lZCAmJiBwZXJmLmNpcmN1aXRCcmVha2VyVGltZW91dE1zIDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjaXJjdWl0QnJlYWtlclRpbWVvdXRNcyBtdXN0IGJlIHBvc2l0aXZlLCBnb3QgJHtwZXJmLmNpcmN1aXRCcmVha2VyVGltZW91dE1zfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHNhbXBsaW5nIGNvbmZpZ3VyYXRpb25cbiAgICBpZiAoY29uZmlnLnNhbXBsaW5nKSB7XG4gICAgICBjb25zdCBzYW1wbGluZyA9IGNvbmZpZy5zYW1wbGluZztcblxuICAgICAgLy8gU2FtcGxlIHJhdGlvIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxXG4gICAgICBpZiAoc2FtcGxpbmcuc2FtcGxlUmF0aW8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoc2FtcGxpbmcuc2FtcGxlUmF0aW8gPD0gMCB8fCBzYW1wbGluZy5zYW1wbGVSYXRpbyA+IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNhbXBsZVJhdGlvIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLCBnb3QgJHtzYW1wbGluZy5zYW1wbGVSYXRpb31gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc2FtcGxpbmcuYmFzZVNhbXBsZVNpemUgIT09IHVuZGVmaW5lZCAmJiBzYW1wbGluZy5iYXNlU2FtcGxlU2l6ZSA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgYmFzZVNhbXBsZVNpemUgbXVzdCBiZSBwb3NpdGl2ZSwgZ290ICR7c2FtcGxpbmcuYmFzZVNhbXBsZVNpemV9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzYW1wbGluZy5jbHVzdGVyU2FtcGxlTGltaXQgIT09IHVuZGVmaW5lZCAmJiBzYW1wbGluZy5jbHVzdGVyU2FtcGxlTGltaXQgPD0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNsdXN0ZXJTYW1wbGVMaW1pdCBtdXN0IGJlIHBvc2l0aXZlLCBnb3QgJHtzYW1wbGluZy5jbHVzdGVyU2FtcGxlTGltaXR9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgTkxQIGNvbmZpZ3VyYXRpb25cbiAgICBpZiAoY29uZmlnLm5scCkge1xuICAgICAgY29uc3QgbmxwID0gY29uZmlnLm5scDtcblxuICAgICAgLy8gSmFjY2FyZCB0aHJlc2hvbGRzIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxXG4gICAgICBpZiAobmxwLmphY2NhcmRUaHJlc2hvbGRzKSB7XG4gICAgICAgIGNvbnN0IGphY2NhcmQgPSBubHAuamFjY2FyZFRocmVzaG9sZHM7XG4gICAgICAgIGlmIChqYWNjYXJkLmxvdyAhPT0gdW5kZWZpbmVkICYmIChqYWNjYXJkLmxvdyA8IDAgfHwgamFjY2FyZC5sb3cgPiAxKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgamFjY2FyZFRocmVzaG9sZHMubG93IG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLCBnb3QgJHtqYWNjYXJkLmxvd31gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoamFjY2FyZC5tb2RlcmF0ZSAhPT0gdW5kZWZpbmVkICYmIChqYWNjYXJkLm1vZGVyYXRlIDwgMCB8fCBqYWNjYXJkLm1vZGVyYXRlID4gMSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGphY2NhcmRUaHJlc2hvbGRzLm1vZGVyYXRlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLCBnb3QgJHtqYWNjYXJkLm1vZGVyYXRlfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChqYWNjYXJkLmhpZ2ggIT09IHVuZGVmaW5lZCAmJiAoamFjY2FyZC5oaWdoIDwgMCB8fCBqYWNjYXJkLmhpZ2ggPiAxKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgamFjY2FyZFRocmVzaG9sZHMuaGlnaCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMSwgZ290ICR7amFjY2FyZC5oaWdofWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEVudHJvcHkgYmFuZHMgbXVzdCBiZSBwb3NpdGl2ZVxuICAgICAgaWYgKG5scC5lbnRyb3B5QmFuZHMpIHtcbiAgICAgICAgY29uc3QgZW50cm9weSA9IG5scC5lbnRyb3B5QmFuZHM7XG4gICAgICAgIGlmIChlbnRyb3B5LmxvdyAhPT0gdW5kZWZpbmVkICYmIGVudHJvcHkubG93IDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZW50cm9weUJhbmRzLmxvdyBtdXN0IGJlIG5vbi1uZWdhdGl2ZSwgZ290ICR7ZW50cm9weS5sb3d9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudHJvcHkubW9kZXJhdGUgIT09IHVuZGVmaW5lZCAmJiBlbnRyb3B5Lm1vZGVyYXRlIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZW50cm9weUJhbmRzLm1vZGVyYXRlIG11c3QgYmUgbm9uLW5lZ2F0aXZlLCBnb3QgJHtlbnRyb3B5Lm1vZGVyYXRlfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRyb3B5LmhpZ2ggIT09IHVuZGVmaW5lZCAmJiBlbnRyb3B5LmhpZ2ggPCAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBlbnRyb3B5QmFuZHMuaGlnaCBtdXN0IGJlIG5vbi1uZWdhdGl2ZSwgZ290ICR7ZW50cm9weS5oaWdofWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChubHAuY2FjaGVFeHBpcnlNaW51dGVzICE9PSB1bmRlZmluZWQgJiYgbmxwLmNhY2hlRXhwaXJ5TWludXRlcyA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY2FjaGVFeHBpcnlNaW51dGVzIG11c3QgYmUgcG9zaXRpdmUsIGdvdCAke25scC5jYWNoZUV4cGlyeU1pbnV0ZXN9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChubHAubWluVG9rZW5MZW5ndGggIT09IHVuZGVmaW5lZCAmJiBubHAubWluVG9rZW5MZW5ndGggPCAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgbWluVG9rZW5MZW5ndGggbXVzdCBiZSBhdCBsZWFzdCAxLCBnb3QgJHtubHAubWluVG9rZW5MZW5ndGh9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdmVyYiBjb25maWd1cmF0aW9uXG4gICAgaWYgKGNvbmZpZy52ZXJicykge1xuICAgICAgY29uc3QgdmVyYnMgPSBjb25maWcudmVyYnM7XG5cbiAgICAgIGlmICh2ZXJicy5jb25maWRlbmNlVGhyZXNob2xkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHZlcmJzLmNvbmZpZGVuY2VUaHJlc2hvbGQgPCAwIHx8IHZlcmJzLmNvbmZpZGVuY2VUaHJlc2hvbGQgPiAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjb25maWRlbmNlVGhyZXNob2xkIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLCBnb3QgJHt2ZXJicy5jb25maWRlbmNlVGhyZXNob2xkfWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh2ZXJicy5tYXhSZWN1cnNpb25EZXB0aCAhPT0gdW5kZWZpbmVkICYmIHZlcmJzLm1heFJlY3Vyc2lvbkRlcHRoIDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBtYXhSZWN1cnNpb25EZXB0aCBtdXN0IGJlIHBvc2l0aXZlLCBnb3QgJHt2ZXJicy5tYXhSZWN1cnNpb25EZXB0aH1gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZlcmJzLm1heEVsZW1lbnRzUGVyVmVyYiAhPT0gdW5kZWZpbmVkICYmIHZlcmJzLm1heEVsZW1lbnRzUGVyVmVyYiA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgbWF4RWxlbWVudHNQZXJWZXJiIG11c3QgYmUgcG9zaXRpdmUsIGdvdCAke3ZlcmJzLm1heEVsZW1lbnRzUGVyVmVyYn1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBtZW1vcnkgY29uZmlndXJhdGlvblxuICAgIGlmIChjb25maWcubWVtb3J5KSB7XG4gICAgICBjb25zdCBtZW1vcnkgPSBjb25maWcubWVtb3J5O1xuXG4gICAgICBpZiAobWVtb3J5Lm1heENhY2hlU2l6ZSAhPT0gdW5kZWZpbmVkICYmIG1lbW9yeS5tYXhDYWNoZVNpemUgPD0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG1heENhY2hlU2l6ZSBtdXN0IGJlIHBvc2l0aXZlLCBnb3QgJHttZW1vcnkubWF4Q2FjaGVTaXplfWApO1xuICAgICAgfVxuXG4gICAgICBpZiAobWVtb3J5LmdjSW50ZXJ2YWxNaW51dGVzICE9PSB1bmRlZmluZWQgJiYgbWVtb3J5LmdjSW50ZXJ2YWxNaW51dGVzIDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBnY0ludGVydmFsTWludXRlcyBtdXN0IGJlIHBvc2l0aXZlLCBnb3QgJHttZW1vcnkuZ2NJbnRlcnZhbE1pbnV0ZXN9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZW1vcnkuY2xlYW51cEludGVydmFsTWludXRlcyAhPT0gdW5kZWZpbmVkICYmIG1lbW9yeS5jbGVhbnVwSW50ZXJ2YWxNaW51dGVzIDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjbGVhbnVwSW50ZXJ2YWxNaW51dGVzIG11c3QgYmUgcG9zaXRpdmUsIGdvdCAke21lbW9yeS5jbGVhbnVwSW50ZXJ2YWxNaW51dGVzfWApO1xuICAgICAgfVxuXG4gICAgICBpZiAobWVtb3J5LnN0YWxlSW5kZXhNdWx0aXBsaWVyICE9PSB1bmRlZmluZWQgJiYgbWVtb3J5LnN0YWxlSW5kZXhNdWx0aXBsaWVyIDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzdGFsZUluZGV4TXVsdGlwbGllciBtdXN0IGJlIHBvc2l0aXZlLCBnb3QgJHttZW1vcnkuc3RhbGVJbmRleE11bHRpcGxpZXJ9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgaW5kZXggY29uZmlndXJhdGlvblxuICAgIGlmIChjb25maWcuaW5kZXgpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gY29uZmlnLmluZGV4O1xuXG4gICAgICBpZiAoaW5kZXgudHRsTWludXRlcyAhPT0gdW5kZWZpbmVkICYmIGluZGV4LnR0bE1pbnV0ZXMgPD0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHR0bE1pbnV0ZXMgbXVzdCBiZSBwb3NpdGl2ZSwgZ290ICR7aW5kZXgudHRsTWludXRlc31gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluZGV4LmxvY2tUaW1lb3V0TXMgIT09IHVuZGVmaW5lZCAmJiBpbmRleC5sb2NrVGltZW91dE1zIDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBsb2NrVGltZW91dE1zIG11c3QgYmUgcG9zaXRpdmUsIGdvdCAke2luZGV4LmxvY2tUaW1lb3V0TXN9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpbmRleC5tYXhDb25jdXJyZW50QnVpbGRzICE9PSB1bmRlZmluZWQgJiYgaW5kZXgubWF4Q29uY3VycmVudEJ1aWxkcyA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgbWF4Q29uY3VycmVudEJ1aWxkcyBtdXN0IGJlIHBvc2l0aXZlLCBnb3QgJHtpbmRleC5tYXhDb25jdXJyZW50QnVpbGRzfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0byBkZWZhdWx0IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZXNldFRvRGVmYXVsdHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gU0VDVVJJVFkgRklYOiBBZGQgYXVkaXQgbG9nZ2luZyBmb3IgY29uZmlndXJhdGlvbiByZXNldCAoRE1DUC1TRUMtMDA2KVxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdSVUxFX0VOR0lORV9DT05GSUdfVVBEQVRFJyBhcyBhbnksXG4gICAgICBzZXZlcml0eTogJ01FRElVTScsIC8vIEhpZ2hlciBzZXZlcml0eSBmb3IgZnVsbCByZXNldFxuICAgICAgc291cmNlOiAnSW5kZXhDb25maWdNYW5hZ2VyLnJlc2V0VG9EZWZhdWx0cycsXG4gICAgICBkZXRhaWxzOiAnSW5kZXggY29uZmlndXJhdGlvbiByZXNldCB0byBkZWZhdWx0cycsXG4gICAgICBhZGRpdGlvbmFsRGF0YToge1xuICAgICAgICBjb25maWdUeXBlOiAnaW5kZXgnLFxuICAgICAgICBhY3Rpb246ICdyZXNldCdcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuY29uZmlnID0geyAuLi50aGlzLmRlZmF1bHRDb25maWcgfTtcbiAgICBhd2FpdCB0aGlzLnNhdmVDb25maWcoKTtcblxuICAgIGxvZ2dlci5pbmZvKCdJbmRleCBjb25maWd1cmF0aW9uIHJlc2V0IHRvIGRlZmF1bHRzJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gdmFsdWUgYnkgcGF0aFxuICAgKi9cbiAgcHVibGljIGdldChwYXRoOiBzdHJpbmcpOiBhbnkge1xuICAgIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgIGxldCByZXN1bHQgPSB0aGlzLmNvbmZpZyBhcyBhbnk7XG5cbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcbiAgICAgIGlmIChyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgcGFydCBpbiByZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0W3BhcnRdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHZhbHVlIGJ5IHBhdGhcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXQocGF0aDogc3RyaW5nLCB2YWx1ZTogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gU0VDVVJJVFkgRklYOiBBZGQgYXVkaXQgbG9nZ2luZyBmb3IgZGlyZWN0IGNvbmZpZyBtb2RpZmljYXRpb25zIChETUNQLVNFQy0wMDYpXG4gICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgdHlwZTogJ1JVTEVfRU5HSU5FX0NPTkZJR19VUERBVEUnIGFzIGFueSxcbiAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgIHNvdXJjZTogJ0luZGV4Q29uZmlnTWFuYWdlci5zZXQnLFxuICAgICAgZGV0YWlsczogYEluZGV4IGNvbmZpZ3VyYXRpb24gdmFsdWUgc2V0OiAke3BhdGh9YCxcbiAgICAgIGFkZGl0aW9uYWxEYXRhOiB7XG4gICAgICAgIGNvbmZpZ1R5cGU6ICdpbmRleCcsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIHZhbHVlVHlwZTogdHlwZW9mIHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICBjb25zdCBsYXN0UGFydCA9IHBhcnRzLnBvcCgpITtcbiAgICBsZXQgdGFyZ2V0ID0gdGhpcy5jb25maWcgYXMgYW55O1xuXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgICBpZiAoIShwYXJ0IGluIHRhcmdldCkgfHwgdHlwZW9mIHRhcmdldFtwYXJ0XSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGFyZ2V0W3BhcnRdID0ge307XG4gICAgICB9XG4gICAgICB0YXJnZXQgPSB0YXJnZXRbcGFydF07XG4gICAgfVxuXG4gICAgdGFyZ2V0W2xhc3RQYXJ0XSA9IHZhbHVlO1xuICAgIGF3YWl0IHRoaXMuc2F2ZUNvbmZpZygpO1xuICB9XG59Il19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElementDefinitionBuilder.d.ts","sourceRoot":"","sources":["../../../src/portfolio/enhanced-index/ElementDefinitionBuilder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ElementDefinitionBuilder.d.ts","sourceRoot":"","sources":["../../../src/portfolio/enhanced-index/ElementDefinitionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAEV,iBAAiB,EACjB,aAAa,EAEd,MAAM,wBAAwB,CAAC;AAGhC;;GAEG;AACH,qBAAa,wBAAwB;IAC5B,KAAK,CACV,KAAK,EAAE,UAAU,EACjB,aAAa,EAAE,aAAa,GAAG,IAAI,GAClC,iBAAiB;IAuDpB;;;;OAIG;IACH,OAAO,CAAC,6BAA6B;IAuBrC,OAAO,CAAC,sBAAsB;CAsC/B"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { logger } from '../../utils/logger.js';
|
|
2
1
|
import { RelationshipTypes } from '../types/RelationshipTypes.js';
|
|
3
2
|
/**
|
|
4
3
|
* Builds normalized element definitions for the enhanced index.
|
|
@@ -23,13 +22,8 @@ export class ElementDefinitionBuilder {
|
|
|
23
22
|
tags: entry.metadata?.tags,
|
|
24
23
|
triggers: entry.metadata?.triggers
|
|
25
24
|
};
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
name: entryName,
|
|
29
|
-
type: entry.elementType,
|
|
30
|
-
triggers: entry.metadata.triggers
|
|
31
|
-
});
|
|
32
|
-
}
|
|
25
|
+
// Per-element trigger detail available via element inspection;
|
|
26
|
+
// aggregate counts logged in "Enhanced index built" summary
|
|
33
27
|
}
|
|
34
28
|
if (existing?.custom) {
|
|
35
29
|
definition.custom = existing.custom;
|
|
@@ -78,12 +72,6 @@ export class ElementDefinitionBuilder {
|
|
|
78
72
|
}
|
|
79
73
|
}
|
|
80
74
|
}
|
|
81
|
-
if (relationships.length > 0) {
|
|
82
|
-
logger.debug('Extracted activates relationships', {
|
|
83
|
-
element: entry.metadata?.name,
|
|
84
|
-
relationshipCount: relationships.length
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
75
|
return relationships;
|
|
88
76
|
}
|
|
89
77
|
generateDefaultActions(entry) {
|
|
@@ -119,4 +107,4 @@ export class ElementDefinitionBuilder {
|
|
|
119
107
|
return Object.keys(actions).length > 0 ? actions : undefined;
|
|
120
108
|
}
|
|
121
109
|
}
|
|
122
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWxlbWVudERlZmluaXRpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BvcnRmb2xpby9lbmhhbmNlZC1pbmRleC9FbGVtZW50RGVmaW5pdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBUS9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRWxFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHdCQUF3QjtJQUM1QixLQUFLLENBQ1YsS0FBaUIsRUFDakIsYUFBbUM7UUFFbkMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksU0FBUyxDQUFDO1FBQ3BELE1BQU0sUUFBUSxHQUFHLGFBQWEsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFekUsTUFBTSxVQUFVLEdBQXNCO1lBQ3BDLElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsU0FBUztnQkFDZixJQUFJLEVBQUUsS0FBSyxDQUFDLFdBQVc7Z0JBQ3ZCLE9BQU8sRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLE9BQU87Z0JBQ2hDLFdBQVcsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLFdBQVc7Z0JBQ3hDLE9BQU8sRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLE9BQU87Z0JBQ2hDLE9BQU8sRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLE9BQU8sSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUM3RDtTQUNGLENBQUM7UUFFRixJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFDakYsVUFBVSxDQUFD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QUFDO29CQUN6RSxPQUFPLENBQUMsTUFBTSxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDN0UsQ0FBQztnQkFDRCxNQUFNO1lBRVIsS0FBSyxVQUFVO2dCQUNiLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO29CQUNsQyxPQUFPLENBQUMsTUFBTSxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQztvQkFDM0UsT0FBTyxDQUFDLFFBQVEsR0FBRyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQ2pGLENBQUM7Z0JBQ0QsTUFBTTtZQUVSLEtBQUssUUFBUTtnQkFDWCxPQUFPLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDcEUsT0FBTyxDQUFDLEtBQUssR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQ3hFLE1BQU07WUFFUjtnQkFDRSxNQUFNO1FBQ1YsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUMvRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBJbmRleEVudHJ5IH0gZnJvbSAnLi4vUG9ydGZvbGlvSW5kZXhNYW5hZ2VyLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgQWN0aW9uRGVmaW5pdGlvbixcbiAgRWxlbWVudERlZmluaXRpb24sXG4gIEVuaGFuY2VkSW5kZXgsXG4gIFJlbGF0aW9uc2hpcFxufSBmcm9tICcuLi90eXBlcy9JbmRleFR5cGVzLmpzJztcbmltcG9ydCB7IFJlbGF0aW9uc2hpcFR5cGVzIH0gZnJvbSAnLi4vdHlwZXMvUmVsYXRpb25zaGlwVHlwZXMuanMnO1xuXG4vKipcbiAqIEJ1aWxkcyBub3JtYWxpemVkIGVsZW1lbnQgZGVmaW5pdGlvbnMgZm9yIHRoZSBlbmhhbmNlZCBpbmRleC5cbiAqL1xuZXhwb3J0IGNsYXNzIEVsZW1lbnREZWZpbml0aW9uQnVpbGRlciB7XG4gIHB1YmxpYyBidWlsZChcbiAgICBlbnRyeTogSW5kZXhFbnRyeSxcbiAgICBleGlzdGluZ0luZGV4OiBFbmhhbmNlZEluZGV4IHwgbnVsbFxuICApOiBFbGVtZW50RGVmaW5pdGlvbiB7XG4gICAgY29uc3QgZW50cnlOYW1lID0gZW50cnkubWV0YWRhdGE/Lm5hbWUgfHwgJ3Vua25vd24nO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gZXhpc3RpbmdJbmRleD8uZWxlbWVudHNbZW50cnkuZWxlbWVudFR5cGVdPy5bZW50cnlOYW1lXTtcblxuICAgIGNvbnN0IGRlZmluaXRpb246IEVsZW1lbnREZWZpbml0aW9uID0ge1xuICAgICAgY29yZToge1xuICAgICAgICBuYW1lOiBlbnRyeU5hbWUsXG4gICAgICAgIHR5cGU6IGVudHJ5LmVsZW1lbnRUeXBlLFxuICAgICAgICB2ZXJzaW9uOiBlbnRyeS5tZXRhZGF0YT8udmVyc2lvbixcbiAgICAgICAgZGVzY3JpcHRpb246IGVudHJ5Lm1ldGFkYXRhPy5kZXNjcmlwdGlvbixcbiAgICAgICAgY3JlYXRlZDogZW50cnkubWV0YWRhdGE/LmNyZWF0ZWQsXG4gICAgICAgIHVwZGF0ZWQ6IGVudHJ5Lm1ldGFkYXRhPy51cGRhdGVkIHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoZW50cnkubWV0YWRhdGE/LmtleXdvcmRzIHx8IGVudHJ5Lm1ldGFkYXRhPy50YWdzIHx8IGVudHJ5Lm1ldGFkYXRhPy50cmlnZ2Vycykge1xuICAgICAgZGVmaW5pdGlvbi5zZWFyY2ggPSB7XG4gICAgICAgIGtleXdvcmRzOiBlbnRyeS5tZXRhZGF0YT8ua2V5d29yZHMsXG4gICAgICAgIHRhZ3M6IGVudHJ5Lm1ldGFkYXRhPy50YWdzLFxuICAgICAgICB0cmlnZ2VyczogZW50cnkubWV0YWRhdGE/LnRyaWdnZXJzXG4gICAgICB9O1xuXG4gICAgICBpZiAoZW50cnkubWV0YWRhdGE/LnRyaWdnZXJzICYmIGVudHJ5Lm1ldGFkYXRhLnRyaWdnZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdGb3VuZCB0cmlnZ2VycyBmb3IgZWxlbWVudCcsIHtcbiAgICAgICAgICBuYW1lOiBlbnRyeU5hbWUsXG4gICAgICAgICAgdHlwZTogZW50cnkuZWxlbWVudFR5cGUsXG4gICAgICAgICAgdHJpZ2dlcnM6IGVudHJ5Lm1ldGFkYXRhLnRyaWdnZXJzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChleGlzdGluZz8uY3VzdG9tKSB7XG4gICAgICBkZWZpbml0aW9uLmN1c3RvbSA9IGV4aXN0aW5nLmN1c3RvbTtcbiAgICB9XG5cbiAgICBpZiAoZXhpc3Rpbmc/LnJlbGF0aW9uc2hpcHMpIHtcbiAgICAgIGRlZmluaXRpb24ucmVsYXRpb25zaGlwcyA9IGV4aXN0aW5nLnJlbGF0aW9uc2hpcHM7XG4gICAgfVxuXG4gICAgLy8gSXNzdWUgIzc0OTogRXh0cmFjdCBgYWN0aXZhdGVzYCByZWZlcmVuY2VzIGZyb20gYWdlbnQgbWV0YWRhdGEgYXMgcmVsYXRpb25zaGlwc1xuICAgIGNvbnN0IGFjdGl2YXRlc1JlbHMgPSB0aGlzLmV4dHJhY3RBY3RpdmF0ZXNSZWxhdGlvbnNoaXBzKGVudHJ5KTtcbiAgICBpZiAoYWN0aXZhdGVzUmVscy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoIWRlZmluaXRpb24ucmVsYXRpb25zaGlwcykge1xuICAgICAgICBkZWZpbml0aW9uLnJlbGF0aW9uc2hpcHMgPSB7fTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV4aXN0aW5nX3VzZXMgPSBkZWZpbml0aW9uLnJlbGF0aW9uc2hpcHNbUmVsYXRpb25zaGlwVHlwZXMuVVNFU10gfHwgW107XG4gICAgICBkZWZpbml0aW9uLnJlbGF0aW9uc2hpcHNbUmVsYXRpb25zaGlwVHlwZXMuVVNFU10gPSBbLi4uZXhpc3RpbmdfdXNlcywgLi4uYWN0aXZhdGVzUmVsc107XG4gICAgfVxuXG4gICAgaWYgKGV4aXN0aW5nPy5hY3Rpb25zKSB7XG4gICAgICBkZWZpbml0aW9uLmFjdGlvbnMgPSBleGlzdGluZy5hY3Rpb25zO1xuICAgIH1cblxuICAgIGlmICghZGVmaW5pdGlvbi5hY3Rpb25zKSB7XG4gICAgICBkZWZpbml0aW9uLmFjdGlvbnMgPSB0aGlzLmdlbmVyYXRlRGVmYXVsdEFjdGlvbnMoZW50cnkpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgcmVsYXRpb25zaGlwcyBmcm9tIGFnZW50IGBhY3RpdmF0ZXNgIG1ldGFkYXRhLlxuICAgKiBNYXBzIGBhY3RpdmF0ZXM6IHsgc2tpbGxzOiBbJ2ZvbyddLCB0ZW1wbGF0ZXM6IFsnYmFyJ10gfWAgdG9cbiAgICogQmFzZVJlbGF0aW9uc2hpcCBlbnRyaWVzIHdpdGggdHlwZSAndXNlcycuXG4gICAqL1xuICBwcml2YXRlIGV4dHJhY3RBY3RpdmF0ZXNSZWxhdGlvbnNoaXBzKGVudHJ5OiBJbmRleEVudHJ5KTogUmVsYXRpb25zaGlwW10ge1xuICAgIGNvbnN0IGFjdGl2YXRlcyA9IGVudHJ5Lm1ldGFkYXRhPy5hY3RpdmF0ZXM7XG4gICAgaWYgKCFhY3RpdmF0ZXMgfHwgdHlwZW9mIGFjdGl2YXRlcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByZWxhdGlvbnNoaXBzOiBSZWxhdGlvbnNoaXBbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgW2VsZW1lbnRUeXBlLCBuYW1lc10gb2YgT2JqZWN0LmVudHJpZXMoYWN0aXZhdGVzKSkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG5hbWVzKSkgY29udGludWU7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgbmFtZXMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyAmJiBuYW1lLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZWxhdGlvbnNoaXBzLnB1c2goe1xuICAgICAgICAgICAgZWxlbWVudDogYCR7ZWxlbWVudFR5cGV9OiR7bmFtZX1gLFxuICAgICAgICAgICAgdHlwZTogUmVsYXRpb25zaGlwVHlwZXMuVVNFUyxcbiAgICAgICAgICAgIHN0cmVuZ3RoOiAxLjBcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZWxhdGlvbnNoaXBzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnRXh0cmFjdGVkIGFjdGl2YXRlcyByZWxhdGlvbnNoaXBzJywge1xuICAgICAgICBlbGVtZW50OiBlbnRyeS5tZXRhZGF0YT8ubmFtZSxcbiAgICAgICAgcmVsYXRpb25zaGlwQ291bnQ6IHJlbGF0aW9uc2hpcHMubGVuZ3RoXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVsYXRpb25zaGlwcztcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVEZWZhdWx0QWN0aW9ucyhlbnRyeTogSW5kZXhFbnRyeSk6IFJlY29yZDxzdHJpbmcsIEFjdGlvbkRlZmluaXRpb24+IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBBY3Rpb25EZWZpbml0aW9uPiA9IHt9O1xuICAgIGNvbnN0IGVudHJ5TmFtZSA9IGVudHJ5Lm1ldGFkYXRhPy5uYW1lIHx8ICcnO1xuXG4gICAgaWYgKCFlbnRyeU5hbWUpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgc3dpdGNoIChlbnRyeS5lbGVtZW50VHlwZSkge1xuICAgICAgY2FzZSAncGVyc29uYXMnOlxuICAgICAgICBpZiAoZW50cnlOYW1lLmluY2x1ZGVzKCdkZWJ1ZycpKSB7XG4gICAgICAgICAgYWN0aW9ucy5kZWJ1ZyA9IHsgdmVyYjogJ2RlYnVnJywgYmVoYXZpb3I6ICdhY3RpdmF0ZScsIGNvbmZpZGVuY2U6IDAuOCB9O1xuICAgICAgICAgIGFjdGlvbnMuZml4ID0geyB2ZXJiOiAnZml4JywgYmVoYXZpb3I6ICdhY3RpdmF0ZScsIGNvbmZpZGVuY2U6IDAuNyB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRyeU5hbWUuaW5jbHVkZXMoJ2NyZWF0aXZlJykpIHtcbiAgICAgICAgICBhY3Rpb25zLndyaXRlID0geyB2ZXJiOiAnd3JpdGUnLCBiZWhhdmlvcjogJ2FjdGl2YXRlJywgY29uZmlkZW5jZTogMC44IH07XG4gICAgICAgICAgYWN0aW9ucy5jcmVhdGUgPSB7IHZlcmI6ICdjcmVhdGUnLCBiZWhhdmlvcjogJ2FjdGl2YXRlJywgY29uZmlkZW5jZTogMC44IH07XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ21lbW9yaWVzJzpcbiAgICAgICAgaWYgKGVudHJ5TmFtZS5pbmNsdWRlcygnc2Vzc2lvbicpKSB7XG4gICAgICAgICAgYWN0aW9ucy5yZWNhbGwgPSB7IHZlcmI6ICdyZWNhbGwnLCBiZWhhdmlvcjogJ3JldHJpZXZlJywgY29uZmlkZW5jZTogMC43IH07XG4gICAgICAgICAgYWN0aW9ucy5yZW1lbWJlciA9IHsgdmVyYjogJ3JlbWVtYmVyJywgYmVoYXZpb3I6ICdyZXRyaWV2ZScsIGNvbmZpZGVuY2U6IDAuNyB9O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdza2lsbHMnOlxuICAgICAgICBhY3Rpb25zLnVzZSA9IHsgdmVyYjogJ3VzZScsIGJlaGF2aW9yOiAnZXhlY3V0ZScsIGNvbmZpZGVuY2U6IDAuNiB9O1xuICAgICAgICBhY3Rpb25zLmFwcGx5ID0geyB2ZXJiOiAnYXBwbHknLCBiZWhhdmlvcjogJ2V4ZWN1dGUnLCBjb25maWRlbmNlOiAwLjYgfTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhhY3Rpb25zKS5sZW5ndGggPiAwID8gYWN0aW9ucyA6IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWxlbWVudERlZmluaXRpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BvcnRmb2xpby9lbmhhbmNlZC1pbmRleC9FbGVtZW50RGVmaW5pdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFbEU7O0dBRUc7QUFDSCxNQUFNLE9BQU8sd0JBQXdCO0lBQzVCLEtBQUssQ0FDVixLQUFpQixFQUNqQixhQUFtQztRQUVuQyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxTQUFTLENBQUM7UUFDcEQsTUFBTSxRQUFRLEdBQUcsYUFBYSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV6RSxNQUFNLFVBQVUsR0FBc0I7WUFDcEMsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxTQUFTO2dCQUNmLElBQUksRUFBRSxLQUFLLENBQUMsV0FBVztnQkFDdkIsT0FBTyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsT0FBTztnQkFDaEMsV0FBVyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsV0FBVztnQkFDeEMsT0FBTyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsT0FBTztnQkFDaEMsT0FBTyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsT0FBTyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQzdEO1NBQ0YsQ0FBQztRQUVGLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxRQUFRLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQztZQUNqRixVQUFVLENBQUMsTUFBTSxHQUFHO2dCQUNsQixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEs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RUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQ3BFLE9BQU8sQ0FBQyxLQUFLLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUN4RSxNQUFNO1lBRVI7Z0JBQ0UsTUFBTTtRQUNWLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDL0QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBJbmRleEVudHJ5IH0gZnJvbSAnLi4vUG9ydGZvbGlvSW5kZXhNYW5hZ2VyLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgQWN0aW9uRGVmaW5pdGlvbixcbiAgRWxlbWVudERlZmluaXRpb24sXG4gIEVuaGFuY2VkSW5kZXgsXG4gIFJlbGF0aW9uc2hpcFxufSBmcm9tICcuLi90eXBlcy9JbmRleFR5cGVzLmpzJztcbmltcG9ydCB7IFJlbGF0aW9uc2hpcFR5cGVzIH0gZnJvbSAnLi4vdHlwZXMvUmVsYXRpb25zaGlwVHlwZXMuanMnO1xuXG4vKipcbiAqIEJ1aWxkcyBub3JtYWxpemVkIGVsZW1lbnQgZGVmaW5pdGlvbnMgZm9yIHRoZSBlbmhhbmNlZCBpbmRleC5cbiAqL1xuZXhwb3J0IGNsYXNzIEVsZW1lbnREZWZpbml0aW9uQnVpbGRlciB7XG4gIHB1YmxpYyBidWlsZChcbiAgICBlbnRyeTogSW5kZXhFbnRyeSxcbiAgICBleGlzdGluZ0luZGV4OiBFbmhhbmNlZEluZGV4IHwgbnVsbFxuICApOiBFbGVtZW50RGVmaW5pdGlvbiB7XG4gICAgY29uc3QgZW50cnlOYW1lID0gZW50cnkubWV0YWRhdGE/Lm5hbWUgfHwgJ3Vua25vd24nO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gZXhpc3RpbmdJbmRleD8uZWxlbWVudHNbZW50cnkuZWxlbWVudFR5cGVdPy5bZW50cnlOYW1lXTtcblxuICAgIGNvbnN0IGRlZmluaXRpb246IEVsZW1lbnREZWZpbml0aW9uID0ge1xuICAgICAgY29yZToge1xuICAgICAgICBuYW1lOiBlbnRyeU5hbWUsXG4gICAgICAgIHR5cGU6IGVudHJ5LmVsZW1lbnRUeXBlLFxuICAgICAgICB2ZXJzaW9uOiBlbnRyeS5tZXRhZGF0YT8udmVyc2lvbixcbiAgICAgICAgZGVzY3JpcHRpb246IGVudHJ5Lm1ldGFkYXRhPy5kZXNjcmlwdGlvbixcbiAgICAgICAgY3JlYXRlZDogZW50cnkubWV0YWRhdGE/LmNyZWF0ZWQsXG4gICAgICAgIHVwZGF0ZWQ6IGVudHJ5Lm1ldGFkYXRhPy51cGRhdGVkIHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoZW50cnkubWV0YWRhdGE/LmtleXdvcmRzIHx8IGVudHJ5Lm1ldGFkYXRhPy50YWdzIHx8IGVudHJ5Lm1ldGFkYXRhPy50cmlnZ2Vycykge1xuICAgICAgZGVmaW5pdGlvbi5zZWFyY2ggPSB7XG4gICAgICAgIGtleXdvcmRzOiBlbnRyeS5tZXRhZGF0YT8ua2V5d29yZHMsXG4gICAgICAgIHRhZ3M6IGVudHJ5Lm1ldGFkYXRhPy50YWdzLFxuICAgICAgICB0cmlnZ2VyczogZW50cnkubWV0YWRhdGE/LnRyaWdnZXJzXG4gICAgICB9O1xuXG4gICAgICAvLyBQZXItZWxlbWVudCB0cmlnZ2VyIGRldGFpbCBhdmFpbGFibGUgdmlhIGVsZW1lbnQgaW5zcGVjdGlvbjtcbiAgICAgIC8vIGFnZ3JlZ2F0ZSBjb3VudHMgbG9nZ2VkIGluIFwiRW5oYW5jZWQgaW5kZXggYnVpbHRcIiBzdW1tYXJ5XG4gICAgfVxuXG4gICAgaWYgKGV4aXN0aW5nPy5jdXN0b20pIHtcbiAgICAgIGRlZmluaXRpb24uY3VzdG9tID0gZXhpc3RpbmcuY3VzdG9tO1xuICAgIH1cblxuICAgIGlmIChleGlzdGluZz8ucmVsYXRpb25zaGlwcykge1xuICAgICAgZGVmaW5pdGlvbi5yZWxhdGlvbnNoaXBzID0gZXhpc3RpbmcucmVsYXRpb25zaGlwcztcbiAgICB9XG5cbiAgICAvLyBJc3N1ZSAjNzQ5OiBFeHRyYWN0IGBhY3RpdmF0ZXNgIHJlZmVyZW5jZXMgZnJvbSBhZ2VudCBtZXRhZGF0YSBhcyByZWxhdGlvbnNoaXBzXG4gICAgY29uc3QgYWN0aXZhdGVzUmVscyA9IHRoaXMuZXh0cmFjdEFjdGl2YXRlc1JlbGF0aW9uc2hpcHMoZW50cnkpO1xuICAgIGlmIChhY3RpdmF0ZXNSZWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICghZGVmaW5pdGlvbi5yZWxhdGlvbnNoaXBzKSB7XG4gICAgICAgIGRlZmluaXRpb24ucmVsYXRpb25zaGlwcyA9IHt9O1xuICAgICAgfVxuICAgICAgY29uc3QgZXhpc3RpbmdfdXNlcyA9IGRlZmluaXRpb24ucmVsYXRpb25zaGlwc1tSZWxhdGlvbnNoaXBUeXBlcy5VU0VTXSB8fCBbXTtcbiAgICAgIGRlZmluaXRpb24ucmVsYXRpb25zaGlwc1tSZWxhdGlvbnNoaXBUeXBlcy5VU0VTXSA9IFsuLi5leGlzdGluZ191c2VzLCAuLi5hY3RpdmF0ZXNSZWxzXTtcbiAgICB9XG5cbiAgICBpZiAoZXhpc3Rpbmc/LmFjdGlvbnMpIHtcbiAgICAgIGRlZmluaXRpb24uYWN0aW9ucyA9IGV4aXN0aW5nLmFjdGlvbnM7XG4gICAgfVxuXG4gICAgaWYgKCFkZWZpbml0aW9uLmFjdGlvbnMpIHtcbiAgICAgIGRlZmluaXRpb24uYWN0aW9ucyA9IHRoaXMuZ2VuZXJhdGVEZWZhdWx0QWN0aW9ucyhlbnRyeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCByZWxhdGlvbnNoaXBzIGZyb20gYWdlbnQgYGFjdGl2YXRlc2AgbWV0YWRhdGEuXG4gICAqIE1hcHMgYGFjdGl2YXRlczogeyBza2lsbHM6IFsnZm9vJ10sIHRlbXBsYXRlczogWydiYXInXSB9YCB0b1xuICAgKiBCYXNlUmVsYXRpb25zaGlwIGVudHJpZXMgd2l0aCB0eXBlICd1c2VzJy5cbiAgICovXG4gIHByaXZhdGUgZXh0cmFjdEFjdGl2YXRlc1JlbGF0aW9uc2hpcHMoZW50cnk6IEluZGV4RW50cnkpOiBSZWxhdGlvbnNoaXBbXSB7XG4gICAgY29uc3QgYWN0aXZhdGVzID0gZW50cnkubWV0YWRhdGE/LmFjdGl2YXRlcztcbiAgICBpZiAoIWFjdGl2YXRlcyB8fCB0eXBlb2YgYWN0aXZhdGVzICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlbGF0aW9uc2hpcHM6IFJlbGF0aW9uc2hpcFtdID0gW107XG4gICAgZm9yIChjb25zdCBbZWxlbWVudFR5cGUsIG5hbWVzXSBvZiBPYmplY3QuZW50cmllcyhhY3RpdmF0ZXMpKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkobmFtZXMpKSBjb250aW51ZTtcbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykge1xuICAgICAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnICYmIG5hbWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlbGF0aW9uc2hpcHMucHVzaCh7XG4gICAgICAgICAgICBlbGVtZW50OiBgJHtlbGVtZW50VHlwZX06JHtuYW1lfWAsXG4gICAgICAgICAgICB0eXBlOiBSZWxhdGlvbnNoaXBUeXBlcy5VU0VTLFxuICAgICAgICAgICAgc3RyZW5ndGg6IDEuMFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlbGF0aW9uc2hpcHM7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlRGVmYXVsdEFjdGlvbnMoZW50cnk6IEluZGV4RW50cnkpOiBSZWNvcmQ8c3RyaW5nLCBBY3Rpb25EZWZpbml0aW9uPiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgYWN0aW9uczogUmVjb3JkPHN0cmluZywgQWN0aW9uRGVmaW5pdGlvbj4gPSB7fTtcbiAgICBjb25zdCBlbnRyeU5hbWUgPSBlbnRyeS5tZXRhZGF0YT8ubmFtZSB8fCAnJztcblxuICAgIGlmICghZW50cnlOYW1lKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZW50cnkuZWxlbWVudFR5cGUpIHtcbiAgICAgIGNhc2UgJ3BlcnNvbmFzJzpcbiAgICAgICAgaWYgKGVudHJ5TmFtZS5pbmNsdWRlcygnZGVidWcnKSkge1xuICAgICAgICAgIGFjdGlvbnMuZGVidWcgPSB7IHZlcmI6ICdkZWJ1ZycsIGJlaGF2aW9yOiAnYWN0aXZhdGUnLCBjb25maWRlbmNlOiAwLjggfTtcbiAgICAgICAgICBhY3Rpb25zLmZpeCA9IHsgdmVyYjogJ2ZpeCcsIGJlaGF2aW9yOiAnYWN0aXZhdGUnLCBjb25maWRlbmNlOiAwLjcgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW50cnlOYW1lLmluY2x1ZGVzKCdjcmVhdGl2ZScpKSB7XG4gICAgICAgICAgYWN0aW9ucy53cml0ZSA9IHsgdmVyYjogJ3dyaXRlJywgYmVoYXZpb3I6ICdhY3RpdmF0ZScsIGNvbmZpZGVuY2U6IDAuOCB9O1xuICAgICAgICAgIGFjdGlvbnMuY3JlYXRlID0geyB2ZXJiOiAnY3JlYXRlJywgYmVoYXZpb3I6ICdhY3RpdmF0ZScsIGNvbmZpZGVuY2U6IDAuOCB9O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdtZW1vcmllcyc6XG4gICAgICAgIGlmIChlbnRyeU5hbWUuaW5jbHVkZXMoJ3Nlc3Npb24nKSkge1xuICAgICAgICAgIGFjdGlvbnMucmVjYWxsID0geyB2ZXJiOiAncmVjYWxsJywgYmVoYXZpb3I6ICdyZXRyaWV2ZScsIGNvbmZpZGVuY2U6IDAuNyB9O1xuICAgICAgICAgIGFjdGlvbnMucmVtZW1iZXIgPSB7IHZlcmI6ICdyZW1lbWJlcicsIGJlaGF2aW9yOiAncmV0cmlldmUnLCBjb25maWRlbmNlOiAwLjcgfTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnc2tpbGxzJzpcbiAgICAgICAgYWN0aW9ucy51c2UgPSB7IHZlcmI6ICd1c2UnLCBiZWhhdmlvcjogJ2V4ZWN1dGUnLCBjb25maWRlbmNlOiAwLjYgfTtcbiAgICAgICAgYWN0aW9ucy5hcHBseSA9IHsgdmVyYjogJ2FwcGx5JywgYmVoYXZpb3I6ICdleGVjdXRlJywgY29uZmlkZW5jZTogMC42IH07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoYWN0aW9ucykubGVuZ3RoID4gMCA/IGFjdGlvbnMgOiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SemanticRelationshipService.d.ts","sourceRoot":"","sources":["../../../src/portfolio/enhanced-index/SemanticRelationshipService.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,MAAM,WAAW,+BAA+B;IAC9C,UAAU,EAAE,iBAAiB,CAAC;IAC9B,mBAAmB,EAAE,mBAAmB,CAAC;CAC1C;AAED,qBAAa,2BAA2B;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsB;gBAE9C,EAAE,UAAU,EAAE,mBAAmB,EAAE,EAAE,+BAA+B;IAKnE,SAAS,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;YA6EzE,mBAAmB;YAqDnB,6BAA6B;
|
|
1
|
+
{"version":3,"file":"SemanticRelationshipService.d.ts","sourceRoot":"","sources":["../../../src/portfolio/enhanced-index/SemanticRelationshipService.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,MAAM,WAAW,+BAA+B;IAC9C,UAAU,EAAE,iBAAiB,CAAC;IAC9B,mBAAmB,EAAE,mBAAmB,CAAC;CAC1C;AAED,qBAAa,2BAA2B;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsB;gBAE9C,EAAE,UAAU,EAAE,mBAAmB,EAAE,EAAE,+BAA+B;IAKnE,SAAS,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;YA6EzE,mBAAmB;YAqDnB,6BAA6B;YAuI7B,oBAAoB;IA2DlC,OAAO,CAAC,iBAAiB;IA+DzB,OAAO,CAAC,YAAY;CAIrB"}
|
|
@@ -14,7 +14,7 @@ export class SemanticRelationshipService {
|
|
|
14
14
|
const elementTexts = new Map();
|
|
15
15
|
const elementCount = Object.values(index.elements)
|
|
16
16
|
.reduce((sum, elements) => sum + Object.keys(elements).length, 0);
|
|
17
|
-
logger.
|
|
17
|
+
logger.debug('Starting semantic relationship calculation', {
|
|
18
18
|
elementCount,
|
|
19
19
|
maxForFullMatrix: config.performance.maxElementsForFullMatrix
|
|
20
20
|
});
|
|
@@ -182,17 +182,8 @@ export class SemanticRelationshipService {
|
|
|
182
182
|
const sampleSize = Math.ceil(Math.sqrt(allocatedComparisons));
|
|
183
183
|
typeSampleSizes.set(type, sampleSize);
|
|
184
184
|
}
|
|
185
|
-
logger.debug('Proportional sampling distribution', {
|
|
186
|
-
typeCounts: Object.fromEntries(typeCounts),
|
|
187
|
-
sampleSizes: Object.fromEntries(typeSampleSizes)
|
|
188
|
-
});
|
|
189
185
|
const maxKeysToProcess = Math.min(Math.ceil(Math.sqrt(keys.length)), Math.ceil(crossTypeComparisons / Math.max(1, typeSampleSizes.size)));
|
|
190
186
|
const sampledKeys1 = this.randomSample(keys, maxKeysToProcess);
|
|
191
|
-
logger.debug('Cross-type sampling with limited key set', {
|
|
192
|
-
totalKeys: keys.length,
|
|
193
|
-
sampledKeys: sampledKeys1.length,
|
|
194
|
-
maxKeysToProcess
|
|
195
|
-
});
|
|
196
187
|
for (const key1 of sampledKeys1) {
|
|
197
188
|
if (comparisons >= maxComparisons)
|
|
198
189
|
break;
|
|
@@ -267,11 +258,6 @@ export class SemanticRelationshipService {
|
|
|
267
258
|
significantClusters.set(keyword, elementKeys);
|
|
268
259
|
}
|
|
269
260
|
}
|
|
270
|
-
logger.debug('Keyword clusters built', {
|
|
271
|
-
totalClusters: clusters.size,
|
|
272
|
-
significantClusters: significantClusters.size,
|
|
273
|
-
largestCluster: Math.max(...Array.from(significantClusters.values()).map(v => v.length))
|
|
274
|
-
});
|
|
275
261
|
return significantClusters;
|
|
276
262
|
}
|
|
277
263
|
storeRelationship(index, type1, name1, type2, name2, scoring) {
|
|
@@ -313,4 +299,4 @@ export class SemanticRelationshipService {
|
|
|
313
299
|
return shuffled.slice(0, size);
|
|
314
300
|
}
|
|
315
301
|
}
|
|
316
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VtYW50aWNSZWxhdGlvbnNoaXBTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BvcnRmb2xpby9lbmhhbmNlZC1pbmRleC9TZW1hbnRpY1JlbGF0aW9uc2hpcFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR3RGLE9BQU8sRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFTakcsTUFBTSxPQUFPLDJCQUEyQjtJQUNyQixVQUFVLENBQW9CO0lBQzlCLG1CQUFtQixDQUFzQjtJQUUxRCxZQUFZLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixFQUFtQztRQUM5RSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUM7SUFDakQsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBb0IsRUFBRSxNQUEwQjtRQUNyRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDN0IsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLHVCQUF1QixDQUFDO1FBRXRFLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO1FBQy9DLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQzthQUMvQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFcEUsTUFBTSxDQUFDLElBQUksQ0FBQyw0Q0FBNEMsRUFBRTtZQUN4RCxZQUFZO1lBQ1osZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyx3QkFBd0I7U0FDOUQsQ0FBQyxDQUFDO1FBRUgsS0FBSyxNQUFNLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDckUsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDdkQsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxHQUFHLGtCQUFrQixFQUFFLENBQUM7b0JBQ2hELE1BQU0sQ0FBQyxJQUFJLENBQUMsMkNBQTJDLEVBQUU7d0JBQ3ZELE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUzt3QkFDL0IsU0FBUyxFQUFFLFlBQVksQ0FBQyxJQUFJO3FCQUM3QixDQUFDLENBQUM7b0JBQ0gsT0FBTztnQkFDVCxDQUFDO2dCQUVELE1BQU0sU0FBUyxHQUFHO29CQUNoQixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUk7b0JBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUU7b0JBQzlCLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7b0JBQ25DLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQy9CLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7aUJBQ3BDLENBQUM7Z0JBRUYsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDckMsTUFBTSxHQUFHLEdBQUcsR0FBRyxXQUFXLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3JDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUVoQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUN0QixPQUFPLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztnQkFDeEIsQ0FBQztnQkFDRCxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN0RSxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3pGLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM3QyxNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUM3QixNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztRQUVqQyxNQUFNLFVBQVUsR0FBRztZQUNqQixHQUFHLE1BQU07WUFDVCxXQUFXLEVBQUU7Z0JBQ1gsR0FBRyxNQUFNLENBQUMsV0FBVztnQkFDckIsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FDaEMsTUFBTSxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsRUFDM0MsaUJBQWlCLENBQ2xCO2dCQUNELHdCQUF3QixFQUFFLElBQUksQ0FBQyxHQUFHLENBQ2hDLE1BQU0sQ0FBQyxXQUFXLENBQUMsd0JBQXdCLEVBQzNDLG9CQUFvQixDQUNyQjthQUNGO1NBQ29CLENBQUM7UUFFeEIsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNuRSxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN4RSxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxDQUFDLDZCQUE2QixDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2xGLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUNBQW1DLEVBQUU7WUFDL0MsUUFBUSxFQUFFLFlBQVksQ0FBQyxJQUFJO1lBQzNCLFFBQVEsRUFBRSxHQUFHLFFBQVEsSUFBSTtZQUN6QixRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDekYsUUFBUSxFQUFFLFFBQVEsR0FBRyxrQkFBa0I7U0FDeEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLEtBQUssQ0FBQyxtQkFBbUIsQ0FDL0IsS0FBb0IsRUFDcEIsWUFBaUMsRUFDakMsSUFBYyxFQUNkLE1BQTBCO1FBRTFCLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztRQUNwQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDO1FBQ3pELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUM7UUFDekQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzdCLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQztRQUV0RSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3JDLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsR0FBRyxrQkFBa0IsRUFBRSxDQUFDO2dCQUNoRCxNQUFNLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxFQUFFO29CQUM3QyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVM7b0JBQy9CLFNBQVMsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO29CQUNoQyxXQUFXO2lCQUNaLENBQUMsQ0FBQztnQkFDSCxPQUFPO1lBQ1QsQ0FBQztZQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQixNQUFNLE9BQU8sR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBRSxDQUFDO1lBRXRDLE1BQU0sS0FBSyxHQUEwRCxFQUFFLENBQUM7WUFDeEUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3JFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckIsTUFBTSxPQUFPLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2pFLENBQUM7WUFFRCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7Z0JBQzNELE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFFLENBQUM7Z0JBQ3RDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFFN0QsSUFBSSxPQUFPLENBQUMsYUFBYSxHQUFHLFNBQVMsRUFBRSxDQUFDO29CQUN0QyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDOUQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNoRCxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUTt3QkFBRSxPQUFPO29CQUNuQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNuRixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVKLFdBQVcsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBRTVCLElBQUksV0FBVyxHQUFHLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ3RELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyw2QkFBNkIsQ0FDekMsS0FBb0IsRUFDcEIsWUFBaUMsRUFDakMsSUFBYyxFQUNkLE1BQTBCO1FBRTFCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUM7UUFDekQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQztRQUVuRSxNQUFNLENBQUMsSUFBSSxDQUFDLHdDQUF3QyxFQUFFO1lBQ3BELFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNyQixjQUFjO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sQ0FBQyxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztZQUMzRCxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyRSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDcEIsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUM7UUFDL0IsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDO1FBRTNFLEtBQUssTUFBTSxDQUFDLEVBQUUsV0FBVyxDQUFDLElBQUksZUFBZSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDeEQsSUFBSSxXQUFXLElBQUksa0JBQWtCO2dCQUFFLE1BQU07WUFFN0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ2hELElBQUksV0FBVyxJQUFJLGtCQUFrQjtvQkFBRSxNQUFNO2dCQUU3QyxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVCLE1BQU0sT0FBTyxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMzQyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBRSxDQUFDO2dCQUV0QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDaEQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FDbkMsQ0FBQztnQkFFRixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUN0QyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDdkUsVUFBVSxDQUNYLENBQUM7Z0JBRUYsS0FBSyxNQUFNLENBQUMsSUFBSSxjQUFjLEVBQUUsQ0FBQztvQkFDL0IsSUFBSSxXQUFXLElBQUksa0JBQWtCO3dCQUFFLE1BQU07b0JBRTdDLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDNUIsTUFBTSxPQUFPLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzNDLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFFLENBQUM7b0JBQ3RDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDN0QsV0FBVyxFQUFFLENBQUM7b0JBRWQsSUFBSSxPQUFPLENBQUMsYUFBYSxHQUFHLFNBQVMsRUFBRSxDQUFDO3dCQUN0QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQ2pHLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLFdBQVcsR0FBRyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN0RCxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sb0JBQW9CLEdBQUcsY0FBYyxHQUFHLFdBQVcsQ0FBQztRQUMxRCxJQUFJLFdBQVcsSUFBSSxjQUFjLElBQUksb0JBQW9CLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDL0QsTUFBTSxDQUFDLEtBQUssQ0FBQywyREFBMkQsRUFBRTtnQkFDeEUsV0FBVztnQkFDWCxjQUFjO2FBQ2YsQ0FBQyxDQUFDO1lBQ0gsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBb0IsQ0FBQztRQUNuRCxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUU3QyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsTUFBTTtnQkFBRSxTQUFTO1lBQ3RCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNyQyxjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3BDLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNqQyxDQUFDO1lBQ0QsY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNDLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBRUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNsQyxNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUVsRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDakQsTUFBTSxVQUFVLEdBQUcsS0FBSyxHQUFHLGFBQWEsQ0FBQztZQUN6QyxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUN4RixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO1lBQzlELGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxFQUFFO1lBQ2pELFVBQVUsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztZQUMxQyxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUM7U0FDakQsQ0FBQyxDQUFDO1FBRUgsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQ3BFLENBQUM7UUFFRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRS9ELE1BQU0sQ0FBQyxLQUFLLENBQUMsMENBQTBDLEVBQUU7WUFDdkQsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ3RCLFdBQVcsRUFBRSxZQUFZLENBQUMsTUFBTTtZQUNoQyxnQkFBZ0I7U0FDakIsQ0FBQyxDQUFDO1FBRUgsS0FBSyxNQUFNLElBQUksSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNoQyxJQUFJLFdBQVcsSUFBSSxjQUFjO2dCQUFFLE1BQU07WUFFekMsTUFBTSxPQUFPLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0MsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUUsQ0FBQztZQUV0QyxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksZUFBZSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7Z0JBQzNELElBQUksV0FBVyxJQUFJLGNBQWM7b0JBQUUsTUFBTTtnQkFFekMsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUM7b0JBQUUsU0FBUztnQkFFckQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBRS9ELEtBQUssTUFBTSxJQUFJLElBQUksWUFBWSxFQUFFLENBQUM7b0JBQ2hDLElBQUksV0FBVyxJQUFJLGNBQWM7d0JBQUUsTUFBTTtvQkFDekMsSUFBSSxJQUFJLEtBQUssSUFBSTt3QkFBRSxTQUFTO29CQUU1QixNQUFNLE9BQU8sR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDM0MsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUUsQ0FBQztvQkFDdEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUM3RCxXQUFXLEVBQUUsQ0FBQztvQkFFZCxJQUFJLE9BQU8sQ0FBQyxhQUFhLEdBQUcsU0FBUyxFQUFFLENBQUM7d0JBQ3RDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDakcsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLG9CQUFvQixDQUNoQyxLQUFvQixFQUNwQixJQUFjO1FBRWQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUVuRCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxPQUFPO2dCQUFFLFNBQVM7WUFFdkIsTUFBTSxRQUFRLEdBQUc7Z0JBQ2YsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQztnQkFDbkMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDL0IsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQzthQUNwQyxDQUFDO1lBRUYsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDL0IsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN6QyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2hGLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQW9CLENBQUM7UUFDN0MsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixNQUFNLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUMsT0FBTztnQkFBRSxTQUFTO1lBRXZCLE1BQU0sUUFBUSxHQUFHO2dCQUNmLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7Z0JBQ25DLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQy9CLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7YUFDcEMsQ0FBQztZQUVGLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQy9CLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDekMsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDeEQsSUFBSSxTQUFTLEdBQUcsQ0FBQztvQkFBRSxTQUFTO2dCQUU1QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUM5QixRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDL0IsQ0FBQztnQkFDRCxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0QyxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLEVBQW9CLENBQUM7UUFDeEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBRW5ELEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUN4RCxJQUFJLFdBQVcsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQ2xFLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDaEQsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFO1lBQ3JDLGFBQWEsRUFBRSxRQUFRLENBQUMsSUFBSTtZQUM1QixtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJO1lBQzdDLGNBQWMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN6RixDQUFDLENBQUM7UUFFSCxPQUFPLG1CQUFtQixDQUFDO0lBQzdCLENBQUM7SUFFTyxpQkFBaUIsQ0FDdkIsS0FBb0IsRUFDcEIsS0FBYSxFQUNiLEtBQWEsRUFDYixLQUFhLEVBQ2IsS0FBYSxFQUNiLE9BQVk7UUFFWixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNoRCxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDbEQsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN4RCxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQzFELENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU87YUFDakUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxhQUFhLENBQUMsQ0FBQztRQUUxQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUN4RSxLQUFLLEVBQ0wsS0FBSyxFQUNMLGlCQUFpQixDQUFDLG1CQUFtQixFQUNyQyxPQUFPLENBQUMsYUFBYSxFQUNyQjtnQkFDRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87Z0JBQ3hCLFlBQVksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUNwQixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sSUFBSSxDQUFDLENBQUM7b0JBQ3JELENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUN0RDthQUNGLENBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ2hELEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUNsRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3hELEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDMUQsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTzthQUNqRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLGFBQWEsQ0FBQyxDQUFDO1FBRTFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQ3hFLEtBQUssRUFDTCxLQUFLLEVBQ0wsaUJBQWlCLENBQUMsbUJBQW1CLEVBQ3JDLE9BQU8sQ0FBQyxhQUFhLEVBQ3JCO2dCQUNFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztnQkFDeEIsWUFBWSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQ3BCLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQztvQkFDckQsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQ3REO2FBQ0YsQ0FDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVPLFlBQVksQ0FBSSxLQUFVLEVBQUUsSUFBWTtRQUM5QyxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUM1RCxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBjcmVhdGVSZWxhdGlvbnNoaXAsIFJlbGF0aW9uc2hpcFR5cGVzIH0gZnJvbSAnLi4vdHlwZXMvUmVsYXRpb25zaGlwVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBJbmRleENvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9jb25maWcvSW5kZXhDb25maWcuanMnO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlZEluZGV4IH0gZnJvbSAnLi4vdHlwZXMvSW5kZXhUeXBlcy5qcyc7XG5pbXBvcnQgeyBwYXJzZUVsZW1lbnRJZCwgcGFyc2VFbGVtZW50SWRTdHJpY3QsIGZvcm1hdEVsZW1lbnRJZCB9IGZyb20gJy4uLy4uL3V0aWxzL2VsZW1lbnRJZC5qcyc7XG5pbXBvcnQgdHlwZSB7IE5MUFNjb3JpbmdNYW5hZ2VyIH0gZnJvbSAnLi4vTkxQU2NvcmluZ01hbmFnZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWxhdGlvbnNoaXBNYW5hZ2VyIH0gZnJvbSAnLi4vUmVsYXRpb25zaGlwTWFuYWdlci5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNSZWxhdGlvbnNoaXBTZXJ2aWNlRGVwcyB7XG4gIG5scFNjb3Jpbmc6IE5MUFNjb3JpbmdNYW5hZ2VyO1xuICByZWxhdGlvbnNoaXBNYW5hZ2VyOiBSZWxhdGlvbnNoaXBNYW5hZ2VyO1xufVxuXG5leHBvcnQgY2xhc3MgU2VtYW50aWNSZWxhdGlvbnNoaXBTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBubHBTY29yaW5nOiBOTFBTY29yaW5nTWFuYWdlcjtcbiAgcHJpdmF0ZSByZWFkb25seSByZWxhdGlvbnNoaXBNYW5hZ2VyOiBSZWxhdGlvbnNoaXBNYW5hZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKHsgbmxwU2NvcmluZywgcmVsYXRpb25zaGlwTWFuYWdlciB9OiBTZW1hbnRpY1JlbGF0aW9uc2hpcFNlcnZpY2VEZXBzKSB7XG4gICAgdGhpcy5ubHBTY29yaW5nID0gbmxwU2NvcmluZztcbiAgICB0aGlzLnJlbGF0aW9uc2hpcE1hbmFnZXIgPSByZWxhdGlvbnNoaXBNYW5hZ2VyO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNhbGN1bGF0ZShpbmRleDogRW5oYW5jZWRJbmRleCwgY29uZmlnOiBJbmRleENvbmZpZ3VyYXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IE1BWF9FWEVDVVRJT05fVElNRSA9IGNvbmZpZy5wZXJmb3JtYW5jZS5jaXJjdWl0QnJlYWtlclRpbWVvdXRNcztcblxuICAgIGNvbnN0IGVsZW1lbnRUZXh0cyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgY29uc3QgZWxlbWVudENvdW50ID0gT2JqZWN0LnZhbHVlcyhpbmRleC5lbGVtZW50cylcbiAgICAgIC5yZWR1Y2UoKHN1bSwgZWxlbWVudHMpID0+IHN1bSArIE9iamVjdC5rZXlzKGVsZW1lbnRzKS5sZW5ndGgsIDApO1xuXG4gICAgbG9nZ2VyLmluZm8oJ1N0YXJ0aW5nIHNlbWFudGljIHJlbGF0aW9uc2hpcCBjYWxjdWxhdGlvbicsIHtcbiAgICAgIGVsZW1lbnRDb3VudCxcbiAgICAgIG1heEZvckZ1bGxNYXRyaXg6IGNvbmZpZy5wZXJmb3JtYW5jZS5tYXhFbGVtZW50c0ZvckZ1bGxNYXRyaXhcbiAgICB9KTtcblxuICAgIGZvciAoY29uc3QgW2VsZW1lbnRUeXBlLCBlbGVtZW50c10gb2YgT2JqZWN0LmVudHJpZXMoaW5kZXguZWxlbWVudHMpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBlbGVtZW50XSBvZiBPYmplY3QuZW50cmllcyhlbGVtZW50cykpIHtcbiAgICAgICAgaWYgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPiBNQVhfRVhFQ1VUSU9OX1RJTUUpIHtcbiAgICAgICAgICBsb2dnZXIud2FybignU2VtYW50aWMgcmVsYXRpb25zaGlwIGNhbGN1bGF0aW9uIHRpbWVvdXQnLCB7XG4gICAgICAgICAgICBlbGFwc2VkOiBEYXRlLm5vdygpIC0gc3RhcnRUaW1lLFxuICAgICAgICAgICAgcHJvY2Vzc2VkOiBlbGVtZW50VGV4dHMuc2l6ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRleHRQYXJ0cyA9IFtcbiAgICAgICAgICBlbGVtZW50LmNvcmUubmFtZSxcbiAgICAgICAgICBlbGVtZW50LmNvcmUuZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgICAgLi4uKGVsZW1lbnQuc2VhcmNoPy5rZXl3b3JkcyB8fCBbXSksXG4gICAgICAgICAgLi4uKGVsZW1lbnQuc2VhcmNoPy50YWdzIHx8IFtdKSxcbiAgICAgICAgICAuLi4oZWxlbWVudC5zZWFyY2g/LnRyaWdnZXJzIHx8IFtdKVxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IGZ1bGxUZXh0ID0gdGV4dFBhcnRzLmpvaW4oJyAnKTtcbiAgICAgICAgY29uc3Qga2V5ID0gYCR7ZWxlbWVudFR5cGV9OiR7bmFtZX1gO1xuICAgICAgICBlbGVtZW50VGV4dHMuc2V0KGtleSwgZnVsbFRleHQpO1xuXG4gICAgICAgIGlmICghZWxlbWVudC5zZW1hbnRpYykge1xuICAgICAgICAgIGVsZW1lbnQuc2VtYW50aWMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50LnNlbWFudGljLmVudHJvcHkgPSB0aGlzLm5scFNjb3JpbmcuY2FsY3VsYXRlRW50cm9weShmdWxsVGV4dCk7XG4gICAgICAgIGVsZW1lbnQuc2VtYW50aWMudW5pcXVlX3Rlcm1zID0gZnVsbFRleHQuc3BsaXQoL1xccysvKS5maWx0ZXIodCA9PiB0Lmxlbmd0aCA+IDEpLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBrZXlzID0gQXJyYXkuZnJvbShlbGVtZW50VGV4dHMua2V5cygpKTtcbiAgICBjb25zdCBNQVhfU0FGRV9FTEVNRU5UUyA9IDUwO1xuICAgIGNvbnN0IE1BWF9TQUZFX0NPTVBBUklTT05TID0gNTAwO1xuXG4gICAgY29uc3Qgc2FmZUNvbmZpZyA9IHtcbiAgICAgIC4uLmNvbmZpZyxcbiAgICAgIHBlcmZvcm1hbmNlOiB7XG4gICAgICAgIC4uLmNvbmZpZy5wZXJmb3JtYW5jZSxcbiAgICAgICAgbWF4RWxlbWVudHNGb3JGdWxsTWF0cml4OiBNYXRoLm1pbihcbiAgICAgICAgICBjb25maWcucGVyZm9ybWFuY2UubWF4RWxlbWVudHNGb3JGdWxsTWF0cml4LFxuICAgICAgICAgIE1BWF9TQUZFX0VMRU1FTlRTXG4gICAgICAgICksXG4gICAgICAgIG1heFNpbWlsYXJpdHlDb21wYXJpc29uczogTWF0aC5taW4oXG4gICAgICAgICAgY29uZmlnLnBlcmZvcm1hbmNlLm1heFNpbWlsYXJpdHlDb21wYXJpc29ucyxcbiAgICAgICAgICBNQVhfU0FGRV9DT01QQVJJU09OU1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSBhcyBJbmRleENvbmZpZ3VyYXRpb247XG5cbiAgICBpZiAoa2V5cy5sZW5ndGggPD0gc2FmZUNvbmZpZy5wZXJmb3JtYW5jZS5tYXhFbGVtZW50c0ZvckZ1bGxNYXRyaXgpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2FsY3VsYXRlRnVsbE1hdHJpeChpbmRleCwgZWxlbWVudFRleHRzLCBrZXlzLCBzYWZlQ29uZmlnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5jYWxjdWxhdGVTYW1wbGVkUmVsYXRpb25zaGlwcyhpbmRleCwgZWxlbWVudFRleHRzLCBrZXlzLCBzYWZlQ29uZmlnKTtcbiAgICB9XG5cbiAgICBjb25zdCBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgbG9nZ2VyLmluZm8oJ1NlbWFudGljIHJlbGF0aW9uc2hpcHMgY2FsY3VsYXRlZCcsIHtcbiAgICAgIGVsZW1lbnRzOiBlbGVtZW50VGV4dHMuc2l6ZSxcbiAgICAgIGR1cmF0aW9uOiBgJHtkdXJhdGlvbn1tc2AsXG4gICAgICBzdHJhdGVneToga2V5cy5sZW5ndGggPD0gY29uZmlnLnBlcmZvcm1hbmNlLm1heEVsZW1lbnRzRm9yRnVsbE1hdHJpeCA/ICdmdWxsJyA6ICdzYW1wbGVkJyxcbiAgICAgIHRpbWVkT3V0OiBkdXJhdGlvbiA+IE1BWF9FWEVDVVRJT05fVElNRVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjYWxjdWxhdGVGdWxsTWF0cml4KFxuICAgIGluZGV4OiBFbmhhbmNlZEluZGV4LFxuICAgIGVsZW1lbnRUZXh0czogTWFwPHN0cmluZywgc3RyaW5nPixcbiAgICBrZXlzOiBzdHJpbmdbXSxcbiAgICBjb25maWc6IEluZGV4Q29uZmlndXJhdGlvblxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgY29tcGFyaXNvbnMgPSAwO1xuICAgIGNvbnN0IGJhdGNoU2l6ZSA9IGNvbmZpZy5wZXJmb3JtYW5jZS5zaW1pbGFyaXR5QmF0Y2hTaXplO1xuICAgIGNvbnN0IHRocmVzaG9sZCA9IGNvbmZpZy5wZXJmb3JtYW5jZS5zaW1pbGFyaXR5VGhyZXNob2xkO1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgY29uc3QgTUFYX0VYRUNVVElPTl9USU1FID0gY29uZmlnLnBlcmZvcm1hbmNlLmNpcmN1aXRCcmVha2VyVGltZW91dE1zO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA+IE1BWF9FWEVDVVRJT05fVElNRSkge1xuICAgICAgICBsb2dnZXIud2FybignRnVsbCBtYXRyaXggY2FsY3VsYXRpb24gdGltZW91dCcsIHtcbiAgICAgICAgICBlbGFwc2VkOiBEYXRlLm5vdygpIC0gc3RhcnRUaW1lLFxuICAgICAgICAgIHByb2Nlc3NlZDogYCR7aX0vJHtrZXlzLmxlbmd0aH1gLFxuICAgICAgICAgIGNvbXBhcmlzb25zXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGtleTEgPSBrZXlzW2ldO1xuICAgICAgY29uc3QgcGFyc2VkMSA9IHBhcnNlRWxlbWVudElkU3RyaWN0KGtleTEpO1xuICAgICAgY29uc3QgdGV4dDEgPSBlbGVtZW50VGV4dHMuZ2V0KGtleTEpITtcblxuICAgICAgY29uc3QgYmF0Y2g6IEFycmF5PHsga2V5Mjogc3RyaW5nOyB0eXBlMjogc3RyaW5nOyBuYW1lMjogc3RyaW5nIH0+ID0gW107XG4gICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBrZXlzLmxlbmd0aCAmJiBiYXRjaC5sZW5ndGggPCBiYXRjaFNpemU7IGorKykge1xuICAgICAgICBjb25zdCBrZXkyID0ga2V5c1tqXTtcbiAgICAgICAgY29uc3QgcGFyc2VkMiA9IHBhcnNlRWxlbWVudElkU3RyaWN0KGtleTIpO1xuICAgICAgICBiYXRjaC5wdXNoKHsga2V5MiwgdHlwZTI6IHBhcnNlZDIudHlwZSwgbmFtZTI6IHBhcnNlZDIubmFtZSB9KTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoYmF0Y2gubWFwKGFzeW5jICh7IGtleTIsIHR5cGUyLCBuYW1lMiB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHRleHQyID0gZWxlbWVudFRleHRzLmdldChrZXkyKSE7XG4gICAgICAgIGNvbnN0IHNjb3JpbmcgPSB0aGlzLm5scFNjb3Jpbmcuc2NvcmVSZWxldmFuY2UodGV4dDEsIHRleHQyKTtcblxuICAgICAgICBpZiAoc2NvcmluZy5jb21iaW5lZFNjb3JlID4gdGhyZXNob2xkKSB7XG4gICAgICAgICAgY29uc3QgZWxlbWVudDEgPSBpbmRleC5lbGVtZW50c1twYXJzZWQxLnR5cGVdPy5bcGFyc2VkMS5uYW1lXTtcbiAgICAgICAgICBjb25zdCBlbGVtZW50MiA9IGluZGV4LmVsZW1lbnRzW3R5cGUyXT8uW25hbWUyXTtcbiAgICAgICAgICBpZiAoIWVsZW1lbnQxIHx8ICFlbGVtZW50MikgcmV0dXJuO1xuICAgICAgICAgIHRoaXMuc3RvcmVSZWxhdGlvbnNoaXAoaW5kZXgsIHBhcnNlZDEudHlwZSwgcGFyc2VkMS5uYW1lLCB0eXBlMiwgbmFtZTIsIHNjb3JpbmcpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG5cbiAgICAgIGNvbXBhcmlzb25zICs9IGJhdGNoLmxlbmd0aDtcblxuICAgICAgaWYgKGNvbXBhcmlzb25zICUgMTAwID09PSAwKSB7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0SW1tZWRpYXRlKHJlc29sdmUpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNhbGN1bGF0ZVNhbXBsZWRSZWxhdGlvbnNoaXBzKFxuICAgIGluZGV4OiBFbmhhbmNlZEluZGV4LFxuICAgIGVsZW1lbnRUZXh0czogTWFwPHN0cmluZywgc3RyaW5nPixcbiAgICBrZXlzOiBzdHJpbmdbXSxcbiAgICBjb25maWc6IEluZGV4Q29uZmlndXJhdGlvblxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aHJlc2hvbGQgPSBjb25maWcucGVyZm9ybWFuY2Uuc2ltaWxhcml0eVRocmVzaG9sZDtcbiAgICBjb25zdCBtYXhDb21wYXJpc29ucyA9IGNvbmZpZy5wZXJmb3JtYW5jZS5tYXhTaW1pbGFyaXR5Q29tcGFyaXNvbnM7XG5cbiAgICBsb2dnZXIuaW5mbygnVXNpbmcgc2FtcGxlZCByZWxhdGlvbnNoaXAgY2FsY3VsYXRpb24nLCB7XG4gICAgICBlbGVtZW50czoga2V5cy5sZW5ndGgsXG4gICAgICBtYXhDb21wYXJpc29uc1xuICAgIH0pO1xuXG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ05vIGVsZW1lbnRzIHRvIGNhbGN1bGF0ZSByZWxhdGlvbnNoaXBzIGZvcicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGtleXdvcmRDbHVzdGVycyA9IGF3YWl0IHRoaXMuYnVpbGRLZXl3b3JkQ2x1c3RlcnMoaW5kZXgsIGtleXMpO1xuICAgIGxldCBjb21wYXJpc29ucyA9IDA7XG4gICAgY29uc3QgY2x1c3RlckJ1ZGdldFJhdGlvID0gMC42O1xuICAgIGNvbnN0IGNsdXN0ZXJDb21wYXJpc29ucyA9IE1hdGguZmxvb3IobWF4Q29tcGFyaXNvbnMgKiBjbHVzdGVyQnVkZ2V0UmF0aW8pO1xuXG4gICAgZm9yIChjb25zdCBbLCBjbHVzdGVyS2V5c10gb2Yga2V5d29yZENsdXN0ZXJzLmVudHJpZXMoKSkge1xuICAgICAgaWYgKGNvbXBhcmlzb25zID49IGNsdXN0ZXJDb21wYXJpc29ucykgYnJlYWs7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2x1c3RlcktleXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGlmIChjb21wYXJpc29ucyA+PSBjbHVzdGVyQ29tcGFyaXNvbnMpIGJyZWFrO1xuXG4gICAgICAgIGNvbnN0IGtleTEgPSBjbHVzdGVyS2V5c1tpXTtcbiAgICAgICAgY29uc3QgcGFyc2VkMSA9IHBhcnNlRWxlbWVudElkU3RyaWN0KGtleTEpO1xuICAgICAgICBjb25zdCB0ZXh0MSA9IGVsZW1lbnRUZXh0cy5nZXQoa2V5MSkhO1xuXG4gICAgICAgIGNvbnN0IHNhbXBsZVNpemUgPSBNYXRoLm1pbihcbiAgICAgICAgICBNYXRoLmNlaWwoTWF0aC5zcXJ0KGNsdXN0ZXJLZXlzLmxlbmd0aCAtIGkgLSAxKSksXG4gICAgICAgICAgY29uZmlnLnNhbXBsaW5nLmNsdXN0ZXJTYW1wbGVMaW1pdFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHNhbXBsZWRJbmRpY2VzID0gdGhpcy5yYW5kb21TYW1wbGUoXG4gICAgICAgICAgQXJyYXkuZnJvbSh7IGxlbmd0aDogY2x1c3RlcktleXMubGVuZ3RoIC0gaSAtIDEgfSwgKF8sIGopID0+IGkgKyBqICsgMSksXG4gICAgICAgICAgc2FtcGxlU2l6ZVxuICAgICAgICApO1xuXG4gICAgICAgIGZvciAoY29uc3QgaiBvZiBzYW1wbGVkSW5kaWNlcykge1xuICAgICAgICAgIGlmIChjb21wYXJpc29ucyA+PSBjbHVzdGVyQ29tcGFyaXNvbnMpIGJyZWFrO1xuXG4gICAgICAgICAgY29uc3Qga2V5MiA9IGNsdXN0ZXJLZXlzW2pdO1xuICAgICAgICAgIGNvbnN0IHBhcnNlZDIgPSBwYXJzZUVsZW1lbnRJZFN0cmljdChrZXkyKTtcbiAgICAgICAgICBjb25zdCB0ZXh0MiA9IGVsZW1lbnRUZXh0cy5nZXQoa2V5MikhO1xuICAgICAgICAgIGNvbnN0IHNjb3JpbmcgPSB0aGlzLm5scFNjb3Jpbmcuc2NvcmVSZWxldmFuY2UodGV4dDEsIHRleHQyKTtcbiAgICAgICAgICBjb21wYXJpc29ucysrO1xuXG4gICAgICAgICAgaWYgKHNjb3JpbmcuY29tYmluZWRTY29yZSA+IHRocmVzaG9sZCkge1xuICAgICAgICAgICAgdGhpcy5zdG9yZVJlbGF0aW9uc2hpcChpbmRleCwgcGFyc2VkMS50eXBlLCBwYXJzZWQxLm5hbWUsIHBhcnNlZDIudHlwZSwgcGFyc2VkMi5uYW1lLCBzY29yaW5nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNvbXBhcmlzb25zICUgMTAwID09PSAwKSB7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0SW1tZWRpYXRlKHJlc29sdmUpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjcm9zc1R5cGVDb21wYXJpc29ucyA9IG1heENvbXBhcmlzb25zIC0gY29tcGFyaXNvbnM7XG4gICAgaWYgKGNvbXBhcmlzb25zID49IG1heENvbXBhcmlzb25zIHx8IGNyb3NzVHlwZUNvbXBhcmlzb25zIDw9IDApIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnU2tpcHBpbmcgY3Jvc3MtdHlwZSBzYW1wbGluZywgY29tcGFyaXNvbiBidWRnZXQgZXhoYXVzdGVkJywge1xuICAgICAgICBjb21wYXJpc29ucyxcbiAgICAgICAgbWF4Q29tcGFyaXNvbnNcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRzQnlUeXBlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZ1tdPigpO1xuICAgIGNvbnN0IHR5cGVDb3VudHMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VFbGVtZW50SWQoa2V5KTtcbiAgICAgIGlmICghcGFyc2VkKSBjb250aW51ZTtcbiAgICAgIGlmICghZWxlbWVudHNCeVR5cGUuaGFzKHBhcnNlZC50eXBlKSkge1xuICAgICAgICBlbGVtZW50c0J5VHlwZS5zZXQocGFyc2VkLnR5cGUsIFtdKTtcbiAgICAgICAgdHlwZUNvdW50cy5zZXQocGFyc2VkLnR5cGUsIDApO1xuICAgICAgfVxuICAgICAgZWxlbWVudHNCeVR5cGUuZ2V0KHBhcnNlZC50eXBlKSEucHVzaChrZXkpO1xuICAgICAgdHlwZUNvdW50cy5zZXQocGFyc2VkLnR5cGUsIHR5cGVDb3VudHMuZ2V0KHBhcnNlZC50eXBlKSEgKyAxKTtcbiAgICB9XG5cbiAgICBjb25zdCB0b3RhbEVsZW1lbnRzID0ga2V5cy5sZW5ndGg7XG4gICAgY29uc3QgdHlwZVNhbXBsZVNpemVzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcblxuICAgIGZvciAoY29uc3QgW3R5cGUsIGNvdW50XSBvZiB0eXBlQ291bnRzLmVudHJpZXMoKSkge1xuICAgICAgY29uc3QgcHJvcG9ydGlvbiA9IGNvdW50IC8gdG90YWxFbGVtZW50cztcbiAgICAgIGNvbnN0IGFsbG9jYXRlZENvbXBhcmlzb25zID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihjcm9zc1R5cGVDb21wYXJpc29ucyAqIHByb3BvcnRpb24pKTtcbiAgICAgIGNvbnN0IHNhbXBsZVNpemUgPSBNYXRoLmNlaWwoTWF0aC5zcXJ0KGFsbG9jYXRlZENvbXBhcmlzb25zKSk7XG4gICAgICB0eXBlU2FtcGxlU2l6ZXMuc2V0KHR5cGUsIHNhbXBsZVNpemUpO1xuICAgIH1cblxuICAgIGxvZ2dlci5kZWJ1ZygnUHJvcG9ydGlvbmFsIHNhbXBsaW5nIGRpc3RyaWJ1dGlvbicsIHtcbiAgICAgIHR5cGVDb3VudHM6IE9iamVjdC5mcm9tRW50cmllcyh0eXBlQ291bnRzKSxcbiAgICAgIHNhbXBsZVNpemVzOiBPYmplY3QuZnJvbUVudHJpZXModHlwZVNhbXBsZVNpemVzKVxuICAgIH0pO1xuXG4gICAgY29uc3QgbWF4S2V5c1RvUHJvY2VzcyA9IE1hdGgubWluKFxuICAgICAgTWF0aC5jZWlsKE1hdGguc3FydChrZXlzLmxlbmd0aCkpLFxuICAgICAgTWF0aC5jZWlsKGNyb3NzVHlwZUNvbXBhcmlzb25zIC8gTWF0aC5tYXgoMSwgdHlwZVNhbXBsZVNpemVzLnNpemUpKVxuICAgICk7XG5cbiAgICBjb25zdCBzYW1wbGVkS2V5czEgPSB0aGlzLnJhbmRvbVNhbXBsZShrZXlzLCBtYXhLZXlzVG9Qcm9jZXNzKTtcblxuICAgIGxvZ2dlci5kZWJ1ZygnQ3Jvc3MtdHlwZSBzYW1wbGluZyB3aXRoIGxpbWl0ZWQga2V5IHNldCcsIHtcbiAgICAgIHRvdGFsS2V5czoga2V5cy5sZW5ndGgsXG4gICAgICBzYW1wbGVkS2V5czogc2FtcGxlZEtleXMxLmxlbmd0aCxcbiAgICAgIG1heEtleXNUb1Byb2Nlc3NcbiAgICB9KTtcblxuICAgIGZvciAoY29uc3Qga2V5MSBvZiBzYW1wbGVkS2V5czEpIHtcbiAgICAgIGlmIChjb21wYXJpc29ucyA+PSBtYXhDb21wYXJpc29ucykgYnJlYWs7XG5cbiAgICAgIGNvbnN0IHBhcnNlZDEgPSBwYXJzZUVsZW1lbnRJZFN0cmljdChrZXkxKTtcbiAgICAgIGNvbnN0IHRleHQxID0gZWxlbWVudFRleHRzLmdldChrZXkxKSE7XG5cbiAgICAgIGZvciAoY29uc3QgW3R5cGUsIHNhbXBsZVNpemVdIG9mIHR5cGVTYW1wbGVTaXplcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKGNvbXBhcmlzb25zID49IG1heENvbXBhcmlzb25zKSBicmVhaztcblxuICAgICAgICBjb25zdCBrZXlzT2ZUeXBlID0gZWxlbWVudHNCeVR5cGUuZ2V0KHR5cGUpO1xuICAgICAgICBpZiAoIWtleXNPZlR5cGUgfHwga2V5c09mVHlwZS5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IHNhbXBsZWRLZXlzMiA9IHRoaXMucmFuZG9tU2FtcGxlKGtleXNPZlR5cGUsIHNhbXBsZVNpemUpO1xuXG4gICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiBzYW1wbGVkS2V5czIpIHtcbiAgICAgICAgICBpZiAoY29tcGFyaXNvbnMgPj0gbWF4Q29tcGFyaXNvbnMpIGJyZWFrO1xuICAgICAgICAgIGlmIChrZXkxID09PSBrZXkyKSBjb250aW51ZTtcblxuICAgICAgICAgIGNvbnN0IHBhcnNlZDIgPSBwYXJzZUVsZW1lbnRJZFN0cmljdChrZXkyKTtcbiAgICAgICAgICBjb25zdCB0ZXh0MiA9IGVsZW1lbnRUZXh0cy5nZXQoa2V5MikhO1xuICAgICAgICAgIGNvbnN0IHNjb3JpbmcgPSB0aGlzLm5scFNjb3Jpbmcuc2NvcmVSZWxldmFuY2UodGV4dDEsIHRleHQyKTtcbiAgICAgICAgICBjb21wYXJpc29ucysrO1xuXG4gICAgICAgICAgaWYgKHNjb3JpbmcuY29tYmluZWRTY29yZSA+IHRocmVzaG9sZCkge1xuICAgICAgICAgICAgdGhpcy5zdG9yZVJlbGF0aW9uc2hpcChpbmRleCwgcGFyc2VkMS50eXBlLCBwYXJzZWQxLm5hbWUsIHBhcnNlZDIudHlwZSwgcGFyc2VkMi5uYW1lLCBzY29yaW5nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkS2V5d29yZENsdXN0ZXJzKFxuICAgIGluZGV4OiBFbmhhbmNlZEluZGV4LFxuICAgIGtleXM6IHN0cmluZ1tdXG4gICk6IFByb21pc2U8TWFwPHN0cmluZywgc3RyaW5nW10+PiB7XG4gICAgY29uc3Qga2V5d29yZEZyZXF1ZW5jeSA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUVsZW1lbnRJZFN0cmljdChrZXkpO1xuICAgICAgY29uc3QgZWxlbWVudCA9IGluZGV4LmVsZW1lbnRzW3BhcnNlZC50eXBlXT8uW3BhcnNlZC5uYW1lXTtcbiAgICAgIGlmICghZWxlbWVudCkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IGtleXdvcmRzID0gW1xuICAgICAgICAuLi4oZWxlbWVudC5zZWFyY2g/LmtleXdvcmRzIHx8IFtdKSxcbiAgICAgICAgLi4uKGVsZW1lbnQuc2VhcmNoPy50YWdzIHx8IFtdKSxcbiAgICAgICAgLi4uKGVsZW1lbnQuc2VhcmNoPy50cmlnZ2VycyB8fCBbXSlcbiAgICAgIF07XG5cbiAgICAgIGZvciAoY29uc3Qga2V5d29yZCBvZiBrZXl3b3Jkcykge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkID0ga2V5d29yZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBrZXl3b3JkRnJlcXVlbmN5LnNldChub3JtYWxpemVkLCAoa2V5d29yZEZyZXF1ZW5jeS5nZXQobm9ybWFsaXplZCkgfHwgMCkgKyAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbHVzdGVycyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUVsZW1lbnRJZFN0cmljdChrZXkpO1xuICAgICAgY29uc3QgZWxlbWVudCA9IGluZGV4LmVsZW1lbnRzW3BhcnNlZC50eXBlXT8uW3BhcnNlZC5uYW1lXTtcbiAgICAgIGlmICghZWxlbWVudCkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IGtleXdvcmRzID0gW1xuICAgICAgICAuLi4oZWxlbWVudC5zZWFyY2g/LmtleXdvcmRzIHx8IFtdKSxcbiAgICAgICAgLi4uKGVsZW1lbnQuc2VhcmNoPy50YWdzIHx8IFtdKSxcbiAgICAgICAgLi4uKGVsZW1lbnQuc2VhcmNoPy50cmlnZ2VycyB8fCBbXSlcbiAgICAgIF07XG5cbiAgICAgIGZvciAoY29uc3Qga2V5d29yZCBvZiBrZXl3b3Jkcykge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkID0ga2V5d29yZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBmcmVxdWVuY3kgPSBrZXl3b3JkRnJlcXVlbmN5LmdldChub3JtYWxpemVkKSB8fCAwO1xuICAgICAgICBpZiAoZnJlcXVlbmN5IDwgMikgY29udGludWU7XG5cbiAgICAgICAgaWYgKCFjbHVzdGVycy5oYXMobm9ybWFsaXplZCkpIHtcbiAgICAgICAgICBjbHVzdGVycy5zZXQobm9ybWFsaXplZCwgW10pO1xuICAgICAgICB9XG4gICAgICAgIGNsdXN0ZXJzLmdldChub3JtYWxpemVkKSEucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNpZ25pZmljYW50Q2x1c3RlcnMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KCk7XG4gICAgY29uc3QgbWF4RnJlcXVlbmN5ID0gTWF0aC5mbG9vcihrZXlzLmxlbmd0aCAqIDAuNSk7XG5cbiAgICBmb3IgKGNvbnN0IFtrZXl3b3JkLCBlbGVtZW50S2V5c10gb2YgY2x1c3RlcnMuZW50cmllcygpKSB7XG4gICAgICBpZiAoZWxlbWVudEtleXMubGVuZ3RoID49IDIgJiYgZWxlbWVudEtleXMubGVuZ3RoIDw9IG1heEZyZXF1ZW5jeSkge1xuICAgICAgICBzaWduaWZpY2FudENsdXN0ZXJzLnNldChrZXl3b3JkLCBlbGVtZW50S2V5cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbG9nZ2VyLmRlYnVnKCdLZXl3b3JkIGNsdXN0ZXJzIGJ1aWx0Jywge1xuICAgICAgdG90YWxDbHVzdGVyczogY2x1c3RlcnMuc2l6ZSxcbiAgICAgIHNpZ25pZmljYW50Q2x1c3RlcnM6IHNpZ25pZmljYW50Q2x1c3RlcnMuc2l6ZSxcbiAgICAgIGxhcmdlc3RDbHVzdGVyOiBNYXRoLm1heCguLi5BcnJheS5mcm9tKHNpZ25pZmljYW50Q2x1c3RlcnMudmFsdWVzKCkpLm1hcCh2ID0+IHYubGVuZ3RoKSlcbiAgICB9KTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudENsdXN0ZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9yZVJlbGF0aW9uc2hpcChcbiAgICBpbmRleDogRW5oYW5jZWRJbmRleCxcbiAgICB0eXBlMTogc3RyaW5nLFxuICAgIG5hbWUxOiBzdHJpbmcsXG4gICAgdHlwZTI6IHN0cmluZyxcbiAgICBuYW1lMjogc3RyaW5nLFxuICAgIHNjb3Jpbmc6IGFueVxuICApOiB2b2lkIHtcbiAgICBpZiAoIWluZGV4LmVsZW1lbnRzW3R5cGUxXVtuYW1lMV0ucmVsYXRpb25zaGlwcykge1xuICAgICAgaW5kZXguZWxlbWVudHNbdHlwZTFdW25hbWUxXS5yZWxhdGlvbnNoaXBzID0ge307XG4gICAgfVxuICAgIGlmICghaW5kZXguZWxlbWVudHNbdHlwZTFdW25hbWUxXS5yZWxhdGlvbnNoaXBzLnNpbWlsYXIpIHtcbiAgICAgIGluZGV4LmVsZW1lbnRzW3R5cGUxXVtuYW1lMV0ucmVsYXRpb25zaGlwcy5zaW1pbGFyID0gW107XG4gICAgfVxuXG4gICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IGZvcm1hdEVsZW1lbnRJZCh0eXBlMiwgbmFtZTIpO1xuICAgIGNvbnN0IGV4aXN0aW5nMSA9IGluZGV4LmVsZW1lbnRzW3R5cGUxXVtuYW1lMV0ucmVsYXRpb25zaGlwcy5zaW1pbGFyXG4gICAgICAuZmluZChyID0+IHIuZWxlbWVudCA9PT0gdGFyZ2V0RWxlbWVudCk7XG5cbiAgICBpZiAoIWV4aXN0aW5nMSkge1xuICAgICAgaW5kZXguZWxlbWVudHNbdHlwZTFdW25hbWUxXS5yZWxhdGlvbnNoaXBzLnNpbWlsYXIucHVzaChjcmVhdGVSZWxhdGlvbnNoaXAoXG4gICAgICAgIHR5cGUyLFxuICAgICAgICBuYW1lMixcbiAgICAgICAgUmVsYXRpb25zaGlwVHlwZXMuU0VNQU5USUNfU0lNSUxBUklUWSxcbiAgICAgICAgc2NvcmluZy5jb21iaW5lZFNjb3JlLFxuICAgICAgICB7XG4gICAgICAgICAgamFjY2FyZDogc2NvcmluZy5qYWNjYXJkLFxuICAgICAgICAgIGVudHJvcHlfZGlmZjogTWF0aC5hYnMoXG4gICAgICAgICAgICAoaW5kZXguZWxlbWVudHNbdHlwZTFdW25hbWUxXS5zZW1hbnRpYz8uZW50cm9weSB8fCAwKSAtXG4gICAgICAgICAgICAoaW5kZXguZWxlbWVudHNbdHlwZTJdW25hbWUyXS5zZW1hbnRpYz8uZW50cm9weSB8fCAwKVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgKSk7XG4gICAgfVxuXG4gICAgaWYgKCFpbmRleC5lbGVtZW50c1t0eXBlMl1bbmFtZTJdLnJlbGF0aW9uc2hpcHMpIHtcbiAgICAgIGluZGV4LmVsZW1lbnRzW3R5cGUyXVtuYW1lMl0ucmVsYXRpb25zaGlwcyA9IHt9O1xuICAgIH1cbiAgICBpZiAoIWluZGV4LmVsZW1lbnRzW3R5cGUyXVtuYW1lMl0ucmVsYXRpb25zaGlwcy5zaW1pbGFyKSB7XG4gICAgICBpbmRleC5lbGVtZW50c1t0eXBlMl1bbmFtZTJdLnJlbGF0aW9uc2hpcHMuc2ltaWxhciA9IFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZUVsZW1lbnQgPSBmb3JtYXRFbGVtZW50SWQodHlwZTEsIG5hbWUxKTtcbiAgICBjb25zdCBleGlzdGluZzIgPSBpbmRleC5lbGVtZW50c1t0eXBlMl1bbmFtZTJdLnJlbGF0aW9uc2hpcHMuc2ltaWxhclxuICAgICAgLmZpbmQociA9PiByLmVsZW1lbnQgPT09IHNvdXJjZUVsZW1lbnQpO1xuXG4gICAgaWYgKCFleGlzdGluZzIpIHtcbiAgICAgIGluZGV4LmVsZW1lbnRzW3R5cGUyXVtuYW1lMl0ucmVsYXRpb25zaGlwcy5zaW1pbGFyLnB1c2goY3JlYXRlUmVsYXRpb25zaGlwKFxuICAgICAgICB0eXBlMSxcbiAgICAgICAgbmFtZTEsXG4gICAgICAgIFJlbGF0aW9uc2hpcFR5cGVzLlNFTUFOVElDX1NJTUlMQVJJVFksXG4gICAgICAgIHNjb3JpbmcuY29tYmluZWRTY29yZSxcbiAgICAgICAge1xuICAgICAgICAgIGphY2NhcmQ6IHNjb3JpbmcuamFjY2FyZCxcbiAgICAgICAgICBlbnRyb3B5X2RpZmY6IE1hdGguYWJzKFxuICAgICAgICAgICAgKGluZGV4LmVsZW1lbnRzW3R5cGUxXVtuYW1lMV0uc2VtYW50aWM/LmVudHJvcHkgfHwgMCkgLVxuICAgICAgICAgICAgKGluZGV4LmVsZW1lbnRzW3R5cGUyXVtuYW1lMl0uc2VtYW50aWM/LmVudHJvcHkgfHwgMClcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmFuZG9tU2FtcGxlPFQ+KGFycmF5OiBUW10sIHNpemU6IG51bWJlcik6IFRbXSB7XG4gICAgY29uc3Qgc2h1ZmZsZWQgPSBbLi4uYXJyYXldLnNvcnQoKCkgPT4gMC41IC0gTWF0aC5yYW5kb20oKSk7XG4gICAgcmV0dXJuIHNodWZmbGVkLnNsaWNlKDAsIHNpemUpO1xuICB9XG59XG4iXX0=
|
|
302
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VtYW50aWNSZWxhdGlvbnNoaXBTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BvcnRmb2xpby9lbmhhbmNlZC1pbmRleC9TZW1hbnRpY1JlbGF0aW9uc2hpcFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR3RGLE9BQU8sRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFTakcsTUFBTSxPQUFPLDJCQUEyQjtJQUNyQixVQUFVLENBQW9CO0lBQzlCLG1CQUFtQixDQUFzQjtJQUUxRCxZQUFZLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixFQUFtQztRQUM5RSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUM7SUFDakQsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBb0IsRUFBRSxNQUEwQjtRQUNyRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDN0IsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLHVCQUF1QixDQUFDO1FBRXRFLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO1FBQy9DLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQzthQUMvQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFcEUsTUFBTSxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsRUFBRTtZQUN6RCxZQUFZO1lBQ1osZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyx3QkFBd0I7U0FDOUQsQ0FBQyxDQUFDO1FBRUgsS0FBSyxNQUFNLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDckUsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDdkQsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxHQUFHLGtCQUFrQixFQUFFLENBQUM7b0JBQ2hELE1BQU0sQ0FBQyxJQUFJLENBQUMsMkNBQTJDLEVBQUU7d0JBQ3ZELE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUzt3QkFDL0IsU0FBUyxFQUFFLFlBQVksQ0FBQyxJQUFJO3FCQUM3QixDQUFDLENBQUM7b0JBQ0gsT0FBTztnQkFDVCxDQUFDO2dCQUVELE1BQU0sU0FBUyxHQUFHO29CQUNoQixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUk7b0JBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUU7b0JBQzlCLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7b0JBQ25DLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQy9CLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7aUJBQ3BDLENBQUM7Z0JBRUYsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDckMsTUFBTSxHQUFHLEdBQUcsR0FBRyxXQUFXLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3JDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUVoQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUN0QixPQUFPLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztnQkFDeEIsQ0FBQztnQkFDRCxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN0RSxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3pGLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM3QyxNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUM3QixNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztRQUVqQyxNQUFNLFVBQVUsR0FBRztZQUNqQixHQUFHLE1BQU07WUFDVCxXQUFXLEVBQUU7Z0JBQ1gsR0FBRyxNQUFNLENBQUMsV0FBVztnQkFDckIsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FDaEMsTUFBTSxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsRUFDM0MsaUJBQWlCLENBQ2xCO2dCQUNELHdCQUF3QixFQUFFLElBQUksQ0FBQyxHQUFHLENBQ2hDLE1BQU0sQ0FBQyxXQUFXLENBQUMsd0JBQXdCLEVBQzNDLG9CQUFvQixDQUNyQjthQUNGO1NBQ29CLENBQUM7UUFFeEIsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNuRSxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN4RSxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxDQUFDLDZCQUE2QixDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2xGLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUNBQW1DLEVBQUU7WUFDL0MsUUFBUSxFQUFFLFlBQVksQ0FBQyxJQUFJO1lBQzNCLFFBQVEsRUFBRSxHQUFHLFFBQVEsSUFBSTtZQUN6QixRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDekYsUUFBUSxFQUFFLFFBQVEsR0FBRyxrQkFBa0I7U0FDeEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLEtBQUssQ0FBQyxtQkFBbUIsQ0FDL0IsS0FBb0IsRUFDcEIsWUFBaUMsRUFDakMsSUFBYyxFQUNkLE1BQTBCO1FBRTFCLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztRQUNwQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDO1FBQ3pELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUM7UUFDekQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzdCLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQztRQUV0RSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3JDLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsR0FBRyxrQkFBa0IsRUFBRSxDQUFDO2dCQUNoRCxNQUFNLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxFQUFFO29CQUM3QyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVM7b0JBQy9CLFNBQVMsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO29CQUNoQyxXQUFXO2lCQUNaLENBQUMsQ0FBQztnQkFDSCxPQUFPO1lBQ1QsQ0FBQztZQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQixNQUFNLE9BQU8sR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBRSxDQUFDO1lBRXRDLE1BQU0sS0FBSyxHQUEwRCxFQUFFLENBQUM7WUFDeEUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3JFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckIsTUFBTSxPQUFPLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2pFLENBQUM7WUFFRCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7Z0JBQzNELE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFFLENBQUM7Z0JBQ3RDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFFN0QsSUFBSSxPQUFPLENBQUMsYUFBYSxHQUFHLFNBQVMsRUFBRSxDQUFDO29CQUN0QyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDOUQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNoRCxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUTt3QkFBRSxPQUFPO29CQUNuQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNuRixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVKLFdBQVcsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBRTVCLElBQUksV0FBVyxHQUFHLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ3RELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyw2QkFBNkIsQ0FDekMsS0FBb0IsRUFDcEIsWUFBaUMsRUFDakMsSUFBYyxFQUNkLE1BQTBCO1FBRTFCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUM7UUFDekQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQztRQUVuRSxNQUFNLENBQUMsSUFBSSxDQUFDLHdDQUF3QyxFQUFFO1lBQ3BELFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNyQixjQUFjO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sQ0FBQyxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztZQUMzRCxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyRSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDcEIsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUM7UUFDL0IsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDO1FBRTNFLEtBQUssTUFBTSxDQUFDLEVBQUUsV0FBVyxDQUFDLElBQUksZUFBZSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDeEQsSUFBSSxXQUFXLElBQUksa0JBQWtCO2dCQUFFLE1BQU07WUFFN0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ2hELElBQUksV0FBVyxJQUFJLGtCQUFrQjtvQkFBRSxNQUFNO2dCQUU3QyxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVCLE1BQU0sT0FBTyxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMzQyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBRSxDQUFDO2dCQUV0QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDaEQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FDbkMsQ0FBQztnQkFFRixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUN0QyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDdkUsVUFBVSxDQUNYLENBQUM7Z0JBRUYsS0FBSyxNQUFNLENBQUMsSUFBSSxjQUFjLEVBQUUsQ0FBQztvQkFDL0IsSUFBSSxXQUFXLElBQUksa0JBQWtCO3dCQUFFLE1BQU07b0JBRTdDLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDNUIsTUFBTSxPQUFPLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzNDLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFFLENBQUM7b0JBQ3RDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDN0QsV0FBVyxFQUFFLENBQUM7b0JBRWQsSUFBSSxPQUFPLENBQUMsYUFBYSxHQUFHLFNBQVMsRUFBRSxDQUFDO3dCQUN0QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQ2pHLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLFdBQVcsR0FBRyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN0RCxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sb0JBQW9CLEdBQUcsY0FBYyxHQUFHLFdBQVcsQ0FBQztRQUMxRCxJQUFJLFdBQVcsSUFBSSxjQUFjLElBQUksb0JBQW9CLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDL0QsTUFBTSxDQUFDLEtBQUssQ0FBQywyREFBMkQsRUFBRTtnQkFDeEUsV0FBVztnQkFDWCxjQUFjO2FBQ2YsQ0FBQyxDQUFDO1lBQ0gsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBb0IsQ0FBQztRQUNuRCxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUU3QyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsTUFBTTtnQkFBRSxTQUFTO1lBQ3RCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNyQyxjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3BDLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNqQyxDQUFDO1lBQ0QsY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNDLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBRUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNsQyxNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUVsRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDakQsTUFBTSxVQUFVLEdBQUcsS0FBSyxHQUFHLGFBQWEsQ0FBQztZQUN6QyxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUN4RixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO1lBQzlELGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDcEUsQ0FBQztRQUVGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFFL0QsS0FBSyxNQUFNLElBQUksSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNoQyxJQUFJLFdBQVcsSUFBSSxjQUFjO2dCQUFFLE1BQU07WUFFekMsTUFBTSxPQUFPLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0MsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUUsQ0FBQztZQUV0QyxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksZUFBZSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7Z0JBQzNELElBQUksV0FBVyxJQUFJLGNBQWM7b0JBQUUsTUFBTTtnQkFFekMsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUM7b0JBQUUsU0FBUztnQkFFckQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBRS9ELEtBQUssTUFBTSxJQUFJLElBQUksWUFBWSxFQUFFLENBQUM7b0JBQ2hDLElBQUksV0FBVyxJQUFJLGNBQWM7d0JBQUUsTUFBTTtvQkFDekMsSUFBSSxJQUFJLEtBQUssSUFBSTt3QkFBRSxTQUFTO29CQUU1QixNQUFNLE9BQU8sR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDM0MsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUUsQ0FBQztvQkFDdEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUM3RCxXQUFXLEVBQUUsQ0FBQztvQkFFZCxJQUFJLE9BQU8sQ0FBQyxhQUFhLEdBQUcsU0FBUyxFQUFFLENBQUM7d0JBQ3RDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDakcsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLG9CQUFvQixDQUNoQyxLQUFvQixFQUNwQixJQUFjO1FBRWQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUVuRCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxPQUFPO2dCQUFFLFNBQVM7WUFFdkIsTUFBTSxRQUFRLEdBQUc7Z0JBQ2YsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQztnQkFDbkMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDL0IsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQzthQUNwQyxDQUFDO1lBRUYsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDL0IsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN6QyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2hGLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQW9CLENBQUM7UUFDN0MsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixNQUFNLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUMsT0FBTztnQkFBRSxTQUFTO1lBRXZCLE1BQU0sUUFBUSxHQUFHO2dCQUNmLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7Z0JBQ25DLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQy9CLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7YUFDcEMsQ0FBQztZQUVGLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQy9CLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDekMsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDeEQsSUFBSSxTQUFTLEdBQUcsQ0FBQztvQkFBRSxTQUFTO2dCQUU1QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUM5QixRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDL0IsQ0FBQztnQkFDRCxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0QyxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLEVBQW9CLENBQUM7UUFDeEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBRW5ELEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUN4RCxJQUFJLFdBQVcsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQ2xFLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDaEQsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLG1CQUFtQixDQUFDO0lBQzdCLENBQUM7SUFFTyxpQkFBaUIsQ0FDdkIsS0FBb0IsRUFDcEIsS0FBYSxFQUNiLEtBQWEsRUFDYixLQUFhLEVBQ2IsS0FBYSxFQUNiLE9BQVk7UUFFWixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNoRCxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDbEQsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN4RCxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQzFELENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU87YUFDakUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxhQUFhLENBQUMsQ0FBQztRQUUxQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUN4RSxLQUFLLEVBQ0wsS0FBSyxFQUNMLGlCQUFpQixDQUFDLG1CQUFtQixFQUNyQyxPQUFPLENBQUMsYUFBYSxFQUNyQjtnQkFDRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87Z0JBQ3hCLFlBQVksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUNwQixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sSUFBSSxDQUFDLENBQUM7b0JBQ3JELENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUN0RDthQUNGLENBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ2hELEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUNsRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3hELEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDMUQsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTzthQUNqRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLGFBQWEsQ0FBQyxDQUFDO1FBRTFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQ3hFLEtBQUssRUFDTCxLQUFLLEVBQ0wsaUJBQWlCLENBQUMsbUJBQW1CLEVBQ3JDLE9BQU8sQ0FBQyxhQUFhLEVBQ3JCO2dCQUNFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztnQkFDeEIsWUFBWSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQ3BCLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQztvQkFDckQsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQ3REO2FBQ0YsQ0FDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVPLFlBQVksQ0FBSSxLQUFVLEVBQUUsSUFBWTtRQUM5QyxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUM1RCxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBjcmVhdGVSZWxhdGlvbnNoaXAsIFJlbGF0aW9uc2hpcFR5cGVzIH0gZnJvbSAnLi4vdHlwZXMvUmVsYXRpb25zaGlwVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBJbmRleENvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9jb25maWcvSW5kZXhDb25maWcuanMnO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlZEluZGV4IH0gZnJvbSAnLi4vdHlwZXMvSW5kZXhUeXBlcy5qcyc7XG5pbXBvcnQgeyBwYXJzZUVsZW1lbnRJZCwgcGFyc2VFbGVtZW50SWRTdHJpY3QsIGZvcm1hdEVsZW1lbnRJZCB9IGZyb20gJy4uLy4uL3V0aWxzL2VsZW1lbnRJZC5qcyc7XG5pbXBvcnQgdHlwZSB7IE5MUFNjb3JpbmdNYW5hZ2VyIH0gZnJvbSAnLi4vTkxQU2NvcmluZ01hbmFnZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWxhdGlvbnNoaXBNYW5hZ2VyIH0gZnJvbSAnLi4vUmVsYXRpb25zaGlwTWFuYWdlci5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNSZWxhdGlvbnNoaXBTZXJ2aWNlRGVwcyB7XG4gIG5scFNjb3Jpbmc6IE5MUFNjb3JpbmdNYW5hZ2VyO1xuICByZWxhdGlvbnNoaXBNYW5hZ2VyOiBSZWxhdGlvbnNoaXBNYW5hZ2VyO1xufVxuXG5leHBvcnQgY2xhc3MgU2VtYW50aWNSZWxhdGlvbnNoaXBTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBubHBTY29yaW5nOiBOTFBTY29yaW5nTWFuYWdlcjtcbiAgcHJpdmF0ZSByZWFkb25seSByZWxhdGlvbnNoaXBNYW5hZ2VyOiBSZWxhdGlvbnNoaXBNYW5hZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKHsgbmxwU2NvcmluZywgcmVsYXRpb25zaGlwTWFuYWdlciB9OiBTZW1hbnRpY1JlbGF0aW9uc2hpcFNlcnZpY2VEZXBzKSB7XG4gICAgdGhpcy5ubHBTY29yaW5nID0gbmxwU2NvcmluZztcbiAgICB0aGlzLnJlbGF0aW9uc2hpcE1hbmFnZXIgPSByZWxhdGlvbnNoaXBNYW5hZ2VyO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNhbGN1bGF0ZShpbmRleDogRW5oYW5jZWRJbmRleCwgY29uZmlnOiBJbmRleENvbmZpZ3VyYXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IE1BWF9FWEVDVVRJT05fVElNRSA9IGNvbmZpZy5wZXJmb3JtYW5jZS5jaXJjdWl0QnJlYWtlclRpbWVvdXRNcztcblxuICAgIGNvbnN0IGVsZW1lbnRUZXh0cyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgY29uc3QgZWxlbWVudENvdW50ID0gT2JqZWN0LnZhbHVlcyhpbmRleC5lbGVtZW50cylcbiAgICAgIC5yZWR1Y2UoKHN1bSwgZWxlbWVudHMpID0+IHN1bSArIE9iamVjdC5rZXlzKGVsZW1lbnRzKS5sZW5ndGgsIDApO1xuXG4gICAgbG9nZ2VyLmRlYnVnKCdTdGFydGluZyBzZW1hbnRpYyByZWxhdGlvbnNoaXAgY2FsY3VsYXRpb24nLCB7XG4gICAgICBlbGVtZW50Q291bnQsXG4gICAgICBtYXhGb3JGdWxsTWF0cml4OiBjb25maWcucGVyZm9ybWFuY2UubWF4RWxlbWVudHNGb3JGdWxsTWF0cml4XG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IFtlbGVtZW50VHlwZSwgZWxlbWVudHNdIG9mIE9iamVjdC5lbnRyaWVzKGluZGV4LmVsZW1lbnRzKSkge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgZWxlbWVudF0gb2YgT2JqZWN0LmVudHJpZXMoZWxlbWVudHMpKSB7XG4gICAgICAgIGlmIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lID4gTUFYX0VYRUNVVElPTl9USU1FKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oJ1NlbWFudGljIHJlbGF0aW9uc2hpcCBjYWxjdWxhdGlvbiB0aW1lb3V0Jywge1xuICAgICAgICAgICAgZWxhcHNlZDogRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSxcbiAgICAgICAgICAgIHByb2Nlc3NlZDogZWxlbWVudFRleHRzLnNpemVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ZXh0UGFydHMgPSBbXG4gICAgICAgICAgZWxlbWVudC5jb3JlLm5hbWUsXG4gICAgICAgICAgZWxlbWVudC5jb3JlLmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgICAgIC4uLihlbGVtZW50LnNlYXJjaD8ua2V5d29yZHMgfHwgW10pLFxuICAgICAgICAgIC4uLihlbGVtZW50LnNlYXJjaD8udGFncyB8fCBbXSksXG4gICAgICAgICAgLi4uKGVsZW1lbnQuc2VhcmNoPy50cmlnZ2VycyB8fCBbXSlcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBmdWxsVGV4dCA9IHRleHRQYXJ0cy5qb2luKCcgJyk7XG4gICAgICAgIGNvbnN0IGtleSA9IGAke2VsZW1lbnRUeXBlfToke25hbWV9YDtcbiAgICAgICAgZWxlbWVudFRleHRzLnNldChrZXksIGZ1bGxUZXh0KTtcblxuICAgICAgICBpZiAoIWVsZW1lbnQuc2VtYW50aWMpIHtcbiAgICAgICAgICBlbGVtZW50LnNlbWFudGljID0ge307XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudC5zZW1hbnRpYy5lbnRyb3B5ID0gdGhpcy5ubHBTY29yaW5nLmNhbGN1bGF0ZUVudHJvcHkoZnVsbFRleHQpO1xuICAgICAgICBlbGVtZW50LnNlbWFudGljLnVuaXF1ZV90ZXJtcyA9IGZ1bGxUZXh0LnNwbGl0KC9cXHMrLykuZmlsdGVyKHQgPT4gdC5sZW5ndGggPiAxKS5sZW5ndGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qga2V5cyA9IEFycmF5LmZyb20oZWxlbWVudFRleHRzLmtleXMoKSk7XG4gICAgY29uc3QgTUFYX1NBRkVfRUxFTUVOVFMgPSA1MDtcbiAgICBjb25zdCBNQVhfU0FGRV9DT01QQVJJU09OUyA9IDUwMDtcblxuICAgIGNvbnN0IHNhZmVDb25maWcgPSB7XG4gICAgICAuLi5jb25maWcsXG4gICAgICBwZXJmb3JtYW5jZToge1xuICAgICAgICAuLi5jb25maWcucGVyZm9ybWFuY2UsXG4gICAgICAgIG1heEVsZW1lbnRzRm9yRnVsbE1hdHJpeDogTWF0aC5taW4oXG4gICAgICAgICAgY29uZmlnLnBlcmZvcm1hbmNlLm1heEVsZW1lbnRzRm9yRnVsbE1hdHJpeCxcbiAgICAgICAgICBNQVhfU0FGRV9FTEVNRU5UU1xuICAgICAgICApLFxuICAgICAgICBtYXhTaW1pbGFyaXR5Q29tcGFyaXNvbnM6IE1hdGgubWluKFxuICAgICAgICAgIGNvbmZpZy5wZXJmb3JtYW5jZS5tYXhTaW1pbGFyaXR5Q29tcGFyaXNvbnMsXG4gICAgICAgICAgTUFYX1NBRkVfQ09NUEFSSVNPTlNcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gYXMgSW5kZXhDb25maWd1cmF0aW9uO1xuXG4gICAgaWYgKGtleXMubGVuZ3RoIDw9IHNhZmVDb25maWcucGVyZm9ybWFuY2UubWF4RWxlbWVudHNGb3JGdWxsTWF0cml4KSB7XG4gICAgICBhd2FpdCB0aGlzLmNhbGN1bGF0ZUZ1bGxNYXRyaXgoaW5kZXgsIGVsZW1lbnRUZXh0cywga2V5cywgc2FmZUNvbmZpZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuY2FsY3VsYXRlU2FtcGxlZFJlbGF0aW9uc2hpcHMoaW5kZXgsIGVsZW1lbnRUZXh0cywga2V5cywgc2FmZUNvbmZpZyk7XG4gICAgfVxuXG4gICAgY29uc3QgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgIGxvZ2dlci5pbmZvKCdTZW1hbnRpYyByZWxhdGlvbnNoaXBzIGNhbGN1bGF0ZWQnLCB7XG4gICAgICBlbGVtZW50czogZWxlbWVudFRleHRzLnNpemUsXG4gICAgICBkdXJhdGlvbjogYCR7ZHVyYXRpb259bXNgLFxuICAgICAgc3RyYXRlZ3k6IGtleXMubGVuZ3RoIDw9IGNvbmZpZy5wZXJmb3JtYW5jZS5tYXhFbGVtZW50c0ZvckZ1bGxNYXRyaXggPyAnZnVsbCcgOiAnc2FtcGxlZCcsXG4gICAgICB0aW1lZE91dDogZHVyYXRpb24gPiBNQVhfRVhFQ1VUSU9OX1RJTUVcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2FsY3VsYXRlRnVsbE1hdHJpeChcbiAgICBpbmRleDogRW5oYW5jZWRJbmRleCxcbiAgICBlbGVtZW50VGV4dHM6IE1hcDxzdHJpbmcsIHN0cmluZz4sXG4gICAga2V5czogc3RyaW5nW10sXG4gICAgY29uZmlnOiBJbmRleENvbmZpZ3VyYXRpb25cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IGNvbXBhcmlzb25zID0gMDtcbiAgICBjb25zdCBiYXRjaFNpemUgPSBjb25maWcucGVyZm9ybWFuY2Uuc2ltaWxhcml0eUJhdGNoU2l6ZTtcbiAgICBjb25zdCB0aHJlc2hvbGQgPSBjb25maWcucGVyZm9ybWFuY2Uuc2ltaWxhcml0eVRocmVzaG9sZDtcbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IE1BWF9FWEVDVVRJT05fVElNRSA9IGNvbmZpZy5wZXJmb3JtYW5jZS5jaXJjdWl0QnJlYWtlclRpbWVvdXRNcztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPiBNQVhfRVhFQ1VUSU9OX1RJTUUpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0Z1bGwgbWF0cml4IGNhbGN1bGF0aW9uIHRpbWVvdXQnLCB7XG4gICAgICAgICAgZWxhcHNlZDogRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSxcbiAgICAgICAgICBwcm9jZXNzZWQ6IGAke2l9LyR7a2V5cy5sZW5ndGh9YCxcbiAgICAgICAgICBjb21wYXJpc29uc1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkxID0ga2V5c1tpXTtcbiAgICAgIGNvbnN0IHBhcnNlZDEgPSBwYXJzZUVsZW1lbnRJZFN0cmljdChrZXkxKTtcbiAgICAgIGNvbnN0IHRleHQxID0gZWxlbWVudFRleHRzLmdldChrZXkxKSE7XG5cbiAgICAgIGNvbnN0IGJhdGNoOiBBcnJheTx7IGtleTI6IHN0cmluZzsgdHlwZTI6IHN0cmluZzsgbmFtZTI6IHN0cmluZyB9PiA9IFtdO1xuICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwga2V5cy5sZW5ndGggJiYgYmF0Y2gubGVuZ3RoIDwgYmF0Y2hTaXplOyBqKyspIHtcbiAgICAgICAgY29uc3Qga2V5MiA9IGtleXNbal07XG4gICAgICAgIGNvbnN0IHBhcnNlZDIgPSBwYXJzZUVsZW1lbnRJZFN0cmljdChrZXkyKTtcbiAgICAgICAgYmF0Y2gucHVzaCh7IGtleTIsIHR5cGUyOiBwYXJzZWQyLnR5cGUsIG5hbWUyOiBwYXJzZWQyLm5hbWUgfSk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGJhdGNoLm1hcChhc3luYyAoeyBrZXkyLCB0eXBlMiwgbmFtZTIgfSkgPT4ge1xuICAgICAgICBjb25zdCB0ZXh0MiA9IGVsZW1lbnRUZXh0cy5nZXQoa2V5MikhO1xuICAgICAgICBjb25zdCBzY29yaW5nID0gdGhpcy5ubHBTY29yaW5nLnNjb3JlUmVsZXZhbmNlKHRleHQxLCB0ZXh0Mik7XG5cbiAgICAgICAgaWYgKHNjb3JpbmcuY29tYmluZWRTY29yZSA+IHRocmVzaG9sZCkge1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQxID0gaW5kZXguZWxlbWVudHNbcGFyc2VkMS50eXBlXT8uW3BhcnNlZDEubmFtZV07XG4gICAgICAgICAgY29uc3QgZWxlbWVudDIgPSBpbmRleC5lbGVtZW50c1t0eXBlMl0/LltuYW1lMl07XG4gICAgICAgICAgaWYgKCFlbGVtZW50MSB8fCAhZWxlbWVudDIpIHJldHVybjtcbiAgICAgICAgICB0aGlzLnN0b3JlUmVsYXRpb25zaGlwKGluZGV4LCBwYXJzZWQxLnR5cGUsIHBhcnNlZDEubmFtZSwgdHlwZTIsIG5hbWUyLCBzY29yaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuXG4gICAgICBjb21wYXJpc29ucyArPSBiYXRjaC5sZW5ndGg7XG5cbiAgICAgIGlmIChjb21wYXJpc29ucyAlIDEwMCA9PT0gMCkge1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldEltbWVkaWF0ZShyZXNvbHZlKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjYWxjdWxhdGVTYW1wbGVkUmVsYXRpb25zaGlwcyhcbiAgICBpbmRleDogRW5oYW5jZWRJbmRleCxcbiAgICBlbGVtZW50VGV4dHM6IE1hcDxzdHJpbmcsIHN0cmluZz4sXG4gICAga2V5czogc3RyaW5nW10sXG4gICAgY29uZmlnOiBJbmRleENvbmZpZ3VyYXRpb25cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGhyZXNob2xkID0gY29uZmlnLnBlcmZvcm1hbmNlLnNpbWlsYXJpdHlUaHJlc2hvbGQ7XG4gICAgY29uc3QgbWF4Q29tcGFyaXNvbnMgPSBjb25maWcucGVyZm9ybWFuY2UubWF4U2ltaWxhcml0eUNvbXBhcmlzb25zO1xuXG4gICAgbG9nZ2VyLmluZm8oJ1VzaW5nIHNhbXBsZWQgcmVsYXRpb25zaGlwIGNhbGN1bGF0aW9uJywge1xuICAgICAgZWxlbWVudHM6IGtleXMubGVuZ3RoLFxuICAgICAgbWF4Q29tcGFyaXNvbnNcbiAgICB9KTtcblxuICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdObyBlbGVtZW50cyB0byBjYWxjdWxhdGUgcmVsYXRpb25zaGlwcyBmb3InKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBrZXl3b3JkQ2x1c3RlcnMgPSBhd2FpdCB0aGlzLmJ1aWxkS2V5d29yZENsdXN0ZXJzKGluZGV4LCBrZXlzKTtcbiAgICBsZXQgY29tcGFyaXNvbnMgPSAwO1xuICAgIGNvbnN0IGNsdXN0ZXJCdWRnZXRSYXRpbyA9IDAuNjtcbiAgICBjb25zdCBjbHVzdGVyQ29tcGFyaXNvbnMgPSBNYXRoLmZsb29yKG1heENvbXBhcmlzb25zICogY2x1c3RlckJ1ZGdldFJhdGlvKTtcblxuICAgIGZvciAoY29uc3QgWywgY2x1c3RlcktleXNdIG9mIGtleXdvcmRDbHVzdGVycy5lbnRyaWVzKCkpIHtcbiAgICAgIGlmIChjb21wYXJpc29ucyA+PSBjbHVzdGVyQ29tcGFyaXNvbnMpIGJyZWFrO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsdXN0ZXJLZXlzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBpZiAoY29tcGFyaXNvbnMgPj0gY2x1c3RlckNvbXBhcmlzb25zKSBicmVhaztcblxuICAgICAgICBjb25zdCBrZXkxID0gY2x1c3RlcktleXNbaV07XG4gICAgICAgIGNvbnN0IHBhcnNlZDEgPSBwYXJzZUVsZW1lbnRJZFN0cmljdChrZXkxKTtcbiAgICAgICAgY29uc3QgdGV4dDEgPSBlbGVtZW50VGV4dHMuZ2V0KGtleTEpITtcblxuICAgICAgICBjb25zdCBzYW1wbGVTaXplID0gTWF0aC5taW4oXG4gICAgICAgICAgTWF0aC5jZWlsKE1hdGguc3FydChjbHVzdGVyS2V5cy5sZW5ndGggLSBpIC0gMSkpLFxuICAgICAgICAgIGNvbmZpZy5zYW1wbGluZy5jbHVzdGVyU2FtcGxlTGltaXRcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBzYW1wbGVkSW5kaWNlcyA9IHRoaXMucmFuZG9tU2FtcGxlKFxuICAgICAgICAgIEFycmF5LmZyb20oeyBsZW5ndGg6IGNsdXN0ZXJLZXlzLmxlbmd0aCAtIGkgLSAxIH0sIChfLCBqKSA9PiBpICsgaiArIDEpLFxuICAgICAgICAgIHNhbXBsZVNpemVcbiAgICAgICAgKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGogb2Ygc2FtcGxlZEluZGljZXMpIHtcbiAgICAgICAgICBpZiAoY29tcGFyaXNvbnMgPj0gY2x1c3RlckNvbXBhcmlzb25zKSBicmVhaztcblxuICAgICAgICAgIGNvbnN0IGtleTIgPSBjbHVzdGVyS2V5c1tqXTtcbiAgICAgICAgICBjb25zdCBwYXJzZWQyID0gcGFyc2VFbGVtZW50SWRTdHJpY3Qoa2V5Mik7XG4gICAgICAgICAgY29uc3QgdGV4dDIgPSBlbGVtZW50VGV4dHMuZ2V0KGtleTIpITtcbiAgICAgICAgICBjb25zdCBzY29yaW5nID0gdGhpcy5ubHBTY29yaW5nLnNjb3JlUmVsZXZhbmNlKHRleHQxLCB0ZXh0Mik7XG4gICAgICAgICAgY29tcGFyaXNvbnMrKztcblxuICAgICAgICAgIGlmIChzY29yaW5nLmNvbWJpbmVkU2NvcmUgPiB0aHJlc2hvbGQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmVSZWxhdGlvbnNoaXAoaW5kZXgsIHBhcnNlZDEudHlwZSwgcGFyc2VkMS5uYW1lLCBwYXJzZWQyLnR5cGUsIHBhcnNlZDIubmFtZSwgc2NvcmluZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21wYXJpc29ucyAlIDEwMCA9PT0gMCkge1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldEltbWVkaWF0ZShyZXNvbHZlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY3Jvc3NUeXBlQ29tcGFyaXNvbnMgPSBtYXhDb21wYXJpc29ucyAtIGNvbXBhcmlzb25zO1xuICAgIGlmIChjb21wYXJpc29ucyA+PSBtYXhDb21wYXJpc29ucyB8fCBjcm9zc1R5cGVDb21wYXJpc29ucyA8PSAwKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ1NraXBwaW5nIGNyb3NzLXR5cGUgc2FtcGxpbmcsIGNvbXBhcmlzb24gYnVkZ2V0IGV4aGF1c3RlZCcsIHtcbiAgICAgICAgY29tcGFyaXNvbnMsXG4gICAgICAgIG1heENvbXBhcmlzb25zXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50c0J5VHlwZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgICBjb25zdCB0eXBlQ291bnRzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRWxlbWVudElkKGtleSk7XG4gICAgICBpZiAoIXBhcnNlZCkgY29udGludWU7XG4gICAgICBpZiAoIWVsZW1lbnRzQnlUeXBlLmhhcyhwYXJzZWQudHlwZSkpIHtcbiAgICAgICAgZWxlbWVudHNCeVR5cGUuc2V0KHBhcnNlZC50eXBlLCBbXSk7XG4gICAgICAgIHR5cGVDb3VudHMuc2V0KHBhcnNlZC50eXBlLCAwKTtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnRzQnlUeXBlLmdldChwYXJzZWQudHlwZSkhLnB1c2goa2V5KTtcbiAgICAgIHR5cGVDb3VudHMuc2V0KHBhcnNlZC50eXBlLCB0eXBlQ291bnRzLmdldChwYXJzZWQudHlwZSkhICsgMSk7XG4gICAgfVxuXG4gICAgY29uc3QgdG90YWxFbGVtZW50cyA9IGtleXMubGVuZ3RoO1xuICAgIGNvbnN0IHR5cGVTYW1wbGVTaXplcyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG5cbiAgICBmb3IgKGNvbnN0IFt0eXBlLCBjb3VudF0gb2YgdHlwZUNvdW50cy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IHByb3BvcnRpb24gPSBjb3VudCAvIHRvdGFsRWxlbWVudHM7XG4gICAgICBjb25zdCBhbGxvY2F0ZWRDb21wYXJpc29ucyA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IoY3Jvc3NUeXBlQ29tcGFyaXNvbnMgKiBwcm9wb3J0aW9uKSk7XG4gICAgICBjb25zdCBzYW1wbGVTaXplID0gTWF0aC5jZWlsKE1hdGguc3FydChhbGxvY2F0ZWRDb21wYXJpc29ucykpO1xuICAgICAgdHlwZVNhbXBsZVNpemVzLnNldCh0eXBlLCBzYW1wbGVTaXplKTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXhLZXlzVG9Qcm9jZXNzID0gTWF0aC5taW4oXG4gICAgICBNYXRoLmNlaWwoTWF0aC5zcXJ0KGtleXMubGVuZ3RoKSksXG4gICAgICBNYXRoLmNlaWwoY3Jvc3NUeXBlQ29tcGFyaXNvbnMgLyBNYXRoLm1heCgxLCB0eXBlU2FtcGxlU2l6ZXMuc2l6ZSkpXG4gICAgKTtcblxuICAgIGNvbnN0IHNhbXBsZWRLZXlzMSA9IHRoaXMucmFuZG9tU2FtcGxlKGtleXMsIG1heEtleXNUb1Byb2Nlc3MpO1xuXG4gICAgZm9yIChjb25zdCBrZXkxIG9mIHNhbXBsZWRLZXlzMSkge1xuICAgICAgaWYgKGNvbXBhcmlzb25zID49IG1heENvbXBhcmlzb25zKSBicmVhaztcblxuICAgICAgY29uc3QgcGFyc2VkMSA9IHBhcnNlRWxlbWVudElkU3RyaWN0KGtleTEpO1xuICAgICAgY29uc3QgdGV4dDEgPSBlbGVtZW50VGV4dHMuZ2V0KGtleTEpITtcblxuICAgICAgZm9yIChjb25zdCBbdHlwZSwgc2FtcGxlU2l6ZV0gb2YgdHlwZVNhbXBsZVNpemVzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoY29tcGFyaXNvbnMgPj0gbWF4Q29tcGFyaXNvbnMpIGJyZWFrO1xuXG4gICAgICAgIGNvbnN0IGtleXNPZlR5cGUgPSBlbGVtZW50c0J5VHlwZS5nZXQodHlwZSk7XG4gICAgICAgIGlmICgha2V5c09mVHlwZSB8fCBrZXlzT2ZUeXBlLmxlbmd0aCA9PT0gMCkgY29udGludWU7XG5cbiAgICAgICAgY29uc3Qgc2FtcGxlZEtleXMyID0gdGhpcy5yYW5kb21TYW1wbGUoa2V5c09mVHlwZSwgc2FtcGxlU2l6ZSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkyIG9mIHNhbXBsZWRLZXlzMikge1xuICAgICAgICAgIGlmIChjb21wYXJpc29ucyA+PSBtYXhDb21wYXJpc29ucykgYnJlYWs7XG4gICAgICAgICAgaWYgKGtleTEgPT09IGtleTIpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgY29uc3QgcGFyc2VkMiA9IHBhcnNlRWxlbWVudElkU3RyaWN0KGtleTIpO1xuICAgICAgICAgIGNvbnN0IHRleHQyID0gZWxlbWVudFRleHRzLmdldChrZXkyKSE7XG4gICAgICAgICAgY29uc3Qgc2NvcmluZyA9IHRoaXMubmxwU2NvcmluZy5zY29yZVJlbGV2YW5jZSh0ZXh0MSwgdGV4dDIpO1xuICAgICAgICAgIGNvbXBhcmlzb25zKys7XG5cbiAgICAgICAgICBpZiAoc2NvcmluZy5jb21iaW5lZFNjb3JlID4gdGhyZXNob2xkKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlUmVsYXRpb25zaGlwKGluZGV4LCBwYXJzZWQxLnR5cGUsIHBhcnNlZDEubmFtZSwgcGFyc2VkMi50eXBlLCBwYXJzZWQyLm5hbWUsIHNjb3JpbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnVpbGRLZXl3b3JkQ2x1c3RlcnMoXG4gICAgaW5kZXg6IEVuaGFuY2VkSW5kZXgsXG4gICAga2V5czogc3RyaW5nW11cbiAgKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBzdHJpbmdbXT4+IHtcbiAgICBjb25zdCBrZXl3b3JkRnJlcXVlbmN5ID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRWxlbWVudElkU3RyaWN0KGtleSk7XG4gICAgICBjb25zdCBlbGVtZW50ID0gaW5kZXguZWxlbWVudHNbcGFyc2VkLnR5cGVdPy5bcGFyc2VkLm5hbWVdO1xuICAgICAgaWYgKCFlbGVtZW50KSBjb250aW51ZTtcblxuICAgICAgY29uc3Qga2V5d29yZHMgPSBbXG4gICAgICAgIC4uLihlbGVtZW50LnNlYXJjaD8ua2V5d29yZHMgfHwgW10pLFxuICAgICAgICAuLi4oZWxlbWVudC5zZWFyY2g/LnRhZ3MgfHwgW10pLFxuICAgICAgICAuLi4oZWxlbWVudC5zZWFyY2g/LnRyaWdnZXJzIHx8IFtdKVxuICAgICAgXTtcblxuICAgICAgZm9yIChjb25zdCBrZXl3b3JkIG9mIGtleXdvcmRzKSB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBrZXl3b3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGtleXdvcmRGcmVxdWVuY3kuc2V0KG5vcm1hbGl6ZWQsIChrZXl3b3JkRnJlcXVlbmN5LmdldChub3JtYWxpemVkKSB8fCAwKSArIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsdXN0ZXJzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZ1tdPigpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRWxlbWVudElkU3RyaWN0KGtleSk7XG4gICAgICBjb25zdCBlbGVtZW50ID0gaW5kZXguZWxlbWVudHNbcGFyc2VkLnR5cGVdPy5bcGFyc2VkLm5hbWVdO1xuICAgICAgaWYgKCFlbGVtZW50KSBjb250aW51ZTtcblxuICAgICAgY29uc3Qga2V5d29yZHMgPSBbXG4gICAgICAgIC4uLihlbGVtZW50LnNlYXJjaD8ua2V5d29yZHMgfHwgW10pLFxuICAgICAgICAuLi4oZWxlbWVudC5zZWFyY2g/LnRhZ3MgfHwgW10pLFxuICAgICAgICAuLi4oZWxlbWVudC5zZWFyY2g/LnRyaWdnZXJzIHx8IFtdKVxuICAgICAgXTtcblxuICAgICAgZm9yIChjb25zdCBrZXl3b3JkIG9mIGtleXdvcmRzKSB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBrZXl3b3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGZyZXF1ZW5jeSA9IGtleXdvcmRGcmVxdWVuY3kuZ2V0KG5vcm1hbGl6ZWQpIHx8IDA7XG4gICAgICAgIGlmIChmcmVxdWVuY3kgPCAyKSBjb250aW51ZTtcblxuICAgICAgICBpZiAoIWNsdXN0ZXJzLmhhcyhub3JtYWxpemVkKSkge1xuICAgICAgICAgIGNsdXN0ZXJzLnNldChub3JtYWxpemVkLCBbXSk7XG4gICAgICAgIH1cbiAgICAgICAgY2x1c3RlcnMuZ2V0KG5vcm1hbGl6ZWQpIS5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmlmaWNhbnRDbHVzdGVycyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgICBjb25zdCBtYXhGcmVxdWVuY3kgPSBNYXRoLmZsb29yKGtleXMubGVuZ3RoICogMC41KTtcblxuICAgIGZvciAoY29uc3QgW2tleXdvcmQsIGVsZW1lbnRLZXlzXSBvZiBjbHVzdGVycy5lbnRyaWVzKCkpIHtcbiAgICAgIGlmIChlbGVtZW50S2V5cy5sZW5ndGggPj0gMiAmJiBlbGVtZW50S2V5cy5sZW5ndGggPD0gbWF4RnJlcXVlbmN5KSB7XG4gICAgICAgIHNpZ25pZmljYW50Q2x1c3RlcnMuc2V0KGtleXdvcmQsIGVsZW1lbnRLZXlzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRDbHVzdGVycztcbiAgfVxuXG4gIHByaXZhdGUgc3RvcmVSZWxhdGlvbnNoaXAoXG4gICAgaW5kZXg6IEVuaGFuY2VkSW5kZXgsXG4gICAgdHlwZTE6IHN0cmluZyxcbiAgICBuYW1lMTogc3RyaW5nLFxuICAgIHR5cGUyOiBzdHJpbmcsXG4gICAgbmFtZTI6IHN0cmluZyxcbiAgICBzY29yaW5nOiBhbnlcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFpbmRleC5lbGVtZW50c1t0eXBlMV1bbmFtZTFdLnJlbGF0aW9uc2hpcHMpIHtcbiAgICAgIGluZGV4LmVsZW1lbnRzW3R5cGUxXVtuYW1lMV0ucmVsYXRpb25zaGlwcyA9IHt9O1xuICAgIH1cbiAgICBpZiAoIWluZGV4LmVsZW1lbnRzW3R5cGUxXVtuYW1lMV0ucmVsYXRpb25zaGlwcy5zaW1pbGFyKSB7XG4gICAgICBpbmRleC5lbGVtZW50c1t0eXBlMV1bbmFtZTFdLnJlbGF0aW9uc2hpcHMuc2ltaWxhciA9IFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBmb3JtYXRFbGVtZW50SWQodHlwZTIsIG5hbWUyKTtcbiAgICBjb25zdCBleGlzdGluZzEgPSBpbmRleC5lbGVtZW50c1t0eXBlMV1bbmFtZTFdLnJlbGF0aW9uc2hpcHMuc2ltaWxhclxuICAgICAgLmZpbmQociA9PiByLmVsZW1lbnQgPT09IHRhcmdldEVsZW1lbnQpO1xuXG4gICAgaWYgKCFleGlzdGluZzEpIHtcbiAgICAgIGluZGV4LmVsZW1lbnRzW3R5cGUxXVtuYW1lMV0ucmVsYXRpb25zaGlwcy5zaW1pbGFyLnB1c2goY3JlYXRlUmVsYXRpb25zaGlwKFxuICAgICAgICB0eXBlMixcbiAgICAgICAgbmFtZTIsXG4gICAgICAgIFJlbGF0aW9uc2hpcFR5cGVzLlNFTUFOVElDX1NJTUlMQVJJVFksXG4gICAgICAgIHNjb3JpbmcuY29tYmluZWRTY29yZSxcbiAgICAgICAge1xuICAgICAgICAgIGphY2NhcmQ6IHNjb3JpbmcuamFjY2FyZCxcbiAgICAgICAgICBlbnRyb3B5X2RpZmY6IE1hdGguYWJzKFxuICAgICAgICAgICAgKGluZGV4LmVsZW1lbnRzW3R5cGUxXVtuYW1lMV0uc2VtYW50aWM/LmVudHJvcHkgfHwgMCkgLVxuICAgICAgICAgICAgKGluZGV4LmVsZW1lbnRzW3R5cGUyXVtuYW1lMl0uc2VtYW50aWM/LmVudHJvcHkgfHwgMClcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICkpO1xuICAgIH1cblxuICAgIGlmICghaW5kZXguZWxlbWVudHNbdHlwZTJdW25hbWUyXS5yZWxhdGlvbnNoaXBzKSB7XG4gICAgICBpbmRleC5lbGVtZW50c1t0eXBlMl1bbmFtZTJdLnJlbGF0aW9uc2hpcHMgPSB7fTtcbiAgICB9XG4gICAgaWYgKCFpbmRleC5lbGVtZW50c1t0eXBlMl1bbmFtZTJdLnJlbGF0aW9uc2hpcHMuc2ltaWxhcikge1xuICAgICAgaW5kZXguZWxlbWVudHNbdHlwZTJdW25hbWUyXS5yZWxhdGlvbnNoaXBzLnNpbWlsYXIgPSBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2VFbGVtZW50ID0gZm9ybWF0RWxlbWVudElkKHR5cGUxLCBuYW1lMSk7XG4gICAgY29uc3QgZXhpc3RpbmcyID0gaW5kZXguZWxlbWVudHNbdHlwZTJdW25hbWUyXS5yZWxhdGlvbnNoaXBzLnNpbWlsYXJcbiAgICAgIC5maW5kKHIgPT4gci5lbGVtZW50ID09PSBzb3VyY2VFbGVtZW50KTtcblxuICAgIGlmICghZXhpc3RpbmcyKSB7XG4gICAgICBpbmRleC5lbGVtZW50c1t0eXBlMl1bbmFtZTJdLnJlbGF0aW9uc2hpcHMuc2ltaWxhci5wdXNoKGNyZWF0ZVJlbGF0aW9uc2hpcChcbiAgICAgICAgdHlwZTEsXG4gICAgICAgIG5hbWUxLFxuICAgICAgICBSZWxhdGlvbnNoaXBUeXBlcy5TRU1BTlRJQ19TSU1JTEFSSVRZLFxuICAgICAgICBzY29yaW5nLmNvbWJpbmVkU2NvcmUsXG4gICAgICAgIHtcbiAgICAgICAgICBqYWNjYXJkOiBzY29yaW5nLmphY2NhcmQsXG4gICAgICAgICAgZW50cm9weV9kaWZmOiBNYXRoLmFicyhcbiAgICAgICAgICAgIChpbmRleC5lbGVtZW50c1t0eXBlMV1bbmFtZTFdLnNlbWFudGljPy5lbnRyb3B5IHx8IDApIC1cbiAgICAgICAgICAgIChpbmRleC5lbGVtZW50c1t0eXBlMl1bbmFtZTJdLnNlbWFudGljPy5lbnRyb3B5IHx8IDApXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICApKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJhbmRvbVNhbXBsZTxUPihhcnJheTogVFtdLCBzaXplOiBudW1iZXIpOiBUW10ge1xuICAgIGNvbnN0IHNodWZmbGVkID0gWy4uLmFycmF5XS5zb3J0KCgpID0+IDAuNSAtIE1hdGgucmFuZG9tKCkpO1xuICAgIHJldHVybiBzaHVmZmxlZC5zbGljZSgwLCBzaXplKTtcbiAgfVxufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RelationshipTypes.d.ts","sourceRoot":"","sources":["../../../src/portfolio/types/RelationshipTypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;
|
|
1
|
+
{"version":3,"file":"RelationshipTypes.d.ts","sourceRoot":"","sources":["../../../src/portfolio/types/RelationshipTypes.ts"],"names":[],"mappings":"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"}
|