@acorex/charts 21.0.1-next.6 → 21.0.1-next.7
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/fesm2022/acorex-charts-bar-chart.mjs.map +1 -1
- package/fesm2022/acorex-charts-chart-legend.mjs +2 -2
- package/fesm2022/acorex-charts-chart-legend.mjs.map +1 -1
- package/fesm2022/acorex-charts-chart-tooltip.mjs.map +1 -1
- package/fesm2022/acorex-charts-donut-chart.mjs.map +1 -1
- package/fesm2022/acorex-charts-gauge-chart.mjs.map +1 -1
- package/fesm2022/acorex-charts-hierarchy-chart.mjs.map +1 -1
- package/fesm2022/acorex-charts-line-chart.mjs.map +1 -1
- package/fesm2022/acorex-charts.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-charts-hierarchy-chart.mjs","sources":["../tmp-esm2022/hierarchy-chart/lib/hierarchy-chart.config.js","../tmp-esm2022/hierarchy-chart/lib/hierarchy-chart.component.js","../tmp-esm2022/hierarchy-chart/acorex-charts-hierarchy-chart.js"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nexport const AXHierarchyChartDefaultConfig = {\n direction: 'vertical',\n margin: { top: 40, right: 120, bottom: 40, left: 120 },\n nodeRadius: 30,\n nodeStrokeWidth: 1.5,\n linkWidth: 1.5,\n linkStyle: 'curved',\n nodeWidth: 120,\n nodeHeight: 60,\n nodeSpacingX: 80,\n nodeSpacingY: 120,\n showTooltip: true,\n collapsible: true,\n expandAll: false,\n animationDuration: 100,\n animationEasing: 'cubic-out',\n messages: {\n noData: 'No data available',\n noDataHelp: 'Please provide hierarchy data to display the chart',\n noDataIcon: 'fa-light fa-sitemap',\n },\n};\nexport const AX_HIERARCHY_CHART_CONFIG = new InjectionToken('AX_HIERARCHY_CHART_CONFIG', {\n providedIn: 'root',\n factory: () => AXHierarchyChartDefaultConfig,\n});\nexport function hierarchyChartConfig(config = {}) {\n const result = {\n ...AXHierarchyChartDefaultConfig,\n ...config,\n };\n return result;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2h5LWNoYXJ0LmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NoYXJ0cy9oaWVyYXJjaHktY2hhcnQvc3JjL2xpYi9oaWVyYXJjaHktY2hhcnQuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQTJCO0lBQ25FLFNBQVMsRUFBRSxVQUFVO0lBQ3JCLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7SUFDdEQsVUFBVSxFQUFFLEVBQUU7SUFDZCxlQUFlLEVBQUUsR0FBRztJQUNwQixTQUFTLEVBQUUsR0FBRztJQUNkLFNBQVMsRUFBRSxRQUFRO0lBQ25CLFNBQVMsRUFBRSxHQUFHO0lBQ2QsVUFBVSxFQUFFLEVBQUU7SUFDZCxZQUFZLEVBQUUsRUFBRTtJQUNoQixZQUFZLEVBQUUsR0FBRztJQUNqQixXQUFXLEVBQUUsSUFBSTtJQUNqQixXQUFXLEVBQUUsSUFBSTtJQUNqQixTQUFTLEVBQUUsS0FBSztJQUNoQixpQkFBaUIsRUFBRSxHQUFHO0lBQ3RCLGVBQWUsRUFBRSxXQUFXO0lBQzVCLFFBQVEsRUFBRTtRQUNSLE1BQU0sRUFBRSxtQkFBbUI7UUFDM0IsVUFBVSxFQUFFLG9EQUFvRDtRQUNoRSxVQUFVLEVBQUUscUJBQXFCO0tBQ2xDO0NBQ0YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLElBQUksY0FBYyxDQUF5QiwyQkFBMkIsRUFBRTtJQUMvRyxVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsNkJBQTZCO0NBQzdDLENBQUMsQ0FBQztBQUlILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxTQUFzQyxFQUFFO0lBQzNFLE1BQU0sTUFBTSxHQUFHO1FBQ2IsR0FBRyw2QkFBNkI7UUFDaEMsR0FBRyxNQUFNO0tBQ1YsQ0FBQztJQUNGLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhIaWVyYXJjaHlDaGFydE9wdGlvbiB9IGZyb20gJy4vaGllcmFyY2h5LWNoYXJ0LnR5cGUnO1xuXG5leHBvcnQgY29uc3QgQVhIaWVyYXJjaHlDaGFydERlZmF1bHRDb25maWc6IEFYSGllcmFyY2h5Q2hhcnRPcHRpb24gPSB7XG4gIGRpcmVjdGlvbjogJ3ZlcnRpY2FsJyxcbiAgbWFyZ2luOiB7IHRvcDogNDAsIHJpZ2h0OiAxMjAsIGJvdHRvbTogNDAsIGxlZnQ6IDEyMCB9LFxuICBub2RlUmFkaXVzOiAzMCxcbiAgbm9kZVN0cm9rZVdpZHRoOiAxLjUsXG4gIGxpbmtXaWR0aDogMS41LFxuICBsaW5rU3R5bGU6ICdjdXJ2ZWQnLFxuICBub2RlV2lkdGg6IDEyMCxcbiAgbm9kZUhlaWdodDogNjAsXG4gIG5vZGVTcGFjaW5nWDogODAsXG4gIG5vZGVTcGFjaW5nWTogMTIwLFxuICBzaG93VG9vbHRpcDogdHJ1ZSxcbiAgY29sbGFwc2libGU6IHRydWUsXG4gIGV4cGFuZEFsbDogZmFsc2UsXG4gIGFuaW1hdGlvbkR1cmF0aW9uOiAxMDAsXG4gIGFuaW1hdGlvbkVhc2luZzogJ2N1YmljLW91dCcsXG4gIG1lc3NhZ2VzOiB7XG4gICAgbm9EYXRhOiAnTm8gZGF0YSBhdmFpbGFibGUnLFxuICAgIG5vRGF0YUhlbHA6ICdQbGVhc2UgcHJvdmlkZSBoaWVyYXJjaHkgZGF0YSB0byBkaXNwbGF5IHRoZSBjaGFydCcsXG4gICAgbm9EYXRhSWNvbjogJ2ZhLWxpZ2h0IGZhLXNpdGVtYXAnLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IEFYX0hJRVJBUkNIWV9DSEFSVF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhIaWVyYXJjaHlDaGFydE9wdGlvbj4oJ0FYX0hJRVJBUkNIWV9DSEFSVF9DT05GSUcnLCB7XG4gIHByb3ZpZGVkSW46ICdyb290JyxcbiAgZmFjdG9yeTogKCkgPT4gQVhIaWVyYXJjaHlDaGFydERlZmF1bHRDb25maWcsXG59KTtcblxuZXhwb3J0IHR5cGUgUGFydGlhbEhpZXJhcmNoeUNoYXJ0Q29uZmlnID0gUGFydGlhbDxBWEhpZXJhcmNoeUNoYXJ0T3B0aW9uPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGhpZXJhcmNoeUNoYXJ0Q29uZmlnKGNvbmZpZzogUGFydGlhbEhpZXJhcmNoeUNoYXJ0Q29uZmlnID0ge30pOiBBWEhpZXJhcmNoeUNoYXJ0T3B0aW9uIHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIC4uLkFYSGllcmFyY2h5Q2hhcnREZWZhdWx0Q29uZmlnLFxuICAgIC4uLmNvbmZpZyxcbiAgfTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdfQ==","import { AXChartComponent } from '@acorex/charts';\nimport { ChangeDetectionStrategy, Component, NgZone, ViewContainerRef, ViewEncapsulation, afterNextRender, computed, contentChild, effect, inject, input, output, signal, viewChild, } from '@angular/core';\nimport { AX_HIERARCHY_CHART_CONFIG } from './hierarchy-chart.config';\nimport * as i0 from \"@angular/core\";\n/**\n * A highly customizable hierarchical visualization component that can be used for:\n * - Organization charts\n * - Tree diagrams\n * - Dependency visualizations\n * - Process flows\n *\n * Supports both default node styling and custom node templates.\n */\nexport class AXHierarchyChartComponent extends AXChartComponent {\n // Chart container reference\n chartContainer = viewChild.required('chartContainer');\n // Custom node template provided by the user\n customNodeTemplate = contentChild('nodeTemplate', ...(ngDevMode ? [{ debugName: \"customNodeTemplate\" }] : []));\n // Services\n ngZone = inject(NgZone);\n viewContainerRef = inject(ViewContainerRef);\n configToken = inject(AX_HIERARCHY_CHART_CONFIG);\n // D3 instance\n d3;\n // Internal state signals\n _expandedNodes = signal(new Map(), ...(ngDevMode ? [{ debugName: \"_expandedNodes\" }] : []));\n _initialized = signal(false, ...(ngDevMode ? [{ debugName: \"_initialized\" }] : []));\n _rendered = signal(false, ...(ngDevMode ? [{ debugName: \"_rendered\" }] : []));\n _dimensions = signal({ width: 0, height: 0 }, ...(ngDevMode ? [{ debugName: \"_dimensions\" }] : []));\n _nodeElements = signal(new Map(), ...(ngDevMode ? [{ debugName: \"_nodeElements\" }] : [])); // Store references to node elements\n _chartData = signal(null, ...(ngDevMode ? [{ debugName: \"_chartData\" }] : [])); // Store the current chart data and layout\n // Inputs\n data = input([], ...(ngDevMode ? [{ debugName: \"data\" }] : []));\n options = input({}, ...(ngDevMode ? [{ debugName: \"options\" }] : []));\n nodeTemplate = input(null, ...(ngDevMode ? [{ debugName: \"nodeTemplate\" }] : []));\n // Outputs\n itemClick = output();\n nodeToggle = output();\n // Computed values\n processedData = computed(() => {\n const data = this.data();\n // Handle both single node and array formats\n return Array.isArray(data) ? { id: 'root', children: data } : data;\n }, ...(ngDevMode ? [{ debugName: \"processedData\" }] : []));\n // Check if custom template is available\n hasCustomTemplate = computed(() => {\n return Boolean(this.customNodeTemplate() || this.nodeTemplate());\n }, ...(ngDevMode ? [{ debugName: \"hasCustomTemplate\" }] : []));\n effectiveOptions = computed(() => {\n return {\n ...this.configToken,\n ...this.options(),\n };\n }, ...(ngDevMode ? [{ debugName: \"effectiveOptions\" }] : []));\n // Messages with defaults\n effectiveMessages = computed(() => {\n const defaultMessages = {\n noData: 'No data available',\n noDataHelp: 'Please provide hierarchy data to display the chart',\n noDataIcon: 'fa-light fa-sitemap',\n };\n return {\n ...defaultMessages,\n ...this.effectiveOptions().messages,\n };\n }, ...(ngDevMode ? [{ debugName: \"effectiveMessages\" }] : []));\n constructor() {\n super();\n // Dynamically load D3 and initialize the chart when the component is ready\n afterNextRender(() => {\n this._initialized.set(true);\n this.loadD3();\n this.initializeExpandedState();\n });\n // Watch for changes to redraw the chart\n effect(() => {\n // Access these to track them\n this.processedData();\n this.nodeTemplate();\n this.customNodeTemplate();\n this.effectiveOptions();\n this._expandedNodes();\n if (this._initialized() && this.d3 && this._rendered()) {\n this.createChart();\n }\n });\n }\n /**\n * Initialize the expanded state for all nodes\n */\n initializeExpandedState() {\n const newExpandedNodes = new Map();\n const data = this.processedData();\n const expandAll = this.effectiveOptions().expandAll;\n // Helper function to recursively process nodes\n const processNode = (node) => {\n if (node.children && node.children.length > 0) {\n // Set initial expansion state based on node property or global option\n newExpandedNodes.set(node.id, node.isExpanded !== undefined ? node.isExpanded : expandAll);\n // Process children\n node.children.forEach((child) => processNode(child));\n }\n };\n // Start processing\n if (data.children) {\n data.children.forEach((node) => processNode(node));\n }\n else if (data.id) {\n processNode(data);\n }\n this._expandedNodes.set(newExpandedNodes);\n }\n /**\n * Dynamically load D3.js to reduce initial bundle size\n */\n async loadD3() {\n try {\n this.d3 = await import('d3');\n if (this._initialized() && this.chartContainer()) {\n this.updateDimensions();\n this.createChart();\n this._rendered.set(true);\n }\n }\n catch (error) {\n console.error('Failed to load D3.js:', error);\n }\n }\n /**\n * Update dimensions based on container size\n */\n updateDimensions() {\n const container = this.chartContainer().nativeElement;\n const options = this.effectiveOptions();\n const containerRect = container.getBoundingClientRect();\n const width = options.width || Math.max(containerRect.width, 300);\n const height = options.height || Math.max(containerRect.height, 400);\n this._dimensions.set({ width, height });\n }\n /**\n * Create and render the hierarchy chart\n */\n createChart() {\n if (!this.d3) {\n return;\n }\n // Clear any existing chart\n this.cleanupChart();\n const container = this.chartContainer().nativeElement;\n const data = this.processedData();\n // Check for null/undefined data or empty children\n if (!data || !data.children || data.children.length === 0) {\n this.showNoDataMessage(container);\n return;\n }\n const options = this.effectiveOptions();\n const dimensions = this._dimensions();\n const expandedNodes = this._expandedNodes();\n this.ngZone.runOutsideAngular(() => {\n // Get dimensions and options\n const { width, height } = dimensions;\n const margin = options.margin || { top: 40, right: 120, bottom: 40, left: 120 };\n const nodeWidth = options.nodeWidth || 120;\n const nodeHeight = options.nodeHeight || 60;\n const nodeSpacingX = options.nodeSpacingX || 80;\n const nodeSpacingY = options.nodeSpacingY || 120;\n const isHorizontal = options.direction === 'horizontal';\n // Create SVG container with viewBox for responsiveness\n const svg = this.d3\n .select(container)\n .append('svg')\n .attr('width', '100%')\n .attr('height', '100%')\n .attr('viewBox', `0 0 ${width} ${height}`)\n .attr('preserveAspectRatio', 'xMidYMid meet')\n .style('overflow', 'visible')\n .classed(options.className || '', !!options.className);\n // Create hierarchy layout from data\n const rootData = this.processedData();\n const root = this.d3.hierarchy(rootData);\n // Apply expansion state to nodes\n root.descendants().forEach((node) => {\n if (node.data.id !== 'root' && node.children) {\n if (expandedNodes.has(node.data.id) && !expandedNodes.get(node.data.id)) {\n node._children = node.children; // Store children\n node.children = null; // Collapse node\n }\n }\n });\n // Set up the tree layout based on direction option\n const treeLayout = this.d3\n .tree()\n .nodeSize([\n isHorizontal ? nodeHeight + nodeSpacingY : nodeWidth + nodeSpacingX,\n isHorizontal ? nodeWidth + nodeSpacingX : nodeHeight + nodeSpacingY,\n ])\n .separation((a, b) => {\n return a.parent === b.parent ? 1.2 : 1.5;\n });\n treeLayout(root);\n // Store the current tree layout data for future updates\n this._chartData.set({\n root,\n treeLayout,\n isHorizontal,\n nodeWidth,\n nodeHeight,\n });\n // Adjust root position based on direction\n const rootX = isHorizontal ? margin.top : width / 2;\n const rootY = isHorizontal ? margin.left : margin.top;\n // Calculate bounds of the tree after layout\n let minX = Infinity;\n let maxX = -Infinity;\n let minY = Infinity;\n let maxY = -Infinity;\n root.descendants().forEach((d) => {\n if (d.data.id === 'root')\n return;\n const x = isHorizontal ? d.x : d.x;\n const y = isHorizontal ? d.y : d.y;\n minX = Math.min(minX, x);\n maxX = Math.max(maxX, x);\n minY = Math.min(minY, y);\n maxY = Math.max(maxY, y);\n });\n // Calculate the center of the tree\n const centerX = (minX + maxX) / 2;\n const centerY = (minY + maxY) / 2;\n // Create a group for the chart content with proper centering\n const g = svg\n .append('g')\n .attr('transform', isHorizontal\n ? `translate(${margin.left}, ${height / 2 - centerX})`\n : `translate(${width / 2}, ${margin.top})`);\n // Add zoom and pan behavior (replaces AXPanViewDirective)\n const zoom = this.d3\n .zoom()\n .scaleExtent([0.1, 3]) // Min zoom: 10%, Max zoom: 300%\n .on('zoom', (event) => {\n g.attr('transform', event.transform);\n });\n // Apply zoom behavior to SVG\n svg.call(zoom);\n // Set initial transform to match the centering\n const initialTransform = this.d3.zoomIdentity\n .translate(isHorizontal ? margin.left : width / 2, isHorizontal ? height / 2 - centerX : margin.top);\n svg.call(zoom.transform, initialTransform);\n // Draw links between nodes\n const links = g\n .selectAll('.link')\n .data(root.links().filter((d) => d.source.data.id !== 'root'))\n .enter()\n .append('path')\n .attr('class', 'ax-hierarchy-chart-link')\n .attr('d', (d) => {\n // Get the link style from options\n const linkStyle = options.linkStyle || 'curved';\n // Source and target coordinates based on direction\n const sourceX = isHorizontal ? d.source.y : d.source.x;\n const sourceY = isHorizontal ? d.source.x : d.source.y;\n const targetX = isHorizontal ? d.target.y : d.target.x;\n const targetY = isHorizontal ? d.target.x : d.target.y;\n // Variables for rounded corners\n let xDistance, yDistance, cornerRadius, midX, midY;\n switch (linkStyle) {\n case 'straight':\n // Direct straight line\n return `M${sourceX},${sourceY}L${targetX},${targetY}`;\n case 'rounded':\n // Curved line with rounded corners\n xDistance = Math.abs(targetX - sourceX);\n yDistance = Math.abs(targetY - sourceY);\n cornerRadius = Math.min(xDistance, yDistance) * 0.2; // Reduced radius for better appearance\n if (isHorizontal) {\n // For horizontal layout\n const halfDistance = (targetX - sourceX) / 2;\n const xMid = sourceX + halfDistance;\n return `\n M${sourceX},${sourceY}\n H${xMid - cornerRadius}\n Q${xMid},${sourceY} ${xMid},${sourceY + Math.sign(targetY - sourceY) * cornerRadius}\n V${targetY - Math.sign(targetY - sourceY) * cornerRadius}\n Q${xMid},${targetY} ${xMid + cornerRadius},${targetY}\n H${targetX}\n `;\n }\n else {\n // For vertical layout\n const halfDistance = (targetY - sourceY) / 2;\n const yMid = sourceY + halfDistance;\n return `\n M${sourceX},${sourceY}\n V${yMid - cornerRadius}\n Q${sourceX},${yMid} ${sourceX + Math.sign(targetX - sourceX) * cornerRadius},${yMid}\n H${targetX - Math.sign(targetX - sourceX) * cornerRadius}\n Q${targetX},${yMid} ${targetX},${yMid + cornerRadius}\n V${targetY}\n `;\n }\n case 'step':\n // L-shaped stepped line\n if (isHorizontal) {\n return `M${sourceX},${sourceY}H${(sourceX + targetX) / 2}V${targetY}H${targetX}`;\n }\n else {\n return `M${sourceX},${sourceY}V${(sourceY + targetY) / 2}H${targetX}V${targetY}`;\n }\n case 'curved':\n default:\n // Default curved line using D3's built-in link generator\n if (isHorizontal) {\n return this.d3\n .linkHorizontal()\n .x((d) => d.y)\n .y((d) => d.x)(d);\n }\n else {\n return this.d3\n .linkVertical()\n .x((d) => d.x)\n .y((d) => d.y)(d);\n }\n }\n })\n .attr('stroke', `rgb(var(--ax-comp-hierarchy-chart-link-color))`)\n .attr('stroke-width', options.linkWidth)\n .attr('fill', 'none')\n .attr('opacity', 1);\n // Determine which template to use for rendering nodes\n const useCustomTemplate = this.hasCustomTemplate();\n const templateToUse = this.nodeTemplate() || this.customNodeTemplate();\n // Create a map to store node elements for future updates\n const nodeElementsMap = new Map();\n // Create node groups\n const nodeGroups = g\n .selectAll('.node-group')\n .data(root.descendants().filter((d) => d.data.id !== 'root'))\n .enter()\n .append('g')\n .attr('class', 'ax-hierarchy-chart-node-group')\n .attr('data-node-id', (d) => d.data.id) // Add a data attribute for easier selection\n .attr('transform', (d) => {\n const x = isHorizontal ? d.y : d.x;\n const y = isHorizontal ? d.x : d.y;\n return `translate(${x},${y})`;\n })\n .attr('opacity', 1); // Display nodes immediately with full opacity\n // Store node elements in the map\n nodeGroups.each(function (d) {\n nodeElementsMap.set(d.data.id, this);\n });\n // Update the node elements signal\n this._nodeElements.set(nodeElementsMap);\n if (useCustomTemplate && templateToUse) {\n // Render custom node templates\n nodeGroups.each((d, i, nodes) => {\n const node = d.data;\n const element = nodes[i];\n const hasChildren = !!(node.children && node.children.length > 0);\n const isExpanded = hasChildren && this._expandedNodes().has(node.id) && this._expandedNodes().get(node.id);\n // Enhance the node with expanded state and toggle function\n node.expanded = isExpanded || false;\n node.toggleExpanded = () => this.toggleNode(node.id);\n // Create a foreignObject for the template\n const foreignObject = this.d3\n .select(element)\n .append('foreignObject')\n .attr('x', -nodeWidth / 2)\n .attr('y', -nodeHeight / 2)\n .attr('width', nodeWidth)\n .attr('height', nodeHeight)\n .attr('class', 'ax-hierarchy-chart-node-container')\n .on('click', (event) => {\n // Don't propagate the event if it's coming from an interactive element\n // like a button inside the template\n const target = event.target;\n const isInteractive = target.tagName === 'BUTTON' || target.tagName === 'A' || target.closest('button, a, [role=\"button\"]');\n if (!isInteractive) {\n this.handleNodeClick(event, d);\n }\n });\n // Create a div to hold the template\n const div = foreignObject\n .append('xhtml:div')\n .attr('class', 'ax-hierarchy-chart-node-content')\n .style('width', '100%')\n .style('height', '100%');\n // Render the template into the div\n this.ngZone.run(() => {\n // Create context with enhanced node as the implicit value\n const context = {\n $implicit: node,\n };\n const viewRef = this.viewContainerRef.createEmbeddedView(templateToUse, context);\n viewRef.detectChanges();\n // Append template contents to the div\n const nodes = viewRef.rootNodes;\n for (const node of nodes) {\n div.node().appendChild(node);\n }\n });\n });\n }\n else {\n // Render enhanced default nodes (rectangles with text and icons)\n nodeGroups.each((d, i, nodes) => {\n const group = this.d3.select(nodes[i]);\n const node = d.data;\n const hasChildren = !!(node.children && node.children.length > 0);\n // Node background rect with rounded corners\n group\n .append('rect')\n .attr('x', -nodeWidth / 2)\n .attr('y', -nodeHeight / 2)\n .attr('width', nodeWidth)\n .attr('height', nodeHeight)\n .attr('rx', 6)\n .attr('ry', 6)\n .attr('fill', node.color || `rgb(var(--ax-comp-hierarchy-chart-node-color))`)\n .attr('stroke', `rgb(var(--ax-comp-hierarchy-chart-node-stroke-color))`)\n .attr('stroke-width', options.nodeStrokeWidth)\n .attr('class', 'ax-hierarchy-chart-node');\n // Main title/name\n group\n .append('text')\n .attr('y', -10)\n .attr('text-anchor', 'middle')\n .attr('class', 'ax-hierarchy-chart-node-title')\n .attr('fill', 'white')\n .attr('font-weight', 'bold')\n .text(node.name || node.label || '');\n // Subtitle if provided\n if (node.subtitle) {\n group\n .append('text')\n .attr('y', 10)\n .attr('text-anchor', 'middle')\n .attr('class', 'ax-hierarchy-chart-node-subtitle')\n .attr('fill', 'rgba(255, 255, 255, 0.8)')\n .attr('font-size', '0.8em')\n .text(node.subtitle);\n }\n // Type label if provided\n if (node.type) {\n group\n .append('text')\n .attr('y', 25)\n .attr('text-anchor', 'middle')\n .attr('class', 'ax-hierarchy-chart-node-type')\n .attr('fill', 'rgba(255, 255, 255, 0.7)')\n .attr('font-size', '0.7em')\n .text(node.type);\n }\n // Add expand/collapse indicator if node has children\n if (hasChildren && options.collapsible) {\n const isExpanded = this._expandedNodes().has(node.id) && this._expandedNodes().get(node.id);\n // Toggle button with better styling\n group\n .append('circle')\n .attr('r', 10)\n .attr('cx', nodeWidth / 2 - 12)\n .attr('cy', -nodeHeight / 2 + 12)\n .attr('fill', 'white')\n .attr('stroke', `rgb(var(--ax-comp-hierarchy-chart-node-stroke-color))`)\n .attr('stroke-width', 1)\n .attr('class', 'ax-hierarchy-chart-toggle-indicator')\n .style('cursor', 'pointer')\n .on('click', (event) => {\n event.stopPropagation();\n this.toggleNode(node.id);\n });\n // Toggle icon\n group\n .append('text')\n .attr('x', nodeWidth / 2 - 12)\n .attr('y', -nodeHeight / 2 + 12)\n .attr('dy', '0.32em')\n .attr('text-anchor', 'middle')\n .attr('class', 'ax-hierarchy-chart-toggle-icon')\n .attr('fill', node.color || `rgb(var(--ax-comp-hierarchy-chart-node-color))`)\n .attr('font-weight', 'bold')\n .style('cursor', 'pointer')\n .text(isExpanded ? '−' : '+')\n .on('click', (event) => {\n event.stopPropagation();\n this.toggleNode(node.id);\n });\n }\n // Icon if provided\n if (node.icon) {\n group\n .append('text')\n .attr('x', -nodeWidth / 2 + 15)\n .attr('y', 0)\n .attr('dy', '0.32em')\n .attr('class', 'ax-hierarchy-chart-node-icon')\n .attr('fill', 'white')\n .attr('class', node.icon);\n }\n // Add click handler to the whole node\n group.on('click', (event) => {\n this.handleNodeClick(event, d);\n });\n // Add tooltip if enabled\n if (options.showTooltip && (node.tooltip || node.description)) {\n group.append('title').text(node.tooltip || node.description || '');\n }\n });\n }\n });\n }\n /**\n * Toggle node expansion state\n */\n toggleNode(nodeId) {\n const expandedNodes = new Map(this._expandedNodes());\n const currentState = expandedNodes.get(nodeId);\n const newState = currentState === undefined ? false : !currentState;\n expandedNodes.set(nodeId, newState);\n this._expandedNodes.set(expandedNodes);\n // Emit toggle event\n this.findNodeById(this.processedData(), nodeId).then((node) => {\n if (node) {\n this.nodeToggle.emit({\n node: node,\n expanded: newState,\n });\n }\n });\n // Update toggle indicator immediately for better UX\n this.updateToggleIndicator(nodeId, newState);\n }\n /**\n * Update just the toggle indicator without redrawing the chart\n */\n updateToggleIndicator(nodeId, expanded) {\n if (!this.d3 || !this.chartContainer())\n return;\n this.ngZone.runOutsideAngular(() => {\n const container = this.chartContainer().nativeElement;\n const svg = container.querySelector('svg');\n if (!svg)\n return;\n // Find and update the toggle indicator for the specific node\n const nodeGroup = this.d3.select(svg).select(`[data-node-id=\"${nodeId}\"]`);\n if (nodeGroup.empty())\n return;\n // Update the toggle icon (if it exists)\n const toggleIcon = nodeGroup.select('.ax-hierarchy-chart-toggle-icon');\n if (!toggleIcon.empty()) {\n toggleIcon.text(expanded ? '−' : '+');\n }\n });\n // Force effect to run that will update the chart\n // This leverages Angular's reactivity rather than a direct method call\n // which is more consistent with Angular's reactive approach\n const expandedNodes = new Map(this._expandedNodes());\n this._expandedNodes.set(expandedNodes);\n }\n /**\n * Find a node by ID\n */\n async findNodeById(data, id) {\n if (data.id === id) {\n return data;\n }\n if (data.children) {\n for (const child of data.children) {\n const found = await this.findNodeById(child, id);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n /**\n * Handle node click events\n */\n handleNodeClick(event, d) {\n const node = d.data;\n // Emit click event\n this.itemClick.emit({\n event: { nativeEvent: event, sender: this },\n item: node,\n element: event.currentTarget,\n });\n }\n /**\n * Clear existing chart\n */\n cleanupChart() {\n const container = this.chartContainer()?.nativeElement;\n if (!container)\n return;\n // Remove existing SVG\n const svg = container.querySelector('svg');\n if (svg) {\n svg.remove();\n }\n }\n updateChart() {\n this.createChart();\n }\n /**\n * Get D3 easing function from string name\n */\n getEasingFunction(easing) {\n if (!easing)\n return this.d3.easeCubicInOut;\n switch (easing) {\n case 'linear':\n return this.d3.easeLinear;\n case 'ease':\n return this.d3.easePolyInOut;\n case 'ease-in':\n return this.d3.easePolyIn;\n case 'ease-out':\n return this.d3.easePolyOut;\n case 'ease-in-out':\n return this.d3.easePolyInOut;\n case 'cubic':\n return this.d3.easeCubic;\n case 'cubic-in':\n return this.d3.easeCubicIn;\n case 'cubic-out':\n return this.d3.easeCubicOut;\n case 'cubic-in-out':\n return this.d3.easeCubicInOut;\n default:\n return this.d3.easeCubicInOut;\n }\n }\n /**\n * Shows a message when no data is available\n */\n showNoDataMessage(containerElement) {\n // Clear existing contents first\n this.d3.select(containerElement).selectAll('*').remove();\n const messageContainer = this.d3\n .select(containerElement)\n .append('div')\n .attr('class', 'ax-hierarchy-chart-no-data-message')\n .style('position', 'absolute')\n .style('left', '50%')\n .style('top', '50%')\n .style('transform', 'translate(-50%, -50%)')\n .style('text-align', 'center')\n .style('background-color', 'rgb(var(--ax-comp-hierarchy-chart-bg-color))')\n .style('padding', '1.5rem')\n .style('border-radius', '0.5rem')\n .style('box-shadow', '0 2px 12px rgba(0, 0, 0, 0.08)')\n .style('width', '80%')\n .style('max-width', '300px');\n // Add an icon\n messageContainer\n .append('div')\n .attr('class', 'ax-hierarchy-chart-no-data-icon')\n .style('opacity', '0.6')\n .style('margin-bottom', '0.75rem')\n .html(`<i class=\"${this.effectiveMessages().noDataIcon} fa-2x\"></i>`);\n // Add text message\n messageContainer\n .append('div')\n .attr('class', 'ax-hierarchy-chart-no-data-text')\n .style('font-size', '1rem')\n .style('font-weight', '600')\n .style('margin-bottom', '0.5rem')\n .text(this.effectiveMessages().noData);\n // Add help text\n messageContainer\n .append('div')\n .attr('class', 'ax-hierarchy-chart-no-data-help')\n .style('font-size', '0.8rem')\n .style('opacity', '0.6')\n .text(this.effectiveMessages().noDataHelp);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXHierarchyChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.2.0\", version: \"20.3.15\", type: AXHierarchyChartComponent, isStandalone: true, selector: \"ax-hierarchy-chart\", inputs: { data: { classPropertyName: \"data\", publicName: \"data\", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: \"options\", publicName: \"options\", isSignal: true, isRequired: false, transformFunction: null }, nodeTemplate: { classPropertyName: \"nodeTemplate\", publicName: \"nodeTemplate\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: \"itemClick\", nodeToggle: \"nodeToggle\" }, queries: [{ propertyName: \"customNodeTemplate\", first: true, predicate: [\"nodeTemplate\"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: \"chartContainer\", first: true, predicate: [\"chartContainer\"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-hierarchy-chart\\\" role=\\\"img\\\" #chartContainer></div>\\n\", styles: [\"ax-hierarchy-chart{display:block;width:100%;height:100%;min-height:300px;--ax-comp-hierarchy-chart-node-color: var(--ax-sys-color-primary-500);--ax-comp-hierarchy-chart-node-stroke-color: var(--ax-sys-color-primary-400);--ax-comp-hierarchy-chart-link-color: var(--ax-sys-color-primary-400);--ax-comp-hierarchy-chart-text-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-hierarchy-chart-bg-color: 0, 0, 0, 0;color:rgb(var(--ax-comp-hierarchy-chart-text-color));background-color:rgba(var(--ax-comp-hierarchy-chart-bg-color))}ax-hierarchy-chart .ax-hierarchy-chart{width:100%;height:100%;min-height:300px;position:relative;overflow:hidden}ax-hierarchy-chart .ax-hierarchy-chart svg{width:100%;height:100%;max-width:100%;max-height:100%;overflow:visible}ax-hierarchy-chart .ax-hierarchy-chart svg g:has(text){font-family:inherit}ax-hierarchy-chart .ax-hierarchy-chart-no-data-message{position:absolute;text-align:center;transform:translate(-50%,-50%);background-color:rgb(var(--ax-comp-hierarchy-chart-bg-color));padding:1.5rem;border-radius:.5rem;border:1px solid rgba(var(--ax-sys-color-surface));width:80%;max-width:300px}ax-hierarchy-chart .ax-hierarchy-chart-no-data-message .ax-hierarchy-chart-no-data-icon{opacity:.6;margin-bottom:.75rem}ax-hierarchy-chart .ax-hierarchy-chart-no-data-message .ax-hierarchy-chart-no-data-text{font-size:1rem;font-weight:600;margin-bottom:.5rem}ax-hierarchy-chart .ax-hierarchy-chart-no-data-message .ax-hierarchy-chart-no-data-help{font-size:.8rem;opacity:.6}\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.15\", ngImport: i0, type: AXHierarchyChartComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-hierarchy-chart', standalone: true, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: \"<div class=\\\"ax-hierarchy-chart\\\" role=\\\"img\\\" #chartContainer></div>\\n\", styles: [\"ax-hierarchy-chart{display:block;width:100%;height:100%;min-height:300px;--ax-comp-hierarchy-chart-node-color: var(--ax-sys-color-primary-500);--ax-comp-hierarchy-chart-node-stroke-color: var(--ax-sys-color-primary-400);--ax-comp-hierarchy-chart-link-color: var(--ax-sys-color-primary-400);--ax-comp-hierarchy-chart-text-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-hierarchy-chart-bg-color: 0, 0, 0, 0;color:rgb(var(--ax-comp-hierarchy-chart-text-color));background-color:rgba(var(--ax-comp-hierarchy-chart-bg-color))}ax-hierarchy-chart .ax-hierarchy-chart{width:100%;height:100%;min-height:300px;position:relative;overflow:hidden}ax-hierarchy-chart .ax-hierarchy-chart svg{width:100%;height:100%;max-width:100%;max-height:100%;overflow:visible}ax-hierarchy-chart .ax-hierarchy-chart svg g:has(text){font-family:inherit}ax-hierarchy-chart .ax-hierarchy-chart-no-data-message{position:absolute;text-align:center;transform:translate(-50%,-50%);background-color:rgb(var(--ax-comp-hierarchy-chart-bg-color));padding:1.5rem;border-radius:.5rem;border:1px solid rgba(var(--ax-sys-color-surface));width:80%;max-width:300px}ax-hierarchy-chart .ax-hierarchy-chart-no-data-message .ax-hierarchy-chart-no-data-icon{opacity:.6;margin-bottom:.75rem}ax-hierarchy-chart .ax-hierarchy-chart-no-data-message .ax-hierarchy-chart-no-data-text{font-size:1rem;font-weight:600;margin-bottom:.5rem}ax-hierarchy-chart .ax-hierarchy-chart-no-data-message .ax-hierarchy-chart-no-data-help{font-size:.8rem;opacity:.6}\\n\"] }]\n }], ctorParameters: () => [], propDecorators: { chartContainer: [{ type: i0.ViewChild, args: ['chartContainer', { isSignal: true }] }], customNodeTemplate: [{ type: i0.ContentChild, args: ['nodeTemplate', { isSignal: true }] }], data: [{ type: i0.Input, args: [{ isSignal: true, alias: \"data\", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: \"options\", required: false }] }], nodeTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: \"nodeTemplate\", required: false }] }], itemClick: [{ type: i0.Output, args: [\"itemClick\"] }], nodeToggle: [{ type: i0.Output, args: [\"nodeToggle\"] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2h5LWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NoYXJ0cy9oaWVyYXJjaHktY2hhcnQvc3JjL2xpYi9oaWVyYXJjaHktY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2hhcnRzL2hpZXJhcmNoeS1jaGFydC9zcmMvbGliL2hpZXJhcmNoeS1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQXdCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEUsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsTUFBTSxFQUVOLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLFFBQVEsRUFDUixZQUFZLEVBQ1osTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBU3JFOzs7Ozs7OztHQVFHO0FBU0gsTUFBTSxPQUFPLHlCQUEwQixTQUFRLGdCQUFnQjtJQUM3RCw0QkFBNEI7SUFDcEIsY0FBYyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQTZCLGdCQUFnQixDQUFDLENBQUM7SUFFMUYsNENBQTRDO0lBQzVDLGtCQUFrQixHQUFHLFlBQVksQ0FBMkMsY0FBYyw4REFBQyxDQUFDO0lBQzVGLFdBQVc7SUFDSCxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hCLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzVDLFdBQVcsR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUV4RCxjQUFjO0lBQ04sRUFBRSxDQUFNO0lBRWhCLHlCQUF5QjtJQUNqQixjQUFjLEdBQUcsTUFBTSxDQUF1QixJQUFJLEdBQUcsRUFBRSwwREFBQyxDQUFDO0lBQ3pELFlBQVksR0FBRyxNQUFNLENBQUMsS0FBSyx3REFBQyxDQUFDO0lBQzdCLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxxREFBQyxDQUFDO0lBQzFCLFdBQVcsR0FBRyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsdURBQUMsQ0FBQztJQUM5QyxhQUFhLEdBQUcsTUFBTSxDQUFtQixJQUFJLEdBQUcsRUFBRSx5REFBQyxDQUFDLENBQUMsb0NBQW9DO0lBQ3pGLFVBQVUsR0FBRyxNQUFNLENBQU0sSUFBSSxzREFBQyxDQUFDLENBQUMsMENBQTBDO0lBRWxGLFNBQVM7SUFDVCxJQUFJLEdBQUcsS0FBSyxDQUFnRCxFQUFFLGdEQUFDLENBQUM7SUFDaEUsT0FBTyxHQUFHLEtBQUssQ0FBeUIsRUFBRSxtREFBQyxDQUFDO0lBQzVDLFlBQVksR0FBRyxLQUFLLENBQWtELElBQUksd0RBQUMsQ0FBQztJQUU1RSxVQUFVO0lBQ1YsU0FBUyxHQUFHLE1BQU0sRUFBOEIsQ0FBQztJQUNqRCxVQUFVLEdBQUcsTUFBTSxFQUErQixDQUFDO0lBRW5ELGtCQUFrQjtJQUNSLGFBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6Qiw0Q0FBNEM7UUFDNUMsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDckUsQ0FBQyx5REFBQyxDQUFDO0lBRUgsd0NBQXdDO0lBQzlCLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDMUMsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDbkUsQ0FBQyw2REFBQyxDQUFDO0lBRU8sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUN6QyxPQUFPO1lBQ0wsR0FBRyxJQUFJLENBQUMsV0FBVztZQUNuQixHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUU7U0FDbEIsQ0FBQztJQUNKLENBQUMsNERBQUMsQ0FBQztJQUVILHlCQUF5QjtJQUNmLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDMUMsTUFBTSxlQUFlLEdBQUc7WUFDdEIsTUFBTSxFQUFFLG1CQUFtQjtZQUMzQixVQUFVLEVBQUUsb0RBQW9EO1lBQ2hFLFVBQVUsRUFBRSxxQkFBcUI7U0FDbEMsQ0FBQztRQUNGLE9BQU87WUFDTCxHQUFHLGVBQWU7WUFDbEIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRO1NBQ3BDLENBQUM7SUFDSixDQUFDLDZEQUFDLENBQUM7SUFFSDtRQUNFLEtBQUssRUFBRSxDQUFDO1FBQ1IsMkVBQTJFO1FBQzNFLGVBQWUsQ0FBQyxHQUFHLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7UUFFSCx3Q0FBd0M7UUFDeEMsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLDZCQUE2QjtZQUM3QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUV0QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO2dCQUN2RCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssdUJBQXVCO1FBQzdCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7UUFDcEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUVwRCwrQ0FBK0M7UUFDL0MsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUEwQixFQUFFLEVBQUU7WUFDakQsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM5QyxzRUFBc0U7Z0JBQ3RFLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFFM0YsbUJBQW1CO2dCQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDdkQsQ0FBQztRQUNILENBQUMsQ0FBQztRQUVGLG1CQUFtQjtRQUNuQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckQsQ0FBQzthQUFNLElBQUssSUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzVCLFdBQVcsQ0FBQyxJQUE0QixDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUVELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOztPQUVHO0lBQ08sS0FBSyxDQUFDLE1BQU07UUFDcEIsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztnQkFDakQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0IsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoRCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssZ0JBQWdCO1FBQ3RCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxhQUFhLENBQUM7UUFDdEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFeEMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDeEQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbEUsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFckUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDYixPQUFPO1FBQ1QsQ0FBQztRQUVELDJCQUEyQjtRQUMzQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLGFBQWEsQ0FBQztRQUN0RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFbEMsa0RBQWtEO1FBQ2xELElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNsQyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN0QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDakMsNkJBQTZCO1lBQzdCLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO1lBQ3JDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDaEYsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUM7WUFDM0MsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7WUFDNUMsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7WUFDaEQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksSUFBSSxHQUFHLENBQUM7WUFDakQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFNBQVMsS0FBSyxZQUFZLENBQUM7WUFFeEQsdURBQXVEO1lBQ3ZELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFO2lCQUNoQixNQUFNLENBQUMsU0FBUyxDQUFDO2lCQUNqQixNQUFNLENBQUMsS0FBSyxDQUFDO2lCQUNiLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO2lCQUNyQixJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztpQkFDdEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztpQkFDekMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLGVBQWUsQ0FBQztpQkFDNUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUM7aUJBQzVCLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRXpELG9DQUFvQztZQUNwQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFekMsaUNBQWlDO1lBQ2pDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDdkMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUM3QyxJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO3dCQUN4RSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxpQkFBaUI7d0JBQ2pELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsZ0JBQWdCO29CQUN4QyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILG1EQUFtRDtZQUNuRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRTtpQkFDdkIsSUFBSSxFQUFFO2lCQUNOLFFBQVEsQ0FBQztnQkFDUixZQUFZLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxZQUFZO2dCQUNuRSxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxZQUFZO2FBQ3BFLENBQUM7aUJBQ0QsVUFBVSxDQUFDLENBQUMsQ0FBTSxFQUFFLENBQU0sRUFBRSxFQUFFO2dCQUM3QixPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDM0MsQ0FBQyxDQUFDLENBQUM7WUFFTCxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFakIsd0RBQXdEO1lBQ3hELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO2dCQUNsQixJQUFJO2dCQUNKLFVBQVU7Z0JBQ1YsWUFBWTtnQkFDWixTQUFTO2dCQUNULFVBQVU7YUFDWCxDQUFDLENBQUM7WUFFSCwwQ0FBMEM7WUFDMUMsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ3BELE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztZQUV0RCw0Q0FBNEM7WUFDNUMsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDO1lBQ3BCLElBQUksSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQ3JCLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQztZQUNwQixJQUFJLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUVyQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssTUFBTTtvQkFBRSxPQUFPO2dCQUVqQyxNQUFNLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25DLE1BQU0sQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFbkMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDekIsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDO1lBRUgsbUNBQW1DO1lBQ25DLE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsQyxNQUFNLE9BQU8sR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFbEMsNkRBQTZEO1lBQzdELE1BQU0sQ0FBQyxHQUFHLEdBQUc7aUJBQ1YsTUFBTSxDQUFDLEdBQUcsQ0FBQztpQkFDWCxJQUFJLENBQ0gsV0FBVyxFQUNYLFlBQVk7Z0JBQ1YsQ0FBQyxDQUFDLGFBQWEsTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNLEdBQUcsQ0FBQyxHQUFHLE9BQU8sR0FBRztnQkFDdEQsQ0FBQyxDQUFDLGFBQWEsS0FBSyxHQUFHLENBQUMsS0FBSyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQzdDLENBQUM7WUFFSiwwREFBMEQ7WUFDMUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUU7aUJBQ2pCLElBQUksRUFBRTtpQkFDTixXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQ0FBZ0M7aUJBQ3RELEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtnQkFDekIsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZDLENBQUMsQ0FBQyxDQUFDO1lBRUwsNkJBQTZCO1lBQzdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFZiwrQ0FBK0M7WUFDL0MsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVk7aUJBQzFDLFNBQVMsQ0FDUixZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQ3RDLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQ2pELENBQUM7WUFDSixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUUzQywyQkFBMkI7WUFDM0IsTUFBTSxLQUFLLEdBQUcsQ0FBQztpQkFDWixTQUFTLENBQUMsT0FBTyxDQUFDO2lCQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDO2lCQUNsRSxLQUFLLEVBQUU7aUJBQ1AsTUFBTSxDQUFDLE1BQU0sQ0FBQztpQkFDZCxJQUFJLENBQUMsT0FBTyxFQUFFLHlCQUF5QixDQUFDO2lCQUN4QyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBTSxFQUFFLEVBQUU7Z0JBQ3BCLGtDQUFrQztnQkFDbEMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxRQUFRLENBQUM7Z0JBRWhELG1EQUFtRDtnQkFDbkQsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZELE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUN2RCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDdkQsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBRXZELGdDQUFnQztnQkFDaEMsSUFBSSxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO2dCQUVuRCxRQUFRLFNBQVMsRUFBRSxDQUFDO29CQUNsQixLQUFLLFVBQVU7d0JBQ2IsdUJBQXVCO3dCQUN2QixPQUFPLElBQUksT0FBTyxJQUFJLE9BQU8sSUFBSSxPQUFPLElBQUksT0FBTyxFQUFFLENBQUM7b0JBRXhELEtBQUssU0FBUzt3QkFDWixtQ0FBbUM7d0JBQ25DLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQzt3QkFDeEMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDO3dCQUN4QyxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsdUNBQXVDO3dCQUU1RixJQUFJLFlBQVksRUFBRSxDQUFDOzRCQUNqQix3QkFBd0I7NEJBQ3hCLE1BQU0sWUFBWSxHQUFHLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDN0MsTUFBTSxJQUFJLEdBQUcsT0FBTyxHQUFHLFlBQVksQ0FBQzs0QkFFcEMsT0FBTztxQkFDRixPQUFPLElBQUksT0FBTztxQkFDbEIsSUFBSSxHQUFHLFlBQVk7cUJBQ25CLElBQUksSUFBSSxPQUFPLElBQUksSUFBSSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxZQUFZO3FCQUNoRixPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsWUFBWTtxQkFDckQsSUFBSSxJQUFJLE9BQU8sSUFBSSxJQUFJLEdBQUcsWUFBWSxJQUFJLE9BQU87cUJBQ2pELE9BQU87aUJBQ1gsQ0FBQzt3QkFDSixDQUFDOzZCQUFNLENBQUM7NEJBQ04sc0JBQXNCOzRCQUN0QixNQUFNLFlBQVksR0FBRyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQzdDLE1BQU0sSUFBSSxHQUFHLE9BQU8sR0FBRyxZQUFZLENBQUM7NEJBRXBDLE9BQU87cUJBQ0YsT0FBTyxJQUFJLE9BQU87cUJBQ2xCLElBQUksR0FBRyxZQUFZO3FCQUNuQixPQUFPLElBQUksSUFBSSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxZQUFZLElBQUksSUFBSTtxQkFDaEYsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLFlBQVk7cUJBQ3JELE9BQU8sSUFBSSxJQUFJLElBQUksT0FBTyxJQUFJLElBQUksR0FBRyxZQUFZO3FCQUNqRCxPQUFPO2lCQUNYLENBQUM7d0JBQ0osQ0FBQztvQkFFSCxLQUFLLE1BQU07d0JBQ1Qsd0JBQXdCO3dCQUN4QixJQUFJLFlBQVksRUFBRSxDQUFDOzRCQUNqQixPQUFPLElBQUksT0FBTyxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksT0FBTyxJQUFJLE9BQU8sRUFBRSxDQUFDO3dCQUNuRixDQUFDOzZCQUFNLENBQUM7NEJBQ04sT0FBTyxJQUFJLE9BQU8sSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE9BQU8sSUFBSSxPQUFPLEVBQUUsQ0FBQzt3QkFDbkYsQ0FBQztvQkFFSCxLQUFLLFFBQVEsQ0FBQztvQkFDZDt3QkFDRSx5REFBeUQ7d0JBQ3pELElBQUksWUFBWSxFQUFFLENBQUM7NEJBQ2pCLE9BQU8sSUFBSSxDQUFDLEVBQUU7aUNBQ1gsY0FBYyxFQUFFO2lDQUNoQixDQUFDLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUNBQ2xCLENBQUMsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUMzQixDQUFDOzZCQUFNLENBQUM7NEJBQ04sT0FBTyxJQUFJLENBQUMsRUFBRTtpQ0FDWCxZQUFZLEVBQUU7aUNBQ2QsQ0FBQyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lDQUNsQixDQUFDLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDM0IsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQyxDQUFDO2lCQUNELElBQUksQ0FBQyxRQUFRLEVBQUUsZ0RBQWdELENBQUM7aUJBQ2hFLElBQUksQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQztpQkFDdkMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7aUJBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFdEIsc0RBQXNEO1lBQ3RELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDbkQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBRXZFLHlEQUF5RDtZQUN6RCxNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO1lBRS9DLHFCQUFxQjtZQUNyQixNQUFNLFVBQVUsR0FBRyxDQUFDO2lCQUNqQixTQUFTLENBQUMsYUFBYSxDQUFDO2lCQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUM7aUJBQ2pFLEtBQUssRUFBRTtpQkFDUCxNQUFNLENBQUMsR0FBRyxDQUFDO2lCQUNYLElBQUksQ0FBQyxPQUFPLEVBQUUsK0JBQStCLENBQUM7aUJBQzlDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsNENBQTRDO2lCQUN4RixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBTSxFQUFFLEVBQUU7Z0JBQzVCLE1BQU0sQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbkMsTUFBTSxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuQyxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ2hDLENBQUMsQ0FBQztpQkFDRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsOENBQThDO1lBRXJFLGlDQUFpQztZQUNqQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQTZCLENBQU07Z0JBQ2pELGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdkMsQ0FBQyxDQUFDLENBQUM7WUFFSCxrQ0FBa0M7WUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7WUFFeEMsSUFBSSxpQkFBaUIsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDdkMsK0JBQStCO2dCQUMvQixVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLENBQVMsRUFBRSxLQUFZLEVBQUUsRUFBRTtvQkFDbEQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFDcEIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN6QixNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNsRSxNQUFNLFVBQVUsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBRTNHLDJEQUEyRDtvQkFDM0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLElBQUksS0FBSyxDQUFDO29CQUNwQyxJQUFJLENBQUMsY0FBYyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUVyRCwwQ0FBMEM7b0JBQzFDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxFQUFFO3lCQUMxQixNQUFNLENBQUMsT0FBTyxDQUFDO3lCQUNmLE1BQU0sQ0FBQyxlQUFlLENBQUM7eUJBQ3ZCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO3lCQUN6QixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQzt5QkFDMUIsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUM7eUJBQ3hCLElBQUksQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDO3lCQUMxQixJQUFJLENBQUMsT0FBTyxFQUFFLG1DQUFtQyxDQUFDO3lCQUNsRCxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBaUIsRUFBRSxFQUFFO3dCQUNqQyx1RUFBdUU7d0JBQ3ZFLG9DQUFvQzt3QkFDcEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQXFCLENBQUM7d0JBQzNDLE1BQU0sYUFBYSxHQUNqQixNQUFNLENBQUMsT0FBTyxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLDRCQUE0QixDQUFDLENBQUM7d0JBRXhHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQzs0QkFDbkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ2pDLENBQUM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7b0JBRUwsb0NBQW9DO29CQUNwQyxNQUFNLEdBQUcsR0FBRyxhQUFhO3lCQUN0QixNQUFNLENBQUMsV0FBVyxDQUFDO3lCQUNuQixJQUFJLENBQUMsT0FBTyxFQUFFLGlDQUFpQyxDQUFDO3lCQUNoRCxLQUFLLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQzt5QkFDdEIsS0FBSyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFFM0IsbUNBQW1DO29CQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7d0JBQ25CLDBEQUEwRDt3QkFDMUQsTUFBTSxPQUFPLEdBQWdDOzRCQUMzQyxTQUFTLEVBQUUsSUFBZ0Y7eUJBQzVGLENBQUM7d0JBRUYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLGFBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQzt3QkFDbEYsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO3dCQUV4QixzQ0FBc0M7d0JBQ3RDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7d0JBQ2hDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7NEJBQ3pCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQy9CLENBQUM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04saUVBQWlFO2dCQUNqRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLENBQVMsRUFBRSxLQUFZLEVBQUUsRUFBRTtvQkFDbEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZDLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7b0JBQ3BCLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBRWxFLDRDQUE0QztvQkFDNUMsS0FBSzt5QkFDRixNQUFNLENBQUMsTUFBTSxDQUFDO3lCQUNkLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO3lCQUN6QixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQzt5QkFDMUIsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUM7eUJBQ3hCLElBQUksQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDO3lCQUMxQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQzt5QkFDYixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQzt5QkFDYixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksZ0RBQWdELENBQUM7eUJBQzVFLElBQUksQ0FBQyxRQUFRLEVBQUUsdURBQXVELENBQUM7eUJBQ3ZFLElBQUksQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBQzt5QkFDN0MsSUFBSSxDQUFDLE9BQU8sRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO29CQUU1QyxrQkFBa0I7b0JBQ2xCLEtBQUs7eUJBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQzt5QkFDZCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO3lCQUNkLElBQUksQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDO3lCQUM3QixJQUFJLENBQUMsT0FBTyxFQUFFLCtCQUErQixDQUFDO3lCQUM5QyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQzt5QkFDckIsSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUM7eUJBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7b0JBRXZDLHVCQUF1QjtvQkFDdkIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ2xCLEtBQUs7NkJBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQzs2QkFDZCxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQzs2QkFDYixJQUFJLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQzs2QkFDN0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxrQ0FBa0MsQ0FBQzs2QkFDakQsSUFBSSxDQUFDLE1BQU0sRUFBRSwwQkFBMEIsQ0FBQzs2QkFDeEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUM7NkJBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3pCLENBQUM7b0JBRUQseUJBQXlCO29CQUN6QixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDZCxLQUFLOzZCQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUM7NkJBQ2QsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7NkJBQ2IsSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUM7NkJBQzdCLElBQUksQ0FBQyxPQUFPLEVBQUUsOEJBQThCLENBQUM7NkJBQzdDLElBQUksQ0FBQyxNQUFNLEVBQUUsMEJBQTBCLENBQUM7NkJBQ3hDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDOzZCQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNyQixDQUFDO29CQUVELHFEQUFxRDtvQkFDckQsSUFBSSxXQUFXLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO3dCQUN2QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFFNUYsb0NBQW9DO3dCQUNwQyxLQUFLOzZCQUNGLE1BQU0sQ0FBQyxRQUFRLENBQUM7NkJBQ2hCLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDOzZCQUNiLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7NkJBQzlCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs2QkFDaEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUM7NkJBQ3JCLElBQUksQ0FBQyxRQUFRLEVBQUUsdURBQXVELENBQUM7NkJBQ3ZFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDOzZCQUN2QixJQUFJLENBQUMsT0FBTyxFQUFFLHFDQUFxQyxDQUFDOzZCQUNwRCxLQUFLLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQzs2QkFDMUIsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQWlCLEVBQUUsRUFBRTs0QkFDakMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDOzRCQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDM0IsQ0FBQyxDQUFDLENBQUM7d0JBRUwsY0FBYzt3QkFDZCxLQUFLOzZCQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUM7NkJBQ2QsSUFBSSxDQUFDLEdBQUcsRUFBRSxTQUFTLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs2QkFDN0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDOzZCQUMvQixJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQzs2QkFDcEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUM7NkJBQzdCLElBQUksQ0FBQyxPQUFPLEVBQUUsZ0NBQWdDLENBQUM7NkJBQy9DLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxnREFBZ0QsQ0FBQzs2QkFDNUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUM7NkJBQzNCLEtBQUssQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDOzZCQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQzs2QkFDNUIsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQWlCLEVBQUUsRUFBRTs0QkFDakMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDOzRCQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDM0IsQ0FBQyxDQUFDLENBQUM7b0JBQ1AsQ0FBQztvQkFFRCxtQkFBbUI7b0JBQ25CLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNkLEtBQUs7NkJBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQzs2QkFDZCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7NkJBQzlCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDOzZCQUNaLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDOzZCQUNwQixJQUFJLENBQUMsT0FBTyxFQUFFLDhCQUE4QixDQUFDOzZCQUM3QyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQzs2QkFDckIsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzlCLENBQUM7b0JBRUQsc0NBQXNDO29CQUN0QyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQWlCLEVBQUUsRUFBRTt3QkFDdEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ2pDLENBQUMsQ0FBQyxDQUFDO29CQUVILHlCQUF5QjtvQkFDekIsSUFBSSxPQUFPLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQzt3QkFDOUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUNyRSxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksVUFBVSxDQUFDLE1BQWM7UUFDOUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDckQsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQyxNQUFNLFFBQVEsR0FBRyxZQUFZLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO1FBRXBFLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXZDLG9CQUFvQjtRQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUM1RCxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO29CQUNuQixJQUFJLEVBQUUsSUFBSTtvQkFDVixRQUFRLEVBQUUsUUFBUTtpQkFDbkIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsb0RBQW9EO1FBQ3BELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOztPQUVHO0lBQ0sscUJBQXFCLENBQUMsTUFBYyxFQUFFLFFBQWlCO1FBQzdELElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUFFLE9BQU87UUFFL0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDakMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLGFBQWEsQ0FBQztZQUN0RCxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxHQUFHO2dCQUFFLE9BQU87WUFFakIsNkRBQTZEO1lBQzdELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsTUFBTSxJQUFJLENBQUMsQ0FBQztZQUMzRSxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUU7Z0JBQUUsT0FBTztZQUU5Qix3Q0FBd0M7WUFDeEMsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztnQkFDeEIsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsaURBQWlEO1FBQ2pELHVFQUF1RTtRQUN2RSw0REFBNEQ7UUFDNUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUEwQixFQUFFLEVBQVU7UUFDL0QsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ25CLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNsQyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLEtBQUssRUFBRSxDQUFDO29CQUNWLE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0ssZUFBZSxDQUFDLEtBQWlCLEVBQUUsQ0FBTTtRQUMvQyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBRXBCLG1CQUFtQjtRQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztZQUNsQixLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFDM0MsSUFBSSxFQUFFLElBQUk7WUFDVixPQUFPLEVBQUUsS0FBSyxDQUFDLGFBQTRCO1NBQzVDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVk7UUFDakIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLGFBQWEsQ0FBQztRQUN2RCxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFFdkIsc0JBQXNCO1FBQ3RCLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNSLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssaUJBQWlCLENBQUMsTUFBZTtRQUN2QyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUM7UUFFM0MsUUFBUSxNQUFNLEVBQUUsQ0FBQztZQUNmLEtBQUssUUFBUTtnQkFDWCxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDO1lBQzVCLEtBQUssTUFBTTtnQkFDVCxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDO1lBQy9CLEtBQUssU0FBUztnQkFDWixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDO1lBQzVCLEtBQUssVUFBVTtnQkFDYixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDO1lBQzdCLEtBQUssYUFBYTtnQkFDaEIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQztZQUMvQixLQUFLLE9BQU87Z0JBQ1YsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQztZQUMzQixLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQztZQUM3QixLQUFLLFdBQVc7Z0JBQ2QsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQztZQUM5QixLQUFLLGNBQWM7Z0JBQ2pCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUM7WUFDaEM7Z0JBQ0UsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssaUJBQWlCLENBQUMsZ0JBQTZCO1FBQ3JELGdDQUFnQztRQUNoQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUV6RCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxFQUFFO2FBQzdCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQzthQUN4QixNQUFNLENBQUMsS0FBSyxDQUFDO2FBQ2IsSUFBSSxDQUFDLE9BQU8sRUFBRSxvQ0FBb0MsQ0FBQzthQUNuRCxLQUFLLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQzthQUM3QixLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQzthQUNwQixLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQzthQUNuQixLQUFLLENBQUMsV0FBVyxFQUFFLHVCQUF1QixDQUFDO2FBQzNDLEtBQUssQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDO2FBQzdCLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSw4Q0FBOEMsQ0FBQzthQUN6RSxLQUFLLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQzthQUMxQixLQUFLLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQzthQUNoQyxLQUFLLENBQUMsWUFBWSxFQUFFLGdDQUFnQyxDQUFDO2FBQ3JELEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO2FBQ3JCLEtBQUssQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFL0IsY0FBYztRQUNkLGdCQUFnQjthQUNiLE1BQU0sQ0FBQyxLQUFLLENBQUM7YUFDYixJQUFJLENBQUMsT0FBTyxFQUFFLGlDQUFpQyxDQUFDO2FBQ2hELEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDO2FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsU0FBUyxDQUFDO2FBQ2pDLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFVBQVUsY0FBYyxDQUFDLENBQUM7UUFFeEUsbUJBQW1CO1FBQ25CLGdCQUFnQjthQUNiLE1BQU0sQ0FBQyxLQUFLLENBQUM7YUFDYixJQUFJLENBQUMsT0FBTyxFQUFFLGlDQUFpQyxDQUFDO2FBQ2hELEtBQUssQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDO2FBQzFCLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDO2FBQzNCLEtBQUssQ0FBQyxlQUFlLEVBQUUsUUFBUSxDQUFDO2FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV6QyxnQkFBZ0I7UUFDaEIsZ0JBQWdCO2FBQ2IsTUFBTSxDQUFDLEtBQUssQ0FBQzthQUNiLElBQUksQ0FBQyxPQUFPLEVBQUUsaUNBQWlDLENBQUM7YUFDaEQsS0FBSyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUM7YUFDNUIsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUM7YUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7d0dBdnZCVSx5QkFBeUI7NEZBQXpCLHlCQUF5QixrekJDOUN0Qyx5RUFDQTs7NEZENkNhLHlCQUF5QjtrQkFSckMsU0FBUzsrQkFDRSxvQkFBb0IsY0FHbEIsSUFBSSxpQkFDRCxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNO3NHQUl5QixnQkFBZ0IsK0VBR1osY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ2hhcnRDb21wb25lbnQsIEFYQ2hhcnRDb21wb25lbnRCYXNlIH0gZnJvbSAnQGFjb3JleC9jaGFydHMnO1xuXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBOZ1pvbmUsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgYWZ0ZXJOZXh0UmVuZGVyLFxuICBjb21wdXRlZCxcbiAgY29udGVudENoaWxkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxuICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhfSElFUkFSQ0hZX0NIQVJUX0NPTkZJRyB9IGZyb20gJy4vaGllcmFyY2h5LWNoYXJ0LmNvbmZpZyc7XG5pbXBvcnQge1xuICBBWEhpZXJhcmNoeUNoYXJ0Q2xpY2tFdmVudCxcbiAgQVhIaWVyYXJjaHlDaGFydERhdGEsXG4gIEFYSGllcmFyY2h5Q2hhcnROb2RlLFxuICBBWEhpZXJhcmNoeUNoYXJ0Tm9kZUNvbnRleHQsXG4gIEFYSGllcmFyY2h5Q2hhcnRPcHRpb24sXG4gIEFYSGllcmFyY2h5Q2hhcnRUb2dnbGVFdmVudCxcbn0gZnJvbSAnLi9oaWVyYXJjaHktY2hhcnQudHlwZSc7XG4vKipcbiAqIEEgaGlnaGx5IGN1c3RvbWl6YWJsZSBoaWVyYXJjaGljYWwgdmlzdWFsaXphdGlvbiBjb21wb25lbnQgdGhhdCBjYW4gYmUgdXNlZCBmb3I6XG4gKiAtIE9yZ2FuaXphdGlvbiBjaGFydHNcbiAqIC0gVHJlZSBkaWFncmFtc1xuICogLSBEZXBlbmRlbmN5IHZpc3VhbGl6YXRpb25zXG4gKiAtIFByb2Nlc3MgZmxvd3NcbiAqXG4gKiBTdXBwb3J0cyBib3RoIGRlZmF1bHQgbm9kZSBzdHlsaW5nIGFuZCBjdXN0b20gbm9kZSB0ZW1wbGF0ZXMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LWhpZXJhcmNoeS1jaGFydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9oaWVyYXJjaHktY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9oaWVyYXJjaHktY2hhcnQuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFYSGllcmFyY2h5Q2hhcnRDb21wb25lbnQgZXh0ZW5kcyBBWENoYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgQVhDaGFydENvbXBvbmVudEJhc2Uge1xuICAvLyBDaGFydCBjb250YWluZXIgcmVmZXJlbmNlXG4gIHByaXZhdGUgY2hhcnRDb250YWluZXIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4+KCdjaGFydENvbnRhaW5lcicpO1xuXG4gIC8vIEN1c3RvbSBub2RlIHRlbXBsYXRlIHByb3ZpZGVkIGJ5IHRoZSB1c2VyXG4gIGN1c3RvbU5vZGVUZW1wbGF0ZSA9IGNvbnRlbnRDaGlsZDxUZW1wbGF0ZVJlZjxBWEhpZXJhcmNoeUNoYXJ0Tm9kZUNvbnRleHQ+Pignbm9kZVRlbXBsYXRlJyk7XG4gIC8vIFNlcnZpY2VzXG4gIHByaXZhdGUgbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcbiAgcHJpdmF0ZSBjb25maWdUb2tlbiA9IGluamVjdChBWF9ISUVSQVJDSFlfQ0hBUlRfQ09ORklHKTtcblxuICAvLyBEMyBpbnN0YW5jZVxuICBwcml2YXRlIGQzOiBhbnk7XG5cbiAgLy8gSW50ZXJuYWwgc3RhdGUgc2lnbmFsc1xuICBwcml2YXRlIF9leHBhbmRlZE5vZGVzID0gc2lnbmFsPE1hcDxzdHJpbmcsIGJvb2xlYW4+PihuZXcgTWFwKCkpO1xuICBwcml2YXRlIF9pbml0aWFsaXplZCA9IHNpZ25hbChmYWxzZSk7XG4gIHByaXZhdGUgX3JlbmRlcmVkID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJpdmF0ZSBfZGltZW5zaW9ucyA9IHNpZ25hbCh7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSk7XG4gIHByaXZhdGUgX25vZGVFbGVtZW50cyA9IHNpZ25hbDxNYXA8c3RyaW5nLCBhbnk+PihuZXcgTWFwKCkpOyAvLyBTdG9yZSByZWZlcmVuY2VzIHRvIG5vZGUgZWxlbWVudHNcbiAgcHJpdmF0ZSBfY2hhcnREYXRhID0gc2lnbmFsPGFueT4obnVsbCk7IC8vIFN0b3JlIHRoZSBjdXJyZW50IGNoYXJ0IGRhdGEgYW5kIGxheW91dFxuXG4gIC8vIElucHV0c1xuICBkYXRhID0gaW5wdXQ8QVhIaWVyYXJjaHlDaGFydERhdGEgfCBBWEhpZXJhcmNoeUNoYXJ0RGF0YVtdPihbXSk7XG4gIG9wdGlvbnMgPSBpbnB1dDxBWEhpZXJhcmNoeUNoYXJ0T3B0aW9uPih7fSk7XG4gIG5vZGVUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPEFYSGllcmFyY2h5Q2hhcnROb2RlQ29udGV4dD4gfCBudWxsPihudWxsKTtcblxuICAvLyBPdXRwdXRzXG4gIGl0ZW1DbGljayA9IG91dHB1dDxBWEhpZXJhcmNoeUNoYXJ0Q2xpY2tFdmVudD4oKTtcbiAgbm9kZVRvZ2dsZSA9IG91dHB1dDxBWEhpZXJhcmNoeUNoYXJ0VG9nZ2xlRXZlbnQ+KCk7XG5cbiAgLy8gQ29tcHV0ZWQgdmFsdWVzXG4gIHByb3RlY3RlZCBwcm9jZXNzZWREYXRhID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGEoKTtcbiAgICAvLyBIYW5kbGUgYm90aCBzaW5nbGUgbm9kZSBhbmQgYXJyYXkgZm9ybWF0c1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGRhdGEpID8geyBpZDogJ3Jvb3QnLCBjaGlsZHJlbjogZGF0YSB9IDogZGF0YTtcbiAgfSk7XG5cbiAgLy8gQ2hlY2sgaWYgY3VzdG9tIHRlbXBsYXRlIGlzIGF2YWlsYWJsZVxuICBwcm90ZWN0ZWQgaGFzQ3VzdG9tVGVtcGxhdGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5jdXN0b21Ob2RlVGVtcGxhdGUoKSB8fCB0aGlzLm5vZGVUZW1wbGF0ZSgpKTtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIGVmZmVjdGl2ZU9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuY29uZmlnVG9rZW4sXG4gICAgICAuLi50aGlzLm9wdGlvbnMoKSxcbiAgICB9O1xuICB9KTtcblxuICAvLyBNZXNzYWdlcyB3aXRoIGRlZmF1bHRzXG4gIHByb3RlY3RlZCBlZmZlY3RpdmVNZXNzYWdlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBkZWZhdWx0TWVzc2FnZXMgPSB7XG4gICAgICBub0RhdGE6ICdObyBkYXRhIGF2YWlsYWJsZScsXG4gICAgICBub0RhdGFIZWxwOiAnUGxlYXNlIHByb3ZpZGUgaGllcmFyY2h5IGRhdGEgdG8gZGlzcGxheSB0aGUgY2hhcnQnLFxuICAgICAgbm9EYXRhSWNvbjogJ2ZhLWxpZ2h0IGZhLXNpdGVtYXAnLFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZmF1bHRNZXNzYWdlcyxcbiAgICAgIC4uLnRoaXMuZWZmZWN0aXZlT3B0aW9ucygpLm1lc3NhZ2VzLFxuICAgIH07XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgLy8gRHluYW1pY2FsbHkgbG9hZCBEMyBhbmQgaW5pdGlhbGl6ZSB0aGUgY2hhcnQgd2hlbiB0aGUgY29tcG9uZW50IGlzIHJlYWR5XG4gICAgYWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcbiAgICAgIHRoaXMuX2luaXRpYWxpemVkLnNldCh0cnVlKTtcbiAgICAgIHRoaXMubG9hZEQzKCk7XG4gICAgICB0aGlzLmluaXRpYWxpemVFeHBhbmRlZFN0YXRlKCk7XG4gICAgfSk7XG5cbiAgICAvLyBXYXRjaCBmb3IgY2hhbmdlcyB0byByZWRyYXcgdGhlIGNoYXJ0XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIC8vIEFjY2VzcyB0aGVzZSB0byB0cmFjayB0aGVtXG4gICAgICB0aGlzLnByb2Nlc3NlZERhdGEoKTtcbiAgICAgIHRoaXMubm9kZVRlbXBsYXRlKCk7XG4gICAgICB0aGlzLmN1c3RvbU5vZGVUZW1wbGF0ZSgpO1xuICAgICAgdGhpcy5lZmZlY3RpdmVPcHRpb25zKCk7XG4gICAgICB0aGlzLl9leHBhbmRlZE5vZGVzKCk7XG5cbiAgICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCgpICYmIHRoaXMuZDMgJiYgdGhpcy5fcmVuZGVyZWQoKSkge1xuICAgICAgICB0aGlzLmNyZWF0ZUNoYXJ0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgZXhwYW5kZWQgc3RhdGUgZm9yIGFsbCBub2Rlc1xuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplRXhwYW5kZWRTdGF0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdFeHBhbmRlZE5vZGVzID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucHJvY2Vzc2VkRGF0YSgpO1xuICAgIGNvbnN0IGV4cGFuZEFsbCA9IHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpLmV4cGFuZEFsbDtcblxuICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byByZWN1cnNpdmVseSBwcm9jZXNzIG5vZGVzXG4gICAgY29uc3QgcHJvY2Vzc05vZGUgPSAobm9kZTogQVhIaWVyYXJjaHlDaGFydERhdGEpID0+IHtcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBTZXQgaW5pdGlhbCBleHBhbnNpb24gc3RhdGUgYmFzZWQgb24gbm9kZSBwcm9wZXJ0eSBvciBnbG9iYWwgb3B0aW9uXG4gICAgICAgIG5ld0V4cGFuZGVkTm9kZXMuc2V0KG5vZGUuaWQsIG5vZGUuaXNFeHBhbmRlZCAhPT0gdW5kZWZpbmVkID8gbm9kZS5pc0V4cGFuZGVkIDogZXhwYW5kQWxsKTtcblxuICAgICAgICAvLyBQcm9jZXNzIGNoaWxkcmVuXG4gICAgICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHByb2Nlc3NOb2RlKGNoaWxkKSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIFN0YXJ0IHByb2Nlc3NpbmdcbiAgICBpZiAoZGF0YS5jaGlsZHJlbikge1xuICAgICAgZGF0YS5jaGlsZHJlbi5mb3JFYWNoKChub2RlKSA9PiBwcm9jZXNzTm9kZShub2RlKSk7XG4gICAgfSBlbHNlIGlmICgoZGF0YSBhcyBhbnkpLmlkKSB7XG4gICAgICBwcm9jZXNzTm9kZShkYXRhIGFzIEFYSGllcmFyY2h5Q2hhcnREYXRhKTtcbiAgICB9XG5cbiAgICB0aGlzLl9leHBhbmRlZE5vZGVzLnNldChuZXdFeHBhbmRlZE5vZGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEeW5hbWljYWxseSBsb2FkIEQzLmpzIHRvIHJlZHVjZSBpbml0aWFsIGJ1bmRsZSBzaXplXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgbG9hZEQzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmQzID0gYXdhaXQgaW1wb3J0KCdkMycpO1xuICAgICAgaWYgKHRoaXMuX2luaXRpYWxpemVkKCkgJiYgdGhpcy5jaGFydENvbnRhaW5lcigpKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRGltZW5zaW9ucygpO1xuICAgICAgICB0aGlzLmNyZWF0ZUNoYXJ0KCk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVkLnNldCh0cnVlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgRDMuanM6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgZGltZW5zaW9ucyBiYXNlZCBvbiBjb250YWluZXIgc2l6ZVxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVEaW1lbnNpb25zKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY2hhcnRDb250YWluZXIoKS5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKTtcblxuICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qgd2lkdGggPSBvcHRpb25zLndpZHRoIHx8IE1hdGgubWF4KGNvbnRhaW5lclJlY3Qud2lkdGgsIDMwMCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHQgfHwgTWF0aC5tYXgoY29udGFpbmVyUmVjdC5oZWlnaHQsIDQwMCk7XG5cbiAgICB0aGlzLl9kaW1lbnNpb25zLnNldCh7IHdpZHRoLCBoZWlnaHQgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuZCByZW5kZXIgdGhlIGhpZXJhcmNoeSBjaGFydFxuICAgKi9cbiAgcHVibGljIGNyZWF0ZUNoYXJ0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kMykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENsZWFyIGFueSBleGlzdGluZyBjaGFydFxuICAgIHRoaXMuY2xlYW51cENoYXJ0KCk7XG5cbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmNoYXJ0Q29udGFpbmVyKCkubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5wcm9jZXNzZWREYXRhKCk7XG5cbiAgICAvLyBDaGVjayBmb3IgbnVsbC91bmRlZmluZWQgZGF0YSBvciBlbXB0eSBjaGlsZHJlblxuICAgIGlmICghZGF0YSB8fCAhZGF0YS5jaGlsZHJlbiB8fCBkYXRhLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zaG93Tm9EYXRhTWVzc2FnZShjb250YWluZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKTtcbiAgICBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5fZGltZW5zaW9ucygpO1xuICAgIGNvbnN0IGV4cGFuZGVkTm9kZXMgPSB0aGlzLl9leHBhbmRlZE5vZGVzKCk7XG5cbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAvLyBHZXQgZGltZW5zaW9ucyBhbmQgb3B0aW9uc1xuICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBkaW1lbnNpb25zO1xuICAgICAgY29uc3QgbWFyZ2luID0gb3B0aW9ucy5tYXJnaW4gfHwgeyB0b3A6IDQwLCByaWdodDogMTIwLCBib3R0b206IDQwLCBsZWZ0OiAxMjAgfTtcbiAgICAgIGNvbnN0IG5vZGVXaWR0aCA9IG9wdGlvbnMubm9kZVdpZHRoIHx8IDEyMDtcbiAgICAgIGNvbnN0IG5vZGVIZWlnaHQgPSBvcHRpb25zLm5vZGVIZWlnaHQgfHwgNjA7XG4gICAgICBjb25zdCBub2RlU3BhY2luZ1ggPSBvcHRpb25zLm5vZGVTcGFjaW5nWCB8fCA4MDtcbiAgICAgIGNvbnN0IG5vZGVTcGFjaW5nWSA9IG9wdGlvbnMubm9kZVNwYWNpbmdZIHx8IDEyMDtcbiAgICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IG9wdGlvbnMuZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCc7XG5cbiAgICAgIC8vIENyZWF0ZSBTVkcgY29udGFpbmVyIHdpdGggdmlld0JveCBmb3IgcmVzcG9uc2l2ZW5lc3NcbiAgICAgIGNvbnN0IHN2ZyA9IHRoaXMuZDNcbiAgICAgICAgLnNlbGVjdChjb250YWluZXIpXG4gICAgICAgIC5hcHBlbmQoJ3N2ZycpXG4gICAgICAgIC5hdHRyKCd3aWR0aCcsICcxMDAlJylcbiAgICAgICAgLmF0dHIoJ2hlaWdodCcsICcxMDAlJylcbiAgICAgICAgLmF0dHIoJ3ZpZXdCb3gnLCBgMCAwICR7d2lkdGh9ICR7aGVpZ2h0fWApXG4gICAgICAgIC5hdHRyKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ3hNaWRZTWlkIG1lZXQnKVxuICAgICAgICAuc3R5bGUoJ292ZXJmbG93JywgJ3Zpc2libGUnKVxuICAgICAgICAuY2xhc3NlZChvcHRpb25zLmNsYXNzTmFtZSB8fCAnJywgISFvcHRpb25zLmNsYXNzTmFtZSk7XG5cbiAgICAgIC8vIENyZWF0ZSBoaWVyYXJjaHkgbGF5b3V0IGZyb20gZGF0YVxuICAgICAgY29uc3Qgcm9vdERhdGEgPSB0aGlzLnByb2Nlc3NlZERhdGEoKTtcbiAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLmQzLmhpZXJhcmNoeShyb290RGF0YSk7XG5cbiAgICAgIC8vIEFwcGx5IGV4cGFuc2lvbiBzdGF0ZSB0byBub2Rlc1xuICAgICAgcm9vdC5kZXNjZW5kYW50cygpLmZvckVhY2goKG5vZGU6IGFueSkgPT4ge1xuICAgICAgICBpZiAobm9kZS5kYXRhLmlkICE9PSAncm9vdCcgJiYgbm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgIGlmIChleHBhbmRlZE5vZGVzLmhhcyhub2RlLmRhdGEuaWQpICYmICFleHBhbmRlZE5vZGVzLmdldChub2RlLmRhdGEuaWQpKSB7XG4gICAgICAgICAgICBub2RlLl9jaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47IC8vIFN0b3JlIGNoaWxkcmVuXG4gICAgICAgICAgICBub2RlLmNoaWxkcmVuID0gbnVsbDsgLy8gQ29sbGFwc2Ugbm9kZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFNldCB1cCB0aGUgdHJlZSBsYXlvdXQgYmFzZWQgb24gZGlyZWN0aW9uIG9wdGlvblxuICAgICAgY29uc3QgdHJlZUxheW91dCA9IHRoaXMuZDNcbiAgICAgICAgLnRyZWUoKVxuICAgICAgICAubm9kZVNpemUoW1xuICAgICAgICAgIGlzSG9yaXpvbnRhbCA/IG5vZGVIZWlnaHQgKyBub2RlU3BhY2luZ1kgOiBub2RlV2lkdGggKyBub2RlU3BhY2luZ1gsXG4gICAgICAgICAgaXNIb3Jpem9udGFsID8gbm9kZVdpZHRoICsgbm9kZVNwYWNpbmdYIDogbm9kZUhlaWdodCArIG5vZGVTcGFjaW5nWSxcbiAgICAgICAgXSlcbiAgICAgICAgLnNlcGFyYXRpb24oKGE6IGFueSwgYjogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGEucGFyZW50ID09PSBiLnBhcmVudCA/IDEuMiA6IDEuNTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHRyZWVMYXlvdXQocm9vdCk7XG5cbiAgICAgIC8vIFN0b3JlIHRoZSBjdXJyZW50IHRyZWUgbGF5b3V0IGRhdGEgZm9yIGZ1dHVyZSB1cGRhdGVzXG4gICAgICB0aGlzLl9jaGFydERhdGEuc2V0KHtcbiAgICAgICAgcm9vdCxcbiAgICAgICAgdHJlZUxheW91dCxcbiAgICAgICAgaXNIb3Jpem9udGFsLFxuICAgICAgICBub2RlV2lkdGgsXG4gICAgICAgIG5vZGVIZWlnaHQsXG4gICAgICB9KTtcblxuICAgICAgLy8gQWRqdXN0IHJvb3QgcG9zaXRpb24gYmFzZWQgb24gZGlyZWN0aW9uXG4gICAgICBjb25zdCByb290WCA9IGlzSG9yaXpvbnRhbCA/IG1hcmdpbi50b3AgOiB3aWR0aCAvIDI7XG4gICAgICBjb25zdCByb290WSA9IGlzSG9yaXpvbnRhbCA/IG1hcmdpbi5sZWZ0IDogbWFyZ2luLnRvcDtcblxuICAgICAgLy8gQ2FsY3VsYXRlIGJvdW5kcyBvZiB0aGUgdHJlZSBhZnRlciBsYXlvdXRcbiAgICAgIGxldCBtaW5YID0gSW5maW5pdHk7XG4gICAgICBsZXQgbWF4WCA9IC1JbmZpbml0eTtcbiAgICAgIGxldCBtaW5ZID0gSW5maW5pdHk7XG4gICAgICBsZXQgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgICAgcm9vdC5kZXNjZW5kYW50cygpLmZvckVhY2goKGQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZC5kYXRhLmlkID09PSAncm9vdCcpIHJldHVybjtcblxuICAgICAgICBjb25zdCB4ID0gaXNIb3Jpem9udGFsID8gZC54IDogZC54O1xuICAgICAgICBjb25zdCB5ID0gaXNIb3Jpem9udGFsID8gZC55IDogZC55O1xuXG4gICAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCB4KTtcbiAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIHgpO1xuICAgICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgeSk7XG4gICAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCB5KTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGNlbnRlciBvZiB0aGUgdHJlZVxuICAgICAgY29uc3QgY2VudGVyWCA9IChtaW5YICsgbWF4WCkgLyAyO1xuICAgICAgY29uc3QgY2VudGVyWSA9IChtaW5ZICsgbWF4WSkgLyAyO1xuXG4gICAgICAvLyBDcmVhdGUgYSBncm91cCBmb3IgdGhlIGNoYXJ0IGNvbnRlbnQgd2l0aCBwcm9wZXIgY2VudGVyaW5nXG4gICAgICBjb25zdCBnID0gc3ZnXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAndHJhbnNmb3JtJyxcbiAgICAgICAgICBpc0hvcml6b250YWxcbiAgICAgICAgICAgID8gYHRyYW5zbGF0ZSgke21hcmdpbi5sZWZ0fSwgJHtoZWlnaHQgLyAyIC0gY2VudGVyWH0pYFxuICAgICAgICAgICAgOiBgdHJhbnNsYXRlKCR7d2lkdGggLyAyfSwgJHttYXJnaW4udG9wfSlgLFxuICAgICAgICApO1xuXG4gICAgICAvLyBBZGQgem9vbSBhbmQgcGFuIGJlaGF2aW9yIChyZXBsYWNlcyBBWFBhblZpZXdEaXJlY3RpdmUpXG4gICAgICBjb25zdCB6b29tID0gdGhpcy5kM1xuICAgICAgICAuem9vbSgpXG4gICAgICAgIC5zY2FsZUV4dGVudChbMC4xLCAzXSkgLy8gTWluIHpvb206IDEwJSwgTWF4IHpvb206IDMwMCVcbiAgICAgICAgLm9uKCd6b29tJywgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBnLmF0dHIoJ3RyYW5zZm9ybScsIGV2ZW50LnRyYW5zZm9ybSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAvLyBBcHBseSB6b29tIGJlaGF2aW9yIHRvIFNWR1xuICAgICAgc3ZnLmNhbGwoem9vbSk7XG5cbiAgICAgIC8vIFNldCBpbml0aWFsIHRyYW5zZm9ybSB0byBtYXRjaCB0aGUgY2VudGVyaW5nXG4gICAgICBjb25zdCBpbml0aWFsVHJhbnNmb3JtID0gdGhpcy5kMy56b29tSWRlbnRpdHlcbiAgICAgICAgLnRyYW5zbGF0ZShcbiAgICAgICAgICBpc0hvcml6b250YWwgPyBtYXJnaW4ubGVmdCA6IHdpZHRoIC8gMixcbiAgICAgICAgICBpc0hvcml6b250YWwgPyBoZWlnaHQgLyAyIC0gY2VudGVyWCA6IG1hcmdpbi50b3BcbiAgICAgICAgKTtcbiAgICAgIHN2Zy5jYWxsKHpvb20udHJhbnNmb3JtLCBpbml0aWFsVHJhbnNmb3JtKTtcblxuICAgICAgLy8gRHJhdyBsaW5rcyBiZXR3ZWVuIG5vZGVzXG4gICAgICBjb25zdCBsaW5rcyA9IGdcbiAgICAgICAgLnNlbGVjdEFsbCgnLmxpbmsnKVxuICAgICAgICAuZGF0YShyb290LmxpbmtzKCkuZmlsdGVyKChkOiBhbnkpID0+IGQuc291cmNlLmRhdGEuaWQgIT09ICdyb290JykpXG4gICAgICAgIC5lbnRlcigpXG4gICAgICAgIC5hcHBlbmQoJ3BhdGgnKVxuICAgICAgICAuYXR0cignY2xhc3MnLCAnYXgtaGllcmFyY2h5LWNoYXJ0LWxpbmsnKVxuICAgICAgICAuYXR0cignZCcsIChkOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyBHZXQgdGhlIGxpbmsgc3R5bGUgZnJvbSBvcHRpb25zXG4gICAgICAgICAgY29uc3QgbGlua1N0eWxlID0gb3B0aW9ucy5saW5rU3R5bGUgfHwgJ2N1cnZlZCc7XG5cbiAgICAgICAgICAvLyBTb3VyY2UgYW5kIHRhcmdldCBjb29yZGluYXRlcyBiYXNlZCBvbiBkaXJlY3Rpb25cbiAgICAgICAgICBjb25zdCBzb3VyY2VYID0gaXNIb3Jpem9udGFsID8gZC5zb3VyY2UueSA6IGQuc291cmNlLng7XG4gICAgICAgICAgY29uc3Qgc291cmNlWSA9IGlzSG9yaXpvbnRhbCA/IGQuc291cmNlLnggOiBkLnNvdXJjZS55O1xuICAgICAgICAgIGNvbnN0IHRhcmdldFggPSBpc0hvcml6b250YWwgPyBkLnRhcmdldC55IDogZC50YXJnZXQueDtcbiAgICAgICAgICBjb25zdCB0YXJnZXRZID0gaXNIb3Jpem9udGFsID8gZC50YXJnZXQueCA6IGQudGFyZ2V0Lnk7XG5cbiAgICAgICAgICAvLyBWYXJpYWJsZXMgZm9yIHJvdW5kZWQgY29ybmVyc1xuICAgICAgICAgIGxldCB4RGlzdGFuY2UsIHlEaXN0YW5jZSwgY29ybmVyUmFkaXVzLCBtaWRYLCBtaWRZO1xuXG4gICAgICAgICAgc3dpdGNoIChsaW5rU3R5bGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3N0cmFpZ2h0JzpcbiAgICAgICAgICAgICAgLy8gRGlyZWN0IHN0cmFpZ2h0IGxpbmVcbiAgICAgICAgICAgICAgcmV0dXJuIGBNJHtzb3VyY2VYfSwke3NvdXJjZVl9TCR7dGFyZ2V0WH0sJHt0YXJnZXRZfWA7XG5cbiAgICAgICAgICAgIGNhc2UgJ3JvdW5kZWQnOlxuICAgICAgICAgICAgICAvLyBDdXJ2ZWQgbGluZSB3aXRoIHJvdW5kZWQgY29ybmVyc1xuICAgICAgICAgICAgICB4RGlzdGFuY2UgPSBNYXRoLmFicyh0YXJnZXRYIC0gc291cmNlWCk7XG4gICAgICAgICAgICAgIHlEaXN0YW5jZSA9IE1hdGguYWJzKHRhcmdldFkgLSBzb3VyY2VZKTtcbiAgICAgICAgICAgICAgY29ybmVyUmFkaXVzID0gTWF0aC5taW4oeERpc3RhbmNlLCB5RGlzdGFuY2UpICogMC4yOyAvLyBSZWR1Y2VkIHJhZGl1cyBmb3IgYmV0dGVyIGFwcGVhcmFuY2VcblxuICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgLy8gRm9yIGhvcml6b250YWwgbGF5b3V0XG4gICAgICAgICAgICAgICAgY29uc3QgaGFsZkRpc3RhbmNlID0gKHRhcmdldFggLSBzb3VyY2VYKSAvIDI7XG4gICAgICAgICAgICAgICAgY29uc3QgeE1pZCA9IHNvdXJjZVggKyBoYWxmRGlzdGFuY2U7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgICAgTSR7c291cmNlWH0sJHtzb3VyY2VZfVxuICAgICAgICAgICAgICAgICAgSCR7eE1pZCAtIGNvcm5lclJhZGl1c31cbiAgICAgICAgICAgICAgICAgIFEke3hNaWR9LCR7c291cmNlWX0gJHt4TWlkfSwke3NvdXJjZVkgKyBNYXRoLnNpZ24odGFyZ2V0WSAtIHNvdXJjZVkpICogY29ybmVyUmFkaXVzfVxuICAgICAgICAgICAgICAgICAgViR7dGFyZ2V0WSAtIE1hdGguc2lnbih0YXJnZXRZIC0gc291cmNlWSkgKiBjb3JuZXJSYWRpdXN9XG4gICAgICAgICAgICAgICAgICBRJHt4TWlkfSwke3RhcmdldFl9ICR7eE1pZCArIGNvcm5lclJhZGl1c30sJHt0YXJnZXRZfVxuICAgICAgICAgICAgICAgICAgSCR7dGFyZ2V0WH1cbiAgICAgICAgICAgICAgICBgO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEZvciB2ZXJ0aWNhbCBsYXlvdXRcbiAgICAgICAgICAgICAgICBjb25zdCBoYWxmRGlzdGFuY2UgPSAodGFyZ2V0WSAtIHNvdXJjZVkpIC8gMjtcbiAgICAgICAgICAgICAgICBjb25zdCB5TWlkID0gc291cmNlWSArIGhhbGZEaXN0YW5jZTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgICAgICBNJHtzb3VyY2VYfSwke3NvdXJjZVl9XG4gICAgICAgICAgICAgICAgICBWJHt5TWlkIC0gY29ybmVyUmFkaXVzfVxuICAgICAgICAgICAgICAgICAgUSR7c291cmNlWH0sJHt5TWlkfSAke3NvdXJjZVggKyBNYXRoLnNpZ24odGFyZ2V0WCAtIHNvdXJjZVgpICogY29ybmVyUmFkaXVzfSwke3lNaWR9XG4gICAgICAgICAgICAgICAgICBIJHt0YXJnZXRYIC0gTWF0aC5zaWduKHRhcmdldFggLSBzb3VyY2VYKSAqIGNvcm5lclJhZGl1c31cbiAgICAgICAgICAgICAgICAgIFEke3RhcmdldFh9LCR7eU1pZH0gJHt0YXJnZXRYfSwke3lNaWQgKyBjb3JuZXJSYWRpdXN9XG4gICAgICAgICAgICAgICAgICBWJHt0YXJnZXRZfVxuICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FzZSAnc3RlcCc6XG4gICAgICAgICAgICAgIC8vIEwtc2hhcGVkIHN0ZXBwZWQgbGluZVxuICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBNJHtzb3VyY2VYfSwke3NvdXJjZVl9SCR7KHNvdXJjZVggKyB0YXJnZXRYKSAvIDJ9ViR7dGFyZ2V0WX1IJHt0YXJnZXRYfWA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBNJHtzb3VyY2VYfSwke3NvdXJjZVl9ViR7KHNvdXJjZVkgKyB0YXJnZXRZKSAvIDJ9SCR7dGFyZ2V0WH1WJHt0YXJnZXRZfWA7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FzZSAnY3VydmVkJzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIC8vIERlZmF1bHQgY3VydmVkIGxpbmUgdXNpbmcgRDMncyBidWlsdC1pbiBsaW5rIGdlbmVyYXRvclxuICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZDNcbiAgICAgICAgICAgICAgICAgIC5saW5rSG9yaXpvbnRhbCgpXG4gICAgICAgICAgICAgICAgICAueCgoZDogYW55KSA9PiBkLnkpXG4gICAgICAgICAgICAgICAgICAueSgoZDogYW55KSA9PiBkLngpKGQpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmQzXG4gICAgICAgICAgICAgICAgICAubGlua1ZlcnRpY2FsKClcbiAgICAgICAgICAgICAgICAgIC54KChkOiBhbnkpID0+IGQueClcbiAgICAgICAgICAgICAgICAgIC55KChkOiBhbnkpID0+IGQueSkoZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKCdzdHJva2UnLCBgcmdiKHZhcigtLWF4LWNvbXAtaGllcmFyY2h5LWNoYXJ0LWxpbmstY29sb3IpKWApXG4gICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCBvcHRpb25zLmxpbmtXaWR0aClcbiAgICAgICAgLmF0dHIoJ2ZpbGwnLCAnbm9uZScpXG4gICAgICAgIC5hdHRyKCdvcGFjaXR5JywgMSk7XG5cbiAgICAgIC8vIERldGVybWluZSB3aGljaCB0ZW1wbGF0ZSB0byB1c2UgZm9yIHJlbmRlcmluZyBub2Rlc1xuICAgICAgY29uc3QgdXNlQ3VzdG9tVGVtcGxhdGUgPSB0aGlzLmhhc0N1c3RvbVRlbXBsYXRlKCk7XG4gICAgICBjb25zdCB0ZW1wbGF0ZVRvVXNlID0gdGhpcy5ub2RlVGVtcGxhdGUoKSB8fCB0aGlzLmN1c3RvbU5vZGVUZW1wbGF0ZSgpO1xuXG4gICAgICAvLyBDcmVhdGUgYSBtYXAgdG8gc3RvcmUgbm9kZSBlbGVtZW50cyBmb3IgZnV0dXJlIHVwZGF0ZXNcbiAgICAgIGNvbnN0IG5vZGVFbGVtZW50c01hcCA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5cbiAgICAgIC8vIENyZWF0ZSBub2RlIGdyb3Vwc1xuICAgICAgY29uc3Qgbm9kZUdyb3VwcyA9IGdcbiAgICAgICAgLnNlbGVjdEFsbCgnLm5vZGUtZ3JvdXAnKVxuICAgICAgICAuZGF0YShyb290LmRlc2NlbmRhbnRzKCkuZmlsdGVyKChkOiBhbnkpID0+IGQuZGF0YS5pZCAhPT0gJ3Jvb3QnKSlcbiAgICAgICAgLmVudGVyKClcbiAgICAgICAgLmFwcGVuZCgnZycpXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdheC1oaWVyYXJjaHktY2hhcnQtbm9kZS1ncm91cCcpXG4gICAgICAgIC5hdHRyKCdkYXRhLW5vZGUtaWQnLCAoZDogYW55KSA9PiBkLmRhdGEuaWQpIC8vIEFkZCBhIGRhdGEgYXR0cmlidXRlIGZvciBlYXNpZXIgc2VsZWN0aW9uXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAoZDogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgeCA9IGlzSG9yaXpvbnRhbCA/IGQueSA6IGQueDtcbiAgICAgICAgICBjb25zdCB5ID0gaXNIb3Jpem9udGFsID8gZC54IDogZC55O1xuICAgICAgICAgIHJldHVybiBgdHJhbnNsYXRlKCR7eH0sJHt5fSlgO1xuICAgICAgICB9KVxuICAgICAgICAuYXR0cignb3BhY2l0eScsIDEpOyAvLyBEaXNwbGF5IG5vZGVzIGltbWVkaWF0ZWx5IHdpdGggZnVsbCBvcGFjaXR5XG5cbiAgICAgIC8vIFN0b3JlIG5vZGUgZWxlbWVudHMgaW4gdGhlIG1hcFxuICAgICAgbm9kZUdyb3Vwcy5lYWNoKGZ1bmN0aW9uICh0aGlzOiBTVkdHRWxlbWVudCwgZDogYW55KSB7XG4gICAgICAgIG5vZGVFbGVtZW50c01hcC5zZXQoZC5kYXRhLmlkLCB0aGlzKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBVcGRhdGUgdGhlIG5vZGUgZWxlbWVudHMgc2lnbmFsXG4gICAgICB0aGlzLl9ub2RlRWxlbWVudHMuc2V0KG5vZGVFbGVtZW50c01hcCk7XG5cbiAgICAgIGlmICh1c2VDdXN0b21UZW1wbGF0ZSAmJiB0ZW1wbGF0ZVRvVXNlKSB7XG4gICAgICAgIC8vIFJlbmRlciBjdXN0b20gbm9kZSB0ZW1wbGF0ZXNcbiAgICAgICAgbm9kZUdyb3Vwcy5lYWNoKChkOiBhbnksIGk6IG51bWJlciwgbm9kZXM6IGFueVtdKSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IGQuZGF0YTtcbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gbm9kZXNbaV07XG4gICAgICAgICAgY29uc3QgaGFzQ2hpbGRyZW4gPSAhIShub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCk7XG4gICAgICAgICAgY29uc3QgaXNFeHBhbmRlZCA9IGhhc0NoaWxkcmVuICYmIHRoaXMuX2V4cGFuZGVkTm9kZXMoKS5oYXMobm9kZS5pZCkgJiYgdGhpcy5fZXhwYW5kZWROb2RlcygpLmdldChub2RlLmlkKTtcblxuICAgICAgICAgIC8vIEVuaGFuY2UgdGhlIG5vZGUgd2l0aCBleHBhbmRlZCBzdGF0ZSBhbmQgdG9nZ2xlIGZ1bmN0aW9uXG4gICAgICAgICAgbm9kZS5leHBhbmRlZCA9IGlzRXhwYW5kZWQgfHwgZmFsc2U7XG4gICAgICAgICAgbm9kZS50b2dnbGVFeHBhbmRlZCA9ICgpID0+IHRoaXMudG9nZ2xlTm9kZShub2RlLmlkKTtcblxuICAgICAgICAgIC8vIENyZWF0ZSBhIGZvcmVpZ25PYmplY3QgZm9yIHRoZSB0ZW1wbGF0ZVxuICAgICAgICAgIGNvbnN0IGZvcmVpZ25PYmplY3QgPSB0aGlzLmQzXG4gICAgICAgICAgICAuc2VsZWN0KGVsZW1lbnQpXG4gICAgICAgICAgICAuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcbiAgICAgICAgICAgIC5hdHRyKCd4JywgLW5vZGVXaWR0aCAvIDIpXG4gICAgICAgICAgICAuYXR0cigneScsIC1ub2RlSGVpZ2h0IC8gMilcbiAgICAgICAgICAgIC5hdHRyKCd3aWR0aCcsIG5vZGVXaWR0aClcbiAgICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCBub2RlSGVpZ2h0KVxuICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWhpZXJhcmNoeS1jaGFydC1ub2RlLWNvbnRhaW5lcicpXG4gICAgICAgICAgICAub24oJ2NsaWNrJywgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIC8vIERvbid0IHByb3BhZ2F0ZSB0aGUgZXZlbnQgaWYgaXQncyBjb21pbmcgZnJvbSBhbiBpbnRlcmFjdGl2ZSBlbGVtZW50XG4gICAgICAgICAgICAgIC8vIGxpa2UgYSBidXR0b24gaW5zaWRlIHRoZSB0ZW1wbGF0ZVxuICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICAgIGNvbnN0IGlzSW50ZXJhY3RpdmUgPVxuICAgICAgICAgICAgICAgIHRhcmdldC50YWdOYW1lID09PSAnQlVUVE9OJyB8fCB0YXJnZXQudGFnTmFtZSA9PT0gJ0EnIHx8IHRhcmdldC5jbG9zZXN0KCdidXR0b24sIGEsIFtyb2xlPVwiYnV0dG9uXCJdJyk7XG5cbiAgICAgICAgICAgICAgaWYgKCFpc0ludGVyYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVOb2RlQ2xpY2soZXZlbnQsIGQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIENyZWF0ZSBhIGRpdiB0byBob2xkIHRoZSB0ZW1wbGF0ZVxuICAgICAgICAgIGNvbnN0IGRpdiA9IGZvcmVpZ25PYmplY3RcbiAgICAgICAgICAgIC5hcHBlbmQoJ3hodG1sOmRpdicpXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnYXgtaGllcmFyY2h5LWNoYXJ0LW5vZGUtY29udGVudCcpXG4gICAgICAgICAgICAuc3R5bGUoJ3dpZHRoJywgJzEwMCUnKVxuICAgICAgICAgICAgLnN0eWxlKCdoZWlnaHQnLCAnMTAwJScpO1xuXG4gICAgICAgICAgLy8gUmVuZGVyIHRoZSB0ZW1wbGF0ZSBpbnRvIHRoZSBkaXZcbiAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgLy8gQ3JlYXRlIGNvbnRleHQgd2l0aCBlbmhhbmNlZCBub2RlIGFzIHRoZSBpbXBsaWNpdCB2YWx1ZVxuICAgICAgICAgICAgY29uc3QgY29udGV4dDogQVhIaWVyYXJjaHlDaGFydE5vZGVDb250ZXh0ID0ge1xuICAgICAgICAgICAgICAkaW1wbGljaXQ6IG5vZGUgYXMgQVhIaWVyYXJjaHlDaGFydE5vZGUgJiB7IGV4cGFuZGVkOiBib29sZWFuOyB0b2dnbGVFeHBhbmRlZDogKCkgPT4gdm9pZCB9LFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3Qgdmlld1JlZiA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGVtcGxhdGVUb1VzZSEsIGNvbnRleHQpO1xuICAgICAgICAgICAgdmlld1JlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgICAgIC8vIEFwcGVuZCB0ZW1wbGF0ZSBjb250ZW50cyB0byB0aGUgZGl2XG4gICAgICAgICAgICBjb25zdCBub2RlcyA9IHZpZXdSZWYucm9vdE5vZGVzO1xuICAgICAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICAgICAgICAgIGRpdi5ub2RlKCkuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVuZGVyIGVuaGFuY2VkIGRlZmF1bHQgbm9kZXMgKHJlY3RhbmdsZXMgd2l0aCB0ZXh0IGFuZCBpY29ucylcbiAgICAgICAgbm9kZUdyb3Vwcy5lYWNoKChkOiBhbnksIGk6IG51bWJlciwgbm9kZXM6IGFueVtdKSA9PiB7XG4gICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmQzLnNlbGVjdChub2Rlc1tpXSk7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IGQuZGF0YTtcbiAgICAgICAgICBjb25zdCBoYXNDaGlsZHJlbiA9ICEhKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKTtcblxuICAgICAgICAgIC8vIE5vZGUgYmFja2dyb3VuZCByZWN0IHdpdGggcm91bmRlZCBjb3JuZXJzXG4gICAgICAgICAgZ3JvdXBcbiAgICAgICAgICAgIC5hcHBlbmQoJ3JlY3QnKVxuICAgICAgICAgICAgLmF0dHIoJ3gnLCAtbm9kZVdpZHRoIC8gMilcbiAgICAgICAgICAgIC5hdHRyKCd5JywgLW5vZGVIZWlnaHQgLyAyKVxuICAgICAgICAgICAgLmF0dHIoJ3dpZHRoJywgbm9kZVdpZHRoKVxuICAgICAgICAgICAgLmF0dHIoJ2hlaWdodCcsIG5vZGVIZWlnaHQpXG4gICAgICAgICAgICAuYXR0cigncngnLCA2KVxuICAgICAgICAgICAgLmF0dHIoJ3J5JywgNilcbiAgICAgICAgICAgIC5hdHRyKCdmaWxsJywgbm9kZS5jb2xvciB8fCBgcmdiKHZhcigtLWF4LWNvbXAtaGllcmFyY2h5LWNoYXJ0LW5vZGUtY29sb3IpKWApXG4gICAgICAgICAgICAuYXR0cignc3Ryb2tlJywgYHJnYih2YXIoLS1heC1jb21wLWhpZXJhcmNoeS1jaGFydC1ub2RlLXN0cm9rZS1jb2xvcikpYClcbiAgICAgICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCBvcHRpb25zLm5vZGVTdHJva2VXaWR0aClcbiAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdheC1oaWVyYXJjaHktY2hhcnQtbm9kZScpO1xuXG4gICAgICAgICAgLy8gTWFpbiB0aXRsZS9uYW1lXG4gICAgICAgICAgZ3JvdXBcbiAgICAgICAgICAgIC5hcHBlbmQoJ3RleHQnKVxuICAgICAgICAgICAgLmF0dHIoJ3knLCAtMTApXG4gICAgICAgICAgICAuYXR0cigndGV4dC1hbmNob3InLCAnbWlkZGxlJylcbiAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdheC1oaWVyYXJjaHktY2hhcnQtbm9kZS10aXRsZScpXG4gICAgICAgICAgICAuYXR0cignZmlsbCcsICd3aGl0ZScpXG4gICAgICAgICAgICAuYXR0cignZm9udC13ZWlnaHQnLCAnYm9sZCcpXG4gICAgICAgICAgICAudGV4dChub2RlLm5hbWUgfHwgbm9kZS5sYWJlbCB8fCAnJyk7XG5cbiAgICAgICAgICAvLyBTdWJ0aXRsZSBpZiBwcm92aWRlZFxuICAgICAgICAgIGlmIChub2RlLnN1YnRpdGxlKSB7XG4gICAgICAgICAgICBncm91cFxuICAgICAgICAgICAgICAuYXBwZW5kKCd0ZXh0JylcbiAgICAgICAgICAgICAgLmF0dHIoJ3knLCAxMClcbiAgICAgICAgICAgICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXG4gICAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdheC1oaWVyYXJjaHktY2hhcnQtbm9kZS1zdWJ0aXRsZScpXG4gICAgICAgICAgICAgIC5hdHRyKCdmaWxsJywgJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC44KScpXG4gICAgICAgICAgICAgIC5hdHRyKCdmb250LXNpemUnLCAnMC44ZW0nKVxuICAgICAgICAgICAgICAudGV4dChub2RlLnN1YnRpdGxlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBUeXBlIGxhYmVsIGlmIHByb3ZpZGVkXG4gICAgICAgICAgaWYgKG5vZGUudHlwZSkge1xuICAgICAgICAgICAgZ3JvdXBcbiAgICAgICAgICAgICAgLmFwcGVuZCgndGV4dCcpXG4gICAgICAgICAgICAgIC5hdHRyKCd5JywgMjUpXG4gICAgICAgICAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxuICAgICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnYXgtaGllcmFyY2h5LWNoYXJ0LW5vZGUtdHlwZScpXG4gICAgICAgICAgICAgIC5hdHRyKCdmaWxsJywgJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC43KScpXG4gICAgICAgICAgICAgIC5hdHRyKCdmb250LXNpemUnLCAnMC43ZW0nKVxuICAgICAgICAgICAgICAudGV4dChub2RlLnR5cGUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEFkZCBleHBhbmQvY29sbGFwc2UgaW5kaWNhdG9yIGlmIG5vZGUgaGFzIGNoaWxkcmVuXG4gICAgICAgICAgaWYgKGhhc0NoaWxkcmVuICYmIG9wdGlvbnMuY29sbGFwc2libGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGlzRXhwYW5kZWQgPSB0aGlzLl9leHBhbmRlZE5vZGVzKCkuaGFzKG5vZGUuaWQpICYmIHRoaXMuX2V4cGFuZGVkTm9kZXMoKS5nZXQobm9kZS5pZCk7XG5cbiAgICAgICAgICAgIC8vIFRvZ2dsZSBidXR0b24gd2l0aCBiZXR0ZXIgc3R5bGluZ1xuICAgICAgICAgICAgZ3JvdXBcbiAgICAgICAgICAgICAgLmFwcGVuZCgnY2lyY2xlJylcbiAgICAgICAgICAgICAgLmF0dHIoJ3InLCAxMClcbiAgICAgICAgICAgICAgLmF0dHIoJ2N4Jywgbm9kZVdpZHRoIC8gMiAtIDEyKVxuICAgICAgICAgICAgICAuYXR0cignY3knLCAtbm9kZUhlaWdodCAvIDIgKyAxMilcbiAgICAgICAgICAgICAgLmF0dHIoJ2ZpbGwnLCAnd2hpdGUnKVxuICAgICAgICAgICAgICAuYXR0cignc3Ryb2tlJywgYHJnYih2YXIoLS1heC1jb21wLWhpZXJhcmNoeS1jaGFydC1ub2RlLXN0cm9rZS1jb2xvcikpYClcbiAgICAgICAgICAgICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsIDEpXG4gICAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdheC1oaWVyYXJjaHktY2hhcnQtdG9nZ2xlLWluZGljYXRvcicpXG4gICAgICAgICAgICAgIC5zdHlsZSgnY3Vyc29yJywgJ3BvaW50ZXInKVxuICAgICAgICAgICAgICAub24oJ2NsaWNrJywgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVOb2RlKG5vZGUuaWQpO1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gVG9nZ2xlIGljb25cbiAgICAgICAgICAgIGdyb3VwXG4gICAgICAgICAgICAgIC5hcHBlbmQoJ3RleHQnKVxuICAgICAgICAgICAgICAuYXR0cigneCcsIG5vZGVXaWR0aCAvIDIgLSAxMilcbiAgICAgICAgICAgICAgLmF0dHIoJ3knLCAtbm9kZUhlaWdodCAvIDIgKyAxMilcbiAgICAgICAgICAgICAgLmF0dHIoJ2R5JywgJzAuMzJlbScpXG4gICAgICAgICAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxuICAgICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnYXgtaGllcmFyY2h5LWNoYXJ0LXRvZ2dsZS1pY29uJylcbiAgICAgICAgICAgICAgLmF0dHIoJ2ZpbGwnLCBub2RlLmNvbG9yIHx8IGByZ2IodmFyKC0tYXgtY29tcC1oaWVyYXJjaHktY2hhcnQtbm9kZS1jb2xvcikpYClcbiAgICAgICAgICAgICAgLmF0dHIoJ2ZvbnQtd2VpZ2h0JywgJ2JvbGQnKVxuICAgICAgICAgICAgICAuc3R5bGUoJ2N1cnNvcicsICdwb2ludGVyJylcbiAgICAgICAgICAgICAgLnRleHQoaXNFeHBhbmRlZCA/ICfiiJInIDogJysnKVxuICAgICAgICAgICAgICAub24oJ2NsaWNrJywgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVOb2RlKG5vZGUuaWQpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBJY29uIGlmIHByb3ZpZGVkXG4gICAgICAgICAgaWYgKG5vZGUuaWNvbikge1xuICAgICAgICAgICAgZ3JvdXBcbiAgICAgICAgICAgICAgLmFwcGVuZCgndGV4dCcpXG4gICAgICAgICAgICAgIC5hdHRyKCd4JywgLW5vZGVXaWR0aCAvIDIgKyAxNSlcbiAgICAgICAgICAgICAgLmF0dHIoJ3knLCAwKVxuICAgICAgICAgICAgICAuYXR0cignZHknLCAnMC4zMmVtJylcbiAgICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWhpZXJhcmNoeS1jaGFydC1ub2RlLWljb24nKVxuICAgICAgICAgICAgICAuYXR0cignZmlsbCcsICd3aGl0ZScpXG4gICAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsIG5vZGUuaWNvbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQWRkIGNsaWNrIGhhbmRsZXIgdG8gdGhlIHdob2xlIG5vZGVcbiAgICAgICAgICBncm91cC5vbignY2xpY2snLCAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlTm9kZUNsaWNrKGV2ZW50LCBkKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEFkZCB0b29sdGlwIGlmIGVuYWJsZWRcbiAgICAgICAgICBpZiAob3B0aW9ucy5zaG93VG9vbHRpcCAmJiAobm9kZS50b29sdGlwIHx8IG5vZGUuZGVzY3JpcHRpb24pKSB7XG4gICAgICAgICAgICBncm91cC5hcHBlbmQoJ3RpdGxlJykudGV4dChub2RlLnRvb2x0aXAgfHwgbm9kZS5kZXNjcmlwdGlvbiB8fCAnJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGUgbm9kZSBleHBhbnNpb24gc3RhdGVcbiAgICovXG4gIHB1YmxpYyB0b2dnbGVOb2RlKG5vZGVJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZXhwYW5kZWROb2RlcyA9IG5ldyBNYXAodGhpcy5fZXhwYW5kZWROb2RlcygpKTtcbiAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBleHBhbmRlZE5vZGVzLmdldChub2RlSWQpO1xuICAgIGNvbnN0IG5ld1N0YXRlID0gY3VycmVudFN0YXRlID09PSB1bmRlZmluZWQgPyBmYWxzZSA6ICFjdXJyZW50U3RhdGU7XG5cbiAgICBleHBhbmRlZE5vZGVzLnNldChub2RlSWQsIG5ld1N0YXRlKTtcbiAgICB0aGlzLl9leHBhbmRlZE5vZGVzLnNldChleHBhbmRlZE5vZGVzKTtcblxuICAgIC8vIEVtaXQgdG9nZ2xlIGV2ZW50XG4gICAgdGhpcy5maW5kTm9kZUJ5SWQodGhpcy5wcm9jZXNzZWREYXRhKCksIG5vZGVJZCkudGhlbigobm9kZSkgPT4ge1xuICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgdGhpcy5ub2RlVG9nZ2xlLmVtaXQoe1xuICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgZXhwYW5kZWQ6IG5ld1N0YXRlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFVwZGF0ZSB0b2dnbGUgaW5kaWNhdG9yIGltbWVkaWF0ZWx5IGZvciBiZXR0ZXIgVVhcbiAgICB0aGlzLnVwZGF0ZVRvZ2dsZUluZGljYXRvcihub2RlSWQsIG5ld1N0YXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUganVzdCB0aGUgdG9nZ2xlIGluZGljYXRvciB3aXRob3V0IHJlZHJhd2luZyB0aGUgY2hhcnRcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlVG9nZ2xlSW5kaWNhdG9yKG5vZGVJZDogc3RyaW5nLCBleHBhbmRlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5kMyB8fCAhdGhpcy5jaGFydENvbnRhaW5lcigpKSByZXR1cm47XG5cbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmNoYXJ0Q29udGFpbmVyKCkubmF0aXZlRWxlbWVudDtcbiAgICAgIGNvbnN0IHN2ZyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdzdmcnKTtcbiAgICAgIGlmICghc3ZnKSByZXR1cm47XG5cbiAgICAgIC8vIEZpbmQgYW5kIHVwZGF0ZSB0aGUgdG9nZ2xlIGluZGljYXRvciBmb3IgdGhlIHNwZWNpZmljIG5vZGVcbiAgICAgIGNvbnN0IG5vZGVHcm91cCA9IHRoaXMuZDMuc2VsZWN0KHN2Zykuc2VsZWN0KGBbZGF0YS1ub2RlLWlkPVwiJHtub2RlSWR9XCJdYCk7XG4gICAgICBpZiAobm9kZUdyb3VwLmVtcHR5KCkpIHJldHVybjtcblxuICAgICAgLy8gVXBkYXRlIHRoZSB0b2dnbGUgaWNvbiAoaWYgaXQgZXhpc3RzKVxuICAgICAgY29uc3QgdG9nZ2xlSWNvbiA9IG5vZGVHcm91cC5zZWxlY3QoJy5heC1oaWVyYXJjaHktY2hhcnQtdG9nZ2xlLWljb24nKTtcbiAgICAgIGlmICghdG9nZ2xlSWNvbi5lbXB0eSgpKSB7XG4gICAgICAgIHRvZ2dsZUljb24udGV4dChleHBhbmRlZCA/ICfiiJInIDogJysnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEZvcmNlIGVmZmVjdCB0byBydW4gdGhhdCB3aWxsIHVwZGF0ZSB0aGUgY2hhcnRcbiAgICAvLyBUaGlzIGxldmVyYWdlcyBBbmd1bGFyJ3MgcmVhY3Rpdml0eSByYXRoZXIgdGhhbiBhIGRpcmVjdCBtZXRob2QgY2FsbFxuICAgIC8vIHdoaWNoIGlzIG1vcmUgY29uc2lzdGVudCB3aXRoIEFuZ3VsYXIncyByZWFjdGl2ZSBhcHByb2FjaFxuICAgIGNvbnN0IGV4cGFuZGVkTm9kZXMgPSBuZXcgTWFwKHRoaXMuX2V4cGFuZGVkTm9kZXMoKSk7XG4gICAgdGhpcy5fZXhwYW5kZWROb2Rlcy5zZXQoZXhwYW5kZWROb2Rlcyk7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhIG5vZGUgYnkgSURcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZmluZE5vZGVCeUlkKGRhdGE6IEFYSGllcmFyY2h5Q2hhcnREYXRhLCBpZDogc3RyaW5nKTogUHJvbWlzZTxBWEhpZXJhcmNoeUNoYXJ0RGF0YSB8IG51bGw+IHtcbiAgICBpZiAoZGF0YS5pZCA9PT0gaWQpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGlmIChkYXRhLmNoaWxkcmVuKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGRhdGEuY2hpbGRyZW4pIHtcbiAgICAgICAgY29uc3QgZm91bmQgPSBhd2FpdCB0aGlzLmZpbmROb2RlQnlJZChjaGlsZCwgaWQpO1xuICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgbm9kZSBjbGljayBldmVudHNcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlTm9kZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCBkOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBub2RlID0gZC5kYXRhO1xuXG4gICAgLy8gRW1pdCBjbGljayBldmVudFxuICAgIHRoaXMuaXRlbUNsaWNrLmVtaXQoe1xuICAgICAgZXZlbnQ6IHsgbmF0aXZlRXZlbnQ6IGV2ZW50LCBzZW5kZXI6IHRoaXMgfSxcbiAgICAgIGl0ZW06IG5vZGUsXG4gICAgICBlbGVtZW50OiBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGV4aXN0aW5nIGNoYXJ0XG4gICAqL1xuICBwdWJsaWMgY2xlYW51cENoYXJ0KCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY2hhcnRDb250YWluZXIoKT8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgLy8gUmVtb3ZlIGV4aXN0aW5nIFNWR1xuICAgIGNvbnN0IHN2ZyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdzdmcnKTtcbiAgICBpZiAoc3ZnKSB7XG4gICAgICBzdmcucmVtb3ZlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZUNoYXJ0KCk6IHZvaWQge1xuICAgIHRoaXMuY3JlYXRlQ2hhcnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgRDMgZWFzaW5nIGZ1bmN0aW9uIGZyb20gc3RyaW5nIG5hbWVcbiAgICovXG4gIHByaXZhdGUgZ2V0RWFzaW5nRnVuY3Rpb24oZWFzaW5nPzogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoIWVhc2luZykgcmV0dXJuIHRoaXMuZDMuZWFzZUN1YmljSW5PdXQ7XG5cbiAgICBzd2l0Y2ggKGVhc2luZykge1xuICAgICAgY2FzZSAnbGluZWFyJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZDMuZWFzZUxpbmVhcjtcbiAgICAgIGNhc2UgJ2Vhc2UnOlxuICAgICAgICByZXR1cm4gdGhpcy5kMy5lYXNlUG9seUluT3V0O1xuICAgICAgY2FzZSAnZWFzZS1pbic6XG4gICAgICAgIHJldHVybiB0aGlzLmQzLmVhc2VQb2x5SW47XG4gICAgICBjYXNlICdlYXNlLW91dCc6XG4gICAgICAgIHJldHVybiB0aGlzLmQzLmVhc2VQb2x5T3V0O1xuICAgICAgY2FzZSAnZWFzZS1pbi1vdXQnOlxuICAgICAgICByZXR1cm4gdGhpcy5kMy5lYXNlUG9seUluT3V0O1xuICAgICAgY2FzZSAnY3ViaWMnOlxuICAgICAgICByZXR1cm4gdGhpcy5kMy5lYXNlQ3ViaWM7XG4gICAgICBjYXNlICdjdWJpYy1pbic6XG4gICAgICAgIHJldHVybiB0aGlzLmQzLmVhc2VDdWJpY0luO1xuICAgICAgY2FzZSAnY3ViaWMtb3V0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZDMuZWFzZUN1YmljT3V0O1xuICAgICAgY2FzZSAnY3ViaWMtaW4tb3V0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZDMuZWFzZUN1YmljSW5PdXQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5kMy5lYXNlQ3ViaWNJbk91dDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvd3MgYSBtZXNzYWdlIHdoZW4gbm8gZGF0YSBpcyBhdmFpbGFibGVcbiAgICovXG4gIHByaXZhdGUgc2hvd05vRGF0YU1lc3NhZ2UoY29udGFpbmVyRWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICAvLyBDbGVhciBleGlzdGluZyBjb250ZW50cyBmaXJzdFxuICAgIHRoaXMuZDMuc2VsZWN0KGNvbnRhaW5lckVsZW1lbnQpLnNlbGVjdEFsbCgnKicpLnJlbW92ZSgpO1xuXG4gICAgY29uc3QgbWVzc2FnZUNvbnRhaW5lciA9IHRoaXMuZDNcbiAgICAgIC5zZWxlY3QoY29udGFpbmVyRWxlbWVudClcbiAgICAgIC5hcHBlbmQoJ2RpdicpXG4gICAgICAuYXR0cignY2xhc3MnLCAnYXgtaGllcmFyY2h5LWNoYXJ0LW5vLWRhdGEtbWVzc2FnZScpXG4gICAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcbiAgICAgIC5zdHlsZSgnbGVmdCcsICc1MCUnKVxuICAgICAgLnN0eWxlKCd0b3AnLCAnNTAlJylcbiAgICAgIC5zdHlsZSgndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgtNTAlLCAtNTAlKScpXG4gICAgICAuc3R5bGUoJ3RleHQtYWxpZ24nLCAnY2VudGVyJylcbiAgICAgIC5zdHlsZSgnYmFja2dyb3VuZC1jb2xvcicsICdyZ2IodmFyKC0tYXgtY29tcC1oaWVyYXJjaHktY2hhcnQtYmctY29sb3IpKScpXG4gICAgICAuc3R5bGUoJ3BhZGRpbmcnLCAnMS41cmVtJylcbiAgICAgIC5zdHlsZSgnYm9yZGVyLXJhZGl1cycsICcwLjVyZW0nKVxuICAgICAgLnN0eWxlKCdib3gtc2hhZG93JywgJzAgMnB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjA4KScpXG4gICAgICAuc3R5bGUoJ3dpZHRoJywgJzgwJScpXG4gICAgICAuc3R5bGUoJ21heC13aWR0aCcsICczMDBweCcpO1xuXG4gICAgLy8gQWRkIGFuIGljb25cbiAgICBtZXNzYWdlQ29udGFpbmVyXG4gICAgICAuYXBwZW5kKCdkaXYnKVxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWhpZXJhcmNoeS1jaGFydC1uby1kYXRhLWljb24nKVxuICAgICAgLnN0eWxlKCdvcGFjaXR5JywgJzAuNicpXG4gICAgICAuc3R5bGUoJ21hcmdpbi1ib3R0b20nLCAnMC43NXJlbScpXG4gICAgICAuaHRtbChgPGkgY2xhc3M9XCIke3RoaXMuZWZmZWN0aXZlTWVzc2FnZXMoKS5ub0RhdGFJY29ufSBmYS0yeFwiPjwvaT5gKTtcblxuICAgIC8vIEFkZCB0ZXh0IG1lc3NhZ2VcbiAgICBtZXNzYWdlQ29udGFpbmVyXG4gICAgICAuYXBwZW5kKCdkaXYnKVxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWhpZXJhcmNoeS1jaGFydC1uby1kYXRhLXRleHQnKVxuICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnMXJlbScpXG4gICAgICAuc3R5bGUoJ2ZvbnQtd2VpZ2h0JywgJzYwMCcpXG4gICAgICAuc3R5bGUoJ21hcmdpbi1ib3R0b20nLCAnMC41cmVtJylcbiAgICAgIC50ZXh0KHRoaXMuZWZmZWN0aXZlTWVzc2FnZXMoKS5ub0RhdGEpO1xuXG4gICAgLy8gQWRkIGhlbHAgdGV4dFxuICAgIG1lc3NhZ2VDb250YWluZXJcbiAgICAgIC5hcHBlbmQoJ2RpdicpXG4gICAgICAuYXR0cignY2xhc3MnLCAnYXgtaGllcmFyY2h5LWNoYXJ0LW5vLWRhdGEtaGVscCcpXG4gICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcwLjhyZW0nKVxuICAgICAgLnN0eWxlKCdvcGFjaXR5JywgJzAuNicpXG4gICAgICAudGV4dCh0aGlzLmVmZmVjdGl2ZU1lc3NhZ2VzKCkubm9EYXRhSGVscCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJheC1oaWVyYXJjaHktY2hhcnRcIiByb2xlPVwiaW1nXCIgI2NoYXJ0Q29udGFpbmVyPjwvZGl2PlxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNoYXJ0cy1oaWVyYXJjaHktY2hhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jaGFydHMvaGllcmFyY2h5LWNoYXJ0L3NyYy9hY29yZXgtY2hhcnRzLWhpZXJhcmNoeS1jaGFydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-charts-hierarchy-chart.mjs","sources":["../../../../packages/charts/hierarchy-chart/src/lib/hierarchy-chart.config.ts","../../../../packages/charts/hierarchy-chart/src/lib/hierarchy-chart.component.ts","../../../../packages/charts/hierarchy-chart/src/lib/hierarchy-chart.component.html","../../../../packages/charts/hierarchy-chart/src/acorex-charts-hierarchy-chart.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { AXHierarchyChartOption } from './hierarchy-chart.type';\n\nexport const AXHierarchyChartDefaultConfig: AXHierarchyChartOption = {\n direction: 'vertical',\n margin: { top: 40, right: 120, bottom: 40, left: 120 },\n nodeRadius: 30,\n nodeStrokeWidth: 1.5,\n linkWidth: 1.5,\n linkStyle: 'curved',\n nodeWidth: 120,\n nodeHeight: 60,\n nodeSpacingX: 80,\n nodeSpacingY: 120,\n showTooltip: true,\n collapsible: true,\n expandAll: false,\n animationDuration: 100,\n animationEasing: 'cubic-out',\n messages: {\n noData: 'No data available',\n noDataHelp: 'Please provide hierarchy data to display the chart',\n noDataIcon: 'fa-light fa-sitemap',\n },\n};\n\nexport const AX_HIERARCHY_CHART_CONFIG = new InjectionToken<AXHierarchyChartOption>('AX_HIERARCHY_CHART_CONFIG', {\n providedIn: 'root',\n factory: () => AXHierarchyChartDefaultConfig,\n});\n\nexport type PartialHierarchyChartConfig = Partial<AXHierarchyChartOption>;\n\nexport function hierarchyChartConfig(config: PartialHierarchyChartConfig = {}): AXHierarchyChartOption {\n const result = {\n ...AXHierarchyChartDefaultConfig,\n ...config,\n };\n return result;\n}\n","import { AXChartComponent, AXChartComponentBase } from '@acorex/charts';\n\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n NgZone,\n TemplateRef,\n ViewContainerRef,\n ViewEncapsulation,\n afterNextRender,\n computed,\n contentChild,\n effect,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { AX_HIERARCHY_CHART_CONFIG } from './hierarchy-chart.config';\nimport {\n AXHierarchyChartClickEvent,\n AXHierarchyChartData,\n AXHierarchyChartNode,\n AXHierarchyChartNodeContext,\n AXHierarchyChartOption,\n AXHierarchyChartToggleEvent,\n} from './hierarchy-chart.type';\n/**\n * A highly customizable hierarchical visualization component that can be used for:\n * - Organization charts\n * - Tree diagrams\n * - Dependency visualizations\n * - Process flows\n *\n * Supports both default node styling and custom node templates.\n */\n@Component({\n selector: 'ax-hierarchy-chart',\n templateUrl: './hierarchy-chart.component.html',\n styleUrls: ['./hierarchy-chart.component.scss'],\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXHierarchyChartComponent extends AXChartComponent implements AXChartComponentBase {\n // Chart container reference\n private chartContainer = viewChild.required<ElementRef<HTMLDivElement>>('chartContainer');\n\n // Custom node template provided by the user\n customNodeTemplate = contentChild<TemplateRef<AXHierarchyChartNodeContext>>('nodeTemplate');\n // Services\n private ngZone = inject(NgZone);\n private viewContainerRef = inject(ViewContainerRef);\n private configToken = inject(AX_HIERARCHY_CHART_CONFIG);\n\n // D3 instance\n private d3: any;\n\n // Internal state signals\n private _expandedNodes = signal<Map<string, boolean>>(new Map());\n private _initialized = signal(false);\n private _rendered = signal(false);\n private _dimensions = signal({ width: 0, height: 0 });\n private _nodeElements = signal<Map<string, any>>(new Map()); // Store references to node elements\n private _chartData = signal<any>(null); // Store the current chart data and layout\n\n // Inputs\n data = input<AXHierarchyChartData | AXHierarchyChartData[]>([]);\n options = input<AXHierarchyChartOption>({});\n nodeTemplate = input<TemplateRef<AXHierarchyChartNodeContext> | null>(null);\n\n // Outputs\n itemClick = output<AXHierarchyChartClickEvent>();\n nodeToggle = output<AXHierarchyChartToggleEvent>();\n\n // Computed values\n protected processedData = computed(() => {\n const data = this.data();\n // Handle both single node and array formats\n return Array.isArray(data) ? { id: 'root', children: data } : data;\n });\n\n // Check if custom template is available\n protected hasCustomTemplate = computed(() => {\n return Boolean(this.customNodeTemplate() || this.nodeTemplate());\n });\n\n protected effectiveOptions = computed(() => {\n return {\n ...this.configToken,\n ...this.options(),\n };\n });\n\n // Messages with defaults\n protected effectiveMessages = computed(() => {\n const defaultMessages = {\n noData: 'No data available',\n noDataHelp: 'Please provide hierarchy data to display the chart',\n noDataIcon: 'fa-light fa-sitemap',\n };\n return {\n ...defaultMessages,\n ...this.effectiveOptions().messages,\n };\n });\n\n constructor() {\n super();\n // Dynamically load D3 and initialize the chart when the component is ready\n afterNextRender(() => {\n this._initialized.set(true);\n this.loadD3();\n this.initializeExpandedState();\n });\n\n // Watch for changes to redraw the chart\n effect(() => {\n // Access these to track them\n this.processedData();\n this.nodeTemplate();\n this.customNodeTemplate();\n this.effectiveOptions();\n this._expandedNodes();\n\n if (this._initialized() && this.d3 && this._rendered()) {\n this.createChart();\n }\n });\n }\n\n /**\n * Initialize the expanded state for all nodes\n */\n private initializeExpandedState(): void {\n const newExpandedNodes = new Map<string, boolean>();\n const data = this.processedData();\n const expandAll = this.effectiveOptions().expandAll;\n\n // Helper function to recursively process nodes\n const processNode = (node: AXHierarchyChartData) => {\n if (node.children && node.children.length > 0) {\n // Set initial expansion state based on node property or global option\n newExpandedNodes.set(node.id, node.isExpanded !== undefined ? node.isExpanded : expandAll);\n\n // Process children\n node.children.forEach((child) => processNode(child));\n }\n };\n\n // Start processing\n if (data.children) {\n data.children.forEach((node) => processNode(node));\n } else if ((data as any).id) {\n processNode(data as AXHierarchyChartData);\n }\n\n this._expandedNodes.set(newExpandedNodes);\n }\n\n /**\n * Dynamically load D3.js to reduce initial bundle size\n */\n protected async loadD3(): Promise<void> {\n try {\n this.d3 = await import('d3');\n if (this._initialized() && this.chartContainer()) {\n this.updateDimensions();\n this.createChart();\n this._rendered.set(true);\n }\n } catch (error) {\n console.error('Failed to load D3.js:', error);\n }\n }\n\n /**\n * Update dimensions based on container size\n */\n private updateDimensions(): void {\n const container = this.chartContainer().nativeElement;\n const options = this.effectiveOptions();\n\n const containerRect = container.getBoundingClientRect();\n const width = options.width || Math.max(containerRect.width, 300);\n const height = options.height || Math.max(containerRect.height, 400);\n\n this._dimensions.set({ width, height });\n }\n\n /**\n * Create and render the hierarchy chart\n */\n public createChart(): void {\n if (!this.d3) {\n return;\n }\n\n // Clear any existing chart\n this.cleanupChart();\n\n const container = this.chartContainer().nativeElement;\n const data = this.processedData();\n\n // Check for null/undefined data or empty children\n if (!data || !data.children || data.children.length === 0) {\n this.showNoDataMessage(container);\n return;\n }\n\n const options = this.effectiveOptions();\n const dimensions = this._dimensions();\n const expandedNodes = this._expandedNodes();\n\n this.ngZone.runOutsideAngular(() => {\n // Get dimensions and options\n const { width, height } = dimensions;\n const margin = options.margin || { top: 40, right: 120, bottom: 40, left: 120 };\n const nodeWidth = options.nodeWidth || 120;\n const nodeHeight = options.nodeHeight || 60;\n const nodeSpacingX = options.nodeSpacingX || 80;\n const nodeSpacingY = options.nodeSpacingY || 120;\n const isHorizontal = options.direction === 'horizontal';\n\n // Create SVG container with viewBox for responsiveness\n const svg = this.d3\n .select(container)\n .append('svg')\n .attr('width', '100%')\n .attr('height', '100%')\n .attr('viewBox', `0 0 ${width} ${height}`)\n .attr('preserveAspectRatio', 'xMidYMid meet')\n .style('overflow', 'visible')\n .classed(options.className || '', !!options.className);\n\n // Create hierarchy layout from data\n const rootData = this.processedData();\n const root = this.d3.hierarchy(rootData);\n\n // Apply expansion state to nodes\n root.descendants().forEach((node: any) => {\n if (node.data.id !== 'root' && node.children) {\n if (expandedNodes.has(node.data.id) && !expandedNodes.get(node.data.id)) {\n node._children = node.children; // Store children\n node.children = null; // Collapse node\n }\n }\n });\n\n // Set up the tree layout based on direction option\n const treeLayout = this.d3\n .tree()\n .nodeSize([\n isHorizontal ? nodeHeight + nodeSpacingY : nodeWidth + nodeSpacingX,\n isHorizontal ? nodeWidth + nodeSpacingX : nodeHeight + nodeSpacingY,\n ])\n .separation((a: any, b: any) => {\n return a.parent === b.parent ? 1.2 : 1.5;\n });\n\n treeLayout(root);\n\n // Store the current tree layout data for future updates\n this._chartData.set({\n root,\n treeLayout,\n isHorizontal,\n nodeWidth,\n nodeHeight,\n });\n\n // Adjust root position based on direction\n const rootX = isHorizontal ? margin.top : width / 2;\n const rootY = isHorizontal ? margin.left : margin.top;\n\n // Calculate bounds of the tree after layout\n let minX = Infinity;\n let maxX = -Infinity;\n let minY = Infinity;\n let maxY = -Infinity;\n\n root.descendants().forEach((d: any) => {\n if (d.data.id === 'root') return;\n\n const x = isHorizontal ? d.x : d.x;\n const y = isHorizontal ? d.y : d.y;\n\n minX = Math.min(minX, x);\n maxX = Math.max(maxX, x);\n minY = Math.min(minY, y);\n maxY = Math.max(maxY, y);\n });\n\n // Calculate the center of the tree\n const centerX = (minX + maxX) / 2;\n const centerY = (minY + maxY) / 2;\n\n // Create a group for the chart content with proper centering\n const g = svg\n .append('g')\n .attr(\n 'transform',\n isHorizontal\n ? `translate(${margin.left}, ${height / 2 - centerX})`\n : `translate(${width / 2}, ${margin.top})`,\n );\n\n // Add zoom and pan behavior (replaces AXPanViewDirective)\n const zoom = this.d3\n .zoom()\n .scaleExtent([0.1, 3]) // Min zoom: 10%, Max zoom: 300%\n .on('zoom', (event: any) => {\n g.attr('transform', event.transform);\n });\n\n // Apply zoom behavior to SVG\n svg.call(zoom);\n\n // Set initial transform to match the centering\n const initialTransform = this.d3.zoomIdentity\n .translate(\n isHorizontal ? margin.left : width / 2,\n isHorizontal ? height / 2 - centerX : margin.top\n );\n svg.call(zoom.transform, initialTransform);\n\n // Draw links between nodes\n const links = g\n .selectAll('.link')\n .data(root.links().filter((d: any) => d.source.data.id !== 'root'))\n .enter()\n .append('path')\n .attr('class', 'ax-hierarchy-chart-link')\n .attr('d', (d: any) => {\n // Get the link style from options\n const linkStyle = options.linkStyle || 'curved';\n\n // Source and target coordinates based on direction\n const sourceX = isHorizontal ? d.source.y : d.source.x;\n const sourceY = isHorizontal ? d.source.x : d.source.y;\n const targetX = isHorizontal ? d.target.y : d.target.x;\n const targetY = isHorizontal ? d.target.x : d.target.y;\n\n // Variables for rounded corners\n let xDistance, yDistance, cornerRadius, midX, midY;\n\n switch (linkStyle) {\n case 'straight':\n // Direct straight line\n return `M${sourceX},${sourceY}L${targetX},${targetY}`;\n\n case 'rounded':\n // Curved line with rounded corners\n xDistance = Math.abs(targetX - sourceX);\n yDistance = Math.abs(targetY - sourceY);\n cornerRadius = Math.min(xDistance, yDistance) * 0.2; // Reduced radius for better appearance\n\n if (isHorizontal) {\n // For horizontal layout\n const halfDistance = (targetX - sourceX) / 2;\n const xMid = sourceX + halfDistance;\n\n return `\n M${sourceX},${sourceY}\n H${xMid - cornerRadius}\n Q${xMid},${sourceY} ${xMid},${sourceY + Math.sign(targetY - sourceY) * cornerRadius}\n V${targetY - Math.sign(targetY - sourceY) * cornerRadius}\n Q${xMid},${targetY} ${xMid + cornerRadius},${targetY}\n H${targetX}\n `;\n } else {\n // For vertical layout\n const halfDistance = (targetY - sourceY) / 2;\n const yMid = sourceY + halfDistance;\n\n return `\n M${sourceX},${sourceY}\n V${yMid - cornerRadius}\n Q${sourceX},${yMid} ${sourceX + Math.sign(targetX - sourceX) * cornerRadius},${yMid}\n H${targetX - Math.sign(targetX - sourceX) * cornerRadius}\n Q${targetX},${yMid} ${targetX},${yMid + cornerRadius}\n V${targetY}\n `;\n }\n\n case 'step':\n // L-shaped stepped line\n if (isHorizontal) {\n return `M${sourceX},${sourceY}H${(sourceX + targetX) / 2}V${targetY}H${targetX}`;\n } else {\n return `M${sourceX},${sourceY}V${(sourceY + targetY) / 2}H${targetX}V${targetY}`;\n }\n\n case 'curved':\n default:\n // Default curved line using D3's built-in link generator\n if (isHorizontal) {\n return this.d3\n .linkHorizontal()\n .x((d: any) => d.y)\n .y((d: any) => d.x)(d);\n } else {\n return this.d3\n .linkVertical()\n .x((d: any) => d.x)\n .y((d: any) => d.y)(d);\n }\n }\n })\n .attr('stroke', `rgb(var(--ax-comp-hierarchy-chart-link-color))`)\n .attr('stroke-width', options.linkWidth)\n .attr('fill', 'none')\n .attr('opacity', 1);\n\n // Determine which template to use for rendering nodes\n const useCustomTemplate = this.hasCustomTemplate();\n const templateToUse = this.nodeTemplate() || this.customNodeTemplate();\n\n // Create a map to store node elements for future updates\n const nodeElementsMap = new Map<string, any>();\n\n // Create node groups\n const nodeGroups = g\n .selectAll('.node-group')\n .data(root.descendants().filter((d: any) => d.data.id !== 'root'))\n .enter()\n .append('g')\n .attr('class', 'ax-hierarchy-chart-node-group')\n .attr('data-node-id', (d: any) => d.data.id) // Add a data attribute for easier selection\n .attr('transform', (d: any) => {\n const x = isHorizontal ? d.y : d.x;\n const y = isHorizontal ? d.x : d.y;\n return `translate(${x},${y})`;\n })\n .attr('opacity', 1); // Display nodes immediately with full opacity\n\n // Store node elements in the map\n nodeGroups.each(function (this: SVGGElement, d: any) {\n nodeElementsMap.set(d.data.id, this);\n });\n\n // Update the node elements signal\n this._nodeElements.set(nodeElementsMap);\n\n if (useCustomTemplate && templateToUse) {\n // Render custom node templates\n nodeGroups.each((d: any, i: number, nodes: any[]) => {\n const node = d.data;\n const element = nodes[i];\n const hasChildren = !!(node.children && node.children.length > 0);\n const isExpanded = hasChildren && this._expandedNodes().has(node.id) && this._expandedNodes().get(node.id);\n\n // Enhance the node with expanded state and toggle function\n node.expanded = isExpanded || false;\n node.toggleExpanded = () => this.toggleNode(node.id);\n\n // Create a foreignObject for the template\n const foreignObject = this.d3\n .select(element)\n .append('foreignObject')\n .attr('x', -nodeWidth / 2)\n .attr('y', -nodeHeight / 2)\n .attr('width', nodeWidth)\n .attr('height', nodeHeight)\n .attr('class', 'ax-hierarchy-chart-node-container')\n .on('click', (event: MouseEvent) => {\n // Don't propagate the event if it's coming from an interactive element\n // like a button inside the template\n const target = event.target as HTMLElement;\n const isInteractive =\n target.tagName === 'BUTTON' || target.tagName === 'A' || target.closest('button, a, [role=\"button\"]');\n\n if (!isInteractive) {\n this.handleNodeClick(event, d);\n }\n });\n\n // Create a div to hold the template\n const div = foreignObject\n .append('xhtml:div')\n .attr('class', 'ax-hierarchy-chart-node-content')\n .style('width', '100%')\n .style('height', '100%');\n\n // Render the template into the div\n this.ngZone.run(() => {\n // Create context with enhanced node as the implicit value\n const context: AXHierarchyChartNodeContext = {\n $implicit: node as AXHierarchyChartNode & { expanded: boolean; toggleExpanded: () => void },\n };\n\n const viewRef = this.viewContainerRef.createEmbeddedView(templateToUse!, context);\n viewRef.detectChanges();\n\n // Append template contents to the div\n const nodes = viewRef.rootNodes;\n for (const node of nodes) {\n div.node().appendChild(node);\n }\n });\n });\n } else {\n // Render enhanced default nodes (rectangles with text and icons)\n nodeGroups.each((d: any, i: number, nodes: any[]) => {\n const group = this.d3.select(nodes[i]);\n const node = d.data;\n const hasChildren = !!(node.children && node.children.length > 0);\n\n // Node background rect with rounded corners\n group\n .append('rect')\n .attr('x', -nodeWidth / 2)\n .attr('y', -nodeHeight / 2)\n .attr('width', nodeWidth)\n .attr('height', nodeHeight)\n .attr('rx', 6)\n .attr('ry', 6)\n .attr('fill', node.color || `rgb(var(--ax-comp-hierarchy-chart-node-color))`)\n .attr('stroke', `rgb(var(--ax-comp-hierarchy-chart-node-stroke-color))`)\n .attr('stroke-width', options.nodeStrokeWidth)\n .attr('class', 'ax-hierarchy-chart-node');\n\n // Main title/name\n group\n .append('text')\n .attr('y', -10)\n .attr('text-anchor', 'middle')\n .attr('class', 'ax-hierarchy-chart-node-title')\n .attr('fill', 'white')\n .attr('font-weight', 'bold')\n .text(node.name || node.label || '');\n\n // Subtitle if provided\n if (node.subtitle) {\n group\n .append('text')\n .attr('y', 10)\n .attr('text-anchor', 'middle')\n .attr('class', 'ax-hierarchy-chart-node-subtitle')\n .attr('fill', 'rgba(255, 255, 255, 0.8)')\n .attr('font-size', '0.8em')\n .text(node.subtitle);\n }\n\n // Type label if provided\n if (node.type) {\n group\n .append('text')\n .attr('y', 25)\n .attr('text-anchor', 'middle')\n .attr('class', 'ax-hierarchy-chart-node-type')\n .attr('fill', 'rgba(255, 255, 255, 0.7)')\n .attr('font-size', '0.7em')\n .text(node.type);\n }\n\n // Add expand/collapse indicator if node has children\n if (hasChildren && options.collapsible) {\n const isExpanded = this._expandedNodes().has(node.id) && this._expandedNodes().get(node.id);\n\n // Toggle button with better styling\n group\n .append('circle')\n .attr('r', 10)\n .attr('cx', nodeWidth / 2 - 12)\n .attr('cy', -nodeHeight / 2 + 12)\n .attr('fill', 'white')\n .attr('stroke', `rgb(var(--ax-comp-hierarchy-chart-node-stroke-color))`)\n .attr('stroke-width', 1)\n .attr('class', 'ax-hierarchy-chart-toggle-indicator')\n .style('cursor', 'pointer')\n .on('click', (event: MouseEvent) => {\n event.stopPropagation();\n this.toggleNode(node.id);\n });\n\n // Toggle icon\n group\n .append('text')\n .attr('x', nodeWidth / 2 - 12)\n .attr('y', -nodeHeight / 2 + 12)\n .attr('dy', '0.32em')\n .attr('text-anchor', 'middle')\n .attr('class', 'ax-hierarchy-chart-toggle-icon')\n .attr('fill', node.color || `rgb(var(--ax-comp-hierarchy-chart-node-color))`)\n .attr('font-weight', 'bold')\n .style('cursor', 'pointer')\n .text(isExpanded ? '−' : '+')\n .on('click', (event: MouseEvent) => {\n event.stopPropagation();\n this.toggleNode(node.id);\n });\n }\n\n // Icon if provided\n if (node.icon) {\n group\n .append('text')\n .attr('x', -nodeWidth / 2 + 15)\n .attr('y', 0)\n .attr('dy', '0.32em')\n .attr('class', 'ax-hierarchy-chart-node-icon')\n .attr('fill', 'white')\n .attr('class', node.icon);\n }\n\n // Add click handler to the whole node\n group.on('click', (event: MouseEvent) => {\n this.handleNodeClick(event, d);\n });\n\n // Add tooltip if enabled\n if (options.showTooltip && (node.tooltip || node.description)) {\n group.append('title').text(node.tooltip || node.description || '');\n }\n });\n }\n });\n }\n\n /**\n * Toggle node expansion state\n */\n public toggleNode(nodeId: string): void {\n const expandedNodes = new Map(this._expandedNodes());\n const currentState = expandedNodes.get(nodeId);\n const newState = currentState === undefined ? false : !currentState;\n\n expandedNodes.set(nodeId, newState);\n this._expandedNodes.set(expandedNodes);\n\n // Emit toggle event\n this.findNodeById(this.processedData(), nodeId).then((node) => {\n if (node) {\n this.nodeToggle.emit({\n node: node,\n expanded: newState,\n });\n }\n });\n\n // Update toggle indicator immediately for better UX\n this.updateToggleIndicator(nodeId, newState);\n }\n\n /**\n * Update just the toggle indicator without redrawing the chart\n */\n private updateToggleIndicator(nodeId: string, expanded: boolean): void {\n if (!this.d3 || !this.chartContainer()) return;\n\n this.ngZone.runOutsideAngular(() => {\n const container = this.chartContainer().nativeElement;\n const svg = container.querySelector('svg');\n if (!svg) return;\n\n // Find and update the toggle indicator for the specific node\n const nodeGroup = this.d3.select(svg).select(`[data-node-id=\"${nodeId}\"]`);\n if (nodeGroup.empty()) return;\n\n // Update the toggle icon (if it exists)\n const toggleIcon = nodeGroup.select('.ax-hierarchy-chart-toggle-icon');\n if (!toggleIcon.empty()) {\n toggleIcon.text(expanded ? '−' : '+');\n }\n });\n\n // Force effect to run that will update the chart\n // This leverages Angular's reactivity rather than a direct method call\n // which is more consistent with Angular's reactive approach\n const expandedNodes = new Map(this._expandedNodes());\n this._expandedNodes.set(expandedNodes);\n }\n\n /**\n * Find a node by ID\n */\n private async findNodeById(data: AXHierarchyChartData, id: string): Promise<AXHierarchyChartData | null> {\n if (data.id === id) {\n return data;\n }\n\n if (data.children) {\n for (const child of data.children) {\n const found = await this.findNodeById(child, id);\n if (found) {\n return found;\n }\n }\n }\n\n return null;\n }\n\n /**\n * Handle node click events\n */\n private handleNodeClick(event: MouseEvent, d: any): void {\n const node = d.data;\n\n // Emit click event\n this.itemClick.emit({\n event: { nativeEvent: event, sender: this },\n item: node,\n element: event.currentTarget as HTMLElement,\n });\n }\n\n /**\n * Clear existing chart\n */\n public cleanupChart(): void {\n const container = this.chartContainer()?.nativeElement;\n if (!container) return;\n\n // Remove existing SVG\n const svg = container.querySelector('svg');\n if (svg) {\n svg.remove();\n }\n }\n\n public updateChart(): void {\n this.createChart();\n }\n\n /**\n * Get D3 easing function from string name\n */\n private getEasingFunction(easing?: string): any {\n if (!easing) return this.d3.easeCubicInOut;\n\n switch (easing) {\n case 'linear':\n return this.d3.easeLinear;\n case 'ease':\n return this.d3.easePolyInOut;\n case 'ease-in':\n return this.d3.easePolyIn;\n case 'ease-out':\n return this.d3.easePolyOut;\n case 'ease-in-out':\n return this.d3.easePolyInOut;\n case 'cubic':\n return this.d3.easeCubic;\n case 'cubic-in':\n return this.d3.easeCubicIn;\n case 'cubic-out':\n return this.d3.easeCubicOut;\n case 'cubic-in-out':\n return this.d3.easeCubicInOut;\n default:\n return this.d3.easeCubicInOut;\n }\n }\n\n /**\n * Shows a message when no data is available\n */\n private showNoDataMessage(containerElement: HTMLElement): void {\n // Clear existing contents first\n this.d3.select(containerElement).selectAll('*').remove();\n\n const messageContainer = this.d3\n .select(containerElement)\n .append('div')\n .attr('class', 'ax-hierarchy-chart-no-data-message')\n .style('position', 'absolute')\n .style('left', '50%')\n .style('top', '50%')\n .style('transform', 'translate(-50%, -50%)')\n .style('text-align', 'center')\n .style('background-color', 'rgb(var(--ax-comp-hierarchy-chart-bg-color))')\n .style('padding', '1.5rem')\n .style('border-radius', '0.5rem')\n .style('box-shadow', '0 2px 12px rgba(0, 0, 0, 0.08)')\n .style('width', '80%')\n .style('max-width', '300px');\n\n // Add an icon\n messageContainer\n .append('div')\n .attr('class', 'ax-hierarchy-chart-no-data-icon')\n .style('opacity', '0.6')\n .style('margin-bottom', '0.75rem')\n .html(`<i class=\"${this.effectiveMessages().noDataIcon} fa-2x\"></i>`);\n\n // Add text message\n messageContainer\n .append('div')\n .attr('class', 'ax-hierarchy-chart-no-data-text')\n .style('font-size', '1rem')\n .style('font-weight', '600')\n .style('margin-bottom', '0.5rem')\n .text(this.effectiveMessages().noData);\n\n // Add help text\n messageContainer\n .append('div')\n .attr('class', 'ax-hierarchy-chart-no-data-help')\n .style('font-size', '0.8rem')\n .style('opacity', '0.6')\n .text(this.effectiveMessages().noDataHelp);\n }\n}\n","<div class=\"ax-hierarchy-chart\" role=\"img\" #chartContainer></div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|