{"version":3,"file":"index.cjs","sources":["../js/utils/colorUtils.js","../js/utils/securityLimits.js","../js/algorithms/maxSumDistances.js","../js/algorithms/greedy.js","../js/algorithms/kmeans.js","../js/algorithms/simulatedAnnealing.js","../js/algorithms/genetic.js","../js/algorithms/particleSwarm.js","../js/algorithms/antColony.js","../js/algorithms/tabu.js","../js/algorithms/exactMaximum.js","../js/algorithms/exactMinimum.js","../js/algorithms/random.js","../js/utils/pickDistinctColors.js"],"sourcesContent":["export function rgb2lab(rgb) {\n    let r = rgb[0] / 255,\n        g = rgb[1] / 255,\n        b = rgb[2] / 255;\n\n    r = r > 0.04045 ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92;\n    g = g > 0.04045 ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92;\n    b = b > 0.04045 ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92;\n\n    let x = (r * 0.4124 + g * 0.3576 + b * 0.1805) * 100;\n    let y = (r * 0.2126 + g * 0.7152 + b * 0.0722) * 100;\n    let z = (r * 0.0193 + g * 0.1192 + b * 0.9505) * 100;\n\n    x /= 95.047;\n    y /= 100;\n    z /= 108.883;\n\n    x = x > 0.008856 ? Math.pow(x, 1/3) : (7.787 * x) + 16/116;\n    y = y > 0.008856 ? Math.pow(y, 1/3) : (7.787 * y) + 16/116;\n    z = z > 0.008856 ? Math.pow(z, 1/3) : (7.787 * z) + 16/116;\n\n    return [(116 * y) - 16, 500 * (x - y), 200 * (y - z)];\n}\n\nexport function deltaE(labA, labB) {\n    let deltaL = labA[0] - labB[0];\n    let deltaA = labA[1] - labB[1];\n    let deltaB = labA[2] - labB[2];\n    return Math.sqrt(deltaL * deltaL + deltaA * deltaA + deltaB * deltaB);\n}\n\n// Seedable PRNG (mulberry32)\nexport function mulberry32(seed) {\n  let t = seed >>> 0;\n  return function() {\n    t += 0x6D2B79F5;\n    let r = Math.imul(t ^ t >>> 15, 1 | t);\n    r ^= r + Math.imul(r ^ r >>> 7, 61 | r);\n    return ((r ^ r >>> 14) >>> 0) / 4294967296;\n  };\n}\n\n/**\n * Generate a random RGB color using the provided PRNG.\n * @param {function} [prng=Math.random] - Optional PRNG function.\n * @returns {number[]} RGB color [r, g, b]\n */\nexport function randomColor(prng = Math.random) {\n  return [\n    Math.floor(prng() * 256),\n    Math.floor(prng() * 256),\n    Math.floor(prng() * 256)\n  ];\n}\n\nexport function sortColors(colors) {\n    const labColors = colors.map(rgb2lab);\n    const indices = Array.from({length: colors.length}, (_, i) => i);\n    \n    // Sort by L, then a, then b\n    indices.sort((i, j) => {\n        const [L1, a1, b1] = labColors[i];\n        const [L2, a2, b2] = labColors[j];\n        if (L1 !== L2) return L2 - L1;\n        if (a1 !== a2) return a2 - a1;\n        return b2 - b1;\n    });\n    \n    return indices.map(i => colors[i]);\n}\n\nexport function calculateMetrics(colors) {\n    const labColors = colors.map(rgb2lab);\n    let minDist = Infinity;\n    let maxDist = -Infinity;\n    let sumDist = 0;\n    let count = 0;\n    \n    for (let i = 0; i < colors.length - 1; i++) {\n        for (let j = i + 1; j < colors.length; j++) {\n            const dist = deltaE(labColors[i], labColors[j]);\n            minDist = Math.min(minDist, dist);\n            maxDist = Math.max(maxDist, dist);\n            sumDist += dist;\n            count++;\n        }\n    }\n    \n    return {\n        min: minDist,\n        max: maxDist,\n        avg: sumDist / count,\n        sum: sumDist\n    };\n}\n\nexport function analyzeColorDistribution(colors) {\n    if (!colors || colors.length === 0) return 'No colors to analyze';\n    \n    try {\n        const labColors = colors.map(rgb2lab);\n        \n        // Initialize stats with first color\n        const stats = {\n            L: { min: labColors[0][0], max: labColors[0][0], range: [0, 100] },\n            a: { min: labColors[0][1], max: labColors[0][1], range: [-128, 127] },\n            b: { min: labColors[0][2], max: labColors[0][2], range: [-128, 127] }\n        };\n        \n        // Process colors in chunks\n        const chunkSize = 500;\n        for (let i = 1; i < labColors.length; i += chunkSize) {\n            const chunk = labColors.slice(i, i + chunkSize);\n            for (const lab of chunk) {\n                stats.L.min = Math.min(stats.L.min, lab[0]);\n                stats.L.max = Math.max(stats.L.max, lab[0]);\n                stats.a.min = Math.min(stats.a.min, lab[1]);\n                stats.a.max = Math.max(stats.a.max, lab[1]);\n                stats.b.min = Math.min(stats.b.min, lab[2]);\n                stats.b.max = Math.max(stats.b.max, lab[2]);\n            }\n        }\n        \n        // Calculate coverage percentages\n        const coverage = {\n            L: ((stats.L.max - stats.L.min) / (stats.L.range[1] - stats.L.range[0]) * 100).toFixed(1),\n            a: ((stats.a.max - stats.a.min) / (stats.a.range[1] - stats.a.range[0]) * 100).toFixed(1),\n            b: ((stats.b.max - stats.b.min) / (stats.b.range[1] - stats.b.range[0]) * 100).toFixed(1)\n        };\n        \n        return `\n            <strong>Color Space Coverage:</strong><br>\n            Lightness (L*): ${coverage.L}%<br>\n            Green-Red (a*): ${coverage.a}%<br>\n            Blue-Yellow (b*): ${coverage.b}%\n        `;\n    } catch (error) {\n        console.error('Error in analyzeColorDistribution:', error);\n        return 'Error analyzing color distribution';\n    }\n}\n\nexport function rgbToHex(rgb) {\n    return '#' + rgb.map(x => {\n        const hex = x.toString(16);\n        return hex.length === 1 ? '0' + hex : hex;\n    }).join('');\n}\n\nexport function calculateDistanceMatrix(colors) {\n    const labColors = colors.map(rgb2lab);\n    const matrix = [];\n    for (let i = 0; i < colors.length; i++) {\n        matrix[i] = [];\n        for (let j = 0; j < colors.length; j++) {\n            matrix[i][j] = deltaE(labColors[i], labColors[j]);\n        }\n    }\n    return matrix;\n}\n\nexport function findClosestPair(colors) {\n    const labColors = colors.map(rgb2lab);\n    let minDist = Infinity;\n    let closestPair = [0, 1];\n    \n    for (let i = 0; i < colors.length; i++) {\n        for (let j = i + 1; j < colors.length; j++) {\n            const dist = deltaE(labColors[i], labColors[j]);\n            if (dist < minDist) {\n                minDist = dist;\n                closestPair = [i, j];\n            }\n        }\n    }\n    \n    return {\n        colors: [colors[closestPair[0]], colors[closestPair[1]]],\n        distance: minDist\n    };\n} ","export const SECURITY_LIMITS = {\n    MAX_GENERATED_POOL_SIZE: 1024,\n    MAX_COLOR_POOL_SIZE: 4096,\n    MAX_SELECT_COUNT: 256,\n    MAX_EXACT_COMBINATIONS: 1000000,\n    MAX_PAIRWISE_COLORS: 1024,\n    MAX_POPULATION_SIZE: 500,\n    MAX_GENERATIONS: 1000,\n    MAX_PARTICLES: 200,\n    MAX_ANTS: 200,\n    MAX_ITERATIONS: 2000,\n    MAX_WORK_UNITS: 20000000\n};\n\nexport function normalizePositiveInteger(value, name, max = Number.MAX_SAFE_INTEGER) {\n    if (!Number.isSafeInteger(value) || value < 1) {\n        throw new RangeError(`${name} must be a positive safe integer`);\n    }\n    if (value > max) {\n        throw new RangeError(`${name} must be less than or equal to ${max}`);\n    }\n    return value;\n}\n\nexport function validateColorPool(colors, maxColors = SECURITY_LIMITS.MAX_COLOR_POOL_SIZE) {\n    if (!Array.isArray(colors) || colors.length === 0) {\n        throw new TypeError('colors must be a non-empty array of RGB triples');\n    }\n    if (colors.length > maxColors) {\n        throw new RangeError(`colors must contain no more than ${maxColors} entries`);\n    }\n    for (const color of colors) {\n        if (!Array.isArray(color) || color.length !== 3 ||\n            !color.every(component => Number.isInteger(component) && component >= 0 && component <= 255)) {\n            throw new TypeError('each color must be an RGB triple with integer components between 0 and 255');\n        }\n    }\n}\n\nexport function validateSelectionArgs(colors, selectCount, options = {}) {\n    const maxColors = options.maxColors ?? SECURITY_LIMITS.MAX_COLOR_POOL_SIZE;\n    const maxSelectCount = options.maxSelectCount ?? SECURITY_LIMITS.MAX_SELECT_COUNT;\n    validateColorPool(colors, maxColors);\n    normalizePositiveInteger(selectCount, 'selectCount', maxSelectCount);\n    if (selectCount > colors.length) {\n        throw new RangeError('selectCount cannot be greater than the number of colors');\n    }\n}\n\nexport function countCombinationsOverLimit(n, k, limit) {\n    if (k < 0 || k > n) {\n        return false;\n    }\n    const r = Math.min(k, n - k);\n    let combinations = 1;\n    for (let i = 1; i <= r; i++) {\n        combinations = (combinations * (n - r + i)) / i;\n        if (combinations > limit) {\n            return true;\n        }\n    }\n    return false;\n}\n\nexport function validateExactSelectionArgs(colors, selectCount) {\n    validateSelectionArgs(colors, selectCount);\n    if (countCombinationsOverLimit(colors.length, selectCount, SECURITY_LIMITS.MAX_EXACT_COMBINATIONS)) {\n        throw new RangeError(\n            `exact algorithms are limited to ${SECURITY_LIMITS.MAX_EXACT_COMBINATIONS} combinations`\n        );\n    }\n}\n\nexport function validatePairwiseSelectionArgs(colors, selectCount) {\n    validateSelectionArgs(colors, selectCount, { maxColors: SECURITY_LIMITS.MAX_PAIRWISE_COLORS });\n}\n\nexport function validateWorkUnits(name, terms, maxWorkUnits = SECURITY_LIMITS.MAX_WORK_UNITS) {\n    const workUnits = terms.reduce((product, term) => product * term, 1);\n    if (!Number.isFinite(workUnits) || workUnits > maxWorkUnits) {\n        throw new RangeError(`${name} estimated work must be less than or equal to ${maxWorkUnits}`);\n    }\n}\n","import { rgb2lab, deltaE, sortColors, mulberry32 } from '../utils/colorUtils.js';\nimport { validatePairwiseSelectionArgs, validateSelectionArgs } from '../utils/securityLimits.js';\n\nexport function maxSumDistancesGlobal(colors, selectCount) {\n    validatePairwiseSelectionArgs(colors, selectCount);\n    return new Promise((resolve, reject) => {\n        // Create worker code with utility functions in scope\n        const workerCode = `\n            // Import utility functions from parent\n            const rgb2lab = ${rgb2lab.toString()};\n            const deltaE = ${deltaE.toString()};\n            const sortColors = ${sortColors.toString()};\n\n            // Main worker function\n            function maxSumDistancesGlobal(colors, selectCount) {\n                const start = performance.now();\n                const labColors = colors.map(rgb2lab);\n\n                // Calculate total distances from each color to all other colors\n                const totalDistances = colors.map((_, i) => {\n                    let sum = 0;\n                    for (let j = 0; j < colors.length; j++) {\n                        if (i !== j) {\n                            sum += deltaE(labColors[i], labColors[j]);\n                        }\n                    }\n                    return { index: i, sum };\n                });\n\n                // Sort colors by their total distance to all other colors\n                totalDistances.sort((a, b) => b.sum - a.sum);\n\n                // Take the top selectCount colors that have the highest total distances\n                const selectedIndices = totalDistances.slice(0, selectCount).map(item => item.index);\n                const selectedColors = selectedIndices.map(i => colors[i]);\n\n                return {\n                    colors: sortColors(selectedColors),\n                    time: performance.now() - start\n                };\n            }\n\n            // Worker message handler\n            self.onmessage = function(e) {\n                const { colors, selectCount } = e.data;\n                try {\n                    const result = maxSumDistancesGlobal(colors, selectCount);\n                    self.postMessage({ type: 'complete', result });\n                } catch (error) {\n                    self.postMessage({ type: 'error', error: error.message });\n                }\n            };\n        `;\n\n        // Create blob and worker\n        const blob = new Blob([workerCode], { type: 'application/javascript' });\n        const workerUrl = URL.createObjectURL(blob);\n        const worker = new Worker(workerUrl);\n\n        function cleanup() {\n            worker.terminate();\n            URL.revokeObjectURL(workerUrl);\n        }\n\n        // Set up worker message handlers\n        worker.onmessage = function(e) {\n            if (e.data.type === 'complete') {\n                resolve(e.data.result);\n            } else if (e.data.type === 'error') {\n                reject(new Error(e.data.error));\n            }\n            cleanup();\n        };\n\n        worker.onerror = function(error) {\n            reject(error);\n            cleanup();\n        };\n\n        // Start the worker\n        try {\n            worker.postMessage({ colors, selectCount });\n        } catch (error) {\n            cleanup();\n            reject(error);\n        }\n    });\n}\n\nexport function maxSumDistancesSequential(colors, selectCount, seed) {\n    console.log('Starting Maximum Sum (Sequential) calculation...');\n    const start = performance.now();\n    validateSelectionArgs(colors, selectCount);\n\n    const labColors = colors.map(rgb2lab);\n    const selected = [];\n    const available = Array.from({length: colors.length}, (_, i) => i);\n\n    // Use seeded PRNG if seed is provided\n    const prng = typeof seed === 'number' ? mulberry32(seed) : Math.random;\n\n    // Helper function to calculate total distance from a point to selected points\n    function calculateTotalDistance(index) {\n        return selected.reduce((sum, selectedIndex) =>\n            sum + deltaE(labColors[index], labColors[selectedIndex]), 0);\n    }\n\n    // Select first point randomly\n    const firstIndex = Math.floor(prng() * available.length);\n    selected.push(available[firstIndex]);\n    available.splice(firstIndex, 1);\n\n    // Select remaining points\n    while (selected.length < selectCount) {\n        let bestIndex = 0;\n        let bestDistance = -Infinity;\n\n        // Find point with maximum sum of distances to selected points\n        for (let i = 0; i < available.length; i++) {\n            const totalDistance = calculateTotalDistance(available[i]);\n            if (totalDistance > bestDistance) {\n                bestDistance = totalDistance;\n                bestIndex = i;\n            }\n        }\n\n        selected.push(available[bestIndex]);\n        available.splice(bestIndex, 1);\n    }\n\n    return {\n        colors: sortColors(selected.map(i => colors[i])),\n        time: performance.now() - start\n    };\n}\n","import { rgb2lab, deltaE, sortColors, mulberry32 } from '../utils/colorUtils.js';\nimport { validateSelectionArgs } from '../utils/securityLimits.js';\n\nexport function greedySelection(colors, selectCount, seed) {\n    console.log('Starting Greedy calculation...');\n    const start = performance.now();\n    validateSelectionArgs(colors, selectCount);\n\n    const labColors = colors.map(rgb2lab);\n    const selected = [];\n    const available = Array.from({length: colors.length}, (_, i) => i);\n\n    // Use seeded PRNG if seed is provided\n    const prng = typeof seed === 'number' ? mulberry32(seed) : Math.random;\n\n    // Helper function to calculate minimum distance from a point to selected points\n    function calculateMinDistance(index) {\n        if (selected.length === 0) return Infinity;\n        return Math.min(...selected.map(selectedIndex =>\n            deltaE(labColors[index], labColors[selectedIndex])\n        ));\n    }\n\n    // Select first point randomly\n    const firstIndex = Math.floor(prng() * available.length);\n    selected.push(available[firstIndex]);\n    available.splice(firstIndex, 1);\n\n    // Select remaining points\n    while (selected.length < selectCount) {\n        let bestIndex = 0;\n        let bestMinDistance = -Infinity;\n\n        // Find point with maximum minimum distance to selected points\n        for (let i = 0; i < available.length; i++) {\n            const minDistance = calculateMinDistance(available[i]);\n            if (minDistance > bestMinDistance) {\n                bestMinDistance = minDistance;\n                bestIndex = i;\n            }\n        }\n\n        selected.push(available[bestIndex]);\n        available.splice(bestIndex, 1);\n    }\n\n    return {\n        colors: sortColors(selected.map(i => colors[i])),\n        time: performance.now() - start\n    };\n}\n","import { rgb2lab, deltaE, sortColors, mulberry32 } from '../utils/colorUtils.js';\nimport { validateSelectionArgs } from '../utils/securityLimits.js';\n\nexport function kmeansppSelection(colors, selectCount, seed) {\n    console.log('Starting K-means++ calculation...');\n    const start = performance.now();\n    validateSelectionArgs(colors, selectCount);\n\n    const labColors = colors.map(rgb2lab);\n\n    // Use seeded PRNG if seed is provided\n    const prng = typeof seed === 'number' ? mulberry32(seed) : Math.random;\n\n    // Helper function to find minimum distance to existing centers\n    function minDistanceToCenters(point, centers) {\n        if (centers.length === 0) return Infinity;\n        return Math.min(...centers.map(center =>\n            deltaE(labColors[point], labColors[center])\n        ));\n    }\n\n    // Select initial center randomly\n    const selected = [Math.floor(prng() * colors.length)];\n\n    // Select remaining centers using k-means++ initialization\n    while (selected.length < selectCount) {\n        const distances = Array.from({length: colors.length}, (_, i) => {\n            if (selected.includes(i)) return 0;\n            const dist = minDistanceToCenters(i, selected);\n            return dist * dist; // Square distances for k-means++\n        });\n\n        const sum = distances.reduce((a, b) => a + b, 0);\n        let random = prng() * sum;\n        let selectedIndex = 0;\n\n        while (random > 0 && selectedIndex < distances.length) {\n            if (!selected.includes(selectedIndex)) {\n                random -= distances[selectedIndex];\n            }\n            if (random > 0) selectedIndex++;\n        }\n\n        selected.push(selectedIndex);\n    }\n\n    return {\n        colors: sortColors(selected.map(i => colors[i])),\n        time: performance.now() - start\n    };\n}\n","import { rgb2lab, deltaE, sortColors, mulberry32 } from '../utils/colorUtils.js';\nimport {\n    SECURITY_LIMITS,\n    normalizePositiveInteger,\n    validateSelectionArgs,\n    validateWorkUnits\n} from '../utils/securityLimits.js';\n\nexport function simulatedAnnealing(colors, selectCount, settings = {}) {\n    console.log('Starting Simulated Annealing calculation...');\n    const start = performance.now();\n    validateSelectionArgs(colors, selectCount);\n\n    const labColors = colors.map(rgb2lab);\n    const maxIterations = normalizePositiveInteger(settings.maxIterations ?? 1000, 'maxIterations', SECURITY_LIMITS.MAX_ITERATIONS);\n    validateWorkUnits('simulatedAnnealing', [maxIterations, selectCount, selectCount]);\n    const initialTemp = settings.initialTemp ?? 1000;\n    const coolingRate = settings.coolingRate ?? 0.995;\n    const minTemp = settings.minTemp ?? 0.1;\n\n    // Use seeded PRNG if settings.seed is provided\n    const prng = typeof settings.seed === 'number' ? mulberry32(settings.seed) : Math.random;\n\n    // Helper function to calculate minimum distance between selected colors\n    function calculateFitness(selection) {\n        let minDist = Infinity;\n        for (let i = 0; i < selection.length - 1; i++) {\n            for (let j = i + 1; j < selection.length; j++) {\n                const dist = deltaE(labColors[selection[i]], labColors[selection[j]]);\n                minDist = Math.min(minDist, dist);\n            }\n        }\n        return minDist;\n    }\n\n    // Generate initial solution\n    let currentSolution = Array.from({length: colors.length}, (_, i) => i)\n        .sort(() => prng() - 0.5)\n        .slice(0, selectCount);\n    let currentFitness = calculateFitness(currentSolution);\n\n    let bestSolution = [...currentSolution];\n    let bestFitness = currentFitness;\n\n    let temperature = initialTemp;\n\n    // Main loop\n    for (let i = 0; i < maxIterations && temperature > minTemp; i++) {\n        // Generate neighbor by swapping one selected color with an unselected one\n        const neighborSolution = [...currentSolution];\n        const swapIndex = Math.floor(prng() * selectCount);\n        const availableIndices = Array.from({length: colors.length}, (_, i) => i)\n            .filter(i => !currentSolution.includes(i));\n        const newIndex = availableIndices[Math.floor(prng() * availableIndices.length)];\n        neighborSolution[swapIndex] = newIndex;\n\n        const neighborFitness = calculateFitness(neighborSolution);\n\n        // Decide if we should accept the neighbor\n        const delta = neighborFitness - currentFitness;\n        if (delta > 0 || prng() < Math.exp(delta / temperature)) {\n            currentSolution = neighborSolution;\n            currentFitness = neighborFitness;\n\n            if (currentFitness > bestFitness) {\n                bestSolution = [...currentSolution];\n                bestFitness = currentFitness;\n            }\n        }\n\n        temperature *= coolingRate;\n    }\n\n    return {\n        colors: sortColors(bestSolution.map(i => colors[i])),\n        time: performance.now() - start\n    };\n}\n","import { rgb2lab, deltaE, sortColors, mulberry32 } from '../utils/colorUtils.js';\nimport {\n    SECURITY_LIMITS,\n    normalizePositiveInteger,\n    validateSelectionArgs,\n    validateWorkUnits\n} from '../utils/securityLimits.js';\n\nexport function geneticAlgorithm(colors, selectCount, settings = {}) {\n    console.log('Starting Genetic Algorithm calculation...');\n    const start = performance.now();\n    validateSelectionArgs(colors, selectCount);\n\n    const labColors = colors.map(rgb2lab);\n    const populationSize = normalizePositiveInteger(settings.populationSize ?? 100, 'populationSize', SECURITY_LIMITS.MAX_POPULATION_SIZE);\n    const generations = normalizePositiveInteger(settings.generations ?? 100, 'generations', SECURITY_LIMITS.MAX_GENERATIONS);\n    validateWorkUnits('geneticAlgorithm', [populationSize, generations, selectCount, selectCount]);\n    const mutationRate = settings.mutationRate ?? 0.1;\n\n    // Use seeded PRNG if settings.seed is provided\n    const prng = typeof settings.seed === 'number' ? mulberry32(settings.seed) : Math.random;\n\n    // Helper function to calculate minimum distance between selected colors\n    function calculateFitness(selection) {\n        let minDist = Infinity;\n        for (let i = 0; i < selection.length - 1; i++) {\n            for (let j = i + 1; j < selection.length; j++) {\n                const dist = deltaE(labColors[selection[i]], labColors[selection[j]]);\n                minDist = Math.min(minDist, dist);\n            }\n        }\n        return minDist;\n    }\n\n    // Generate initial population\n    let population = Array(populationSize).fill().map(() =>\n        Array.from({length: colors.length}, (_, i) => i)\n            .sort(() => prng() - 0.5)\n            .slice(0, selectCount)\n    );\n\n    let bestSolution = population[0];\n    let bestFitness = calculateFitness(bestSolution);\n\n    // Main loop\n    for (let generation = 0; generation < generations; generation++) {\n        // Calculate fitness for each solution\n        const fitnesses = population.map(calculateFitness);\n\n        // Update best solution\n        const maxFitnessIndex = fitnesses.indexOf(Math.max(...fitnesses));\n        if (fitnesses[maxFitnessIndex] > bestFitness) {\n            bestSolution = [...population[maxFitnessIndex]];\n            bestFitness = fitnesses[maxFitnessIndex];\n        }\n\n        // Create new population through selection and crossover\n        const newPopulation = [];\n\n        while (newPopulation.length < populationSize) {\n            // Tournament selection\n            const tournament1 = Array(3).fill().map(() => Math.floor(prng() * populationSize));\n            const tournament2 = Array(3).fill().map(() => Math.floor(prng() * populationSize));\n\n            const parent1 = population[tournament1.reduce((a, b) =>\n                fitnesses[a] > fitnesses[b] ? a : b)];\n            const parent2 = population[tournament2.reduce((a, b) =>\n                fitnesses[a] > fitnesses[b] ? a : b)];\n\n            // Crossover\n            const crossoverPoint = Math.floor(prng() * selectCount);\n            const child = [...new Set([\n                ...parent1.slice(0, crossoverPoint),\n                ...parent2.slice(crossoverPoint)\n            ])];\n\n            // Fill up with random colors if needed\n            while (child.length < selectCount) {\n                const available = Array.from({length: colors.length}, (_, i) => i)\n                    .filter(i => !child.includes(i));\n                child.push(available[Math.floor(prng() * available.length)]);\n            }\n\n            // Mutation\n            if (prng() < mutationRate) {\n                const mutationIndex = Math.floor(prng() * selectCount);\n                const available = Array.from({length: colors.length}, (_, i) => i)\n                    .filter(i => !child.includes(i));\n                child[mutationIndex] = available[Math.floor(prng() * available.length)];\n            }\n\n            newPopulation.push(child);\n        }\n\n        population = newPopulation;\n    }\n\n    return {\n        colors: sortColors(bestSolution.map(i => colors[i])),\n        time: performance.now() - start\n    };\n}\n","import { rgb2lab, deltaE, sortColors, mulberry32 } from '../utils/colorUtils.js';\nimport {\n    SECURITY_LIMITS,\n    normalizePositiveInteger,\n    validateSelectionArgs,\n    validateWorkUnits\n} from '../utils/securityLimits.js';\n\nexport function particleSwarmOptimization(colors, selectCount, settings = {}) {\n    console.log('Starting Particle Swarm Optimization...');\n    const start = performance.now();\n    validateSelectionArgs(colors, selectCount);\n\n    const labColors = colors.map(rgb2lab);\n    const numParticles = normalizePositiveInteger(settings.numParticles ?? 30, 'numParticles', SECURITY_LIMITS.MAX_PARTICLES);\n    const maxIterations = normalizePositiveInteger(settings.psoIterations ?? settings.iterations ?? 100, 'psoIterations', SECURITY_LIMITS.MAX_ITERATIONS);\n    validateWorkUnits('particleSwarmOptimization', [numParticles, maxIterations, selectCount]);\n    const w = settings.inertiaWeight ?? 0.7;  // inertia weight\n    const c1 = settings.cognitiveWeight ?? 1.5; // cognitive weight\n    const c2 = settings.socialWeight ?? 1.5; // social weight\n\n    // Use seeded PRNG if settings.seed is provided\n    const prng = typeof settings.seed === 'number' ? mulberry32(settings.seed) : Math.random;\n\n    // Helper function to calculate minimum distance between selected colors\n    function calculateFitness(selection) {\n        let minDist = Infinity;\n        for (let i = 0; i < selection.length - 1; i++) {\n            for (let j = i + 1; j < selection.length; j++) {\n                const dist = deltaE(labColors[selection[i]], labColors[selection[j]]);\n                minDist = Math.min(minDist, dist);\n            }\n        }\n        return minDist;\n    }\n\n    // Initialize particles\n    const particles = Array(numParticles).fill().map(() => ({\n        position: Array.from({length: colors.length}, (_, i) => i)\n            .sort(() => prng() - 0.5)\n            .slice(0, selectCount),\n        velocity: Array(selectCount).fill(0),\n        bestPosition: null,\n        bestFitness: -Infinity\n    }));\n\n    let globalBestPosition = null;\n    let globalBestFitness = -Infinity;\n\n    // Main loop\n    for (let iteration = 0; iteration < maxIterations; iteration++) {\n        for (const particle of particles) {\n            // Calculate fitness\n            const fitness = calculateFitness(particle.position);\n\n            // Update particle's best\n            if (fitness > particle.bestFitness) {\n                particle.bestPosition = [...particle.position];\n                particle.bestFitness = fitness;\n\n                // Update global best\n                if (fitness > globalBestFitness) {\n                    globalBestPosition = [...particle.position];\n                    globalBestFitness = fitness;\n                }\n            }\n\n            // Update velocity and position\n            for (let i = 0; i < selectCount; i++) {\n                const r1 = prng();\n                const r2 = prng();\n\n                particle.velocity[i] = Math.floor(\n                    w * particle.velocity[i] +\n                    c1 * r1 * (particle.bestPosition[i] - particle.position[i]) +\n                    c2 * r2 * (globalBestPosition[i] - particle.position[i])\n                );\n\n                // Apply velocity (swap with another color)\n                if (particle.velocity[i] !== 0) {\n                    const available = Array.from({length: colors.length}, (_, i) => i)\n                        .filter(j => !particle.position.includes(j));\n                    if (available.length > 0) {\n                        const swapIndex = Math.floor(prng() * available.length);\n                        particle.position[i] = available[swapIndex];\n                    }\n                }\n            }\n        }\n    }\n\n    return {\n        colors: sortColors(globalBestPosition.map(i => colors[i])),\n        time: performance.now() - start\n    };\n}\n","import { rgb2lab, deltaE, sortColors, mulberry32 } from '../utils/colorUtils.js';\nimport {\n    SECURITY_LIMITS,\n    normalizePositiveInteger,\n    validatePairwiseSelectionArgs,\n    validateWorkUnits\n} from '../utils/securityLimits.js';\n\nexport function antColonyOptimization(colors, selectCount, settings = {}) {\n    console.log('Starting Ant Colony Optimization...');\n    const start = performance.now();\n    validatePairwiseSelectionArgs(colors, selectCount);\n\n    const labColors = colors.map(rgb2lab);\n    const numAnts = normalizePositiveInteger(settings.numAnts ?? 20, 'numAnts', SECURITY_LIMITS.MAX_ANTS);\n    const maxIterations = normalizePositiveInteger(settings.acoIterations ?? settings.iterations ?? 100, 'acoIterations', SECURITY_LIMITS.MAX_ITERATIONS);\n    validateWorkUnits('antColonyOptimization', [maxIterations, numAnts, selectCount, colors.length]);\n    const evaporationRate = settings.evaporationRate ?? 0.1;\n    const alpha = settings.pheromoneImportance ?? 1; // pheromone importance\n    const beta = settings.heuristicImportance ?? 2;  // heuristic importance\n\n    // Use seeded PRNG if settings.seed is provided\n    const prng = typeof settings.seed === 'number' ? mulberry32(settings.seed) : Math.random;\n\n    // Initialize pheromone trails\n    const pheromones = Array(colors.length).fill(1);\n\n    // Calculate heuristic information (distances between colors)\n    const distances = Array(colors.length).fill().map(() => Array(colors.length));\n    for (let i = 0; i < colors.length; i++) {\n        for (let j = i + 1; j < colors.length; j++) {\n            const distance = deltaE(labColors[i], labColors[j]);\n            distances[i][j] = distance;\n            distances[j][i] = distance;\n        }\n    }\n\n    let bestSolution = null;\n    let bestFitness = -Infinity;\n\n    // Main ACO loop\n    for (let iteration = 0; iteration < maxIterations; iteration++) {\n        // Solutions found by ants in this iteration\n        const solutions = [];\n\n        // Each ant constructs a solution\n        for (let ant = 0; ant < numAnts; ant++) {\n            const available = Array.from({length: colors.length}, (_, i) => i);\n            const solution = [];\n\n            // Randomly select first color\n            const firstIndex = Math.floor(prng() * available.length);\n            solution.push(available[firstIndex]);\n            available.splice(firstIndex, 1);\n\n            // Select remaining colors\n            while (solution.length < selectCount) {\n                // Calculate probabilities for each available color\n                const probabilities = available.map(i => {\n                    const pheromone = Math.pow(pheromones[i], alpha);\n                    const minDist = Math.min(...solution.map(j => distances[i][j]));\n                    const heuristic = Math.pow(minDist, beta);\n                    return pheromone * heuristic;\n                });\n\n                // Select next color using roulette wheel selection\n                const total = probabilities.reduce((a, b) => a + b, 0);\n                let random = prng() * total;\n                let selectedIndex = 0;\n\n                while (random > 0 && selectedIndex < probabilities.length) {\n                    random -= probabilities[selectedIndex];\n                    if (random > 0) selectedIndex++;\n                }\n\n                solution.push(available[selectedIndex]);\n                available.splice(selectedIndex, 1);\n            }\n\n            solutions.push(solution);\n        }\n\n        // Evaluate solutions and update best\n        for (const solution of solutions) {\n            const fitness = Math.min(...solution.map((i, idx) =>\n                solution.slice(idx + 1).map(j =>\n                    deltaE(labColors[i], labColors[j])\n                )\n            ).flat());\n\n            if (fitness > bestFitness) {\n                bestFitness = fitness;\n                bestSolution = solution;\n            }\n        }\n\n        // Update pheromones\n        for (let i = 0; i < pheromones.length; i++) {\n            pheromones[i] *= (1 - evaporationRate);\n        }\n\n        // Add new pheromones from solutions\n        for (const solution of solutions) {\n            const deposit = 1 / solution.length;\n            for (const i of solution) {\n                pheromones[i] += deposit;\n            }\n        }\n    }\n\n    return {\n        colors: sortColors(bestSolution.map(i => colors[i])),\n        time: performance.now() - start\n    };\n}\n","import { rgb2lab, deltaE, sortColors } from '../utils/colorUtils.js';\nimport {\n    SECURITY_LIMITS,\n    normalizePositiveInteger,\n    validateSelectionArgs,\n    validateWorkUnits\n} from '../utils/securityLimits.js';\n\nexport function tabuSearch(colors, selectCount, settings = {}) {\n    console.log('Starting Tabu Search...');\n    const start = performance.now();\n    validateSelectionArgs(colors, selectCount);\n\n    const labColors = colors.map(rgb2lab);\n    const maxIterations = normalizePositiveInteger(settings.tabuIterations ?? settings.maxIterations ?? 1000, 'tabuIterations', SECURITY_LIMITS.MAX_ITERATIONS);\n    const tabuTenure = normalizePositiveInteger(settings.tabuTenure ?? 5, 'tabuTenure', SECURITY_LIMITS.MAX_ITERATIONS);\n    validateWorkUnits('tabuSearch', [maxIterations, selectCount, colors.length]);\n\n    // Helper function to calculate minimum distance between selected colors\n    function calculateFitness(selection) {\n        let minDist = Infinity;\n        for (let i = 0; i < selection.length - 1; i++) {\n            for (let j = i + 1; j < selection.length; j++) {\n                const dist = deltaE(labColors[selection[i]], labColors[selection[j]]);\n                minDist = Math.min(minDist, dist);\n            }\n        }\n        return minDist;\n    }\n\n    // Initialize solution\n    let current = Array.from({length: selectCount}, (_, i) => i);\n    let best = [...current];\n    let bestFitness = calculateFitness(best);\n\n    // Tabu list implementation using a Map to store move expiration\n    const tabuList = new Map();\n\n    // Generate move key for tabu list\n    function getMoveKey(oldColor, newColor) {\n        return `${oldColor}-${newColor}`;\n    }\n\n    for (let iteration = 0; iteration < maxIterations; iteration++) {\n        let bestNeighborSolution = null;\n        let bestNeighborFitness = -Infinity;\n\n        // Examine all possible moves\n        for (let i = 0; i < selectCount; i++) {\n            for (let j = 0; j < colors.length; j++) {\n                if (!current.includes(j)) {\n                    const moveKey = getMoveKey(current[i], j);\n                    const neighbor = [...current];\n                    neighbor[i] = j;\n\n                    const fitness = calculateFitness(neighbor);\n\n                    // Accept if better than current best neighbor and not tabu\n                    // or if satisfies aspiration criterion (better than global best)\n                    if ((fitness > bestNeighborFitness &&\n                         (!tabuList.has(moveKey) || tabuList.get(moveKey) <= iteration)) ||\n                        fitness > bestFitness) {\n                        bestNeighborSolution = neighbor;\n                        bestNeighborFitness = fitness;\n                    }\n                }\n            }\n        }\n\n        if (!bestNeighborSolution) break;\n\n        // Update current solution\n        current = bestNeighborSolution;\n\n        // Update best solution if improved\n        if (bestNeighborFitness > bestFitness) {\n            best = [...current];\n            bestFitness = bestNeighborFitness;\n        }\n\n        // Update tabu list\n        for (let i = 0; i < selectCount; i++) {\n            const moveKey = getMoveKey(current[i], best[i]);\n            tabuList.set(moveKey, iteration + tabuTenure);\n        }\n\n        // Clean expired tabu moves\n        for (const [move, expiration] of tabuList.entries()) {\n            if (expiration <= iteration) {\n                tabuList.delete(move);\n            }\n        }\n    }\n\n    return {\n        colors: sortColors(best.map(i => colors[i])),\n        time: performance.now() - start\n    };\n}\n","import { rgb2lab, deltaE, sortColors } from '../utils/colorUtils.js';\nimport { validateExactSelectionArgs } from '../utils/securityLimits.js';\n\nexport function exactMaximum(colors, selectCount) {\n    console.log('Starting Exact Maximum calculation...');\n    const start = performance.now();\n    validateExactSelectionArgs(colors, selectCount);\n\n    const labColors = colors.map(rgb2lab);\n    let bestSelection = null;\n    let bestMaxDistance = -Infinity;\n\n    // Helper function to calculate maximum distance between selected colors\n    function calculateMaxDistance(selection) {\n        let maxDist = -Infinity;\n        for (let i = 0; i < selection.length - 1; i++) {\n            for (let j = i + 1; j < selection.length; j++) {\n                const dist = deltaE(labColors[selection[i]], labColors[selection[j]]);\n                maxDist = Math.max(maxDist, dist);\n            }\n        }\n        return maxDist;\n    }\n\n    // Generate all possible combinations\n    function* combinations(arr, r) {\n        if (r === 1) {\n            for (let i = 0; i < arr.length; i++) {\n                yield [arr[i]];\n            }\n            return;\n        }\n\n        for (let i = 0; i < arr.length - r + 1; i++) {\n            const head = arr[i];\n            const remaining = arr.slice(i + 1);\n            for (const tail of combinations(remaining, r - 1)) {\n                yield [head, ...tail];\n            }\n        }\n    }\n\n    // Try all combinations\n    const indices = Array.from({length: colors.length}, (_, i) => i);\n    for (const selection of combinations(indices, selectCount)) {\n        const maxDistance = calculateMaxDistance(selection);\n        if (maxDistance > bestMaxDistance) {\n            bestMaxDistance = maxDistance;\n            bestSelection = selection;\n        }\n    }\n\n    return {\n        colors: sortColors(bestSelection.map(i => colors[i])),\n        time: performance.now() - start\n    };\n}\n","import { rgb2lab, deltaE, sortColors } from '../utils/colorUtils.js';\nimport { validateExactSelectionArgs } from '../utils/securityLimits.js';\n\nexport function exactMinimum(colors, selectCount) {\n    console.log('Starting Exact Minimum calculation...');\n    const start = performance.now();\n    validateExactSelectionArgs(colors, selectCount);\n\n    const labColors = colors.map(rgb2lab);\n    let bestSelection = null;\n    let bestMinDistance = -Infinity;\n\n    // Helper function to calculate minimum distance between selected colors\n    function calculateMinDistance(selection) {\n        let minDist = Infinity;\n        for (let i = 0; i < selection.length - 1; i++) {\n            for (let j = i + 1; j < selection.length; j++) {\n                const dist = deltaE(labColors[selection[i]], labColors[selection[j]]);\n                minDist = Math.min(minDist, dist);\n            }\n        }\n        return minDist;\n    }\n\n    // Generate all possible combinations\n    function* combinations(arr, r) {\n        if (r === 1) {\n            for (let i = 0; i < arr.length; i++) {\n                yield [arr[i]];\n            }\n            return;\n        }\n\n        for (let i = 0; i < arr.length - r + 1; i++) {\n            const head = arr[i];\n            const remaining = arr.slice(i + 1);\n            for (const tail of combinations(remaining, r - 1)) {\n                yield [head, ...tail];\n            }\n        }\n    }\n\n    // Try all combinations\n    const indices = Array.from({length: colors.length}, (_, i) => i);\n    for (const selection of combinations(indices, selectCount)) {\n        const minDistance = calculateMinDistance(selection);\n        if (minDistance > bestMinDistance) {\n            bestMinDistance = minDistance;\n            bestSelection = selection;\n        }\n    }\n\n    return {\n        colors: sortColors(bestSelection.map(i => colors[i])),\n        time: performance.now() - start\n    };\n}\n","import { sortColors, mulberry32 } from '../utils/colorUtils.js';\nimport { validateSelectionArgs } from '../utils/securityLimits.js';\n\nexport function randomSelection(colors, selectCount, seed) {\n    console.log('Starting Random Selection...');\n    const start = performance.now();\n    validateSelectionArgs(colors, selectCount);\n\n    // Use seeded PRNG if seed is provided\n    const prng = typeof seed === 'number' ? mulberry32(seed) : Math.random;\n\n    // Randomly select indices without replacement\n    const indices = Array.from({length: colors.length}, (_, i) => i);\n    const selected = [];\n\n    for (let i = 0; i < selectCount; i++) {\n        const randomIndex = Math.floor(prng() * indices.length);\n        selected.push(indices[randomIndex]);\n        indices.splice(randomIndex, 1);\n    }\n\n    return {\n        colors: sortColors(selected.map(i => colors[i])),\n        time: performance.now() - start\n    };\n}\n","import { randomColor, mulberry32 } from './colorUtils.js';\nimport { maxSumDistancesGlobal, maxSumDistancesSequential } from '../algorithms/maxSumDistances.js';\nimport { greedySelection } from '../algorithms/greedy.js';\nimport { kmeansppSelection } from '../algorithms/kmeans.js';\nimport { simulatedAnnealing } from '../algorithms/simulatedAnnealing.js';\nimport { geneticAlgorithm } from '../algorithms/genetic.js';\nimport { particleSwarmOptimization } from '../algorithms/particleSwarm.js';\nimport { antColonyOptimization } from '../algorithms/antColony.js';\nimport { tabuSearch } from '../algorithms/tabu.js';\nimport { exactMaximum } from '../algorithms/exactMaximum.js';\nimport { exactMinimum } from '../algorithms/exactMinimum.js';\nimport { randomSelection } from '../algorithms/random.js';\nimport {\n  SECURITY_LIMITS,\n  normalizePositiveInteger,\n  validateColorPool,\n} from './securityLimits.js';\n\nconst ALGORITHMS = {\n  greedy: greedySelection,\n  maxSumDistancesGlobal,\n  maxSumDistancesSequential,\n  kmeansppSelection,\n  simulatedAnnealing,\n  geneticAlgorithm,\n  particleSwarmOptimization,\n  antColonyOptimization,\n  tabuSearch,\n  exactMaximum,\n  exactMinimum,\n  randomSelection,\n};\n\n/**\n * Pick a set of maximally distinct colors using the specified algorithm.\n *\n * Recommended usage (named arguments):\n *   pickDistinctColors({ count, algorithm, poolSize, colors, options, seed })\n *\n * @param {object|number} args - Either an options object or the count (legacy positional signature).\n * @param {number} args.count - Number of colors to select.\n * @param {string} [args.algorithm='greedy'] - Algorithm name (see docs for options).\n * @param {number} [args.poolSize] - Number of random colors to generate if no pool is provided (default: Math.max(count * 16, 128)).\n * @param {number[][]} [args.colors] - Optional array of RGB colors to select from.\n * @param {object} [args.options] - Optional algorithm-specific options.\n * @param {number} [args.seed=42] - Seed for deterministic random color generation.\n * @returns {Promise<{colors: number[][], time: number}>} Selected colors and execution time.\n */\nexport async function pickDistinctColors(args, algorithm, poolSize, colors, options, seed) {\n  // Support both: pickDistinctColors({ ... }) and pickDistinctColors(count, ...)\n  let count, _algorithm, _poolSize, _colors, _options, _seed;\n  if (typeof args === 'object' && args !== null && !Array.isArray(args)) {\n    count = args.count;\n    _algorithm = args.algorithm ?? 'greedy';\n    _poolSize = args.poolSize;\n    _colors = args.colors;\n    _options = args.options;\n    _seed = args.seed ?? 42;\n  } else {\n    // Legacy positional signature\n    count = args;\n    _algorithm = algorithm ?? 'greedy';\n    _poolSize = poolSize;\n    _colors = colors;\n    _options = options;\n    _seed = seed ?? 42;\n  }\n  if (!ALGORITHMS[_algorithm]) {\n    throw new Error(`Unknown algorithm: ${_algorithm}`);\n  }\n  count = normalizePositiveInteger(count, 'count', SECURITY_LIMITS.MAX_SELECT_COUNT);\n  let pool = _colors;\n  if (!Array.isArray(pool) || pool.length === 0) {\n    const defaultSize = _algorithm === 'exactMaximum' || _algorithm === 'exactMinimum'\n      ? Math.max(count * 4, 20)\n      : Math.min(Math.max(count * 16, 128), SECURITY_LIMITS.MAX_GENERATED_POOL_SIZE);\n    const size = _poolSize === undefined\n      ? defaultSize\n      : normalizePositiveInteger(_poolSize, 'poolSize', SECURITY_LIMITS.MAX_GENERATED_POOL_SIZE);\n    const prng = mulberry32(_seed);\n    pool = Array.from({ length: size }, () => randomColor(prng));\n  }\n  validateColorPool(pool);\n  if (count > pool.length) {\n    throw new RangeError('count cannot be greater than the number of colors in the pool');\n  }\n  if (_algorithm === 'maxSumDistancesGlobal') {\n    return await maxSumDistancesGlobal(pool, count);\n  }\n  if (_algorithm === 'maxSumDistancesSequential') {\n    return maxSumDistancesSequential(pool, count, _seed);\n  }\n  if (_algorithm === 'greedy') {\n    return greedySelection(pool, count, _seed);\n  }\n  if (_algorithm === 'kmeansppSelection') {\n    return kmeansppSelection(pool, count, _seed);\n  }\n  if (_algorithm === 'simulatedAnnealing') {\n    const opts = { ...(_options || {}), seed: _seed };\n    return simulatedAnnealing(pool, count, opts);\n  }\n  if (_algorithm === 'geneticAlgorithm') {\n    const opts = { ...(_options || {}), seed: _seed };\n    return geneticAlgorithm(pool, count, opts);\n  }\n  if (_algorithm === 'particleSwarmOptimization') {\n    const opts = { ...(_options || {}), seed: _seed };\n    return particleSwarmOptimization(pool, count, opts);\n  }\n  if (_algorithm === 'antColonyOptimization') {\n    const opts = { ...(_options || {}), seed: _seed };\n    return antColonyOptimization(pool, count, opts);\n  }\n  if (_algorithm === 'tabuSearch') {\n    const opts = { ...(_options || {}), seed: _seed };\n    return tabuSearch(pool, count, opts);\n  }\n  if (_algorithm === 'exactMaximum') {\n    return exactMaximum(pool, count);\n  }\n  if (_algorithm === 'exactMinimum') {\n    return exactMinimum(pool, count);\n  }\n  if (_algorithm === 'randomSelection') {\n    return randomSelection(pool, count, _seed);\n  }\n  throw new Error(`Algorithm not implemented: ${_algorithm}`);\n}\n"],"names":["rgb2lab","rgb","r","g","b","Math","pow","x","y","z","deltaE","labA","labB","deltaL","deltaA","deltaB","sqrt","mulberry32","seed","t","imul","randomColor","prng","random","floor","sortColors","colors","labColors","map","indices","Array","from","length","_","i","sort","j","L1","a1","b1","L2","a2","b2","calculateMetrics","minDist","Infinity","maxDist","sumDist","count","dist","min","max","avg","sum","analyzeColorDistribution","stats","L","range","a","chunkSize","chunk","slice","lab","coverage","toFixed","error","console","findClosestPair","closestPair","distance","SECURITY_LIMITS","MAX_GENERATED_POOL_SIZE","MAX_COLOR_POOL_SIZE","MAX_SELECT_COUNT","MAX_EXACT_COMBINATIONS","MAX_PAIRWISE_COLORS","MAX_POPULATION_SIZE","MAX_GENERATIONS","MAX_PARTICLES","MAX_ANTS","MAX_ITERATIONS","MAX_WORK_UNITS","normalizePositiveInteger","value","name","Number","MAX_SAFE_INTEGER","isSafeInteger","RangeError","validateColorPool","maxColors","isArray","TypeError","color","every","component","isInteger","validateSelectionArgs","selectCount","options","maxSelectCount","countCombinationsOverLimit","n","k","limit","combinations","validateExactSelectionArgs","validatePairwiseSelectionArgs","validateWorkUnits","terms","maxWorkUnits","workUnits","reduce","product","term","isFinite","maxSumDistancesGlobal","Promise","resolve","reject","workerCode","toString","blob","Blob","type","workerUrl","URL","createObjectURL","worker","Worker","cleanup","terminate","revokeObjectURL","onmessage","e","data","result","Error","onerror","postMessage","maxSumDistancesSequential","log","start","performance","now","selected","available","calculateTotalDistance","index","selectedIndex","firstIndex","push","splice","bestIndex","bestDistance","totalDistance","time","greedySelection","calculateMinDistance","bestMinDistance","minDistance","kmeansppSelection","minDistanceToCenters","point","centers","center","distances","includes","simulatedAnnealing","settings","maxIterations","initialTemp","coolingRate","minTemp","calculateFitness","selection","currentSolution","currentFitness","bestSolution","bestFitness","temperature","neighborSolution","swapIndex","availableIndices","filter","newIndex","neighborFitness","delta","exp","geneticAlgorithm","populationSize","generations","mutationRate","population","fill","generation","fitnesses","maxFitnessIndex","indexOf","newPopulation","tournament1","tournament2","parent1","parent2","crossoverPoint","child","Set","mutationIndex","particleSwarmOptimization","numParticles","psoIterations","iterations","w","inertiaWeight","c1","cognitiveWeight","c2","socialWeight","particles","position","velocity","bestPosition","globalBestPosition","globalBestFitness","iteration","particle","fitness","r1","r2","antColonyOptimization","numAnts","acoIterations","evaporationRate","alpha","pheromoneImportance","beta","heuristicImportance","pheromones","solutions","ant","solution","probabilities","pheromone","heuristic","total","idx","flat","deposit","tabuSearch","tabuIterations","tabuTenure","current","best","tabuList","Map","getMoveKey","oldColor","newColor","bestNeighborSolution","bestNeighborFitness","moveKey","neighbor","has","get","set","move","expiration","entries","delete","exactMaximum","bestSelection","bestMaxDistance","calculateMaxDistance","arr","head","remaining","tail","maxDistance","exactMinimum","randomSelection","randomIndex","ALGORITHMS","greedy","pickDistinctColors","args","algorithm","poolSize","_algorithm","_poolSize","_colors","_options","_seed","pool","defaultSize","size","undefined","opts"],"mappings":";;AAAO,SAASA,OAAOA,CAACC,GAAG,EAAE;AACzB,EAAA,IAAIC,CAAC,GAAGD,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;AAChBE,IAAAA,CAAC,GAAGF,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;AAChBG,IAAAA,CAAC,GAAGH,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;EAEpBC,CAAC,GAAGA,CAAC,GAAG,OAAO,GAAGG,IAAI,CAACC,GAAG,CAAC,CAACJ,CAAC,GAAG,KAAK,IAAI,KAAK,EAAE,GAAG,CAAC,GAAGA,CAAC,GAAG,KAAK;EAChEC,CAAC,GAAGA,CAAC,GAAG,OAAO,GAAGE,IAAI,CAACC,GAAG,CAAC,CAACH,CAAC,GAAG,KAAK,IAAI,KAAK,EAAE,GAAG,CAAC,GAAGA,CAAC,GAAG,KAAK;EAChEC,CAAC,GAAGA,CAAC,GAAG,OAAO,GAAGC,IAAI,CAACC,GAAG,CAAC,CAACF,CAAC,GAAG,KAAK,IAAI,KAAK,EAAE,GAAG,CAAC,GAAGA,CAAC,GAAG,KAAK;AAEhE,EAAA,IAAIG,CAAC,GAAG,CAACL,CAAC,GAAG,MAAM,GAAGC,CAAC,GAAG,MAAM,GAAGC,CAAC,GAAG,MAAM,IAAI,GAAG;AACpD,EAAA,IAAII,CAAC,GAAG,CAACN,CAAC,GAAG,MAAM,GAAGC,CAAC,GAAG,MAAM,GAAGC,CAAC,GAAG,MAAM,IAAI,GAAG;AACpD,EAAA,IAAIK,CAAC,GAAG,CAACP,CAAC,GAAG,MAAM,GAAGC,CAAC,GAAG,MAAM,GAAGC,CAAC,GAAG,MAAM,IAAI,GAAG;AAEpDG,EAAAA,CAAC,IAAI,MAAM;AACXC,EAAAA,CAAC,IAAI,GAAG;AACRC,EAAAA,CAAC,IAAI,OAAO;EAEZF,CAAC,GAAGA,CAAC,GAAG,QAAQ,GAAGF,IAAI,CAACC,GAAG,CAACC,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC,GAAI,KAAK,GAAGA,CAAC,GAAI,EAAE,GAAC,GAAG;EAC1DC,CAAC,GAAGA,CAAC,GAAG,QAAQ,GAAGH,IAAI,CAACC,GAAG,CAACE,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC,GAAI,KAAK,GAAGA,CAAC,GAAI,EAAE,GAAC,GAAG;EAC1DC,CAAC,GAAGA,CAAC,GAAG,QAAQ,GAAGJ,IAAI,CAACC,GAAG,CAACG,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC,GAAI,KAAK,GAAGA,CAAC,GAAI,EAAE,GAAC,GAAG;EAE1D,OAAO,CAAE,GAAG,GAAGD,CAAC,GAAI,EAAE,EAAE,GAAG,IAAID,CAAC,GAAGC,CAAC,CAAC,EAAE,GAAG,IAAIA,CAAC,GAAGC,CAAC,CAAC,CAAC;AACzD;AAEO,SAASC,MAAMA,CAACC,IAAI,EAAEC,IAAI,EAAE;EAC/B,IAAIC,MAAM,GAAGF,IAAI,CAAC,CAAC,CAAC,GAAGC,IAAI,CAAC,CAAC,CAAC;EAC9B,IAAIE,MAAM,GAAGH,IAAI,CAAC,CAAC,CAAC,GAAGC,IAAI,CAAC,CAAC,CAAC;EAC9B,IAAIG,MAAM,GAAGJ,IAAI,CAAC,CAAC,CAAC,GAAGC,IAAI,CAAC,CAAC,CAAC;AAC9B,EAAA,OAAOP,IAAI,CAACW,IAAI,CAACH,MAAM,GAAGA,MAAM,GAAGC,MAAM,GAAGA,MAAM,GAAGC,MAAM,GAAGA,MAAM,CAAC;AACzE;;AAEA;AACO,SAASE,UAAUA,CAACC,IAAI,EAAE;AAC/B,EAAA,IAAIC,CAAC,GAAGD,IAAI,KAAK,CAAC;AAClB,EAAA,OAAO,YAAW;AAChBC,IAAAA,CAAC,IAAI,UAAU;AACf,IAAA,IAAIjB,CAAC,GAAGG,IAAI,CAACe,IAAI,CAACD,CAAC,GAAGA,CAAC,KAAK,EAAE,EAAE,CAAC,GAAGA,CAAC,CAAC;AACtCjB,IAAAA,CAAC,IAAIA,CAAC,GAAGG,IAAI,CAACe,IAAI,CAAClB,CAAC,GAAGA,CAAC,KAAK,CAAC,EAAE,EAAE,GAAGA,CAAC,CAAC;IACvC,OAAO,CAAC,CAACA,CAAC,GAAGA,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,UAAU;EAC5C,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASmB,WAAWA,CAACC,IAAI,GAAGjB,IAAI,CAACkB,MAAM,EAAE;AAC9C,EAAA,OAAO,CACLlB,IAAI,CAACmB,KAAK,CAACF,IAAI,EAAE,GAAG,GAAG,CAAC,EACxBjB,IAAI,CAACmB,KAAK,CAACF,IAAI,EAAE,GAAG,GAAG,CAAC,EACxBjB,IAAI,CAACmB,KAAK,CAACF,IAAI,EAAE,GAAG,GAAG,CAAC,CACzB;AACH;AAEO,SAASG,UAAUA,CAACC,MAAM,EAAE;AAC/B,EAAA,MAAMC,SAAS,GAAGD,MAAM,CAACE,GAAG,CAAC5B,OAAO,CAAC;AACrC,EAAA,MAAM6B,OAAO,GAAGC,KAAK,CAACC,IAAI,CAAC;IAACC,MAAM,EAAEN,MAAM,CAACM;AAAM,GAAC,EAAE,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAAC;;AAEhE;AACAL,EAAAA,OAAO,CAACM,IAAI,CAAC,CAACD,CAAC,EAAEE,CAAC,KAAK;IACnB,MAAM,CAACC,EAAE,EAAEC,EAAE,EAAEC,EAAE,CAAC,GAAGZ,SAAS,CAACO,CAAC,CAAC;IACjC,MAAM,CAACM,EAAE,EAAEC,EAAE,EAAEC,EAAE,CAAC,GAAGf,SAAS,CAACS,CAAC,CAAC;AACjC,IAAA,IAAIC,EAAE,KAAKG,EAAE,EAAE,OAAOA,EAAE,GAAGH,EAAE;AAC7B,IAAA,IAAIC,EAAE,KAAKG,EAAE,EAAE,OAAOA,EAAE,GAAGH,EAAE;IAC7B,OAAOI,EAAE,GAAGH,EAAE;AAClB,EAAA,CAAC,CAAC;EAEF,OAAOV,OAAO,CAACD,GAAG,CAACM,CAAC,IAAIR,MAAM,CAACQ,CAAC,CAAC,CAAC;AACtC;AAEO,SAASS,gBAAgBA,CAACjB,MAAM,EAAE;AACrC,EAAA,MAAMC,SAAS,GAAGD,MAAM,CAACE,GAAG,CAAC5B,OAAO,CAAC;EACrC,IAAI4C,OAAO,GAAGC,QAAQ;EACtB,IAAIC,OAAO,GAAG,CAACD,QAAQ;EACvB,IAAIE,OAAO,GAAG,CAAC;EACf,IAAIC,KAAK,GAAG,CAAC;AAEb,EAAA,KAAK,IAAId,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGR,MAAM,CAACM,MAAM,GAAG,CAAC,EAAEE,CAAC,EAAE,EAAE;AACxC,IAAA,KAAK,IAAIE,CAAC,GAAGF,CAAC,GAAG,CAAC,EAAEE,CAAC,GAAGV,MAAM,CAACM,MAAM,EAAEI,CAAC,EAAE,EAAE;AACxC,MAAA,MAAMa,IAAI,GAAGvC,MAAM,CAACiB,SAAS,CAACO,CAAC,CAAC,EAAEP,SAAS,CAACS,CAAC,CAAC,CAAC;MAC/CQ,OAAO,GAAGvC,IAAI,CAAC6C,GAAG,CAACN,OAAO,EAAEK,IAAI,CAAC;MACjCH,OAAO,GAAGzC,IAAI,CAAC8C,GAAG,CAACL,OAAO,EAAEG,IAAI,CAAC;AACjCF,MAAAA,OAAO,IAAIE,IAAI;AACfD,MAAAA,KAAK,EAAE;AACX,IAAA;AACJ,EAAA;EAEA,OAAO;AACHE,IAAAA,GAAG,EAAEN,OAAO;AACZO,IAAAA,GAAG,EAAEL,OAAO;IACZM,GAAG,EAAEL,OAAO,GAAGC,KAAK;AACpBK,IAAAA,GAAG,EAAEN;GACR;AACL;AAEO,SAASO,wBAAwBA,CAAC5B,MAAM,EAAE;EAC7C,IAAI,CAACA,MAAM,IAAIA,MAAM,CAACM,MAAM,KAAK,CAAC,EAAE,OAAO,sBAAsB;EAEjE,IAAI;AACA,IAAA,MAAML,SAAS,GAAGD,MAAM,CAACE,GAAG,CAAC5B,OAAO,CAAC;;AAErC;AACA,IAAA,MAAMuD,KAAK,GAAG;AACVC,MAAAA,CAAC,EAAE;AAAEN,QAAAA,GAAG,EAAEvB,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAEwB,QAAAA,GAAG,EAAExB,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAE8B,QAAAA,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG;OAAG;AAClEC,MAAAA,CAAC,EAAE;AAAER,QAAAA,GAAG,EAAEvB,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAEwB,QAAAA,GAAG,EAAExB,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAE8B,QAAAA,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG;OAAG;AACrErD,MAAAA,CAAC,EAAE;AAAE8C,QAAAA,GAAG,EAAEvB,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAEwB,QAAAA,GAAG,EAAExB,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAE8B,QAAAA,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG;AAAE;KACvE;;AAED;IACA,MAAME,SAAS,GAAG,GAAG;AACrB,IAAA,KAAK,IAAIzB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGP,SAAS,CAACK,MAAM,EAAEE,CAAC,IAAIyB,SAAS,EAAE;MAClD,MAAMC,KAAK,GAAGjC,SAAS,CAACkC,KAAK,CAAC3B,CAAC,EAAEA,CAAC,GAAGyB,SAAS,CAAC;AAC/C,MAAA,KAAK,MAAMG,GAAG,IAAIF,KAAK,EAAE;AACrBL,QAAAA,KAAK,CAACC,CAAC,CAACN,GAAG,GAAG7C,IAAI,CAAC6C,GAAG,CAACK,KAAK,CAACC,CAAC,CAACN,GAAG,EAAEY,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3CP,QAAAA,KAAK,CAACC,CAAC,CAACL,GAAG,GAAG9C,IAAI,CAAC8C,GAAG,CAACI,KAAK,CAACC,CAAC,CAACL,GAAG,EAAEW,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3CP,QAAAA,KAAK,CAACG,CAAC,CAACR,GAAG,GAAG7C,IAAI,CAAC6C,GAAG,CAACK,KAAK,CAACG,CAAC,CAACR,GAAG,EAAEY,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3CP,QAAAA,KAAK,CAACG,CAAC,CAACP,GAAG,GAAG9C,IAAI,CAAC8C,GAAG,CAACI,KAAK,CAACG,CAAC,CAACP,GAAG,EAAEW,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3CP,QAAAA,KAAK,CAACnD,CAAC,CAAC8C,GAAG,GAAG7C,IAAI,CAAC6C,GAAG,CAACK,KAAK,CAACnD,CAAC,CAAC8C,GAAG,EAAEY,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3CP,QAAAA,KAAK,CAACnD,CAAC,CAAC+C,GAAG,GAAG9C,IAAI,CAAC8C,GAAG,CAACI,KAAK,CAACnD,CAAC,CAAC+C,GAAG,EAAEW,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/C,MAAA;AACJ,IAAA;;AAEA;AACA,IAAA,MAAMC,QAAQ,GAAG;AACbP,MAAAA,CAAC,EAAE,CAAC,CAACD,KAAK,CAACC,CAAC,CAACL,GAAG,GAAGI,KAAK,CAACC,CAAC,CAACN,GAAG,KAAKK,KAAK,CAACC,CAAC,CAACC,KAAK,CAAC,CAAC,CAAC,GAAGF,KAAK,CAACC,CAAC,CAACC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAEO,OAAO,CAAC,CAAC,CAAC;AACzFN,MAAAA,CAAC,EAAE,CAAC,CAACH,KAAK,CAACG,CAAC,CAACP,GAAG,GAAGI,KAAK,CAACG,CAAC,CAACR,GAAG,KAAKK,KAAK,CAACG,CAAC,CAACD,KAAK,CAAC,CAAC,CAAC,GAAGF,KAAK,CAACG,CAAC,CAACD,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAEO,OAAO,CAAC,CAAC,CAAC;AACzF5D,MAAAA,CAAC,EAAE,CAAC,CAACmD,KAAK,CAACnD,CAAC,CAAC+C,GAAG,GAAGI,KAAK,CAACnD,CAAC,CAAC8C,GAAG,KAAKK,KAAK,CAACnD,CAAC,CAACqD,KAAK,CAAC,CAAC,CAAC,GAAGF,KAAK,CAACnD,CAAC,CAACqD,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAEO,OAAO,CAAC,CAAC;KAC3F;IAED,OAAO;AACf;AACA,4BAAA,EAA8BD,QAAQ,CAACP,CAAC,CAAA;AACxC,4BAAA,EAA8BO,QAAQ,CAACL,CAAC,CAAA;AACxC,8BAAA,EAAgCK,QAAQ,CAAC3D,CAAC,CAAA;AAC1C,QAAA,CAAS;EACL,CAAC,CAAC,OAAO6D,KAAK,EAAE;AACZC,IAAAA,OAAO,CAACD,KAAK,CAAC,oCAAoC,EAAEA,KAAK,CAAC;AAC1D,IAAA,OAAO,oCAAoC;AAC/C,EAAA;AACJ;AAqBO,SAASE,eAAeA,CAACzC,MAAM,EAAE;AACpC,EAAA,MAAMC,SAAS,GAAGD,MAAM,CAACE,GAAG,CAAC5B,OAAO,CAAC;EACrC,IAAI4C,OAAO,GAAGC,QAAQ;AACtB,EAAA,IAAIuB,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AAExB,EAAA,KAAK,IAAIlC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGR,MAAM,CAACM,MAAM,EAAEE,CAAC,EAAE,EAAE;AACpC,IAAA,KAAK,IAAIE,CAAC,GAAGF,CAAC,GAAG,CAAC,EAAEE,CAAC,GAAGV,MAAM,CAACM,MAAM,EAAEI,CAAC,EAAE,EAAE;AACxC,MAAA,MAAMa,IAAI,GAAGvC,MAAM,CAACiB,SAAS,CAACO,CAAC,CAAC,EAAEP,SAAS,CAACS,CAAC,CAAC,CAAC;MAC/C,IAAIa,IAAI,GAAGL,OAAO,EAAE;AAChBA,QAAAA,OAAO,GAAGK,IAAI;AACdmB,QAAAA,WAAW,GAAG,CAAClC,CAAC,EAAEE,CAAC,CAAC;AACxB,MAAA;AACJ,IAAA;AACJ,EAAA;EAEA,OAAO;AACHV,IAAAA,MAAM,EAAE,CAACA,MAAM,CAAC0C,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE1C,MAAM,CAAC0C,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACxDC,IAAAA,QAAQ,EAAEzB;GACb;AACL;;ACpLO,MAAM0B,eAAe,GAAG;AAC3BC,EAAAA,uBAAuB,EAAE,IAAI;AAC7BC,EAAAA,mBAAmB,EAAE,IAAI;AACzBC,EAAAA,gBAAgB,EAAE,GAAG;AACrBC,EAAAA,sBAAsB,EAAE,OAAO;AAC/BC,EAAAA,mBAAmB,EAAE,IAAI;AACzBC,EAAAA,mBAAmB,EAAE,GAAG;AACxBC,EAAAA,eAAe,EAAE,IAAI;AACrBC,EAAAA,aAAa,EAAE,GAAG;AAClBC,EAAAA,QAAQ,EAAE,GAAG;AACbC,EAAAA,cAAc,EAAE,IAAI;AACpBC,EAAAA,cAAc,EAAE;AACpB,CAAC;AAEM,SAASC,wBAAwBA,CAACC,KAAK,EAAEC,IAAI,EAAEjC,GAAG,GAAGkC,MAAM,CAACC,gBAAgB,EAAE;EACjF,IAAI,CAACD,MAAM,CAACE,aAAa,CAACJ,KAAK,CAAC,IAAIA,KAAK,GAAG,CAAC,EAAE;AAC3C,IAAA,MAAM,IAAIK,UAAU,CAAC,CAAA,EAAGJ,IAAI,kCAAkC,CAAC;AACnE,EAAA;EACA,IAAID,KAAK,GAAGhC,GAAG,EAAE;IACb,MAAM,IAAIqC,UAAU,CAAC,CAAA,EAAGJ,IAAI,CAAA,+BAAA,EAAkCjC,GAAG,EAAE,CAAC;AACxE,EAAA;AACA,EAAA,OAAOgC,KAAK;AAChB;AAEO,SAASM,iBAAiBA,CAAC/D,MAAM,EAAEgE,SAAS,GAAGpB,eAAe,CAACE,mBAAmB,EAAE;AACvF,EAAA,IAAI,CAAC1C,KAAK,CAAC6D,OAAO,CAACjE,MAAM,CAAC,IAAIA,MAAM,CAACM,MAAM,KAAK,CAAC,EAAE;AAC/C,IAAA,MAAM,IAAI4D,SAAS,CAAC,iDAAiD,CAAC;AAC1E,EAAA;AACA,EAAA,IAAIlE,MAAM,CAACM,MAAM,GAAG0D,SAAS,EAAE;AAC3B,IAAA,MAAM,IAAIF,UAAU,CAAC,CAAA,iCAAA,EAAoCE,SAAS,UAAU,CAAC;AACjF,EAAA;AACA,EAAA,KAAK,MAAMG,KAAK,IAAInE,MAAM,EAAE;AACxB,IAAA,IAAI,CAACI,KAAK,CAAC6D,OAAO,CAACE,KAAK,CAAC,IAAIA,KAAK,CAAC7D,MAAM,KAAK,CAAC,IAC3C,CAAC6D,KAAK,CAACC,KAAK,CAACC,SAAS,IAAIV,MAAM,CAACW,SAAS,CAACD,SAAS,CAAC,IAAIA,SAAS,IAAI,CAAC,IAAIA,SAAS,IAAI,GAAG,CAAC,EAAE;AAC9F,MAAA,MAAM,IAAIH,SAAS,CAAC,4EAA4E,CAAC;AACrG,IAAA;AACJ,EAAA;AACJ;AAEO,SAASK,qBAAqBA,CAACvE,MAAM,EAAEwE,WAAW,EAAEC,OAAO,GAAG,EAAE,EAAE;EACrE,MAAMT,SAAS,GAAGS,OAAO,CAACT,SAAS,IAAIpB,eAAe,CAACE,mBAAmB;EAC1E,MAAM4B,cAAc,GAAGD,OAAO,CAACC,cAAc,IAAI9B,eAAe,CAACG,gBAAgB;AACjFgB,EAAAA,iBAAiB,CAAC/D,MAAM,EAAEgE,SAAS,CAAC;AACpCR,EAAAA,wBAAwB,CAACgB,WAAW,EAAE,aAAa,EAAEE,cAAc,CAAC;AACpE,EAAA,IAAIF,WAAW,GAAGxE,MAAM,CAACM,MAAM,EAAE;AAC7B,IAAA,MAAM,IAAIwD,UAAU,CAAC,yDAAyD,CAAC;AACnF,EAAA;AACJ;AAEO,SAASa,0BAA0BA,CAACC,CAAC,EAAEC,CAAC,EAAEC,KAAK,EAAE;AACpD,EAAA,IAAID,CAAC,GAAG,CAAC,IAAIA,CAAC,GAAGD,CAAC,EAAE;AAChB,IAAA,OAAO,KAAK;AAChB,EAAA;EACA,MAAMpG,CAAC,GAAGG,IAAI,CAAC6C,GAAG,CAACqD,CAAC,EAAED,CAAC,GAAGC,CAAC,CAAC;EAC5B,IAAIE,YAAY,GAAG,CAAC;EACpB,KAAK,IAAIvE,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAIhC,CAAC,EAAEgC,CAAC,EAAE,EAAE;IACzBuE,YAAY,GAAIA,YAAY,IAAIH,CAAC,GAAGpG,CAAC,GAAGgC,CAAC,CAAC,GAAIA,CAAC;IAC/C,IAAIuE,YAAY,GAAGD,KAAK,EAAE;AACtB,MAAA,OAAO,IAAI;AACf,IAAA;AACJ,EAAA;AACA,EAAA,OAAO,KAAK;AAChB;AAEO,SAASE,0BAA0BA,CAAChF,MAAM,EAAEwE,WAAW,EAAE;AAC5DD,EAAAA,qBAAqB,CAACvE,MAAM,EAAEwE,WAAW,CAAC;AAC1C,EAAA,IAAIG,0BAA0B,CAAC3E,MAAM,CAACM,MAAM,EAAEkE,WAAW,EAAE5B,eAAe,CAACI,sBAAsB,CAAC,EAAE;IAChG,MAAM,IAAIc,UAAU,CAChB,CAAA,gCAAA,EAAmClB,eAAe,CAACI,sBAAsB,eAC7E,CAAC;AACL,EAAA;AACJ;AAEO,SAASiC,6BAA6BA,CAACjF,MAAM,EAAEwE,WAAW,EAAE;AAC/DD,EAAAA,qBAAqB,CAACvE,MAAM,EAAEwE,WAAW,EAAE;IAAER,SAAS,EAAEpB,eAAe,CAACK;AAAoB,GAAC,CAAC;AAClG;AAEO,SAASiC,iBAAiBA,CAACxB,IAAI,EAAEyB,KAAK,EAAEC,YAAY,GAAGxC,eAAe,CAACW,cAAc,EAAE;AAC1F,EAAA,MAAM8B,SAAS,GAAGF,KAAK,CAACG,MAAM,CAAC,CAACC,OAAO,EAAEC,IAAI,KAAKD,OAAO,GAAGC,IAAI,EAAE,CAAC,CAAC;EACpE,IAAI,CAAC7B,MAAM,CAAC8B,QAAQ,CAACJ,SAAS,CAAC,IAAIA,SAAS,GAAGD,YAAY,EAAE;IACzD,MAAM,IAAItB,UAAU,CAAC,CAAA,EAAGJ,IAAI,CAAA,8CAAA,EAAiD0B,YAAY,EAAE,CAAC;AAChG,EAAA;AACJ;;AC/EO,SAASM,qBAAqBA,CAAC1F,MAAM,EAAEwE,WAAW,EAAE;AACvDS,EAAAA,6BAA6B,CAACjF,MAAM,EAAEwE,WAAW,CAAC;AAClD,EAAA,OAAO,IAAImB,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;AACpC;AACA,IAAA,MAAMC,UAAU,GAAG;AAC3B;AACA,4BAAA,EAA8BxH,OAAO,CAACyH,QAAQ,EAAE,CAAA;AAChD,2BAAA,EAA6B/G,MAAM,CAAC+G,QAAQ,EAAE,CAAA;AAC9C,+BAAA,EAAiChG,UAAU,CAACgG,QAAQ,EAAE,CAAA;;AAEtD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAA,CAAS;;AAED;IACA,MAAMC,IAAI,GAAG,IAAIC,IAAI,CAAC,CAACH,UAAU,CAAC,EAAE;AAAEI,MAAAA,IAAI,EAAE;AAAyB,KAAC,CAAC;AACvE,IAAA,MAAMC,SAAS,GAAGC,GAAG,CAACC,eAAe,CAACL,IAAI,CAAC;AAC3C,IAAA,MAAMM,MAAM,GAAG,IAAIC,MAAM,CAACJ,SAAS,CAAC;IAEpC,SAASK,OAAOA,GAAG;MACfF,MAAM,CAACG,SAAS,EAAE;AAClBL,MAAAA,GAAG,CAACM,eAAe,CAACP,SAAS,CAAC;AAClC,IAAA;;AAEA;AACAG,IAAAA,MAAM,CAACK,SAAS,GAAG,UAASC,CAAC,EAAE;AAC3B,MAAA,IAAIA,CAAC,CAACC,IAAI,CAACX,IAAI,KAAK,UAAU,EAAE;AAC5BN,QAAAA,OAAO,CAACgB,CAAC,CAACC,IAAI,CAACC,MAAM,CAAC;MAC1B,CAAC,MAAM,IAAIF,CAAC,CAACC,IAAI,CAACX,IAAI,KAAK,OAAO,EAAE;QAChCL,MAAM,CAAC,IAAIkB,KAAK,CAACH,CAAC,CAACC,IAAI,CAACtE,KAAK,CAAC,CAAC;AACnC,MAAA;AACAiE,MAAAA,OAAO,EAAE;IACb,CAAC;AAEDF,IAAAA,MAAM,CAACU,OAAO,GAAG,UAASzE,KAAK,EAAE;MAC7BsD,MAAM,CAACtD,KAAK,CAAC;AACbiE,MAAAA,OAAO,EAAE;IACb,CAAC;;AAED;IACA,IAAI;MACAF,MAAM,CAACW,WAAW,CAAC;QAAEjH,MAAM;AAAEwE,QAAAA;AAAY,OAAC,CAAC;IAC/C,CAAC,CAAC,OAAOjC,KAAK,EAAE;AACZiE,MAAAA,OAAO,EAAE;MACTX,MAAM,CAACtD,KAAK,CAAC;AACjB,IAAA;AACJ,EAAA,CAAC,CAAC;AACN;AAEO,SAAS2E,yBAAyBA,CAAClH,MAAM,EAAEwE,WAAW,EAAEhF,IAAI,EAAE;AACjEgD,EAAAA,OAAO,CAAC2E,GAAG,CAAC,kDAAkD,CAAC;AAC/D,EAAA,MAAMC,KAAK,GAAGC,WAAW,CAACC,GAAG,EAAE;AAC/B/C,EAAAA,qBAAqB,CAACvE,MAAM,EAAEwE,WAAW,CAAC;AAE1C,EAAA,MAAMvE,SAAS,GAAGD,MAAM,CAACE,GAAG,CAAC5B,OAAO,CAAC;EACrC,MAAMiJ,QAAQ,GAAG,EAAE;AACnB,EAAA,MAAMC,SAAS,GAAGpH,KAAK,CAACC,IAAI,CAAC;IAACC,MAAM,EAAEN,MAAM,CAACM;AAAM,GAAC,EAAE,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAAC;;AAElE;AACA,EAAA,MAAMZ,IAAI,GAAG,OAAOJ,IAAI,KAAK,QAAQ,GAAGD,UAAU,CAACC,IAAI,CAAC,GAAGb,IAAI,CAACkB,MAAM;;AAEtE;EACA,SAAS4H,sBAAsBA,CAACC,KAAK,EAAE;IACnC,OAAOH,QAAQ,CAACjC,MAAM,CAAC,CAAC3D,GAAG,EAAEgG,aAAa,KACtChG,GAAG,GAAG3C,MAAM,CAACiB,SAAS,CAACyH,KAAK,CAAC,EAAEzH,SAAS,CAAC0H,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;AACpE,EAAA;;AAEA;AACA,EAAA,MAAMC,UAAU,GAAGjJ,IAAI,CAACmB,KAAK,CAACF,IAAI,EAAE,GAAG4H,SAAS,CAAClH,MAAM,CAAC;AACxDiH,EAAAA,QAAQ,CAACM,IAAI,CAACL,SAAS,CAACI,UAAU,CAAC,CAAC;AACpCJ,EAAAA,SAAS,CAACM,MAAM,CAACF,UAAU,EAAE,CAAC,CAAC;;AAE/B;AACA,EAAA,OAAOL,QAAQ,CAACjH,MAAM,GAAGkE,WAAW,EAAE;IAClC,IAAIuD,SAAS,GAAG,CAAC;IACjB,IAAIC,YAAY,GAAG,CAAC7G,QAAQ;;AAE5B;AACA,IAAA,KAAK,IAAIX,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGgH,SAAS,CAAClH,MAAM,EAAEE,CAAC,EAAE,EAAE;MACvC,MAAMyH,aAAa,GAAGR,sBAAsB,CAACD,SAAS,CAAChH,CAAC,CAAC,CAAC;MAC1D,IAAIyH,aAAa,GAAGD,YAAY,EAAE;AAC9BA,QAAAA,YAAY,GAAGC,aAAa;AAC5BF,QAAAA,SAAS,GAAGvH,CAAC;AACjB,MAAA;AACJ,IAAA;AAEA+G,IAAAA,QAAQ,CAACM,IAAI,CAACL,SAAS,CAACO,SAAS,CAAC,CAAC;AACnCP,IAAAA,SAAS,CAACM,MAAM,CAACC,SAAS,EAAE,CAAC,CAAC;AAClC,EAAA;EAEA,OAAO;AACH/H,IAAAA,MAAM,EAAED,UAAU,CAACwH,QAAQ,CAACrH,GAAG,CAACM,CAAC,IAAIR,MAAM,CAACQ,CAAC,CAAC,CAAC,CAAC;AAChD0H,IAAAA,IAAI,EAAEb,WAAW,CAACC,GAAG,EAAE,GAAGF;GAC7B;AACL;;ACnIO,SAASe,eAAeA,CAACnI,MAAM,EAAEwE,WAAW,EAAEhF,IAAI,EAAE;AACvDgD,EAAAA,OAAO,CAAC2E,GAAG,CAAC,gCAAgC,CAAC;AAC7C,EAAA,MAAMC,KAAK,GAAGC,WAAW,CAACC,GAAG,EAAE;AAC/B/C,EAAAA,qBAAqB,CAACvE,MAAM,EAAEwE,WAAW,CAAC;AAE1C,EAAA,MAAMvE,SAAS,GAAGD,MAAM,CAACE,GAAG,CAAC5B,OAAO,CAAC;EACrC,MAAMiJ,QAAQ,GAAG,EAAE;AACnB,EAAA,MAAMC,SAAS,GAAGpH,KAAK,CAACC,IAAI,CAAC;IAACC,MAAM,EAAEN,MAAM,CAACM;AAAM,GAAC,EAAE,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAAC;;AAElE;AACA,EAAA,MAAMZ,IAAI,GAAG,OAAOJ,IAAI,KAAK,QAAQ,GAAGD,UAAU,CAACC,IAAI,CAAC,GAAGb,IAAI,CAACkB,MAAM;;AAEtE;EACA,SAASuI,oBAAoBA,CAACV,KAAK,EAAE;AACjC,IAAA,IAAIH,QAAQ,CAACjH,MAAM,KAAK,CAAC,EAAE,OAAOa,QAAQ;IAC1C,OAAOxC,IAAI,CAAC6C,GAAG,CAAC,GAAG+F,QAAQ,CAACrH,GAAG,CAACyH,aAAa,IACzC3I,MAAM,CAACiB,SAAS,CAACyH,KAAK,CAAC,EAAEzH,SAAS,CAAC0H,aAAa,CAAC,CACrD,CAAC,CAAC;AACN,EAAA;;AAEA;AACA,EAAA,MAAMC,UAAU,GAAGjJ,IAAI,CAACmB,KAAK,CAACF,IAAI,EAAE,GAAG4H,SAAS,CAAClH,MAAM,CAAC;AACxDiH,EAAAA,QAAQ,CAACM,IAAI,CAACL,SAAS,CAACI,UAAU,CAAC,CAAC;AACpCJ,EAAAA,SAAS,CAACM,MAAM,CAACF,UAAU,EAAE,CAAC,CAAC;;AAE/B;AACA,EAAA,OAAOL,QAAQ,CAACjH,MAAM,GAAGkE,WAAW,EAAE;IAClC,IAAIuD,SAAS,GAAG,CAAC;IACjB,IAAIM,eAAe,GAAG,CAAClH,QAAQ;;AAE/B;AACA,IAAA,KAAK,IAAIX,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGgH,SAAS,CAAClH,MAAM,EAAEE,CAAC,EAAE,EAAE;MACvC,MAAM8H,WAAW,GAAGF,oBAAoB,CAACZ,SAAS,CAAChH,CAAC,CAAC,CAAC;MACtD,IAAI8H,WAAW,GAAGD,eAAe,EAAE;AAC/BA,QAAAA,eAAe,GAAGC,WAAW;AAC7BP,QAAAA,SAAS,GAAGvH,CAAC;AACjB,MAAA;AACJ,IAAA;AAEA+G,IAAAA,QAAQ,CAACM,IAAI,CAACL,SAAS,CAACO,SAAS,CAAC,CAAC;AACnCP,IAAAA,SAAS,CAACM,MAAM,CAACC,SAAS,EAAE,CAAC,CAAC;AAClC,EAAA;EAEA,OAAO;AACH/H,IAAAA,MAAM,EAAED,UAAU,CAACwH,QAAQ,CAACrH,GAAG,CAACM,CAAC,IAAIR,MAAM,CAACQ,CAAC,CAAC,CAAC,CAAC;AAChD0H,IAAAA,IAAI,EAAEb,WAAW,CAACC,GAAG,EAAE,GAAGF;GAC7B;AACL;;AC/CO,SAASmB,iBAAiBA,CAACvI,MAAM,EAAEwE,WAAW,EAAEhF,IAAI,EAAE;AACzDgD,EAAAA,OAAO,CAAC2E,GAAG,CAAC,mCAAmC,CAAC;AAChD,EAAA,MAAMC,KAAK,GAAGC,WAAW,CAACC,GAAG,EAAE;AAC/B/C,EAAAA,qBAAqB,CAACvE,MAAM,EAAEwE,WAAW,CAAC;AAE1C,EAAA,MAAMvE,SAAS,GAAGD,MAAM,CAACE,GAAG,CAAC5B,OAAO,CAAC;;AAErC;AACA,EAAA,MAAMsB,IAAI,GAAG,OAAOJ,IAAI,KAAK,QAAQ,GAAGD,UAAU,CAACC,IAAI,CAAC,GAAGb,IAAI,CAACkB,MAAM;;AAEtE;AACA,EAAA,SAAS2I,oBAAoBA,CAACC,KAAK,EAAEC,OAAO,EAAE;AAC1C,IAAA,IAAIA,OAAO,CAACpI,MAAM,KAAK,CAAC,EAAE,OAAOa,QAAQ;IACzC,OAAOxC,IAAI,CAAC6C,GAAG,CAAC,GAAGkH,OAAO,CAACxI,GAAG,CAACyI,MAAM,IACjC3J,MAAM,CAACiB,SAAS,CAACwI,KAAK,CAAC,EAAExI,SAAS,CAAC0I,MAAM,CAAC,CAC9C,CAAC,CAAC;AACN,EAAA;;AAEA;AACA,EAAA,MAAMpB,QAAQ,GAAG,CAAC5I,IAAI,CAACmB,KAAK,CAACF,IAAI,EAAE,GAAGI,MAAM,CAACM,MAAM,CAAC,CAAC;;AAErD;AACA,EAAA,OAAOiH,QAAQ,CAACjH,MAAM,GAAGkE,WAAW,EAAE;AAClC,IAAA,MAAMoE,SAAS,GAAGxI,KAAK,CAACC,IAAI,CAAC;MAACC,MAAM,EAAEN,MAAM,CAACM;AAAM,KAAC,EAAE,CAACC,CAAC,EAAEC,CAAC,KAAK;MAC5D,IAAI+G,QAAQ,CAACsB,QAAQ,CAACrI,CAAC,CAAC,EAAE,OAAO,CAAC;AAClC,MAAA,MAAMe,IAAI,GAAGiH,oBAAoB,CAAChI,CAAC,EAAE+G,QAAQ,CAAC;AAC9C,MAAA,OAAOhG,IAAI,GAAGA,IAAI,CAAC;AACvB,IAAA,CAAC,CAAC;AAEF,IAAA,MAAMI,GAAG,GAAGiH,SAAS,CAACtD,MAAM,CAAC,CAACtD,CAAC,EAAEtD,CAAC,KAAKsD,CAAC,GAAGtD,CAAC,EAAE,CAAC,CAAC;AAChD,IAAA,IAAImB,MAAM,GAAGD,IAAI,EAAE,GAAG+B,GAAG;IACzB,IAAIgG,aAAa,GAAG,CAAC;IAErB,OAAO9H,MAAM,GAAG,CAAC,IAAI8H,aAAa,GAAGiB,SAAS,CAACtI,MAAM,EAAE;AACnD,MAAA,IAAI,CAACiH,QAAQ,CAACsB,QAAQ,CAAClB,aAAa,CAAC,EAAE;AACnC9H,QAAAA,MAAM,IAAI+I,SAAS,CAACjB,aAAa,CAAC;AACtC,MAAA;AACA,MAAA,IAAI9H,MAAM,GAAG,CAAC,EAAE8H,aAAa,EAAE;AACnC,IAAA;AAEAJ,IAAAA,QAAQ,CAACM,IAAI,CAACF,aAAa,CAAC;AAChC,EAAA;EAEA,OAAO;AACH3H,IAAAA,MAAM,EAAED,UAAU,CAACwH,QAAQ,CAACrH,GAAG,CAACM,CAAC,IAAIR,MAAM,CAACQ,CAAC,CAAC,CAAC,CAAC;AAChD0H,IAAAA,IAAI,EAAEb,WAAW,CAACC,GAAG,EAAE,GAAGF;GAC7B;AACL;;AC1CO,SAAS0B,kBAAkBA,CAAC9I,MAAM,EAAEwE,WAAW,EAAEuE,QAAQ,GAAG,EAAE,EAAE;AACnEvG,EAAAA,OAAO,CAAC2E,GAAG,CAAC,6CAA6C,CAAC;AAC1D,EAAA,MAAMC,KAAK,GAAGC,WAAW,CAACC,GAAG,EAAE;AAC/B/C,EAAAA,qBAAqB,CAACvE,MAAM,EAAEwE,WAAW,CAAC;AAE1C,EAAA,MAAMvE,SAAS,GAAGD,MAAM,CAACE,GAAG,CAAC5B,OAAO,CAAC;AACrC,EAAA,MAAM0K,aAAa,GAAGxF,wBAAwB,CAACuF,QAAQ,CAACC,aAAa,IAAI,IAAI,EAAE,eAAe,EAAEpG,eAAe,CAACU,cAAc,CAAC;EAC/H4B,iBAAiB,CAAC,oBAAoB,EAAE,CAAC8D,aAAa,EAAExE,WAAW,EAAEA,WAAW,CAAC,CAAC;AAClF,EAAA,MAAMyE,WAAW,GAAGF,QAAQ,CAACE,WAAW,IAAI,IAAI;AAChD,EAAA,MAAMC,WAAW,GAAGH,QAAQ,CAACG,WAAW,IAAI,KAAK;AACjD,EAAA,MAAMC,OAAO,GAAGJ,QAAQ,CAACI,OAAO,IAAI,GAAG;;AAEvC;AACA,EAAA,MAAMvJ,IAAI,GAAG,OAAOmJ,QAAQ,CAACvJ,IAAI,KAAK,QAAQ,GAAGD,UAAU,CAACwJ,QAAQ,CAACvJ,IAAI,CAAC,GAAGb,IAAI,CAACkB,MAAM;;AAExF;EACA,SAASuJ,gBAAgBA,CAACC,SAAS,EAAE;IACjC,IAAInI,OAAO,GAAGC,QAAQ;AACtB,IAAA,KAAK,IAAIX,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG6I,SAAS,CAAC/I,MAAM,GAAG,CAAC,EAAEE,CAAC,EAAE,EAAE;AAC3C,MAAA,KAAK,IAAIE,CAAC,GAAGF,CAAC,GAAG,CAAC,EAAEE,CAAC,GAAG2I,SAAS,CAAC/I,MAAM,EAAEI,CAAC,EAAE,EAAE;AAC3C,QAAA,MAAMa,IAAI,GAAGvC,MAAM,CAACiB,SAAS,CAACoJ,SAAS,CAAC7I,CAAC,CAAC,CAAC,EAAEP,SAAS,CAACoJ,SAAS,CAAC3I,CAAC,CAAC,CAAC,CAAC;QACrEQ,OAAO,GAAGvC,IAAI,CAAC6C,GAAG,CAACN,OAAO,EAAEK,IAAI,CAAC;AACrC,MAAA;AACJ,IAAA;AACA,IAAA,OAAOL,OAAO;AAClB,EAAA;;AAEA;AACA,EAAA,IAAIoI,eAAe,GAAGlJ,KAAK,CAACC,IAAI,CAAC;IAACC,MAAM,EAAEN,MAAM,CAACM;GAAO,EAAE,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAAC,CACjEC,IAAI,CAAC,MAAMb,IAAI,EAAE,GAAG,GAAG,CAAC,CACxBuC,KAAK,CAAC,CAAC,EAAEqC,WAAW,CAAC;AAC1B,EAAA,IAAI+E,cAAc,GAAGH,gBAAgB,CAACE,eAAe,CAAC;AAEtD,EAAA,IAAIE,YAAY,GAAG,CAAC,GAAGF,eAAe,CAAC;EACvC,IAAIG,WAAW,GAAGF,cAAc;EAEhC,IAAIG,WAAW,GAAGT,WAAW;;AAE7B;AACA,EAAA,KAAK,IAAIzI,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGwI,aAAa,IAAIU,WAAW,GAAGP,OAAO,EAAE3I,CAAC,EAAE,EAAE;AAC7D;AACA,IAAA,MAAMmJ,gBAAgB,GAAG,CAAC,GAAGL,eAAe,CAAC;IAC7C,MAAMM,SAAS,GAAGjL,IAAI,CAACmB,KAAK,CAACF,IAAI,EAAE,GAAG4E,WAAW,CAAC;AAClD,IAAA,MAAMqF,gBAAgB,GAAGzJ,KAAK,CAACC,IAAI,CAAC;MAACC,MAAM,EAAEN,MAAM,CAACM;KAAO,EAAE,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAAC,CACpEsJ,MAAM,CAACtJ,CAAC,IAAI,CAAC8I,eAAe,CAACT,QAAQ,CAACrI,CAAC,CAAC,CAAC;AAC9C,IAAA,MAAMuJ,QAAQ,GAAGF,gBAAgB,CAAClL,IAAI,CAACmB,KAAK,CAACF,IAAI,EAAE,GAAGiK,gBAAgB,CAACvJ,MAAM,CAAC,CAAC;AAC/EqJ,IAAAA,gBAAgB,CAACC,SAAS,CAAC,GAAGG,QAAQ;AAEtC,IAAA,MAAMC,eAAe,GAAGZ,gBAAgB,CAACO,gBAAgB,CAAC;;AAE1D;AACA,IAAA,MAAMM,KAAK,GAAGD,eAAe,GAAGT,cAAc;AAC9C,IAAA,IAAIU,KAAK,GAAG,CAAC,IAAIrK,IAAI,EAAE,GAAGjB,IAAI,CAACuL,GAAG,CAACD,KAAK,GAAGP,WAAW,CAAC,EAAE;AACrDJ,MAAAA,eAAe,GAAGK,gBAAgB;AAClCJ,MAAAA,cAAc,GAAGS,eAAe;MAEhC,IAAIT,cAAc,GAAGE,WAAW,EAAE;AAC9BD,QAAAA,YAAY,GAAG,CAAC,GAAGF,eAAe,CAAC;AACnCG,QAAAA,WAAW,GAAGF,cAAc;AAChC,MAAA;AACJ,IAAA;AAEAG,IAAAA,WAAW,IAAIR,WAAW;AAC9B,EAAA;EAEA,OAAO;AACHlJ,IAAAA,MAAM,EAAED,UAAU,CAACyJ,YAAY,CAACtJ,GAAG,CAACM,CAAC,IAAIR,MAAM,CAACQ,CAAC,CAAC,CAAC,CAAC;AACpD0H,IAAAA,IAAI,EAAEb,WAAW,CAACC,GAAG,EAAE,GAAGF;GAC7B;AACL;;ACrEO,SAAS+C,gBAAgBA,CAACnK,MAAM,EAAEwE,WAAW,EAAEuE,QAAQ,GAAG,EAAE,EAAE;AACjEvG,EAAAA,OAAO,CAAC2E,GAAG,CAAC,2CAA2C,CAAC;AACxD,EAAA,MAAMC,KAAK,GAAGC,WAAW,CAACC,GAAG,EAAE;AAC/B/C,EAAAA,qBAAqB,CAACvE,MAAM,EAAEwE,WAAW,CAAC;AAE1C,EAAA,MAAMvE,SAAS,GAAGD,MAAM,CAACE,GAAG,CAAC5B,OAAO,CAAC;AACrC,EAAA,MAAM8L,cAAc,GAAG5G,wBAAwB,CAACuF,QAAQ,CAACqB,cAAc,IAAI,GAAG,EAAE,gBAAgB,EAAExH,eAAe,CAACM,mBAAmB,CAAC;AACtI,EAAA,MAAMmH,WAAW,GAAG7G,wBAAwB,CAACuF,QAAQ,CAACsB,WAAW,IAAI,GAAG,EAAE,aAAa,EAAEzH,eAAe,CAACO,eAAe,CAAC;AACzH+B,EAAAA,iBAAiB,CAAC,kBAAkB,EAAE,CAACkF,cAAc,EAAEC,WAAW,EAAE7F,WAAW,EAAEA,WAAW,CAAC,CAAC;AAC9F,EAAA,MAAM8F,YAAY,GAAGvB,QAAQ,CAACuB,YAAY,IAAI,GAAG;;AAEjD;AACA,EAAA,MAAM1K,IAAI,GAAG,OAAOmJ,QAAQ,CAACvJ,IAAI,KAAK,QAAQ,GAAGD,UAAU,CAACwJ,QAAQ,CAACvJ,IAAI,CAAC,GAAGb,IAAI,CAACkB,MAAM;;AAExF;EACA,SAASuJ,gBAAgBA,CAACC,SAAS,EAAE;IACjC,IAAInI,OAAO,GAAGC,QAAQ;AACtB,IAAA,KAAK,IAAIX,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG6I,SAAS,CAAC/I,MAAM,GAAG,CAAC,EAAEE,CAAC,EAAE,EAAE;AAC3C,MAAA,KAAK,IAAIE,CAAC,GAAGF,CAAC,GAAG,CAAC,EAAEE,CAAC,GAAG2I,SAAS,CAAC/I,MAAM,EAAEI,CAAC,EAAE,EAAE;AAC3C,QAAA,MAAMa,IAAI,GAAGvC,MAAM,CAACiB,SAAS,CAACoJ,SAAS,CAAC7I,CAAC,CAAC,CAAC,EAAEP,SAAS,CAACoJ,SAAS,CAAC3I,CAAC,CAAC,CAAC,CAAC;QACrEQ,OAAO,GAAGvC,IAAI,CAAC6C,GAAG,CAACN,OAAO,EAAEK,IAAI,CAAC;AACrC,MAAA;AACJ,IAAA;AACA,IAAA,OAAOL,OAAO;AAClB,EAAA;;AAEA;AACA,EAAA,IAAIqJ,UAAU,GAAGnK,KAAK,CAACgK,cAAc,CAAC,CAACI,IAAI,EAAE,CAACtK,GAAG,CAAC,MAC9CE,KAAK,CAACC,IAAI,CAAC;IAACC,MAAM,EAAEN,MAAM,CAACM;GAAO,EAAE,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAAC,CAC3CC,IAAI,CAAC,MAAMb,IAAI,EAAE,GAAG,GAAG,CAAC,CACxBuC,KAAK,CAAC,CAAC,EAAEqC,WAAW,CAC7B,CAAC;AAED,EAAA,IAAIgF,YAAY,GAAGe,UAAU,CAAC,CAAC,CAAC;AAChC,EAAA,IAAId,WAAW,GAAGL,gBAAgB,CAACI,YAAY,CAAC;;AAEhD;EACA,KAAK,IAAIiB,UAAU,GAAG,CAAC,EAAEA,UAAU,GAAGJ,WAAW,EAAEI,UAAU,EAAE,EAAE;AAC7D;AACA,IAAA,MAAMC,SAAS,GAAGH,UAAU,CAACrK,GAAG,CAACkJ,gBAAgB,CAAC;;AAElD;AACA,IAAA,MAAMuB,eAAe,GAAGD,SAAS,CAACE,OAAO,CAACjM,IAAI,CAAC8C,GAAG,CAAC,GAAGiJ,SAAS,CAAC,CAAC;AACjE,IAAA,IAAIA,SAAS,CAACC,eAAe,CAAC,GAAGlB,WAAW,EAAE;AAC1CD,MAAAA,YAAY,GAAG,CAAC,GAAGe,UAAU,CAACI,eAAe,CAAC,CAAC;AAC/ClB,MAAAA,WAAW,GAAGiB,SAAS,CAACC,eAAe,CAAC;AAC5C,IAAA;;AAEA;IACA,MAAME,aAAa,GAAG,EAAE;AAExB,IAAA,OAAOA,aAAa,CAACvK,MAAM,GAAG8J,cAAc,EAAE;AAC1C;MACA,MAAMU,WAAW,GAAG1K,KAAK,CAAC,CAAC,CAAC,CAACoK,IAAI,EAAE,CAACtK,GAAG,CAAC,MAAMvB,IAAI,CAACmB,KAAK,CAACF,IAAI,EAAE,GAAGwK,cAAc,CAAC,CAAC;MAClF,MAAMW,WAAW,GAAG3K,KAAK,CAAC,CAAC,CAAC,CAACoK,IAAI,EAAE,CAACtK,GAAG,CAAC,MAAMvB,IAAI,CAACmB,KAAK,CAACF,IAAI,EAAE,GAAGwK,cAAc,CAAC,CAAC;MAElF,MAAMY,OAAO,GAAGT,UAAU,CAACO,WAAW,CAACxF,MAAM,CAAC,CAACtD,CAAC,EAAEtD,CAAC,KAC/CgM,SAAS,CAAC1I,CAAC,CAAC,GAAG0I,SAAS,CAAChM,CAAC,CAAC,GAAGsD,CAAC,GAAGtD,CAAC,CAAC,CAAC;MACzC,MAAMuM,OAAO,GAAGV,UAAU,CAACQ,WAAW,CAACzF,MAAM,CAAC,CAACtD,CAAC,EAAEtD,CAAC,KAC/CgM,SAAS,CAAC1I,CAAC,CAAC,GAAG0I,SAAS,CAAChM,CAAC,CAAC,GAAGsD,CAAC,GAAGtD,CAAC,CAAC,CAAC;;AAEzC;MACA,MAAMwM,cAAc,GAAGvM,IAAI,CAACmB,KAAK,CAACF,IAAI,EAAE,GAAG4E,WAAW,CAAC;MACvD,MAAM2G,KAAK,GAAG,CAAC,GAAG,IAAIC,GAAG,CAAC,CACtB,GAAGJ,OAAO,CAAC7I,KAAK,CAAC,CAAC,EAAE+I,cAAc,CAAC,EACnC,GAAGD,OAAO,CAAC9I,KAAK,CAAC+I,cAAc,CAAC,CACnC,CAAC,CAAC;;AAEH;AACA,MAAA,OAAOC,KAAK,CAAC7K,MAAM,GAAGkE,WAAW,EAAE;AAC/B,QAAA,MAAMgD,SAAS,GAAGpH,KAAK,CAACC,IAAI,CAAC;UAACC,MAAM,EAAEN,MAAM,CAACM;SAAO,EAAE,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAAC,CAC7DsJ,MAAM,CAACtJ,CAAC,IAAI,CAAC2K,KAAK,CAACtC,QAAQ,CAACrI,CAAC,CAAC,CAAC;AACpC2K,QAAAA,KAAK,CAACtD,IAAI,CAACL,SAAS,CAAC7I,IAAI,CAACmB,KAAK,CAACF,IAAI,EAAE,GAAG4H,SAAS,CAAClH,MAAM,CAAC,CAAC,CAAC;AAChE,MAAA;;AAEA;AACA,MAAA,IAAIV,IAAI,EAAE,GAAG0K,YAAY,EAAE;QACvB,MAAMe,aAAa,GAAG1M,IAAI,CAACmB,KAAK,CAACF,IAAI,EAAE,GAAG4E,WAAW,CAAC;AACtD,QAAA,MAAMgD,SAAS,GAAGpH,KAAK,CAACC,IAAI,CAAC;UAACC,MAAM,EAAEN,MAAM,CAACM;SAAO,EAAE,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAAC,CAC7DsJ,MAAM,CAACtJ,CAAC,IAAI,CAAC2K,KAAK,CAACtC,QAAQ,CAACrI,CAAC,CAAC,CAAC;AACpC2K,QAAAA,KAAK,CAACE,aAAa,CAAC,GAAG7D,SAAS,CAAC7I,IAAI,CAACmB,KAAK,CAACF,IAAI,EAAE,GAAG4H,SAAS,CAAClH,MAAM,CAAC,CAAC;AAC3E,MAAA;AAEAuK,MAAAA,aAAa,CAAChD,IAAI,CAACsD,KAAK,CAAC;AAC7B,IAAA;AAEAZ,IAAAA,UAAU,GAAGM,aAAa;AAC9B,EAAA;EAEA,OAAO;AACH7K,IAAAA,MAAM,EAAED,UAAU,CAACyJ,YAAY,CAACtJ,GAAG,CAACM,CAAC,IAAIR,MAAM,CAACQ,CAAC,CAAC,CAAC,CAAC;AACpD0H,IAAAA,IAAI,EAAEb,WAAW,CAACC,GAAG,EAAE,GAAGF;GAC7B;AACL;;AC7FO,SAASkE,yBAAyBA,CAACtL,MAAM,EAAEwE,WAAW,EAAEuE,QAAQ,GAAG,EAAE,EAAE;AAC1EvG,EAAAA,OAAO,CAAC2E,GAAG,CAAC,yCAAyC,CAAC;AACtD,EAAA,MAAMC,KAAK,GAAGC,WAAW,CAACC,GAAG,EAAE;AAC/B/C,EAAAA,qBAAqB,CAACvE,MAAM,EAAEwE,WAAW,CAAC;AAE1C,EAAA,MAAMvE,SAAS,GAAGD,MAAM,CAACE,GAAG,CAAC5B,OAAO,CAAC;AACrC,EAAA,MAAMiN,YAAY,GAAG/H,wBAAwB,CAACuF,QAAQ,CAACwC,YAAY,IAAI,EAAE,EAAE,cAAc,EAAE3I,eAAe,CAACQ,aAAa,CAAC;AACzH,EAAA,MAAM4F,aAAa,GAAGxF,wBAAwB,CAACuF,QAAQ,CAACyC,aAAa,IAAIzC,QAAQ,CAAC0C,UAAU,IAAI,GAAG,EAAE,eAAe,EAAE7I,eAAe,CAACU,cAAc,CAAC;EACrJ4B,iBAAiB,CAAC,2BAA2B,EAAE,CAACqG,YAAY,EAAEvC,aAAa,EAAExE,WAAW,CAAC,CAAC;EAC1F,MAAMkH,CAAC,GAAG3C,QAAQ,CAAC4C,aAAa,IAAI,GAAG,CAAC;EACxC,MAAMC,EAAE,GAAG7C,QAAQ,CAAC8C,eAAe,IAAI,GAAG,CAAC;EAC3C,MAAMC,EAAE,GAAG/C,QAAQ,CAACgD,YAAY,IAAI,GAAG,CAAC;;AAExC;AACA,EAAA,MAAMnM,IAAI,GAAG,OAAOmJ,QAAQ,CAACvJ,IAAI,KAAK,QAAQ,GAAGD,UAAU,CAACwJ,QAAQ,CAACvJ,IAAI,CAAC,GAAGb,IAAI,CAACkB,MAAM;;AAExF;EACA,SAASuJ,gBAAgBA,CAACC,SAAS,EAAE;IACjC,IAAInI,OAAO,GAAGC,QAAQ;AACtB,IAAA,KAAK,IAAIX,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG6I,SAAS,CAAC/I,MAAM,GAAG,CAAC,EAAEE,CAAC,EAAE,EAAE;AAC3C,MAAA,KAAK,IAAIE,CAAC,GAAGF,CAAC,GAAG,CAAC,EAAEE,CAAC,GAAG2I,SAAS,CAAC/I,MAAM,EAAEI,CAAC,EAAE,EAAE;AAC3C,QAAA,MAAMa,IAAI,GAAGvC,MAAM,CAACiB,SAAS,CAACoJ,SAAS,CAAC7I,CAAC,CAAC,CAAC,EAAEP,SAAS,CAACoJ,SAAS,CAAC3I,CAAC,CAAC,CAAC,CAAC;QACrEQ,OAAO,GAAGvC,IAAI,CAAC6C,GAAG,CAACN,OAAO,EAAEK,IAAI,CAAC;AACrC,MAAA;AACJ,IAAA;AACA,IAAA,OAAOL,OAAO;AAClB,EAAA;;AAEA;AACA,EAAA,MAAM8K,SAAS,GAAG5L,KAAK,CAACmL,YAAY,CAAC,CAACf,IAAI,EAAE,CAACtK,GAAG,CAAC,OAAO;AACpD+L,IAAAA,QAAQ,EAAE7L,KAAK,CAACC,IAAI,CAAC;MAACC,MAAM,EAAEN,MAAM,CAACM;KAAO,EAAE,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAAC,CACrDC,IAAI,CAAC,MAAMb,IAAI,EAAE,GAAG,GAAG,CAAC,CACxBuC,KAAK,CAAC,CAAC,EAAEqC,WAAW,CAAC;IAC1B0H,QAAQ,EAAE9L,KAAK,CAACoE,WAAW,CAAC,CAACgG,IAAI,CAAC,CAAC,CAAC;AACpC2B,IAAAA,YAAY,EAAE,IAAI;AAClB1C,IAAAA,WAAW,EAAE,CAACtI;AAClB,GAAC,CAAC,CAAC;EAEH,IAAIiL,kBAAkB,GAAG,IAAI;EAC7B,IAAIC,iBAAiB,GAAG,CAAClL,QAAQ;;AAEjC;EACA,KAAK,IAAImL,SAAS,GAAG,CAAC,EAAEA,SAAS,GAAGtD,aAAa,EAAEsD,SAAS,EAAE,EAAE;AAC5D,IAAA,KAAK,MAAMC,QAAQ,IAAIP,SAAS,EAAE;AAC9B;AACA,MAAA,MAAMQ,OAAO,GAAGpD,gBAAgB,CAACmD,QAAQ,CAACN,QAAQ,CAAC;;AAEnD;AACA,MAAA,IAAIO,OAAO,GAAGD,QAAQ,CAAC9C,WAAW,EAAE;QAChC8C,QAAQ,CAACJ,YAAY,GAAG,CAAC,GAAGI,QAAQ,CAACN,QAAQ,CAAC;QAC9CM,QAAQ,CAAC9C,WAAW,GAAG+C,OAAO;;AAE9B;QACA,IAAIA,OAAO,GAAGH,iBAAiB,EAAE;AAC7BD,UAAAA,kBAAkB,GAAG,CAAC,GAAGG,QAAQ,CAACN,QAAQ,CAAC;AAC3CI,UAAAA,iBAAiB,GAAGG,OAAO;AAC/B,QAAA;AACJ,MAAA;;AAEA;MACA,KAAK,IAAIhM,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGgE,WAAW,EAAEhE,CAAC,EAAE,EAAE;AAClC,QAAA,MAAMiM,EAAE,GAAG7M,IAAI,EAAE;AACjB,QAAA,MAAM8M,EAAE,GAAG9M,IAAI,EAAE;QAEjB2M,QAAQ,CAACL,QAAQ,CAAC1L,CAAC,CAAC,GAAG7B,IAAI,CAACmB,KAAK,CAC7B4L,CAAC,GAAGa,QAAQ,CAACL,QAAQ,CAAC1L,CAAC,CAAC,GACxBoL,EAAE,GAAGa,EAAE,IAAIF,QAAQ,CAACJ,YAAY,CAAC3L,CAAC,CAAC,GAAG+L,QAAQ,CAACN,QAAQ,CAACzL,CAAC,CAAC,CAAC,GAC3DsL,EAAE,GAAGY,EAAE,IAAIN,kBAAkB,CAAC5L,CAAC,CAAC,GAAG+L,QAAQ,CAACN,QAAQ,CAACzL,CAAC,CAAC,CAC3D,CAAC;;AAED;QACA,IAAI+L,QAAQ,CAACL,QAAQ,CAAC1L,CAAC,CAAC,KAAK,CAAC,EAAE;AAC5B,UAAA,MAAMgH,SAAS,GAAGpH,KAAK,CAACC,IAAI,CAAC;YAACC,MAAM,EAAEN,MAAM,CAACM;WAAO,EAAE,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAAC,CAC7DsJ,MAAM,CAACpJ,CAAC,IAAI,CAAC6L,QAAQ,CAACN,QAAQ,CAACpD,QAAQ,CAACnI,CAAC,CAAC,CAAC;AAChD,UAAA,IAAI8G,SAAS,CAAClH,MAAM,GAAG,CAAC,EAAE;AACtB,YAAA,MAAMsJ,SAAS,GAAGjL,IAAI,CAACmB,KAAK,CAACF,IAAI,EAAE,GAAG4H,SAAS,CAAClH,MAAM,CAAC;YACvDiM,QAAQ,CAACN,QAAQ,CAACzL,CAAC,CAAC,GAAGgH,SAAS,CAACoC,SAAS,CAAC;AAC/C,UAAA;AACJ,QAAA;AACJ,MAAA;AACJ,IAAA;AACJ,EAAA;EAEA,OAAO;AACH5J,IAAAA,MAAM,EAAED,UAAU,CAACqM,kBAAkB,CAAClM,GAAG,CAACM,CAAC,IAAIR,MAAM,CAACQ,CAAC,CAAC,CAAC,CAAC;AAC1D0H,IAAAA,IAAI,EAAEb,WAAW,CAACC,GAAG,EAAE,GAAGF;GAC7B;AACL;;ACvFO,SAASuF,qBAAqBA,CAAC3M,MAAM,EAAEwE,WAAW,EAAEuE,QAAQ,GAAG,EAAE,EAAE;AACtEvG,EAAAA,OAAO,CAAC2E,GAAG,CAAC,qCAAqC,CAAC;AAClD,EAAA,MAAMC,KAAK,GAAGC,WAAW,CAACC,GAAG,EAAE;AAC/BrC,EAAAA,6BAA6B,CAACjF,MAAM,EAAEwE,WAAW,CAAC;AAElD,EAAA,MAAMvE,SAAS,GAAGD,MAAM,CAACE,GAAG,CAAC5B,OAAO,CAAC;AACrC,EAAA,MAAMsO,OAAO,GAAGpJ,wBAAwB,CAACuF,QAAQ,CAAC6D,OAAO,IAAI,EAAE,EAAE,SAAS,EAAEhK,eAAe,CAACS,QAAQ,CAAC;AACrG,EAAA,MAAM2F,aAAa,GAAGxF,wBAAwB,CAACuF,QAAQ,CAAC8D,aAAa,IAAI9D,QAAQ,CAAC0C,UAAU,IAAI,GAAG,EAAE,eAAe,EAAE7I,eAAe,CAACU,cAAc,CAAC;AACrJ4B,EAAAA,iBAAiB,CAAC,uBAAuB,EAAE,CAAC8D,aAAa,EAAE4D,OAAO,EAAEpI,WAAW,EAAExE,MAAM,CAACM,MAAM,CAAC,CAAC;AAChG,EAAA,MAAMwM,eAAe,GAAG/D,QAAQ,CAAC+D,eAAe,IAAI,GAAG;EACvD,MAAMC,KAAK,GAAGhE,QAAQ,CAACiE,mBAAmB,IAAI,CAAC,CAAC;EAChD,MAAMC,IAAI,GAAGlE,QAAQ,CAACmE,mBAAmB,IAAI,CAAC,CAAC;;AAE/C;AACA,EAAA,MAAMtN,IAAI,GAAG,OAAOmJ,QAAQ,CAACvJ,IAAI,KAAK,QAAQ,GAAGD,UAAU,CAACwJ,QAAQ,CAACvJ,IAAI,CAAC,GAAGb,IAAI,CAACkB,MAAM;;AAExF;AACA,EAAA,MAAMsN,UAAU,GAAG/M,KAAK,CAACJ,MAAM,CAACM,MAAM,CAAC,CAACkK,IAAI,CAAC,CAAC,CAAC;;AAE/C;EACA,MAAM5B,SAAS,GAAGxI,KAAK,CAACJ,MAAM,CAACM,MAAM,CAAC,CAACkK,IAAI,EAAE,CAACtK,GAAG,CAAC,MAAME,KAAK,CAACJ,MAAM,CAACM,MAAM,CAAC,CAAC;AAC7E,EAAA,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGR,MAAM,CAACM,MAAM,EAAEE,CAAC,EAAE,EAAE;AACpC,IAAA,KAAK,IAAIE,CAAC,GAAGF,CAAC,GAAG,CAAC,EAAEE,CAAC,GAAGV,MAAM,CAACM,MAAM,EAAEI,CAAC,EAAE,EAAE;AACxC,MAAA,MAAMiC,QAAQ,GAAG3D,MAAM,CAACiB,SAAS,CAACO,CAAC,CAAC,EAAEP,SAAS,CAACS,CAAC,CAAC,CAAC;AACnDkI,MAAAA,SAAS,CAACpI,CAAC,CAAC,CAACE,CAAC,CAAC,GAAGiC,QAAQ;AAC1BiG,MAAAA,SAAS,CAAClI,CAAC,CAAC,CAACF,CAAC,CAAC,GAAGmC,QAAQ;AAC9B,IAAA;AACJ,EAAA;EAEA,IAAI6G,YAAY,GAAG,IAAI;EACvB,IAAIC,WAAW,GAAG,CAACtI,QAAQ;;AAE3B;EACA,KAAK,IAAImL,SAAS,GAAG,CAAC,EAAEA,SAAS,GAAGtD,aAAa,EAAEsD,SAAS,EAAE,EAAE;AAC5D;IACA,MAAMc,SAAS,GAAG,EAAE;;AAEpB;IACA,KAAK,IAAIC,GAAG,GAAG,CAAC,EAAEA,GAAG,GAAGT,OAAO,EAAES,GAAG,EAAE,EAAE;AACpC,MAAA,MAAM7F,SAAS,GAAGpH,KAAK,CAACC,IAAI,CAAC;QAACC,MAAM,EAAEN,MAAM,CAACM;AAAM,OAAC,EAAE,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAAC;MAClE,MAAM8M,QAAQ,GAAG,EAAE;;AAEnB;AACA,MAAA,MAAM1F,UAAU,GAAGjJ,IAAI,CAACmB,KAAK,CAACF,IAAI,EAAE,GAAG4H,SAAS,CAAClH,MAAM,CAAC;AACxDgN,MAAAA,QAAQ,CAACzF,IAAI,CAACL,SAAS,CAACI,UAAU,CAAC,CAAC;AACpCJ,MAAAA,SAAS,CAACM,MAAM,CAACF,UAAU,EAAE,CAAC,CAAC;;AAE/B;AACA,MAAA,OAAO0F,QAAQ,CAAChN,MAAM,GAAGkE,WAAW,EAAE;AAClC;AACA,QAAA,MAAM+I,aAAa,GAAG/F,SAAS,CAACtH,GAAG,CAACM,CAAC,IAAI;AACrC,UAAA,MAAMgN,SAAS,GAAG7O,IAAI,CAACC,GAAG,CAACuO,UAAU,CAAC3M,CAAC,CAAC,EAAEuM,KAAK,CAAC;UAChD,MAAM7L,OAAO,GAAGvC,IAAI,CAAC6C,GAAG,CAAC,GAAG8L,QAAQ,CAACpN,GAAG,CAACQ,CAAC,IAAIkI,SAAS,CAACpI,CAAC,CAAC,CAACE,CAAC,CAAC,CAAC,CAAC;UAC/D,MAAM+M,SAAS,GAAG9O,IAAI,CAACC,GAAG,CAACsC,OAAO,EAAE+L,IAAI,CAAC;UACzC,OAAOO,SAAS,GAAGC,SAAS;AAChC,QAAA,CAAC,CAAC;;AAEF;AACA,QAAA,MAAMC,KAAK,GAAGH,aAAa,CAACjI,MAAM,CAAC,CAACtD,CAAC,EAAEtD,CAAC,KAAKsD,CAAC,GAAGtD,CAAC,EAAE,CAAC,CAAC;AACtD,QAAA,IAAImB,MAAM,GAAGD,IAAI,EAAE,GAAG8N,KAAK;QAC3B,IAAI/F,aAAa,GAAG,CAAC;QAErB,OAAO9H,MAAM,GAAG,CAAC,IAAI8H,aAAa,GAAG4F,aAAa,CAACjN,MAAM,EAAE;AACvDT,UAAAA,MAAM,IAAI0N,aAAa,CAAC5F,aAAa,CAAC;AACtC,UAAA,IAAI9H,MAAM,GAAG,CAAC,EAAE8H,aAAa,EAAE;AACnC,QAAA;AAEA2F,QAAAA,QAAQ,CAACzF,IAAI,CAACL,SAAS,CAACG,aAAa,CAAC,CAAC;AACvCH,QAAAA,SAAS,CAACM,MAAM,CAACH,aAAa,EAAE,CAAC,CAAC;AACtC,MAAA;AAEAyF,MAAAA,SAAS,CAACvF,IAAI,CAACyF,QAAQ,CAAC;AAC5B,IAAA;;AAEA;AACA,IAAA,KAAK,MAAMA,QAAQ,IAAIF,SAAS,EAAE;MAC9B,MAAMZ,OAAO,GAAG7N,IAAI,CAAC6C,GAAG,CAAC,GAAG8L,QAAQ,CAACpN,GAAG,CAAC,CAACM,CAAC,EAAEmN,GAAG,KAC5CL,QAAQ,CAACnL,KAAK,CAACwL,GAAG,GAAG,CAAC,CAAC,CAACzN,GAAG,CAACQ,CAAC,IACzB1B,MAAM,CAACiB,SAAS,CAACO,CAAC,CAAC,EAAEP,SAAS,CAACS,CAAC,CAAC,CACrC,CACJ,CAAC,CAACkN,IAAI,EAAE,CAAC;MAET,IAAIpB,OAAO,GAAG/C,WAAW,EAAE;AACvBA,QAAAA,WAAW,GAAG+C,OAAO;AACrBhD,QAAAA,YAAY,GAAG8D,QAAQ;AAC3B,MAAA;AACJ,IAAA;;AAEA;AACA,IAAA,KAAK,IAAI9M,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG2M,UAAU,CAAC7M,MAAM,EAAEE,CAAC,EAAE,EAAE;AACxC2M,MAAAA,UAAU,CAAC3M,CAAC,CAAC,IAAK,CAAC,GAAGsM,eAAgB;AAC1C,IAAA;;AAEA;AACA,IAAA,KAAK,MAAMQ,QAAQ,IAAIF,SAAS,EAAE;AAC9B,MAAA,MAAMS,OAAO,GAAG,CAAC,GAAGP,QAAQ,CAAChN,MAAM;AACnC,MAAA,KAAK,MAAME,CAAC,IAAI8M,QAAQ,EAAE;AACtBH,QAAAA,UAAU,CAAC3M,CAAC,CAAC,IAAIqN,OAAO;AAC5B,MAAA;AACJ,IAAA;AACJ,EAAA;EAEA,OAAO;AACH7N,IAAAA,MAAM,EAAED,UAAU,CAACyJ,YAAY,CAACtJ,GAAG,CAACM,CAAC,IAAIR,MAAM,CAACQ,CAAC,CAAC,CAAC,CAAC;AACpD0H,IAAAA,IAAI,EAAEb,WAAW,CAACC,GAAG,EAAE,GAAGF;GAC7B;AACL;;AC1GO,SAAS0G,UAAUA,CAAC9N,MAAM,EAAEwE,WAAW,EAAEuE,QAAQ,GAAG,EAAE,EAAE;AAC3DvG,EAAAA,OAAO,CAAC2E,GAAG,CAAC,yBAAyB,CAAC;AACtC,EAAA,MAAMC,KAAK,GAAGC,WAAW,CAACC,GAAG,EAAE;AAC/B/C,EAAAA,qBAAqB,CAACvE,MAAM,EAAEwE,WAAW,CAAC;AAE1C,EAAA,MAAMvE,SAAS,GAAGD,MAAM,CAACE,GAAG,CAAC5B,OAAO,CAAC;AACrC,EAAA,MAAM0K,aAAa,GAAGxF,wBAAwB,CAACuF,QAAQ,CAACgF,cAAc,IAAIhF,QAAQ,CAACC,aAAa,IAAI,IAAI,EAAE,gBAAgB,EAAEpG,eAAe,CAACU,cAAc,CAAC;AAC3J,EAAA,MAAM0K,UAAU,GAAGxK,wBAAwB,CAACuF,QAAQ,CAACiF,UAAU,IAAI,CAAC,EAAE,YAAY,EAAEpL,eAAe,CAACU,cAAc,CAAC;AACnH4B,EAAAA,iBAAiB,CAAC,YAAY,EAAE,CAAC8D,aAAa,EAAExE,WAAW,EAAExE,MAAM,CAACM,MAAM,CAAC,CAAC;;AAE5E;EACA,SAAS8I,gBAAgBA,CAACC,SAAS,EAAE;IACjC,IAAInI,OAAO,GAAGC,QAAQ;AACtB,IAAA,KAAK,IAAIX,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG6I,SAAS,CAAC/I,MAAM,GAAG,CAAC,EAAEE,CAAC,EAAE,EAAE;AAC3C,MAAA,KAAK,IAAIE,CAAC,GAAGF,CAAC,GAAG,CAAC,EAAEE,CAAC,GAAG2I,SAAS,CAAC/I,MAAM,EAAEI,CAAC,EAAE,EAAE;AAC3C,QAAA,MAAMa,IAAI,GAAGvC,MAAM,CAACiB,SAAS,CAACoJ,SAAS,CAAC7I,CAAC,CAAC,CAAC,EAAEP,SAAS,CAACoJ,SAAS,CAAC3I,CAAC,CAAC,CAAC,CAAC;QACrEQ,OAAO,GAAGvC,IAAI,CAAC6C,GAAG,CAACN,OAAO,EAAEK,IAAI,CAAC;AACrC,MAAA;AACJ,IAAA;AACA,IAAA,OAAOL,OAAO;AAClB,EAAA;;AAEA;AACA,EAAA,IAAI+M,OAAO,GAAG7N,KAAK,CAACC,IAAI,CAAC;AAACC,IAAAA,MAAM,EAAEkE;AAAW,GAAC,EAAE,CAACjE,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAAC;AAC5D,EAAA,IAAI0N,IAAI,GAAG,CAAC,GAAGD,OAAO,CAAC;AACvB,EAAA,IAAIxE,WAAW,GAAGL,gBAAgB,CAAC8E,IAAI,CAAC;;AAExC;AACA,EAAA,MAAMC,QAAQ,GAAG,IAAIC,GAAG,EAAE;;AAE1B;AACA,EAAA,SAASC,UAAUA,CAACC,QAAQ,EAAEC,QAAQ,EAAE;AACpC,IAAA,OAAO,CAAA,EAAGD,QAAQ,CAAA,CAAA,EAAIC,QAAQ,CAAA,CAAE;AACpC,EAAA;EAEA,KAAK,IAAIjC,SAAS,GAAG,CAAC,EAAEA,SAAS,GAAGtD,aAAa,EAAEsD,SAAS,EAAE,EAAE;IAC5D,IAAIkC,oBAAoB,GAAG,IAAI;IAC/B,IAAIC,mBAAmB,GAAG,CAACtN,QAAQ;;AAEnC;IACA,KAAK,IAAIX,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGgE,WAAW,EAAEhE,CAAC,EAAE,EAAE;AAClC,MAAA,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGV,MAAM,CAACM,MAAM,EAAEI,CAAC,EAAE,EAAE;AACpC,QAAA,IAAI,CAACuN,OAAO,CAACpF,QAAQ,CAACnI,CAAC,CAAC,EAAE;UACtB,MAAMgO,OAAO,GAAGL,UAAU,CAACJ,OAAO,CAACzN,CAAC,CAAC,EAAEE,CAAC,CAAC;AACzC,UAAA,MAAMiO,QAAQ,GAAG,CAAC,GAAGV,OAAO,CAAC;AAC7BU,UAAAA,QAAQ,CAACnO,CAAC,CAAC,GAAGE,CAAC;AAEf,UAAA,MAAM8L,OAAO,GAAGpD,gBAAgB,CAACuF,QAAQ,CAAC;;AAE1C;AACA;UACA,IAAKnC,OAAO,GAAGiC,mBAAmB,KAC5B,CAACN,QAAQ,CAACS,GAAG,CAACF,OAAO,CAAC,IAAIP,QAAQ,CAACU,GAAG,CAACH,OAAO,CAAC,IAAIpC,SAAS,CAAC,IAC/DE,OAAO,GAAG/C,WAAW,EAAE;AACvB+E,YAAAA,oBAAoB,GAAGG,QAAQ;AAC/BF,YAAAA,mBAAmB,GAAGjC,OAAO;AACjC,UAAA;AACJ,QAAA;AACJ,MAAA;AACJ,IAAA;IAEA,IAAI,CAACgC,oBAAoB,EAAE;;AAE3B;AACAP,IAAAA,OAAO,GAAGO,oBAAoB;;AAE9B;IACA,IAAIC,mBAAmB,GAAGhF,WAAW,EAAE;AACnCyE,MAAAA,IAAI,GAAG,CAAC,GAAGD,OAAO,CAAC;AACnBxE,MAAAA,WAAW,GAAGgF,mBAAmB;AACrC,IAAA;;AAEA;IACA,KAAK,IAAIjO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGgE,WAAW,EAAEhE,CAAC,EAAE,EAAE;AAClC,MAAA,MAAMkO,OAAO,GAAGL,UAAU,CAACJ,OAAO,CAACzN,CAAC,CAAC,EAAE0N,IAAI,CAAC1N,CAAC,CAAC,CAAC;MAC/C2N,QAAQ,CAACW,GAAG,CAACJ,OAAO,EAAEpC,SAAS,GAAG0B,UAAU,CAAC;AACjD,IAAA;;AAEA;AACA,IAAA,KAAK,MAAM,CAACe,IAAI,EAAEC,UAAU,CAAC,IAAIb,QAAQ,CAACc,OAAO,EAAE,EAAE;MACjD,IAAID,UAAU,IAAI1C,SAAS,EAAE;AACzB6B,QAAAA,QAAQ,CAACe,MAAM,CAACH,IAAI,CAAC;AACzB,MAAA;AACJ,IAAA;AACJ,EAAA;EAEA,OAAO;AACH/O,IAAAA,MAAM,EAAED,UAAU,CAACmO,IAAI,CAAChO,GAAG,CAACM,CAAC,IAAIR,MAAM,CAACQ,CAAC,CAAC,CAAC,CAAC;AAC5C0H,IAAAA,IAAI,EAAEb,WAAW,CAACC,GAAG,EAAE,GAAGF;GAC7B;AACL;;AC/FO,SAAS+H,YAAYA,CAACnP,MAAM,EAAEwE,WAAW,EAAE;AAC9ChC,EAAAA,OAAO,CAAC2E,GAAG,CAAC,uCAAuC,CAAC;AACpD,EAAA,MAAMC,KAAK,GAAGC,WAAW,CAACC,GAAG,EAAE;AAC/BtC,EAAAA,0BAA0B,CAAChF,MAAM,EAAEwE,WAAW,CAAC;AAE/C,EAAA,MAAMvE,SAAS,GAAGD,MAAM,CAACE,GAAG,CAAC5B,OAAO,CAAC;EACrC,IAAI8Q,aAAa,GAAG,IAAI;EACxB,IAAIC,eAAe,GAAG,CAAClO,QAAQ;;AAE/B;EACA,SAASmO,oBAAoBA,CAACjG,SAAS,EAAE;IACrC,IAAIjI,OAAO,GAAG,CAACD,QAAQ;AACvB,IAAA,KAAK,IAAIX,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG6I,SAAS,CAAC/I,MAAM,GAAG,CAAC,EAAEE,CAAC,EAAE,EAAE;AAC3C,MAAA,KAAK,IAAIE,CAAC,GAAGF,CAAC,GAAG,CAAC,EAAEE,CAAC,GAAG2I,SAAS,CAAC/I,MAAM,EAAEI,CAAC,EAAE,EAAE;AAC3C,QAAA,MAAMa,IAAI,GAAGvC,MAAM,CAACiB,SAAS,CAACoJ,SAAS,CAAC7I,CAAC,CAAC,CAAC,EAAEP,SAAS,CAACoJ,SAAS,CAAC3I,CAAC,CAAC,CAAC,CAAC;QACrEU,OAAO,GAAGzC,IAAI,CAAC8C,GAAG,CAACL,OAAO,EAAEG,IAAI,CAAC;AACrC,MAAA;AACJ,IAAA;AACA,IAAA,OAAOH,OAAO;AAClB,EAAA;;AAEA;AACA,EAAA,UAAU2D,YAAYA,CAACwK,GAAG,EAAE/Q,CAAC,EAAE;IAC3B,IAAIA,CAAC,KAAK,CAAC,EAAE;AACT,MAAA,KAAK,IAAIgC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG+O,GAAG,CAACjP,MAAM,EAAEE,CAAC,EAAE,EAAE;AACjC,QAAA,MAAM,CAAC+O,GAAG,CAAC/O,CAAC,CAAC,CAAC;AAClB,MAAA;AACA,MAAA;AACJ,IAAA;AAEA,IAAA,KAAK,IAAIA,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG+O,GAAG,CAACjP,MAAM,GAAG9B,CAAC,GAAG,CAAC,EAAEgC,CAAC,EAAE,EAAE;AACzC,MAAA,MAAMgP,IAAI,GAAGD,GAAG,CAAC/O,CAAC,CAAC;MACnB,MAAMiP,SAAS,GAAGF,GAAG,CAACpN,KAAK,CAAC3B,CAAC,GAAG,CAAC,CAAC;MAClC,KAAK,MAAMkP,IAAI,IAAI3K,YAAY,CAAC0K,SAAS,EAAEjR,CAAC,GAAG,CAAC,CAAC,EAAE;AAC/C,QAAA,MAAM,CAACgR,IAAI,EAAE,GAAGE,IAAI,CAAC;AACzB,MAAA;AACJ,IAAA;AACJ,EAAA;;AAEA;AACA,EAAA,MAAMvP,OAAO,GAAGC,KAAK,CAACC,IAAI,CAAC;IAACC,MAAM,EAAEN,MAAM,CAACM;AAAM,GAAC,EAAE,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAAC;EAChE,KAAK,MAAM6I,SAAS,IAAItE,YAAY,CAAC5E,OAAO,EAAEqE,WAAW,CAAC,EAAE;AACxD,IAAA,MAAMmL,WAAW,GAAGL,oBAAoB,CAACjG,SAAS,CAAC;IACnD,IAAIsG,WAAW,GAAGN,eAAe,EAAE;AAC/BA,MAAAA,eAAe,GAAGM,WAAW;AAC7BP,MAAAA,aAAa,GAAG/F,SAAS;AAC7B,IAAA;AACJ,EAAA;EAEA,OAAO;AACHrJ,IAAAA,MAAM,EAAED,UAAU,CAACqP,aAAa,CAAClP,GAAG,CAACM,CAAC,IAAIR,MAAM,CAACQ,CAAC,CAAC,CAAC,CAAC;AACrD0H,IAAAA,IAAI,EAAEb,WAAW,CAACC,GAAG,EAAE,GAAGF;GAC7B;AACL;;ACrDO,SAASwI,YAAYA,CAAC5P,MAAM,EAAEwE,WAAW,EAAE;AAC9ChC,EAAAA,OAAO,CAAC2E,GAAG,CAAC,uCAAuC,CAAC;AACpD,EAAA,MAAMC,KAAK,GAAGC,WAAW,CAACC,GAAG,EAAE;AAC/BtC,EAAAA,0BAA0B,CAAChF,MAAM,EAAEwE,WAAW,CAAC;AAE/C,EAAA,MAAMvE,SAAS,GAAGD,MAAM,CAACE,GAAG,CAAC5B,OAAO,CAAC;EACrC,IAAI8Q,aAAa,GAAG,IAAI;EACxB,IAAI/G,eAAe,GAAG,CAAClH,QAAQ;;AAE/B;EACA,SAASiH,oBAAoBA,CAACiB,SAAS,EAAE;IACrC,IAAInI,OAAO,GAAGC,QAAQ;AACtB,IAAA,KAAK,IAAIX,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG6I,SAAS,CAAC/I,MAAM,GAAG,CAAC,EAAEE,CAAC,EAAE,EAAE;AAC3C,MAAA,KAAK,IAAIE,CAAC,GAAGF,CAAC,GAAG,CAAC,EAAEE,CAAC,GAAG2I,SAAS,CAAC/I,MAAM,EAAEI,CAAC,EAAE,EAAE;AAC3C,QAAA,MAAMa,IAAI,GAAGvC,MAAM,CAACiB,SAAS,CAACoJ,SAAS,CAAC7I,CAAC,CAAC,CAAC,EAAEP,SAAS,CAACoJ,SAAS,CAAC3I,CAAC,CAAC,CAAC,CAAC;QACrEQ,OAAO,GAAGvC,IAAI,CAAC6C,GAAG,CAACN,OAAO,EAAEK,IAAI,CAAC;AACrC,MAAA;AACJ,IAAA;AACA,IAAA,OAAOL,OAAO;AAClB,EAAA;;AAEA;AACA,EAAA,UAAU6D,YAAYA,CAACwK,GAAG,EAAE/Q,CAAC,EAAE;IAC3B,IAAIA,CAAC,KAAK,CAAC,EAAE;AACT,MAAA,KAAK,IAAIgC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG+O,GAAG,CAACjP,MAAM,EAAEE,CAAC,EAAE,EAAE;AACjC,QAAA,MAAM,CAAC+O,GAAG,CAAC/O,CAAC,CAAC,CAAC;AAClB,MAAA;AACA,MAAA;AACJ,IAAA;AAEA,IAAA,KAAK,IAAIA,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG+O,GAAG,CAACjP,MAAM,GAAG9B,CAAC,GAAG,CAAC,EAAEgC,CAAC,EAAE,EAAE;AACzC,MAAA,MAAMgP,IAAI,GAAGD,GAAG,CAAC/O,CAAC,CAAC;MACnB,MAAMiP,SAAS,GAAGF,GAAG,CAACpN,KAAK,CAAC3B,CAAC,GAAG,CAAC,CAAC;MAClC,KAAK,MAAMkP,IAAI,IAAI3K,YAAY,CAAC0K,SAAS,EAAEjR,CAAC,GAAG,CAAC,CAAC,EAAE;AAC/C,QAAA,MAAM,CAACgR,IAAI,EAAE,GAAGE,IAAI,CAAC;AACzB,MAAA;AACJ,IAAA;AACJ,EAAA;;AAEA;AACA,EAAA,MAAMvP,OAAO,GAAGC,KAAK,CAACC,IAAI,CAAC;IAACC,MAAM,EAAEN,MAAM,CAACM;AAAM,GAAC,EAAE,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAAC;EAChE,KAAK,MAAM6I,SAAS,IAAItE,YAAY,CAAC5E,OAAO,EAAEqE,WAAW,CAAC,EAAE;AACxD,IAAA,MAAM8D,WAAW,GAAGF,oBAAoB,CAACiB,SAAS,CAAC;IACnD,IAAIf,WAAW,GAAGD,eAAe,EAAE;AAC/BA,MAAAA,eAAe,GAAGC,WAAW;AAC7B8G,MAAAA,aAAa,GAAG/F,SAAS;AAC7B,IAAA;AACJ,EAAA;EAEA,OAAO;AACHrJ,IAAAA,MAAM,EAAED,UAAU,CAACqP,aAAa,CAAClP,GAAG,CAACM,CAAC,IAAIR,MAAM,CAACQ,CAAC,CAAC,CAAC,CAAC;AACrD0H,IAAAA,IAAI,EAAEb,WAAW,CAACC,GAAG,EAAE,GAAGF;GAC7B;AACL;;ACrDO,SAASyI,eAAeA,CAAC7P,MAAM,EAAEwE,WAAW,EAAEhF,IAAI,EAAE;AACvDgD,EAAAA,OAAO,CAAC2E,GAAG,CAAC,8BAA8B,CAAC;AAC3C,EAAA,MAAMC,KAAK,GAAGC,WAAW,CAACC,GAAG,EAAE;AAC/B/C,EAAAA,qBAAqB,CAACvE,MAAM,EAAEwE,WAAW,CAAC;;AAE1C;AACA,EAAA,MAAM5E,IAAI,GAAG,OAAOJ,IAAI,KAAK,QAAQ,GAAGD,UAAU,CAACC,IAAI,CAAC,GAAGb,IAAI,CAACkB,MAAM;;AAEtE;AACA,EAAA,MAAMM,OAAO,GAAGC,KAAK,CAACC,IAAI,CAAC;IAACC,MAAM,EAAEN,MAAM,CAACM;AAAM,GAAC,EAAE,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAAC;EAChE,MAAM+G,QAAQ,GAAG,EAAE;EAEnB,KAAK,IAAI/G,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGgE,WAAW,EAAEhE,CAAC,EAAE,EAAE;AAClC,IAAA,MAAMsP,WAAW,GAAGnR,IAAI,CAACmB,KAAK,CAACF,IAAI,EAAE,GAAGO,OAAO,CAACG,MAAM,CAAC;AACvDiH,IAAAA,QAAQ,CAACM,IAAI,CAAC1H,OAAO,CAAC2P,WAAW,CAAC,CAAC;AACnC3P,IAAAA,OAAO,CAAC2H,MAAM,CAACgI,WAAW,EAAE,CAAC,CAAC;AAClC,EAAA;EAEA,OAAO;AACH9P,IAAAA,MAAM,EAAED,UAAU,CAACwH,QAAQ,CAACrH,GAAG,CAACM,CAAC,IAAIR,MAAM,CAACQ,CAAC,CAAC,CAAC,CAAC;AAChD0H,IAAAA,IAAI,EAAEb,WAAW,CAACC,GAAG,EAAE,GAAGF;GAC7B;AACL;;ACPA,MAAM2I,UAAU,GAAG;AACjBC,EAAAA,MAAM,EAAE7H,eAAe;EACvBzC,qBAAqB;EACrBwB,yBAAyB;EACzBqB,iBAAiB;EACjBO,kBAAkB;EAClBqB,gBAAgB;EAChBmB,yBAAyB;EACzBqB,qBAAqB;EACrBmB,UAAU;EACVqB,YAAY;EACZS,YAAY;AACZC,EAAAA;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAeI,kBAAkBA,CAACC,IAAI,EAAEC,SAAS,EAAEC,QAAQ,EAAEpQ,MAAM,EAAEyE,OAAO,EAAEjF,IAAI,EAAE;AACzF;EACA,IAAI8B,KAAK,EAAE+O,UAAU,EAAEC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,KAAK;AAC1D,EAAA,IAAI,OAAOP,IAAI,KAAK,QAAQ,IAAIA,IAAI,KAAK,IAAI,IAAI,CAAC9P,KAAK,CAAC6D,OAAO,CAACiM,IAAI,CAAC,EAAE;IACrE5O,KAAK,GAAG4O,IAAI,CAAC5O,KAAK;AAClB+O,IAAAA,UAAU,GAAGH,IAAI,CAACC,SAAS,IAAI,QAAQ;IACvCG,SAAS,GAAGJ,IAAI,CAACE,QAAQ;IACzBG,OAAO,GAAGL,IAAI,CAAClQ,MAAM;IACrBwQ,QAAQ,GAAGN,IAAI,CAACzL,OAAO;AACvBgM,IAAAA,KAAK,GAAGP,IAAI,CAAC1Q,IAAI,IAAI,EAAE;AACzB,EAAA,CAAC,MAAM;AACL;AACA8B,IAAAA,KAAK,GAAG4O,IAAI;IACZG,UAAU,GAAGF,SAAS,IAAI,QAAQ;AAClCG,IAAAA,SAAS,GAAGF,QAAQ;AACpBG,IAAAA,OAAO,GAAGvQ,MAAM;AAChBwQ,IAAAA,QAAQ,GAAG/L,OAAO;IAClBgM,KAAK,GAAGjR,IAAI,IAAI,EAAE;AACpB,EAAA;AACA,EAAA,IAAI,CAACuQ,UAAU,CAACM,UAAU,CAAC,EAAE;AAC3B,IAAA,MAAM,IAAItJ,KAAK,CAAC,CAAA,mBAAA,EAAsBsJ,UAAU,EAAE,CAAC;AACrD,EAAA;EACA/O,KAAK,GAAGkC,wBAAwB,CAAClC,KAAK,EAAE,OAAO,EAAEsB,eAAe,CAACG,gBAAgB,CAAC;EAClF,IAAI2N,IAAI,GAAGH,OAAO;AAClB,EAAA,IAAI,CAACnQ,KAAK,CAAC6D,OAAO,CAACyM,IAAI,CAAC,IAAIA,IAAI,CAACpQ,MAAM,KAAK,CAAC,EAAE;AAC7C,IAAA,MAAMqQ,WAAW,GAAGN,UAAU,KAAK,cAAc,IAAIA,UAAU,KAAK,cAAc,GAC9E1R,IAAI,CAAC8C,GAAG,CAACH,KAAK,GAAG,CAAC,EAAE,EAAE,CAAC,GACvB3C,IAAI,CAAC6C,GAAG,CAAC7C,IAAI,CAAC8C,GAAG,CAACH,KAAK,GAAG,EAAE,EAAE,GAAG,CAAC,EAAEsB,eAAe,CAACC,uBAAuB,CAAC;AAChF,IAAA,MAAM+N,IAAI,GAAGN,SAAS,KAAKO,SAAS,GAChCF,WAAW,GACXnN,wBAAwB,CAAC8M,SAAS,EAAE,UAAU,EAAE1N,eAAe,CAACC,uBAAuB,CAAC;AAC5F,IAAA,MAAMjD,IAAI,GAAGL,UAAU,CAACkR,KAAK,CAAC;AAC9BC,IAAAA,IAAI,GAAGtQ,KAAK,CAACC,IAAI,CAAC;AAAEC,MAAAA,MAAM,EAAEsQ;AAAK,KAAC,EAAE,MAAMjR,WAAW,CAACC,IAAI,CAAC,CAAC;AAC9D,EAAA;EACAmE,iBAAiB,CAAC2M,IAAI,CAAC;AACvB,EAAA,IAAIpP,KAAK,GAAGoP,IAAI,CAACpQ,MAAM,EAAE;AACvB,IAAA,MAAM,IAAIwD,UAAU,CAAC,+DAA+D,CAAC;AACvF,EAAA;EACA,IAAIuM,UAAU,KAAK,uBAAuB,EAAE;AAC1C,IAAA,OAAO,MAAM3K,qBAAqB,CAACgL,IAAI,EAAEpP,KAAK,CAAC;AACjD,EAAA;EACA,IAAI+O,UAAU,KAAK,2BAA2B,EAAE;AAC9C,IAAA,OAAOnJ,yBAAyB,CAACwJ,IAAI,EAAEpP,KAAK,EAAEmP,KAAK,CAAC;AACtD,EAAA;EACA,IAAIJ,UAAU,KAAK,QAAQ,EAAE;AAC3B,IAAA,OAAOlI,eAAe,CAACuI,IAAI,EAAEpP,KAAK,EAAEmP,KAAK,CAAC;AAC5C,EAAA;EACA,IAAIJ,UAAU,KAAK,mBAAmB,EAAE;AACtC,IAAA,OAAO9H,iBAAiB,CAACmI,IAAI,EAAEpP,KAAK,EAAEmP,KAAK,CAAC;AAC9C,EAAA;EACA,IAAIJ,UAAU,KAAK,oBAAoB,EAAE;AACvC,IAAA,MAAMS,IAAI,GAAG;AAAE,MAAA,IAAIN,QAAQ,IAAI,EAAE,CAAC;AAAEhR,MAAAA,IAAI,EAAEiR;KAAO;AACjD,IAAA,OAAO3H,kBAAkB,CAAC4H,IAAI,EAAEpP,KAAK,EAAEwP,IAAI,CAAC;AAC9C,EAAA;EACA,IAAIT,UAAU,KAAK,kBAAkB,EAAE;AACrC,IAAA,MAAMS,IAAI,GAAG;AAAE,MAAA,IAAIN,QAAQ,IAAI,EAAE,CAAC;AAAEhR,MAAAA,IAAI,EAAEiR;KAAO;AACjD,IAAA,OAAOtG,gBAAgB,CAACuG,IAAI,EAAEpP,KAAK,EAAEwP,IAAI,CAAC;AAC5C,EAAA;EACA,IAAIT,UAAU,KAAK,2BAA2B,EAAE;AAC9C,IAAA,MAAMS,IAAI,GAAG;AAAE,MAAA,IAAIN,QAAQ,IAAI,EAAE,CAAC;AAAEhR,MAAAA,IAAI,EAAEiR;KAAO;AACjD,IAAA,OAAOnF,yBAAyB,CAACoF,IAAI,EAAEpP,KAAK,EAAEwP,IAAI,CAAC;AACrD,EAAA;EACA,IAAIT,UAAU,KAAK,uBAAuB,EAAE;AAC1C,IAAA,MAAMS,IAAI,GAAG;AAAE,MAAA,IAAIN,QAAQ,IAAI,EAAE,CAAC;AAAEhR,MAAAA,IAAI,EAAEiR;KAAO;AACjD,IAAA,OAAO9D,qBAAqB,CAAC+D,IAAI,EAAEpP,KAAK,EAAEwP,IAAI,CAAC;AACjD,EAAA;EACA,IAAIT,UAAU,KAAK,YAAY,EAAE;AAC/B,IAAA,MAAMS,IAAI,GAAG;AAAE,MAAA,IAAIN,QAAQ,IAAI,EAAE,CAAe,CAAC;AACjD,IAAA,OAAO1C,UAAU,CAAC4C,IAAI,EAAEpP,KAAK,EAAEwP,IAAI,CAAC;AACtC,EAAA;EACA,IAAIT,UAAU,KAAK,cAAc,EAAE;AACjC,IAAA,OAAOlB,YAAY,CAACuB,IAAI,EAAEpP,KAAK,CAAC;AAClC,EAAA;EACA,IAAI+O,UAAU,KAAK,cAAc,EAAE;AACjC,IAAA,OAAOT,YAAY,CAACc,IAAI,EAAEpP,KAAK,CAAC;AAClC,EAAA;EACA,IAAI+O,UAAU,KAAK,iBAAiB,EAAE;AACpC,IAAA,OAAOR,eAAe,CAACa,IAAI,EAAEpP,KAAK,EAAEmP,KAAK,CAAC;AAC5C,EAAA;AACA,EAAA,MAAM,IAAI1J,KAAK,CAAC,CAAA,2BAAA,EAA8BsJ,UAAU,EAAE,CAAC;AAC7D;;;;;;;;;;;;;;;;;;"}