wu-framework 2.1.0 → 2.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +39 -39
- package/README.md +570 -570
- package/dist/adapters/angular/index.d.ts +154 -154
- package/dist/adapters/angular/index.js.map +1 -1
- package/dist/adapters/angular.d.ts +3 -3
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/lit/index.d.ts +120 -120
- package/dist/adapters/lit/index.js.map +1 -1
- package/dist/adapters/lit.d.ts +3 -3
- package/dist/adapters/preact/index.d.ts +108 -108
- package/dist/adapters/preact/index.js.map +1 -1
- package/dist/adapters/preact.d.ts +3 -3
- package/dist/adapters/qwik/index.js +1 -1
- package/dist/adapters/qwik/index.js.map +1 -1
- package/dist/adapters/react/index.d.ts +246 -246
- package/dist/adapters/react/index.js.map +1 -1
- package/dist/adapters/react.d.ts +3 -3
- package/dist/adapters/shared.js.map +1 -1
- package/dist/adapters/solid/index.d.ts +101 -101
- package/dist/adapters/solid/index.js.map +1 -1
- package/dist/adapters/solid.d.ts +3 -3
- package/dist/adapters/svelte/index.d.ts +166 -166
- package/dist/adapters/svelte/index.js.map +1 -1
- package/dist/adapters/svelte.d.ts +3 -3
- package/dist/adapters/vanilla/index.d.ts +179 -179
- package/dist/adapters/vanilla/index.js.map +1 -1
- package/dist/adapters/vanilla.d.ts +3 -3
- package/dist/adapters/vue/index.d.ts +299 -299
- package/dist/adapters/vue/index.js.map +1 -1
- package/dist/adapters/vue.d.ts +3 -3
- package/dist/ai/wu-ai.js.map +1 -1
- package/dist/core/wu-html-parser.js +2 -0
- package/dist/core/wu-html-parser.js.map +1 -0
- package/dist/core/wu-iframe-sandbox.js +2 -0
- package/dist/core/wu-iframe-sandbox.js.map +1 -0
- package/dist/core/wu-loader.js +2 -0
- package/dist/core/wu-loader.js.map +1 -0
- package/dist/core/wu-mcp-bridge.js.map +1 -1
- package/dist/core/wu-script-executor.js +2 -0
- package/dist/core/wu-script-executor.js.map +1 -0
- package/dist/wu-ai-browser-primitives-BDKXJlwc.js.map +1 -1
- package/dist/wu-framework.cjs.js +2 -2
- package/dist/wu-framework.cjs.js.map +1 -1
- package/dist/wu-framework.dev.js +8697 -9142
- package/dist/wu-framework.dev.js.map +1 -1
- package/dist/wu-framework.esm.js +2 -2
- package/dist/wu-framework.esm.js.map +1 -1
- package/dist/wu-framework.umd.js +2 -2
- package/dist/wu-framework.umd.js.map +1 -1
- package/dist/wu-logger-fJfUHBGA.js.map +1 -1
- package/integrations/astro/README.md +127 -127
- package/integrations/astro/WuApp.astro +63 -63
- package/integrations/astro/WuShell.astro +39 -39
- package/integrations/astro/index.js +68 -68
- package/integrations/astro/package.json +38 -38
- package/integrations/astro/types.d.ts +53 -53
- package/package.json +218 -218
- package/dist/wu-html-parser.js +0 -2
- package/dist/wu-html-parser.js.map +0 -1
- package/dist/wu-iframe-sandbox.js +0 -2
- package/dist/wu-iframe-sandbox.js.map +0 -1
- package/dist/wu-script-executor.js +0 -2
- package/dist/wu-script-executor.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wu-framework.dev.js","sources":["../src/core/wu-logger.js","../src/core/wu-loader.js","../src/core/wu-style-bridge.js","../src/core/wu-proxy-sandbox.js","../src/core/wu-sandbox.js","../src/core/wu-manifest.js","../src/core/wu-store.js","../src/core/wu-app.js","../src/core/wu-cache.js","../src/core/wu-event-bus.js","../src/core/wu-performance.js","../src/core/wu-plugin.js","../src/core/wu-strategies.js","../src/core/wu-error-boundary.js","../src/core/wu-hooks.js","../src/core/wu-prefetch.js","../src/core/wu-overrides.js","../src/core/wu-core.js","../src/index.js"],"sourcesContent":["/**\r\n * 📝 WU-LOGGER: Sistema de logging inteligente para entornos\r\n * Controla los logs automáticamente según el entorno\r\n */\r\n\r\nexport class WuLogger {\r\n constructor() {\r\n // Detectar entorno automáticamente\r\n this.isDevelopment = this.detectEnvironment();\r\n // En desarrollo: warn (menos ruido), en producción: error\r\n this.logLevel = this.isDevelopment ? 'warn' : 'error';\r\n\r\n this.levels = {\r\n debug: 0,\r\n info: 1,\r\n warn: 2,\r\n error: 3,\r\n silent: 4\r\n };\r\n }\r\n\r\n /**\r\n * Detectar si estamos en desarrollo\r\n */\r\n detectEnvironment() {\r\n // 1. Explicit flag takes priority\r\n if (typeof window !== 'undefined' && window.WU_DEBUG === true) return true;\r\n if (typeof window !== 'undefined' && window.WU_DEBUG === false) return false;\r\n\r\n // 2. NODE_ENV check (works in bundlers and Node)\r\n if (typeof process !== 'undefined' && process.env?.NODE_ENV === 'production') return false;\r\n if (typeof process !== 'undefined' && process.env?.NODE_ENV === 'development') return true;\r\n\r\n // 3. Browser heuristics (only if window exists)\r\n if (typeof window !== 'undefined' && window.location) {\r\n const hostname = window.location.hostname;\r\n if (hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '[::1]') return true;\r\n\r\n // URL param override\r\n try {\r\n if (new URLSearchParams(window.location.search).has('wu-debug')) return true;\r\n } catch {}\r\n }\r\n\r\n // 4. Default: assume production\r\n return false;\r\n }\r\n\r\n /**\r\n * Configurar nivel de logging\r\n */\r\n setLevel(level) {\r\n this.logLevel = level;\r\n return this;\r\n }\r\n\r\n /**\r\n * Habilitar/deshabilitar development mode\r\n */\r\n setDevelopment(isDev) {\r\n this.isDevelopment = isDev;\r\n this.logLevel = isDev ? 'debug' : 'error';\r\n return this;\r\n }\r\n\r\n /**\r\n * Verificar si debemos mostrar el log\r\n */\r\n shouldLog(level) {\r\n return this.levels[level] >= this.levels[this.logLevel];\r\n }\r\n\r\n /**\r\n * Logging methods\r\n */\r\n debug(...args) {\r\n if (this.shouldLog('debug')) {\r\n console.log(...args);\r\n }\r\n }\r\n\r\n info(...args) {\r\n if (this.shouldLog('info')) {\r\n console.info(...args);\r\n }\r\n }\r\n\r\n warn(...args) {\r\n if (this.shouldLog('warn')) {\r\n console.warn(...args);\r\n }\r\n }\r\n\r\n error(...args) {\r\n if (this.shouldLog('error')) {\r\n console.error(...args);\r\n }\r\n }\r\n\r\n /**\r\n * Logging con contexto Wu\r\n */\r\n wu(level, ...args) {\r\n if (this.shouldLog(level)) {\r\n const method = level === 'debug' ? 'log' : level;\r\n console[method]('[Wu]', ...args);\r\n }\r\n }\r\n\r\n /**\r\n * Helper methods específicos para Wu\r\n */\r\n wuDebug(...args) { this.wu('debug', ...args); }\r\n wuInfo(...args) { this.wu('info', ...args); }\r\n wuWarn(...args) { this.wu('warn', ...args); }\r\n wuError(...args) { this.wu('error', ...args); }\r\n}\r\n\r\n// Singleton instance\r\nexport const logger = new WuLogger();\r\n\r\n// Helper para compatibilidad con logs existentes\r\nexport const wuLog = {\r\n debug: (...args) => logger.wuDebug(...args),\r\n info: (...args) => logger.wuInfo(...args),\r\n warn: (...args) => logger.wuWarn(...args),\r\n error: (...args) => logger.wuError(...args)\r\n};\r\n\r\n/**\r\n * 🔇 Silenciar todos los logs de Wu Framework\r\n * Útil en producción para eliminar todo el ruido\r\n */\r\nexport function silenceAllLogs() {\r\n logger.setLevel('silent');\r\n}\r\n\r\n/**\r\n * 🔊 Restaurar logs (nivel debug)\r\n */\r\nexport function enableAllLogs() {\r\n logger.setLevel('debug');\r\n}","/**\r\n * WU-LOADER: SISTEMA DE CARGA DINAMICA UNIVERSAL\r\n * Carga aplicaciones y componentes sin depender del framework\r\n *\r\n * Cache strategy: LRU with TTL eviction.\r\n * Entries track lastAccess time. When the cache reaches maxCacheSize,\r\n * the least recently accessed entry is evicted. Entries older than\r\n * cacheTTL are treated as stale and removed on access or eviction.\r\n */\r\n\r\nimport { logger } from './wu-logger.js';\r\n\r\n/**\r\n * @typedef {Object} WuLoaderOptions\r\n * @property {number} [maxCacheSize=50] - Maximum cache entries\r\n * @property {number} [cacheTTL=1800000] - Cache TTL in ms (default 30min)\r\n */\r\n\r\n/**\r\n * @typedef {Object} WuLoaderStats\r\n * @property {number} cached - Number of cached entries\r\n * @property {number} loading - Number of in-flight loads\r\n * @property {number} maxCacheSize - Max cache size setting\r\n * @property {number} cacheTTL - Cache TTL setting\r\n * @property {string[]} cacheKeys - Cached URL keys\r\n */\r\n\r\nexport class WuLoader {\r\n /**\r\n * @param {Object} options\r\n * @param {number} [options.maxCacheSize=50] - Maximum number of entries in the cache\r\n * @param {number} [options.cacheTTL=1800000] - Time-to-live for cache entries in ms (default 30 minutes)\r\n */\r\n constructor(options = {}) {\r\n this.maxCacheSize = options.maxCacheSize ?? 50;\r\n this.cacheTTL = options.cacheTTL ?? 1800000;\r\n this.cache = new Map();\r\n this.loadingPromises = new Map();\r\n\r\n logger.debug('[WuLoader] Dynamic loader initialized');\r\n }\r\n\r\n /**\r\n * Read from cache with TTL validation and LRU access tracking.\r\n * Returns undefined if the entry does not exist or has expired.\r\n * @param {string} key\r\n * @returns {string|undefined}\r\n */\r\n _cacheGet(key) {\r\n if (!this.cache.has(key)) {\r\n return undefined;\r\n }\r\n\r\n const entry = this.cache.get(key);\r\n const now = Date.now();\r\n\r\n if (now - entry.timestamp > this.cacheTTL) {\r\n this.cache.delete(key);\r\n logger.debug(`[WuLoader] Cache expired for: ${key}`);\r\n return undefined;\r\n }\r\n\r\n // Promote: delete and re-insert so iteration order reflects recency.\r\n // Map iteration order in JS follows insertion order, so the oldest\r\n // inserted entry is always first -- exactly what we need for LRU eviction.\r\n this.cache.delete(key);\r\n entry.lastAccess = now;\r\n this.cache.set(key, entry);\r\n\r\n return entry.code;\r\n }\r\n\r\n /**\r\n * Write to cache. Evicts stale and LRU entries before inserting.\r\n * @param {string} key\r\n * @param {string} code\r\n */\r\n _cacheSet(key, code) {\r\n // If the key already exists, remove it first so re-insertion\r\n // moves it to the end (most-recently-used position).\r\n if (this.cache.has(key)) {\r\n this.cache.delete(key);\r\n }\r\n\r\n this._evictIfNeeded();\r\n\r\n const now = Date.now();\r\n this.cache.set(key, {\r\n code,\r\n timestamp: now,\r\n lastAccess: now\r\n });\r\n }\r\n\r\n /**\r\n * Evict entries until cache is below maxCacheSize.\r\n *\r\n * Two-pass strategy:\r\n * 1. Remove all expired entries (TTL exceeded).\r\n * 2. If still at capacity, remove the least recently accessed entry.\r\n * Because Map preserves insertion order and _cacheGet promotes on\r\n * access, the first key from the iterator is always the LRU entry.\r\n */\r\n _evictIfNeeded() {\r\n const now = Date.now();\r\n\r\n // Pass 1: purge expired entries\r\n for (const [key, entry] of this.cache) {\r\n if (now - entry.timestamp > this.cacheTTL) {\r\n this.cache.delete(key);\r\n logger.debug(`[WuLoader] Evicted expired entry: ${key}`);\r\n }\r\n }\r\n\r\n // Pass 2: evict LRU entries until we are under the limit\r\n while (this.cache.size >= this.maxCacheSize) {\r\n // Map.keys().next() gives us the oldest-inserted key (LRU)\r\n const oldestKey = this.cache.keys().next().value;\r\n this.cache.delete(oldestKey);\r\n logger.debug(`[WuLoader] Evicted LRU entry: ${oldestKey}`);\r\n }\r\n }\r\n\r\n /**\r\n * Cargar aplicacion completa\r\n * @param {string} appUrl - URL base de la aplicacion\r\n * @param {Object} manifest - Manifest de la aplicacion\r\n * @returns {string} Codigo JavaScript de la aplicacion\r\n */\r\n async loadApp(appUrl, manifest) {\r\n // Sentinel gate: block code loading for unverified clients\r\n await this._ensureSentinelVerified();\r\n\r\n const entryFile = manifest?.entry || 'index.js';\r\n const fullUrl = `${appUrl}/${entryFile}`;\r\n\r\n logger.debug(`[WuLoader] Loading app from: ${fullUrl}`);\r\n\r\n try {\r\n // Check cache with TTL and LRU tracking\r\n const cached = this._cacheGet(fullUrl);\r\n if (cached !== undefined) {\r\n logger.debug(`[WuLoader] Cache hit for: ${fullUrl}`);\r\n return cached;\r\n }\r\n\r\n // Check if already loading\r\n if (this.loadingPromises.has(fullUrl)) {\r\n logger.debug(`[WuLoader] Loading in progress for: ${fullUrl}`);\r\n return await this.loadingPromises.get(fullUrl);\r\n }\r\n\r\n // Create loading promise\r\n const loadingPromise = this.fetchCode(fullUrl);\r\n this.loadingPromises.set(fullUrl, loadingPromise);\r\n\r\n const code = await loadingPromise;\r\n\r\n // Clean up loading promise and cache result\r\n this.loadingPromises.delete(fullUrl);\r\n this._cacheSet(fullUrl, code);\r\n\r\n logger.debug(`[WuLoader] App loaded successfully: ${fullUrl}`);\r\n return code;\r\n\r\n } catch (error) {\r\n this.loadingPromises.delete(fullUrl);\r\n console.error(`[WuLoader] Failed to load app: ${fullUrl}`, error);\r\n throw new Error(`Failed to load app from ${fullUrl}: ${error.message}`);\r\n }\r\n }\r\n\r\n /**\r\n * Cargar componente especifico\r\n * @param {string} appUrl - URL base de la aplicacion\r\n * @param {string} componentPath - Ruta del componente\r\n * @returns {Function} Funcion del componente\r\n */\r\n async loadComponent(appUrl, componentPath) {\r\n // Sentinel gate\r\n await this._ensureSentinelVerified();\r\n\r\n // Normalizar ruta del componente\r\n let normalizedPath = componentPath;\r\n if (normalizedPath.startsWith('./')) {\r\n normalizedPath = normalizedPath.substring(2);\r\n }\r\n if (!normalizedPath.endsWith('.js') && !normalizedPath.endsWith('.jsx')) {\r\n normalizedPath += '.js';\r\n }\r\n\r\n const fullUrl = `${appUrl}/${normalizedPath}`;\r\n\r\n logger.debug(`[WuLoader] Loading component from: ${fullUrl}`);\r\n\r\n try {\r\n // Cargar codigo del componente\r\n const code = await this.loadCode(fullUrl);\r\n\r\n // Crear funcion que retorna el componente\r\n const componentFunction = new Function('require', 'module', 'exports', `\r\n ${code}\r\n return typeof module.exports === 'function' ? module.exports :\r\n typeof module.exports === 'object' && module.exports.default ? module.exports.default :\r\n exports.default || exports;\r\n `);\r\n\r\n // Ejecutar y obtener el componente\r\n const fakeModule = { exports: {} };\r\n const fakeRequire = (name) => {\r\n logger.warn(`[WuLoader] Component ${componentPath} requires ${name} - not supported yet`);\r\n return {};\r\n };\r\n\r\n const component = componentFunction(fakeRequire, fakeModule, fakeModule.exports);\r\n\r\n logger.debug(`[WuLoader] Component loaded: ${componentPath}`);\r\n return component;\r\n\r\n } catch (error) {\r\n console.error(`[WuLoader] Failed to load component: ${componentPath}`, error);\r\n throw new Error(`Failed to load component ${componentPath}: ${error.message}`);\r\n }\r\n }\r\n\r\n /**\r\n * Cargar codigo con cache\r\n * @param {string} url - URL del archivo\r\n * @returns {string} Codigo JavaScript\r\n */\r\n async loadCode(url) {\r\n // Check cache with TTL and LRU tracking\r\n const cached = this._cacheGet(url);\r\n if (cached !== undefined) {\r\n return cached;\r\n }\r\n\r\n // Check if already loading\r\n if (this.loadingPromises.has(url)) {\r\n return await this.loadingPromises.get(url);\r\n }\r\n\r\n // Create loading promise\r\n const loadingPromise = this.fetchCode(url);\r\n this.loadingPromises.set(url, loadingPromise);\r\n\r\n try {\r\n const code = await loadingPromise;\r\n this.loadingPromises.delete(url);\r\n this._cacheSet(url, code);\r\n return code;\r\n } catch (error) {\r\n this.loadingPromises.delete(url);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Realizar fetch del codigo\r\n * @param {string} url - URL del archivo\r\n * @returns {string} Codigo JavaScript\r\n */\r\n async fetchCode(url, timeoutMs = 30000) {\r\n // 30s default: long enough for slow dev servers + large bundles, short\r\n // enough that a hung app does not block mount forever. Pre-v2.0 there was\r\n // no timeout — a non-responsive remote could stall the framework.\r\n const response = await fetch(url, {\r\n cache: 'no-cache',\r\n headers: {\r\n 'Accept': 'application/javascript, text/javascript, */*'\r\n },\r\n signal: AbortSignal.timeout(timeoutMs)\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\r\n }\r\n\r\n const code = await response.text();\r\n\r\n if (!code.trim()) {\r\n throw new Error('Empty response');\r\n }\r\n\r\n return code;\r\n }\r\n\r\n /**\r\n * Precargar aplicaciones\r\n * @param {Array} appConfigs - Configuraciones de aplicaciones\r\n */\r\n async preload(appConfigs) {\r\n logger.debug(`[WuLoader] Preloading ${appConfigs.length} apps...`);\r\n\r\n const preloadPromises = appConfigs.map(async (config) => {\r\n try {\r\n await this.loadApp(config.url, config.manifest);\r\n logger.debug(`[WuLoader] Preloaded: ${config.name}`);\r\n } catch (error) {\r\n logger.warn(`[WuLoader] Failed to preload ${config.name}:`, error.message);\r\n }\r\n });\r\n\r\n await Promise.allSettled(preloadPromises);\r\n logger.debug(`[WuLoader] Preload completed`);\r\n }\r\n\r\n /**\r\n * Verificar si una URL esta disponible\r\n * @param {string} url - URL a verificar\r\n * @returns {boolean} True si esta disponible\r\n */\r\n async isAvailable(url) {\r\n try {\r\n const response = await fetch(url, {\r\n method: 'HEAD',\r\n signal: AbortSignal.timeout(5000) // Don't hang on dead hosts\r\n });\r\n return response.ok;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Resolver dependencias de imports\r\n * @param {Array} imports - Lista de imports del manifest\r\n * @param {Map} availableApps - Apps disponibles\r\n */\r\n async resolveDependencies(imports, availableApps) {\r\n const resolved = new Map();\r\n\r\n for (const importPath of imports || []) {\r\n const [appName, componentName] = importPath.split('.');\r\n\r\n if (!appName || !componentName) {\r\n logger.warn(`[WuLoader] Invalid import format: ${importPath}`);\r\n continue;\r\n }\r\n\r\n const app = availableApps.get(appName);\r\n if (!app) {\r\n logger.warn(`[WuLoader] Import app not found: ${appName}`);\r\n continue;\r\n }\r\n\r\n const manifest = app.manifest;\r\n const exportPath = manifest?.wu?.exports?.[componentName];\r\n\r\n if (!exportPath) {\r\n logger.warn(`[WuLoader] Export not found: ${importPath}`);\r\n continue;\r\n }\r\n\r\n try {\r\n const component = await this.loadComponent(app.url, exportPath);\r\n resolved.set(importPath, component);\r\n logger.debug(`[WuLoader] Resolved dependency: ${importPath}`);\r\n } catch (error) {\r\n console.error(`[WuLoader] Failed to resolve: ${importPath}`, error);\r\n }\r\n }\r\n\r\n return resolved;\r\n }\r\n\r\n /**\r\n * Limpiar cache\r\n * @param {string} pattern - Patron opcional para limpiar URLs especificas\r\n */\r\n clearCache(pattern) {\r\n if (pattern) {\r\n let regex;\r\n try {\r\n regex = new RegExp(pattern);\r\n } catch (err) {\r\n logger.warn(`[WuLoader] Invalid clearCache pattern: ${pattern} (${err.message})`);\r\n return;\r\n }\r\n for (const [url] of this.cache) {\r\n if (regex.test(url)) {\r\n this.cache.delete(url);\r\n logger.debug(`[WuLoader] Cleared cache for: ${url}`);\r\n }\r\n }\r\n } else {\r\n this.cache.clear();\r\n logger.debug(`[WuLoader] Cache cleared completely`);\r\n }\r\n }\r\n\r\n /**\r\n * Obtener estadisticas del loader\r\n */\r\n getStats() {\r\n return {\r\n cached: this.cache.size,\r\n maxCacheSize: this.maxCacheSize,\r\n cacheTTL: this.cacheTTL,\r\n loading: this.loadingPromises.size,\r\n cacheKeys: Array.from(this.cache.keys())\r\n };\r\n }\r\n\r\n // ── Sentinel Gate ─────────────────────────────────────────────────\r\n // Blocks code loading until the client is verified as human.\r\n // Scrapers that execute JS but don't pass proof-of-work get nothing.\r\n\r\n async _ensureSentinelVerified() {\r\n // Skip in development / localhost (sentinel is for production)\r\n if (typeof window === 'undefined') return;\r\n const host = window.location?.hostname || '';\r\n if (host === 'localhost' || host === '127.0.0.1' || host === '0.0.0.0') return;\r\n\r\n // If sentinel is not loaded, allow (backwards compat — site doesn't use sentinel)\r\n if (!window.__wu_sentinel) return;\r\n\r\n // Already verified? Proceed.\r\n if (window.__wu_sentinel.isVerified()) return;\r\n\r\n // Wait for sentinel verification (max 10 seconds)\r\n await new Promise((resolve, reject) => {\r\n // Check if verified during wait\r\n if (window.__wu_sentinel.isVerified()) {\r\n resolve();\r\n return;\r\n }\r\n\r\n const timeout = setTimeout(() => {\r\n cleanup();\r\n reject(new Error('[WuLoader] Sentinel verification timeout — content blocked'));\r\n }, 10000);\r\n\r\n const onVerified = () => {\r\n cleanup();\r\n resolve();\r\n };\r\n\r\n function cleanup() {\r\n clearTimeout(timeout);\r\n window.removeEventListener('wu:sentinel:verified', onVerified);\r\n }\r\n\r\n window.addEventListener('wu:sentinel:verified', onVerified);\r\n\r\n // Check periodically in case event was missed\r\n const check = setInterval(() => {\r\n if (window.__wu_sentinel.isVerified()) {\r\n clearInterval(check);\r\n cleanup();\r\n resolve();\r\n }\r\n }, 100);\r\n\r\n // Clean up interval on timeout too\r\n const origCleanup = cleanup;\r\n cleanup = function() {\r\n clearInterval(check);\r\n origCleanup();\r\n };\r\n });\r\n }\r\n}\r\n","/**\r\n * 🎨 WU-STYLE-BRIDGE: SHADOW DOM STYLE SHARING SYSTEM\r\n *\r\n * Comparte automáticamente estilos de node_modules entre padre e hijos Shadow DOM\r\n * Soluciona el problema de aislamiento CSS en microfrontends\r\n *\r\n * MODOS DE INYECCIÓN DE ESTILOS:\r\n * ================================\r\n *\r\n * 1. \"shared\" (default):\r\n * - Inyecta TODOS los estilos del documento padre en el Shadow DOM\r\n * - Incluye: librerías (Element Plus, Vue Flow), estilos globales, etc.\r\n * - Ideal para: Apps que necesitan compartir un design system común\r\n * - Riesgo de colisiones: ALTO\r\n *\r\n * 2. \"isolated\":\r\n * - NO inyecta estilos externos\r\n * - Usa el encapsulamiento NATIVO del Shadow DOM\r\n * - La app debe incluir sus propios estilos (CSS-in-JS, scoped styles, etc.)\r\n * - Ideal para: Apps con estilos completamente independientes\r\n * - Riesgo de colisiones: NINGUNO\r\n *\r\n * 3. \"fully-isolated\":\r\n * - Inyecta SOLO los estilos propios de la micro-app específica\r\n * - Detecta estilos por patrón: packages/appName/src/\r\n * - Usa MutationObserver para HMR de Vite\r\n * - Ideal para: Apps que necesitan sus estilos pero no los globales\r\n * - Riesgo de colisiones: NINGUNO\r\n */\r\n\r\nimport { logger } from './wu-logger.js';\r\n\r\nexport class WuStyleBridge {\r\n constructor() {\r\n this.styleObserver = null;\r\n this.fullyIsolatedApps = new Map(); // Mapa de appName -> appUrl para apps con fully-isolated\r\n this.config = {\r\n // Librerías que se deben compartir automáticamente\r\n autoShareLibraries: [\r\n 'element-plus',\r\n 'vue-flow',\r\n '@vue-flow',\r\n 'vueuse',\r\n '@vueuse',\r\n 'normalize.css',\r\n 'reset.css'\r\n ],\r\n // Patrones de URLs a compartir\r\n sharePatterns: [\r\n /\\/node_modules\\//,\r\n /\\/@vite\\/client/,\r\n /\\/dist\\/index\\.css$/,\r\n /\\/dist\\/style\\.css$/\r\n ],\r\n // Modo de compartición\r\n mode: 'auto', // 'auto' | 'manual' | 'all'\r\n // Caché de estilos\r\n cacheEnabled: true\r\n };\r\n\r\n logger.debug('[WuStyleBridge] 🎨 Style sharing system initialized');\r\n }\r\n\r\n /**\r\n * 🛡️ REGISTRAR APP FULLY-ISOLATED: Registra una app con fully-isolated para filtrar sus estilos\r\n * @param {string} appName - Nombre de la app\r\n * @param {string} appUrl - URL base de la app\r\n */\r\n registerFullyIsolatedApp(appName, appUrl) {\r\n this.fullyIsolatedApps.set(appName, appUrl);\r\n logger.debug(`[WuStyleBridge] 🛡️ Registered fully-isolated app: ${appName} (${appUrl})`);\r\n }\r\n\r\n /**\r\n * 🛡️ DESREGISTRAR APP FULLY-ISOLATED: llamar al hacer unmount\r\n * @param {string} appName\r\n */\r\n unregisterFullyIsolatedApp(appName) {\r\n if (this.fullyIsolatedApps.delete(appName)) {\r\n logger.debug(`[WuStyleBridge] 🛡️ Unregistered fully-isolated app: ${appName}`);\r\n }\r\n }\r\n\r\n /**\r\n * 🔍 VERIFICAR SI ESTILO ES DE APP FULLY-ISOLATED: Verifica si un estilo proviene de una app con fully-isolated\r\n * @param {string|Object|HTMLElement} styleUrlOrElement - URL del estilo, objeto de estilo, o elemento DOM\r\n * @returns {boolean}\r\n */\r\n isStyleFromFullyIsolatedApp(styleUrlOrElement) {\r\n let url = '';\r\n let elementToCheck = null;\r\n\r\n // Si es un string, usar directamente\r\n if (typeof styleUrlOrElement === 'string') {\r\n url = styleUrlOrElement;\r\n }\r\n // Si es un elemento DOM\r\n else if (styleUrlOrElement && typeof styleUrlOrElement.getAttribute === 'function') {\r\n elementToCheck = styleUrlOrElement;\r\n // Preferred: framework-owned attribute (works for ANY bundler)\r\n // Fallback: vite dev id or element href\r\n url = styleUrlOrElement.getAttribute('data-vite-dev-id')\r\n || styleUrlOrElement.href\r\n || '';\r\n }\r\n // Si es un objeto wrapper\r\n else if (styleUrlOrElement) {\r\n if (styleUrlOrElement.href) {\r\n url = styleUrlOrElement.href;\r\n } else if (styleUrlOrElement.viteId) {\r\n url = styleUrlOrElement.viteId;\r\n } else if (styleUrlOrElement.element) {\r\n elementToCheck = styleUrlOrElement.element;\r\n if (typeof styleUrlOrElement.element.getAttribute === 'function') {\r\n url = styleUrlOrElement.element.getAttribute('data-vite-dev-id') || styleUrlOrElement.element.href || '';\r\n } else if (styleUrlOrElement.element.href) {\r\n url = styleUrlOrElement.element.href;\r\n }\r\n }\r\n }\r\n\r\n // First-class check: `data-wu-app=\"<name>\"` is the framework convention\r\n // for tagging styles as belonging to a specific app. Works across any\r\n // bundler — Vite, webpack, esbuild, plain HTML. See WuCore.tagStyleAsApp().\r\n if (elementToCheck) {\r\n const wuApp = elementToCheck.getAttribute('data-wu-app');\r\n if (wuApp && this.fullyIsolatedApps.has(wuApp)) {\r\n return true;\r\n }\r\n }\r\n\r\n if (!url || url.trim() === '') return false;\r\n\r\n // Normalizar la URL para comparación (convertir backslashes a forward slashes)\r\n const normalizedUrl = url.replace(/\\\\/g, '/').toLowerCase();\r\n\r\n // Verificar si la URL pertenece a alguna app con fully-isolated\r\n for (const [appName, appUrl] of this.fullyIsolatedApps.entries()) {\r\n const normalizedAppUrl = appUrl.replace(/\\\\/g, '/').toLowerCase();\r\n const normalizedAppName = appName.toLowerCase();\r\n \r\n // Verificar si la URL contiene la URL base de la app (ej: http://localhost:4001)\r\n if (normalizedAppUrl && normalizedUrl.includes(normalizedAppUrl)) {\r\n return true;\r\n }\r\n \r\n // Verificar si la URL contiene rutas del app en el sistema de archivos\r\n // Ej: C:/Users/.../header/src/... o /header/src/...\r\n // Patrón: cualquier ruta que contenga /header/ o \\header\\\r\n const appPathPattern = new RegExp(`[/\\\\\\\\]${normalizedAppName}[/\\\\\\\\]`, 'i');\r\n if (appPathPattern.test(normalizedUrl)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * 🔍 DETECTAR ESTILOS: Escanea todos los estilos del documento\r\n * @returns {Array} Lista de estilos detectados (filtrados para excluir apps con fully-isolated)\r\n */\r\n detectDocumentStyles() {\r\n const styles = [];\r\n\r\n // 1. Detectar TODOS los <link> tags de CSS\r\n const linkTags = document.querySelectorAll('link[rel=\"stylesheet\"]');\r\n linkTags.forEach((link) => {\r\n // Filtrar estilos de apps con fully-isolated\r\n if (this.isStyleFromFullyIsolatedApp(link)) {\r\n return;\r\n }\r\n\r\n styles.push({\r\n type: 'link',\r\n href: link.href,\r\n element: link,\r\n library: this.extractLibraryName(link.href)\r\n });\r\n });\r\n\r\n // 2. Detectar TODOS los <style> tags (incluyendo Vue scoped styles)\r\n const styleTags = document.querySelectorAll('style');\r\n styleTags.forEach((style, index) => {\r\n // Excluir solo estilos ya compartidos por wu-framework\r\n if (style.getAttribute('data-wu-shared') === 'true') {\r\n return;\r\n }\r\n\r\n const viteId = style.getAttribute('data-vite-dev-id');\r\n const content = style.textContent;\r\n\r\n // Filtrar estilos de apps con fully-isolated (después de obtener viteId para mejor detección)\r\n if (this.isStyleFromFullyIsolatedApp(style) || (viteId && this.isStyleFromFullyIsolatedApp(viteId))) {\r\n logger.debug(`[WuStyleBridge] 🛡️ Filtered out style from fully-isolated app: ${viteId || 'unknown'}`);\r\n return;\r\n }\r\n\r\n // Incluir todos los estilos con contenido\r\n if (content && content.trim().length > 0) {\r\n styles.push({\r\n type: 'inline',\r\n content,\r\n element: style,\r\n viteId,\r\n library: this.extractLibraryName(viteId || ''),\r\n index\r\n });\r\n }\r\n });\r\n\r\n // 3. Detectar Constructable Stylesheets (si están disponibles)\r\n if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0) {\r\n document.adoptedStyleSheets.forEach((sheet, index) => {\r\n styles.push({\r\n type: 'adoptedStyleSheet',\r\n sheet,\r\n index\r\n });\r\n });\r\n }\r\n\r\n logger.debug(`[WuStyleBridge] 🔍 Detected ${styles.length} shareable styles`);\r\n return styles;\r\n }\r\n\r\n /**\r\n * 🎯 VERIFICAR SI SE DEBE COMPARTIR: Filtra estilos según configuración\r\n * @param {string} urlOrId - URL o ID del estilo\r\n * @returns {boolean}\r\n */\r\n shouldShareStyle(urlOrId) {\r\n if (!urlOrId) return false;\r\n\r\n // Modo 'all' - compartir todo\r\n if (this.config.mode === 'all') return true;\r\n\r\n // Verificar patrones configurados\r\n for (const pattern of this.config.sharePatterns) {\r\n if (pattern.test(urlOrId)) return true;\r\n }\r\n\r\n // Verificar librerías específicas\r\n for (const lib of this.config.autoShareLibraries) {\r\n if (urlOrId.includes(lib)) return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * 📦 EXTRAER NOMBRE DE LIBRERÍA: Obtiene el nombre de la librería desde la URL\r\n * @param {string} url - URL del estilo\r\n * @returns {string|null}\r\n */\r\n extractLibraryName(url) {\r\n if (!url) return null;\r\n\r\n // Extraer de node_modules\r\n const nodeModulesMatch = url.match(/\\/node_modules\\/(@?[^/]+\\/[^/]+|@?[^/]+)/);\r\n if (nodeModulesMatch) return nodeModulesMatch[1];\r\n\r\n // Extraer de vite dev id\r\n const viteMatch = url.match(/\\/node_modules\\/(.+?)\\/.*?\\.css/);\r\n if (viteMatch) return viteMatch[1];\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * 🌉 INYECTAR ESTILOS EN SHADOW DOM: Clona estilos al Shadow DOM\r\n * @param {ShadowRoot} shadowRoot - Shadow DOM donde inyectar\r\n * @param {string} appName - Nombre de la app\r\n * @param {string} styleMode - Modo de estilos: 'shared', 'isolated', 'fully-isolated'\r\n * @returns {Promise<number>}\r\n */\r\n async injectStylesIntoShadow(shadowRoot, appName, styleMode) {\r\n if (!shadowRoot) {\r\n logger.warn('[WuStyleBridge] ⚠️ No shadow root provided');\r\n return 0;\r\n }\r\n\r\n // 🛡️ MODO FULLY-ISOLATED: No inyectar ningún estilo compartido\r\n // Los estilos propios se manejan en wu-sandbox.js con injectOwnStylesToShadow\r\n if (styleMode === 'fully-isolated') {\r\n logger.debug(`[WuStyleBridge] 🛡️ Style mode \"fully-isolated\" for ${appName}, skipping shared style injection`);\r\n return 0;\r\n }\r\n\r\n // 🔒 MODO ISOLATED: No inyectar estilos externos - usar encapsulamiento nativo de Shadow DOM\r\n // La app debe manejar sus propios estilos (CSS-in-JS, scoped styles, imports directos)\r\n if (styleMode === 'isolated') {\r\n logger.debug(`[WuStyleBridge] 🔒 Style mode \"isolated\" for ${appName}, using native Shadow DOM encapsulation (no external styles)`);\r\n return 0;\r\n }\r\n\r\n // 🌐 MODO SHARED (default): Inyectar todos los estilos compartidos del documento\r\n logger.debug(`[WuStyleBridge] 🌐 Style mode \"shared\" for ${appName}, injecting all shared styles...`);\r\n\r\n // Detectar estilos del documento\r\n const styles = this.detectDocumentStyles();\r\n let injectedCount = 0;\r\n\r\n // Inyectar cada estilo\r\n for (const style of styles) {\r\n try {\r\n switch (style.type) {\r\n case 'link':\r\n await this.injectLinkStyle(shadowRoot, style);\r\n injectedCount++;\r\n break;\r\n\r\n case 'inline':\r\n this.injectInlineStyle(shadowRoot, style);\r\n injectedCount++;\r\n break;\r\n\r\n case 'adoptedStyleSheet':\r\n this.injectAdoptedStyleSheet(shadowRoot, style);\r\n injectedCount++;\r\n break;\r\n }\r\n } catch (error) {\r\n logger.warn(`[WuStyleBridge] ⚠️ Failed to inject style:`, error);\r\n }\r\n }\r\n\r\n logger.debug(`[WuStyleBridge] ✅ Injected ${injectedCount} shared styles into ${appName}`);\r\n return injectedCount;\r\n }\r\n\r\n /**\r\n * 🔗 INYECTAR LINK STYLE: Clona <link> tag al Shadow DOM\r\n * @param {ShadowRoot} shadowRoot\r\n * @param {Object} style\r\n */\r\n async injectLinkStyle(shadowRoot, style) {\r\n // Verificar si ya existe\r\n const existing = shadowRoot.querySelector(`link[href=\"${style.href}\"]`);\r\n if (existing) {\r\n logger.debug(`[WuStyleBridge] ⏭️ Style already exists: ${style.library || style.href}`);\r\n return;\r\n }\r\n\r\n // Clonar link tag\r\n const link = document.createElement('link');\r\n link.rel = 'stylesheet';\r\n link.href = style.href;\r\n link.setAttribute('data-wu-shared', 'true');\r\n link.setAttribute('data-wu-library', style.library || 'unknown');\r\n\r\n // Insertar al principio del shadow root (antes de otros estilos)\r\n shadowRoot.insertBefore(link, shadowRoot.firstChild);\r\n\r\n logger.debug(`[WuStyleBridge] 🔗 Injected link: ${style.library || style.href}`);\r\n }\r\n\r\n /**\r\n * 📝 INYECTAR INLINE STYLE: Clona <style> tag al Shadow DOM\r\n * @param {ShadowRoot} shadowRoot\r\n * @param {Object} style\r\n */\r\n injectInlineStyle(shadowRoot, style) {\r\n // Verificar si ya existe\r\n const viteId = style.viteId;\r\n if (viteId) {\r\n const existing = shadowRoot.querySelector(`style[data-wu-vite-id=\"${viteId}\"]`);\r\n if (existing) {\r\n logger.debug(`[WuStyleBridge] ⏭️ Inline style already exists: ${viteId}`);\r\n return;\r\n }\r\n }\r\n\r\n // Crear nuevo style tag\r\n const styleTag = document.createElement('style');\r\n styleTag.textContent = style.content;\r\n styleTag.setAttribute('data-wu-shared', 'true');\r\n styleTag.setAttribute('data-wu-library', style.library || 'unknown');\r\n if (viteId) {\r\n styleTag.setAttribute('data-wu-vite-id', viteId);\r\n }\r\n\r\n // Insertar al principio del shadow root\r\n shadowRoot.insertBefore(styleTag, shadowRoot.firstChild);\r\n\r\n logger.debug(`[WuStyleBridge] 📝 Injected inline style: ${style.library || viteId}`);\r\n }\r\n\r\n /**\r\n * 📋 INYECTAR ADOPTED STYLESHEET: Comparte stylesheet constructable\r\n * @param {ShadowRoot} shadowRoot\r\n * @param {Object} style\r\n */\r\n injectAdoptedStyleSheet(shadowRoot, style) {\r\n try {\r\n // Agregar stylesheet al array de adopted stylesheets\r\n if (!shadowRoot.adoptedStyleSheets) {\r\n shadowRoot.adoptedStyleSheets = [];\r\n }\r\n\r\n // Verificar si ya existe\r\n if (shadowRoot.adoptedStyleSheets.includes(style.sheet)) {\r\n logger.debug(`[WuStyleBridge] ⏭️ Adopted stylesheet already exists`);\r\n return;\r\n }\r\n\r\n shadowRoot.adoptedStyleSheets = [\r\n ...shadowRoot.adoptedStyleSheets,\r\n style.sheet\r\n ];\r\n\r\n logger.debug(`[WuStyleBridge] 📋 Injected adopted stylesheet`);\r\n } catch (error) {\r\n logger.warn(`[WuStyleBridge] ⚠️ Failed to inject adopted stylesheet:`, error);\r\n }\r\n }\r\n\r\n /**\r\n * 🔄 OBSERVAR CAMBIOS: Monitorea nuevos estilos en el documento\r\n *\r\n * Each call registers an independent callback. All callbacks share a single\r\n * MutationObserver on document.head — this avoids the previous bug where the\r\n * second app to call observeStyleChanges() would silently disconnect the\r\n * first, leaving the earlier app without HMR style updates.\r\n *\r\n * @param {Function} callback - Callback cuando se detectan cambios\r\n * @returns {Function} Unsubscribe function — call it to stop receiving updates\r\n */\r\n observeStyleChanges(callback) {\r\n if (typeof callback !== 'function') return () => {};\r\n\r\n if (!this._styleCallbacks) {\r\n this._styleCallbacks = new Set();\r\n }\r\n this._styleCallbacks.add(callback);\r\n\r\n // Lazy-init the shared observer the first time someone subscribes\r\n if (!this.styleObserver) {\r\n this.styleObserver = new MutationObserver((mutations) => {\r\n let hasStyleChanges = false;\r\n for (const mutation of mutations) {\r\n if (mutation.type === 'childList') {\r\n const addedNodes = Array.from(mutation.addedNodes);\r\n const hasNewStyles = addedNodes.some(node =>\r\n node.tagName === 'LINK' || node.tagName === 'STYLE'\r\n );\r\n if (hasNewStyles) { hasStyleChanges = true; break; }\r\n }\r\n }\r\n if (hasStyleChanges) {\r\n logger.debug('[WuStyleBridge] 🔄 Style changes detected');\r\n for (const cb of this._styleCallbacks) {\r\n try { cb(); } catch (err) {\r\n logger.warn('[WuStyleBridge] callback threw:', err);\r\n }\r\n }\r\n }\r\n });\r\n this.styleObserver.observe(document.head, { childList: true, subtree: true });\r\n logger.debug('[WuStyleBridge] 👀 Observing style changes (shared observer)');\r\n }\r\n\r\n // Return unsubscribe — caller (e.g. wu-sandbox cleanup) stores this\r\n return () => {\r\n if (!this._styleCallbacks) return;\r\n this._styleCallbacks.delete(callback);\r\n // When no callbacks remain, tear the observer down so we don't keep\r\n // hooking document.head for nothing.\r\n if (this._styleCallbacks.size === 0 && this.styleObserver) {\r\n this.styleObserver.disconnect();\r\n this.styleObserver = null;\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * ⚙️ CONFIGURAR: Actualiza la configuración\r\n * @param {Object} config - Nueva configuración\r\n */\r\n configure(config) {\r\n this.config = {\r\n ...this.config,\r\n ...config\r\n };\r\n\r\n logger.debug('[WuStyleBridge] ⚙️ Configuration updated:', this.config);\r\n }\r\n\r\n /**\r\n * 🧹 LIMPIAR: Detiene la observación\r\n */\r\n cleanup() {\r\n if (this.styleObserver) {\r\n this.styleObserver.disconnect();\r\n this.styleObserver = null;\r\n }\r\n\r\n logger.debug('[WuStyleBridge] 🧹 StyleBridge cleaned up');\r\n }\r\n\r\n /**\r\n * 📊 OBTENER ESTADÍSTICAS: Información sobre estilos compartidos\r\n * @returns {Object}\r\n */\r\n getStats() {\r\n const styles = this.detectDocumentStyles();\r\n\r\n return {\r\n totalStyles: styles.length,\r\n linkStyles: styles.filter(s => s.type === 'link').length,\r\n inlineStyles: styles.filter(s => s.type === 'inline').length,\r\n adoptedStyleSheets: styles.filter(s => s.type === 'adoptedStyleSheet').length,\r\n libraries: [...new Set(styles.map(s => s.library).filter(Boolean))],\r\n config: this.config\r\n };\r\n }\r\n}\r\n","/**\r\n * WU-PROXY-SANDBOX: Hardened JavaScript Isolation\r\n *\r\n * ES6 Proxy-based sandbox with side-effect tracking:\r\n * - Timer hijacking (setTimeout, setInterval, requestAnimationFrame)\r\n * - Event listener tracking (window + document addEventListener)\r\n * - DOM scoping (querySelector/querySelectorAll → shadow root)\r\n * - Storage scoping (localStorage/sessionStorage → prefixed keys)\r\n *\r\n * All tracked side effects are automatically cleaned up on deactivate().\r\n */\r\n\r\nimport { logger } from './wu-logger.js';\r\n\r\nexport class WuProxySandbox {\r\n constructor(appName, options = {}) {\r\n this.appName = appName;\r\n this.options = options;\r\n this.proxy = null;\r\n this.fakeWindow = Object.create(null);\r\n this.active = false;\r\n this.modifiedKeys = new Set();\r\n\r\n // --- Side-effect tracking ---\r\n this._timers = new Set();\r\n this._intervals = new Set();\r\n this._rafs = new Set();\r\n this._eventListeners = []; // [{target, event, handler, options}]\r\n\r\n // --- DOM & Storage scoping ---\r\n this._container = null;\r\n this._shadowRoot = null;\r\n this._scopedDocument = null;\r\n this._scopedLocalStorage = null;\r\n this._scopedSessionStorage = null;\r\n\r\n // --- Window patching state ---\r\n this._patched = false;\r\n this._originals = null;\r\n }\r\n\r\n /**\r\n * Set the DOM scope for this sandbox.\r\n * Must be called before activate() for DOM scoping to work.\r\n * @param {HTMLElement} container - App container element\r\n * @param {ShadowRoot} shadowRoot - Shadow root containing the container\r\n */\r\n setContainer(container, shadowRoot) {\r\n this._container = container;\r\n this._shadowRoot = shadowRoot;\r\n }\r\n\r\n /**\r\n * Activate the sandbox. Creates the Proxy and starts tracking.\r\n * @returns {Proxy} The sandboxed window proxy\r\n */\r\n activate() {\r\n if (this.active) return this.proxy;\r\n\r\n const self = this;\r\n\r\n this.proxy = new Proxy(window, {\r\n get(target, prop) {\r\n // 1. App's own isolated globals\r\n if (prop in self.fakeWindow) {\r\n return self.fakeWindow[prop];\r\n }\r\n\r\n // 2. Intercepted APIs\r\n const intercepted = self._intercept(prop, target);\r\n if (intercepted !== undefined) {\r\n return intercepted;\r\n }\r\n\r\n // 3. Real window value with correct binding\r\n const value = target[prop];\r\n if (typeof value === 'function' && !self._isConstructor(value)) {\r\n return value.bind(target);\r\n }\r\n return value;\r\n },\r\n\r\n set(target, prop, value) {\r\n self.fakeWindow[prop] = value;\r\n self.modifiedKeys.add(prop);\r\n return true;\r\n },\r\n\r\n has(target, prop) {\r\n return prop in self.fakeWindow || prop in target;\r\n },\r\n\r\n deleteProperty(target, prop) {\r\n if (prop in self.fakeWindow) {\r\n delete self.fakeWindow[prop];\r\n self.modifiedKeys.delete(prop);\r\n return true;\r\n }\r\n return false;\r\n }\r\n });\r\n\r\n this.active = true;\r\n logger.wuDebug(`[ProxySandbox] Activated for ${this.appName}`);\r\n return this.proxy;\r\n }\r\n\r\n /**\r\n * Deactivate the sandbox. Cleans up ALL tracked side effects.\r\n */\r\n deactivate() {\r\n if (!this.active) return;\r\n\r\n // Unpatch window if patched\r\n this.unpatchWindow();\r\n\r\n // --- Clean timers ---\r\n for (const id of this._timers) {\r\n try { clearTimeout(id); } catch {}\r\n }\r\n for (const id of this._intervals) {\r\n try { clearInterval(id); } catch {}\r\n }\r\n for (const id of this._rafs) {\r\n try { cancelAnimationFrame(id); } catch {}\r\n }\r\n\r\n const timerCount = this._timers.size + this._intervals.size + this._rafs.size;\r\n this._timers.clear();\r\n this._intervals.clear();\r\n this._rafs.clear();\r\n\r\n // --- Clean event listeners ---\r\n const listenerCount = this._eventListeners.length;\r\n for (const { target, event, handler, options } of this._eventListeners) {\r\n try { target.removeEventListener(event, handler, options); } catch {}\r\n }\r\n this._eventListeners = [];\r\n\r\n // --- Clean namespace ---\r\n this.fakeWindow = Object.create(null);\r\n this.modifiedKeys.clear();\r\n this._scopedDocument = null;\r\n this._scopedLocalStorage = null;\r\n this._scopedSessionStorage = null;\r\n this.proxy = null;\r\n this.active = false;\r\n\r\n if (timerCount > 0 || listenerCount > 0) {\r\n logger.wuDebug(\r\n `[ProxySandbox] ${this.appName} cleanup: ${timerCount} timers, ${listenerCount} listeners`\r\n );\r\n }\r\n logger.wuDebug(`[ProxySandbox] Deactivated for ${this.appName}`);\r\n }\r\n\r\n // ================================================================\r\n // WINDOW PATCHING - patches real window APIs during module loading\r\n // ================================================================\r\n\r\n /**\r\n * Patch real window APIs to track side effects from global code.\r\n * Call before loading app module, unpatch after.\r\n *\r\n * IMPORTANT: Uses closure over originals so patched functions remain\r\n * valid even after unpatchWindow() — prevents crashes when frameworks\r\n * (React 19, etc.) cache references to patched setTimeout during import.\r\n */\r\n patchWindow() {\r\n if (this._patched) return;\r\n\r\n const self = this;\r\n\r\n // Capture originals in a local closure that survives unpatch\r\n const originals = {\r\n setTimeout: window.setTimeout,\r\n clearTimeout: window.clearTimeout,\r\n setInterval: window.setInterval,\r\n clearInterval: window.clearInterval,\r\n requestAnimationFrame: window.requestAnimationFrame,\r\n cancelAnimationFrame: window.cancelAnimationFrame,\r\n addEventListener: window.addEventListener,\r\n removeEventListener: window.removeEventListener\r\n };\r\n\r\n // Store reference (used by unpatchWindow to restore)\r\n this._originals = originals;\r\n\r\n // Patch timers — closure captures `originals`, not `self._originals`\r\n window.setTimeout = function(fn, delay, ...args) {\r\n const id = originals.setTimeout.call(window, fn, delay, ...args);\r\n if (self._patched) self._timers.add(id);\r\n return id;\r\n };\r\n window.clearTimeout = function(id) {\r\n self._timers.delete(id);\r\n return originals.clearTimeout.call(window, id);\r\n };\r\n window.setInterval = function(fn, delay, ...args) {\r\n const id = originals.setInterval.call(window, fn, delay, ...args);\r\n if (self._patched) self._intervals.add(id);\r\n return id;\r\n };\r\n window.clearInterval = function(id) {\r\n self._intervals.delete(id);\r\n return originals.clearInterval.call(window, id);\r\n };\r\n window.requestAnimationFrame = function(fn) {\r\n const id = originals.requestAnimationFrame.call(window, fn);\r\n if (self._patched) self._rafs.add(id);\r\n return id;\r\n };\r\n window.cancelAnimationFrame = function(id) {\r\n self._rafs.delete(id);\r\n return originals.cancelAnimationFrame.call(window, id);\r\n };\r\n\r\n // Patch event listeners\r\n window.addEventListener = function(event, handler, options) {\r\n if (self._patched) self._eventListeners.push({ target: window, event, handler, options });\r\n return originals.addEventListener.call(window, event, handler, options);\r\n };\r\n window.removeEventListener = function(event, handler, options) {\r\n self._eventListeners = self._eventListeners.filter(\r\n l => !(l.target === window && l.event === event && l.handler === handler)\r\n );\r\n return originals.removeEventListener.call(window, event, handler, options);\r\n };\r\n\r\n this._patched = true;\r\n logger.wuDebug(`[ProxySandbox] Window patched for ${this.appName}`);\r\n }\r\n\r\n /**\r\n * Restore original window APIs.\r\n * Safe: patched functions still work via closure even after restore.\r\n */\r\n unpatchWindow() {\r\n if (!this._patched || !this._originals) return;\r\n\r\n window.setTimeout = this._originals.setTimeout;\r\n window.clearTimeout = this._originals.clearTimeout;\r\n window.setInterval = this._originals.setInterval;\r\n window.clearInterval = this._originals.clearInterval;\r\n window.requestAnimationFrame = this._originals.requestAnimationFrame;\r\n window.cancelAnimationFrame = this._originals.cancelAnimationFrame;\r\n window.addEventListener = this._originals.addEventListener;\r\n window.removeEventListener = this._originals.removeEventListener;\r\n\r\n // NOTE: Do NOT null _originals — patched closures may still reference\r\n // the sandbox instance (e.g. React scheduler caches setTimeout).\r\n // The closure uses `originals` (local const), not `this._originals`.\r\n this._patched = false;\r\n logger.wuDebug(`[ProxySandbox] Window unpatched for ${this.appName}`);\r\n }\r\n\r\n // ================================================================\r\n // PROXY INTERCEPTS - for code running through the proxy\r\n // ================================================================\r\n\r\n /**\r\n * Intercept property access on the proxy.\r\n * Returns wrapped API or undefined to fall through.\r\n */\r\n _intercept(prop, target) {\r\n const self = this;\r\n\r\n switch (prop) {\r\n // --- Timer hijacking ---\r\n case 'setTimeout':\r\n return function(fn, delay, ...args) {\r\n const id = target.setTimeout(fn, delay, ...args);\r\n self._timers.add(id);\r\n return id;\r\n };\r\n case 'clearTimeout':\r\n return function(id) {\r\n self._timers.delete(id);\r\n target.clearTimeout(id);\r\n };\r\n case 'setInterval':\r\n return function(fn, delay, ...args) {\r\n const id = target.setInterval(fn, delay, ...args);\r\n self._intervals.add(id);\r\n return id;\r\n };\r\n case 'clearInterval':\r\n return function(id) {\r\n self._intervals.delete(id);\r\n target.clearInterval(id);\r\n };\r\n case 'requestAnimationFrame':\r\n return function(fn) {\r\n const id = target.requestAnimationFrame(fn);\r\n self._rafs.add(id);\r\n return id;\r\n };\r\n case 'cancelAnimationFrame':\r\n return function(id) {\r\n self._rafs.delete(id);\r\n target.cancelAnimationFrame(id);\r\n };\r\n\r\n // --- Event listener tracking ---\r\n case 'addEventListener':\r\n return function(event, handler, options) {\r\n self._eventListeners.push({ target, event, handler, options });\r\n target.addEventListener(event, handler, options);\r\n };\r\n case 'removeEventListener':\r\n return function(event, handler, options) {\r\n self._eventListeners = self._eventListeners.filter(\r\n l => !(l.target === target && l.event === event && l.handler === handler)\r\n );\r\n target.removeEventListener(event, handler, options);\r\n };\r\n\r\n // --- DOM scoping ---\r\n case 'document':\r\n return this._getScopedDocument();\r\n\r\n // --- Storage scoping ---\r\n case 'localStorage':\r\n return this._getScopedStorage('local');\r\n case 'sessionStorage':\r\n return this._getScopedStorage('session');\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n // ================================================================\r\n // DOM SCOPING - querySelector searches inside shadow root\r\n // ================================================================\r\n\r\n _getScopedDocument() {\r\n if (this._scopedDocument) return this._scopedDocument;\r\n\r\n const root = this._shadowRoot || this._container;\r\n if (!root) return document; // No container set, pass through\r\n\r\n const self = this;\r\n\r\n this._scopedDocument = new Proxy(document, {\r\n get(target, prop) {\r\n switch (prop) {\r\n case 'querySelector':\r\n return (selector) => root.querySelector(selector);\r\n case 'querySelectorAll':\r\n return (selector) => root.querySelectorAll(selector);\r\n case 'getElementById':\r\n return (id) => root.querySelector(`#${CSS.escape(id)}`);\r\n case 'getElementsByClassName':\r\n return (className) => root.querySelectorAll(`.${CSS.escape(className)}`);\r\n case 'getElementsByTagName':\r\n return (tag) => root.querySelectorAll(tag);\r\n\r\n // Track document event listeners too\r\n case 'addEventListener':\r\n return function(event, handler, options) {\r\n self._eventListeners.push({ target, event, handler, options });\r\n target.addEventListener(event, handler, options);\r\n };\r\n case 'removeEventListener':\r\n return function(event, handler, options) {\r\n self._eventListeners = self._eventListeners.filter(\r\n l => !(l.target === target && l.event === event && l.handler === handler)\r\n );\r\n target.removeEventListener(event, handler, options);\r\n };\r\n\r\n // createElement, createTextNode, etc. - pass through\r\n default: {\r\n const value = target[prop];\r\n if (typeof value === 'function') {\r\n return value.bind(target);\r\n }\r\n return value;\r\n }\r\n }\r\n }\r\n });\r\n\r\n return this._scopedDocument;\r\n }\r\n\r\n // ================================================================\r\n // STORAGE SCOPING - localStorage/sessionStorage with app prefix\r\n // ================================================================\r\n\r\n _getScopedStorage(type) {\r\n const cacheKey = type === 'local' ? '_scopedLocalStorage' : '_scopedSessionStorage';\r\n if (this[cacheKey]) return this[cacheKey];\r\n\r\n const realStorage = type === 'local' ? window.localStorage : window.sessionStorage;\r\n if (!realStorage) return realStorage;\r\n\r\n const prefix = `wu_${this.appName}_`;\r\n\r\n this[cacheKey] = {\r\n getItem(key) {\r\n return realStorage.getItem(prefix + key);\r\n },\r\n setItem(key, value) {\r\n realStorage.setItem(prefix + key, String(value));\r\n },\r\n removeItem(key) {\r\n realStorage.removeItem(prefix + key);\r\n },\r\n clear() {\r\n // Only clear this app's keys\r\n const toRemove = [];\r\n for (let i = 0; i < realStorage.length; i++) {\r\n const k = realStorage.key(i);\r\n if (k && k.startsWith(prefix)) toRemove.push(k);\r\n }\r\n toRemove.forEach(k => realStorage.removeItem(k));\r\n },\r\n key(index) {\r\n let count = 0;\r\n for (let i = 0; i < realStorage.length; i++) {\r\n const k = realStorage.key(i);\r\n if (k && k.startsWith(prefix)) {\r\n if (count === index) return k.slice(prefix.length);\r\n count++;\r\n }\r\n }\r\n return null;\r\n },\r\n get length() {\r\n let count = 0;\r\n for (let i = 0; i < realStorage.length; i++) {\r\n if (realStorage.key(i)?.startsWith(prefix)) count++;\r\n }\r\n return count;\r\n }\r\n };\r\n\r\n return this[cacheKey];\r\n }\r\n\r\n // ================================================================\r\n // UTILITIES\r\n // ================================================================\r\n\r\n _isConstructor(fn) {\r\n try {\r\n return fn.prototype && fn.prototype.constructor === fn;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n getProxy() {\r\n return this.active ? this.proxy : null;\r\n }\r\n\r\n isActive() {\r\n return this.active;\r\n }\r\n\r\n getStats() {\r\n return {\r\n appName: this.appName,\r\n active: this.active,\r\n patched: this._patched,\r\n modifiedKeys: Array.from(this.modifiedKeys),\r\n isolatedPropsCount: Object.keys(this.fakeWindow).length,\r\n trackedTimers: this._timers.size,\r\n trackedIntervals: this._intervals.size,\r\n trackedRAFs: this._rafs.size,\r\n trackedEventListeners: this._eventListeners.length,\r\n hasContainer: !!this._container,\r\n hasShadowRoot: !!this._shadowRoot\r\n };\r\n }\r\n}\r\n","/**\r\n * 🛡️ WU-SANDBOX: ADVANCED ISOLATION SYSTEM\r\n * Shadow DOM + Proxy Sandbox + Script Execution + HTML Parsing\r\n * Combina lo mejor de video-code con Shadow DOM nativo\r\n */\r\n\r\nimport { WuStyleBridge } from './wu-style-bridge.js';\r\nimport { WuProxySandbox } from './wu-proxy-sandbox.js';\r\n// WuSnapshotSandbox was removed in v2.0 — browserslist excludes IE 11\r\n// and Proxy is available in every supported browser.\r\nimport { logger } from './wu-logger.js';\r\n\r\n/**\r\n * Normalize style mode aliases. v2.0 introduced clearer names:\r\n *\r\n * 'shared' (no alias — already clear)\r\n * 'isolated' ↔ 'none' (no external styles injected)\r\n * 'fully-isolated' ↔ 'own-only' (inject only the app's own styles)\r\n *\r\n * The original names are kept for backwards compatibility but new code\r\n * is encouraged to use 'none' / 'own-only' which describe behavior, not\r\n * isolation level (both 'isolated' modes ARE isolated; one injects nothing\r\n * extra, the other injects only owned styles).\r\n *\r\n * @param {string|undefined} mode\r\n * @returns {string|undefined} Canonical internal name\r\n */\r\nexport function normalizeStyleMode(mode) {\r\n if (mode === 'none') return 'isolated';\r\n if (mode === 'own-only') return 'fully-isolated';\r\n return mode;\r\n}\r\n\r\nexport class WuSandbox {\r\n constructor() {\r\n // Registros existentes\r\n this.sandboxes = new Map();\r\n this.styleBridge = new WuStyleBridge();\r\n\r\n // 🚀 NUEVOS SISTEMAS INTEGRADOS\r\n this.jsSandboxes = new Map(); // ProxySandbox o SnapshotSandbox por app\r\n this.sandboxStrategy = this.detectSandboxStrategy();\r\n\r\n logger.wuDebug(`Advanced isolation system initialized (strategy: ${this.sandboxStrategy})`);\r\n }\r\n\r\n /**\r\n * Detectar estrategia de sandbox.\r\n * Kept for backwards compatibility — always returns 'proxy' since v2.0.\r\n * Proxy is universal across supported browsers (browserslist excludes IE 11).\r\n * @returns {'proxy'}\r\n */\r\n detectSandboxStrategy() {\r\n return 'proxy';\r\n }\r\n\r\n /**\r\n * 🔧 SMART SANDBOX: Advanced Shadow DOM creation with error recovery\r\n * @param {string} appName - Nombre de la aplicación\r\n * @param {HTMLElement} hostContainer - Contenedor host\r\n * @param {Object} options - Opciones adicionales (styleMode, manifest, etc.)\r\n * @returns {Object} Sandbox con shadow root y container\r\n */\r\n create(appName, hostContainer, options = {}) {\r\n logger.wuDebug(`Creating sandbox for: ${appName}`);\r\n\r\n try {\r\n // 🔧 SHADOW DOM VERIFICATION\r\n if (!hostContainer.attachShadow) {\r\n throw new Error('Shadow DOM not supported in this browser');\r\n }\r\n\r\n // 🛠️ SMART CLEANUP: Handle existing shadow roots\r\n let shadowRoot;\r\n if (hostContainer.shadowRoot) {\r\n logger.wuDebug(`Existing shadow root detected for ${appName}, performing cleanup...`);\r\n\r\n // Clear existing shadow root content\r\n hostContainer.shadowRoot.innerHTML = '';\r\n shadowRoot = hostContainer.shadowRoot;\r\n\r\n logger.wuDebug(`Existing shadow root cleaned and reused for ${appName}`);\r\n } else {\r\n // Create new Shadow DOM\r\n shadowRoot = hostContainer.attachShadow({\r\n mode: 'open',\r\n delegatesFocus: true\r\n });\r\n\r\n logger.wuDebug(`New shadow root created for ${appName}`);\r\n }\r\n\r\n // 🎯 Create app container with advanced features\r\n const appContainer = document.createElement('div');\r\n appContainer.id = `wu-app-${appName}`;\r\n appContainer.className = 'wu-app-root';\r\n appContainer.setAttribute('data-wu-enhanced', 'true');\r\n appContainer.setAttribute('data-wu-timestamp', Date.now().toString());\r\n\r\n // 🎨 Enhanced base styles with advanced properties\r\n const baseStyles = document.createElement('style');\r\n baseStyles.textContent = this.generateSandboxStyles(appName);\r\n\r\n // 🌟 Assemble enhanced Shadow DOM\r\n shadowRoot.appendChild(baseStyles);\r\n shadowRoot.appendChild(appContainer);\r\n\r\n // Create JS Sandbox with container reference for DOM/storage scoping\r\n const jsSandbox = this.createAdvancedJSSandbox(appName);\r\n if (jsSandbox.setContainer) {\r\n jsSandbox.setContainer(appContainer, shadowRoot);\r\n }\r\n const jsProxy = jsSandbox.activate();\r\n\r\n // Verificar styleMode del manifest antes de inyectar estilos.\r\n // Acepta aliases v2.0+ ('none', 'own-only') y los normaliza a los nombres\r\n // internos. Los nombres originales se mantienen también para compat.\r\n const styleMode = normalizeStyleMode(options.styleMode || options.manifest?.styleMode);\r\n\r\n const sandbox = {\r\n appName,\r\n shadowRoot,\r\n container: appContainer,\r\n hostContainer,\r\n jsSandbox, // NUEVO: ProxySandbox o SnapshotSandbox\r\n jsProxy, // NUEVO: Proxy para ejecutar scripts\r\n styles: baseStyles,\r\n styleMode, // Guardar styleMode para uso futuro\r\n manifest: options.manifest, // Guardar manifest completo\r\n created: Date.now(),\r\n sandbox_state: 'stable',\r\n recovery_count: 0\r\n };\r\n\r\n // 🎨 INJECT STYLES: Comportamiento según styleMode\r\n // - \"shared\": Inyecta todos los estilos del documento padre\r\n // - \"isolated\": NO inyecta estilos externos (encapsulamiento nativo Shadow DOM)\r\n // - \"fully-isolated\": Inyecta SOLO estilos propios de la app\r\n\r\n if (styleMode === 'isolated') {\r\n // 🔒 MODO ISOLATED: Encapsulamiento nativo del Shadow DOM\r\n // No se inyectan estilos externos - la app debe manejar sus propios estilos\r\n logger.wuDebug(`Style mode \"isolated\" for ${appName}, using native Shadow DOM encapsulation`);\r\n sandbox.stylesReady = Promise.resolve(0);\r\n // No configurar observer de estilos - la app es responsable de sus propios estilos\r\n\r\n } else if (styleMode === 'fully-isolated') {\r\n logger.wuDebug(`Style mode \"fully-isolated\" detected for ${appName}, using enhanced style injection`);\r\n // Registrar esta app como fully-isolated en el style bridge para filtrar sus estilos\r\n const appUrl = options.appUrl || (options.manifest?.name ? `/${options.manifest.name}/` : `/${appName}/`);\r\n this.styleBridge.registerFullyIsolatedApp(appName, appUrl);\r\n\r\n // Guardar appUrl en sandbox para uso en reinjectStyles\r\n sandbox.appUrl = appUrl;\r\n\r\n // Para fully-isolated, inyectar SOLO los estilos propios de la app en su Shadow DOM\r\n // Guardamos referencia a this para usar en el observer\r\n const self = this;\r\n\r\n sandbox.stylesReady = new Promise((resolve) => {\r\n let resolved = false;\r\n\r\n const tryInject = async () => {\r\n const count = await self.injectOwnStylesToShadow(shadowRoot, appName, appUrl);\r\n\r\n if (count > 0) {\r\n logger.wuDebug(`Injected ${count} own styles for ${appName} (fully-isolated)`);\r\n if (!resolved) {\r\n resolved = true;\r\n resolve(count);\r\n }\r\n }\r\n\r\n return count;\r\n };\r\n\r\n // Usar MutationObserver PERSISTENTE para detectar cuando se inyectan estilos del app\r\n logger.wuDebug(`Setting up style observer for ${appName} (fully-isolated)`);\r\n const observer = new MutationObserver((mutations) => {\r\n let newStyleCount = 0;\r\n for (const m of mutations) {\r\n if (m.type === 'childList') {\r\n for (const n of m.addedNodes) {\r\n if (n.nodeName === 'STYLE' || n.nodeName === 'LINK') {\r\n newStyleCount++;\r\n if (!n.getAttribute) continue;\r\n // Bundler-agnostic detection: `data-wu-app=\"<name>\"`.\r\n // Falls back to Vite's `data-vite-dev-id` if present.\r\n const wuApp = n.getAttribute('data-wu-app');\r\n const viteId = n.getAttribute('data-vite-dev-id');\r\n if (wuApp === appName) {\r\n logger.wuDebug(`New ${appName} style (data-wu-app)`);\r\n } else if (viteId && viteId.toLowerCase().includes(appName.toLowerCase())) {\r\n logger.wuDebug(`New ${appName} style (vite): ${viteId.split('/').pop()}`);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (newStyleCount > 0) {\r\n logger.wuDebug(`${newStyleCount} new styles detected in head, checking for ${appName}...`);\r\n tryInject();\r\n }\r\n });\r\n\r\n // Observar cambios en el head DE FORMA PERSISTENTE\r\n observer.observe(document.head, {\r\n childList: true,\r\n subtree: true\r\n });\r\n\r\n // Guardar referencia al observer para poder desconectarlo cuando se desmonte la app\r\n sandbox.styleObserver = observer;\r\n\r\n // Intento inicial con pequeño delay para que Vite procese los imports\r\n setTimeout(async () => {\r\n const count = await tryInject();\r\n // Si después de 3 segundos no hay estilos, usar fallback\r\n if (!resolved) {\r\n setTimeout(() => {\r\n if (!resolved) {\r\n logger.wuWarn(`No own styles found for ${appName} after timeout, using FALLBACK`);\r\n const fallbackCount = self.injectAllStylesToShadow(shadowRoot, appName);\r\n logger.wuDebug(`FALLBACK: Injected ${fallbackCount} styles for ${appName}`);\r\n resolved = true;\r\n resolve(fallbackCount);\r\n }\r\n }, 3000);\r\n }\r\n }, 50);\r\n });\r\n } else {\r\n // 🌐 MODO SHARED (default): Inyectar todos los estilos compartidos del documento\r\n logger.wuDebug(`Style mode \"shared\" for ${appName}, injecting all shared styles...`);\r\n sandbox.stylesReady = this.styleBridge.injectStylesIntoShadow(shadowRoot, appName, styleMode).then(count => {\r\n logger.wuDebug(`Shared ${count} styles with ${appName}`);\r\n\r\n // 🔄 Observar cambios dinámicos de estilos (HMR de Vite)\r\n // observeStyleChanges now returns an unsubscribe — keep it so we\r\n // tear down THIS app's listener on unmount without breaking others.\r\n sandbox.unsubscribeStyleChanges = this.styleBridge.observeStyleChanges(() => {\r\n logger.wuDebug(`Reinjecting styles for ${appName} due to changes`);\r\n this.styleBridge.injectStylesIntoShadow(shadowRoot, appName, styleMode).catch(err => {\r\n logger.wuWarn(`Failed to reinject styles: ${err}`);\r\n });\r\n });\r\n\r\n return count;\r\n }).catch(error => {\r\n logger.wuWarn(`Failed to inject styles: ${error}`);\r\n return 0;\r\n });\r\n }\r\n\r\n // 📊 Register in sandbox registry\r\n this.sandboxes.set(appName, sandbox);\r\n\r\n logger.wuDebug(`Enhanced sandbox created for ${appName}`);\r\n return sandbox;\r\n\r\n } catch (error) {\r\n logger.wuError(`Failed to create sandbox for ${appName}: ${error}`);\r\n\r\n // 🔧 FALLBACK RECOVERY: Create fallback sandbox when Shadow DOM fails\r\n if (error.message.includes('Shadow root cannot be created')) {\r\n return this.createFallbackSandbox(appName, hostContainer);\r\n }\r\n\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * 🔧 FALLBACK SANDBOX: Create fallback container when Shadow DOM is not available\r\n */\r\n createFallbackSandbox(appName, hostContainer) {\r\n logger.wuDebug(`Creating fallback sandbox for ${appName}...`);\r\n\r\n try {\r\n // 🛠️ Complete shadow DOM reset\r\n if (hostContainer.shadowRoot) {\r\n hostContainer.shadowRoot.innerHTML = '';\r\n }\r\n\r\n // 🌟 Create minimal container without shadow DOM if necessary\r\n const fallbackContainer = document.createElement('div');\r\n fallbackContainer.id = `wu-app-${appName}`;\r\n fallbackContainer.className = 'wu-app-root wu-fallback';\r\n fallbackContainer.style.cssText = `\r\n width: 100%;\r\n height: 100%;\r\n isolation: isolate;\r\n contain: layout style paint;\r\n `;\r\n\r\n // 🧹 Clear host container\r\n hostContainer.innerHTML = '';\r\n hostContainer.appendChild(fallbackContainer);\r\n\r\n const healedSandbox = {\r\n appName,\r\n shadowRoot: null, // No shadow DOM in fallback mode\r\n container: fallbackContainer,\r\n hostContainer,\r\n styles: null,\r\n created: Date.now(),\r\n sandbox_state: 'fallback_mode',\r\n recovery_count: 1,\r\n fallback_mode: true\r\n };\r\n\r\n this.sandboxes.set(appName, healedSandbox);\r\n\r\n logger.wuDebug(`Fallback sandbox created successfully for ${appName}`);\r\n return healedSandbox;\r\n\r\n } catch (healingError) {\r\n logger.wuError(`Fallback sandbox creation failed: ${healingError}`);\r\n throw healingError;\r\n }\r\n }\r\n\r\n /**\r\n * 🎨 SANDBOX STYLES: Generate CSS styles for Shadow DOM isolation\r\n */\r\n generateSandboxStyles(appName) {\r\n return `\r\n /* Wu Framework - Shadow DOM Isolation Styles */\r\n :host {\r\n display: block;\r\n width: 100%;\r\n height: 100%;\r\n box-sizing: border-box;\r\n contain: layout style paint;\r\n --wu-sandbox-active: true;\r\n --wu-isolation-state: stable;\r\n }\r\n\r\n .wu-app-root {\r\n width: 100%;\r\n height: 100%;\r\n box-sizing: border-box;\r\n isolation: isolate;\r\n position: relative;\r\n overflow: hidden;\r\n }\r\n\r\n /* Loading animation for sandbox initialization */\r\n .wu-app-root[data-wu-loading=\"true\"] {\r\n background: linear-gradient(45deg,\r\n rgba(74, 144, 226, 0.1) 0%,\r\n rgba(80, 227, 194, 0.1) 100%);\r\n animation: sandboxPulse 2s ease-in-out infinite;\r\n }\r\n\r\n @keyframes sandboxPulse {\r\n 0%, 100% { opacity: 0.8; }\r\n 50% { opacity: 1; }\r\n }\r\n\r\n /* CSS reset for shadow DOM stability */\r\n * {\r\n box-sizing: border-box;\r\n }\r\n\r\n /* CSS custom properties for sandbox */\r\n :host {\r\n --wu-app-name: \"${appName}\";\r\n --wu-isolation: true;\r\n --wu-creation-timestamp: ${Date.now()};\r\n }\r\n\r\n /* 🛡️ Debug mode enhancements */\r\n :host([wu-debug]) {\r\n border: 2px dashed #4a90e2;\r\n background: rgba(74, 144, 226, 0.05);\r\n box-shadow: 0 0 10px rgba(74, 144, 226, 0.3);\r\n }\r\n\r\n :host([wu-debug])::before {\r\n content: \"Wu Framework: \" attr(wu-app);\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n background: linear-gradient(45deg, #4a90e2, #50e3c2);\r\n color: white;\r\n padding: 4px 8px;\r\n font-size: 11px;\r\n font-family: 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, 'Courier New', monospace;\r\n z-index: 10000;\r\n border-radius: 0 0 4px 0;\r\n font-weight: 600;\r\n }\r\n\r\n /* Sandbox state indicators */\r\n :host([data-sandbox-state=\"stable\"]) {\r\n --wu-isolation-state: stable;\r\n }\r\n\r\n :host([data-sandbox-state=\"healing\"]) {\r\n --wu-dimensional-stability: healing;\r\n animation: sandboxHealing 1s ease-in-out infinite;\r\n }\r\n\r\n @keyframes sandboxHealing {\r\n 0%, 100% { filter: hue-rotate(0deg); }\r\n 50% { filter: hue-rotate(180deg); }\r\n }\r\n `;\r\n }\r\n\r\n /**\r\n * 🛡️ Crear JS Sandbox avanzado.\r\n * @param {string} appName - Nombre de la app\r\n * @returns {WuProxySandbox} Sandbox JS\r\n */\r\n createAdvancedJSSandbox(appName) {\r\n const jsSandbox = new WuProxySandbox(appName);\r\n logger.wuDebug(`Created ProxySandbox for ${appName}`);\r\n this.jsSandboxes.set(appName, jsSandbox);\r\n return jsSandbox;\r\n }\r\n\r\n /**\r\n * Agregar estilos personalizados al sandbox\r\n * @param {string} appName - Nombre de la aplicación\r\n * @param {string} css - CSS a agregar\r\n */\r\n addStyles(appName, css) {\r\n const sandbox = this.sandboxes.get(appName);\r\n if (!sandbox) {\r\n logger.wuWarn(`Sandbox not found for: ${appName}`);\r\n return;\r\n }\r\n\r\n const styleElement = document.createElement('style');\r\n styleElement.textContent = css;\r\n styleElement.setAttribute('wu-custom-styles', '');\r\n\r\n sandbox.shadowRoot.appendChild(styleElement);\r\n logger.wuDebug(`Custom styles added to ${appName}`);\r\n }\r\n\r\n /**\r\n * Cargar estilos externos en el sandbox\r\n * @param {string} appName - Nombre de la aplicación\r\n * @param {string} href - URL del CSS\r\n */\r\n loadExternalStyles(appName, href) {\r\n const sandbox = this.sandboxes.get(appName);\r\n if (!sandbox) {\r\n logger.wuWarn(`Sandbox not found for: ${appName}`);\r\n return;\r\n }\r\n\r\n const linkElement = document.createElement('link');\r\n linkElement.rel = 'stylesheet';\r\n linkElement.href = href;\r\n linkElement.setAttribute('wu-external-styles', '');\r\n\r\n sandbox.shadowRoot.appendChild(linkElement);\r\n logger.wuDebug(`External styles loaded in ${appName}: ${href}`);\r\n }\r\n\r\n /**\r\n * Establecer modo debug para un sandbox\r\n * @param {string} appName - Nombre de la aplicación\r\n * @param {boolean} enabled - Activar/desactivar debug\r\n */\r\n setDebugMode(appName, enabled = true) {\r\n const sandbox = this.sandboxes.get(appName);\r\n if (!sandbox) {\r\n logger.wuWarn(`Sandbox not found for: ${appName}`);\r\n return;\r\n }\r\n\r\n if (enabled) {\r\n sandbox.hostContainer.setAttribute('wu-debug', '');\r\n sandbox.hostContainer.setAttribute('wu-app', appName);\r\n } else {\r\n sandbox.hostContainer.removeAttribute('wu-debug');\r\n sandbox.hostContainer.removeAttribute('wu-app');\r\n }\r\n\r\n logger.wuDebug(`Debug mode ${enabled ? 'enabled' : 'disabled'} for ${appName}`);\r\n }\r\n\r\n /**\r\n * Limpiar y destruir sandbox\r\n * @param {Object} sandbox - Sandbox a limpiar\r\n */\r\n cleanup(sandbox) {\r\n if (!sandbox) return;\r\n\r\n const { appName, shadowRoot, hostContainer, jsSandbox } = sandbox;\r\n\r\n logger.wuDebug(`Cleaning up sandbox for: ${appName}`);\r\n\r\n try {\r\n // 🛡️ NUEVO: Desactivar JS Sandbox\r\n if (jsSandbox && jsSandbox.isActive()) {\r\n jsSandbox.deactivate();\r\n logger.wuDebug(`JS Sandbox deactivated for ${appName}`);\r\n }\r\n\r\n // Desconectar MutationObserver de estilos (fully-isolated mode)\r\n // Sin esto, el observer sigue escuchando document.head y mantiene\r\n // referencias al shadowRoot por closure → leak por cada mount.\r\n if (sandbox.styleObserver) {\r\n try {\r\n sandbox.styleObserver.disconnect();\r\n } catch (err) {\r\n logger.wuWarn(`Failed to disconnect styleObserver for ${appName}: ${err}`);\r\n }\r\n sandbox.styleObserver = null;\r\n }\r\n\r\n // Shared mode: unsubscribe from the shared style observer so this app's\r\n // callback stops firing. Other apps keep their subscriptions intact.\r\n if (typeof sandbox.unsubscribeStyleChanges === 'function') {\r\n try { sandbox.unsubscribeStyleChanges(); } catch (err) {\r\n logger.wuWarn(`Failed to unsubscribe style changes for ${appName}: ${err}`);\r\n }\r\n sandbox.unsubscribeStyleChanges = null;\r\n }\r\n\r\n // Desregistrar app del styleBridge si estaba en fully-isolated\r\n if (this.styleBridge?.unregisterFullyIsolatedApp) {\r\n this.styleBridge.unregisterFullyIsolatedApp(appName);\r\n }\r\n\r\n // Limpiar eventos y observers\r\n this.cleanupEventListeners(sandbox);\r\n\r\n // Limpiar contenido del Shadow DOM\r\n if (shadowRoot) {\r\n shadowRoot.innerHTML = '';\r\n }\r\n\r\n // Remover atributos del host\r\n if (hostContainer) {\r\n hostContainer.removeAttribute('wu-debug');\r\n hostContainer.removeAttribute('wu-app');\r\n hostContainer.removeAttribute('wu-no-scroll');\r\n }\r\n\r\n // Remover del registro\r\n this.sandboxes.delete(appName);\r\n this.jsSandboxes.delete(appName);\r\n\r\n logger.wuDebug(`Sandbox cleaned up: ${appName}`);\r\n\r\n } catch (error) {\r\n logger.wuError(`Error cleaning up sandbox ${appName}: ${error}`);\r\n }\r\n }\r\n\r\n /**\r\n * Limpiar event listeners del sandbox\r\n * @param {Object} sandbox - Sandbox a limpiar\r\n */\r\n cleanupEventListeners(sandbox) {\r\n // Remover todos los event listeners del Shadow DOM\r\n const { shadowRoot } = sandbox;\r\n if (!shadowRoot) return;\r\n\r\n // Clonar nodos para remover todos los event listeners\r\n const elements = shadowRoot.querySelectorAll('*');\r\n elements.forEach(element => {\r\n if (element.cloneNode) {\r\n const clone = element.cloneNode(true);\r\n element.parentNode?.replaceChild(clone, element);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Obtener información de un sandbox\r\n * @param {string} appName - Nombre de la aplicación\r\n * @returns {Object} Información del sandbox\r\n */\r\n getSandboxInfo(appName) {\r\n const sandbox = this.sandboxes.get(appName);\r\n if (!sandbox) return null;\r\n\r\n return {\r\n appName: sandbox.appName,\r\n created: sandbox.created,\r\n hasContainer: !!sandbox.container,\r\n hasShadowRoot: !!sandbox.shadowRoot,\r\n elementCount: sandbox.shadowRoot?.children?.length || 0,\r\n uptime: Date.now() - sandbox.created\r\n };\r\n }\r\n\r\n /**\r\n * Obtener estadísticas de todos los sandboxes\r\n */\r\n getStats() {\r\n return {\r\n strategy: this.sandboxStrategy,\r\n total: this.sandboxes.size,\r\n sandboxes: Array.from(this.sandboxes.keys()),\r\n jsSandboxes: Array.from(this.jsSandboxes.keys()),\r\n details: Array.from(this.sandboxes.entries()).map(([name, sandbox]) => ({\r\n name,\r\n uptime: Date.now() - sandbox.created,\r\n elements: sandbox.shadowRoot?.children?.length || 0,\r\n hasJsSandbox: !!sandbox.jsSandbox,\r\n jsSandboxActive: sandbox.jsSandbox?.isActive() || false\r\n }))\r\n };\r\n }\r\n\r\n /**\r\n * Limpiar todos los sandboxes\r\n */\r\n cleanupAll() {\r\n logger.wuDebug(`Cleaning up all ${this.sandboxes.size} sandboxes...`);\r\n\r\n for (const [appName, sandbox] of this.sandboxes) {\r\n this.cleanup(sandbox);\r\n }\r\n\r\n // Limpiar StyleBridge\r\n if (this.styleBridge) {\r\n this.styleBridge.cleanup();\r\n }\r\n\r\n logger.wuDebug('All sandboxes cleaned up');\r\n }\r\n\r\n /**\r\n * 🎨 CONFIGURAR STYLE BRIDGE: Configura el sistema de compartición de estilos\r\n * @param {Object} config - Configuración del StyleBridge\r\n */\r\n configureStyleSharing(config) {\r\n if (this.styleBridge) {\r\n this.styleBridge.configure(config);\r\n logger.wuDebug('StyleBridge configured');\r\n }\r\n }\r\n\r\n /**\r\n * 📊 OBTENER ESTADÍSTICAS DE ESTILOS: Info sobre estilos compartidos\r\n * @returns {Object}\r\n */\r\n getStyleStats() {\r\n return this.styleBridge ? this.styleBridge.getStats() : null;\r\n }\r\n\r\n /**\r\n * 🔄 RE-INYECTAR ESTILOS: Vuelve a inyectar estilos en un sandbox\r\n * @param {string} appName - Nombre de la aplicación\r\n */\r\n async reinjectStyles(appName) {\r\n const sandbox = this.sandboxes.get(appName);\r\n if (!sandbox || !sandbox.shadowRoot) {\r\n logger.wuWarn(`Cannot reinject styles for ${appName}`);\r\n return;\r\n }\r\n\r\n const styleMode = sandbox.styleMode;\r\n\r\n // 🔒 MODO ISOLATED: No reinyectar estilos - la app maneja sus propios estilos\r\n if (styleMode === 'isolated') {\r\n logger.wuDebug(`Skipping reinject for ${appName} (isolated mode - app manages own styles)`);\r\n return;\r\n }\r\n\r\n // 🛡️ MODO FULLY-ISOLATED: Reinyectar SOLO estilos propios\r\n if (styleMode === 'fully-isolated') {\r\n logger.wuDebug(`Reinjecting OWN styles for ${appName} (fully-isolated)...`);\r\n const appUrl = sandbox.appUrl || sandbox.manifest?.name ? `/${sandbox.manifest.name}/` : `/${appName}/`;\r\n const count = await this.injectOwnStylesToShadow(sandbox.shadowRoot, appName, appUrl);\r\n logger.wuDebug(`Reinjected ${count} own styles for ${appName}`);\r\n return;\r\n }\r\n\r\n // 🌐 MODO SHARED: Reinyectar todos los estilos compartidos\r\n logger.wuDebug(`Reinjecting shared styles for ${appName}...`);\r\n const count = await this.styleBridge.injectStylesIntoShadow(\r\n sandbox.shadowRoot,\r\n appName,\r\n styleMode\r\n );\r\n logger.wuDebug(`Reinjected ${count} shared styles`);\r\n }\r\n\r\n /**\r\n * 🎨 INYECTAR ESTILOS PROPIOS: Inyecta SOLO los estilos propios de una app en su Shadow DOM\r\n * Usado para apps en modo fully-isolated\r\n * @param {ShadowRoot} shadowRoot - Shadow DOM donde inyectar\r\n * @param {string} appName - Nombre de la app\r\n * @param {string} appUrl - URL base de la app\r\n * @returns {Promise<number>} Número de estilos inyectados\r\n */\r\n async injectOwnStylesToShadow(shadowRoot, appName, appUrl) {\r\n if (!shadowRoot) return 0;\r\n\r\n let injectedCount = 0;\r\n\r\n // Buscar TODOS los estilos en el head\r\n const allStyles = document.querySelectorAll('style');\r\n const normalizedAppName = appName.toLowerCase();\r\n\r\n // Patrones para detectar estilos de esta app (Windows y Unix paths)\r\n // IMPORTANTE: Debe coincidir SOLO con packages/appName/ al inicio del path del paquete\r\n // NO debe coincidir con packages/shell/src/components/learning/ (eso es del shell)\r\n const appPatterns = [\r\n // Patrón específico: packages/learning/src o packages\\learning\\src\r\n // El src/ es clave para asegurar que es el MFE, no un subdirectorio de otro package\r\n new RegExp(`packages[/\\\\\\\\]${normalizedAppName}[/\\\\\\\\]src[/\\\\\\\\]`, 'i')\r\n ];\r\n\r\n logger.wuDebug(`Searching own styles for ${appName}, found ${allStyles.length} style tags in head`);\r\n\r\n // Log para debug: mostrar estilos que contienen el nombre de la app\r\n let matchingCount = 0;\r\n for (const s of allStyles) {\r\n const vid = s.getAttribute('data-vite-dev-id') || '';\r\n if (vid.toLowerCase().includes(normalizedAppName)) {\r\n matchingCount++;\r\n }\r\n }\r\n if (matchingCount > 0) {\r\n logger.wuDebug(`Found ${matchingCount} styles potentially matching ${appName}`);\r\n }\r\n\r\n for (const style of allStyles) {\r\n // NO saltar basándose en data-wu-injected del head - eso se pone en los clones del shadow DOM\r\n\r\n const viteId = style.getAttribute('data-vite-dev-id') || '';\r\n const normalizedViteId = viteId.replace(/\\\\/g, '/').toLowerCase();\r\n\r\n // Verificar si el estilo pertenece a esta app\r\n let belongsToApp = false;\r\n\r\n // 1. Por data-vite-dev-id (la forma más confiable)\r\n if (viteId) {\r\n // Revisar si el path contiene packages/appName/\r\n for (const pattern of appPatterns) {\r\n if (pattern instanceof RegExp) {\r\n if (pattern.test(viteId)) {\r\n belongsToApp = true;\r\n break;\r\n }\r\n } else {\r\n if (normalizedViteId.includes(pattern.toLowerCase())) {\r\n belongsToApp = true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (belongsToApp) {\r\n // Verificar si ya existe en el Shadow DOM\r\n const existingStyle = shadowRoot.querySelector(`style[data-vite-dev-id=\"${viteId}\"]`);\r\n\r\n if (!existingStyle) {\r\n const clonedStyle = style.cloneNode(true);\r\n clonedStyle.setAttribute('data-wu-injected', 'true');\r\n shadowRoot.insertBefore(clonedStyle, shadowRoot.firstChild);\r\n injectedCount++;\r\n const styleName = viteId.substring(viteId.lastIndexOf('/') + 1) || viteId.substring(viteId.lastIndexOf('\\\\') + 1);\r\n logger.wuDebug(`Injected own style for ${appName}: ${styleName}`);\r\n }\r\n }\r\n }\r\n\r\n logger.wuDebug(`Total own styles injected for ${appName}: ${injectedCount}`);\r\n return injectedCount;\r\n }\r\n\r\n /**\r\n * 🎨 FALLBACK: Inyectar estilos que contengan el nombre de la app\r\n * Usado como último recurso cuando no se encuentran los estilos con el patrón exacto\r\n * @param {ShadowRoot} shadowRoot - Shadow DOM donde inyectar\r\n * @param {string} appName - Nombre de la app (para logging)\r\n * @returns {number} Número de estilos inyectados\r\n */\r\n injectAllStylesToShadow(shadowRoot, appName) {\r\n if (!shadowRoot) return 0;\r\n\r\n let injectedCount = 0;\r\n const normalizedAppName = appName.toLowerCase();\r\n\r\n // Inyectar estilos que contengan el nombre de la app en su vite-id\r\n const allStyles = document.querySelectorAll('style');\r\n for (const style of allStyles) {\r\n const viteId = style.getAttribute('data-vite-dev-id') || '';\r\n\r\n // Solo inyectar si contiene el nombre de la app\r\n if (!viteId.toLowerCase().includes(normalizedAppName)) continue;\r\n\r\n // Verificar si ya existe en el shadow DOM\r\n if (shadowRoot.querySelector(`style[data-vite-dev-id=\"${viteId}\"]`)) continue;\r\n\r\n const clonedStyle = style.cloneNode(true);\r\n clonedStyle.setAttribute('data-wu-fallback', 'true');\r\n shadowRoot.insertBefore(clonedStyle, shadowRoot.firstChild);\r\n injectedCount++;\r\n const styleName = viteId.split('/').pop() || viteId.split('\\\\').pop();\r\n logger.wuDebug(`FALLBACK injected: ${styleName}`);\r\n }\r\n\r\n logger.wuDebug(`FALLBACK: Total ${injectedCount} styles injected for ${appName}`);\r\n return injectedCount;\r\n }\r\n}\r\n","/**\r\n * 📋 WU-MANIFEST: SECURE MANIFEST SYSTEM\r\n * Validación estricta de wu.json para seguridad\r\n */\r\n\r\nimport { logger } from './wu-logger.js';\r\n\r\nexport class WuManifest {\r\n constructor() {\r\n this.cache = new Map();\r\n this.schemas = new Map();\r\n\r\n // 🔐 Configuración de seguridad\r\n this.security = {\r\n maxManifestSize: 100 * 1024, // 100KB máximo\r\n maxNameLength: 50,\r\n maxEntryLength: 200,\r\n maxExports: 100,\r\n maxImports: 50,\r\n maxRoutes: 100,\r\n // Patrones peligrosos en paths\r\n dangerousPatterns: [\r\n /\\.\\./, // Path traversal\r\n /^\\/etc\\//, // System paths\r\n /^\\/proc\\//,\r\n /^file:\\/\\//, // File protocol\r\n /javascript:/i, // JS injection\r\n /data:/i, // Data URLs\r\n /<script/i, // Script tags\r\n /on\\w+\\s*=/i // Event handlers\r\n ],\r\n // Dominios bloqueados\r\n blockedDomains: [\r\n 'evil.com',\r\n 'malware.com'\r\n ]\r\n };\r\n\r\n this.defineSchema();\r\n }\r\n\r\n /**\r\n * Definir schema de validación para wu.json\r\n */\r\n defineSchema() {\r\n this.schemas.set('wu.json', {\r\n required: ['name', 'entry'],\r\n optional: ['wu'],\r\n wu: {\r\n optional: ['exports', 'imports', 'routes', 'permissions'],\r\n exports: 'object',\r\n imports: 'array',\r\n routes: 'array',\r\n permissions: 'array'\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Cargar manifest desde URL\r\n * @param {string} appUrl - URL base de la aplicación\r\n * @returns {Object} Manifest parseado y validado\r\n */\r\n async load(appUrl) {\r\n const manifestUrl = `${appUrl}/wu.json`;\r\n\r\n logger.debug(`[WuManifest] 📥 Loading manifest: ${manifestUrl}`);\r\n\r\n try {\r\n // Verificar cache\r\n if (this.cache.has(manifestUrl)) {\r\n logger.debug(`[WuManifest] ⚡ Cache hit: ${manifestUrl}`);\r\n return this.cache.get(manifestUrl);\r\n }\r\n\r\n // Cargar manifest with timeout to avoid hanging on slow servers\r\n const response = await fetch(manifestUrl, {\r\n cache: 'no-cache',\r\n headers: {\r\n 'Accept': 'application/json'\r\n },\r\n signal: AbortSignal.timeout(10000)\r\n });\r\n\r\n if (!response.ok) {\r\n // Si no hay manifest, crear uno básico\r\n if (response.status === 404) {\r\n logger.debug(`[WuManifest] 📄 No manifest found, creating default for: ${appUrl}`);\r\n return this.createDefaultManifest(appUrl);\r\n }\r\n\r\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\r\n }\r\n\r\n const manifestText = await response.text();\r\n\r\n // 🔐 Validar tamaño del manifest\r\n if (manifestText.length > this.security.maxManifestSize) {\r\n throw new Error(`Manifest too large (${manifestText.length} bytes, max ${this.security.maxManifestSize})`);\r\n }\r\n\r\n // 🔐 Intentar parsear JSON de forma segura\r\n let manifest;\r\n try {\r\n manifest = JSON.parse(manifestText);\r\n } catch (parseError) {\r\n throw new Error(`Invalid JSON in manifest: ${parseError.message}`);\r\n }\r\n\r\n // Validar manifest\r\n const validatedManifest = this.validate(manifest);\r\n\r\n // Cachear resultado\r\n this.cache.set(manifestUrl, validatedManifest);\r\n\r\n logger.debug(`[WuManifest] ✅ Manifest loaded: ${manifest.name}`);\r\n return validatedManifest;\r\n\r\n } catch (error) {\r\n console.error(`[WuManifest] ❌ Failed to load manifest: ${manifestUrl}`, error);\r\n\r\n // En caso de error, intentar crear manifest por defecto\r\n try {\r\n return this.createDefaultManifest(appUrl);\r\n } catch (defaultError) {\r\n throw new Error(`Failed to load manifest from ${manifestUrl}: ${error.message}`);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Crear manifest por defecto cuando no existe wu.json\r\n * @param {string} appUrl - URL de la aplicación\r\n * @returns {Object} Manifest por defecto\r\n */\r\n createDefaultManifest(appUrl) {\r\n // Extraer nombre de la app de la URL\r\n const appName = this.extractAppNameFromUrl(appUrl);\r\n\r\n const defaultManifest = {\r\n name: appName,\r\n entry: 'index.js',\r\n wu: {\r\n exports: {},\r\n imports: [],\r\n routes: [],\r\n permissions: []\r\n }\r\n };\r\n\r\n logger.debug(`[WuManifest] 🔧 Created default manifest for: ${appName}`);\r\n return defaultManifest;\r\n }\r\n\r\n /**\r\n * Extraer nombre de app desde URL\r\n * @param {string} url - URL de la aplicación\r\n * @returns {string} Nombre de la aplicación\r\n */\r\n extractAppNameFromUrl(url) {\r\n try {\r\n const urlObj = new URL(url);\r\n const pathSegments = urlObj.pathname.split('/').filter(Boolean);\r\n\r\n // Usar el último segmento como nombre de la app\r\n return pathSegments[pathSegments.length - 1] || 'unknown-app';\r\n } catch {\r\n // Si no es una URL válida, usar como está\r\n return url.replace(/[^a-zA-Z0-9-]/g, '') || 'unknown-app';\r\n }\r\n }\r\n\r\n /**\r\n * 🔐 SANITIZE STRING: Limpiar string de caracteres peligrosos\r\n */\r\n _sanitizeString(str) {\r\n if (typeof str !== 'string') return '';\r\n return str\r\n .replace(/[<>'\"]/g, '') // Remove HTML chars\r\n .replace(/[\\x00-\\x1F\\x7F]/g, '') // Remove control chars\r\n .trim();\r\n }\r\n\r\n /**\r\n * 🔐 CHECK DANGEROUS PATTERNS: Verificar patrones peligrosos\r\n */\r\n _hasDangerousPatterns(str) {\r\n if (typeof str !== 'string') return false;\r\n return this.security.dangerousPatterns.some(pattern => pattern.test(str));\r\n }\r\n\r\n /**\r\n * 🔐 VALIDATE URL: Verificar que URL es segura\r\n */\r\n _isUrlSafe(url) {\r\n if (typeof url !== 'string') return false;\r\n\r\n // Verificar patrones peligrosos\r\n if (this._hasDangerousPatterns(url)) {\r\n return false;\r\n }\r\n\r\n // Verificar dominios bloqueados\r\n try {\r\n const urlObj = new URL(url, 'http://localhost');\r\n if (this.security.blockedDomains.some(d => urlObj.hostname.includes(d))) {\r\n return false;\r\n }\r\n } catch {\r\n // Si no es URL válida, verificar como path\r\n if (this._hasDangerousPatterns(url)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Validar manifest contra schema con validación de seguridad\r\n * @param {Object} manifest - Manifest a validar\r\n * @returns {Object} Manifest validado\r\n */\r\n validate(manifest) {\r\n const schema = this.schemas.get('wu.json');\r\n\r\n // 🔐 Verificar que manifest es un objeto\r\n if (!manifest || typeof manifest !== 'object' || Array.isArray(manifest)) {\r\n throw new Error('Manifest must be a valid object');\r\n }\r\n\r\n // Verificar campos requeridos\r\n for (const field of schema.required) {\r\n if (!manifest[field]) {\r\n throw new Error(`Required field missing: ${field}`);\r\n }\r\n }\r\n\r\n // 🔐 Validar nombre\r\n if (typeof manifest.name !== 'string') {\r\n throw new Error('name must be a string');\r\n }\r\n if (manifest.name.length > this.security.maxNameLength) {\r\n throw new Error(`name too long (max ${this.security.maxNameLength} chars)`);\r\n }\r\n if (this._hasDangerousPatterns(manifest.name)) {\r\n throw new Error('name contains dangerous patterns');\r\n }\r\n\r\n // 🔐 Validar entry\r\n if (typeof manifest.entry !== 'string') {\r\n throw new Error('entry must be a string');\r\n }\r\n if (manifest.entry.length > this.security.maxEntryLength) {\r\n throw new Error(`entry too long (max ${this.security.maxEntryLength} chars)`);\r\n }\r\n if (!this._isUrlSafe(manifest.entry)) {\r\n throw new Error('entry contains dangerous patterns');\r\n }\r\n\r\n // Verificar tipos en sección wu\r\n if (manifest.wu) {\r\n const wu = manifest.wu;\r\n\r\n if (wu.exports && typeof wu.exports !== 'object') {\r\n throw new Error('wu.exports must be an object');\r\n }\r\n\r\n // 🔐 Validar límites de exports\r\n if (wu.exports && Object.keys(wu.exports).length > this.security.maxExports) {\r\n throw new Error(`Too many exports (max ${this.security.maxExports})`);\r\n }\r\n\r\n // 🔐 Validar cada export path\r\n if (wu.exports) {\r\n for (const [key, path] of Object.entries(wu.exports)) {\r\n if (!this._isUrlSafe(path)) {\r\n throw new Error(`Dangerous export path: ${key}`);\r\n }\r\n }\r\n }\r\n\r\n if (wu.imports && !Array.isArray(wu.imports)) {\r\n throw new Error('wu.imports must be an array');\r\n }\r\n\r\n // 🔐 Validar límites de imports\r\n if (wu.imports && wu.imports.length > this.security.maxImports) {\r\n throw new Error(`Too many imports (max ${this.security.maxImports})`);\r\n }\r\n\r\n if (wu.routes && !Array.isArray(wu.routes)) {\r\n throw new Error('wu.routes must be an array');\r\n }\r\n\r\n // 🔐 Validar límites de routes\r\n if (wu.routes && wu.routes.length > this.security.maxRoutes) {\r\n throw new Error(`Too many routes (max ${this.security.maxRoutes})`);\r\n }\r\n\r\n if (wu.permissions && !Array.isArray(wu.permissions)) {\r\n throw new Error('wu.permissions must be an array');\r\n }\r\n }\r\n\r\n // Validate optional fields.\r\n // Accept both v1 names ('isolated', 'fully-isolated') and v2 aliases\r\n // ('none', 'own-only'). The sandbox layer normalizes aliases at use.\r\n if (manifest.styleMode !== undefined) {\r\n const validModes = ['shared', 'isolated', 'fully-isolated', 'none', 'own-only'];\r\n if (!validModes.includes(manifest.styleMode)) {\r\n logger.warn(`[WuManifest] Invalid styleMode \"${manifest.styleMode}\", defaulting to \"shared\". Valid: ${validModes.join(', ')}`);\r\n manifest.styleMode = 'shared';\r\n }\r\n }\r\n\r\n if (manifest.version !== undefined && typeof manifest.version !== 'string') {\r\n logger.warn('[WuManifest] version must be a string, ignoring');\r\n delete manifest.version;\r\n }\r\n\r\n if (manifest.folder !== undefined) {\r\n if (typeof manifest.folder !== 'string') {\r\n logger.warn('[WuManifest] folder must be a string, ignoring');\r\n delete manifest.folder;\r\n } else if (this._hasDangerousPatterns(manifest.folder)) {\r\n throw new Error('folder contains dangerous patterns');\r\n }\r\n }\r\n\r\n // Normalizar y limpiar manifest\r\n return this.normalize(manifest);\r\n }\r\n\r\n /**\r\n * Normalizar manifest\r\n * @param {Object} manifest - Manifest a normalizar\r\n * @returns {Object} Manifest normalizado\r\n */\r\n normalize(manifest) {\r\n const normalized = {\r\n name: manifest.name.trim(),\r\n entry: this.normalizeEntry(manifest.entry),\r\n wu: {\r\n exports: manifest.wu?.exports || {},\r\n imports: manifest.wu?.imports || [],\r\n routes: manifest.wu?.routes || [],\r\n permissions: manifest.wu?.permissions || []\r\n }\r\n };\r\n\r\n // Preservar campos opcionales del manifest (styleMode, version, folder, etc.)\r\n if (manifest.styleMode) {\r\n normalized.styleMode = manifest.styleMode;\r\n }\r\n if (manifest.version) {\r\n normalized.version = manifest.version;\r\n }\r\n if (manifest.folder) {\r\n normalized.folder = manifest.folder;\r\n }\r\n\r\n // Normalizar exports\r\n if (normalized.wu.exports) {\r\n const normalizedExports = {};\r\n for (const [key, path] of Object.entries(normalized.wu.exports)) {\r\n normalizedExports[key] = this.normalizeComponentPath(path);\r\n }\r\n normalized.wu.exports = normalizedExports;\r\n }\r\n\r\n // Validar imports\r\n normalized.wu.imports = normalized.wu.imports.filter(imp => {\r\n if (typeof imp !== 'string' || !imp.includes('.')) {\r\n logger.warn(`[WuManifest] Invalid import format: ${imp}`);\r\n return false;\r\n }\r\n return true;\r\n });\r\n\r\n return normalized;\r\n }\r\n\r\n /**\r\n * Normalizar entry path\r\n * @param {string} entry - Entry path\r\n * @returns {string} Entry normalizado\r\n */\r\n normalizeEntry(entry) {\r\n if (!entry) return 'index.js';\r\n\r\n let normalized = entry.trim();\r\n\r\n // Remover ./ inicial si está presente\r\n if (normalized.startsWith('./')) {\r\n normalized = normalized.substring(2);\r\n }\r\n\r\n // Agregar extensión si no la tiene\r\n if (!normalized.includes('.')) {\r\n normalized += '.js';\r\n }\r\n\r\n return normalized;\r\n }\r\n\r\n /**\r\n * Normalizar path de componente\r\n * @param {string} path - Path del componente\r\n * @returns {string} Path normalizado\r\n */\r\n normalizeComponentPath(path) {\r\n if (!path) return '';\r\n\r\n let normalized = path.trim();\r\n\r\n // Remover ./ inicial si está presente\r\n if (normalized.startsWith('./')) {\r\n normalized = normalized.substring(2);\r\n }\r\n\r\n // Agregar extensión si no la tiene\r\n if (!normalized.includes('.')) {\r\n normalized += '.js';\r\n }\r\n\r\n return normalized;\r\n }\r\n\r\n /**\r\n * Validar dependencias de imports\r\n * @param {Array} imports - Lista de imports\r\n * @param {Map} availableApps - Apps disponibles\r\n * @returns {Object} Resultado de validación\r\n */\r\n validateDependencies(imports, availableApps) {\r\n const result = {\r\n valid: [],\r\n invalid: [],\r\n missing: []\r\n };\r\n\r\n for (const importPath of imports) {\r\n const [appName, componentName] = importPath.split('.');\r\n\r\n if (!appName || !componentName) {\r\n result.invalid.push({\r\n import: importPath,\r\n reason: 'Invalid format. Use \"app.component\"'\r\n });\r\n continue;\r\n }\r\n\r\n const app = availableApps.get(appName);\r\n if (!app) {\r\n result.missing.push({\r\n import: importPath,\r\n app: appName,\r\n reason: 'App not registered'\r\n });\r\n continue;\r\n }\r\n\r\n const manifest = app.manifest;\r\n const exportExists = manifest?.wu?.exports?.[componentName];\r\n\r\n if (!exportExists) {\r\n result.invalid.push({\r\n import: importPath,\r\n reason: `Component ${componentName} not exported by ${appName}`\r\n });\r\n continue;\r\n }\r\n\r\n result.valid.push({\r\n import: importPath,\r\n app: appName,\r\n component: componentName,\r\n path: exportExists\r\n });\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Crear manifest programáticamente\r\n * @param {string} name - Nombre de la app\r\n * @param {Object} config - Configuración\r\n * @returns {Object} Manifest creado\r\n */\r\n create(name, config = {}) {\r\n const manifest = {\r\n name: name,\r\n entry: config.entry || 'index.js',\r\n wu: {\r\n exports: config.exports || {},\r\n imports: config.imports || [],\r\n routes: config.routes || [],\r\n permissions: config.permissions || []\r\n }\r\n };\r\n\r\n return this.normalize(manifest);\r\n }\r\n\r\n /**\r\n * Limpiar cache de manifests\r\n * @param {string} pattern - Patrón opcional para limpiar URLs específicas\r\n */\r\n clearCache(pattern) {\r\n if (pattern) {\r\n let regex;\r\n try {\r\n regex = new RegExp(pattern);\r\n } catch (err) {\r\n logger.warn(`[WuManifest] Invalid clearCache pattern: ${pattern} (${err.message})`);\r\n return;\r\n }\r\n for (const [url] of this.cache) {\r\n if (regex.test(url)) {\r\n this.cache.delete(url);\r\n logger.debug(`[WuManifest] 🗑️ Cleared cache for: ${url}`);\r\n }\r\n }\r\n } else {\r\n this.cache.clear();\r\n logger.debug(`[WuManifest] 🗑️ Manifest cache cleared completely`);\r\n }\r\n }\r\n\r\n /**\r\n * Obtener estadísticas del sistema de manifests\r\n */\r\n getStats() {\r\n return {\r\n cached: this.cache.size,\r\n schemas: this.schemas.size,\r\n cacheKeys: Array.from(this.cache.keys())\r\n };\r\n }\r\n}","/**\r\n * 🚀 WU-STORE: Ultra-High Performance State Management\r\n *\r\n * Basado en patrones de Disruptor y Vert.x\r\n * - Ring Buffer para zero-allocation\r\n * - Lock-free operations\r\n * - Event Bus para pub/sub\r\n * - API minimalista: get(), set(), on()\r\n */\r\n\r\n/**\r\n * @typedef {Object} WuStoreMetrics\r\n * @property {number} reads - Total read operations\r\n * @property {number} writes - Total write operations\r\n * @property {number} notifications - Total notifications sent\r\n * @property {number} bufferUtilization - Ring buffer utilization (0-1)\r\n * @property {number} listenerCount - Active listener count\r\n */\r\n\r\nexport class WuStore {\r\n constructor(bufferSize = 256) {\r\n // Ring Buffer configuration\r\n this.bufferSize = this.nextPowerOfTwo(bufferSize);\r\n this.mask = this.bufferSize - 1;\r\n this.buffer = new Array(this.bufferSize);\r\n this.cursor = 0;\r\n\r\n // State storage\r\n this.state = {};\r\n\r\n // Event listeners map: path -> Set of callbacks\r\n this.listeners = new Map();\r\n\r\n // Pattern listeners for wildcards\r\n this.patternListeners = new Map();\r\n\r\n // Performance metrics\r\n this.metrics = {\r\n reads: 0,\r\n writes: 0,\r\n notifications: 0\r\n };\r\n\r\n // Initialize ring buffer slots\r\n for (let i = 0; i < this.bufferSize; i++) {\r\n this.buffer[i] = { path: null, value: null, timestamp: 0 };\r\n }\r\n\r\n // No global pollution - proper library architecture\r\n }\r\n\r\n /**\r\n * Get value from store\r\n * @param {string} path - Dot notation path (e.g., 'user.name')\r\n * @returns {*} Value at path or entire state if no path\r\n */\r\n get(path) {\r\n this.metrics.reads++;\r\n\r\n if (!path) return this.state;\r\n\r\n // Reject __proto__/constructor/prototype to prevent leaking internals.\r\n // We return undefined rather than throwing — get() is read-only.\r\n const keys = path.split('.');\r\n if (!keys.every(WuStore._isSafeKey)) return undefined;\r\n\r\n return keys.reduce((obj, key) => obj?.[key], this.state);\r\n }\r\n\r\n /**\r\n * Set value in store with Ring Buffer\r\n * @param {string} path - Dot notation path\r\n * @param {*} value - Value to set\r\n * @returns {number} Sequence number\r\n */\r\n set(path, value) {\r\n this.metrics.writes++;\r\n\r\n // Reject paths that would pollute Object.prototype.\r\n // Throws so the caller gets a clear signal instead of a silent no-op.\r\n if (path) {\r\n const keys = path.split('.');\r\n for (const k of keys) {\r\n if (!WuStore._isSafeKey(k)) {\r\n throw new Error(`[WuStore] Unsafe key in path: \"${k}\" (path: \"${path}\")`);\r\n }\r\n }\r\n }\r\n\r\n // Write to ring buffer. Cursor is monotonic (returned as sequence number),\r\n // index wraps via `& mask`. The previous `% (bufferSize * bufferSize)` was\r\n // an arbitrary modulus that distorted bufferUtilization metrics — replaced\r\n // by a plain increment. At 1M writes/sec it takes >285 years to overflow.\r\n const sequence = this.cursor;\r\n this.cursor = this.cursor + 1;\r\n const index = sequence & this.mask;\r\n\r\n // Reuse buffer slot (zero allocation)\r\n const event = this.buffer[index];\r\n event.path = path;\r\n event.value = value;\r\n event.timestamp = performance.now();\r\n\r\n // Update state synchronously\r\n this.updateState(path, value);\r\n\r\n // Schedule async notifications (non-blocking)\r\n queueMicrotask(() => {\r\n this.notify(path, value);\r\n this.notifyPatterns(path, value);\r\n });\r\n\r\n return sequence;\r\n }\r\n\r\n /**\r\n * Subscribe to state changes\r\n * @param {string} pattern - Path or pattern (supports * wildcard)\r\n * @param {Function} callback - Callback function\r\n * @returns {Function} Unsubscribe function\r\n */\r\n on(pattern, callback) {\r\n // Check if pattern contains wildcards\r\n if (pattern.includes('*')) {\r\n // Pattern subscription\r\n if (!this.patternListeners.has(pattern)) {\r\n this.patternListeners.set(pattern, new Set());\r\n }\r\n this.patternListeners.get(pattern).add(callback);\r\n\r\n // Return unsubscribe function\r\n return () => {\r\n const listeners = this.patternListeners.get(pattern);\r\n if (listeners) {\r\n listeners.delete(callback);\r\n if (listeners.size === 0) {\r\n this.patternListeners.delete(pattern);\r\n }\r\n }\r\n };\r\n } else {\r\n // Direct path subscription\r\n if (!this.listeners.has(pattern)) {\r\n this.listeners.set(pattern, new Set());\r\n }\r\n this.listeners.get(pattern).add(callback);\r\n\r\n // Return unsubscribe function\r\n return () => {\r\n const listeners = this.listeners.get(pattern);\r\n if (listeners) {\r\n listeners.delete(callback);\r\n if (listeners.size === 0) {\r\n this.listeners.delete(pattern);\r\n }\r\n }\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Batch set multiple values\r\n * @param {Object} updates - Object with path:value pairs\r\n */\r\n batch(updates) {\r\n const sequences = [];\r\n\r\n for (const [path, value] of Object.entries(updates)) {\r\n sequences.push(this.set(path, value));\r\n }\r\n\r\n return sequences;\r\n }\r\n\r\n /**\r\n * Get current metrics\r\n * @returns {Object} Performance metrics\r\n */\r\n getMetrics() {\r\n // Once we've written at least `bufferSize` entries, the ring is fully\r\n // utilized (every slot has been touched). Before that, utilization grows\r\n // linearly with writes. Old metric divided `cursor / bufferSize` which\r\n // grew unboundedly because cursor is monotonic now.\r\n const utilization = Math.min(1, this.cursor / this.bufferSize);\r\n return {\r\n ...this.metrics,\r\n bufferUtilization: utilization,\r\n sequenceNumber: this.cursor,\r\n bufferSize: this.bufferSize,\r\n listenerCount: this.listeners.size + this.patternListeners.size\r\n };\r\n }\r\n\r\n // Private methods\r\n\r\n /**\r\n * Reject keys that would let a path traverse into Object.prototype.\r\n * Called by both set() (write guard) and get() (read guard).\r\n * @private\r\n */\r\n static _isSafeKey(key) {\r\n return key !== '__proto__' && key !== 'constructor' && key !== 'prototype';\r\n }\r\n\r\n nextPowerOfTwo(n) {\r\n return Math.pow(2, Math.ceil(Math.log2(n)));\r\n }\r\n\r\n updateState(path, value) {\r\n if (!path) {\r\n this.state = value;\r\n return;\r\n }\r\n\r\n const keys = path.split('.');\r\n // Defense in depth — set() already rejects unsafe paths, but updateState\r\n // is also reachable via batch() and future internals.\r\n if (!keys.every(WuStore._isSafeKey)) return;\r\n\r\n const last = keys.pop();\r\n\r\n // Create nested structure if needed. Use Object.create(null) for new\r\n // intermediates so they don't carry Object.prototype methods.\r\n let target = this.state;\r\n for (const key of keys) {\r\n if (\r\n !Object.prototype.hasOwnProperty.call(target, key) ||\r\n typeof target[key] !== 'object' ||\r\n target[key] === null\r\n ) {\r\n target[key] = {};\r\n }\r\n target = target[key];\r\n }\r\n\r\n target[last] = value;\r\n }\r\n\r\n notify(path, value) {\r\n this.metrics.notifications++;\r\n\r\n // Notify exact path listeners\r\n const exactListeners = this.listeners.get(path);\r\n if (exactListeners) {\r\n exactListeners.forEach(callback => {\r\n try {\r\n callback(value, path);\r\n } catch (error) {\r\n console.error('[WuStore] Listener error:', error);\r\n }\r\n });\r\n }\r\n\r\n // Notify parent path listeners\r\n const parts = path.split('.');\r\n for (let i = parts.length - 1; i > 0; i--) {\r\n const parentPath = parts.slice(0, i).join('.');\r\n const parentListeners = this.listeners.get(parentPath);\r\n if (parentListeners) {\r\n const parentValue = this.get(parentPath);\r\n parentListeners.forEach(callback => {\r\n try {\r\n callback(parentValue, parentPath);\r\n } catch (error) {\r\n console.error('[WuStore] Parent listener error:', error);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n notifyPatterns(path, value) {\r\n // Check all pattern listeners\r\n for (const [pattern, listeners] of this.patternListeners) {\r\n if (this.matchesPattern(path, pattern)) {\r\n listeners.forEach(callback => {\r\n try {\r\n callback({ path, value });\r\n } catch (error) {\r\n console.error('[WuStore] Pattern listener error:', error);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n matchesPattern(path, pattern) {\r\n // Convert pattern to regex\r\n // user.* matches user.name, user.email, etc.\r\n // *.name matches user.name, post.name, etc.\r\n // * matches everything\r\n\r\n if (pattern === '*') return true;\r\n\r\n const regexPattern = pattern\r\n .split('.')\r\n .map(part => part === '*' ? '[^.]+' : part.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'))\r\n .join('\\\\.');\r\n\r\n const regex = new RegExp(`^${regexPattern}$`);\r\n return regex.test(path);\r\n }\r\n\r\n /**\r\n * Clear all state and listeners\r\n */\r\n clear() {\r\n this.state = {};\r\n this.listeners.clear();\r\n this.patternListeners.clear();\r\n this.cursor = 0;\r\n\r\n // Clear buffer\r\n for (let i = 0; i < this.bufferSize; i++) {\r\n this.buffer[i].path = null;\r\n this.buffer[i].value = null;\r\n this.buffer[i].timestamp = 0;\r\n }\r\n }\r\n\r\n /**\r\n * Get recent events from ring buffer\r\n * @param {number} count - Number of recent events\r\n * @returns {Array} Recent events\r\n */\r\n getRecentEvents(count = 10) {\r\n const events = [];\r\n const start = Math.max(0, this.cursor - count);\r\n\r\n for (let i = start; i < this.cursor && events.length < count; i++) {\r\n const index = i & this.mask;\r\n const event = this.buffer[index];\r\n if (event.path) {\r\n events.push({\r\n path: event.path,\r\n value: event.value,\r\n timestamp: event.timestamp\r\n });\r\n }\r\n }\r\n\r\n return events.reverse();\r\n }\r\n}\r\n\r\n// Create singleton instance\r\nconst store = new WuStore();\r\n\r\n// Export both class and instance\r\nexport default store;\r\n","/**\r\n * 🎯 WU-APP: SIMPLIFIED API WRAPPER\r\n *\r\n * Wrapper simple para uso declarativo de microfrontends\r\n * Mantiene todo el core de wu-framework pero simplifica el uso\r\n */\r\nimport { logger } from './wu-logger.js';\r\n\r\n\r\nexport class WuApp {\r\n /**\r\n * @param {string} name - Nombre de la app\r\n * @param {Object} config - Configuración de la app\r\n * @param {string} config.url - URL donde está corriendo la app\r\n * @param {string} [config.container] - Selector del contenedor (opcional)\r\n * @param {Object} wu - Instancia de WuCore\r\n */\r\n constructor(name, config, wu) {\r\n this.name = name\r\n this.url = config.url\r\n this.container = config.container\r\n this.keepAlive = config.keepAlive || false\r\n this._wu = wu\r\n this._mounted = false\r\n this._autoInit = config.autoInit !== false // Default true\r\n\r\n // Auto-register app in wu-framework\r\n if (this._autoInit) {\r\n this._registerApp()\r\n }\r\n }\r\n\r\n /**\r\n * Registrar app en wu-framework\r\n * @private\r\n */\r\n _registerApp() {\r\n if (!this._wu.apps.has(this.name)) {\r\n this._wu.apps.set(this.name, {\r\n name: this.name,\r\n url: this.url,\r\n keepAlive: this.keepAlive,\r\n status: 'registered'\r\n })\r\n logger.debug(`📦 App registered: ${this.name} at ${this.url}`)\r\n }\r\n }\r\n\r\n /**\r\n * Montar la app en el contenedor\r\n * @param {string} [container] - Selector del contenedor (opcional, usa config.container si no se pasa)\r\n * @returns {Promise<void>}\r\n */\r\n async mount(container) {\r\n const targetContainer = container || this.container\r\n\r\n if (!targetContainer) {\r\n throw new Error(`Container not specified for app: ${this.name}`)\r\n }\r\n\r\n // Asegurar que wu-framework está inicializado\r\n if (!this._wu.isInitialized) {\r\n await this._wu.init({\r\n apps: [{ name: this.name, url: this.url }]\r\n })\r\n }\r\n\r\n // Montar usando wu-framework core\r\n await this._wu.mount(this.name, targetContainer)\r\n this._mounted = true\r\n\r\n return this\r\n }\r\n\r\n /**\r\n * Desmontar la app.\r\n * If keepAlive is configured, hides instead of destroying.\r\n *\r\n * @param {Object} [options] - { keepAlive, force }\r\n * @returns {Promise<WuApp>}\r\n */\r\n async unmount(options = {}) {\r\n if (!this._mounted && !this._wu.isHidden(this.name)) {\r\n logger.warn(`⚠️ App ${this.name} is not mounted`)\r\n return this\r\n }\r\n\r\n await this._wu.unmount(this.name, options)\r\n this._mounted = !this._wu.isHidden(this.name)\r\n\r\n return this\r\n }\r\n\r\n /**\r\n * Hide the app (keep-alive). Preserves all state for instant re-show.\r\n * @returns {Promise<WuApp>}\r\n */\r\n async hide() {\r\n if (!this._mounted) {\r\n logger.warn(`⚠️ App ${this.name} is not mounted`)\r\n return this\r\n }\r\n\r\n await this._wu.hide(this.name)\r\n this._mounted = false\r\n return this\r\n }\r\n\r\n /**\r\n * Show a hidden (keep-alive) app instantly.\r\n * @returns {Promise<WuApp>}\r\n */\r\n async show() {\r\n if (!this._wu.isHidden(this.name)) {\r\n logger.warn(`⚠️ App ${this.name} is not in keep-alive state`)\r\n return this\r\n }\r\n\r\n await this._wu.show(this.name)\r\n this._mounted = true\r\n return this\r\n }\r\n\r\n /**\r\n * Remontar la app (útil para recargas)\r\n * @param {string} [container] - Selector del contenedor\r\n * @returns {Promise<void>}\r\n */\r\n async remount(container) {\r\n await this.unmount({ force: true })\r\n await this.mount(container)\r\n return this\r\n }\r\n\r\n /**\r\n * Verificar si la app está montada\r\n * @returns {boolean}\r\n */\r\n get isMounted() {\r\n return this._mounted && this._wu.mounted?.has(this.name)\r\n }\r\n\r\n /**\r\n * Check if the app is in keep-alive (hidden) state\r\n * @returns {boolean}\r\n */\r\n get isHidden() {\r\n return this._wu.isHidden(this.name)\r\n }\r\n\r\n /**\r\n * Obtener información de la app\r\n * @returns {Object}\r\n */\r\n get info() {\r\n return {\r\n name: this.name,\r\n url: this.url,\r\n container: this.container,\r\n mounted: this.isMounted,\r\n status: this._wu.apps.get(this.name)?.status || 'unknown'\r\n }\r\n }\r\n\r\n /**\r\n * Recargar la app (limpiar cache y remontar)\r\n * @returns {Promise<void>}\r\n */\r\n async reload() {\r\n logger.debug(`🔄 Reloading app: ${this.name}`)\r\n\r\n await this.unmount()\r\n\r\n // Limpiar caches\r\n if (this._wu.loader?.clearCache) {\r\n this._wu.loader.clearCache(this.name)\r\n }\r\n if (this._wu.manifest?.clearCache) {\r\n this._wu.manifest.clearCache(this.name)\r\n }\r\n\r\n await this.mount()\r\n logger.debug(`✅ App reloaded: ${this.name}`)\r\n\r\n return this\r\n }\r\n\r\n /**\r\n * Verificar el estado de la app\r\n * @returns {Object}\r\n */\r\n async verify() {\r\n const container = document.querySelector(this.container)\r\n const hasShadowDOM = container?.shadowRoot !== null\r\n const hasContent = (container?.shadowRoot?.children?.length || 0) > 0\r\n\r\n return {\r\n name: this.name,\r\n mounted: this.isMounted,\r\n container: {\r\n found: !!container,\r\n selector: this.container,\r\n hasShadowDOM,\r\n hasContent\r\n },\r\n wu: {\r\n registered: this._wu.apps.has(this.name),\r\n mountedInWu: this._wu.mounted?.has(this.name)\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Shorthand para mount\r\n */\r\n async start(container) {\r\n return await this.mount(container)\r\n }\r\n\r\n /**\r\n * Shorthand para unmount\r\n */\r\n async stop() {\r\n return await this.unmount()\r\n }\r\n\r\n /**\r\n * Destruir la app completamente\r\n */\r\n async destroy() {\r\n await this.unmount({ force: true })\r\n this._wu.apps.delete(this.name)\r\n this._mounted = false\r\n logger.debug(`🗑️ App destroyed: ${this.name}`)\r\n }\r\n}\r\n","/**\r\n * 💾 WU-CACHE: SECURE INTERNAL CACHING\r\n *\r\n * Sistema de caché INTERNO con rate limiting.\r\n * - Rate limiting para prevenir abuso\r\n * - LRU eviction sobre cache en memoria\r\n * - Backing opcional en localStorage / sessionStorage\r\n * - TTL por entrada\r\n *\r\n * ⚠️ USO INTERNO: No exponer en API pública.\r\n *\r\n * Tamaños y límites:\r\n * `maxSize` (MB) acota la MEMORIA usada por el cache, no el storage del browser.\r\n * - localStorage típicamente da 5–10 MB por origen (varía por browser).\r\n * - sessionStorage similar.\r\n * Si configuras `storage: 'localStorage'` con `maxSize > 5`, el cache\r\n * evictará por LRU en memoria mucho antes de que el storage se llene, pero\r\n * QuotaExceededError aún puede ocurrir si otras partes del origen usan\r\n * localStorage. Cuando eso pasa, cleanOldStorageEntries borra el 25% más\r\n * antiguo y reintenta una vez.\r\n */\r\n\r\nimport { logger } from './wu-logger.js';\r\n\r\n// localStorage/sessionStorage realistic ceiling. Browsers vary (Safari ~5MB,\r\n// Chrome ~10MB, Firefox ~10MB). We warn if the user requests more than this\r\n// with a persistent backing so they know LRU eviction will dominate.\r\nconst STORAGE_PRACTICAL_LIMIT_MB = 5;\r\n\r\nexport class WuCache {\r\n constructor(options = {}) {\r\n this.config = {\r\n maxSize: options.maxSize || 50, // MB (in-memory cap)\r\n maxItems: options.maxItems || 100,\r\n defaultTTL: options.defaultTTL || 3600000, // 1 hour\r\n persistent: options.persistent !== false,\r\n storage: options.storage || 'memory'\r\n };\r\n\r\n // Diagnose misleading config: persistent storage with an oversized memory\r\n // cap. Logged once at construction so the user can correct it.\r\n const persistentStorage = this.config.storage === 'localStorage' || this.config.storage === 'sessionStorage';\r\n if (persistentStorage && this.config.persistent && this.config.maxSize > STORAGE_PRACTICAL_LIMIT_MB) {\r\n logger.wuWarn(\r\n `[WuCache] maxSize=${this.config.maxSize}MB configured with ${this.config.storage}, ` +\r\n `but browsers typically cap that backing at ~${STORAGE_PRACTICAL_LIMIT_MB}MB per origin. ` +\r\n `In-memory LRU will evict before storage fills. Consider maxSize ≤ ${STORAGE_PRACTICAL_LIMIT_MB} ` +\r\n `or storage: 'memory' for a large in-memory cache.`\r\n );\r\n }\r\n\r\n // 🔐 Rate limiting configuration\r\n this.rateLimiting = {\r\n enabled: options.rateLimiting !== false,\r\n maxOpsPerSecond: options.maxOpsPerSecond || 100,\r\n windowMs: 1000, // 1 second window\r\n cooldownMs: options.cooldownMs || 5000, // 5 second cooldown after limit\r\n operations: [],\r\n inCooldown: false,\r\n cooldownUntil: 0\r\n };\r\n\r\n // Rate limit notification flag (log only once per cooldown)\r\n this._rateLimitNotified = false;\r\n\r\n // Memory cache\r\n this.memoryCache = new Map();\r\n\r\n // LRU tracking\r\n this.accessOrder = new Map();\r\n\r\n // Statistics\r\n this.stats = {\r\n hits: 0,\r\n misses: 0,\r\n sets: 0,\r\n evictions: 0,\r\n size: 0,\r\n rateLimited: 0 // 🔐 Contador de operaciones rechazadas\r\n };\r\n }\r\n\r\n /**\r\n * 🔐 CHECK RATE LIMIT: Verificar si la operación está permitida\r\n * @returns {boolean} true si la operación está permitida\r\n */\r\n _checkRateLimit() {\r\n if (!this.rateLimiting.enabled) return true;\r\n\r\n const now = Date.now();\r\n\r\n // Verificar si estamos en cooldown\r\n if (this.rateLimiting.inCooldown) {\r\n if (now < this.rateLimiting.cooldownUntil) {\r\n this.stats.rateLimited++;\r\n return false;\r\n }\r\n // Cooldown terminado\r\n this.rateLimiting.inCooldown = false;\r\n this._rateLimitNotified = false;\r\n this.rateLimiting.operations = [];\r\n }\r\n\r\n // Limpiar operaciones antiguas (fuera de la ventana)\r\n const windowStart = now - this.rateLimiting.windowMs;\r\n this.rateLimiting.operations = this.rateLimiting.operations.filter(\r\n ts => ts > windowStart\r\n );\r\n\r\n // Verificar límite\r\n if (this.rateLimiting.operations.length >= this.rateLimiting.maxOpsPerSecond) {\r\n // Activar cooldown\r\n this.rateLimiting.inCooldown = true;\r\n this.rateLimiting.cooldownUntil = now + this.rateLimiting.cooldownMs;\r\n this.stats.rateLimited++;\r\n logger.warn(`[WuCache] 🚫 Rate limit exceeded. Cooldown for ${this.rateLimiting.cooldownMs}ms`);\r\n return false;\r\n }\r\n\r\n // Registrar operación\r\n this.rateLimiting.operations.push(now);\r\n return true;\r\n }\r\n\r\n /**\r\n * Handle rate-limited operations: log once per cooldown, return diagnostic object\r\n * @param {string} operation - The operation that was rate limited ('get' or 'set')\r\n * @param {string} key - The cache key that was rejected\r\n * @returns {{ rateLimited: true, operation: string, key: string }}\r\n */\r\n _onRateLimited(operation, key) {\r\n if (!this._rateLimitNotified) {\r\n const cooldownRemaining = Math.max(0, this.rateLimiting.cooldownUntil - Date.now());\r\n logger.warn(`[WuCache] Rate limited: ${operation} for key \"${key}\" rejected. ${cooldownRemaining}ms remaining in cooldown.`);\r\n this._rateLimitNotified = true;\r\n }\r\n return { rateLimited: true, operation, key };\r\n }\r\n\r\n /**\r\n * GET RATE LIMIT STATUS\r\n */\r\n getRateLimitStatus() {\r\n const now = Date.now();\r\n return {\r\n enabled: this.rateLimiting.enabled,\r\n inCooldown: this.rateLimiting.inCooldown,\r\n cooldownRemaining: this.rateLimiting.inCooldown\r\n ? Math.max(0, this.rateLimiting.cooldownUntil - now)\r\n : 0,\r\n currentOps: this.rateLimiting.operations.length,\r\n maxOps: this.rateLimiting.maxOpsPerSecond,\r\n rateLimited: this.stats.rateLimited\r\n };\r\n }\r\n\r\n /**\r\n * 🔍 GET: Obtener valor del cache\r\n * @param {string} key - Clave\r\n * @returns {*} Valor cacheado o null\r\n */\r\n get(key) {\r\n // 🔐 Check rate limit\r\n if (!this._checkRateLimit()) {\r\n this._onRateLimited('get', key);\r\n return null;\r\n }\r\n\r\n // 1. Buscar en memoria\r\n if (this.memoryCache.has(key)) {\r\n const entry = this.memoryCache.get(key);\r\n\r\n // Verificar TTL\r\n if (this.isExpired(entry)) {\r\n this.delete(key);\r\n this.stats.misses++;\r\n return null;\r\n }\r\n\r\n // Actualizar acceso (LRU)\r\n this.accessOrder.set(key, Date.now());\r\n this.stats.hits++;\r\n\r\n return entry.value;\r\n }\r\n\r\n // 2. Buscar en storage persistente\r\n if (this.config.persistent) {\r\n const stored = this.getFromStorage(key);\r\n if (stored) {\r\n // Restaurar a memoria\r\n this.memoryCache.set(key, stored);\r\n this.accessOrder.set(key, Date.now());\r\n this.stats.hits++;\r\n return stored.value;\r\n }\r\n }\r\n\r\n this.stats.misses++;\r\n return null;\r\n }\r\n\r\n /**\r\n * 💾 SET: Guardar valor en cache\r\n * @param {string} key - Clave\r\n * @param {*} value - Valor\r\n * @param {number} ttl - Time to live (ms)\r\n * @returns {boolean}\r\n */\r\n set(key, value, ttl) {\r\n // 🔐 Check rate limit\r\n if (!this._checkRateLimit()) {\r\n this._onRateLimited('set', key);\r\n return false;\r\n }\r\n\r\n try {\r\n const entry = {\r\n key,\r\n value,\r\n timestamp: Date.now(),\r\n ttl: ttl || this.config.defaultTTL,\r\n size: this.estimateSize(value)\r\n };\r\n\r\n // Verificar si necesitamos hacer espacio\r\n const hasSpace = this.ensureSpace(entry.size);\r\n if (hasSpace === false) {\r\n logger.warn(`[WuCache] ⚠️ Cannot cache item: ${key} (too large)`);\r\n return false;\r\n }\r\n\r\n // Guardar en memoria\r\n this.memoryCache.set(key, entry);\r\n this.accessOrder.set(key, Date.now());\r\n\r\n // Guardar en storage persistente\r\n if (this.config.persistent) {\r\n this.saveToStorage(key, entry);\r\n }\r\n\r\n this.stats.sets++;\r\n this.stats.size += entry.size;\r\n\r\n return true;\r\n } catch (error) {\r\n logger.warn('[WuCache] ⚠️ Failed to set cache:', error);\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * 🗑️ DELETE: Eliminar del cache\r\n * @param {string} key - Clave\r\n */\r\n delete(key) {\r\n const entry = this.memoryCache.get(key);\r\n if (entry) {\r\n this.stats.size -= entry.size;\r\n }\r\n\r\n this.memoryCache.delete(key);\r\n this.accessOrder.delete(key);\r\n\r\n if (this.config.persistent) {\r\n this.deleteFromStorage(key);\r\n }\r\n }\r\n\r\n /**\r\n * 🧹 CLEAR: Limpiar todo el cache\r\n */\r\n clear() {\r\n this.memoryCache.clear();\r\n this.accessOrder.clear();\r\n this.stats.size = 0;\r\n\r\n if (this.config.persistent) {\r\n this.clearStorage();\r\n }\r\n\r\n logger.debug('[WuCache] 🧹 Cache cleared');\r\n }\r\n\r\n /**\r\n * ⏰ IS EXPIRED: Verificar si entrada expiró\r\n * @param {Object} entry - Entrada del cache\r\n * @returns {boolean}\r\n */\r\n isExpired(entry) {\r\n if (!entry.ttl) return false;\r\n return Date.now() - entry.timestamp > entry.ttl;\r\n }\r\n\r\n /**\r\n * 📏 ESTIMATE SIZE: Estimar tamaño de un valor\r\n * @param {*} value - Valor\r\n * @returns {number} Tamaño en bytes\r\n */\r\n estimateSize(value) {\r\n if (typeof value === 'string') {\r\n return value.length * 2; // UTF-16\r\n }\r\n\r\n if (typeof value === 'object') {\r\n try {\r\n return JSON.stringify(value).length * 2;\r\n } catch {\r\n return 1000; // Estimación por defecto\r\n }\r\n }\r\n\r\n return 100; // Tamaño por defecto para primitivos\r\n }\r\n\r\n /**\r\n * 🎯 ENSURE SPACE: Asegurar espacio en cache (LRU eviction)\r\n * @param {number} neededSize - Tamaño necesario\r\n */\r\n ensureSpace(neededSize) {\r\n const maxSizeBytes = this.config.maxSize * 1024 * 1024;\r\n\r\n // 🛡️ FIX: Validar que el item no sea más grande que el máximo permitido\r\n if (neededSize > maxSizeBytes) {\r\n logger.warn(`[WuCache] ⚠️ Item size (${neededSize}) exceeds max cache size (${maxSizeBytes}). Skipping.`);\r\n return false;\r\n }\r\n\r\n // 🛡️ FIX: Límite de iteraciones para evitar loop infinito\r\n const maxIterations = this.config.maxItems + 10;\r\n let iterations = 0;\r\n\r\n // Verificar si necesitamos limpiar\r\n while ((this.stats.size + neededSize > maxSizeBytes ||\r\n this.memoryCache.size >= this.config.maxItems) &&\r\n iterations < maxIterations) {\r\n\r\n iterations++;\r\n\r\n // 🛡️ FIX: Si el cache está vacío pero aún no hay espacio, salir\r\n if (this.memoryCache.size === 0) {\r\n logger.warn('[WuCache] ⚠️ Cache empty but still no space. Breaking loop.');\r\n break;\r\n }\r\n\r\n // Encontrar entrada menos recientemente usada (LRU)\r\n let oldestKey = null;\r\n let oldestTime = Infinity;\r\n\r\n for (const [key, time] of this.accessOrder) {\r\n if (time < oldestTime) {\r\n oldestTime = time;\r\n oldestKey = key;\r\n }\r\n }\r\n\r\n if (oldestKey) {\r\n logger.debug(`[WuCache] 🗑️ Evicting LRU entry: ${oldestKey}`);\r\n this.delete(oldestKey);\r\n this.stats.evictions++;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n // 🛡️ FIX: Log si alcanzamos el límite de iteraciones\r\n if (iterations >= maxIterations) {\r\n console.error(`[WuCache] 🚨 Max eviction iterations reached (${maxIterations}). Possible infinite loop prevented.`);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * 💽 GET FROM STORAGE: Obtener del storage persistente\r\n * @param {string} key - Clave\r\n * @returns {Object|null}\r\n */\r\n getFromStorage(key) {\r\n try {\r\n const storage = this.getStorage();\r\n const stored = storage.getItem(`wu_cache_${key}`);\r\n\r\n if (stored) {\r\n return JSON.parse(stored);\r\n }\r\n } catch (error) {\r\n logger.warn('[WuCache] ⚠️ Failed to get from storage:', error);\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * 💾 SAVE TO STORAGE: Guardar en storage persistente\r\n * @param {string} key - Clave\r\n * @param {Object} entry - Entrada\r\n */\r\n saveToStorage(key, entry) {\r\n const storage = this.getStorage();\r\n try {\r\n storage.setItem(`wu_cache_${key}`, JSON.stringify(entry));\r\n } catch (error) {\r\n // Storage lleno, limpiar entradas antiguas\r\n logger.warn('[WuCache] ⚠️ Storage full, cleaning old entries');\r\n this.cleanOldStorageEntries();\r\n\r\n try {\r\n storage.setItem(`wu_cache_${key}`, JSON.stringify(entry));\r\n } catch {\r\n logger.warn('[WuCache] ⚠️ Failed to save to storage after cleanup');\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 🗑️ DELETE FROM STORAGE: Eliminar del storage\r\n * @param {string} key - Clave\r\n */\r\n deleteFromStorage(key) {\r\n try {\r\n const storage = this.getStorage();\r\n storage.removeItem(`wu_cache_${key}`);\r\n } catch (error) {\r\n logger.warn('[WuCache] ⚠️ Failed to delete from storage:', error);\r\n }\r\n }\r\n\r\n /**\r\n * 🧹 CLEAR STORAGE: Limpiar storage\r\n */\r\n clearStorage() {\r\n try {\r\n const storage = this.getStorage();\r\n const keys = Object.keys(storage);\r\n\r\n keys.forEach(key => {\r\n if (key.startsWith('wu_cache_')) {\r\n storage.removeItem(key);\r\n }\r\n });\r\n } catch (error) {\r\n logger.warn('[WuCache] ⚠️ Failed to clear storage:', error);\r\n }\r\n }\r\n\r\n /**\r\n * 🧹 CLEAN OLD STORAGE ENTRIES: Limpiar entradas antiguas del storage\r\n */\r\n cleanOldStorageEntries() {\r\n try {\r\n const storage = this.getStorage();\r\n const keys = Object.keys(storage);\r\n const entries = [];\r\n\r\n // Recopilar todas las entradas con timestamp\r\n keys.forEach(key => {\r\n if (key.startsWith('wu_cache_')) {\r\n try {\r\n const entry = JSON.parse(storage.getItem(key));\r\n entries.push({ key, timestamp: entry.timestamp });\r\n } catch {}\r\n }\r\n });\r\n\r\n // Ordenar por timestamp (más antiguas primero)\r\n entries.sort((a, b) => a.timestamp - b.timestamp);\r\n\r\n // Eliminar 25% de entradas más antiguas\r\n const toRemove = Math.ceil(entries.length * 0.25);\r\n for (let i = 0; i < toRemove; i++) {\r\n storage.removeItem(entries[i].key);\r\n }\r\n\r\n logger.debug(`[WuCache] 🧹 Cleaned ${toRemove} old storage entries`);\r\n } catch (error) {\r\n logger.warn('[WuCache] ⚠️ Failed to clean old storage entries:', error);\r\n }\r\n }\r\n\r\n /**\r\n * 💽 GET STORAGE: Obtener instancia de storage\r\n * @returns {Storage}\r\n */\r\n getStorage() {\r\n if (this.config.storage === 'localStorage') {\r\n return window.localStorage;\r\n } else if (this.config.storage === 'sessionStorage') {\r\n return window.sessionStorage;\r\n }\r\n // Fallback a memoria\r\n return {\r\n getItem: () => null,\r\n setItem: () => {},\r\n removeItem: () => {},\r\n clear: () => {}\r\n };\r\n }\r\n\r\n /**\r\n * 📊 GET STATS: Obtener estadísticas del cache\r\n * @returns {Object}\r\n */\r\n getStats() {\r\n const hitRate = this.stats.hits + this.stats.misses > 0\r\n ? (this.stats.hits / (this.stats.hits + this.stats.misses) * 100).toFixed(2)\r\n : 0;\r\n\r\n return {\r\n ...this.stats,\r\n hitRate: `${hitRate}%`,\r\n items: this.memoryCache.size,\r\n sizeMB: (this.stats.size / 1024 / 1024).toFixed(2)\r\n };\r\n }\r\n\r\n /**\r\n * ⚙️ CONFIGURE: Actualizar configuración\r\n * @param {Object} config - Nueva configuración\r\n */\r\n configure(config) {\r\n this.config = {\r\n ...this.config,\r\n ...config\r\n };\r\n }\r\n}\r\n","/**\r\n * 📡 WU-EVENT-BUS: SECURE PUB/SUB SYSTEM\r\n *\r\n * Sistema de eventos para comunicación entre microfrontends\r\n * - Pub/Sub pattern con validación de origen\r\n * - Event namespaces\r\n * - Wildcards\r\n * - Event replay\r\n * - Verificación de apps autorizadas\r\n */\r\nimport { logger } from './wu-logger.js';\r\n\r\n/**\r\n * @typedef {Object} WuEvent\r\n * @property {string} name - Event name\r\n * @property {*} data - Event payload\r\n * @property {number} timestamp - Event timestamp\r\n * @property {string} appName - Source app name\r\n * @property {Object} meta - Additional metadata\r\n * @property {boolean} verified - Whether origin was verified\r\n */\r\n\r\n/**\r\n * @typedef {Object} WuEventBusConfig\r\n * @property {number} [maxHistory=100] - Maximum events in history\r\n * @property {boolean} [enableReplay=true] - Enable event replay\r\n * @property {boolean} [enableWildcards=true] - Enable wildcard matching\r\n * @property {boolean} [logEvents=false] - Log all events\r\n * @property {boolean} [strictMode=false] - Reject unauthorized events\r\n * @property {boolean} [validateOrigin=true] - Validate event origins\r\n */\r\n\r\nexport class WuEventBus {\r\n constructor() {\r\n this.listeners = new Map();\r\n this.history = [];\r\n\r\n // Cache of compiled wildcard patterns. Avoids `new RegExp()` per emit per listener.\r\n this._wildcardCache = new Map();\r\n\r\n // 🔐 SEGURIDAD: Registro de apps autorizadas con tokens\r\n this.authorizedApps = new Map(); // appName -> { token, permissions }\r\n this.trustedEvents = new Set(['wu:*', 'system:*']); // Eventos del sistema\r\n // Internal subsystems whose appName is always trusted in strictMode.\r\n // These are framework-owned and never come from user-loaded micro-apps.\r\n this.trustedApps = new Set(['wu-ai', 'wu-mcp-bridge', 'wu-core', 'plugin']);\r\n // Per-subsystem secret tokens. A trusted appName WITHOUT the matching\r\n // token is rejected in strictMode — closes the spoofing vector where any\r\n // micro-app could pretend to be 'wu-ai' to bypass authorization.\r\n this._internalTokens = new Map();\r\n for (const app of this.trustedApps) {\r\n this._internalTokens.set(app, this._mintInternalToken());\r\n }\r\n\r\n // Auto-detect production environment for strictMode default\r\n const isProduction = typeof process !== 'undefined' && process.env?.NODE_ENV === 'production';\r\n\r\n this.config = {\r\n maxHistory: 100,\r\n enableReplay: true,\r\n enableWildcards: true,\r\n logEvents: false,\r\n // 🔐 Opciones de seguridad\r\n strictMode: isProduction, // Auto-enabled in production, permissive in development\r\n validateOrigin: true // Valida que appName sea una app registrada\r\n };\r\n\r\n this._permissiveWarned = false;\r\n\r\n this.stats = {\r\n emitted: 0,\r\n subscriptions: 0,\r\n rejected: 0 // Eventos rechazados por seguridad\r\n };\r\n }\r\n\r\n /**\r\n * 🔐 REGISTER APP: Registrar app autorizada para emitir eventos\r\n * @param {string} appName - Nombre de la app\r\n * @param {Object} options - { permissions: ['event:*'], token }\r\n * @returns {string} Token de autorización\r\n */\r\n registerApp(appName, options = {}) {\r\n const token = options.token || this._generateToken();\r\n\r\n this.authorizedApps.set(appName, {\r\n token,\r\n permissions: options.permissions || ['*'], // Por defecto puede emitir todo\r\n registeredAt: Date.now()\r\n });\r\n\r\n return token;\r\n }\r\n\r\n /**\r\n * 🔓 UNREGISTER APP: Desregistrar app\r\n * @param {string} appName\r\n */\r\n unregisterApp(appName) {\r\n this.authorizedApps.delete(appName);\r\n }\r\n\r\n /**\r\n * 🔐 VALIDATE ORIGIN: Verificar que el emisor está autorizado\r\n * @param {string} eventName\r\n * @param {string} appName\r\n * @param {string} token\r\n * @returns {boolean}\r\n */\r\n _validateOrigin(eventName, appName, token) {\r\n // Eventos del sistema siempre permitidos\r\n if (this._isSystemEvent(eventName)) {\r\n return true;\r\n }\r\n\r\n // Si no está en modo estricto, permitir todo\r\n if (!this.config.strictMode) {\r\n return true;\r\n }\r\n\r\n // Subsistemas internos: requieren el token minted al construir el bus.\r\n // Antes era confianza por nombre — cualquier micro-app podía declararse\r\n // `appName: 'wu-ai'` y bypassear strictMode. Ahora el nombre es metadata\r\n // y el token (closure-capturado por WuAI/Plugin/McpBridge) es identidad.\r\n if (this.trustedApps.has(appName)) {\r\n const expected = this._internalTokens.get(appName);\r\n return token === expected;\r\n }\r\n\r\n // Verificar que la app esté registrada\r\n const appInfo = this.authorizedApps.get(appName);\r\n if (!appInfo) {\r\n return false;\r\n }\r\n\r\n // Verificar token si se proporciona\r\n if (token && appInfo.token !== token) {\r\n return false;\r\n }\r\n\r\n // Verificar permisos\r\n return this._hasPermission(appInfo.permissions, eventName);\r\n }\r\n\r\n /**\r\n * 🔐 HAS PERMISSION: Verificar si la app tiene permiso para el evento\r\n */\r\n _hasPermission(permissions, eventName) {\r\n if (permissions.includes('*')) return true;\r\n\r\n return permissions.some(pattern => {\r\n if (pattern === eventName) return true;\r\n if (pattern.includes('*')) {\r\n return this.matchesWildcard(eventName, pattern);\r\n }\r\n return false;\r\n });\r\n }\r\n\r\n /**\r\n * 🔐 IS SYSTEM EVENT: Verificar si es un evento del sistema\r\n */\r\n _isSystemEvent(eventName) {\r\n return eventName.startsWith('wu:') ||\r\n eventName.startsWith('system:') ||\r\n eventName.startsWith('app:');\r\n }\r\n\r\n /**\r\n * Retrieve the secret token minted for an internal subsystem.\r\n * Only meaningful to subsystems WuCore explicitly trusts (wu-ai,\r\n * wu-mcp-bridge, plugin). External code calling this for a non-trusted\r\n * name gets null.\r\n *\r\n * The framework passes this token to internal subsystems at construction\r\n * (e.g. setupLazyAi reads it and gives it to WuAI). User code never sees\r\n * the token unless it imports core internals.\r\n *\r\n * @param {string} appName\r\n * @returns {string|null}\r\n */\r\n getInternalToken(appName) {\r\n if (!this.trustedApps.has(appName)) return null;\r\n return this._internalTokens.get(appName) || null;\r\n }\r\n\r\n /**\r\n * Mint a token for an internal subsystem. Uses crypto.randomUUID() when\r\n * available, the same fallback as _generateToken otherwise.\r\n * @private\r\n */\r\n _mintInternalToken() {\r\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\r\n return `wu-int-${crypto.randomUUID()}`;\r\n }\r\n const seg = () => Math.random().toString(36).slice(2, 11);\r\n return `wu-int-${Date.now().toString(36)}-${seg()}${seg()}`;\r\n }\r\n\r\n /**\r\n * 🔐 GENERATE TOKEN: Generar token único.\r\n * Prefers crypto.randomUUID() (collision-resistant, available in all modern\r\n * browsers and Node ≥ 19). Falls back to a longer Math.random() string only\r\n * if crypto isn't reachable.\r\n */\r\n _generateToken() {\r\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\r\n return `wu_${crypto.randomUUID()}`;\r\n }\r\n // Fallback: two stacked random segments to lower collision odds\r\n const seg = () => Math.random().toString(36).slice(2, 11);\r\n return `wu_${Date.now().toString(36)}_${seg()}${seg()}`;\r\n }\r\n\r\n /**\r\n * WARN PERMISSIVE MODE: Log a one-time warning when strictMode is off\r\n * Alerts developers that events are flowing without authorization checks\r\n */\r\n _warnPermissiveMode() {\r\n if (this._permissiveWarned) return;\r\n this._permissiveWarned = true;\r\n logger.warn(\r\n '[WuEventBus] strictMode is disabled. Events are emitted without authorization checks. ' +\r\n 'Enable strictMode for production by calling enableStrictMode() or setting NODE_ENV=production.'\r\n );\r\n }\r\n\r\n /**\r\n * 📢 EMIT: Emitir evento con validación de origen\r\n * @param {string} eventName - Nombre del evento\r\n * @param {*} data - Datos del evento\r\n * @param {Object} options - { appName, timestamp, meta, token }\r\n */\r\n emit(eventName, data, options = {}) {\r\n const appName = options.appName || 'unknown';\r\n\r\n // Warn once if running in permissive mode (strictMode off)\r\n if (!this.config.strictMode) {\r\n this._warnPermissiveMode();\r\n }\r\n\r\n // 🔐 Validar origen si está habilitado\r\n if (this.config.validateOrigin && this.config.strictMode) {\r\n if (!this._validateOrigin(eventName, appName, options.token)) {\r\n this.stats.rejected++;\r\n logger.warn(`[WuEventBus] 🚫 Event rejected: ${eventName} from ${appName} (unauthorized)`);\r\n return false;\r\n }\r\n }\r\n\r\n const event = {\r\n name: eventName,\r\n data,\r\n timestamp: options.timestamp || Date.now(),\r\n appName,\r\n meta: options.meta || {},\r\n // 🔐 Marcar si el origen fue verificado\r\n verified: this.authorizedApps.has(appName)\r\n };\r\n\r\n // Agregar a historial\r\n if (this.config.enableReplay) {\r\n this.addToHistory(event);\r\n }\r\n\r\n // Log si está habilitado\r\n if (this.config.logEvents) {\r\n logger.debug(`[WuEventBus] 📢 ${eventName}`, data);\r\n }\r\n\r\n // Notificar listeners exactos\r\n const exactListeners = this.listeners.get(eventName);\r\n if (exactListeners) {\r\n exactListeners.forEach(callback => {\r\n try {\r\n callback(event);\r\n } catch (error) {\r\n console.error(`[WuEventBus] ❌ Error in listener for ${eventName}:`, error);\r\n }\r\n });\r\n }\r\n\r\n // Notificar listeners con wildcards\r\n if (this.config.enableWildcards) {\r\n this.notifyWildcardListeners(eventName, event);\r\n }\r\n\r\n this.stats.emitted++;\r\n return true;\r\n }\r\n\r\n /**\r\n * 👂 ON: Suscribirse a evento\r\n */\r\n on(eventName, callback) {\r\n if (!this.listeners.has(eventName)) {\r\n this.listeners.set(eventName, new Set());\r\n }\r\n\r\n this.listeners.get(eventName).add(callback);\r\n this.stats.subscriptions++;\r\n\r\n return () => this.off(eventName, callback);\r\n }\r\n\r\n /**\r\n * 🔇 OFF: Desuscribirse de evento\r\n */\r\n off(eventName, callback) {\r\n const listeners = this.listeners.get(eventName);\r\n if (listeners) {\r\n listeners.delete(callback);\r\n if (listeners.size === 0) {\r\n this.listeners.delete(eventName);\r\n }\r\n this.stats.subscriptions--;\r\n }\r\n }\r\n\r\n /**\r\n * 🎯 ONCE: Suscribirse una sola vez\r\n */\r\n once(eventName, callback) {\r\n const wrappedCallback = (event) => {\r\n callback(event);\r\n this.off(eventName, wrappedCallback);\r\n };\r\n return this.on(eventName, wrappedCallback);\r\n }\r\n\r\n /**\r\n * 🌟 WILDCARD LISTENERS\r\n */\r\n notifyWildcardListeners(eventName, event) {\r\n for (const [pattern, listeners] of this.listeners) {\r\n if (this.matchesWildcard(eventName, pattern)) {\r\n listeners.forEach(callback => {\r\n try {\r\n callback(event);\r\n } catch (error) {\r\n console.error(`[WuEventBus] ❌ Error in wildcard listener for ${pattern}:`, error);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 🎯 MATCHES WILDCARD\r\n * Compiled regexes are cached in `_wildcardCache` to avoid recompiling on every emit.\r\n */\r\n matchesWildcard(eventName, pattern) {\r\n if (!pattern.includes('*')) return false;\r\n let regex = this._wildcardCache.get(pattern);\r\n if (!regex) {\r\n const regexPattern = pattern\r\n .replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&')\r\n .replace(/\\*/g, '.*');\r\n regex = new RegExp(`^${regexPattern}$`);\r\n this._wildcardCache.set(pattern, regex);\r\n }\r\n return regex.test(eventName);\r\n }\r\n\r\n /**\r\n * 📝 ADD TO HISTORY\r\n *\r\n * Note: kept as shift() rather than amortized slice. V8 optimizes\r\n * Array.prototype.shift() on PACKED_ELEMENTS arrays to amortized O(1)\r\n * via element-shifting heuristics. The previous concern about O(N) per\r\n * emit doesn't hold for the common case. Revisit only if you switch to\r\n * an array of sparse/holey shape.\r\n */\r\n addToHistory(event) {\r\n this.history.push(event);\r\n if (this.history.length > this.config.maxHistory) {\r\n this.history.shift();\r\n }\r\n }\r\n\r\n /**\r\n * 🔄 REPLAY\r\n */\r\n replay(eventNameOrPattern, callback) {\r\n const events = this.history.filter(event => {\r\n if (eventNameOrPattern.includes('*')) {\r\n return this.matchesWildcard(event.name, eventNameOrPattern);\r\n }\r\n return event.name === eventNameOrPattern;\r\n });\r\n\r\n events.forEach(event => {\r\n try {\r\n callback(event);\r\n } catch (error) {\r\n console.error(`[WuEventBus] ❌ Error replaying event:`, error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * 🧹 CLEAR HISTORY\r\n */\r\n clearHistory(eventNameOrPattern) {\r\n if (!eventNameOrPattern) {\r\n this.history = [];\r\n return;\r\n }\r\n\r\n this.history = this.history.filter(event => {\r\n if (eventNameOrPattern.includes('*')) {\r\n return !this.matchesWildcard(event.name, eventNameOrPattern);\r\n }\r\n return event.name !== eventNameOrPattern;\r\n });\r\n }\r\n\r\n /**\r\n * 📊 GET STATS\r\n */\r\n getStats() {\r\n return {\r\n ...this.stats,\r\n activeListeners: this.listeners.size,\r\n historySize: this.history.length,\r\n authorizedApps: this.authorizedApps.size,\r\n listenersByEvent: Array.from(this.listeners.entries()).map(([event, listeners]) => ({\r\n event,\r\n listeners: listeners.size\r\n }))\r\n };\r\n }\r\n\r\n /**\r\n * ⚙️ CONFIGURE\r\n */\r\n configure(config) {\r\n this.config = { ...this.config, ...config };\r\n }\r\n\r\n /**\r\n * 🔐 ENABLE STRICT MODE: Activar modo estricto de seguridad\r\n */\r\n enableStrictMode() {\r\n this.config.strictMode = true;\r\n }\r\n\r\n /**\r\n * 🔓 DISABLE STRICT MODE\r\n */\r\n disableStrictMode() {\r\n this.config.strictMode = false;\r\n }\r\n\r\n /**\r\n * 🗑️ REMOVE ALL\r\n */\r\n removeAll() {\r\n this.listeners.clear();\r\n this.stats.subscriptions = 0;\r\n }\r\n}\r\n","/**\r\n * ⚡ WU-PERFORMANCE: MICROFRONTEND LIFECYCLE MONITORING\r\n *\r\n * Monitoreo de performance específico para operaciones del framework:\r\n * - Tiempos de mount/unmount\r\n * - Tiempos de carga de módulos\r\n * - Estadísticas por app\r\n */\r\n\r\nimport { logger } from './wu-logger.js';\r\n\r\n// Prefix used for all entries surfaced to the User Timing API.\r\n// Filter by this in Chrome DevTools > Performance > User Timing.\r\nconst PERF_PREFIX = 'wu:';\r\n\r\n// Feature detection — done once at module load.\r\nconst HAS_USER_TIMING = (\r\n typeof performance !== 'undefined' &&\r\n typeof performance.mark === 'function' &&\r\n typeof performance.measure === 'function'\r\n);\r\n\r\nexport class WuPerformance {\r\n constructor() {\r\n this.metrics = new Map(); // appName -> metrics\r\n this.measurements = [];\r\n this.marks = new Map();\r\n\r\n this.config = {\r\n enabled: true,\r\n maxMeasurements: 1000,\r\n // Surface measurements via performance.mark/measure so they appear\r\n // in Chrome DevTools Performance timeline. Off by default has no\r\n // user impact other than DevTools entries — keep enabled.\r\n devtoolsTimeline: HAS_USER_TIMING\r\n };\r\n\r\n this.thresholds = {\r\n mount: 3000, // ms\r\n unmount: 1000, // ms\r\n load: 5000 // ms\r\n };\r\n\r\n logger.debug('[WuPerformance] ⚡ Framework performance monitoring initialized');\r\n }\r\n\r\n /**\r\n * Build the User Timing entry name for a given measurement.\r\n * @private\r\n */\r\n _entryName(appName, name, suffix = '') {\r\n return `${PERF_PREFIX}${appName}:${name}${suffix}`;\r\n }\r\n\r\n /**\r\n * 📊 START MEASURE: Iniciar medición\r\n * @param {string} name - Nombre de la medición\r\n * @param {string} appName - Nombre de la app (opcional)\r\n */\r\n startMeasure(name, appName = 'global') {\r\n const markName = `${appName}:${name}:start`;\r\n this.marks.set(markName, performance.now());\r\n\r\n // Surface in DevTools Performance > User Timing\r\n if (this.config.devtoolsTimeline) {\r\n try {\r\n performance.mark(this._entryName(appName, name, ':start'), {\r\n detail: { appName, name, source: 'wu-framework', phase: 'start' }\r\n });\r\n } catch {\r\n // Older browsers may not support the options object — try plain mark\r\n try { performance.mark(this._entryName(appName, name, ':start')); } catch {}\r\n }\r\n }\r\n\r\n logger.debug(`[WuPerformance] 📊 Measure started: ${markName}`);\r\n }\r\n\r\n /**\r\n * ⏹️ END MEASURE: Finalizar medición\r\n * @param {string} name - Nombre de la medición\r\n * @param {string} appName - Nombre de la app (opcional)\r\n * @returns {number} Duración en ms\r\n */\r\n endMeasure(name, appName = 'global') {\r\n const markName = `${appName}:${name}:start`;\r\n const startTime = this.marks.get(markName);\r\n\r\n if (!startTime) {\r\n // Puede ocurrir en React StrictMode (doble mount) — no es un error\r\n return 0;\r\n }\r\n\r\n const endTime = performance.now();\r\n const duration = endTime - startTime;\r\n this.marks.delete(markName);\r\n\r\n // Surface a measure entry in DevTools spanning start → end.\r\n // Modern form with `detail` gives a clickable metadata blob in the panel.\r\n if (this.config.devtoolsTimeline) {\r\n const measureName = this._entryName(appName, name);\r\n const startMark = this._entryName(appName, name, ':start');\r\n const endMark = this._entryName(appName, name, ':end');\r\n try {\r\n performance.mark(endMark, {\r\n detail: { appName, name, source: 'wu-framework', phase: 'end', duration }\r\n });\r\n performance.measure(measureName, {\r\n start: startTime,\r\n end: endTime,\r\n detail: { appName, name, source: 'wu-framework', duration }\r\n });\r\n } catch {\r\n // Fallback to classic 3-arg form (Safari < 16, older browsers)\r\n try {\r\n performance.mark(endMark);\r\n performance.measure(measureName, startMark, endMark);\r\n } catch {}\r\n }\r\n }\r\n\r\n // Registrar medición\r\n this.recordMeasurement({\r\n name,\r\n appName,\r\n duration,\r\n timestamp: Date.now(),\r\n type: 'duration'\r\n });\r\n\r\n // Verificar threshold\r\n if (this.checkThreshold(name, duration)) {\r\n logger.warn(`[WuPerformance] ⚠️ Threshold exceeded for ${name}: ${duration.toFixed(2)}ms`);\r\n }\r\n\r\n logger.debug(`[WuPerformance] ⏹️ Measure ended: ${markName} (${duration.toFixed(2)}ms)`);\r\n return duration;\r\n }\r\n\r\n /**\r\n * 📝 RECORD MEASUREMENT: Registrar medición\r\n * @param {Object} measurement - Medición\r\n */\r\n recordMeasurement(measurement) {\r\n this.measurements.push(measurement);\r\n\r\n // Mantener tamaño máximo\r\n if (this.measurements.length > this.config.maxMeasurements) {\r\n this.measurements.shift();\r\n }\r\n\r\n // Actualizar métricas de la app\r\n if (!this.metrics.has(measurement.appName)) {\r\n this.metrics.set(measurement.appName, {\r\n appName: measurement.appName,\r\n measurements: [],\r\n stats: {}\r\n });\r\n }\r\n\r\n const appMetrics = this.metrics.get(measurement.appName);\r\n appMetrics.measurements.push(measurement);\r\n\r\n // Calcular estadísticas\r\n this.calculateStats(measurement.appName);\r\n }\r\n\r\n /**\r\n * 📊 CALCULATE STATS: Calcular estadísticas\r\n * @param {string} appName - Nombre de la app\r\n */\r\n calculateStats(appName) {\r\n const appMetrics = this.metrics.get(appName);\r\n if (!appMetrics) return;\r\n\r\n const measurements = appMetrics.measurements;\r\n if (measurements.length === 0) return;\r\n\r\n // Agrupar por tipo de medición\r\n const byType = {};\r\n measurements.forEach(m => {\r\n if (!byType[m.name]) byType[m.name] = [];\r\n byType[m.name].push(m.duration);\r\n });\r\n\r\n // Calcular estadísticas para cada tipo\r\n appMetrics.stats = {};\r\n Object.entries(byType).forEach(([name, durations]) => {\r\n appMetrics.stats[name] = {\r\n count: durations.length,\r\n avg: durations.reduce((a, b) => a + b, 0) / durations.length,\r\n min: Math.min(...durations),\r\n max: Math.max(...durations),\r\n last: durations[durations.length - 1]\r\n };\r\n });\r\n }\r\n\r\n /**\r\n * 🎯 CHECK THRESHOLD: Verificar si se excedió threshold\r\n * @param {string} name - Nombre de la medición\r\n * @param {number} value - Valor\r\n * @returns {boolean}\r\n */\r\n checkThreshold(name, value) {\r\n const threshold = this.thresholds[name];\r\n return threshold && value > threshold;\r\n }\r\n\r\n /**\r\n * 📊 GENERATE REPORT: Generar reporte de performance del framework\r\n * @returns {Object}\r\n */\r\n generateReport() {\r\n const report = {\r\n timestamp: Date.now(),\r\n totalMeasurements: this.measurements.length,\r\n apps: {}\r\n };\r\n\r\n // Agregar métricas por app\r\n for (const [appName, metrics] of this.metrics) {\r\n report.apps[appName] = {\r\n measurementCount: metrics.measurements.length,\r\n stats: metrics.stats\r\n };\r\n }\r\n\r\n return report;\r\n }\r\n\r\n /**\r\n * Read User Timing entries created by this framework.\r\n * Useful for programmatic introspection without opening DevTools.\r\n *\r\n * @param {Object} [opts]\r\n * @param {'mark'|'measure'|'all'} [opts.type='all']\r\n * @param {string} [opts.appName] - Filter to a single app\r\n * @returns {PerformanceEntry[]}\r\n *\r\n * @example\r\n * const entries = wu.performance.getDevToolsEntries({ type: 'measure', appName: 'cart' });\r\n * entries.forEach(e => console.log(e.name, e.duration));\r\n */\r\n getDevToolsEntries(opts = {}) {\r\n if (!HAS_USER_TIMING) return [];\r\n const { type = 'all', appName } = opts;\r\n const prefix = appName ? `${PERF_PREFIX}${appName}:` : PERF_PREFIX;\r\n\r\n const filter = (entry) => entry.name.startsWith(prefix);\r\n const buckets = [];\r\n if (type === 'all' || type === 'mark') {\r\n try { buckets.push(...performance.getEntriesByType('mark').filter(filter)); } catch {}\r\n }\r\n if (type === 'all' || type === 'measure') {\r\n try { buckets.push(...performance.getEntriesByType('measure').filter(filter)); } catch {}\r\n }\r\n return buckets;\r\n }\r\n\r\n /**\r\n * Subscribe to wu-framework User Timing entries via PerformanceObserver.\r\n * Only entries whose name starts with `wu:` are delivered.\r\n *\r\n * @param {(entry: PerformanceEntry) => void} callback\r\n * @param {Object} [opts]\r\n * @param {'mark'|'measure'|'all'} [opts.type='measure']\r\n * @returns {Function} Unsubscribe function\r\n *\r\n * @example\r\n * const off = wu.performance.observe((e) => {\r\n * if (e.duration > 1000) console.warn('Slow:', e.name, e.duration);\r\n * });\r\n * // later\r\n * off();\r\n */\r\n observe(callback, opts = {}) {\r\n if (typeof PerformanceObserver === 'undefined' || typeof callback !== 'function') {\r\n return () => {};\r\n }\r\n const { type = 'measure' } = opts;\r\n const entryTypes = type === 'all' ? ['mark', 'measure'] : [type];\r\n\r\n let observer;\r\n try {\r\n observer = new PerformanceObserver((list) => {\r\n for (const entry of list.getEntries()) {\r\n if (entry.name.startsWith(PERF_PREFIX)) {\r\n try { callback(entry); } catch (e) {\r\n logger.warn(`[WuPerformance] observe callback threw: ${e?.message}`);\r\n }\r\n }\r\n }\r\n });\r\n observer.observe({ entryTypes });\r\n } catch (err) {\r\n logger.warn(`[WuPerformance] observe() unavailable: ${err?.message}`);\r\n return () => {};\r\n }\r\n return () => { try { observer.disconnect(); } catch {} };\r\n }\r\n\r\n /**\r\n * 📋 GET METRICS: Obtener métricas de una app\r\n * @param {string} appName - Nombre de la app\r\n * @returns {Object}\r\n */\r\n getMetrics(appName) {\r\n return this.metrics.get(appName) || null;\r\n }\r\n\r\n /**\r\n * 📊 GET ALL METRICS: Obtener todas las métricas\r\n * @returns {Object}\r\n */\r\n getAllMetrics() {\r\n const allMetrics = {};\r\n\r\n for (const [appName, metrics] of this.metrics) {\r\n allMetrics[appName] = metrics;\r\n }\r\n\r\n return allMetrics;\r\n }\r\n\r\n /**\r\n * 🧹 CLEAR METRICS: Limpiar métricas\r\n * @param {string} appName - Nombre de la app (opcional)\r\n */\r\n clearMetrics(appName) {\r\n if (appName) {\r\n this.metrics.delete(appName);\r\n this.measurements = this.measurements.filter(m => m.appName !== appName);\r\n } else {\r\n this.metrics.clear();\r\n this.measurements = [];\r\n }\r\n\r\n // Also evict User Timing entries so DevTools / getEntries() stay tidy.\r\n // Chrome buffers ~150 entries by default before truncating — keep ours small.\r\n this._clearTimelineEntries(appName);\r\n\r\n logger.debug(`[WuPerformance] 🧹 Metrics cleared${appName ? ` for ${appName}` : ''}`);\r\n }\r\n\r\n /**\r\n * Clear User Timing entries created by this module.\r\n * Filters by the `wu:` prefix (and optionally a specific appName) so we never\r\n * touch entries other libraries or the app itself created.\r\n * @private\r\n */\r\n _clearTimelineEntries(appName) {\r\n if (!HAS_USER_TIMING) return;\r\n const prefix = appName ? `${PERF_PREFIX}${appName}:` : PERF_PREFIX;\r\n\r\n try {\r\n for (const entry of performance.getEntriesByType('mark')) {\r\n if (entry.name.startsWith(prefix)) {\r\n performance.clearMarks(entry.name);\r\n }\r\n }\r\n for (const entry of performance.getEntriesByType('measure')) {\r\n if (entry.name.startsWith(prefix)) {\r\n performance.clearMeasures(entry.name);\r\n }\r\n }\r\n } catch {\r\n // Some embedded contexts disable the buffer — ignore\r\n }\r\n }\r\n\r\n /**\r\n * ⚙️ CONFIGURE: Configurar performance monitor\r\n * @param {Object} config - Nueva configuración\r\n */\r\n configure(config) {\r\n this.config = {\r\n ...this.config,\r\n ...config\r\n };\r\n\r\n if (config.thresholds) {\r\n this.thresholds = {\r\n ...this.thresholds,\r\n ...config.thresholds\r\n };\r\n }\r\n }\r\n}\r\n","/**\r\n * 🔌 WU-PLUGIN: SECURE PLUGIN SYSTEM\r\n *\r\n * Sistema de plugins con sandboxing de seguridad\r\n * - Plugin lifecycle (install, beforeMount, afterMount, etc.)\r\n * - Sandboxed API (plugins no tienen acceso completo al core)\r\n * - Permission system\r\n * - Timeout protection\r\n */\r\nimport { logger } from './wu-logger.js';\r\n\r\n\r\nexport class WuPluginSystem {\r\n constructor(core, options = {}) {\r\n this._core = core; // Privado - no expuesto a plugins\r\n this.plugins = new Map();\r\n this.hooks = new Map();\r\n\r\n // Hooks disponibles\r\n this.availableHooks = [\r\n 'beforeInit', 'afterInit',\r\n 'beforeMount', 'afterMount',\r\n 'beforeUnmount', 'afterUnmount',\r\n 'onError', 'onDestroy'\r\n ];\r\n\r\n // 🔐 Permisos disponibles\r\n this.availablePermissions = [\r\n 'mount', // Puede montar/desmontar apps\r\n 'events', // Puede emitir/escuchar eventos\r\n 'store', // Puede leer/escribir store\r\n 'apps', // Puede ver lista de apps\r\n 'config', // Puede modificar configuración\r\n 'unsafe' // Acceso completo (peligroso)\r\n ];\r\n\r\n // 🔐 Timeout para hooks (evita que plugins bloqueen)\r\n this.hookTimeout = options.hookTimeout || 5000; // Default: 5 segundos\r\n\r\n this.availableHooks.forEach(hook => {\r\n this.hooks.set(hook, []);\r\n });\r\n }\r\n\r\n /**\r\n * 🔐 CREATE SANDBOXED API: Crea API limitada para el plugin\r\n * @param {Array} permissions - Permisos del plugin\r\n * @returns {Object} API sandboxeada\r\n */\r\n _createSandboxedApi(permissions) {\r\n const api = {\r\n // Info básica siempre disponible\r\n version: this._core.version,\r\n info: this._core.info,\r\n\r\n // 📊 Métodos de solo lectura\r\n getAppInfo: (appName) => {\r\n const mounted = this._core.mounted.get(appName);\r\n if (!mounted) return null;\r\n return {\r\n name: appName,\r\n state: mounted.state,\r\n timestamp: mounted.timestamp\r\n };\r\n },\r\n\r\n getMountedApps: () => {\r\n return Array.from(this._core.mounted.keys());\r\n },\r\n\r\n getStats: () => this._core.getStats()\r\n };\r\n\r\n // 🔐 Agregar métodos según permisos\r\n if (permissions.includes('events') || permissions.includes('unsafe')) {\r\n // Read the internal token at api construction (closure-captured).\r\n // Used so strictMode accepts plugin emits as appName='plugin' without\r\n // letting random micro-apps spoof that identity.\r\n const pluginToken = this._core.eventBus.getInternalToken?.('plugin') || null;\r\n api.emit = (event, data) => this._core.eventBus.emit(event, data, {\r\n appName: 'plugin',\r\n token: pluginToken,\r\n });\r\n api.on = (event, cb) => this._core.eventBus.on(event, cb);\r\n api.off = (event, cb) => this._core.eventBus.off(event, cb);\r\n }\r\n\r\n if (permissions.includes('store') || permissions.includes('unsafe')) {\r\n api.getState = (path) => this._core.store.get(path);\r\n api.setState = (path, value) => this._core.store.set(path, value);\r\n }\r\n\r\n if (permissions.includes('mount') || permissions.includes('unsafe')) {\r\n api.mount = (appName, container) => this._core.mount(appName, container);\r\n api.unmount = (appName) => this._core.unmount(appName);\r\n }\r\n\r\n if (permissions.includes('config') || permissions.includes('unsafe')) {\r\n api.configure = (config) => {\r\n // Solo permitir configuración segura\r\n const safeKeys = ['debug', 'logLevel'];\r\n const safeConfig = {};\r\n for (const key of safeKeys) {\r\n if (key in config) safeConfig[key] = config[key];\r\n }\r\n Object.assign(this._core, safeConfig);\r\n };\r\n }\r\n\r\n // 🚨 Acceso completo solo con permiso 'unsafe'\r\n if (permissions.includes('unsafe')) {\r\n api._unsafeCore = this._core;\r\n logger.warn('[WuPlugin] ⚠️ Plugin has unsafe access to core!');\r\n }\r\n\r\n // Congelar API recursivamente para evitar modificaciones en cualquier nivel\r\n return WuPluginSystem._deepFreeze(api);\r\n }\r\n\r\n /**\r\n * Deep-freeze an object and all its nested plain objects and arrays.\r\n * Functions, DOM nodes, and other non-plain types are left untouched\r\n * so they remain callable / functional. A WeakSet guards against\r\n * circular references.\r\n *\r\n * @param {*} obj - The value to deep-freeze\r\n * @param {WeakSet} [seen] - Internal tracker for circular references\r\n * @returns {*} The same object, now deeply frozen\r\n */\r\n static _deepFreeze(obj, seen) {\r\n if (obj === null || obj === undefined) {\r\n return obj;\r\n }\r\n\r\n // Only freeze plain objects and arrays.\r\n // Functions must stay invocable; DOM nodes, class instances, etc.\r\n // should not be tampered with.\r\n const dominated = typeof obj === 'object';\r\n if (!dominated) {\r\n return obj;\r\n }\r\n\r\n const isPlainObject =\r\n Object.getPrototypeOf(obj) === Object.prototype ||\r\n Object.getPrototypeOf(obj) === null;\r\n const isArray = Array.isArray(obj);\r\n\r\n if (!isPlainObject && !isArray) {\r\n return obj;\r\n }\r\n\r\n // Circular-reference guard\r\n if (!seen) {\r\n seen = new WeakSet();\r\n }\r\n if (seen.has(obj)) {\r\n return obj;\r\n }\r\n seen.add(obj);\r\n\r\n // Recurse into own enumerable properties\r\n const keys = Object.keys(obj);\r\n for (let i = 0; i < keys.length; i++) {\r\n const value = obj[keys[i]];\r\n if (value !== null && value !== undefined && typeof value === 'object') {\r\n WuPluginSystem._deepFreeze(value, seen);\r\n }\r\n }\r\n\r\n return Object.freeze(obj);\r\n }\r\n\r\n /**\r\n * 🔐 VALIDATE PLUGIN: Validar estructura del plugin\r\n * @param {Object} plugin\r\n * @returns {boolean}\r\n */\r\n _validatePlugin(plugin) {\r\n if (!plugin || typeof plugin !== 'object') {\r\n throw new Error('[WuPlugin] Invalid plugin: must be an object');\r\n }\r\n\r\n if (!plugin.name || typeof plugin.name !== 'string') {\r\n throw new Error('[WuPlugin] Invalid plugin: must have a name (string)');\r\n }\r\n\r\n if (plugin.name.length > 50) {\r\n throw new Error('[WuPlugin] Invalid plugin: name too long (max 50 chars)');\r\n }\r\n\r\n // Validar que los hooks sean funciones\r\n for (const hookName of this.availableHooks) {\r\n if (plugin[hookName] && typeof plugin[hookName] !== 'function') {\r\n throw new Error(`[WuPlugin] Invalid plugin: ${hookName} must be a function`);\r\n }\r\n }\r\n\r\n // Validar permisos\r\n if (plugin.permissions) {\r\n if (!Array.isArray(plugin.permissions)) {\r\n throw new Error('[WuPlugin] Invalid plugin: permissions must be an array');\r\n }\r\n\r\n for (const perm of plugin.permissions) {\r\n if (!this.availablePermissions.includes(perm)) {\r\n throw new Error(`[WuPlugin] Invalid permission: ${perm}`);\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * 📦 USE: Instalar plugin con sandboxing\r\n * @param {Object|Function} plugin - Plugin o factory function\r\n * @param {Object} options - Opciones del plugin\r\n */\r\n use(plugin, options = {}) {\r\n // Si es una función, ejecutarla para obtener el plugin\r\n // Nota: factory functions NO reciben acceso al core\r\n if (typeof plugin === 'function') {\r\n plugin = plugin(options);\r\n }\r\n\r\n // Validar plugin\r\n this._validatePlugin(plugin);\r\n\r\n // Verificar si ya está instalado\r\n if (this.plugins.has(plugin.name)) {\r\n logger.warn(`[WuPlugin] Plugin \"${plugin.name}\" already installed`);\r\n return;\r\n }\r\n\r\n // Determinar permisos (por defecto: solo eventos)\r\n const permissions = plugin.permissions || ['events'];\r\n\r\n // 🔐 Crear API sandboxeada\r\n const sandboxedApi = this._createSandboxedApi(permissions);\r\n\r\n // Ejecutar install del plugin con API sandboxeada\r\n if (plugin.install) {\r\n try {\r\n plugin.install(sandboxedApi, options);\r\n } catch (error) {\r\n console.error(`[WuPlugin] Error installing \"${plugin.name}\":`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n // Registrar hooks del plugin con protección\r\n this.availableHooks.forEach(hookName => {\r\n if (typeof plugin[hookName] === 'function') {\r\n // Wrap el hook con timeout y try-catch\r\n const wrappedHook = this._wrapHook(plugin[hookName].bind(plugin), plugin.name, hookName);\r\n this.registerHook(hookName, wrappedHook);\r\n }\r\n });\r\n\r\n // Guardar plugin\r\n this.plugins.set(plugin.name, {\r\n plugin,\r\n options,\r\n permissions,\r\n sandboxedApi,\r\n installedAt: Date.now()\r\n });\r\n\r\n logger.debug(`[WuPlugin] ✅ Plugin \"${plugin.name}\" installed (permissions: ${permissions.join(', ')})`);\r\n }\r\n\r\n /**\r\n * 🔐 WRAP HOOK: Envolver hook con timeout y error handling\r\n */\r\n _wrapHook(hookFn, pluginName, hookName) {\r\n return async (context) => {\r\n const timeoutPromise = new Promise((_, reject) => {\r\n setTimeout(() => {\r\n reject(new Error(`Plugin \"${pluginName}\" hook \"${hookName}\" timed out after ${this.hookTimeout}ms`));\r\n }, this.hookTimeout);\r\n });\r\n\r\n try {\r\n // Race entre el hook y el timeout\r\n return await Promise.race([\r\n hookFn(context),\r\n timeoutPromise\r\n ]);\r\n } catch (error) {\r\n console.error(`[WuPlugin] Error in ${pluginName}.${hookName}:`, error);\r\n // No propagar error para no romper otros plugins\r\n return undefined;\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * 🪝 REGISTER HOOK\r\n */\r\n registerHook(hookName, callback) {\r\n if (!this.hooks.has(hookName)) {\r\n logger.warn(`[WuPlugin] Unknown hook: ${hookName}`);\r\n return;\r\n }\r\n this.hooks.get(hookName).push(callback);\r\n }\r\n\r\n /**\r\n * 🎯 CALL HOOK\r\n */\r\n async callHook(hookName, context) {\r\n const callbacks = this.hooks.get(hookName) || [];\r\n\r\n for (const callback of callbacks) {\r\n try {\r\n const result = await callback(context);\r\n if (result === false) {\r\n return false;\r\n }\r\n } catch (error) {\r\n console.error(`[WuPlugin] Error in hook ${hookName}:`, error);\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * 🗑️ UNINSTALL\r\n */\r\n uninstall(pluginName) {\r\n const pluginData = this.plugins.get(pluginName);\r\n if (!pluginData) {\r\n logger.warn(`[WuPlugin] Plugin \"${pluginName}\" not found`);\r\n return;\r\n }\r\n\r\n const { plugin, sandboxedApi } = pluginData;\r\n\r\n if (plugin.uninstall) {\r\n try {\r\n plugin.uninstall(sandboxedApi);\r\n } catch (error) {\r\n console.error(`[WuPlugin] Error uninstalling \"${pluginName}\":`, error);\r\n }\r\n }\r\n\r\n this.plugins.delete(pluginName);\r\n logger.debug(`[WuPlugin] ✅ Plugin \"${pluginName}\" uninstalled`);\r\n }\r\n\r\n /**\r\n * 📋 GET PLUGIN\r\n */\r\n getPlugin(pluginName) {\r\n return this.plugins.get(pluginName)?.plugin;\r\n }\r\n\r\n /**\r\n * 📊 GET STATS\r\n */\r\n getStats() {\r\n return {\r\n totalPlugins: this.plugins.size,\r\n plugins: Array.from(this.plugins.entries()).map(([name, data]) => ({\r\n name,\r\n permissions: data.permissions,\r\n installedAt: data.installedAt\r\n })),\r\n hooks: Array.from(this.hooks.entries()).map(([name, callbacks]) => ({\r\n name,\r\n callbacks: callbacks.length\r\n }))\r\n };\r\n }\r\n\r\n /**\r\n * 🧹 CLEANUP\r\n */\r\n cleanup() {\r\n for (const [name] of this.plugins) {\r\n this.uninstall(name);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 📦 PLUGIN HELPER: Helper para crear plugins\r\n * @param {Object} config - Configuración del plugin\r\n * @param {string} config.name - Nombre del plugin\r\n * @param {Array} config.permissions - Permisos requeridos\r\n */\r\nexport const createPlugin = (config) => {\r\n return {\r\n name: config.name,\r\n permissions: config.permissions || ['events'],\r\n install: config.install,\r\n uninstall: config.uninstall,\r\n beforeInit: config.beforeInit,\r\n afterInit: config.afterInit,\r\n beforeMount: config.beforeMount,\r\n afterMount: config.afterMount,\r\n beforeUnmount: config.beforeUnmount,\r\n afterUnmount: config.afterUnmount,\r\n onError: config.onError,\r\n onDestroy: config.onDestroy\r\n };\r\n};\r\n","/**\r\n * 🎯 WU-STRATEGIES: LOADING STRATEGIES\r\n *\r\n * Estrategias de carga para optimizar performance:\r\n * - Lazy: Carga solo cuando se monta\r\n * - Eager: Precarga en init\r\n * - Preload: Usa <link rel=\"prefetch\">\r\n * - Idle: Carga cuando el navegador está idle\r\n */\r\n\r\nimport { logger } from './wu-logger.js';\r\n\r\nexport class WuLoadingStrategy {\r\n constructor(core) {\r\n this.core = core;\r\n this.strategies = new Map();\r\n this.loadingQueue = [];\r\n this.isIdle = false;\r\n this._idleHandle = null; // current requestIdleCallback id\r\n this._idleFallback = null; // setTimeout id when rIC unavailable\r\n this._destroyed = false; // stops the self-rescheduling loop\r\n\r\n this.registerDefaultStrategies();\r\n this.setupIdleCallback();\r\n\r\n logger.debug('[WuStrategies] 🎯 Loading strategies initialized');\r\n }\r\n\r\n /**\r\n * 📋 REGISTER DEFAULT STRATEGIES\r\n */\r\n registerDefaultStrategies() {\r\n // Lazy: Solo carga cuando se necesita (no precarga)\r\n this.register('lazy', {\r\n shouldPreload: false,\r\n load: async (appName, config) => {\r\n logger.debug(`[Strategy:Lazy] Loading ${appName} on demand (no preload)`);\r\n // No hace nada, la app se carga cuando se monta\r\n return;\r\n }\r\n });\r\n\r\n // Eager: Carga inmediatamente en init\r\n this.register('eager', {\r\n shouldPreload: true,\r\n priority: 'high',\r\n load: async (appName, config) => {\r\n logger.debug(`[Strategy:Eager] Preloading ${appName} immediately`);\r\n\r\n // Cargar el módulo de la app\r\n const app = this.core.apps.get(appName);\r\n if (app) {\r\n const moduleUrl = await this.core.resolveModulePath(app);\r\n await import(/* @vite-ignore */ moduleUrl);\r\n logger.debug(`[Strategy:Eager] ✅ ${appName} preloaded`);\r\n }\r\n }\r\n });\r\n\r\n // Preload: Usa resource hints del navegador\r\n this.register('preload', {\r\n shouldPreload: true,\r\n priority: 'medium',\r\n load: async (appName, config) => {\r\n logger.debug(`[Strategy:Preload] Using resource hints for ${appName}`);\r\n\r\n // Crear <link rel=\"prefetch\">\r\n const app = this.core.apps.get(appName);\r\n if (app) {\r\n const moduleUrl = await this.core.resolveModulePath(app);\r\n\r\n const link = document.createElement('link');\r\n link.rel = 'prefetch';\r\n link.href = moduleUrl;\r\n link.as = 'script';\r\n document.head.appendChild(link);\r\n\r\n logger.debug(`[Strategy:Preload] ✅ Resource hint added for ${appName}`);\r\n }\r\n }\r\n });\r\n\r\n // Speculate: Uses Speculation Rules API (Chrome 121+) with fallbacks\r\n this.register('speculate', {\r\n shouldPreload: true,\r\n priority: 'medium',\r\n load: async (appName, config) => {\r\n if (this.core.prefetcher) {\r\n await this.core.prefetcher.prefetch(appName, {\r\n eagerness: config.eagerness || 'moderate'\r\n });\r\n }\r\n }\r\n });\r\n\r\n // Idle: Carga cuando el navegador está idle\r\n this.register('idle', {\r\n shouldPreload: false,\r\n load: async (appName, config) => {\r\n logger.debug(`[Strategy:Idle] Queueing ${appName} for idle loading`);\r\n\r\n return new Promise((resolve) => {\r\n this.loadingQueue.push({\r\n appName,\r\n config,\r\n resolve\r\n });\r\n\r\n // Si ya estamos idle, procesar inmediatamente\r\n if (this.isIdle) {\r\n this.processIdleQueue();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * 📦 REGISTER: Registrar estrategia personalizada\r\n * @param {string} name - Nombre de la estrategia\r\n * @param {Object} strategy - Configuración de la estrategia\r\n */\r\n register(name, strategy) {\r\n if (!strategy.load || typeof strategy.load !== 'function') {\r\n throw new Error('[WuStrategies] Strategy must have a load function');\r\n }\r\n\r\n this.strategies.set(name, {\r\n name,\r\n shouldPreload: strategy.shouldPreload || false,\r\n priority: strategy.priority || 'low',\r\n load: strategy.load\r\n });\r\n\r\n logger.debug(`[WuStrategies] Strategy \"${name}\" registered`);\r\n }\r\n\r\n /**\r\n * 🚀 LOAD: Cargar app con estrategia\r\n * @param {string} appName - Nombre de la app\r\n * @param {Object} config - Configuración con strategy\r\n * @returns {Promise}\r\n */\r\n async load(appName, config) {\r\n const strategyName = config.strategy || 'lazy';\r\n const strategy = this.strategies.get(strategyName);\r\n\r\n if (!strategy) {\r\n logger.warn(`[WuStrategies] Strategy \"${strategyName}\" not found, using lazy`);\r\n return await this.strategies.get('lazy').load(appName, config);\r\n }\r\n\r\n return await strategy.load(appName, config);\r\n }\r\n\r\n /**\r\n * 🎯 PRELOAD: Precargar apps según estrategia\r\n * @param {Array} apps - Apps a evaluar para precarga\r\n */\r\n async preload(apps) {\r\n const toPreload = apps.filter(app => {\r\n const strategy = this.strategies.get(app.strategy || 'lazy');\r\n return strategy.shouldPreload;\r\n });\r\n\r\n // Ordenar por prioridad\r\n toPreload.sort((a, b) => {\r\n const priorityOrder = { high: 0, medium: 1, low: 2 };\r\n const aPriority = this.strategies.get(a.strategy)?.priority || 'low';\r\n const bPriority = this.strategies.get(b.strategy)?.priority || 'low';\r\n return priorityOrder[aPriority] - priorityOrder[bPriority];\r\n });\r\n\r\n logger.debug(`[WuStrategies] Preloading ${toPreload.length} apps`);\r\n\r\n // Precargar en orden\r\n for (const app of toPreload) {\r\n try {\r\n await this.load(app.name, app);\r\n } catch (error) {\r\n console.error(`[WuStrategies] Failed to preload ${app.name}:`, error);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * ⏰ SETUP IDLE CALLBACK: Configurar idle loading\r\n */\r\n setupIdleCallback() {\r\n if (typeof window === 'undefined') return; // SSR no-op\r\n\r\n if ('requestIdleCallback' in window) {\r\n const idleCallback = (deadline) => {\r\n if (this._destroyed) return; // stop the loop on cleanup\r\n this.isIdle = true;\r\n this.processIdleQueue(deadline);\r\n // Re-schedule — but keep the handle so cleanup() can cancel us.\r\n this._idleHandle = requestIdleCallback(idleCallback);\r\n };\r\n this._idleHandle = requestIdleCallback(idleCallback);\r\n } else {\r\n // Fallback: usar setTimeout\r\n this._idleFallback = setTimeout(() => {\r\n if (this._destroyed) return;\r\n this.isIdle = true;\r\n this.processIdleQueue();\r\n }, 2000);\r\n }\r\n }\r\n\r\n /**\r\n * 📋 PROCESS IDLE QUEUE: Procesar cola de carga idle\r\n * @param {Object} deadline - IdleDeadline object\r\n */\r\n async processIdleQueue(deadline) {\r\n while (this.loadingQueue.length > 0) {\r\n // Si tenemos deadline y se acabó el tiempo, salir\r\n if (deadline && deadline.timeRemaining() <= 0) {\r\n break;\r\n }\r\n\r\n const item = this.loadingQueue.shift();\r\n\r\n try {\r\n const app = this.core.apps.get(item.appName);\r\n if (app) {\r\n const moduleUrl = await this.core.resolveModulePath(app);\r\n await import(/* @vite-ignore */ moduleUrl);\r\n logger.debug(`[Strategy:Idle] ✅ ${item.appName} loaded during idle time`);\r\n item.resolve(true);\r\n } else {\r\n item.resolve(null);\r\n }\r\n } catch (error) {\r\n console.error(`[Strategy:Idle] Failed to load ${item.appName}:`, error);\r\n item.resolve(null);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 📊 GET STATS: Estadísticas de estrategias\r\n * @returns {Object}\r\n */\r\n getStats() {\r\n return {\r\n totalStrategies: this.strategies.size,\r\n strategies: Array.from(this.strategies.keys()),\r\n idleQueueSize: this.loadingQueue.length,\r\n isIdle: this.isIdle\r\n };\r\n }\r\n\r\n /**\r\n * 🧹 CLEANUP: Limpiar estrategias\r\n */\r\n cleanup() {\r\n this._destroyed = true;\r\n if (this._idleHandle != null && typeof cancelIdleCallback === 'function') {\r\n cancelIdleCallback(this._idleHandle);\r\n this._idleHandle = null;\r\n }\r\n if (this._idleFallback != null) {\r\n clearTimeout(this._idleFallback);\r\n this._idleFallback = null;\r\n }\r\n // Resolve pending queue items so awaiters don't hang forever\r\n for (const item of this.loadingQueue) {\r\n try { item.resolve(null); } catch {}\r\n }\r\n this.loadingQueue = [];\r\n logger.debug('[WuStrategies] 🧹 Strategies cleaned up');\r\n }\r\n}\r\n","/**\r\n * 🛡️ WU-ERROR-BOUNDARY: ADVANCED ERROR HANDLING\r\n *\r\n * Sistema de error boundaries con:\r\n * - Chain of Responsibility pattern\r\n * - Recovery strategies\r\n * - Error classification\r\n * - Fallback rendering\r\n */\r\n\r\nimport { logger } from './wu-logger.js';\r\n\r\nexport class WuErrorBoundary {\r\n constructor(core) {\r\n this.core = core;\r\n this.handlers = [];\r\n this.errorLog = [];\r\n this.maxErrorLog = 100;\r\n\r\n this.config = {\r\n maxRetries: 3,\r\n retryDelay: 1000,\r\n showErrorUI: true\r\n };\r\n\r\n this.registerDefaultHandlers();\r\n\r\n logger.debug('[WuErrorBoundary] 🛡️ Error boundary initialized');\r\n }\r\n\r\n /**\r\n * 📋 REGISTER DEFAULT HANDLERS: Chain of responsibility\r\n */\r\n registerDefaultHandlers() {\r\n // 1. Network Error Handler\r\n this.register({\r\n name: 'network',\r\n canHandle: (error) => {\r\n return error.name === 'TypeError' &&\r\n (error.message.includes('fetch') || error.message.includes('network'));\r\n },\r\n handle: async (error, context) => {\r\n logger.debug('[ErrorHandler:Network] Handling network error');\r\n\r\n // Retry con backoff\r\n if (context.retryCount < this.config.maxRetries) {\r\n const delay = this.config.retryDelay * Math.pow(2, context.retryCount);\r\n logger.debug(`[ErrorHandler:Network] Retrying in ${delay}ms...`);\r\n\r\n await new Promise(resolve => setTimeout(resolve, delay));\r\n\r\n return {\r\n recovered: true,\r\n action: 'retry',\r\n retryCount: context.retryCount + 1\r\n };\r\n }\r\n\r\n return {\r\n recovered: false,\r\n action: 'fallback',\r\n message: 'Network error: Please check your connection'\r\n };\r\n }\r\n });\r\n\r\n // 2. Script Load Error Handler\r\n this.register({\r\n name: 'script-load',\r\n canHandle: (error) => {\r\n return error.name === 'Error' &&\r\n (error.message.includes('Loading') ||\r\n error.message.includes('Failed to fetch'));\r\n },\r\n handle: async (error, context) => {\r\n logger.debug('[ErrorHandler:ScriptLoad] Handling script load error');\r\n\r\n // Intentar URL alternativa si existe\r\n if (context.fallbackUrl) {\r\n logger.debug('[ErrorHandler:ScriptLoad] Trying fallback URL');\r\n return {\r\n recovered: true,\r\n action: 'use-fallback-url',\r\n url: context.fallbackUrl\r\n };\r\n }\r\n\r\n return {\r\n recovered: false,\r\n action: 'fallback',\r\n message: 'Failed to load microfrontend'\r\n };\r\n }\r\n });\r\n\r\n // 3. Mount Error Handler\r\n this.register({\r\n name: 'mount',\r\n canHandle: (error) => {\r\n return error.message && error.message.includes('mount');\r\n },\r\n handle: async (error, context) => {\r\n logger.debug('[ErrorHandler:Mount] Handling mount error');\r\n\r\n // Limpiar y reintentar\r\n if (context.retryCount < 2) {\r\n logger.debug('[ErrorHandler:Mount] Cleaning up and retrying...');\r\n\r\n // Cleanup\r\n try {\r\n await this.core.unmount(context.appName);\r\n } catch (cleanupError) {\r\n logger.warn('[ErrorHandler:Mount] Cleanup failed:', cleanupError);\r\n }\r\n\r\n await new Promise(resolve => setTimeout(resolve, 500));\r\n\r\n return {\r\n recovered: true,\r\n action: 'retry',\r\n retryCount: context.retryCount + 1\r\n };\r\n }\r\n\r\n return {\r\n recovered: false,\r\n action: 'fallback',\r\n message: 'Failed to mount application'\r\n };\r\n }\r\n });\r\n\r\n // 4. Timeout Error Handler\r\n this.register({\r\n name: 'timeout',\r\n canHandle: (error) => {\r\n return error.name === 'TimeoutError' ||\r\n error.message.includes('timeout');\r\n },\r\n handle: async (error, context) => {\r\n logger.debug('[ErrorHandler:Timeout] Handling timeout error');\r\n\r\n // Aumentar timeout y reintentar\r\n if (context.retryCount < 2) {\r\n return {\r\n recovered: true,\r\n action: 'retry-with-longer-timeout',\r\n timeout: (context.timeout || 5000) * 2,\r\n retryCount: context.retryCount + 1\r\n };\r\n }\r\n\r\n return {\r\n recovered: false,\r\n action: 'fallback',\r\n message: 'Operation timed out'\r\n };\r\n }\r\n });\r\n\r\n // 5. Generic Error Handler (fallback)\r\n this.register({\r\n name: 'generic',\r\n canHandle: () => true, // Maneja todo\r\n handle: async (error, context) => {\r\n logger.debug('[ErrorHandler:Generic] Handling generic error');\r\n\r\n return {\r\n recovered: false,\r\n action: 'fallback',\r\n message: error.message || 'An unexpected error occurred'\r\n };\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * 📦 REGISTER: Registrar error handler\r\n * @param {Object} handler - Error handler { name, canHandle, handle }\r\n */\r\n register(handler) {\r\n if (!handler.name || !handler.canHandle || !handler.handle) {\r\n throw new Error('[WuErrorBoundary] Handler must have name, canHandle, and handle');\r\n }\r\n\r\n this.handlers.push(handler);\r\n logger.debug(`[WuErrorBoundary] Handler \"${handler.name}\" registered`);\r\n }\r\n\r\n /**\r\n * 🎯 HANDLE: Manejar error con chain of responsibility\r\n * @param {Error} error - Error a manejar\r\n * @param {Object} context - Contexto del error\r\n * @returns {Promise<Object>} Recovery result\r\n */\r\n async handle(error, context = {}) {\r\n // Agregar valores por defecto\r\n context = {\r\n retryCount: 0,\r\n timestamp: Date.now(),\r\n ...context\r\n };\r\n\r\n // Log error\r\n this.logError(error, context);\r\n\r\n // Buscar handler que pueda manejar este error\r\n for (const handler of this.handlers) {\r\n try {\r\n if (handler.canHandle(error, context)) {\r\n logger.debug(`[WuErrorBoundary] Using handler: ${handler.name}`);\r\n\r\n const result = await handler.handle(error, context);\r\n\r\n if (result.recovered) {\r\n logger.debug(`[WuErrorBoundary] ✅ Error recovered by ${handler.name}`);\r\n return result;\r\n }\r\n\r\n // Si no se recuperó, renderizar fallback\r\n if (result.action === 'fallback' && this.config.showErrorUI) {\r\n this.renderFallback(context, result);\r\n }\r\n\r\n return result;\r\n }\r\n } catch (handlerError) {\r\n console.error(`[WuErrorBoundary] Handler \"${handler.name}\" failed:`, handlerError);\r\n }\r\n }\r\n\r\n // No handler pudo manejar el error\r\n console.error('[WuErrorBoundary] ❌ No handler could handle the error');\r\n\r\n return {\r\n recovered: false,\r\n action: 'unhandled',\r\n message: 'Unhandled error'\r\n };\r\n }\r\n\r\n /**\r\n * 🎨 RENDER FALLBACK: Renderizar UI de error\r\n * @param {Object} context - Contexto del error\r\n * @param {Object} result - Resultado del handler\r\n */\r\n renderFallback(context, result) {\r\n if (!context.container) {\r\n logger.warn('[WuErrorBoundary] No container to render fallback');\r\n return;\r\n }\r\n\r\n const container = typeof context.container === 'string'\r\n ? document.querySelector(context.container)\r\n : context.container;\r\n\r\n if (!container) return;\r\n\r\n // Limpiar container\r\n container.innerHTML = '';\r\n\r\n // Crear UI de error\r\n const errorUI = document.createElement('div');\r\n errorUI.className = 'wu-error-boundary';\r\n\r\n Object.assign(errorUI.style, {\r\n padding: '2rem',\r\n borderRadius: '8px',\r\n background: '#fff3cd',\r\n border: '1px solid #ffc107',\r\n color: '#856404',\r\n fontFamily: 'system-ui, -apple-system, sans-serif',\r\n textAlign: 'center'\r\n });\r\n\r\n const icon = document.createElement('div');\r\n icon.textContent = '⚠️';\r\n icon.style.fontSize = '3rem';\r\n icon.style.marginBottom = '1rem';\r\n\r\n const title = document.createElement('h3');\r\n title.textContent = 'Application Error';\r\n title.style.margin = '0 0 0.5rem 0';\r\n\r\n const message = document.createElement('p');\r\n message.textContent = result.message || 'An error occurred';\r\n message.style.margin = '0 0 1rem 0';\r\n\r\n const button = document.createElement('button');\r\n button.textContent = '🔄 Reload';\r\n Object.assign(button.style, {\r\n padding: '0.5rem 1rem',\r\n background: '#ffc107',\r\n border: 'none',\r\n borderRadius: '4px',\r\n cursor: 'pointer',\r\n fontWeight: 'bold',\r\n color: '#000'\r\n });\r\n\r\n button.addEventListener('click', () => window.location.reload());\r\n\r\n errorUI.appendChild(icon);\r\n errorUI.appendChild(title);\r\n errorUI.appendChild(message);\r\n errorUI.appendChild(button);\r\n\r\n container.appendChild(errorUI);\r\n }\r\n\r\n /**\r\n * 📝 LOG ERROR: Registrar error\r\n * @param {Error} error - Error\r\n * @param {Object} context - Contexto\r\n */\r\n logError(error, context) {\r\n // Truncate stack to first 5 lines to prevent retaining large object references\r\n const stack = error.stack ? error.stack.split('\\n').slice(0, 5).join('\\n') : '';\r\n\r\n // Shallow-copy context to avoid retaining references to live objects\r\n const safeContext = {};\r\n for (const key of Object.keys(context)) {\r\n const val = context[key];\r\n if (typeof val === 'string' || typeof val === 'number' || typeof val === 'boolean' || val === null) {\r\n safeContext[key] = val;\r\n } else {\r\n safeContext[key] = String(val);\r\n }\r\n }\r\n\r\n const errorEntry = {\r\n error: {\r\n name: error.name,\r\n message: error.message,\r\n stack\r\n },\r\n context: safeContext,\r\n timestamp: Date.now()\r\n };\r\n\r\n this.errorLog.push(errorEntry);\r\n\r\n // Maintain log limit\r\n if (this.errorLog.length > this.maxErrorLog) {\r\n this.errorLog.shift();\r\n }\r\n }\r\n\r\n /**\r\n * 📋 GET ERROR LOG: Obtener log de errores\r\n * @param {number} limit - Límite de errores a retornar\r\n * @returns {Array}\r\n */\r\n getErrorLog(limit = 10) {\r\n return this.errorLog.slice(-limit);\r\n }\r\n\r\n /**\r\n * 📊 GET STATS: Estadísticas de errores\r\n * @returns {Object}\r\n */\r\n getStats() {\r\n const errorsByType = {};\r\n\r\n this.errorLog.forEach(entry => {\r\n const type = entry.error.name || 'Unknown';\r\n errorsByType[type] = (errorsByType[type] || 0) + 1;\r\n });\r\n\r\n return {\r\n totalErrors: this.errorLog.length,\r\n handlers: this.handlers.length,\r\n errorsByType,\r\n recentErrors: this.getErrorLog(5)\r\n };\r\n }\r\n\r\n /**\r\n * ⚙️ CONFIGURE: Configurar error boundary\r\n * @param {Object} config - Nueva configuración\r\n */\r\n configure(config) {\r\n this.config = {\r\n ...this.config,\r\n ...config\r\n };\r\n }\r\n\r\n /**\r\n * 🧹 CLEANUP: Limpiar error boundary.\r\n * Clears the error log AND the handler chain. If you re-init (e.g.\r\n * via WuCore destroy → new framework instance), default handlers\r\n * are re-registered fresh by the next constructor call.\r\n *\r\n * Pre-v2.0 cleanup only emptied the log, so destroy+reinit doubled\r\n * the default handlers each cycle.\r\n */\r\n cleanup() {\r\n this.errorLog = [];\r\n this.handlers = [];\r\n logger.debug('[WuErrorBoundary] 🧹 Error boundary cleaned up');\r\n }\r\n}\r\n","/**\r\n * 🪝 WU-HOOKS: LIFECYCLE MIDDLEWARE SYSTEM\r\n *\r\n * Sistema de hooks basado en middleware pattern para control fino:\r\n * - Middleware chain con next()\r\n * - Puede cancelar operaciones (no llamar next)\r\n * - Puede modificar contexto\r\n * - Prioridad de hooks\r\n * - Async/await support\r\n */\r\n\r\nimport { logger } from './wu-logger.js';\r\n\r\nexport class WuLifecycleHooks {\r\n constructor(core) {\r\n this.core = core;\r\n this.hooks = new Map();\r\n this.executionLog = [];\r\n this.maxLogSize = 100;\r\n\r\n // Lifecycle phases disponibles\r\n this.lifecyclePhases = [\r\n 'beforeInit', // Antes de inicializar framework\r\n 'afterInit', // Después de inicializar\r\n 'beforeLoad', // Antes de cargar una app\r\n 'afterLoad', // Después de cargar\r\n 'beforeMount', // Antes de montar\r\n 'afterMount', // Después de montar\r\n 'beforeUnmount', // Antes de desmontar\r\n 'afterUnmount', // Después de desmontar\r\n 'beforeDestroy', // Antes de destruir framework\r\n 'afterDestroy' // Después de destruir\r\n ];\r\n\r\n // Inicializar hooks\r\n this.lifecyclePhases.forEach(phase => {\r\n this.hooks.set(phase, []);\r\n });\r\n\r\n logger.debug('[WuHooks] 🪝 Lifecycle hooks initialized');\r\n }\r\n\r\n /**\r\n * 📦 USE: Registrar middleware hook\r\n * @param {string} phase - Fase del lifecycle\r\n * @param {Function} middleware - Función middleware (context, next)\r\n * @param {Object} options - { priority, name }\r\n */\r\n use(phase, middleware, options = {}) {\r\n if (!this.hooks.has(phase)) {\r\n throw new Error(`[WuHooks] Unknown lifecycle phase: ${phase}`);\r\n }\r\n\r\n if (typeof middleware !== 'function') {\r\n throw new Error('[WuHooks] Middleware must be a function');\r\n }\r\n\r\n const hook = {\r\n middleware,\r\n name: options.name || `hook_${Date.now()}`,\r\n priority: options.priority || 0,\r\n registeredAt: Date.now()\r\n };\r\n\r\n const hooks = this.hooks.get(phase);\r\n hooks.push(hook);\r\n\r\n // Ordenar por prioridad (mayor primero)\r\n hooks.sort((a, b) => b.priority - a.priority);\r\n\r\n logger.debug(`[WuHooks] Hook \"${hook.name}\" registered for ${phase} (priority: ${hook.priority})`);\r\n\r\n // Retornar función para desregistrar\r\n return () => this.remove(phase, hook.name);\r\n }\r\n\r\n /**\r\n * 🗑️ REMOVE: Remover hook\r\n * @param {string} phase - Fase del lifecycle\r\n * @param {string} name - Nombre del hook\r\n */\r\n remove(phase, name) {\r\n if (!this.hooks.has(phase)) return;\r\n\r\n const hooks = this.hooks.get(phase);\r\n const index = hooks.findIndex(h => h.name === name);\r\n\r\n if (index > -1) {\r\n hooks.splice(index, 1);\r\n logger.debug(`[WuHooks] Hook \"${name}\" removed from ${phase}`);\r\n }\r\n }\r\n\r\n /**\r\n * 🎯 EXECUTE: Ejecutar middleware chain\r\n * @param {string} phase - Fase del lifecycle\r\n * @param {Object} context - Contexto a pasar\r\n * @returns {Promise<Object>} Contexto modificado o { cancelled: true }\r\n */\r\n async execute(phase, context = {}) {\r\n const hooks = this.hooks.get(phase);\r\n\r\n if (!hooks || hooks.length === 0) {\r\n return context;\r\n }\r\n\r\n logger.debug(`[WuHooks] Executing ${hooks.length} hooks for ${phase}`);\r\n\r\n // Log para debugging\r\n const executionEntry = {\r\n phase,\r\n timestamp: Date.now(),\r\n hooksCount: hooks.length,\r\n hookNames: hooks.map(h => h.name)\r\n };\r\n\r\n let currentContext = { ...context };\r\n let cancelled = false;\r\n\r\n // Crear cadena de middleware\r\n const executeChain = async (index) => {\r\n // Si llegamos al final de la cadena, retornar contexto\r\n if (index >= hooks.length) {\r\n return currentContext;\r\n }\r\n\r\n const hook = hooks[index];\r\n const startTime = Date.now();\r\n\r\n try {\r\n let nextCalled = false;\r\n\r\n // Función next\r\n const next = async (modifiedContext) => {\r\n nextCalled = true;\r\n\r\n // Si se pasa un contexto modificado, usarlo\r\n if (modifiedContext !== undefined) {\r\n currentContext = { ...currentContext, ...modifiedContext };\r\n }\r\n\r\n // Continuar con siguiente hook\r\n return await executeChain(index + 1);\r\n };\r\n\r\n // Ejecutar middleware\r\n await hook.middleware(currentContext, next);\r\n\r\n // Si no se llamó next(), la operación fue cancelada\r\n if (!nextCalled) {\r\n logger.debug(`[WuHooks] Hook \"${hook.name}\" cancelled execution`);\r\n cancelled = true;\r\n return { cancelled: true };\r\n }\r\n\r\n const duration = Date.now() - startTime;\r\n logger.debug(`[WuHooks] Hook \"${hook.name}\" executed in ${duration}ms`);\r\n\r\n } catch (error) {\r\n console.error(`[WuHooks] Error in hook \"${hook.name}\":`, error);\r\n\r\n // Si hay error, pasar al siguiente hook\r\n return await executeChain(index + 1);\r\n }\r\n\r\n return currentContext;\r\n };\r\n\r\n // Ejecutar cadena\r\n const result = await executeChain(0);\r\n\r\n // Completar log\r\n executionEntry.duration = Date.now() - executionEntry.timestamp;\r\n executionEntry.cancelled = cancelled;\r\n executionEntry.success = !cancelled;\r\n\r\n this.executionLog.push(executionEntry);\r\n\r\n // Mantener límite de log\r\n if (this.executionLog.length > this.maxLogSize) {\r\n this.executionLog.shift();\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * 🚀 HELPER: Registrar hook para múltiples fases\r\n * @param {Array<string>} phases - Fases del lifecycle\r\n * @param {Function} middleware - Función middleware\r\n * @param {Object} options - Opciones\r\n * @returns {Function} Función para desregistrar de todas las fases\r\n */\r\n useMultiple(phases, middleware, options = {}) {\r\n const unregisterFns = phases.map(phase =>\r\n this.use(phase, middleware, { ...options, name: `${options.name}_${phase}` })\r\n );\r\n\r\n // Retornar función que desregistra de todas las fases\r\n return () => unregisterFns.forEach(fn => fn());\r\n }\r\n\r\n /**\r\n * 📋 GET HOOKS: Obtener hooks registrados\r\n * @param {string} phase - Fase del lifecycle (opcional)\r\n * @returns {Object|Array}\r\n */\r\n getHooks(phase) {\r\n if (phase) {\r\n return this.hooks.get(phase) || [];\r\n }\r\n\r\n // Retornar todos los hooks\r\n const allHooks = {};\r\n this.hooks.forEach((hooks, phase) => {\r\n allHooks[phase] = hooks.map(h => ({\r\n name: h.name,\r\n priority: h.priority,\r\n registeredAt: h.registeredAt\r\n }));\r\n });\r\n\r\n return allHooks;\r\n }\r\n\r\n /**\r\n * 📊 GET STATS: Estadísticas de hooks\r\n * @returns {Object}\r\n */\r\n getStats() {\r\n const totalHooks = Array.from(this.hooks.values())\r\n .reduce((sum, hooks) => sum + hooks.length, 0);\r\n\r\n const executionsByPhase = {};\r\n this.executionLog.forEach(entry => {\r\n executionsByPhase[entry.phase] = (executionsByPhase[entry.phase] || 0) + 1;\r\n });\r\n\r\n const avgDuration = this.executionLog.length > 0\r\n ? this.executionLog.reduce((sum, entry) => sum + entry.duration, 0) / this.executionLog.length\r\n : 0;\r\n\r\n const cancelledCount = this.executionLog.filter(entry => entry.cancelled).length;\r\n\r\n return {\r\n totalHooks,\r\n totalExecutions: this.executionLog.length,\r\n executionsByPhase,\r\n avgDuration: Math.round(avgDuration),\r\n cancelledCount,\r\n recentExecutions: this.executionLog.slice(-10)\r\n };\r\n }\r\n\r\n /**\r\n * 🧹 CLEANUP: Limpiar todos los hooks\r\n * @param {string} phase - Fase específica (opcional)\r\n */\r\n cleanup(phase) {\r\n if (phase) {\r\n this.hooks.set(phase, []);\r\n logger.debug(`[WuHooks] Hooks cleaned for ${phase}`);\r\n } else {\r\n this.lifecyclePhases.forEach(p => {\r\n this.hooks.set(p, []);\r\n });\r\n this.executionLog = [];\r\n logger.debug('[WuHooks] 🧹 All hooks cleaned');\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 🔧 HELPER: Crear middleware hooks fácilmente\r\n */\r\n\r\n/**\r\n * Crear hook simple que siempre llama next\r\n * @param {Function} fn - Función a ejecutar\r\n * @returns {Function} Middleware function\r\n */\r\nexport const createSimpleHook = (fn) => {\r\n return async (context, next) => {\r\n await fn(context);\r\n await next();\r\n };\r\n};\r\n\r\n/**\r\n * Crear hook condicional\r\n * @param {Function} condition - Función de condición (context) => boolean\r\n * @param {Function} fn - Función a ejecutar si condición es true\r\n * @returns {Function} Middleware function\r\n */\r\nexport const createConditionalHook = (condition, fn) => {\r\n return async (context, next) => {\r\n if (await condition(context)) {\r\n await fn(context);\r\n }\r\n await next();\r\n };\r\n};\r\n\r\n/**\r\n * Crear hook que puede cancelar operación\r\n * @param {Function} shouldContinue - Función que retorna true para continuar\r\n * @returns {Function} Middleware function\r\n */\r\nexport const createGuardHook = (shouldContinue) => {\r\n return async (context, next) => {\r\n if (await shouldContinue(context)) {\r\n await next();\r\n }\r\n // Si no retorna true, no llama next() y cancela\r\n };\r\n};\r\n\r\n/**\r\n * Crear hook que modifica contexto\r\n * @param {Function} transformer - Función que transforma el contexto\r\n * @returns {Function} Middleware function\r\n */\r\nexport const createTransformHook = (transformer) => {\r\n return async (context, next) => {\r\n const modified = await transformer(context);\r\n await next(modified);\r\n };\r\n};\r\n\r\n/**\r\n * Crear hook con timeout\r\n * @param {Function} fn - Función a ejecutar\r\n * @param {number} timeout - Timeout en ms\r\n * @returns {Function} Middleware function\r\n */\r\nexport const createTimedHook = (fn, timeout = 5000) => {\r\n return async (context, next) => {\r\n const timeoutPromise = new Promise((_, reject) =>\r\n setTimeout(() => reject(new Error('Hook timeout')), timeout)\r\n );\r\n\r\n try {\r\n await Promise.race([fn(context), timeoutPromise]);\r\n await next();\r\n } catch (error) {\r\n console.error('[WuHooks] Timed hook failed:', error);\r\n await next(); // Continuar a pesar del error\r\n }\r\n };\r\n};\r\n","/**\r\n * WU-PREFETCH: Intelligent Prefetching with Speculation Rules API\r\n *\r\n * Prefetches microfrontend modules BEFORE they're needed using:\r\n * 1. Speculation Rules API (Chrome 121+) — browser-native prerender/prefetch\r\n * 2. <link rel=\"modulepreload\"> — ES module prefetch (all modern browsers)\r\n * 3. <link rel=\"prefetch\"> — generic fallback\r\n *\r\n * Trigger modes:\r\n * - immediate: prefetch now\r\n * - hover: prefetch when user hovers a target element\r\n * - visible: prefetch when target element enters viewport (IntersectionObserver)\r\n * - idle: prefetch during browser idle time (requestIdleCallback)\r\n *\r\n * @example\r\n * // Prefetch immediately\r\n * wu.prefetch('cart');\r\n *\r\n * // Prefetch when user hovers the cart link\r\n * wu.prefetch('cart', { on: 'hover', target: '#cart-link' });\r\n *\r\n * // Prefetch when the section becomes visible\r\n * wu.prefetch('cart', { on: 'visible', target: '#cart-section' });\r\n *\r\n * // Prefetch during idle time\r\n * wu.prefetch('cart', { on: 'idle' });\r\n *\r\n * // Prefetch multiple apps with eagerness control\r\n * wu.prefetch(['cart', 'profile'], { eagerness: 'moderate' });\r\n */\r\n\r\nimport { logger } from './wu-logger.js';\r\n\r\nexport class WuPrefetch {\r\n constructor(core) {\r\n this.core = core;\r\n\r\n // Track what we've already prefetched to avoid duplicates\r\n this.prefetched = new Set();\r\n\r\n // Active observers and listeners (for cleanup)\r\n this._observers = new Map();\r\n this._listeners = [];\r\n\r\n // Speculation Rules script element (one per page, updated dynamically)\r\n this._speculationScript = null;\r\n this._speculationRules = { prefetch: [], prerender: [] };\r\n\r\n // Detect browser support\r\n this.supportsSpeculationRules = this._detectSpeculationRules();\r\n this.supportsModulePreload = this._detectModulePreload();\r\n\r\n logger.wuDebug(\r\n `[WuPrefetch] Initialized — ` +\r\n `Speculation Rules: ${this.supportsSpeculationRules ? 'yes' : 'no'}, ` +\r\n `Module Preload: ${this.supportsModulePreload ? 'yes' : 'no'}`\r\n );\r\n }\r\n\r\n // ─── Detection ───────────────────────────────────────────────\r\n\r\n _detectSpeculationRules() {\r\n if (typeof HTMLScriptElement === 'undefined') return false;\r\n return HTMLScriptElement.supports?.('speculationrules') ?? false;\r\n }\r\n\r\n _detectModulePreload() {\r\n if (typeof document === 'undefined') return false;\r\n const link = document.createElement('link');\r\n return link.relList?.supports?.('modulepreload') ?? false;\r\n }\r\n\r\n // ─── Main API ────────────────────────────────────────────────\r\n\r\n /**\r\n * Prefetch one or more apps.\r\n *\r\n * @param {string|string[]} appNames - App name(s) to prefetch\r\n * @param {Object} [options]\r\n * @param {'immediate'|'hover'|'visible'|'idle'} [options.on='immediate'] - Trigger mode\r\n * @param {string|Element} [options.target] - CSS selector or element (for hover/visible)\r\n * @param {'conservative'|'moderate'|'eager'} [options.eagerness='moderate'] - Speculation Rules eagerness\r\n * @returns {Promise<void>|Function} Promise for immediate, cleanup function for deferred\r\n */\r\n async prefetch(appNames, options = {}) {\r\n const names = Array.isArray(appNames) ? appNames : [appNames];\r\n const trigger = options.on || 'immediate';\r\n\r\n switch (trigger) {\r\n case 'immediate':\r\n return this._prefetchImmediate(names, options);\r\n\r\n case 'hover':\r\n return this._prefetchOnHover(names, options);\r\n\r\n case 'visible':\r\n return this._prefetchOnVisible(names, options);\r\n\r\n case 'idle':\r\n return this._prefetchOnIdle(names, options);\r\n\r\n default:\r\n logger.wuWarn(`[WuPrefetch] Unknown trigger \"${trigger}\", using immediate`);\r\n return this._prefetchImmediate(names, options);\r\n }\r\n }\r\n\r\n // ─── Immediate Prefetch ──────────────────────────────────────\r\n\r\n async _prefetchImmediate(appNames, options) {\r\n const urls = await this._resolveAppUrls(appNames);\r\n if (urls.length === 0) return;\r\n\r\n // Mark all as prefetched by name (prevents duplicate resolution)\r\n urls.forEach(({ name }) => this.prefetched.add(name));\r\n\r\n // Strategy 1: Speculation Rules API (Chrome 121+)\r\n if (this.supportsSpeculationRules) {\r\n this._addSpeculationRules(urls, options.eagerness || 'moderate');\r\n return;\r\n }\r\n\r\n // Strategy 2: <link rel=\"modulepreload\"> for ES modules\r\n if (this.supportsModulePreload) {\r\n urls.forEach(({ url }) => this._injectModulePreload(url));\r\n return;\r\n }\r\n\r\n // Strategy 3: <link rel=\"prefetch\"> fallback\r\n urls.forEach(({ url }) => this._injectPrefetch(url));\r\n }\r\n\r\n // ─── Hover Trigger ───────────────────────────────────────────\r\n\r\n _prefetchOnHover(appNames, options) {\r\n const target = this._resolveTarget(options.target);\r\n if (!target) {\r\n logger.wuWarn('[WuPrefetch] hover trigger requires a target element or selector');\r\n return () => {};\r\n }\r\n\r\n let done = false;\r\n\r\n // Forward declaration so handler() can call cleanup() to self-evict.\r\n const cleanup = () => {\r\n target.removeEventListener('mouseenter', handler);\r\n target.removeEventListener('focusin', handler);\r\n const idx = this._listeners.indexOf(cleanup);\r\n if (idx !== -1) this._listeners.splice(idx, 1);\r\n };\r\n\r\n const handler = () => {\r\n if (done) return;\r\n done = true;\r\n this._prefetchImmediate(appNames, options);\r\n // Self-evict: remove listeners AND clear our slot in _listeners so\r\n // long-running pages don't accumulate dead cleanups (one per hover\r\n // prefetch ever fired).\r\n cleanup();\r\n };\r\n\r\n target.addEventListener('mouseenter', handler, { passive: true });\r\n target.addEventListener('focusin', handler, { passive: true });\r\n this._listeners.push(cleanup);\r\n return cleanup;\r\n }\r\n\r\n // ─── Visibility Trigger (IntersectionObserver) ───────────────\r\n\r\n _prefetchOnVisible(appNames, options) {\r\n const target = this._resolveTarget(options.target);\r\n if (!target) {\r\n logger.wuWarn('[WuPrefetch] visible trigger requires a target element or selector');\r\n return () => {};\r\n }\r\n\r\n if (typeof IntersectionObserver === 'undefined') {\r\n // No IntersectionObserver → prefetch immediately\r\n this._prefetchImmediate(appNames, options);\r\n return () => {};\r\n }\r\n\r\n const observer = new IntersectionObserver(\r\n (entries) => {\r\n for (const entry of entries) {\r\n if (entry.isIntersecting) {\r\n this._prefetchImmediate(appNames, options);\r\n cleanup(); // self-evict from _observers AND disconnect\r\n break;\r\n }\r\n }\r\n },\r\n { rootMargin: '200px' } // Start prefetching 200px before visible\r\n );\r\n\r\n observer.observe(target);\r\n this._observers.set(target, observer);\r\n\r\n const cleanup = () => {\r\n observer.disconnect();\r\n this._observers.delete(target);\r\n };\r\n\r\n return cleanup;\r\n }\r\n\r\n // ─── Idle Trigger ────────────────────────────────────────────\r\n\r\n _prefetchOnIdle(appNames, options) {\r\n let cleanup; // forward ref so callback can self-evict\r\n\r\n const evict = () => {\r\n if (!cleanup) return;\r\n const idx = this._listeners.indexOf(cleanup);\r\n if (idx !== -1) this._listeners.splice(idx, 1);\r\n };\r\n\r\n const callback = () => {\r\n this._prefetchImmediate(appNames, options);\r\n evict();\r\n };\r\n\r\n if ('requestIdleCallback' in window) {\r\n const id = requestIdleCallback(callback, { timeout: 3000 });\r\n cleanup = () => { cancelIdleCallback(id); evict(); };\r\n } else {\r\n // Fallback: setTimeout 2s\r\n const id = setTimeout(callback, 2000);\r\n cleanup = () => { clearTimeout(id); evict(); };\r\n }\r\n\r\n this._listeners.push(cleanup);\r\n return cleanup;\r\n }\r\n\r\n // ─── Speculation Rules API ───────────────────────────────────\r\n\r\n _addSpeculationRules(urls, eagerness) {\r\n const newEntries = urls.filter(({ name }) => !this.prefetched.has(name));\r\n if (newEntries.length === 0) return;\r\n\r\n // Mark as prefetched\r\n newEntries.forEach(({ name }) => this.prefetched.add(name));\r\n\r\n // Build URL list for speculation rules\r\n const urlList = newEntries.map(({ url }) => url);\r\n\r\n // Add prefetch rule\r\n this._speculationRules.prefetch.push({\r\n source: 'list',\r\n urls: urlList,\r\n eagerness\r\n });\r\n\r\n // Inject or update the speculation rules script\r\n this._updateSpeculationScript();\r\n\r\n logger.wuDebug(\r\n `[WuPrefetch] Speculation Rules: prefetch ${newEntries.map(e => e.name).join(', ')} ` +\r\n `(eagerness: ${eagerness})`\r\n );\r\n }\r\n\r\n _updateSpeculationScript() {\r\n // Remove existing script (spec requires replacing, not updating)\r\n if (this._speculationScript) {\r\n this._speculationScript.remove();\r\n }\r\n\r\n const script = document.createElement('script');\r\n script.type = 'speculationrules';\r\n script.textContent = JSON.stringify(this._speculationRules);\r\n document.head.appendChild(script);\r\n\r\n this._speculationScript = script;\r\n }\r\n\r\n // ─── Module Preload ──────────────────────────────────────────\r\n\r\n _injectModulePreload(url) {\r\n if (this.prefetched.has(url)) return;\r\n this.prefetched.add(url);\r\n\r\n const link = document.createElement('link');\r\n link.rel = 'modulepreload';\r\n link.href = url;\r\n document.head.appendChild(link);\r\n\r\n logger.wuDebug(`[WuPrefetch] modulepreload: ${url}`);\r\n }\r\n\r\n // ─── Generic Prefetch ────────────────────────────────────────\r\n\r\n _injectPrefetch(url) {\r\n if (this.prefetched.has(url)) return;\r\n this.prefetched.add(url);\r\n\r\n const link = document.createElement('link');\r\n link.rel = 'prefetch';\r\n link.href = url;\r\n link.as = 'script';\r\n document.head.appendChild(link);\r\n\r\n logger.wuDebug(`[WuPrefetch] prefetch: ${url}`);\r\n }\r\n\r\n // ─── URL Resolution ──────────────────────────────────────────\r\n\r\n /**\r\n * Resolve app names to their module URLs.\r\n * Skips apps that are already mounted, already prefetched, or not registered.\r\n */\r\n async _resolveAppUrls(appNames) {\r\n const results = [];\r\n\r\n for (const name of appNames) {\r\n // Skip if already prefetched\r\n if (this.prefetched.has(name)) {\r\n logger.wuDebug(`[WuPrefetch] ${name} already prefetched, skipping`);\r\n continue;\r\n }\r\n\r\n // Skip if already mounted (no need to prefetch)\r\n if (this.core.mounted.has(name)) {\r\n logger.wuDebug(`[WuPrefetch] ${name} already mounted, skipping`);\r\n continue;\r\n }\r\n\r\n // Skip if already loaded (definition exists)\r\n if (this.core.definitions.has(name)) {\r\n logger.wuDebug(`[WuPrefetch] ${name} already defined, skipping`);\r\n continue;\r\n }\r\n\r\n const app = this.core.apps.get(name);\r\n if (!app) {\r\n logger.wuWarn(`[WuPrefetch] App \"${name}\" not registered, cannot prefetch`);\r\n continue;\r\n }\r\n\r\n try {\r\n const url = await this.core.resolveModulePath(app);\r\n results.push({ name, url });\r\n } catch (error) {\r\n logger.wuWarn(`[WuPrefetch] Failed to resolve URL for \"${name}\":`, error.message);\r\n }\r\n }\r\n\r\n return results;\r\n }\r\n\r\n // ─── Helpers ─────────────────────────────────────────────────\r\n\r\n _resolveTarget(target) {\r\n if (!target) return null;\r\n if (typeof target === 'string') return document.querySelector(target);\r\n if (target instanceof Element) return target;\r\n return null;\r\n }\r\n\r\n // ─── Prefetch All Registered (utility) ───────────────────────\r\n\r\n /**\r\n * Prefetch all registered but not-yet-mounted apps.\r\n * Useful for aggressive prefetching after initial load.\r\n *\r\n * @param {Object} [options] - Same options as prefetch()\r\n */\r\n async prefetchAll(options = {}) {\r\n const unmountedApps = [];\r\n for (const [name] of this.core.apps) {\r\n if (!this.core.mounted.has(name) && !this.prefetched.has(name)) {\r\n unmountedApps.push(name);\r\n }\r\n }\r\n\r\n if (unmountedApps.length === 0) {\r\n logger.wuDebug('[WuPrefetch] No apps to prefetch');\r\n return;\r\n }\r\n\r\n logger.wuDebug(`[WuPrefetch] Prefetching all: ${unmountedApps.join(', ')}`);\r\n return this.prefetch(unmountedApps, options);\r\n }\r\n\r\n // ─── Stats ───────────────────────────────────────────────────\r\n\r\n getStats() {\r\n return {\r\n prefetched: [...this.prefetched],\r\n activeObservers: this._observers.size,\r\n activeListeners: this._listeners.length,\r\n speculationRulesSupported: this.supportsSpeculationRules,\r\n modulePreloadSupported: this.supportsModulePreload,\r\n speculationRules: this._speculationRules\r\n };\r\n }\r\n\r\n // ─── Cleanup ─────────────────────────────────────────────────\r\n\r\n cleanup() {\r\n // Disconnect all IntersectionObservers\r\n for (const [, observer] of this._observers) {\r\n observer.disconnect();\r\n }\r\n this._observers.clear();\r\n\r\n // Remove all event listeners\r\n for (const cleanup of this._listeners) {\r\n cleanup();\r\n }\r\n this._listeners = [];\r\n\r\n // Remove speculation rules script\r\n if (this._speculationScript) {\r\n this._speculationScript.remove();\r\n this._speculationScript = null;\r\n }\r\n\r\n this._speculationRules = { prefetch: [], prerender: [] };\r\n this.prefetched.clear();\r\n\r\n logger.wuDebug('[WuPrefetch] Cleaned up');\r\n }\r\n}\r\n","/**\r\n * WU-OVERRIDES: Cookie-based URL overrides for QA/testing\r\n *\r\n * SECURITY MODEL:\r\n * - DISABLED in production by default (must opt-in with allowOverrides: true)\r\n * - Allowlist of trusted domains (only overrides to whitelisted hosts are accepted)\r\n * - Visual indicator when overrides are active (prevents silent phishing)\r\n *\r\n * How it works:\r\n * 1. QA sets a cookie: wu-override:cart=http://localhost:5173\r\n * 2. During wu.init(), overrides are parsed from document.cookie\r\n * 3. The URL for \"cart\" is replaced ONLY in that browser session\r\n * 4. Everyone else sees the production URL\r\n *\r\n * Cookie format:\r\n * wu-override:<appName>=<url>\r\n *\r\n * @example\r\n * // Enable in init (required in production)\r\n * wu.init({\r\n * apps: [...],\r\n * overrides: {\r\n * enabled: true,\r\n * allowedDomains: ['*.company.com', 'localhost', '*.vercel.app'],\r\n * showIndicator: true\r\n * }\r\n * });\r\n *\r\n * // Programmatic API\r\n * wu.override('cart', 'http://localhost:5173');\r\n * wu.removeOverride('cart');\r\n * wu.getOverrides();\r\n * wu.clearOverrides();\r\n */\r\n\r\nimport { logger } from './wu-logger.js';\r\n\r\nconst COOKIE_PREFIX = 'wu-override:';\r\n\r\nexport class WuOverrides {\r\n constructor(config = {}) {\r\n // In-memory cache of active overrides (synced with cookies)\r\n this._overrides = new Map();\r\n\r\n // Security config\r\n this._allowedDomains = config.allowedDomains || [];\r\n this._showIndicator = config.showIndicator ?? true;\r\n this._indicatorElement = null;\r\n\r\n // Determine enabled state:\r\n // - If explicitly passed → use that value (respect user intent)\r\n // - If not passed → auto-detect from environment\r\n if (config.enabled !== undefined) {\r\n this._enabled = config.enabled;\r\n } else {\r\n this._enabled = this._isDevEnvironment();\r\n }\r\n\r\n // Parse existing cookies on construction (only if enabled)\r\n if (this._enabled) {\r\n this._parseFromCookies();\r\n }\r\n }\r\n\r\n // ─── Security: Environment Detection ─────────────────────────\r\n\r\n /**\r\n * Detect if we're in a development environment.\r\n * Overrides are auto-enabled in dev, disabled in production.\r\n */\r\n _isDevEnvironment() {\r\n if (typeof window === 'undefined') return false;\r\n\r\n const hostname = window.location?.hostname || '';\r\n const port = window.location?.port || '';\r\n\r\n // localhost, 127.0.0.1, or non-standard ports = development\r\n return (\r\n hostname === 'localhost' ||\r\n hostname === '127.0.0.1' ||\r\n hostname === '0.0.0.0' ||\r\n hostname.endsWith('.local') ||\r\n (port !== '' && port !== '80' && port !== '443')\r\n );\r\n }\r\n\r\n // ─── Security: Domain Allowlist ──────────────────────────────\r\n\r\n /**\r\n * Check if a URL's domain is in the allowlist.\r\n * If no allowlist is configured, all valid URLs are accepted (dev-mode behavior).\r\n * If an allowlist IS configured, only matching domains pass.\r\n *\r\n * @param {string} url\r\n * @returns {boolean}\r\n */\r\n _isDomainAllowed(url) {\r\n // No allowlist = allow everything (but only if overrides are enabled)\r\n if (this._allowedDomains.length === 0) return true;\r\n\r\n const hostname = this._extractHostname(url);\r\n if (!hostname) return false;\r\n\r\n for (const pattern of this._allowedDomains) {\r\n if (this._matchDomain(hostname, pattern)) return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Extract hostname from a URL string.\r\n */\r\n _extractHostname(url) {\r\n try {\r\n // Handle localhost:PORT shorthand\r\n if (/^localhost(:\\d+)?/.test(url)) return 'localhost';\r\n\r\n // Handle protocol-relative\r\n const normalized = url.startsWith('//') ? `https:${url}` : url;\r\n const parsed = new URL(normalized);\r\n return parsed.hostname;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Match a hostname against a domain pattern.\r\n * Supports wildcard: *.company.com matches sub.company.com\r\n *\r\n * @param {string} hostname - e.g., 'cart.staging.company.com'\r\n * @param {string} pattern - e.g., '*.company.com' or 'localhost'\r\n * @returns {boolean}\r\n */\r\n _matchDomain(hostname, pattern) {\r\n // Exact match\r\n if (hostname === pattern) return true;\r\n\r\n // Wildcard match: *.company.com\r\n if (pattern.startsWith('*.')) {\r\n const suffix = pattern.substring(2); // 'company.com'\r\n return hostname === suffix || hostname.endsWith('.' + suffix);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n // ─── Cookie Parsing ──────────────────────────────────────────\r\n\r\n /**\r\n * Parse all wu-override cookies from document.cookie.\r\n * Called automatically on construction and can be called manually to refresh.\r\n *\r\n * @returns {Map<string, string>} Map of appName → overrideUrl\r\n */\r\n _parseFromCookies() {\r\n this._overrides.clear();\r\n\r\n if (typeof document === 'undefined') return this._overrides;\r\n\r\n if (!this._enabled) {\r\n logger.wuDebug('[WuOverrides] Overrides disabled — skipping cookie parse');\r\n return this._overrides;\r\n }\r\n\r\n const cookies = document.cookie;\r\n if (!cookies) return this._overrides;\r\n\r\n // Split cookies and find wu-override:* entries\r\n const pairs = cookies.split(';');\r\n\r\n for (const pair of pairs) {\r\n const trimmed = pair.trim();\r\n\r\n if (!trimmed.startsWith(COOKIE_PREFIX)) continue;\r\n\r\n // wu-override:cart=http://localhost:5173\r\n const eqIndex = trimmed.indexOf('=');\r\n if (eqIndex === -1) continue;\r\n\r\n const appName = trimmed.substring(COOKIE_PREFIX.length, eqIndex).trim();\r\n const url = trimmed.substring(eqIndex + 1).trim();\r\n\r\n if (!appName || !url) continue;\r\n\r\n // Validate URL format\r\n if (!this._isValidUrl(url)) {\r\n logger.wuWarn(`[WuOverrides] Invalid override URL for \"${appName}\": ${url}`);\r\n continue;\r\n }\r\n\r\n // Validate domain is allowed\r\n if (!this._isDomainAllowed(url)) {\r\n logger.wuWarn(\r\n `[WuOverrides] BLOCKED: \"${appName}\" override to \"${url}\" — ` +\r\n `domain not in allowedDomains. ` +\r\n `Allowed: [${this._allowedDomains.join(', ')}]`\r\n );\r\n continue;\r\n }\r\n\r\n this._overrides.set(appName, url);\r\n logger.wuDebug(`[WuOverrides] Parsed override: ${appName} → ${url}`);\r\n }\r\n\r\n if (this._overrides.size > 0) {\r\n logger.wuInfo(\r\n `[WuOverrides] ${this._overrides.size} active override(s): ` +\r\n [...this._overrides.keys()].join(', ')\r\n );\r\n }\r\n\r\n return this._overrides;\r\n }\r\n\r\n // ─── Apply Overrides ─────────────────────────────────────────\r\n\r\n /**\r\n * Apply overrides to an array of app configs.\r\n * Mutates the url field of matching apps.\r\n * Called by WuCore during init, before registerApp.\r\n *\r\n * @param {Array<{name: string, url: string}>} apps - App configs to process\r\n * @returns {Array<{name: string, url: string, _originalUrl?: string}>} Same array, mutated\r\n */\r\n applyToApps(apps) {\r\n if (!this._enabled || this._overrides.size === 0) return apps;\r\n\r\n for (const app of apps) {\r\n const overrideUrl = this._overrides.get(app.name);\r\n if (overrideUrl) {\r\n app._originalUrl = app.url;\r\n app.url = overrideUrl;\r\n logger.wuInfo(\r\n `[WuOverrides] \"${app.name}\" overridden: ${app._originalUrl} → ${overrideUrl}`\r\n );\r\n }\r\n }\r\n\r\n // Show visual indicator if overrides were applied\r\n if (this._showIndicator && this._overrides.size > 0) {\r\n this._showOverrideIndicator();\r\n }\r\n\r\n return apps;\r\n }\r\n\r\n /**\r\n * Get the override URL for a specific app, or null if none.\r\n *\r\n * @param {string} appName\r\n * @returns {string|null}\r\n */\r\n getOverrideFor(appName) {\r\n return this._overrides.get(appName) || null;\r\n }\r\n\r\n // ─── Programmatic API ────────────────────────────────────────\r\n\r\n /**\r\n * Set an override for an app. Writes a cookie and updates in-memory cache.\r\n *\r\n * @param {string} appName - App to override\r\n * @param {string} url - Override URL (e.g., 'http://localhost:5173')\r\n * @param {Object} [options]\r\n * @param {number} [options.maxAge=86400] - Cookie max-age in seconds (default: 24h)\r\n * @param {string} [options.path='/'] - Cookie path\r\n */\r\n set(appName, url, options = {}) {\r\n if (!appName || !url) {\r\n throw new Error('[WuOverrides] appName and url are required');\r\n }\r\n\r\n if (!this._enabled) {\r\n throw new Error(\r\n '[WuOverrides] Overrides are disabled in this environment. ' +\r\n 'Enable with wu.init({ overrides: { enabled: true } })'\r\n );\r\n }\r\n\r\n if (!this._isValidUrl(url)) {\r\n throw new Error(`[WuOverrides] Invalid URL: ${url}`);\r\n }\r\n\r\n if (!this._isDomainAllowed(url)) {\r\n throw new Error(\r\n `[WuOverrides] Domain not allowed: \"${this._extractHostname(url)}\". ` +\r\n `Allowed: [${this._allowedDomains.join(', ')}]`\r\n );\r\n }\r\n\r\n const maxAge = options.maxAge ?? 86400; // 24 hours default\r\n const path = options.path ?? '/';\r\n\r\n // Set cookie\r\n if (typeof document !== 'undefined') {\r\n document.cookie =\r\n `${COOKIE_PREFIX}${appName}=${url}; path=${path}; max-age=${maxAge}; SameSite=Lax`;\r\n }\r\n\r\n // Update in-memory cache\r\n this._overrides.set(appName, url);\r\n\r\n // Update visual indicator\r\n if (this._showIndicator) {\r\n this._showOverrideIndicator();\r\n }\r\n\r\n logger.wuInfo(`[WuOverrides] Override set: ${appName} → ${url} (expires in ${maxAge}s)`);\r\n }\r\n\r\n /**\r\n * Remove an override for a specific app.\r\n *\r\n * @param {string} appName - App to remove override for\r\n */\r\n remove(appName) {\r\n // Delete cookie by setting max-age=0\r\n if (typeof document !== 'undefined') {\r\n document.cookie = `${COOKIE_PREFIX}${appName}=; path=/; max-age=0`;\r\n }\r\n\r\n this._overrides.delete(appName);\r\n\r\n // Update or remove indicator\r\n if (this._showIndicator) {\r\n if (this._overrides.size === 0) {\r\n this._removeOverrideIndicator();\r\n } else {\r\n this._showOverrideIndicator();\r\n }\r\n }\r\n\r\n logger.wuInfo(`[WuOverrides] Override removed: ${appName}`);\r\n }\r\n\r\n /**\r\n * Remove all overrides.\r\n */\r\n clearAll() {\r\n for (const appName of [...this._overrides.keys()]) {\r\n this.remove(appName);\r\n }\r\n\r\n this._removeOverrideIndicator();\r\n\r\n logger.wuInfo('[WuOverrides] All overrides cleared');\r\n }\r\n\r\n /**\r\n * Get all active overrides as a plain object.\r\n *\r\n * @returns {Object} { appName: url, ... }\r\n */\r\n getAll() {\r\n return Object.fromEntries(this._overrides);\r\n }\r\n\r\n /**\r\n * Check if any overrides are active.\r\n *\r\n * @returns {boolean}\r\n */\r\n hasOverrides() {\r\n return this._overrides.size > 0;\r\n }\r\n\r\n /**\r\n * Check if overrides are enabled in this environment.\r\n *\r\n * @returns {boolean}\r\n */\r\n isEnabled() {\r\n return this._enabled;\r\n }\r\n\r\n /**\r\n * Configure the override system.\r\n * Called by WuCore during init with config.overrides.\r\n *\r\n * @param {Object} config\r\n * @param {boolean} [config.enabled]\r\n * @param {string[]} [config.allowedDomains]\r\n * @param {boolean} [config.showIndicator]\r\n */\r\n configure(config = {}) {\r\n if (config.enabled !== undefined) {\r\n this._enabled = config.enabled;\r\n }\r\n if (config.allowedDomains) {\r\n this._allowedDomains = config.allowedDomains;\r\n }\r\n if (config.showIndicator !== undefined) {\r\n this._showIndicator = config.showIndicator;\r\n }\r\n\r\n // Re-parse cookies with new config\r\n if (this._enabled) {\r\n this._parseFromCookies();\r\n }\r\n }\r\n\r\n /**\r\n * Refresh overrides by re-parsing cookies.\r\n * Useful if cookies were modified externally (DevTools, other tabs).\r\n */\r\n refresh() {\r\n this._parseFromCookies();\r\n }\r\n\r\n // ─── Visual Indicator (anti-phishing) ────────────────────────\r\n\r\n /**\r\n * Show a fixed banner when overrides are active.\r\n * This prevents silent phishing — the user ALWAYS sees when\r\n * microfrontends are being loaded from non-standard URLs.\r\n */\r\n _showOverrideIndicator() {\r\n if (typeof document === 'undefined') return;\r\n\r\n // Remove existing indicator first\r\n this._removeOverrideIndicator();\r\n\r\n const indicator = document.createElement('div');\r\n indicator.id = 'wu-override-indicator';\r\n\r\n const overrideList = [...this._overrides.entries()]\r\n .map(([name, url]) => `${name} → ${url}`)\r\n .join(' | ');\r\n\r\n indicator.textContent = `WU OVERRIDE ACTIVE: ${overrideList}`;\r\n\r\n indicator.style.cssText = [\r\n 'position: fixed',\r\n 'bottom: 0',\r\n 'left: 0',\r\n 'right: 0',\r\n 'z-index: 2147483647',\r\n 'background: #f59e0b',\r\n 'color: #000',\r\n 'font-family: monospace',\r\n 'font-size: 12px',\r\n 'font-weight: bold',\r\n 'padding: 6px 12px',\r\n 'text-align: center',\r\n 'cursor: pointer',\r\n 'user-select: none',\r\n 'box-shadow: 0 -2px 8px rgba(0,0,0,0.2)'\r\n ].join(';');\r\n\r\n // Click to dismiss (but override stays active)\r\n indicator.addEventListener('click', () => {\r\n indicator.style.display = 'none';\r\n });\r\n\r\n // Double-click to clear all overrides\r\n indicator.addEventListener('dblclick', (e) => {\r\n e.preventDefault();\r\n this.clearAll();\r\n });\r\n\r\n indicator.title = 'Click to hide | Double-click to clear all overrides';\r\n\r\n document.body.appendChild(indicator);\r\n this._indicatorElement = indicator;\r\n }\r\n\r\n /**\r\n * Remove the visual indicator.\r\n */\r\n _removeOverrideIndicator() {\r\n if (this._indicatorElement) {\r\n this._indicatorElement.remove();\r\n this._indicatorElement = null;\r\n }\r\n // Also remove by ID in case element reference was lost\r\n if (typeof document !== 'undefined') {\r\n const existing = document.getElementById('wu-override-indicator');\r\n if (existing) existing.remove();\r\n }\r\n }\r\n\r\n // ─── Validation ──────────────────────────────────────────────\r\n\r\n _isValidUrl(url) {\r\n // Accept http://, https://, and // protocol-relative\r\n if (url.startsWith('http://') || url.startsWith('https://') || url.startsWith('//')) {\r\n return true;\r\n }\r\n // Accept localhost shorthand like localhost:3000\r\n if (/^localhost(:\\d+)?/.test(url)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n // ─── Stats ───────────────────────────────────────────────────\r\n\r\n getStats() {\r\n return {\r\n enabled: this._enabled,\r\n activeOverrides: this._overrides.size,\r\n overrides: this.getAll(),\r\n allowedDomains: this._allowedDomains,\r\n showIndicator: this._showIndicator,\r\n environment: this._isDevEnvironment() ? 'development' : 'production'\r\n };\r\n }\r\n}\r\n","/**\r\n * WU-FRAMEWORK: UNIVERSAL MICROFRONTENDS\r\n * Motor principal agnostico - Funciona con cualquier framework\r\n */\r\n\r\nimport { WuLoader } from './wu-loader.js';\r\nimport { WuSandbox } from './wu-sandbox.js';\r\nimport { WuManifest } from './wu-manifest.js';\r\nimport { logger } from './wu-logger.js';\r\nimport { default as store } from './wu-store.js';\r\nimport { WuApp } from './wu-app.js';\r\nimport { WuCache } from './wu-cache.js';\r\nimport { WuEventBus } from './wu-event-bus.js';\r\nimport { WuPerformance } from './wu-performance.js';\r\nimport { WuPluginSystem } from './wu-plugin.js';\r\nimport { WuLoadingStrategy } from './wu-strategies.js';\r\nimport { WuErrorBoundary } from './wu-error-boundary.js';\r\nimport { WuLifecycleHooks } from './wu-hooks.js';\r\n// WuHtmlParser, WuScriptExecutor, WuIframeSandbox are imported lazily.\r\n// They are only needed when an app uses sandbox: 'strict' | 'eval'.\r\n// The default 'module' mode never loads them — see _ensureEvalDeps / _ensureIframeSandbox.\r\nimport { WuPrefetch } from './wu-prefetch.js';\r\nimport { WuOverrides } from './wu-overrides.js';\r\n\r\nexport class WuCore {\r\n constructor(options = {}) {\r\n // Registros principales\r\n this.apps = new Map(); // Apps registradas\r\n this.definitions = new Map(); // Definiciones de lifecycle\r\n this.manifests = new Map(); // Manifiestos cargados\r\n this.mounted = new Map(); // Apps montadas\r\n this.hidden = new Map(); // Keep-alive hidden apps\r\n this._pendingUnmounts = new Map(); // Deferred unmount timers (StrictMode compat)\r\n this._mountingPromises = new Map(); // In-flight mount dedup\r\n this._defineWaiters = new Map(); // Promise waiters for wu.define(): appName -> { resolve, timer, promise }\r\n this._resolvedPaths = new Map(); // Cached module URL: cacheKey -> resolved path\r\n // Reference counting for mount/unmount. Survives multi-cycle StrictMode +\r\n // Suspense scenarios where the 60ms grace timer alone wasn't enough.\r\n // Each successful mount() increments; each unmount() decrements; real\r\n // teardown only happens when the count hits 0.\r\n this._mountRefs = new Map(); // appName -> int\r\n\r\n // Componentes core\r\n this.loader = new WuLoader();\r\n this.sandbox = new WuSandbox();\r\n this.manifest = new WuManifest();\r\n this.store = store;\r\n\r\n // Strict/eval sandbox support is lazy-instantiated on first use.\r\n // See _ensureEvalDeps() — module mode never pays this cost.\r\n this.htmlParser = null;\r\n this.scriptExecutor = null;\r\n this._WuIframeSandbox = null;\r\n\r\n // Sistemas esenciales\r\n // Cache: localStorage backing has a real-world ceiling of ~5MB per origin.\r\n // Pre-v2.0 we configured 100MB which only acted as the in-memory LRU cap\r\n // and produced misleading \"100MB cache\" expectations. 4MB stays under the\r\n // tightest browser quota (Safari) and keeps eviction predictable.\r\n this.cache = new WuCache({ storage: 'localStorage', maxSize: 4 });\r\n this.eventBus = new WuEventBus();\r\n this.performance = new WuPerformance();\r\n\r\n // Advanced systems\r\n this.pluginSystem = new WuPluginSystem(this);\r\n this.strategies = new WuLoadingStrategy(this);\r\n this.errorBoundary = new WuErrorBoundary(this);\r\n this.hooks = new WuLifecycleHooks(this);\r\n this.prefetcher = new WuPrefetch(this);\r\n this.overrides = new WuOverrides();\r\n\r\n // Estado\r\n this.isInitialized = false;\r\n\r\n logger.wuInfo('Wu Framework initialized - Universal Microfrontends');\r\n }\r\n\r\n /**\r\n * Inicializar wu-framework con configuracion de apps\r\n * @param {Object} config - Configuracion { apps: [{name, url}, ...] }\r\n */\r\n async init(config) {\r\n if (this.isInitialized) {\r\n logger.wuWarn('Framework already initialized');\r\n return;\r\n }\r\n\r\n // Global sandbox mode: 'module' (default), 'strict', or 'eval'\r\n this._sandboxMode = config.sandbox || 'module';\r\n // Global policy: when strict mode can't load via iframe (CORS, etc.),\r\n // should we degrade to eval? Default true for compat. Set false to throw.\r\n this._strictFallback = config.strictFallback !== false;\r\n\r\n logger.wuDebug(`Initializing (sandbox: ${this._sandboxMode}) with apps:`, config.apps?.map(app => app.name));\r\n\r\n try {\r\n // Execute beforeInit hooks\r\n const beforeInitResult = await this.hooks.execute('beforeInit', { config });\r\n if (beforeInitResult.cancelled) {\r\n logger.wuWarn('Initialization cancelled by beforeInit hook');\r\n return;\r\n }\r\n\r\n // Call plugin beforeInit hooks\r\n await this.pluginSystem.callHook('beforeInit', { config });\r\n\r\n // Configure and apply cookie overrides (QA/testing: wu-override:<app>=<url>)\r\n if (config.overrides) {\r\n this.overrides.configure(config.overrides);\r\n }\r\n const apps = config.apps || [];\r\n this.overrides.refresh();\r\n this.overrides.applyToApps(apps);\r\n\r\n // Registrar todas las apps\r\n for (const appConfig of apps) {\r\n await this.registerApp(appConfig);\r\n }\r\n\r\n // Preload apps with eager/preload strategies\r\n await this.strategies.preload(config.apps || []);\r\n\r\n this.isInitialized = true;\r\n\r\n // Execute afterInit hooks\r\n await this.hooks.execute('afterInit', { config });\r\n\r\n // Call plugin afterInit hooks\r\n await this.pluginSystem.callHook('afterInit', { config });\r\n\r\n logger.wuInfo('Framework initialized successfully');\r\n } catch (error) {\r\n logger.wuError('Initialization failed:', error);\r\n\r\n // Call plugin error hooks\r\n await this.pluginSystem.callHook('onError', { phase: 'init', error });\r\n\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Registrar una aplicacion\r\n * @param {Object} appConfig - { name, url, keepAlive, sandbox, container, ... }\r\n */\r\n async registerApp(appConfig) {\r\n const { name, url } = appConfig;\r\n\r\n try {\r\n logger.wuDebug(`Registering app: ${name} from ${url}`);\r\n\r\n // Cargar manifest\r\n const manifestData = await this.manifest.load(url);\r\n this.manifests.set(name, manifestData);\r\n\r\n // Registrar la app — preserve all config fields (keepAlive, sandbox, container, etc.)\r\n this.apps.set(name, {\r\n ...appConfig,\r\n manifest: manifestData,\r\n status: 'registered'\r\n });\r\n\r\n logger.wuDebug(`App ${name} registered successfully`);\r\n } catch (error) {\r\n logger.wuError(`Failed to register app ${name}:`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Definir lifecycle de una micro-app\r\n * @param {string} appName - Nombre de la app\r\n * @param {Object} lifecycle - { mount, unmount }\r\n */\r\n define(appName, lifecycle) {\r\n if (!lifecycle.mount) {\r\n throw new Error(`[Wu] Mount function required for app: ${appName}`);\r\n }\r\n\r\n this.definitions.set(appName, lifecycle);\r\n\r\n // Resolve any pending waiter created by _waitForDefine().\r\n // This eliminates the previous 50ms-interval polling.\r\n const waiter = this._defineWaiters.get(appName);\r\n if (waiter) {\r\n clearTimeout(waiter.timer);\r\n this._defineWaiters.delete(appName);\r\n waiter.resolve();\r\n }\r\n\r\n // Dispatch custom event for external listeners\r\n const event = new CustomEvent('wu:app:ready', {\r\n detail: { appName, timestamp: Date.now() }\r\n });\r\n window.dispatchEvent(event);\r\n\r\n logger.wuDebug(`Lifecycle defined for: ${appName}`);\r\n }\r\n\r\n /**\r\n * Mount app with multi-retry mounting and recovery.\r\n * If the app is in keep-alive (hidden) state, shows it instantly.\r\n *\r\n * @param {string} appName - Nombre de la app\r\n * @param {string} containerSelector - Selector del contenedor\r\n */\r\n async mount(appName, containerSelector) {\r\n // ── StrictMode + Suspense compat: reference counting ──\r\n // Old approach was a single 60ms grace timer cancelled by the second\r\n // mount(). That works for one mount→unmount→mount cycle but breaks\r\n // when Suspense schedules multiple. Ref counting is naturally robust:\r\n // every mount() increments, every unmount() decrements, teardown only\r\n // runs when count hits 0 AND the grace timer fires without a remount.\r\n const prevRefs = this._mountRefs.get(appName) || 0;\r\n this._mountRefs.set(appName, prevRefs + 1);\r\n logger.wuDebug(`${appName} mount refs: ${prevRefs} → ${prevRefs + 1}`);\r\n\r\n if (this._pendingUnmounts.has(appName)) {\r\n clearTimeout(this._pendingUnmounts.get(appName));\r\n this._pendingUnmounts.delete(appName);\r\n logger.wuDebug(`${appName} deferred unmount cancelled by remount`);\r\n }\r\n\r\n // Already mounted in same container → no-op (refs already incremented above)\r\n if (this.mounted.has(appName)) {\r\n const existing = this.mounted.get(appName);\r\n if (existing.containerSelector === containerSelector) {\r\n logger.wuDebug(`${appName} already mounted in ${containerSelector}`);\r\n return;\r\n }\r\n }\r\n\r\n // Deduplicate concurrent mounts (StrictMode fires effect twice)\r\n if (this._mountingPromises.has(appName)) {\r\n logger.wuDebug(`${appName} mount already in progress, deduplicating`);\r\n return await this._mountingPromises.get(appName);\r\n }\r\n\r\n // Check if app is in keep-alive (hidden) state\r\n const hiddenEntry = this.hidden.get(appName);\r\n if (hiddenEntry) {\r\n if (hiddenEntry.containerSelector === containerSelector) {\r\n // Same container → instant show (no reload)\r\n return await this.show(appName);\r\n }\r\n // Different container → destroy hidden state, remount normally\r\n await this._destroyHidden(appName);\r\n }\r\n\r\n // Track mount promise for deduplication\r\n const mountPromise = this.mountWithRecovery(appName, containerSelector, 0);\r\n this._mountingPromises.set(appName, mountPromise);\r\n\r\n try {\r\n return await mountPromise;\r\n } finally {\r\n this._mountingPromises.delete(appName);\r\n }\r\n }\r\n\r\n /**\r\n * Mount with recovery: self-healing app mounting\r\n */\r\n async mountWithRecovery(appName, containerSelector, attempt = 0) {\r\n const maxAttempts = 3;\r\n\r\n try {\r\n // Start performance measurement\r\n this.performance.startMeasure('mount', appName);\r\n\r\n logger.wuDebug(`Mounting ${appName} in ${containerSelector} (attempt ${attempt + 1})`);\r\n\r\n // Execute beforeLoad hooks\r\n const beforeLoadResult = await this.hooks.execute('beforeLoad', { appName, containerSelector, attempt });\r\n if (beforeLoadResult.cancelled) {\r\n logger.wuWarn('Mount cancelled by beforeLoad hook');\r\n return;\r\n }\r\n\r\n // Call plugin beforeMount hooks\r\n const pluginBeforeMount = await this.pluginSystem.callHook('beforeMount', { appName, containerSelector });\r\n if (pluginBeforeMount === false) {\r\n logger.wuWarn('Mount cancelled by plugin beforeMount hook');\r\n return;\r\n }\r\n\r\n // Verify app is registered\r\n const app = this.apps.get(appName);\r\n if (!app) {\r\n throw new Error(`App ${appName} not registered. Call wu.init() first.`);\r\n }\r\n\r\n // Container reality check\r\n const container = document.querySelector(containerSelector);\r\n if (!container) {\r\n throw new Error(`Container not found: ${containerSelector}`);\r\n }\r\n\r\n // Create sandbox - pasar manifest con styleMode y URL de la app\r\n const sandbox = this.sandbox.create(appName, container, {\r\n manifest: app.manifest,\r\n styleMode: app.manifest?.styleMode,\r\n appUrl: app.url // Pasar URL de la app para filtrar estilos de apps fully-isolated\r\n });\r\n\r\n // Execute afterLoad hooks\r\n await this.hooks.execute('afterLoad', { appName, containerSelector, sandbox });\r\n\r\n // Resolve lifecycle definition\r\n let lifecycle = this.definitions.get(appName);\r\n if (!lifecycle) {\r\n // Load remote app\r\n await this.loadAndMountRemoteApp(app, sandbox);\r\n lifecycle = this.definitions.get(appName);\r\n\r\n if (!lifecycle) {\r\n throw new Error(`App ${appName} did not register with wu.define()`);\r\n }\r\n }\r\n\r\n // Execute beforeMount hooks\r\n const beforeMountResult = await this.hooks.execute('beforeMount', { appName, containerSelector, sandbox, lifecycle });\r\n if (beforeMountResult.cancelled) {\r\n logger.wuWarn('Mount cancelled by beforeMount hook');\r\n return;\r\n }\r\n\r\n // Wait for styles to be ready before mounting\r\n if (sandbox.stylesReady) {\r\n logger.wuDebug(`Waiting for styles to be ready for ${appName}...`);\r\n await sandbox.stylesReady;\r\n logger.wuDebug(`Styles ready for ${appName}`);\r\n }\r\n\r\n // Execute mount lifecycle\r\n await lifecycle.mount(sandbox.container);\r\n\r\n // Register mounted app\r\n this.mounted.set(appName, {\r\n app,\r\n sandbox,\r\n lifecycle,\r\n container: sandbox.container,\r\n hostContainer: container,\r\n containerSelector,\r\n timestamp: Date.now(),\r\n state: 'stable'\r\n });\r\n\r\n // End performance measurement\r\n const mountTime = this.performance.endMeasure('mount', appName);\r\n\r\n // Execute afterMount hooks\r\n await this.hooks.execute('afterMount', { appName, containerSelector, sandbox, mountTime });\r\n\r\n // Call plugin afterMount hooks\r\n await this.pluginSystem.callHook('afterMount', { appName, containerSelector, mountTime });\r\n\r\n // Emit mount event\r\n this.eventBus.emit('app:mounted', { appName, mountTime, attempt }, { appName });\r\n\r\n logger.wuInfo(`${appName} mounted successfully in ${mountTime.toFixed(2)}ms`);\r\n\r\n } catch (error) {\r\n logger.wuError(`Mount attempt ${attempt + 1} failed for ${appName}:`, error);\r\n\r\n // Cleanup sandbox to prevent orphaned shadow DOMs\r\n try {\r\n if (this.sandbox && this.sandbox.sandboxes && this.sandbox.sandboxes.has(appName)) {\r\n const sb = this.sandbox.sandboxes.get(appName);\r\n if (sb && sb.proxySandbox) {\r\n sb.proxySandbox.deactivate();\r\n }\r\n this.sandbox.sandboxes.delete(appName);\r\n logger.wuDebug(`Sandbox cleaned up after mount failure for ${appName}`);\r\n }\r\n } catch (cleanupError) {\r\n logger.wuWarn(`Sandbox cleanup failed for ${appName}:`, cleanupError);\r\n }\r\n\r\n // Use error boundary for intelligent error handling\r\n const errorResult = await this.errorBoundary.handle(error, {\r\n appName,\r\n containerSelector,\r\n retryCount: attempt,\r\n container: containerSelector\r\n });\r\n\r\n // Si el error boundary recupero el error, no necesitamos reintentar\r\n if (errorResult.recovered) {\r\n logger.wuDebug('Error recovered by error boundary');\r\n return;\r\n }\r\n\r\n // Recovery protocol\r\n if (attempt < maxAttempts - 1 && errorResult.action === 'retry') {\r\n logger.wuDebug('Initiating recovery protocol...');\r\n\r\n // Clean app state\r\n await this.appStateCleanup(appName, containerSelector);\r\n\r\n // Temporal stabilization\r\n await new Promise(resolve => setTimeout(resolve, 1000 * (attempt + 1)));\r\n\r\n // Recursive mounting with recovery\r\n return await this.mountWithRecovery(appName, containerSelector, attempt + 1);\r\n }\r\n\r\n // Call plugin error hooks\r\n await this.pluginSystem.callHook('onError', { phase: 'mount', error, appName });\r\n\r\n // Final mount failure - error boundary already handled fallback UI\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * App state cleanup: Enhanced container cleanup with framework protection\r\n */\r\n async appStateCleanup(appName, containerSelector) {\r\n try {\r\n logger.wuDebug(`Starting app state cleanup for ${appName}...`);\r\n\r\n // Clear hidden (keep-alive) state if present\r\n if (this.hidden.has(appName)) {\r\n try {\r\n await this._destroyHidden(appName);\r\n } catch (hiddenError) {\r\n logger.wuWarn('Hidden app cleanup failed:', hiddenError);\r\n }\r\n }\r\n\r\n // Clear any existing mounted state safely\r\n if (this.mounted.has(appName)) {\r\n try {\r\n await this.unmount(appName, { force: true });\r\n } catch (unmountError) {\r\n logger.wuWarn('Unmount failed during cleanup:', unmountError);\r\n }\r\n }\r\n\r\n // Enhanced container cleanup with Vue safety measures\r\n const container = document.querySelector(containerSelector);\r\n if (container) {\r\n // Protect Vue's reactivity system\r\n if (container.shadowRoot) {\r\n try {\r\n // Clear shadow root content safely\r\n const shadowChildren = Array.from(container.shadowRoot.children);\r\n shadowChildren.forEach(child => {\r\n try {\r\n child.remove();\r\n } catch (removeError) {\r\n logger.wuWarn('Failed to remove shadow child:', removeError);\r\n }\r\n });\r\n } catch (shadowError) {\r\n logger.wuWarn('Shadow root cleanup failed:', shadowError);\r\n }\r\n }\r\n\r\n // Clear any direct children if no shadow root\r\n if (!container.shadowRoot && container.children.length > 0) {\r\n try {\r\n container.innerHTML = '';\r\n } catch (htmlError) {\r\n logger.wuWarn('Container innerHTML cleanup failed:', htmlError);\r\n }\r\n }\r\n\r\n // Reset container attributes\r\n container.removeAttribute('data-wu-app');\r\n container.removeAttribute('data-quantum-state');\r\n container.removeAttribute('wu-debug');\r\n }\r\n\r\n // Reset definition state\r\n this.definitions.delete(appName);\r\n\r\n // Clear sandbox registry\r\n if (this.sandbox && this.sandbox.sandboxes) {\r\n this.sandbox.sandboxes.delete(appName);\r\n }\r\n\r\n logger.wuDebug(`App state cleaned successfully for ${appName}`);\r\n\r\n } catch (cleanupError) {\r\n logger.wuWarn(`App cleanup partial failure for ${appName}:`, cleanupError);\r\n\r\n // Emergency cleanup - force clear everything\r\n try {\r\n const container = document.querySelector(containerSelector);\r\n if (container) {\r\n container.style.display = 'none';\r\n setTimeout(() => {\r\n if (container) {\r\n container.style.display = '';\r\n }\r\n }, 100);\r\n }\r\n } catch (emergencyError) {\r\n logger.wuError('Emergency cleanup failed:', emergencyError);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Remote app loader: Load app in the configured sandbox mode.\r\n *\r\n * ⚠️ Honest naming note: \"sandbox\" is a level, not a guarantee.\r\n *\r\n * ┌──────────┬────────────────────┬─────────────────────────────────┐\r\n * │ Mode │ JS isolation │ Real behavior │\r\n * ├──────────┼────────────────────┼─────────────────────────────────┤\r\n * │ module │ NONE (cleanup-only)│ Code runs in main window. The │\r\n * │ (default)│ │ proxy TRACKS side effects so │\r\n * │ │ │ unmount can clean them. App can │\r\n * │ │ │ still pollute globals at will. │\r\n * ├──────────┼────────────────────┼─────────────────────────────────┤\r\n * │ strict │ Iframe-level │ Separate window (real isolation)│\r\n * │ │ │ + real import() (HMR works). │\r\n * │ │ │ Falls back to 'eval' if CORS │\r\n * │ │ │ blocks the import — control via │\r\n * │ │ │ { strictFallback: false }. │\r\n * ├──────────┼────────────────────┼─────────────────────────────────┤\r\n * │ eval │ Proxy-trap-level │ Code runs inside with(proxy){}. │\r\n * │ │ │ All unqualified refs go through │\r\n * │ │ │ traps. Requires UMD/IIFE bundles│\r\n * │ │ │ (not ES modules). │\r\n * └──────────┴────────────────────┴─────────────────────────────────┘\r\n *\r\n * Verify the actual mode used at runtime via `wu.getSandboxInfo(appName)`.\r\n *\r\n * Set per-app: { name: 'app', url: '...', sandbox: 'strict' }\r\n * Or globally: wu.init({ sandbox: 'strict', apps: [...] })\r\n */\r\n async loadAndMountRemoteApp(app, sandbox) {\r\n const requestedMode = app.sandbox || this._sandboxMode || 'module';\r\n // sandbox._actualMode is set by _loadStrict if it falls back to eval\r\n sandbox._requestedMode = requestedMode;\r\n sandbox._actualMode = requestedMode;\r\n\r\n if (requestedMode === 'strict') {\r\n await this._loadStrict(app, sandbox);\r\n } else if (requestedMode === 'eval') {\r\n await this._loadEval(app, sandbox);\r\n } else {\r\n await this._loadModule(app, sandbox);\r\n }\r\n }\r\n\r\n /**\r\n * Inspect the JS isolation level for a mounted app. Useful to verify that\r\n * a 'strict' request didn't silently degrade to 'eval' (CORS failures).\r\n *\r\n * @param {string} appName\r\n * @returns {{ requestedMode: string, actualMode: string, isolationLevel: 'none'|'iframe'|'proxy-trap', mounted: boolean }|null}\r\n *\r\n * @example\r\n * wu.init({ apps: [{ name: 'cart', url: '...', sandbox: 'strict' }] });\r\n * await wu.mount('cart', '#cart');\r\n * const info = wu.getSandboxInfo('cart');\r\n * if (info.actualMode !== 'strict') {\r\n * console.warn('Strict mode degraded — likely a CORS issue with', info);\r\n * }\r\n */\r\n /**\r\n * Tag a style/link element as belonging to a specific app, so that\r\n * `fully-isolated` (alias: `own-only`) styleMode picks it up regardless\r\n * of bundler. Pre-v2.1, only Vite's `data-vite-dev-id` was recognized —\r\n * webpack / esbuild users had to rely on the URL-pattern fallback.\r\n *\r\n * Call this from your app's bootstrap when injecting global styles:\r\n *\r\n * @example\r\n * const style = document.createElement('style');\r\n * style.textContent = '...';\r\n * wu.tagStyleAsApp(style, 'cart');\r\n * document.head.appendChild(style);\r\n *\r\n * @param {HTMLElement} el - <style> or <link> element\r\n * @param {string} appName - The app this style belongs to\r\n */\r\n tagStyleAsApp(el, appName) {\r\n if (!el || typeof el.setAttribute !== 'function' || !appName) return;\r\n el.setAttribute('data-wu-app', appName);\r\n }\r\n\r\n getSandboxInfo(appName) {\r\n const mounted = this.mounted.get(appName) || this.hidden.get(appName);\r\n if (!mounted) return null;\r\n const sb = mounted.sandbox;\r\n const actualMode = sb._actualMode || sb._requestedMode || 'module';\r\n const isolationLevel =\r\n actualMode === 'strict' ? 'iframe' :\r\n actualMode === 'eval' ? 'proxy-trap' :\r\n 'none';\r\n return {\r\n requestedMode: sb._requestedMode || 'module',\r\n actualMode,\r\n isolationLevel,\r\n mounted: this.mounted.has(appName),\r\n };\r\n }\r\n\r\n /**\r\n * Lazy-load iframe sandbox class. Only used by strict mode.\r\n * @private\r\n */\r\n async _ensureIframeSandboxClass() {\r\n if (this._WuIframeSandbox) return this._WuIframeSandbox;\r\n const mod = await import('./wu-iframe-sandbox.js');\r\n this._WuIframeSandbox = mod.WuIframeSandbox;\r\n return this._WuIframeSandbox;\r\n }\r\n\r\n /**\r\n * Lazy-load and instantiate eval-mode dependencies (html parser + script executor).\r\n * Only used when an app uses sandbox: 'eval' (or strict mode falls back to eval).\r\n * @private\r\n */\r\n async _ensureEvalDeps() {\r\n if (!this.htmlParser) {\r\n const { WuHtmlParser } = await import('./wu-html-parser.js');\r\n this.htmlParser = new WuHtmlParser();\r\n }\r\n if (!this.scriptExecutor) {\r\n const { WuScriptExecutor } = await import('./wu-script-executor.js');\r\n this.scriptExecutor = new WuScriptExecutor();\r\n }\r\n }\r\n\r\n /**\r\n * MODULE MODE: import() + patchWindow (default).\r\n * Side effects tracked during load, cleaned on unmount.\r\n * App code runs in global scope.\r\n */\r\n async _loadModule(app, sandbox) {\r\n const moduleUrl = await this.resolveModulePath(app);\r\n logger.wuDebug(`[module] Loading ES module: ${moduleUrl}`);\r\n\r\n const jsSandbox = sandbox.jsSandbox;\r\n if (jsSandbox?.patchWindow) {\r\n jsSandbox.patchWindow();\r\n }\r\n\r\n try {\r\n await this.moduleLoader(moduleUrl, app.name);\r\n logger.wuDebug(`[module] ES module loaded: ${app.name}`);\r\n } catch (error) {\r\n logger.wuError(`[module] Failed to load ${moduleUrl}:`, error);\r\n throw error;\r\n } finally {\r\n if (jsSandbox?.unpatchWindow) {\r\n jsSandbox.unpatchWindow();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * STRICT MODE: Hidden iframe + real import().\r\n *\r\n * The iframe provides a separate window context. import() inside the iframe\r\n * is a real ES module import — tree shaking, source maps, and HMR all work.\r\n *\r\n * Pipeline:\r\n * 1. Create hidden iframe with <base href=\"appUrl\">\r\n * 2. Patch iframe's document → DOM operations go to Shadow DOM\r\n * 3. import() the app module inside iframe\r\n * 4. Wait for wu.define() registration\r\n *\r\n * If import() fails (CORS, network, etc.), the default behavior is to\r\n * fall back to eval mode with a console warning. Set `strictFallback: false`\r\n * on the app config (or globally on init) to throw instead — useful when\r\n * iframe isolation is a hard requirement (e.g. third-party untrusted apps).\r\n */\r\n async _loadStrict(app, sandbox) {\r\n logger.wuDebug(`[strict] Loading ${app.name} via iframe sandbox`);\r\n\r\n // Lazy-load the iframe sandbox class on first use\r\n const IframeSandbox = await this._ensureIframeSandboxClass();\r\n const iframeSandbox = new IframeSandbox(app.name);\r\n iframeSandbox.activate(app.url, sandbox.container, sandbox.shadowRoot);\r\n sandbox.iframeSandbox = iframeSandbox;\r\n\r\n try {\r\n // Resolve module path (same logic as module mode)\r\n const moduleUrl = await this.resolveModulePath(app);\r\n logger.wuDebug(`[strict] Importing module in iframe: ${moduleUrl}`);\r\n\r\n // Import module inside iframe — real import()!\r\n await iframeSandbox.importModule(moduleUrl);\r\n logger.wuDebug(`[strict] Module imported for ${app.name}`);\r\n\r\n } catch (importError) {\r\n // import() failed — likely CORS or module error.\r\n // Resolve fallback policy: per-app > global > default (true)\r\n const fallbackAllowed =\r\n app.strictFallback ?? this._strictFallback ?? true;\r\n\r\n // Destroy failed iframe regardless\r\n iframeSandbox.destroy();\r\n sandbox.iframeSandbox = null;\r\n\r\n if (!fallbackAllowed) {\r\n // Caller demanded strict isolation. Honor it — throw clearly.\r\n throw new Error(\r\n `[strict] iframe import failed for '${app.name}' and strictFallback is disabled.\\n` +\r\n `Original error: ${importError.message}\\n` +\r\n `Fix: ensure the app's dev server sets Access-Control-Allow-Origin headers,\\n` +\r\n `or explicitly allow degrade with { strictFallback: true } or sandbox: 'eval'.`\r\n );\r\n }\r\n\r\n logger.wuWarn(\r\n `[strict] iframe import failed for ${app.name}: ${importError.message}\\n` +\r\n `Falling back to eval mode (fetch + parse + execute with proxy).\\n` +\r\n `To fix: ensure the app's dev server sets Access-Control-Allow-Origin: * headers,\\n` +\r\n `or use sandbox: 'eval' explicitly for UMD/IIFE bundles.\\n` +\r\n `To make this an error instead of a warning, set { strictFallback: false }.`\r\n );\r\n\r\n // Track that the actual isolation level is now 'eval', not 'strict'\r\n sandbox._actualMode = 'eval';\r\n sandbox._fellBackFromStrict = true;\r\n\r\n // Fallback to eval mode\r\n await this._loadEval(app, sandbox);\r\n return;\r\n }\r\n\r\n // Wait for wu.define()\r\n await this._waitForDefine(app.name, 'strict');\r\n\r\n logger.wuDebug(`[strict] ${app.name} loaded and registered via iframe`);\r\n }\r\n\r\n /**\r\n * EVAL MODE: Fetch HTML → parse → execute scripts inside proxy.\r\n *\r\n * Maximum JS isolation via with(proxy) statement — all unqualified\r\n * identifiers (setTimeout, document, fetch) go through proxy traps.\r\n *\r\n * Requires bundled apps (UMD/IIFE). ES modules cannot be eval'd.\r\n * No tree shaking, no source maps, no HMR.\r\n *\r\n * Pipeline:\r\n * 1. Fetch HTML from app URL\r\n * 2. Parse: extract scripts (inline + external), styles, clean DOM\r\n * 3. Inject DOM + styles into Shadow DOM\r\n * 4. Execute all scripts inside the proxy via WuScriptExecutor\r\n * 5. Wait for wu.define()\r\n */\r\n async _loadEval(app, sandbox) {\r\n logger.wuDebug(`[eval] Loading ${app.name} from ${app.url}`);\r\n\r\n const jsSandbox = sandbox.jsSandbox;\r\n const proxy = jsSandbox.getProxy();\r\n\r\n if (!proxy) {\r\n throw new Error(`[eval] No active proxy for ${app.name}. Sandbox must be activated first.`);\r\n }\r\n\r\n // Lazy-load html parser + script executor on first eval-mode app\r\n await this._ensureEvalDeps();\r\n\r\n // 1. Fetch and parse HTML\r\n const parsed = await this.htmlParser.fetchAndParse(app.url, app.name);\r\n\r\n // 2. Inject clean DOM into container\r\n if (parsed.dom) {\r\n sandbox.container.innerHTML = parsed.dom;\r\n }\r\n\r\n // 3. Inject styles into shadow root\r\n const styleTarget = sandbox.shadowRoot || sandbox.container;\r\n\r\n for (const cssText of parsed.styles.inline) {\r\n const style = document.createElement('style');\r\n style.textContent = cssText;\r\n styleTarget.appendChild(style);\r\n }\r\n\r\n for (const href of parsed.styles.external) {\r\n const link = document.createElement('link');\r\n link.rel = 'stylesheet';\r\n link.href = href;\r\n styleTarget.appendChild(link);\r\n }\r\n\r\n // 4. Build and execute scripts inside the proxy\r\n const scripts = [];\r\n for (const content of parsed.scripts.inline) {\r\n scripts.push({ content });\r\n }\r\n for (const src of parsed.scripts.external) {\r\n scripts.push({ src });\r\n }\r\n\r\n await this.scriptExecutor.executeAll(scripts, app.name, proxy);\r\n logger.wuDebug(`[eval] Scripts executed for ${app.name}`);\r\n\r\n // 5. Wait for wu.define()\r\n await this._waitForDefine(app.name, 'eval');\r\n\r\n logger.wuDebug(`[eval] ${app.name} loaded and registered`);\r\n }\r\n\r\n /**\r\n * Wait for an app to call wu.define() with a timeout.\r\n * Resolves the instant define() fires — no polling.\r\n * Shared by module, strict, and eval modes.\r\n */\r\n _waitForDefine(appName, mode, maxWaitTime = 10000) {\r\n if (this.definitions.has(appName)) return Promise.resolve();\r\n\r\n // De-dupe concurrent waiters for the same app (e.g. strict-mode retry)\r\n const existing = this._defineWaiters.get(appName);\r\n if (existing) return existing.promise;\r\n\r\n let resolveFn;\r\n let rejectFn;\r\n const promise = new Promise((resolve, reject) => {\r\n resolveFn = resolve;\r\n rejectFn = reject;\r\n });\r\n\r\n const timer = setTimeout(() => {\r\n if (this._defineWaiters.delete(appName)) {\r\n rejectFn(new Error(\r\n `[${mode}] App '${appName}' loaded but wu.define() was not called within ${maxWaitTime}ms.\\n` +\r\n `Make sure your app calls: window.wu.define('${appName}', { mount, unmount })`\r\n ));\r\n }\r\n }, maxWaitTime);\r\n\r\n this._defineWaiters.set(appName, { resolve: resolveFn, reject: rejectFn, timer, promise });\r\n return promise;\r\n }\r\n\r\n /**\r\n * Cancel a pending define-waiter (called when module load itself fails,\r\n * so the waiter doesn't run out its 10s timeout pointlessly).\r\n * @private\r\n */\r\n _cancelDefineWaiter(appName) {\r\n const waiter = this._defineWaiters.get(appName);\r\n if (!waiter) return;\r\n clearTimeout(waiter.timer);\r\n this._defineWaiters.delete(appName);\r\n }\r\n\r\n /**\r\n * Module path resolver: Intelligent URL construction with fallback\r\n * Intelligently resolves module paths with real-time validation\r\n */\r\n async resolveModulePath(app) {\r\n const entryFile = app.manifest?.entry || 'main.js';\r\n const baseUrl = app.url.replace(/\\/$/, ''); // Remove trailing slash\r\n\r\n // Normalize path: Remove duplicated directories\r\n // If entry already starts with 'src/', 'dist/', etc., use it as-is\r\n const hasFolderPrefix = /^(src|dist|public|build|assets|lib|es)\\//.test(entryFile);\r\n\r\n if (hasFolderPrefix) {\r\n logger.wuDebug(`Entry already has folder prefix: ${entryFile}`);\r\n // Entry already has folder, just use baseUrl + entryFile\r\n const directPath = `${baseUrl}/${entryFile}`;\r\n logger.wuDebug(`Using direct path: ${directPath}`);\r\n return directPath;\r\n }\r\n\r\n // Cache: re-mounting an app should not redo 8 HEADs.\r\n // Keyed by baseUrl+entry so manifest changes invalidate naturally.\r\n const cacheKey = `${baseUrl}::${entryFile}`;\r\n const cached = this._resolvedPaths.get(cacheKey);\r\n if (cached) {\r\n logger.wuDebug(`Using cached resolved path for ${app.name}: ${cached}`);\r\n return cached;\r\n }\r\n\r\n // Multi-path candidates (in order of preference)\r\n const pathCandidates = [\r\n `${baseUrl}/src/${entryFile}`, // Standard structure\r\n `${baseUrl}/${entryFile}`, // Root level\r\n `${baseUrl}/dist/${entryFile}`, // Built version\r\n `${baseUrl}/public/${entryFile}`, // Public folder\r\n `${baseUrl}/build/${entryFile}`, // Build folder\r\n `${baseUrl}/assets/${entryFile}`, // Assets folder\r\n `${baseUrl}/lib/${entryFile}`, // Library folder\r\n `${baseUrl}/es/${entryFile}` // ES modules folder\r\n ];\r\n\r\n logger.wuDebug(`Resolving path for ${app.name} (parallel HEAD probe)...`);\r\n\r\n // Probe all candidates in parallel — fan-out HEAD requests.\r\n // We collect results and then pick the FIRST in priority order\r\n // (not the fastest one), preserving the original semantics.\r\n const results = await Promise.all(\r\n pathCandidates.map(c =>\r\n this.validatePath(c)\r\n .then(ok => (ok ? c : null))\r\n .catch(() => null)\r\n )\r\n );\r\n\r\n const resolved = results.find(r => r !== null);\r\n if (resolved) {\r\n logger.wuDebug(`Path resolved successfully: ${resolved}`);\r\n this._resolvedPaths.set(cacheKey, resolved);\r\n return resolved;\r\n }\r\n\r\n // Fallback: If all candidates fail, use the first one and let the error bubble up\r\n const fallbackPath = pathCandidates[0];\r\n logger.wuWarn(`All path candidates failed, using fallback: ${fallbackPath}`);\r\n return fallbackPath;\r\n }\r\n\r\n /**\r\n * Path validator: HEAD-based existence + content-type check.\r\n * Falls back to ranged GET only if HEAD is unsupported (405) — most dev\r\n * servers (Vite, webpack-dev-server, http-server) handle HEAD natively.\r\n *\r\n * Detects SPA HTML-fallback by content-type. Pure HEAD avoids downloading\r\n * full bundles (Angular bundles can be MBs each, 8 candidates × MBs is a\r\n * lot of bandwidth for path resolution).\r\n */\r\n async validatePath(url) {\r\n try {\r\n logger.wuDebug(`Probing path: ${url}`);\r\n\r\n let response = await fetch(url, {\r\n method: 'HEAD',\r\n cache: 'no-cache',\r\n signal: AbortSignal.timeout(2000)\r\n });\r\n\r\n // Some servers (older nginx configs, S3 static hosting) reject HEAD.\r\n // Fall back to a tiny ranged GET — first 256 bytes is plenty to sniff.\r\n if (response.status === 405 || response.status === 501) {\r\n logger.wuDebug(`HEAD not supported (${response.status}), falling back to ranged GET: ${url}`);\r\n response = await fetch(url, {\r\n method: 'GET',\r\n cache: 'no-cache',\r\n headers: { Range: 'bytes=0-255' },\r\n signal: AbortSignal.timeout(2000)\r\n });\r\n }\r\n\r\n if (!response.ok && response.status !== 206) {\r\n logger.wuDebug(`Path validation failed - HTTP ${response.status}: ${url}`);\r\n return false;\r\n }\r\n\r\n const contentType = (response.headers.get('content-type') || '').toLowerCase();\r\n\r\n // Reject obvious SPA HTML fallback (Vite/webpack-dev-server in SPA mode\r\n // return 200 + text/html for any non-matching URL).\r\n if (contentType.startsWith('text/html')) {\r\n logger.wuDebug(`Path validation failed - HTML fallback detected: ${url}`);\r\n return false;\r\n }\r\n\r\n // Accept anything that looks like JavaScript, or extension-based when\r\n // the server doesn't bother setting content-type (some static hosts).\r\n const isJavaScript =\r\n contentType.includes('javascript') ||\r\n contentType.includes('module') ||\r\n contentType.includes('text/plain') ||\r\n contentType === '' || // No content-type set → trust the extension\r\n url.endsWith('.js') ||\r\n url.endsWith('.mjs');\r\n\r\n if (!isJavaScript) {\r\n logger.wuDebug(`Path validation failed - non-JS content-type '${contentType}': ${url}`);\r\n return false;\r\n }\r\n\r\n logger.wuDebug(`Path validation successful: ${url}`);\r\n return true;\r\n\r\n } catch (error) {\r\n // Network, timeout, or parsing error means path is invalid\r\n logger.wuDebug(`Path validation failed for ${url}: ${error.message}`);\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Module loader: Advanced registration patterns\r\n * Handles asynchronous registration with timing synchronization\r\n * Verifica que definitions tenga el lifecycle despues de cargar\r\n */\r\n async moduleLoader(moduleUrl, appName) {\r\n // Check if already registered\r\n if (this.definitions.has(appName)) {\r\n logger.wuDebug(`App ${appName} already registered`);\r\n return;\r\n }\r\n\r\n logger.wuDebug(`Using event-based registration for ${appName}`);\r\n\r\n // Set up waiter BEFORE import so a synchronously-firing define()\r\n // inside the module is captured atomically.\r\n const definePromise = this._waitForDefine(appName, 'module');\r\n\r\n try {\r\n await import(/* @vite-ignore */ moduleUrl);\r\n } catch (loadError) {\r\n this._cancelDefineWaiter(appName);\r\n logger.wuError(`Failed to import module ${moduleUrl}:`, loadError);\r\n throw loadError;\r\n }\r\n\r\n await definePromise;\r\n logger.wuDebug(`App ${appName} loaded and registered (verified in definitions)`);\r\n }\r\n\r\n /**\r\n * Desmontar una aplicacion.\r\n *\r\n * With keepAlive, the app is hidden instead of destroyed.\r\n * All DOM, JS state, timers, and iframe are preserved.\r\n * Re-mounting shows the app instantly.\r\n *\r\n * keepAlive is resolved from (in priority order):\r\n * 1. options.keepAlive (per-call override)\r\n * 2. app config keepAlive (set via wu.app() or registerApp)\r\n * 3. false (default: destroy)\r\n *\r\n * Use options.force = true to destroy even if keepAlive is set.\r\n *\r\n * @param {string} appName - Nombre de la app\r\n * @param {Object} [options] - Unmount options\r\n * @param {boolean} [options.keepAlive] - Preserve state for instant re-mount\r\n * @param {boolean} [options.force] - Force destroy even if keepAlive\r\n */\r\n async unmount(appName, options = {}) {\r\n logger.wuDebug(`Unmounting ${appName}`);\r\n\r\n const mounted = this.mounted.get(appName);\r\n if (!mounted) {\r\n // Check if it's hidden (keep-alive) — force destroy if requested\r\n if (options.force && this.hidden.has(appName)) {\r\n this._mountRefs.delete(appName);\r\n return await this._destroyHidden(appName);\r\n }\r\n logger.wuWarn(`App ${appName} not mounted`);\r\n return;\r\n }\r\n\r\n // Resolve keepAlive: per-call > per-app config > default false\r\n const keepAlive = options.force\r\n ? false\r\n : (options.keepAlive ?? mounted.app?.keepAlive ?? false);\r\n\r\n if (keepAlive) {\r\n return await this.hide(appName);\r\n }\r\n\r\n // Force → bypass ref counting, immediate unmount\r\n if (options.force) {\r\n this._mountRefs.delete(appName);\r\n if (this._pendingUnmounts.has(appName)) {\r\n clearTimeout(this._pendingUnmounts.get(appName));\r\n this._pendingUnmounts.delete(appName);\r\n }\r\n return await this._executeUnmount(appName, mounted);\r\n }\r\n\r\n // ── Ref counting + grace period ──\r\n // Each unmount() decrements. Only the LAST unmount (count → 0) starts a\r\n // grace timer. A subsequent mount() before the timer fires increments\r\n // the count and cancels the timer, keeping the app alive.\r\n const prev = this._mountRefs.get(appName) || 1;\r\n const next = prev - 1;\r\n this._mountRefs.set(appName, Math.max(0, next));\r\n logger.wuDebug(`${appName} unmount refs: ${prev} → ${next}`);\r\n\r\n if (next > 0) {\r\n logger.wuDebug(`${appName} unmount skipped: ${next} ref(s) still active`);\r\n return;\r\n }\r\n\r\n if (this._pendingUnmounts.has(appName)) {\r\n clearTimeout(this._pendingUnmounts.get(appName));\r\n }\r\n\r\n this._pendingUnmounts.set(appName, setTimeout(async () => {\r\n this._pendingUnmounts.delete(appName);\r\n // Re-check refs at fire time — caller may have re-mounted during grace\r\n if ((this._mountRefs.get(appName) || 0) > 0) return;\r\n // Re-verify: only unmount if the same mount entry is still current\r\n if (this.mounted.has(appName) && this.mounted.get(appName) === mounted) {\r\n try {\r\n await this._executeUnmount(appName, mounted);\r\n this._mountRefs.delete(appName);\r\n } catch (error) {\r\n logger.wuError(`Deferred unmount failed for ${appName}:`, error);\r\n }\r\n }\r\n }, 60));\r\n }\r\n\r\n /**\r\n * Execute the actual unmount immediately (no deferral).\r\n * Called by the deferred timer, force unmount, or destroy.\r\n * @private\r\n */\r\n async _executeUnmount(appName, mounted) {\r\n try {\r\n // Execute beforeUnmount hooks\r\n const beforeUnmountResult = await this.hooks.execute('beforeUnmount', { appName, mounted });\r\n if (beforeUnmountResult.cancelled) {\r\n logger.wuWarn('Unmount cancelled by beforeUnmount hook');\r\n return;\r\n }\r\n\r\n // Call plugin beforeUnmount hooks\r\n const pluginBeforeUnmount = await this.pluginSystem.callHook('beforeUnmount', { appName });\r\n if (pluginBeforeUnmount === false) {\r\n logger.wuWarn('Unmount cancelled by plugin beforeUnmount hook');\r\n return;\r\n }\r\n\r\n // Ejecutar unmount del lifecycle si existe\r\n if (mounted.lifecycle?.unmount) {\r\n await mounted.lifecycle.unmount(mounted.container);\r\n }\r\n\r\n // Destroy iframe sandbox if present (strict mode)\r\n if (mounted.sandbox.iframeSandbox) {\r\n mounted.sandbox.iframeSandbox.destroy();\r\n mounted.sandbox.iframeSandbox = null;\r\n }\r\n\r\n // Limpiar sandbox\r\n this.sandbox.cleanup(mounted.sandbox);\r\n\r\n // Remover del registro de montadas\r\n this.mounted.delete(appName);\r\n\r\n // Execute afterUnmount hooks\r\n await this.hooks.execute('afterUnmount', { appName });\r\n\r\n // Call plugin afterUnmount hooks\r\n await this.pluginSystem.callHook('afterUnmount', { appName });\r\n\r\n // Emit unmount event\r\n this.eventBus.emit('app:unmounted', { appName }, { appName });\r\n\r\n logger.wuDebug(`${appName} unmounted successfully`);\r\n } catch (error) {\r\n logger.wuError(`Failed to unmount ${appName}:`, error);\r\n\r\n // Call plugin error hooks\r\n await this.pluginSystem.callHook('onError', { phase: 'unmount', error, appName });\r\n\r\n // Emit error event\r\n this.eventBus.emit('app:error', { appName, error: error.message }, { appName });\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Hide a mounted app (keep-alive).\r\n *\r\n * Preserves all state: DOM in Shadow DOM, JS in iframe, timers, listeners.\r\n * The app's optional `deactivate()` lifecycle hook is called.\r\n * Re-show with `show()` or `mount()` with the same container.\r\n *\r\n * @param {string} appName - App to hide\r\n */\r\n async hide(appName) {\r\n const mounted = this.mounted.get(appName);\r\n if (!mounted) {\r\n logger.wuWarn(`Cannot hide ${appName}: not mounted`);\r\n return;\r\n }\r\n\r\n logger.wuDebug(`Hiding ${appName} (keep-alive)`);\r\n\r\n // Call optional deactivate lifecycle hook\r\n if (mounted.lifecycle?.deactivate) {\r\n try {\r\n await mounted.lifecycle.deactivate(mounted.container);\r\n } catch (err) {\r\n logger.wuWarn(`deactivate() failed for ${appName}:`, err);\r\n }\r\n }\r\n\r\n // Execute beforeUnmount hooks (so plugins know)\r\n await this.hooks.execute('beforeUnmount', { appName, mounted, keepAlive: true });\r\n await this.pluginSystem.callHook('beforeUnmount', { appName, keepAlive: true });\r\n\r\n // Hide the host container — all Shadow DOM content stays intact\r\n mounted.hostContainer.style.display = 'none';\r\n mounted.state = 'hidden';\r\n mounted.hiddenAt = Date.now();\r\n\r\n // Move from mounted → hidden\r\n this.hidden.set(appName, mounted);\r\n this.mounted.delete(appName);\r\n\r\n // Execute afterUnmount hooks\r\n await this.hooks.execute('afterUnmount', { appName, keepAlive: true });\r\n await this.pluginSystem.callHook('afterUnmount', { appName, keepAlive: true });\r\n\r\n // Emit event\r\n this.eventBus.emit('app:hidden', { appName }, { appName });\r\n\r\n logger.wuInfo(`${appName} hidden (keep-alive) — state preserved`);\r\n }\r\n\r\n /**\r\n * Show a hidden (keep-alive) app.\r\n *\r\n * Restores visibility instantly — no reload, no remount.\r\n * The app's optional `activate()` lifecycle hook is called.\r\n *\r\n * @param {string} appName - App to show\r\n */\r\n async show(appName) {\r\n const hidden = this.hidden.get(appName);\r\n if (!hidden) {\r\n logger.wuWarn(`Cannot show ${appName}: not in keep-alive state`);\r\n return;\r\n }\r\n\r\n this.performance.startMeasure('show', appName);\r\n logger.wuDebug(`Showing ${appName} from keep-alive`);\r\n\r\n // Execute beforeMount hooks\r\n await this.hooks.execute('beforeMount', {\r\n appName,\r\n containerSelector: hidden.containerSelector,\r\n sandbox: hidden.sandbox,\r\n lifecycle: hidden.lifecycle,\r\n keepAlive: true\r\n });\r\n await this.pluginSystem.callHook('beforeMount', {\r\n appName,\r\n containerSelector: hidden.containerSelector,\r\n keepAlive: true\r\n });\r\n\r\n // Show the host container\r\n hidden.hostContainer.style.display = '';\r\n hidden.state = 'stable';\r\n delete hidden.hiddenAt;\r\n\r\n // Move from hidden → mounted\r\n this.mounted.set(appName, hidden);\r\n this.hidden.delete(appName);\r\n\r\n // Call optional activate lifecycle hook\r\n if (hidden.lifecycle?.activate) {\r\n try {\r\n await hidden.lifecycle.activate(hidden.container);\r\n } catch (err) {\r\n logger.wuWarn(`activate() failed for ${appName}:`, err);\r\n }\r\n }\r\n\r\n const showTime = this.performance.endMeasure('show', appName);\r\n\r\n // Execute afterMount hooks\r\n await this.hooks.execute('afterMount', {\r\n appName,\r\n containerSelector: hidden.containerSelector,\r\n sandbox: hidden.sandbox,\r\n mountTime: showTime,\r\n keepAlive: true\r\n });\r\n await this.pluginSystem.callHook('afterMount', {\r\n appName,\r\n containerSelector: hidden.containerSelector,\r\n mountTime: showTime,\r\n keepAlive: true\r\n });\r\n\r\n // Emit event\r\n this.eventBus.emit('app:shown', { appName, showTime }, { appName });\r\n\r\n logger.wuInfo(`${appName} shown from keep-alive in ${showTime.toFixed(2)}ms`);\r\n }\r\n\r\n /**\r\n * Force-destroy a hidden (keep-alive) app.\r\n * Runs full cleanup: lifecycle unmount, iframe destroy, sandbox cleanup.\r\n *\r\n * @param {string} appName\r\n * @private\r\n */\r\n async _destroyHidden(appName) {\r\n const hidden = this.hidden.get(appName);\r\n if (!hidden) return;\r\n\r\n logger.wuDebug(`Force-destroying hidden app: ${appName}`);\r\n\r\n // Show first (so unmount sees the container)\r\n hidden.hostContainer.style.display = '';\r\n hidden.state = 'stable';\r\n\r\n // Move back to mounted temporarily\r\n this.mounted.set(appName, hidden);\r\n this.hidden.delete(appName);\r\n\r\n // Now do a full unmount\r\n await this.unmount(appName, { force: true });\r\n }\r\n\r\n /**\r\n * Check if an app is in keep-alive (hidden) state.\r\n * @param {string} appName\r\n * @returns {boolean}\r\n */\r\n isHidden(appName) {\r\n return this.hidden.has(appName);\r\n }\r\n\r\n /**\r\n * Cargar componente compartido (para imports/exports)\r\n * @param {string} componentPath - Ruta del componente (ej: \"shared.Button\")\r\n */\r\n async use(componentPath) {\r\n const [appName, componentName] = componentPath.split('.');\r\n\r\n if (!appName || !componentName) {\r\n throw new Error(`Invalid component path: ${componentPath}. Use format \"app.component\"`);\r\n }\r\n\r\n const app = this.apps.get(appName);\r\n if (!app) {\r\n throw new Error(`App ${appName} not registered`);\r\n }\r\n\r\n const manifest = this.manifests.get(appName);\r\n const exportPath = manifest?.wu?.exports?.[componentName];\r\n\r\n if (!exportPath) {\r\n throw new Error(`Component ${componentName} not exported by ${appName}`);\r\n }\r\n\r\n // Cargar componente\r\n return await this.loader.loadComponent(app.url, exportPath);\r\n }\r\n\r\n /**\r\n * Obtener informacion de una app\r\n * @param {string} appName - Nombre de la app\r\n */\r\n getAppInfo(appName) {\r\n return {\r\n registered: this.apps.get(appName),\r\n manifest: this.manifests.get(appName),\r\n mounted: this.mounted.get(appName),\r\n definition: this.definitions.get(appName)\r\n };\r\n }\r\n\r\n /**\r\n * Obtener estadisticas del framework\r\n */\r\n getStats() {\r\n return {\r\n registered: this.apps.size,\r\n defined: this.definitions.size,\r\n mounted: this.mounted.size,\r\n hidden: this.hidden.size,\r\n apps: Array.from(this.apps.keys())\r\n };\r\n }\r\n\r\n /**\r\n * Store methods: Convenience methods for state management\r\n */\r\n\r\n /**\r\n * Get value from global store\r\n * @param {string} path - Dot notation path\r\n * @returns {*} Value at path\r\n */\r\n getState(path) {\r\n return this.store.get(path);\r\n }\r\n\r\n /**\r\n * Set value in global store\r\n * @param {string} path - Dot notation path\r\n * @param {*} value - Value to set\r\n * @returns {number} Sequence number\r\n */\r\n setState(path, value) {\r\n return this.store.set(path, value);\r\n }\r\n\r\n /**\r\n * Subscribe to state changes\r\n * @param {string} pattern - Path or pattern\r\n * @param {Function} callback - Callback function\r\n * @returns {Function} Unsubscribe function\r\n */\r\n onStateChange(pattern, callback) {\r\n return this.store.on(pattern, callback);\r\n }\r\n\r\n /**\r\n * Batch set multiple state values\r\n * @param {Object} updates - Object with path:value pairs\r\n * @returns {Array} Sequence numbers\r\n */\r\n batchState(updates) {\r\n return this.store.batch(updates);\r\n }\r\n\r\n /**\r\n * Get store metrics\r\n * @returns {Object} Performance metrics\r\n */\r\n getStoreMetrics() {\r\n return this.store.getMetrics();\r\n }\r\n\r\n /**\r\n * Clear all state\r\n */\r\n clearState() {\r\n this.store.clear();\r\n }\r\n\r\n /**\r\n * Set a URL override for an app (QA/testing).\r\n * Sets a cookie so the override persists across page reloads.\r\n * Only affects the current browser — no one else sees it.\r\n *\r\n * @param {string} appName - App to override\r\n * @param {string} url - Override URL (e.g., 'http://localhost:5173')\r\n * @param {Object} [options]\r\n * @param {number} [options.maxAge=86400] - Cookie lifetime in seconds (default: 24h)\r\n *\r\n * @example\r\n * wu.override('cart', 'http://localhost:5173');\r\n * wu.override('header', 'https://preview-abc123.vercel.app');\r\n */\r\n override(appName, url, options) {\r\n this.overrides.set(appName, url, options);\r\n }\r\n\r\n /**\r\n * Remove URL override for an app.\r\n * @param {string} appName\r\n */\r\n removeOverride(appName) {\r\n this.overrides.remove(appName);\r\n }\r\n\r\n /**\r\n * Get all active overrides.\r\n * @returns {Object} { appName: url, ... }\r\n */\r\n getOverrides() {\r\n return this.overrides.getAll();\r\n }\r\n\r\n /**\r\n * Remove all overrides.\r\n */\r\n clearOverrides() {\r\n this.overrides.clearAll();\r\n }\r\n\r\n /**\r\n * Prefetch one or more apps before they're needed.\r\n *\r\n * Uses Speculation Rules API (Chrome 121+), falls back to\r\n * <link rel=\"modulepreload\"> or <link rel=\"prefetch\">.\r\n *\r\n * @param {string|string[]} appNames - App name(s) to prefetch\r\n * @param {Object} [options]\r\n * @param {'immediate'|'hover'|'visible'|'idle'} [options.on='immediate'] - When to trigger\r\n * @param {string|Element} [options.target] - Element for hover/visible triggers\r\n * @param {'conservative'|'moderate'|'eager'} [options.eagerness='moderate'] - Speculation eagerness\r\n * @returns {Promise<void>|Function} Promise or cleanup function\r\n *\r\n * @example\r\n * wu.prefetch('cart');\r\n * wu.prefetch('cart', { on: 'hover', target: '#cart-link' });\r\n * wu.prefetch('cart', { on: 'visible', target: '#cart-section' });\r\n * wu.prefetch(['profile', 'settings'], { on: 'idle' });\r\n */\r\n prefetch(appNames, options) {\r\n return this.prefetcher.prefetch(appNames, options);\r\n }\r\n\r\n /**\r\n * Prefetch all registered but not-yet-mounted apps.\r\n * @param {Object} [options] - Same options as prefetch()\r\n */\r\n prefetchAll(options) {\r\n return this.prefetcher.prefetchAll(options);\r\n }\r\n\r\n /**\r\n * Create WuApp instance for declarative usage\r\n * @param {string} name - App name\r\n * @param {Object} config - Configuration { url, container, autoInit }\r\n * @returns {WuApp} WuApp instance\r\n */\r\n app(name, config) {\r\n return new WuApp(name, config, this);\r\n }\r\n\r\n /**\r\n * Limpiar todo el framework\r\n */\r\n async destroy() {\r\n logger.wuDebug('Destroying framework...');\r\n\r\n try {\r\n // Execute beforeDestroy hooks\r\n await this.hooks.execute('beforeDestroy', {});\r\n\r\n // Call plugin onDestroy hooks\r\n await this.pluginSystem.callHook('onDestroy', {});\r\n\r\n // Cancel all pending deferred unmounts\r\n for (const timer of this._pendingUnmounts.values()) {\r\n clearTimeout(timer);\r\n }\r\n this._pendingUnmounts.clear();\r\n this._mountingPromises.clear();\r\n\r\n // Cancel and reject any pending define() waiters\r\n for (const [, waiter] of this._defineWaiters) {\r\n clearTimeout(waiter.timer);\r\n waiter.reject(new Error('Framework destroyed'));\r\n }\r\n this._defineWaiters.clear();\r\n this._resolvedPaths.clear();\r\n this._mountRefs.clear();\r\n\r\n // Force-destroy all hidden (keep-alive) apps first\r\n for (const appName of [...this.hidden.keys()]) {\r\n await this._destroyHidden(appName);\r\n }\r\n\r\n // Desmontar todas las apps\r\n for (const appName of [...this.mounted.keys()]) {\r\n await this.unmount(appName, { force: true });\r\n }\r\n\r\n // Limpiar sistemas esenciales\r\n this.cache.clear();\r\n this.eventBus.removeAll();\r\n this.eventBus.clearHistory();\r\n this.performance.clearMetrics();\r\n\r\n // Limpiar advanced systems\r\n this.pluginSystem.cleanup();\r\n this.strategies.cleanup();\r\n this.errorBoundary.cleanup();\r\n this.hooks.cleanup();\r\n this.prefetcher.cleanup();\r\n\r\n // Limpiar registros\r\n this.apps.clear();\r\n this.definitions.clear();\r\n this.manifests.clear();\r\n this.mounted.clear();\r\n this.hidden.clear();\r\n\r\n // Limpiar store\r\n this.store.clear();\r\n\r\n this.isInitialized = false;\r\n\r\n // Execute afterDestroy hooks\r\n await this.hooks.execute('afterDestroy', {});\r\n\r\n logger.wuDebug('Framework destroyed');\r\n } catch (error) {\r\n logger.wuError('Error during destroy:', error);\r\n throw error;\r\n }\r\n }\r\n}\r\n","/**\r\n * WU-FRAMEWORK: UNIVERSAL MICROFRONTENDS\r\n *\r\n * Framework agnostic microfrontends with Shadow DOM isolation.\r\n * Supports React, Vue, Angular, Svelte, Solid, Preact, Lit, Vanilla.\r\n *\r\n * @example\r\n * import { wu, emit, on } from 'wu-framework';\r\n *\r\n * const canvas = wu.app('canvas', { url: 'http://localhost:5178', container: '#canvas' });\r\n * await canvas.mount();\r\n *\r\n * emit('user:login', { userId: 123 });\r\n * on('user:*', (e) => console.log(e.data));\r\n */\r\n\r\nimport { WuCore } from './core/wu-core.js';\r\n// WuAI is loaded lazily via setupLazyAi() — see below. Not imported here so\r\n// the wu-ai chunk (~80 KB) stays out of the main bundle until first use.\r\n\r\n// Methods that return `this` for chaining — these MUST work sync, so we\r\n// queue calls and return the proxy. They are flushed against the real\r\n// instance once it loads.\r\nconst AI_CHAINABLE = new Set([\r\n 'provider', 'action', 'trigger', 'capability', 'workflow',\r\n 'removeApp', 'init',\r\n]);\r\n\r\n// Sub-object getters (e.g. wu.ai.context.configure(...)) — each returns\r\n// a small proxy that forwards method calls asynchronously.\r\nconst AI_SUB_OBJECTS = new Set(['context', 'conversation', 'permissions']);\r\n\r\n// Methods that return a value sync. If called before the chunk loads we\r\n// return a safe default and queue the real call for after-load.\r\nconst AI_SYNC_RETURNERS = {\r\n tools: () => [],\r\n expose: () => false,\r\n getStats: () => ({ initialized: false, lazy: true }),\r\n};\r\n\r\n// Sync void methods — queue them (no return value needed)\r\nconst AI_SYNC_VOID = new Set([\r\n 'abort', 'destroy', 'confirmTool', 'rejectTool', 'fireTrigger',\r\n]);\r\n\r\n// Methods that return an async generator\r\nconst AI_ASYNC_GEN = new Set(['stream', 'agent', 'runWorkflow']);\r\n\r\n/**\r\n * Install a lazy-loading proxy on wu.ai. The proxy preserves the sync\r\n * chaining API while deferring the actual chunk load until first use.\r\n */\r\nfunction setupLazyAi(wuInstance) {\r\n let _aiInstance = null;\r\n let _loadPromise = null;\r\n const _queue = []; // { kind: 'method'|'sub', prop, args, parent? }\r\n\r\n const ensureLoad = () => {\r\n if (_aiInstance) return Promise.resolve(_aiInstance);\r\n if (_loadPromise) return _loadPromise;\r\n _loadPromise = import('./ai/wu-ai.js').then(({ WuAI }) => {\r\n _aiInstance = new WuAI({\r\n eventBus: wuInstance.eventBus,\r\n store: wuInstance.store,\r\n core: wuInstance,\r\n // Closure-captured secret token. WuAI will inject it into every\r\n // emit. EventBus rejects appName='wu-ai' WITHOUT a matching token,\r\n // closing the spoofing vector even when strictMode is on.\r\n token: wuInstance.eventBus.getInternalToken?.('wu-ai') || null,\r\n });\r\n // Flush queued calls in order\r\n for (const call of _queue) {\r\n try {\r\n if (call.kind === 'method') {\r\n _aiInstance[call.prop](...call.args);\r\n } else if (call.kind === 'sub') {\r\n const sub = _aiInstance[call.parent];\r\n if (sub && typeof sub[call.prop] === 'function') {\r\n sub[call.prop](...call.args);\r\n }\r\n }\r\n } catch (err) {\r\n // Errors during flush surface in next tick rather than blocking\r\n setTimeout(() => { throw err; }, 0);\r\n }\r\n }\r\n _queue.length = 0;\r\n return _aiInstance;\r\n });\r\n return _loadPromise;\r\n };\r\n\r\n // Build a sub-object proxy for context/conversation/permissions\r\n const makeSubProxy = (parentProp) => new Proxy({}, {\r\n get(_, method) {\r\n if (_aiInstance) {\r\n const sub = _aiInstance[parentProp];\r\n const val = sub?.[method];\r\n return typeof val === 'function' ? val.bind(sub) : val;\r\n }\r\n return (...args) => {\r\n // Queue with sub-object context. Best-effort: returns void.\r\n _queue.push({ kind: 'sub', parent: parentProp, prop: method, args });\r\n ensureLoad();\r\n };\r\n },\r\n });\r\n\r\n const aiProxy = new Proxy({}, {\r\n get(_, prop) {\r\n // Once loaded, delegate every access to the real instance.\r\n if (_aiInstance) {\r\n const val = Reflect.get(_aiInstance, prop);\r\n return typeof val === 'function' ? val.bind(_aiInstance) : val;\r\n }\r\n\r\n if (prop === 'isLazy') return true;\r\n if (prop === 'isLoaded') return false;\r\n\r\n // Sub-object passthrough\r\n if (AI_SUB_OBJECTS.has(prop)) return makeSubProxy(prop);\r\n\r\n // Chainable config: queue + return proxy synchronously\r\n if (AI_CHAINABLE.has(prop)) {\r\n return (...args) => {\r\n _queue.push({ kind: 'method', prop, args });\r\n ensureLoad();\r\n return aiProxy;\r\n };\r\n }\r\n\r\n // Sync void: queue, return undefined\r\n if (AI_SYNC_VOID.has(prop)) {\r\n return (...args) => {\r\n _queue.push({ kind: 'method', prop, args });\r\n ensureLoad();\r\n };\r\n }\r\n\r\n // Sync returners: return placeholder synchronously, do NOT queue\r\n if (prop in AI_SYNC_RETURNERS) {\r\n return AI_SYNC_RETURNERS[prop];\r\n }\r\n\r\n // Async generator\r\n if (AI_ASYNC_GEN.has(prop)) {\r\n return async function* lazyAsyncGen(...args) {\r\n const ai = await ensureLoad();\r\n yield* ai[prop](...args);\r\n };\r\n }\r\n\r\n // Default: any other method becomes async returning Promise.\r\n // Covers send, json, intent, execute, fireTrigger and any future API.\r\n return (...args) => ensureLoad().then(ai => {\r\n const fn = ai[prop];\r\n if (typeof fn === 'function') return fn.apply(ai, args);\r\n return fn;\r\n });\r\n },\r\n });\r\n\r\n Object.defineProperty(wuInstance, 'ai', {\r\n get() { return _aiInstance || aiProxy; },\r\n configurable: true,\r\n });\r\n\r\n // Public warm-up — `await wu.aiReady()` to get the real instance up front.\r\n wuInstance.aiReady = ensureLoad;\r\n}\r\n\r\n// --- Singleton: reuse host instance if it exists ---\r\nlet wu;\r\n\r\nif (typeof window !== 'undefined' && window.wu && window.wu._isWuFramework) {\r\n wu = window.wu;\r\n} else {\r\n wu = new WuCore();\r\n wu._isWuFramework = true;\r\n\r\n // Also store on a Symbol key for collision-safe access\r\n if (typeof window !== 'undefined') {\r\n const WU_KEY = Symbol.for('wu-framework');\r\n window[WU_KEY] = wu;\r\n }\r\n}\r\n\r\n// Expose globally for microfrontends\r\nif (typeof window !== 'undefined') {\r\n // Warn if window.wu exists but is not a Wu Framework instance\r\n if (window.wu && !window.wu._isWuFramework) {\r\n console.warn('[Wu Framework] window.wu already exists and is not a Wu Framework instance. Overwriting. Use Symbol.for(\"wu-framework\") for collision-safe access.');\r\n }\r\n window.wu = wu;\r\n\r\n if (!wu.version) {\r\n // __WU_VERSION__ is replaced at build time with package.json version.\r\n // Fallback handles raw-source imports (no bundler).\r\n wu.version = typeof __WU_VERSION__ !== 'undefined' ? __WU_VERSION__ : '0.0.0-dev';\r\n wu.info = {\r\n name: 'Wu Framework',\r\n description: 'Universal Microfrontends',\r\n features: ['Framework Agnostic', 'Zero Config', 'Shadow DOM Isolation', 'Runtime Loading']\r\n };\r\n }\r\n\r\n // Event Bus shortcuts on window.wu\r\n if (!wu.emit) {\r\n wu.emit = (event, data, opts) => wu.eventBus.emit(event, data, opts);\r\n wu.on = (event, cb) => wu.eventBus.on(event, cb);\r\n wu.once = (event, cb) => wu.eventBus.once(event, cb);\r\n wu.off = (event, cb) => wu.eventBus.off(event, cb);\r\n }\r\n\r\n // Prefetch shortcuts on window.wu\r\n if (!wu.prefetch) {\r\n wu.prefetch = (appNames, opts) => wu.prefetcher.prefetch(appNames, opts);\r\n wu.prefetchAll = (opts) => wu.prefetcher.prefetchAll(opts);\r\n }\r\n\r\n // Override shortcuts on window.wu\r\n if (!wu.override) {\r\n wu.override = (name, url, opts) => wu.overrides.set(name, url, opts);\r\n wu.removeOverride = (name) => wu.overrides.remove(name);\r\n wu.getOverrides = () => wu.overrides.getAll();\r\n wu.clearOverrides = () => wu.overrides.clearAll();\r\n }\r\n\r\n // Log control: window.wu.silence() / window.wu.verbose()\r\n if (!wu.silence) {\r\n wu.silence = async () => { const { silenceAllLogs } = await import('./core/wu-logger.js'); silenceAllLogs(); };\r\n wu.verbose = async () => { const { enableAllLogs } = await import('./core/wu-logger.js'); enableAllLogs(); };\r\n }\r\n\r\n // AI integration — lazy-loaded chunk + transparent proxy.\r\n // The wu-ai subsystem (~80–100 KB minified) lives in a separate chunk\r\n // and is only fetched on first access of `wu.ai.*`. Chainable config\r\n // methods (provider/action/trigger/...) queue calls sync and return the\r\n // proxy. Async methods (send/stream/agent/...) await the import + delegate.\r\n // Use `await wu.aiReady()` to force load + get the real instance.\r\n if (!wu.ai) {\r\n setupLazyAi(wu);\r\n }\r\n\r\n // MCP bridge — connects to wu-mcp-server for AI agent control\r\n if (!wu.mcp) {\r\n let _mcpBridge = null;\r\n wu.mcp = {\r\n async connect(url = 'ws://localhost:19100', options = {}) {\r\n if (!_mcpBridge) {\r\n const { createMcpBridge } = await import('./core/wu-mcp-bridge.js');\r\n _mcpBridge = createMcpBridge(wu);\r\n }\r\n _mcpBridge.connect(url, options);\r\n },\r\n disconnect() {\r\n _mcpBridge?.disconnect();\r\n },\r\n isConnected() {\r\n return _mcpBridge?.isConnected() || false;\r\n },\r\n };\r\n }\r\n}\r\n\r\n// --- Primary exports ---\r\nexport { wu };\r\nexport default wu;\r\n\r\n// --- Core classes (advanced usage) ---\r\nexport { WuCore } from './core/wu-core.js';\r\nexport { WuLoader } from './core/wu-loader.js';\r\nexport { WuSandbox, normalizeStyleMode } from './core/wu-sandbox.js';\r\nexport { WuManifest } from './core/wu-manifest.js';\r\nexport { WuStore, default as store } from './core/wu-store.js';\r\nexport { WuApp } from './core/wu-app.js';\r\nexport { WuStyleBridge } from './core/wu-style-bridge.js';\r\nexport { WuCache } from './core/wu-cache.js';\r\nexport { WuEventBus } from './core/wu-event-bus.js';\r\nexport { WuPerformance } from './core/wu-performance.js';\r\nexport { WuProxySandbox } from './core/wu-proxy-sandbox.js';\r\n// WuSnapshotSandbox removed in v2.0 — dead code (Proxy is universal on\r\n// supported browsers per browserslist; IE 11 was already excluded).\r\n// Strict/eval sandbox internals are no longer re-exported from the main bundle\r\n// (breaking change, v2.0). They are loaded lazily by WuCore when an app uses\r\n// sandbox: 'strict' | 'eval'. If you need direct access, import from the\r\n// subpaths declared in package.json#exports.\r\nexport { WuPluginSystem, createPlugin } from './core/wu-plugin.js';\r\nexport { WuLoadingStrategy } from './core/wu-strategies.js';\r\nexport { WuPrefetch } from './core/wu-prefetch.js';\r\nexport { WuOverrides } from './core/wu-overrides.js';\r\nexport { WuErrorBoundary } from './core/wu-error-boundary.js';\r\nexport {\r\n WuLifecycleHooks,\r\n createSimpleHook,\r\n createConditionalHook,\r\n createGuardHook,\r\n createTransformHook,\r\n createTimedHook\r\n} from './core/wu-hooks.js';\r\nexport { silenceAllLogs, enableAllLogs } from './core/wu-logger.js';\r\n\r\n// --- Convenience API (most-used shortcuts) ---\r\nexport const init = (apps) => wu.init({ apps });\r\nexport const mount = (name, container) => wu.mount(name, container);\r\nexport const unmount = (name, opts) => wu.unmount(name, opts);\r\nexport const define = (name, lifecycle) => wu.define(name, lifecycle);\r\nexport const app = (name, config) => wu.app(name, config);\r\nexport const destroy = () => wu.destroy();\r\n\r\n// Keep-alive\r\nexport const hide = (name) => wu.hide(name);\r\nexport const show = (name) => wu.show(name);\r\nexport const isHidden = (name) => wu.isHidden(name);\r\n\r\n// Event Bus\r\nexport const emit = (event, data, opts) => wu.eventBus.emit(event, data, opts);\r\nexport const on = (event, cb) => wu.eventBus.on(event, cb);\r\nexport const once = (event, cb) => wu.eventBus.once(event, cb);\r\nexport const off = (event, cb) => wu.eventBus.off(event, cb);\r\n\r\n// Store\r\nexport const getState = (path) => wu.store.get(path);\r\nexport const setState = (path, value) => wu.store.set(path, value);\r\nexport const onStateChange = (pattern, cb) => wu.store.on(pattern, cb);\r\n\r\n// Performance\r\nexport const startMeasure = (name, app) => wu.performance.startMeasure(name, app);\r\nexport const endMeasure = (name, app) => wu.performance.endMeasure(name, app);\r\nexport const generatePerformanceReport = () => wu.performance.generateReport();\r\n\r\n// Prefetch\r\nexport const prefetch = (appNames, opts) => wu.prefetch(appNames, opts);\r\nexport const prefetchAll = (opts) => wu.prefetchAll(opts);\r\n\r\n// Overrides (QA/testing)\r\nexport const override = (name, url, opts) => wu.override(name, url, opts);\r\nexport const removeOverride = (name) => wu.removeOverride(name);\r\nexport const getOverrides = () => wu.getOverrides();\r\nexport const clearOverrides = () => wu.clearOverrides();\r\n\r\n// Plugins & Hooks\r\nexport const usePlugin = (plugin, opts) => wu.pluginSystem.use(plugin, opts);\r\nexport const useHook = (phase, middleware, opts) => wu.hooks.use(phase, middleware, opts);\r\n\r\n// --- AI subsystem ---\r\n// AI classes were previously re-exported from this entry point. Doing so anchored\r\n// the ~80 KB AI chunk to the main bundle. As of v2.0, AI is loaded lazily via the\r\n// `wu.ai` proxy (see setupLazyAi above). Import classes directly from the subpaths\r\n// declared in package.json#exports if you need them at build time:\r\n//\r\n// import { WuAI } from 'wu-framework/ai';\r\n// import { WuAIAgent } from 'wu-framework/ai/agent';\r\n// import { sanitizeForPrompt } from 'wu-framework/ai/schema';\r\n//\r\n// For runtime use, prefer `wu.ai.*` — it auto-loads the chunk on first method call.\r\n"],"names":[],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACO,MAAM,QAAQ,CAAC;AACtB,EAAE,WAAW,GAAG;AAChB;AACA,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAClD;AACA,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC;AAC1D;AACA,IAAI,IAAI,CAAC,MAAM,GAAG;AAClB,MAAM,KAAK,EAAE,CAAC;AACd,MAAM,IAAI,EAAE,CAAC;AACb,MAAM,IAAI,EAAE,CAAC;AACb,MAAM,KAAK,EAAE,CAAC;AACd,MAAM,MAAM,EAAE,CAAC;AACf,KAAK,CAAC;AACN,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,iBAAiB,GAAG;AACtB;AACA,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE,OAAO,IAAI,CAAC;AAC/E,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,EAAE,OAAO,KAAK,CAAC;AACjF;AACA;AACA,IAAI,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,QAAQ,KAAK,YAAY,EAAE,OAAO,KAAK,CAAC;AAC/F,IAAI,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,QAAQ,KAAK,aAAa,EAAE,OAAO,IAAI,CAAC;AAC/F;AACA;AACA,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,EAAE;AAC1D,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAChD,MAAM,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,OAAO,EAAE,OAAO,IAAI,CAAC;AACpG;AACA;AACA,MAAM,IAAI;AACV,QAAQ,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,OAAO,IAAI,CAAC;AACrF,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAChB,IAAI,CAAC;AACL;AACA;AACA,IAAI,OAAO,KAAK,CAAC;AACjB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,KAAK,EAAE;AAClB,IAAI,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC1B,IAAI,OAAO,IAAI,CAAC;AAChB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,KAAK,EAAE;AACxB,IAAI,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;AAC/B,IAAI,IAAI,CAAC,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;AAC9C,IAAI,OAAO,IAAI,CAAC;AAChB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,KAAK,EAAE;AACnB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC5D,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,KAAK,CAAC,GAAG,IAAI,EAAE;AACjB,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;AACjC,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AAC3B,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;AAChB,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;AAChC,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAC5B,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;AAChB,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;AAChC,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAC5B,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA,EAAE,KAAK,CAAC,GAAG,IAAI,EAAE;AACjB,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;AACjC,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;AAC7B,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE;AACrB,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;AAC/B,MAAM,MAAM,MAAM,GAAG,KAAK,KAAK,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC;AACvD,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;AACvC,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACjD,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/C,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/C,EAAE,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AACD;AACA;AACO,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;AASrC;AACA;AACA;AACA;AACA;AACO,SAAS,cAAc,GAAG;AACjC,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC5B,CAAC;AACD;AACA;AACA;AACA;AACO,SAAS,aAAa,GAAG;AAChC,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC3B;;;;;;;;;;AC9IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,QAAQ,CAAC;AACtB;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,OAAO,GAAG,EAAE,EAAE;AAC5B,IAAI,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;AACnD,IAAI,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC;AAChD,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;AAC3B,IAAI,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;AACrC;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;AAC1D,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,GAAG,EAAE;AACjB,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAC9B,MAAM,OAAO,SAAS,CAAC;AACvB,IAAI,CAAC;AACL;AACA,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACtC,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3B;AACA,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC/C,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC7B,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3D,MAAM,OAAO,SAAS,CAAC;AACvB,IAAI,CAAC;AACL;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC3B,IAAI,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC;AAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC/B;AACA,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC;AACtB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE;AACvB;AACA;AACA,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAC7B,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC7B,IAAI,CAAC;AACL;AACA,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;AAC1B;AACA,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;AACxB,MAAM,IAAI;AACV,MAAM,SAAS,EAAE,GAAG;AACpB,MAAM,UAAU,EAAE,GAAG;AACrB,KAAK,CAAC,CAAC;AACP,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,GAAG;AACnB,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3B;AACA;AACA,IAAI,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;AAC3C,MAAM,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE;AACjD,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC/B,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACjE,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA;AACA,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;AACjD;AACA,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;AACvD,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACnC,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,8BAA8B,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AACjE,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE;AAClC;AACA,IAAI,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;AACzC;AACA,IAAI,MAAM,SAAS,GAAG,QAAQ,EAAE,KAAK,IAAI,UAAU,CAAC;AACpD,IAAI,MAAM,OAAO,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;AAC7C;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAC5D;AACA,IAAI,IAAI;AACR;AACA,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AAC7C,MAAM,IAAI,MAAM,KAAK,SAAS,EAAE;AAChC,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,0BAA0B,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAC7D,QAAQ,OAAO,MAAM,CAAC;AACtB,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAC7C,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,oCAAoC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACvE,QAAQ,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACvD,MAAM,CAAC;AACP;AACA;AACA,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACrD,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;AACxD;AACA,MAAM,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC;AACxC;AACA;AACA,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC3C,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACpC;AACA,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,oCAAoC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACrE,MAAM,OAAO,IAAI,CAAC;AAClB;AACA,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC3C,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,+BAA+B,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACxE,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,wBAAwB,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC9E,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE;AAC7C;AACA,IAAI,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;AACzC;AACA;AACA,IAAI,IAAI,cAAc,GAAG,aAAa,CAAC;AACvC,IAAI,IAAI,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACzC,MAAM,cAAc,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACnD,IAAI,CAAC;AACL,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC7E,MAAM,cAAc,IAAI,KAAK,CAAC;AAC9B,IAAI,CAAC;AACL;AACA,IAAI,MAAM,OAAO,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;AAClD;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,mCAAmC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAClE;AACA,IAAI,IAAI;AACR;AACA,MAAM,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAChD;AACA;AACA,MAAM,MAAM,iBAAiB,GAAG,IAAI,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AAC9E,QAAQ,EAAE,IAAI,CAAC;AACf;AACA;AACA;AACA,MAAM,CAAC,CAAC,CAAC;AACT;AACA;AACA,MAAM,MAAM,UAAU,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AACzC,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,KAAK;AACpC,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,EAAE,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAClG,QAAQ,OAAO,EAAE,CAAC;AAClB,MAAM,CAAC,CAAC;AACR;AACA,MAAM,MAAM,SAAS,GAAG,iBAAiB,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;AACvF;AACA,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,6BAA6B,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;AACpE,MAAM,OAAO,SAAS,CAAC;AACvB;AACA,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,qCAAqC,EAAE,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACpF,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,yBAAyB,EAAE,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACrF,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,QAAQ,CAAC,GAAG,EAAE;AACtB;AACA,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AACvC,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE;AAC9B,MAAM,OAAO,MAAM,CAAC;AACpB,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACvC,MAAM,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACjD,IAAI,CAAC;AACL;AACA;AACA,IAAI,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC/C,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;AAClD;AACA,IAAI,IAAI;AACR,MAAM,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC;AACxC,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACvC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAChC,MAAM,OAAO,IAAI,CAAC;AAClB,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACvC,MAAM,MAAM,KAAK,CAAC;AAClB,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,SAAS,CAAC,GAAG,EAAE,SAAS,GAAG,KAAK,EAAE;AAC1C;AACA;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;AACtC,MAAM,KAAK,EAAE,UAAU;AACvB,MAAM,OAAO,EAAE;AACf,QAAQ,QAAQ,EAAE,8CAA8C;AAChE,OAAO;AACP,MAAM,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;AAC5C,KAAK,CAAC,CAAC;AACP;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AACtB,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACzE,IAAI,CAAC;AACL;AACA,IAAI,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;AACvC;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE;AACtB,MAAM,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;AACxC,IAAI,CAAC;AACL;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,CAAC,UAAU,EAAE;AAC5B,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,sBAAsB,EAAE,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvE;AACA,IAAI,MAAM,eAAe,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,MAAM,KAAK;AAC7D,MAAM,IAAI;AACV,QAAQ,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;AACxD,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,sBAAsB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7D,MAAM,CAAC,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,6BAA6B,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;AACnF,MAAM,CAAC;AACP,IAAI,CAAC,CAAC,CAAC;AACP;AACA,IAAI,MAAM,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AAC9C,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC;AACjD,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,WAAW,CAAC,GAAG,EAAE;AACzB,IAAI,IAAI;AACR,MAAM,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;AACxC,QAAQ,MAAM,EAAE,MAAM;AACtB,QAAQ,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;AACzC,OAAO,CAAC,CAAC;AACT,MAAM,OAAO,QAAQ,CAAC,EAAE,CAAC;AACzB,IAAI,CAAC,CAAC,MAAM;AACZ,MAAM,OAAO,KAAK,CAAC;AACnB,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,mBAAmB,CAAC,OAAO,EAAE,aAAa,EAAE;AACpD,IAAI,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;AAC/B;AACA,IAAI,KAAK,MAAM,UAAU,IAAI,OAAO,IAAI,EAAE,EAAE;AAC5C,MAAM,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC7D;AACA,MAAM,IAAI,CAAC,OAAO,IAAI,CAAC,aAAa,EAAE;AACtC,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,kCAAkC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;AACvE,QAAQ,SAAS;AACjB,MAAM,CAAC;AACP;AACA,MAAM,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC7C,MAAM,IAAI,CAAC,GAAG,EAAE;AAChB,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,iCAAiC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACnE,QAAQ,SAAS;AACjB,MAAM,CAAC;AACP;AACA,MAAM,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AACpC,MAAM,MAAM,UAAU,GAAG,QAAQ,EAAE,EAAE,EAAE,OAAO,GAAG,aAAa,CAAC,CAAC;AAChE;AACA,MAAM,IAAI,CAAC,UAAU,EAAE;AACvB,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,6BAA6B,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;AAClE,QAAQ,SAAS;AACjB,MAAM,CAAC;AACP;AACA,MAAM,IAAI;AACV,QAAQ,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AACxE,QAAQ,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AAC5C,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,gCAAgC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;AACtE,MAAM,CAAC,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,8BAA8B,EAAE,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC5E,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA,IAAI,OAAO,QAAQ,CAAC;AACpB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,OAAO,EAAE;AACtB,IAAI,IAAI,OAAO,EAAE;AACjB,MAAM,IAAI,KAAK,CAAC;AAChB,MAAM,IAAI;AACV,QAAQ,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;AACpC,MAAM,CAAC,CAAC,OAAO,GAAG,EAAE;AACpB,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,uCAAuC,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1F,QAAQ,OAAO;AACf,MAAM,CAAC;AACP,MAAM,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;AACtC,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAC7B,UAAU,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACjC,UAAU,MAAM,CAAC,KAAK,CAAC,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/D,QAAQ,CAAC;AACT,MAAM,CAAC;AACP,IAAI,CAAC,MAAM;AACX,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AACzB,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC;AAC1D,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO;AACX,MAAM,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AAC7B,MAAM,YAAY,EAAE,IAAI,CAAC,YAAY;AACrC,MAAM,QAAQ,EAAE,IAAI,CAAC,QAAQ;AAC7B,MAAM,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI;AACxC,MAAM,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAC9C,KAAK,CAAC;AACN,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,uBAAuB,GAAG;AAClC;AACA,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,OAAO;AAC9C,IAAI,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,QAAQ,IAAI,EAAE,CAAC;AACjD,IAAI,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,SAAS,EAAE,OAAO;AACnF;AACA;AACA,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO;AACtC;AACA;AACA,IAAI,IAAI,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,OAAO;AAClD;AACA;AACA,IAAI,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AAC3C;AACA,MAAM,IAAI,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE;AAC7C,QAAQ,OAAO,EAAE,CAAC;AAClB,QAAQ,OAAO;AACf,MAAM,CAAC;AACP;AACA,MAAM,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM;AACvC,QAAQ,OAAO,EAAE,CAAC;AAClB,QAAQ,MAAM,CAAC,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC,CAAC;AACxF,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;AAChB;AACA,MAAM,MAAM,UAAU,GAAG,MAAM;AAC/B,QAAQ,OAAO,EAAE,CAAC;AAClB,QAAQ,OAAO,EAAE,CAAC;AAClB,MAAM,CAAC,CAAC;AACR;AACA,MAAM,SAAS,OAAO,GAAG;AACzB,QAAQ,YAAY,CAAC,OAAO,CAAC,CAAC;AAC9B,QAAQ,MAAM,CAAC,mBAAmB,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC;AACvE,MAAM,CAAC;AACP;AACA,MAAM,MAAM,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC;AAClE;AACA;AACA,MAAM,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM;AACtC,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE;AAC/C,UAAU,aAAa,CAAC,KAAK,CAAC,CAAC;AAC/B,UAAU,OAAO,EAAE,CAAC;AACpB,UAAU,OAAO,EAAE,CAAC;AACpB,QAAQ,CAAC;AACT,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;AACd;AACA;AACA,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC;AAClC,MAAM,OAAO,GAAG,WAAW;AAC3B,QAAQ,aAAa,CAAC,KAAK,CAAC,CAAC;AAC7B,QAAQ,WAAW,EAAE,CAAC;AACtB,MAAM,CAAC,CAAC;AACR,IAAI,CAAC,CAAC,CAAC;AACP,EAAE,CAAC;AACH;;AC9cA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACO,MAAM,aAAa,CAAC;AAC3B,EAAE,WAAW,GAAG;AAChB,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC9B,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,EAAE,CAAC;AACvC,IAAI,IAAI,CAAC,MAAM,GAAG;AAClB;AACA,MAAM,kBAAkB,EAAE;AAC1B,QAAQ,cAAc;AACtB,QAAQ,UAAU;AAClB,QAAQ,WAAW;AACnB,QAAQ,QAAQ;AAChB,QAAQ,SAAS;AACjB,QAAQ,eAAe;AACvB,QAAQ,WAAW;AACnB,OAAO;AACP;AACA,MAAM,aAAa,EAAE;AACrB,QAAQ,kBAAkB;AAC1B,QAAQ,iBAAiB;AACzB,QAAQ,qBAAqB;AAC7B,QAAQ,qBAAqB;AAC7B,OAAO;AACP;AACA,MAAM,IAAI,EAAE,MAAM;AAClB;AACA,MAAM,YAAY,EAAE,IAAI;AACxB,KAAK,CAAC;AACN;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;AACxE,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE;AAC5C,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAChD,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,mDAAmD,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9F,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,0BAA0B,CAAC,OAAO,EAAE;AACtC,IAAI,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;AAChD,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,qDAAqD,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACtF,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,2BAA2B,CAAC,iBAAiB,EAAE;AACjD,IAAI,IAAI,GAAG,GAAG,EAAE,CAAC;AACjB,IAAI,IAAI,cAAc,GAAG,IAAI,CAAC;AAC9B;AACA;AACA,IAAI,IAAI,OAAO,iBAAiB,KAAK,QAAQ,EAAE;AAC/C,MAAM,GAAG,GAAG,iBAAiB,CAAC;AAC9B,IAAI,CAAC;AACL;AACA,SAAS,IAAI,iBAAiB,IAAI,OAAO,iBAAiB,CAAC,YAAY,KAAK,UAAU,EAAE;AACxF,MAAM,cAAc,GAAG,iBAAiB,CAAC;AACzC;AACA;AACA,MAAM,GAAG,GAAG,iBAAiB,CAAC,YAAY,CAAC,kBAAkB,CAAC;AAC9D,WAAW,iBAAiB,CAAC,IAAI;AACjC,WAAW,EAAE,CAAC;AACd,IAAI,CAAC;AACL;AACA,SAAS,IAAI,iBAAiB,EAAE;AAChC,MAAM,IAAI,iBAAiB,CAAC,IAAI,EAAE;AAClC,QAAQ,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC;AACrC,MAAM,CAAC,MAAM,IAAI,iBAAiB,CAAC,MAAM,EAAE;AAC3C,QAAQ,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC;AACvC,MAAM,CAAC,MAAM,IAAI,iBAAiB,CAAC,OAAO,EAAE;AAC5C,QAAQ,cAAc,GAAG,iBAAiB,CAAC,OAAO,CAAC;AACnD,QAAQ,IAAI,OAAO,iBAAiB,CAAC,OAAO,CAAC,YAAY,KAAK,UAAU,EAAE;AAC1E,UAAU,GAAG,GAAG,iBAAiB,CAAC,OAAO,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,iBAAiB,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;AACnH,QAAQ,CAAC,MAAM,IAAI,iBAAiB,CAAC,OAAO,CAAC,IAAI,EAAE;AACnD,UAAU,GAAG,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC;AAC/C,QAAQ,CAAC;AACT,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA;AACA;AACA;AACA,IAAI,IAAI,cAAc,EAAE;AACxB,MAAM,MAAM,KAAK,GAAG,cAAc,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;AAC/D,MAAM,IAAI,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACtD,QAAQ,OAAO,IAAI,CAAC;AACpB,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA,IAAI,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,OAAO,KAAK,CAAC;AAChD;AACA;AACA,IAAI,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AAChE;AACA;AACA,IAAI,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE;AACtE,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AACxE,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;AACtD;AACA;AACA,MAAM,IAAI,gBAAgB,IAAI,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;AACxE,QAAQ,OAAO,IAAI,CAAC;AACpB,MAAM,CAAC;AACP;AACA;AACA;AACA;AACA,MAAM,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,CAAC,OAAO,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;AACnF,MAAM,IAAI,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;AAC9C,QAAQ,OAAO,IAAI,CAAC;AACpB,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA,IAAI,OAAO,KAAK,CAAC;AACjB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,oBAAoB,GAAG;AACzB,IAAI,MAAM,MAAM,GAAG,EAAE,CAAC;AACtB;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,CAAC;AACzE,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AAC/B;AACA,MAAM,IAAI,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;AAClD,QAAQ,OAAO;AACf,MAAM,CAAC;AACP;AACA,MAAM,MAAM,CAAC,IAAI,CAAC;AAClB,QAAQ,IAAI,EAAE,MAAM;AACpB,QAAQ,IAAI,EAAE,IAAI,CAAC,IAAI;AACvB,QAAQ,OAAO,EAAE,IAAI;AACrB,QAAQ,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;AACnD,OAAO,CAAC,CAAC;AACT,IAAI,CAAC,CAAC,CAAC;AACP;AACA;AACA,IAAI,MAAM,SAAS,GAAG,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;AACzD,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK;AACxC;AACA,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,gBAAgB,CAAC,KAAK,MAAM,EAAE;AAC3D,QAAQ,OAAO;AACf,MAAM,CAAC;AACP;AACA,MAAM,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;AAC5D,MAAM,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC;AACxC;AACA;AACA,MAAM,IAAI,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,KAAK,MAAM,IAAI,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC,EAAE;AAC3G,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,gEAAgE,EAAE,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;AAC/G,QAAQ,OAAO;AACf,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AAChD,QAAQ,MAAM,CAAC,IAAI,CAAC;AACpB,UAAU,IAAI,EAAE,QAAQ;AACxB,UAAU,OAAO;AACjB,UAAU,OAAO,EAAE,KAAK;AACxB,UAAU,MAAM;AAChB,UAAU,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,MAAM,IAAI,EAAE,CAAC;AACxD,UAAU,KAAK;AACf,SAAS,CAAC,CAAC;AACX,MAAM,CAAC;AACP,IAAI,CAAC,CAAC,CAAC;AACP;AACA;AACA,IAAI,IAAI,QAAQ,CAAC,kBAAkB,IAAI,QAAQ,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/E,MAAM,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK;AAC5D,QAAQ,MAAM,CAAC,IAAI,CAAC;AACpB,UAAU,IAAI,EAAE,mBAAmB;AACnC,UAAU,KAAK;AACf,UAAU,KAAK;AACf,SAAS,CAAC,CAAC;AACX,MAAM,CAAC,CAAC,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,4BAA4B,EAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAClF,IAAI,OAAO,MAAM,CAAC;AAClB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,gBAAgB,CAAC,OAAO,EAAE;AAC5B,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,KAAK,CAAC;AAC/B;AACA;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,OAAO,IAAI,CAAC;AAChD;AACA;AACA,IAAI,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;AACrD,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,IAAI,CAAC;AAC7C,IAAI,CAAC;AACL;AACA;AACA,IAAI,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;AACtD,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC;AAC7C,IAAI,CAAC;AACL;AACA,IAAI,OAAO,KAAK,CAAC;AACjB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,CAAC,GAAG,EAAE;AAC1B,IAAI,IAAI,CAAC,GAAG,EAAE,OAAO,IAAI,CAAC;AAC1B;AACA;AACA,IAAI,MAAM,gBAAgB,GAAG,GAAG,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;AACnF,IAAI,IAAI,gBAAgB,EAAE,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC;AACrD;AACA;AACA,IAAI,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;AACnE,IAAI,IAAI,SAAS,EAAE,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;AACvC;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,sBAAsB,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE;AAC/D,IAAI,IAAI,CAAC,UAAU,EAAE;AACrB,MAAM,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;AAChE,MAAM,OAAO,CAAC,CAAC;AACf,IAAI,CAAC;AACL;AACA;AACA;AACA,IAAI,IAAI,SAAS,KAAK,gBAAgB,EAAE;AACxC,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,oDAAoD,EAAE,OAAO,CAAC,iCAAiC,CAAC,CAAC,CAAC;AACtH,MAAM,OAAO,CAAC,CAAC;AACf,IAAI,CAAC;AACL;AACA;AACA;AACA,IAAI,IAAI,SAAS,KAAK,UAAU,EAAE;AAClC,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,6CAA6C,EAAE,OAAO,CAAC,4DAA4D,CAAC,CAAC,CAAC;AAC1I,MAAM,OAAO,CAAC,CAAC;AACf,IAAI,CAAC;AACL;AACA;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,2CAA2C,EAAE,OAAO,CAAC,gCAAgC,CAAC,CAAC,CAAC;AAC1G;AACA;AACA,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC/C,IAAI,IAAI,aAAa,GAAG,CAAC,CAAC;AAC1B;AACA;AACA,IAAI,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AAChC,MAAM,IAAI;AACV,QAAQ,QAAQ,KAAK,CAAC,IAAI;AAC1B,UAAU,KAAK,MAAM;AACrB,YAAY,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AAC1D,YAAY,aAAa,EAAE,CAAC;AAC5B,YAAY,MAAM;AAClB;AACA,UAAU,KAAK,QAAQ;AACvB,YAAY,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AACtD,YAAY,aAAa,EAAE,CAAC;AAC5B,YAAY,MAAM;AAClB;AACA,UAAU,KAAK,mBAAmB;AAClC,YAAY,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AAC5D,YAAY,aAAa,EAAE,CAAC;AAC5B,YAAY,MAAM;AAClB,SAAS;AACT,MAAM,CAAC,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,0CAA0C,CAAC,EAAE,KAAK,CAAC,CAAC;AACzE,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,2BAA2B,EAAE,aAAa,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAC9F,IAAI,OAAO,aAAa,CAAC;AACzB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,eAAe,CAAC,UAAU,EAAE,KAAK,EAAE;AAC3C;AACA,IAAI,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5E,IAAI,IAAI,QAAQ,EAAE;AAClB,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,yCAAyC,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC9F,MAAM,OAAO;AACb,IAAI,CAAC;AACL;AACA;AACA,IAAI,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAChD,IAAI,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC;AAC5B,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AAC3B,IAAI,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;AAChD,IAAI,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,KAAK,CAAC,OAAO,IAAI,SAAS,CAAC,CAAC;AACrE;AACA;AACA,IAAI,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;AACzD;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,kCAAkC,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrF,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,UAAU,EAAE,KAAK,EAAE;AACvC;AACA,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAChC,IAAI,IAAI,MAAM,EAAE;AAChB,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC,uBAAuB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AACtF,MAAM,IAAI,QAAQ,EAAE;AACpB,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,gDAAgD,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAClF,QAAQ,OAAO;AACf,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACrD,IAAI,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC;AACzC,IAAI,QAAQ,CAAC,YAAY,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;AACpD,IAAI,QAAQ,CAAC,YAAY,CAAC,iBAAiB,EAAE,KAAK,CAAC,OAAO,IAAI,SAAS,CAAC,CAAC;AACzE,IAAI,IAAI,MAAM,EAAE;AAChB,MAAM,QAAQ,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;AACvD,IAAI,CAAC;AACL;AACA;AACA,IAAI,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;AAC7D;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,0CAA0C,EAAE,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AACzF,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,uBAAuB,CAAC,UAAU,EAAE,KAAK,EAAE;AAC7C,IAAI,IAAI;AACR;AACA,MAAM,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE;AAC1C,QAAQ,UAAU,CAAC,kBAAkB,GAAG,EAAE,CAAC;AAC3C,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,UAAU,CAAC,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AAC/D,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,oDAAoD,CAAC,CAAC,CAAC;AAC7E,QAAQ,OAAO;AACf,MAAM,CAAC;AACP;AACA,MAAM,UAAU,CAAC,kBAAkB,GAAG;AACtC,QAAQ,GAAG,UAAU,CAAC,kBAAkB;AACxC,QAAQ,KAAK,CAAC,KAAK;AACnB,OAAO,CAAC;AACR;AACA,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,8CAA8C,CAAC,CAAC,CAAC;AACrE,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,uDAAuD,CAAC,EAAE,KAAK,CAAC,CAAC;AACpF,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAmB,CAAC,QAAQ,EAAE;AAChC,IAAI,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,OAAO,MAAM,CAAC,CAAC,CAAC;AACxD;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AAC/B,MAAM,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;AACvC,IAAI,CAAC;AACL,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACvC;AACA;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AAC7B,MAAM,IAAI,CAAC,aAAa,GAAG,IAAI,gBAAgB,CAAC,CAAC,SAAS,KAAK;AAC/D,QAAQ,IAAI,eAAe,GAAG,KAAK,CAAC;AACpC,QAAQ,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AAC1C,UAAU,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,EAAE;AAC7C,YAAY,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAC/D,YAAY,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI;AACrD,cAAc,IAAI,CAAC,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO;AACjE,aAAa,CAAC;AACd,YAAY,IAAI,YAAY,EAAE,EAAE,eAAe,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;AAChE,UAAU,CAAC;AACX,QAAQ,CAAC;AACT,QAAQ,IAAI,eAAe,EAAE;AAC7B,UAAU,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;AACpE,UAAU,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE;AACjD,YAAY,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE;AACtC,cAAc,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC;AAClE,YAAY,CAAC;AACb,UAAU,CAAC;AACX,QAAQ,CAAC;AACT,MAAM,CAAC,CAAC,CAAC;AACT,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACpF,MAAM,MAAM,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;AACnF,IAAI,CAAC;AACL;AACA;AACA,IAAI,OAAO,MAAM;AACjB,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO;AACxC,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC5C;AACA;AACA,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE;AACjE,QAAQ,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;AACxC,QAAQ,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAClC,MAAM,CAAC;AACP,IAAI,CAAC,CAAC;AACN,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,MAAM,EAAE;AACpB,IAAI,IAAI,CAAC,MAAM,GAAG;AAClB,MAAM,GAAG,IAAI,CAAC,MAAM;AACpB,MAAM,GAAG,MAAM;AACf,KAAK,CAAC;AACN;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,2CAA2C,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3E,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE;AAC5B,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;AACtC,MAAM,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAChC,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;AAC9D,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC/C;AACA,IAAI,OAAO;AACX,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM;AAChC,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,MAAM;AAC9D,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,MAAM;AAClE,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAC,MAAM;AACnF,MAAM,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACzE,MAAM,MAAM,EAAE,IAAI,CAAC,MAAM;AACzB,KAAK,CAAC;AACN,EAAE,CAAC;AACH;;ACpgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACO,MAAM,cAAc,CAAC;AAC5B,EAAE,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,EAAE,EAAE;AACrC,IAAI,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAC3B,IAAI,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAC3B,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACtB,IAAI,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC1C,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACxB,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;AAClC;AACA;AACA,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;AAC7B,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;AAChC,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;AAC3B,IAAI,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAC9B;AACA;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AAC3B,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAC5B,IAAI,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAChC,IAAI,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;AACpC,IAAI,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;AACtC;AACA;AACA,IAAI,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC1B,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AAC3B,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,CAAC,SAAS,EAAE,UAAU,EAAE;AACtC,IAAI,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;AAChC,IAAI,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;AAClC,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC;AACvC;AACA,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC;AACtB;AACA,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE;AACnC,MAAM,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE;AACxB;AACA,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACrC,UAAU,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACvC,QAAQ,CAAC;AACT;AACA;AACA,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC1D,QAAQ,IAAI,WAAW,KAAK,SAAS,EAAE;AACvC,UAAU,OAAO,WAAW,CAAC;AAC7B,QAAQ,CAAC;AACT;AACA;AACA,QAAQ,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AACnC,QAAQ,IAAI,OAAO,KAAK,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;AACxE,UAAU,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACpC,QAAQ,CAAC;AACT,QAAQ,OAAO,KAAK,CAAC;AACrB,MAAM,CAAC;AACP;AACA,MAAM,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE;AAC/B,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AACtC,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpC,QAAQ,OAAO,IAAI,CAAC;AACpB,MAAM,CAAC;AACP;AACA,MAAM,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE;AACxB,QAAQ,OAAO,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,MAAM,CAAC;AACzD,MAAM,CAAC;AACP;AACA,MAAM,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE;AACnC,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACrC,UAAU,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACvC,UAAU,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACzC,UAAU,OAAO,IAAI,CAAC;AACtB,QAAQ,CAAC;AACT,QAAQ,OAAO,KAAK,CAAC;AACrB,MAAM,CAAC;AACP,KAAK,CAAC,CAAC;AACP;AACA,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACvB,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,6BAA6B,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACnE,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC;AACtB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,UAAU,GAAG;AACf,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO;AAC7B;AACA;AACA,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;AACzB;AACA;AACA,IAAI,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;AACnC,MAAM,IAAI,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACxC,IAAI,CAAC;AACL,IAAI,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE;AACtC,MAAM,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACzC,IAAI,CAAC;AACL,IAAI,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;AACjC,MAAM,IAAI,EAAE,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAChD,IAAI,CAAC;AACL;AACA,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAClF,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AACzB,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;AAC5B,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AACvB;AACA;AACA,IAAI,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;AACtD,IAAI,KAAK,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE;AAC5E,MAAM,IAAI,EAAE,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC3E,IAAI,CAAC;AACL,IAAI,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAC9B;AACA;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC1C,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;AAC9B,IAAI,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAChC,IAAI,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;AACpC,IAAI,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;AACtC,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACtB,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACxB;AACA,IAAI,IAAI,UAAU,GAAG,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE;AAC7C,MAAM,MAAM,CAAC,OAAO;AACpB,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,SAAS,EAAE,aAAa,CAAC,UAAU,CAAC;AAClG,OAAO,CAAC;AACR,IAAI,CAAC;AACL,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,+BAA+B,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACrE,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,GAAG;AAChB,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;AAC9B;AACA,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC;AACtB;AACA;AACA,IAAI,MAAM,SAAS,GAAG;AACtB,MAAM,UAAU,EAAE,MAAM,CAAC,UAAU;AACnC,MAAM,YAAY,EAAE,MAAM,CAAC,YAAY;AACvC,MAAM,WAAW,EAAE,MAAM,CAAC,WAAW;AACrC,MAAM,aAAa,EAAE,MAAM,CAAC,aAAa;AACzC,MAAM,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;AACzD,MAAM,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;AACvD,MAAM,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;AAC/C,MAAM,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;AACrD,KAAK,CAAC;AACN;AACA;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;AAChC;AACA;AACA,IAAI,MAAM,CAAC,UAAU,GAAG,SAAS,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE;AACrD,MAAM,MAAM,EAAE,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;AACvE,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC9C,MAAM,OAAO,EAAE,CAAC;AAChB,IAAI,CAAC,CAAC;AACN,IAAI,MAAM,CAAC,YAAY,GAAG,SAAS,EAAE,EAAE;AACvC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC9B,MAAM,OAAO,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACrD,IAAI,CAAC,CAAC;AACN,IAAI,MAAM,CAAC,WAAW,GAAG,SAAS,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE;AACtD,MAAM,MAAM,EAAE,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;AACxE,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACjD,MAAM,OAAO,EAAE,CAAC;AAChB,IAAI,CAAC,CAAC;AACN,IAAI,MAAM,CAAC,aAAa,GAAG,SAAS,EAAE,EAAE;AACxC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACjC,MAAM,OAAO,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACtD,IAAI,CAAC,CAAC;AACN,IAAI,MAAM,CAAC,qBAAqB,GAAG,SAAS,EAAE,EAAE;AAChD,MAAM,MAAM,EAAE,GAAG,SAAS,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAClE,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC5C,MAAM,OAAO,EAAE,CAAC;AAChB,IAAI,CAAC,CAAC;AACN,IAAI,MAAM,CAAC,oBAAoB,GAAG,SAAS,EAAE,EAAE;AAC/C,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC5B,MAAM,OAAO,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC7D,IAAI,CAAC,CAAC;AACN;AACA;AACA,IAAI,MAAM,CAAC,gBAAgB,GAAG,SAAS,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;AAChE,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;AAChG,MAAM,OAAO,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9E,IAAI,CAAC,CAAC;AACN,IAAI,MAAM,CAAC,mBAAmB,GAAG,SAAS,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;AACnE,MAAM,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM;AACxD,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC;AACjF,OAAO,CAAC;AACR,MAAM,OAAO,SAAS,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACjF,IAAI,CAAC,CAAC;AACN;AACA,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACzB,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,kCAAkC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACxE,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,GAAG;AAClB,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO;AACnD;AACA,IAAI,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;AACnD,IAAI,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;AACvD,IAAI,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;AACrD,IAAI,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;AACzD,IAAI,MAAM,CAAC,qBAAqB,GAAG,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC;AACzE,IAAI,MAAM,CAAC,oBAAoB,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC;AACvE,IAAI,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC;AAC/D,IAAI,MAAM,CAAC,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC;AACrE;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC1B,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,oCAAoC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1E,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE;AAC3B,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC;AACtB;AACA,IAAI,QAAQ,IAAI;AAChB;AACA,MAAM,KAAK,YAAY;AACvB,QAAQ,OAAO,SAAS,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE;AAC5C,UAAU,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;AAC3D,UAAU,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC/B,UAAU,OAAO,EAAE,CAAC;AACpB,QAAQ,CAAC,CAAC;AACV,MAAM,KAAK,cAAc;AACzB,QAAQ,OAAO,SAAS,EAAE,EAAE;AAC5B,UAAU,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAClC,UAAU,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AAClC,QAAQ,CAAC,CAAC;AACV,MAAM,KAAK,aAAa;AACxB,QAAQ,OAAO,SAAS,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE;AAC5C,UAAU,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;AAC5D,UAAU,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClC,UAAU,OAAO,EAAE,CAAC;AACpB,QAAQ,CAAC,CAAC;AACV,MAAM,KAAK,eAAe;AAC1B,QAAQ,OAAO,SAAS,EAAE,EAAE;AAC5B,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACrC,UAAU,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AACnC,QAAQ,CAAC,CAAC;AACV,MAAM,KAAK,uBAAuB;AAClC,QAAQ,OAAO,SAAS,EAAE,EAAE;AAC5B,UAAU,MAAM,EAAE,GAAG,MAAM,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;AACtD,UAAU,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC7B,UAAU,OAAO,EAAE,CAAC;AACpB,QAAQ,CAAC,CAAC;AACV,MAAM,KAAK,sBAAsB;AACjC,QAAQ,OAAO,SAAS,EAAE,EAAE;AAC5B,UAAU,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAChC,UAAU,MAAM,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;AAC1C,QAAQ,CAAC,CAAC;AACV;AACA;AACA,MAAM,KAAK,kBAAkB;AAC7B,QAAQ,OAAO,SAAS,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;AACjD,UAAU,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;AACzE,UAAU,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC3D,QAAQ,CAAC,CAAC;AACV,MAAM,KAAK,qBAAqB;AAChC,QAAQ,OAAO,SAAS,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;AACjD,UAAU,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM;AAC5D,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC;AACrF,WAAW,CAAC;AACZ,UAAU,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9D,QAAQ,CAAC,CAAC;AACV;AACA;AACA,MAAM,KAAK,UAAU;AACrB,QAAQ,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC;AACzC;AACA;AACA,MAAM,KAAK,cAAc;AACzB,QAAQ,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC/C,MAAM,KAAK,gBAAgB;AAC3B,QAAQ,OAAO,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;AACjD,KAAK;AACL;AACA,IAAI,OAAO,SAAS,CAAC;AACrB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,GAAG;AACvB,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,OAAO,IAAI,CAAC,eAAe,CAAC;AAC1D;AACA,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC;AACrD,IAAI,IAAI,CAAC,IAAI,EAAE,OAAO,QAAQ,CAAC;AAC/B;AACA,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC;AACtB;AACA,IAAI,IAAI,CAAC,eAAe,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE;AAC/C,MAAM,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE;AACxB,QAAQ,QAAQ,IAAI;AACpB,UAAU,KAAK,eAAe;AAC9B,YAAY,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC9D,UAAU,KAAK,kBAAkB;AACjC,YAAY,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACjE,UAAU,KAAK,gBAAgB;AAC/B,YAAY,OAAO,CAAC,EAAE,KAAK,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,UAAU,KAAK,wBAAwB;AACvC,YAAY,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACrF,UAAU,KAAK,sBAAsB;AACrC,YAAY,OAAO,CAAC,GAAG,KAAK,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;AACvD;AACA;AACA,UAAU,KAAK,kBAAkB;AACjC,YAAY,OAAO,SAAS,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;AACrD,cAAc,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;AAC7E,cAAc,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC/D,YAAY,CAAC,CAAC;AACd,UAAU,KAAK,qBAAqB;AACpC,YAAY,OAAO,SAAS,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;AACrD,cAAc,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM;AAChE,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC;AACzF,eAAe,CAAC;AAChB,cAAc,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAClE,YAAY,CAAC,CAAC;AACd;AACA;AACA,UAAU,SAAS;AACnB,YAAY,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AACvC,YAAY,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AAC7C,cAAc,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACxC,YAAY,CAAC;AACb,YAAY,OAAO,KAAK,CAAC;AACzB,UAAU,CAAC;AACX,SAAS;AACT,MAAM,CAAC;AACP,KAAK,CAAC,CAAC;AACP;AACA,IAAI,OAAO,IAAI,CAAC,eAAe,CAAC;AAChC,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,IAAI,EAAE;AAC1B,IAAI,MAAM,QAAQ,GAAG,IAAI,KAAK,OAAO,GAAG,qBAAqB,GAAG,uBAAuB,CAAC;AACxF,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9C;AACA,IAAI,MAAM,WAAW,GAAG,IAAI,KAAK,OAAO,GAAG,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;AACvF,IAAI,IAAI,CAAC,WAAW,EAAE,OAAO,WAAW,CAAC;AACzC;AACA,IAAI,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACzC;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG;AACrB,MAAM,OAAO,CAAC,GAAG,EAAE;AACnB,QAAQ,OAAO,WAAW,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;AACjD,MAAM,CAAC;AACP,MAAM,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE;AAC1B,QAAQ,WAAW,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACzD,MAAM,CAAC;AACP,MAAM,UAAU,CAAC,GAAG,EAAE;AACtB,QAAQ,WAAW,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;AAC7C,MAAM,CAAC;AACP,MAAM,KAAK,GAAG;AACd;AACA,QAAQ,MAAM,QAAQ,GAAG,EAAE,CAAC;AAC5B,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrD,UAAU,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACvC,UAAU,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1D,QAAQ,CAAC;AACT,QAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,MAAM,CAAC;AACP,MAAM,GAAG,CAAC,KAAK,EAAE;AACjB,QAAQ,IAAI,KAAK,GAAG,CAAC,CAAC;AACtB,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrD,UAAU,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACvC,UAAU,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AACzC,YAAY,IAAI,KAAK,KAAK,KAAK,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/D,YAAY,KAAK,EAAE,CAAC;AACpB,UAAU,CAAC;AACX,QAAQ,CAAC;AACT,QAAQ,OAAO,IAAI,CAAC;AACpB,MAAM,CAAC;AACP,MAAM,IAAI,MAAM,GAAG;AACnB,QAAQ,IAAI,KAAK,GAAG,CAAC,CAAC;AACtB,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrD,UAAU,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;AAC9D,QAAQ,CAAC;AACT,QAAQ,OAAO,KAAK,CAAC;AACrB,MAAM,CAAC;AACP,KAAK,CAAC;AACN;AACA,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1B,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,EAAE,EAAE;AACrB,IAAI,IAAI;AACR,MAAM,OAAO,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,CAAC,WAAW,KAAK,EAAE,CAAC;AAC7D,IAAI,CAAC,CAAC,MAAM;AACZ,MAAM,OAAO,KAAK,CAAC;AACnB,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAC3C,EAAE,CAAC;AACH;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC;AACvB,EAAE,CAAC;AACH;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO;AACX,MAAM,OAAO,EAAE,IAAI,CAAC,OAAO;AAC3B,MAAM,MAAM,EAAE,IAAI,CAAC,MAAM;AACzB,MAAM,OAAO,EAAE,IAAI,CAAC,QAAQ;AAC5B,MAAM,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;AACjD,MAAM,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM;AAC7D,MAAM,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;AACtC,MAAM,gBAAgB,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI;AAC5C,MAAM,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AAClC,MAAM,qBAAqB,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM;AACxD,MAAM,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU;AACrC,MAAM,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW;AACvC,KAAK,CAAC;AACN,EAAE,CAAC;AACH;;AC5dA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,kBAAkB,CAAC,IAAI,EAAE;AACzC,EAAE,IAAI,IAAI,KAAK,MAAM,EAAE,OAAO,UAAU,CAAC;AACzC,EAAE,IAAI,IAAI,KAAK,UAAU,EAAE,OAAO,gBAAgB,CAAC;AACnD,EAAE,OAAO,IAAI,CAAC;AACd,CAAC;AACD;AACO,MAAM,SAAS,CAAC;AACvB,EAAE,WAAW,GAAG;AAChB;AACA,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;AAC/B,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,aAAa,EAAE,CAAC;AAC3C;AACA;AACA,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;AACjC,IAAI,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;AACxD;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,iDAAiD,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAChG,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,qBAAqB,GAAG;AAC1B,IAAI,OAAO,OAAO,CAAC;AACnB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,GAAG,EAAE,EAAE;AAC/C,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACvD;AACA,IAAI,IAAI;AACR;AACA,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;AACvC,QAAQ,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;AACpE,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,UAAU,CAAC;AACrB,MAAM,IAAI,aAAa,CAAC,UAAU,EAAE;AACpC,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,kCAAkC,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC;AAC9F;AACA;AACA,QAAQ,aAAa,CAAC,UAAU,CAAC,SAAS,GAAG,EAAE,CAAC;AAChD,QAAQ,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC;AAC9C;AACA,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,4CAA4C,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACjF,MAAM,CAAC,MAAM;AACb;AACA,QAAQ,UAAU,GAAG,aAAa,CAAC,YAAY,CAAC;AAChD,UAAU,IAAI,EAAE,MAAM;AACtB,UAAU,cAAc,EAAE,IAAI;AAC9B,SAAS,CAAC,CAAC;AACX;AACA,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACjE,MAAM,CAAC;AACP;AACA;AACA,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACzD,MAAM,YAAY,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5C,MAAM,YAAY,CAAC,SAAS,GAAG,aAAa,CAAC;AAC7C,MAAM,YAAY,CAAC,YAAY,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;AAC5D,MAAM,YAAY,CAAC,YAAY,CAAC,mBAAmB,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC5E;AACA;AACA,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACzD,MAAM,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AACnE;AACA;AACA,MAAM,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AACzC,MAAM,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AAC3C;AACA;AACA,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAC9D,MAAM,IAAI,SAAS,CAAC,YAAY,EAAE;AAClC,QAAQ,SAAS,CAAC,YAAY,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;AACzD,MAAM,CAAC;AACP,MAAM,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC3C;AACA;AACA;AACA;AACA,MAAM,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC7F;AACA,MAAM,MAAM,OAAO,GAAG;AACtB,QAAQ,OAAO;AACf,QAAQ,UAAU;AAClB,QAAQ,SAAS,EAAE,YAAY;AAC/B,QAAQ,aAAa;AACrB,QAAQ,SAAS;AACjB,QAAQ,OAAO;AACf,QAAQ,MAAM,EAAE,UAAU;AAC1B,QAAQ,SAAS;AACjB,QAAQ,QAAQ,EAAE,OAAO,CAAC,QAAQ;AAClC,QAAQ,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;AAC3B,QAAQ,aAAa,EAAE,QAAQ;AAC/B,QAAQ,cAAc,EAAE,CAAC;AACzB,OAAO,CAAC;AACR;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,IAAI,SAAS,KAAK,UAAU,EAAE;AACpC;AACA;AACA,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,0BAA0B,EAAE,OAAO,CAAC,uCAAuC,CAAC,CAAC,CAAC;AACtG,QAAQ,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACjD;AACA;AACA,MAAM,CAAC,MAAM,IAAI,SAAS,KAAK,gBAAgB,EAAE;AACjD,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,yCAAyC,EAAE,OAAO,CAAC,gCAAgC,CAAC,CAAC,CAAC;AAC9G;AACA,QAAQ,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAClH,QAAQ,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACnE;AACA;AACA,QAAQ,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;AAChC;AACA;AACA;AACA,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC;AAC1B;AACA,QAAQ,OAAO,CAAC,WAAW,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;AACvD,UAAU,IAAI,QAAQ,GAAG,KAAK,CAAC;AAC/B;AACA,UAAU,MAAM,SAAS,GAAG,YAAY;AACxC,YAAY,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1F;AACA,YAAY,IAAI,KAAK,GAAG,CAAC,EAAE;AAC3B,cAAc,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,gBAAgB,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAC7F,cAAc,IAAI,CAAC,QAAQ,EAAE;AAC7B,gBAAgB,QAAQ,GAAG,IAAI,CAAC;AAChC,gBAAgB,OAAO,CAAC,KAAK,CAAC,CAAC;AAC/B,cAAc,CAAC;AACf,YAAY,CAAC;AACb;AACA,YAAY,OAAO,KAAK,CAAC;AACzB,UAAU,CAAC,CAAC;AACZ;AACA;AACA,UAAU,MAAM,CAAC,OAAO,CAAC,CAAC,8BAA8B,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;AACtF,UAAU,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,CAAC,SAAS,KAAK;AAC/D,YAAY,IAAI,aAAa,GAAG,CAAC,CAAC;AAClC,YAAY,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE;AACvC,cAAc,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE;AAC1C,gBAAgB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE;AAC9C,kBAAkB,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,EAAE;AACvE,oBAAoB,aAAa,EAAE,CAAC;AACpC,oBAAoB,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE,SAAS;AAClD;AACA;AACA,oBAAoB,MAAM,KAAK,GAAG,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;AAChE,oBAAoB,MAAM,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;AACtE,oBAAoB,IAAI,KAAK,KAAK,OAAO,EAAE;AAC3C,sBAAsB,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAC3E,oBAAoB,CAAC,MAAM,IAAI,MAAM,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE;AAC/F,sBAAsB,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAChG,oBAAoB,CAAC;AACrB,kBAAkB,CAAC;AACnB,gBAAgB,CAAC;AACjB,cAAc,CAAC;AACf,YAAY,CAAC;AACb,YAAY,IAAI,aAAa,GAAG,CAAC,EAAE;AACnC,cAAc,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,CAAC,2CAA2C,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AACzG,cAAc,SAAS,EAAE,CAAC;AAC1B,YAAY,CAAC;AACb,UAAU,CAAC,CAAC,CAAC;AACb;AACA;AACA,UAAU,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;AAC1C,YAAY,SAAS,EAAE,IAAI;AAC3B,YAAY,OAAO,EAAE,IAAI;AACzB,WAAW,CAAC,CAAC;AACb;AACA;AACA,UAAU,OAAO,CAAC,aAAa,GAAG,QAAQ,CAAC;AAC3C;AACA;AACA,UAAU,UAAU,CAAC,YAAY;AACjC,YAAY,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;AAC5C;AACA,YAAY,IAAI,CAAC,QAAQ,EAAE;AAC3B,cAAc,UAAU,CAAC,MAAM;AAC/B,gBAAgB,IAAI,CAAC,QAAQ,EAAE;AAC/B,kBAAkB,MAAM,CAAC,MAAM,CAAC,CAAC,wBAAwB,EAAE,OAAO,CAAC,8BAA8B,CAAC,CAAC,CAAC;AACpG,kBAAkB,MAAM,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC1F,kBAAkB,MAAM,CAAC,OAAO,CAAC,CAAC,mBAAmB,EAAE,aAAa,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAC9F,kBAAkB,QAAQ,GAAG,IAAI,CAAC;AAClC,kBAAkB,OAAO,CAAC,aAAa,CAAC,CAAC;AACzC,gBAAgB,CAAC;AACjB,cAAc,CAAC,EAAE,IAAI,CAAC,CAAC;AACvB,YAAY,CAAC;AACb,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;AACjB,QAAQ,CAAC,CAAC,CAAC;AACX,MAAM,CAAC,MAAM;AACb;AACA,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,wBAAwB,EAAE,OAAO,CAAC,gCAAgC,CAAC,CAAC,CAAC;AAC7F,QAAQ,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI;AACpH,UAAU,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACnE;AACA;AACA;AACA;AACA,UAAU,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,MAAM;AACvF,YAAY,MAAM,CAAC,OAAO,CAAC,CAAC,uBAAuB,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;AAC/E,YAAY,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI;AACjG,cAAc,MAAM,CAAC,MAAM,CAAC,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACjE,YAAY,CAAC,CAAC,CAAC;AACf,UAAU,CAAC,CAAC,CAAC;AACb;AACA,UAAU,OAAO,KAAK,CAAC;AACvB,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI;AAC1B,UAAU,MAAM,CAAC,MAAM,CAAC,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7D,UAAU,OAAO,CAAC,CAAC;AACnB,QAAQ,CAAC,CAAC,CAAC;AACX,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC3C;AACA,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAChE,MAAM,OAAO,OAAO,CAAC;AACrB;AACA,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,6BAA6B,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1E;AACA;AACA,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAAE;AACnE,QAAQ,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AAClE,MAAM,CAAC;AACP;AACA,MAAM,MAAM,KAAK,CAAC;AAClB,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,qBAAqB,CAAC,OAAO,EAAE,aAAa,EAAE;AAChD,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,8BAA8B,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAClE;AACA,IAAI,IAAI;AACR;AACA,MAAM,IAAI,aAAa,CAAC,UAAU,EAAE;AACpC,QAAQ,aAAa,CAAC,UAAU,CAAC,SAAS,GAAG,EAAE,CAAC;AAChD,MAAM,CAAC;AACP;AACA;AACA,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC9D,MAAM,iBAAiB,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AACjD,MAAM,iBAAiB,CAAC,SAAS,GAAG,yBAAyB,CAAC;AAC9D,MAAM,iBAAiB,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC;AACzC;AACA;AACA;AACA;AACA,MAAM,CAAC,CAAC;AACR;AACA;AACA,MAAM,aAAa,CAAC,SAAS,GAAG,EAAE,CAAC;AACnC,MAAM,aAAa,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;AACnD;AACA,MAAM,MAAM,aAAa,GAAG;AAC5B,QAAQ,OAAO;AACf,QAAQ,UAAU,EAAE,IAAI;AACxB,QAAQ,SAAS,EAAE,iBAAiB;AACpC,QAAQ,aAAa;AACrB,QAAQ,MAAM,EAAE,IAAI;AACpB,QAAQ,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;AAC3B,QAAQ,aAAa,EAAE,eAAe;AACtC,QAAQ,cAAc,EAAE,CAAC;AACzB,QAAQ,aAAa,EAAE,IAAI;AAC3B,OAAO,CAAC;AACR;AACA,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AACjD;AACA,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,0CAA0C,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAC7E,MAAM,OAAO,aAAa,CAAC;AAC3B;AACA,IAAI,CAAC,CAAC,OAAO,YAAY,EAAE;AAC3B,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,kCAAkC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;AAC1E,MAAM,MAAM,YAAY,CAAC;AACzB,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,qBAAqB,CAAC,OAAO,EAAE;AACjC,IAAI,OAAO,CAAC;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,EAAE,OAAO,CAAC;AAClC;AACA,iCAAiC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,CAAC,CAAC;AACN,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,uBAAuB,CAAC,OAAO,EAAE;AACnC,IAAI,MAAM,SAAS,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;AAClD,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1D,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAC7C,IAAI,OAAO,SAAS,CAAC;AACrB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE;AAC1B,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAChD,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACzD,MAAM,OAAO;AACb,IAAI,CAAC;AACL;AACA,IAAI,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACzD,IAAI,YAAY,CAAC,WAAW,GAAG,GAAG,CAAC;AACnC,IAAI,YAAY,CAAC,YAAY,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;AACtD;AACA,IAAI,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AACjD,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACxD,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE;AACpC,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAChD,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACzD,MAAM,OAAO;AACb,IAAI,CAAC;AACL;AACA,IAAI,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AACvD,IAAI,WAAW,CAAC,GAAG,GAAG,YAAY,CAAC;AACnC,IAAI,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC;AAC5B,IAAI,WAAW,CAAC,YAAY,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;AACvD;AACA,IAAI,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AAChD,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,0BAA0B,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACpE,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,EAAE;AACxC,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAChD,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACzD,MAAM,OAAO;AACb,IAAI,CAAC;AACL;AACA,IAAI,IAAI,OAAO,EAAE;AACjB,MAAM,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACzD,MAAM,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC5D,IAAI,CAAC,MAAM;AACX,MAAM,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;AACxD,MAAM,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;AACtD,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACpF,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,OAAO,EAAE;AACnB,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO;AACzB;AACA,IAAI,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;AACtE;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1D;AACA,IAAI,IAAI;AACR;AACA,MAAM,IAAI,SAAS,IAAI,SAAS,CAAC,QAAQ,EAAE,EAAE;AAC7C,QAAQ,SAAS,CAAC,UAAU,EAAE,CAAC;AAC/B,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAChE,MAAM,CAAC;AACP;AACA;AACA;AACA;AACA,MAAM,IAAI,OAAO,CAAC,aAAa,EAAE;AACjC,QAAQ,IAAI;AACZ,UAAU,OAAO,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;AAC7C,QAAQ,CAAC,CAAC,OAAO,GAAG,EAAE;AACtB,UAAU,MAAM,CAAC,MAAM,CAAC,CAAC,uCAAuC,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACrF,QAAQ,CAAC;AACT,QAAQ,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;AACrC,MAAM,CAAC;AACP;AACA;AACA;AACA,MAAM,IAAI,OAAO,OAAO,CAAC,uBAAuB,KAAK,UAAU,EAAE;AACjE,QAAQ,IAAI,EAAE,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE;AAC/D,UAAU,MAAM,CAAC,MAAM,CAAC,CAAC,wCAAwC,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACtF,QAAQ,CAAC;AACT,QAAQ,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC;AAC/C,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,0BAA0B,EAAE;AACxD,QAAQ,IAAI,CAAC,WAAW,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;AAC7D,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC1C;AACA;AACA,MAAM,IAAI,UAAU,EAAE;AACtB,QAAQ,UAAU,CAAC,SAAS,GAAG,EAAE,CAAC;AAClC,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,aAAa,EAAE;AACzB,QAAQ,aAAa,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;AAClD,QAAQ,aAAa,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;AAChD,QAAQ,aAAa,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;AACtD,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACrC,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACvC;AACA,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACvD;AACA,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,0BAA0B,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACvE,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,qBAAqB,CAAC,OAAO,EAAE;AACjC;AACA,IAAI,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;AACnC,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO;AAC5B;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,UAAU,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;AACtD,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAI;AAChC,MAAM,IAAI,OAAO,CAAC,SAAS,EAAE;AAC7B,QAAQ,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC9C,QAAQ,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACzD,MAAM,CAAC;AACP,IAAI,CAAC,CAAC,CAAC;AACP,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,OAAO,EAAE;AAC1B,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAChD,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC;AAC9B;AACA,IAAI,OAAO;AACX,MAAM,OAAO,EAAE,OAAO,CAAC,OAAO;AAC9B,MAAM,OAAO,EAAE,OAAO,CAAC,OAAO;AAC9B,MAAM,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS;AACvC,MAAM,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU;AACzC,MAAM,YAAY,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC7D,MAAM,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO;AAC1C,KAAK,CAAC;AACN,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO;AACX,MAAM,QAAQ,EAAE,IAAI,CAAC,eAAe;AACpC,MAAM,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;AAChC,MAAM,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;AAClD,MAAM,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AACtD,MAAM,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM;AAC9E,QAAQ,IAAI;AACZ,QAAQ,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO;AAC5C,QAAQ,QAAQ,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC3D,QAAQ,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS;AACzC,QAAQ,eAAe,EAAE,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,KAAK;AAC/D,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,UAAU,GAAG;AACf,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAC1E;AACA,IAAI,KAAK,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;AACrD,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC5B,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;AAC1B,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;AACjC,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAC/C,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,qBAAqB,CAAC,MAAM,EAAE;AAChC,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;AAC1B,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACzC,MAAM,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;AAC/C,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,GAAG;AAClB,IAAI,OAAO,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC;AACjE,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,cAAc,CAAC,OAAO,EAAE;AAChC,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAChD,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AACzC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAC7D,MAAM,OAAO;AACb,IAAI,CAAC;AACL;AACA,IAAI,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;AACxC;AACA;AACA,IAAI,IAAI,SAAS,KAAK,UAAU,EAAE;AAClC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,sBAAsB,EAAE,OAAO,CAAC,yCAAyC,CAAC,CAAC,CAAC;AAClG,MAAM,OAAO;AACb,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,SAAS,KAAK,gBAAgB,EAAE;AACxC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,2BAA2B,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAClF,MAAM,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAC9G,MAAM,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC5F,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACtE,MAAM,OAAO;AACb,IAAI,CAAC;AACL;AACA;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,8BAA8B,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAClE,IAAI,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,sBAAsB;AAC/D,MAAM,OAAO,CAAC,UAAU;AACxB,MAAM,OAAO;AACb,MAAM,SAAS;AACf,KAAK,CAAC;AACN,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;AACxD,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,uBAAuB,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE;AAC7D,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC9B;AACA,IAAI,IAAI,aAAa,GAAG,CAAC,CAAC;AAC1B;AACA;AACA,IAAI,MAAM,SAAS,GAAG,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;AACzD,IAAI,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;AACpD;AACA;AACA;AACA;AACA,IAAI,MAAM,WAAW,GAAG;AACxB;AACA;AACA,MAAM,IAAI,MAAM,CAAC,CAAC,eAAe,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,EAAE,GAAG,CAAC;AAC7E,KAAK,CAAC;AACN;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,yBAAyB,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC;AACxG;AACA;AACA,IAAI,IAAI,aAAa,GAAG,CAAC,CAAC;AAC1B,IAAI,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE;AAC/B,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;AAC3D,MAAM,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE;AACzD,QAAQ,aAAa,EAAE,CAAC;AACxB,MAAM,CAAC;AACP,IAAI,CAAC;AACL,IAAI,IAAI,aAAa,GAAG,CAAC,EAAE;AAC3B,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACtF,IAAI,CAAC;AACL;AACA,IAAI,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE;AACnC;AACA;AACA,MAAM,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;AAClE,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AACxE;AACA;AACA,MAAM,IAAI,YAAY,GAAG,KAAK,CAAC;AAC/B;AACA;AACA,MAAM,IAAI,MAAM,EAAE;AAClB;AACA,QAAQ,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE;AAC3C,UAAU,IAAI,OAAO,YAAY,MAAM,EAAE;AACzC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACtC,cAAc,YAAY,GAAG,IAAI,CAAC;AAClC,cAAc,MAAM;AACpB,YAAY,CAAC;AACb,UAAU,CAAC,MAAM;AACjB,YAAY,IAAI,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE;AAClE,cAAc,YAAY,GAAG,IAAI,CAAC;AAClC,cAAc,MAAM;AACpB,YAAY,CAAC;AACb,UAAU,CAAC;AACX,QAAQ,CAAC;AACT,MAAM,CAAC;AACP;AACA,MAAM,IAAI,YAAY,EAAE;AACxB;AACA,QAAQ,MAAM,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC,wBAAwB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9F;AACA,QAAQ,IAAI,CAAC,aAAa,EAAE;AAC5B,UAAU,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACpD,UAAU,WAAW,CAAC,YAAY,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;AAC/D,UAAU,UAAU,CAAC,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;AACtE,UAAU,aAAa,EAAE,CAAC;AAC1B,UAAU,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5H,UAAU,MAAM,CAAC,OAAO,CAAC,CAAC,uBAAuB,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AAC5E,QAAQ,CAAC;AACT,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,8BAA8B,EAAE,OAAO,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;AACjF,IAAI,OAAO,aAAa,CAAC;AACzB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,uBAAuB,CAAC,UAAU,EAAE,OAAO,EAAE;AAC/C,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC9B;AACA,IAAI,IAAI,aAAa,GAAG,CAAC,CAAC;AAC1B,IAAI,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;AACpD;AACA;AACA,IAAI,MAAM,SAAS,GAAG,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;AACzD,IAAI,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE;AACnC,MAAM,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;AAClE;AACA;AACA,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS;AACtE;AACA;AACA,MAAM,IAAI,UAAU,CAAC,aAAa,CAAC,CAAC,wBAAwB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS;AACpF;AACA,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAChD,MAAM,WAAW,CAAC,YAAY,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;AAC3D,MAAM,UAAU,CAAC,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;AAClE,MAAM,aAAa,EAAE,CAAC;AACtB,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;AAC5E,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AACxD,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,gBAAgB,EAAE,aAAa,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACtF,IAAI,OAAO,aAAa,CAAC;AACzB,EAAE,CAAC;AACH;;AC1yBA;AACA;AACA;AACA;AACA;AAEA;AACO,MAAM,UAAU,CAAC;AACxB,EAAE,WAAW,GAAG;AAChB,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;AAC3B,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;AAC7B;AACA;AACA,IAAI,IAAI,CAAC,QAAQ,GAAG;AACpB,MAAM,eAAe,EAAE,GAAG,GAAG,IAAI;AACjC,MAAM,aAAa,EAAE,EAAE;AACvB,MAAM,cAAc,EAAE,GAAG;AACzB,MAAM,UAAU,EAAE,GAAG;AACrB,MAAM,UAAU,EAAE,EAAE;AACpB,MAAM,SAAS,EAAE,GAAG;AACpB;AACA,MAAM,iBAAiB,EAAE;AACzB,QAAQ,MAAM;AACd,QAAQ,UAAU;AAClB,QAAQ,WAAW;AACnB,QAAQ,YAAY;AACpB,QAAQ,cAAc;AACtB,QAAQ,QAAQ;AAChB,QAAQ,UAAU;AAClB,QAAQ,YAAY;AACpB,OAAO;AACP;AACA,MAAM,cAAc,EAAE;AACtB,QAAQ,UAAU;AAClB,QAAQ,aAAa;AACrB,OAAO;AACP,KAAK,CAAC;AACN;AACA,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;AACxB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,YAAY,GAAG;AACjB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE;AAChC,MAAM,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;AACjC,MAAM,QAAQ,EAAE,CAAC,IAAI,CAAC;AACtB,MAAM,EAAE,EAAE;AACV,QAAQ,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC;AACjE,QAAQ,OAAO,EAAE,QAAQ;AACzB,QAAQ,OAAO,EAAE,OAAO;AACxB,QAAQ,MAAM,EAAE,OAAO;AACvB,QAAQ,WAAW,EAAE,OAAO;AAC5B,OAAO;AACP,KAAK,CAAC,CAAC;AACP,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE;AACrB,IAAI,MAAM,WAAW,GAAG,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC5C;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,kCAAkC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AACrE;AACA,IAAI,IAAI;AACR;AACA,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;AACvC,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,0BAA0B,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AACjE,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC3C,MAAM,CAAC;AACP;AACA;AACA,MAAM,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE;AAChD,QAAQ,KAAK,EAAE,UAAU;AACzB,QAAQ,OAAO,EAAE;AACjB,UAAU,QAAQ,EAAE,kBAAkB;AACtC,SAAS;AACT,QAAQ,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;AAC1C,OAAO,CAAC,CAAC;AACT;AACA,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AACxB;AACA,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;AACrC,UAAU,MAAM,CAAC,KAAK,CAAC,CAAC,yDAAyD,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAC7F,UAAU,OAAO,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACpD,QAAQ,CAAC;AACT;AACA,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC3E,MAAM,CAAC;AACP;AACA,MAAM,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;AACjD;AACA;AACA,MAAM,IAAI,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;AAC/D,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,oBAAoB,EAAE,YAAY,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AACnH,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,QAAQ,CAAC;AACnB,MAAM,IAAI;AACV,QAAQ,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AAC5C,MAAM,CAAC,CAAC,OAAO,UAAU,EAAE;AAC3B,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,0BAA0B,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC3E,MAAM,CAAC;AACP;AACA;AACA,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACxD;AACA;AACA,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;AACrD;AACA,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,gCAAgC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACvE,MAAM,OAAO,iBAAiB,CAAC;AAC/B;AACA,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,wCAAwC,EAAE,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACrF;AACA;AACA,MAAM,IAAI;AACV,QAAQ,OAAO,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAClD,MAAM,CAAC,CAAC,OAAO,YAAY,EAAE;AAC7B,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,6BAA6B,EAAE,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACzF,MAAM,CAAC;AACP,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,qBAAqB,CAAC,MAAM,EAAE;AAChC;AACA,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACvD;AACA,IAAI,MAAM,eAAe,GAAG;AAC5B,MAAM,IAAI,EAAE,OAAO;AACnB,MAAM,KAAK,EAAE,UAAU;AACvB,MAAM,EAAE,EAAE;AACV,QAAQ,OAAO,EAAE,EAAE;AACnB,QAAQ,OAAO,EAAE,EAAE;AACnB,QAAQ,MAAM,EAAE,EAAE;AAClB,QAAQ,WAAW,EAAE,EAAE;AACvB,OAAO;AACP,KAAK,CAAC;AACN;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,8CAA8C,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAC7E,IAAI,OAAO,eAAe,CAAC;AAC3B,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,qBAAqB,CAAC,GAAG,EAAE;AAC7B,IAAI,IAAI;AACR,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;AAClC,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACtE;AACA;AACA,MAAM,OAAO,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,aAAa,CAAC;AACpE,IAAI,CAAC,CAAC,MAAM;AACZ;AACA,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,IAAI,aAAa,CAAC;AAChE,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,GAAG,EAAE;AACvB,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,OAAO,EAAE,CAAC;AAC3C,IAAI,OAAO,GAAG;AACd,OAAO,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;AAC7B,OAAO,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;AACtC,OAAO,IAAI,EAAE,CAAC;AACd,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,qBAAqB,CAAC,GAAG,EAAE;AAC7B,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,OAAO,KAAK,CAAC;AAC9C,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9E,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,GAAG,EAAE;AAClB,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,OAAO,KAAK,CAAC;AAC9C;AACA;AACA,IAAI,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE;AACzC,MAAM,OAAO,KAAK,CAAC;AACnB,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI;AACR,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;AACtD,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;AAC/E,QAAQ,OAAO,KAAK,CAAC;AACrB,MAAM,CAAC;AACP,IAAI,CAAC,CAAC,MAAM;AACZ;AACA,MAAM,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE;AAC3C,QAAQ,OAAO,KAAK,CAAC;AACrB,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,QAAQ,EAAE;AACrB,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC/C;AACA;AACA,IAAI,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AAC9E,MAAM,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;AACzD,IAAI,CAAC;AACL;AACA;AACA,IAAI,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE;AACzC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC5B,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5D,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC3C,MAAM,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;AAC/C,IAAI,CAAC;AACL,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE;AAC5D,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AAClF,IAAI,CAAC;AACL,IAAI,IAAI,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACnD,MAAM,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;AAC1D,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,EAAE;AAC5C,MAAM,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAChD,IAAI,CAAC;AACL,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE;AAC9D,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;AACpF,IAAI,CAAC;AACL,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC1C,MAAM,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;AAC3D,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,QAAQ,CAAC,EAAE,EAAE;AACrB,MAAM,MAAM,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;AAC7B;AACA,MAAM,IAAI,EAAE,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC,OAAO,KAAK,QAAQ,EAAE;AACxD,QAAQ,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;AACxD,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,EAAE,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;AACnF,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,sBAAsB,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9E,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,EAAE,CAAC,OAAO,EAAE;AACtB,QAAQ,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE;AAC9D,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACtC,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7D,UAAU,CAAC;AACX,QAAQ,CAAC;AACT,MAAM,CAAC;AACP;AACA,MAAM,IAAI,EAAE,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE;AACpD,QAAQ,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;AACvD,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;AACtE,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,sBAAsB,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9E,MAAM,CAAC;AACP;AACA,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE;AAClD,QAAQ,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;AACtD,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;AACnE,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,qBAAqB,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5E,MAAM,CAAC;AACP;AACA,MAAM,IAAI,EAAE,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE;AAC5D,QAAQ,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;AAC3D,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA;AACA;AACA;AACA,IAAI,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS,EAAE;AAC1C,MAAM,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AACtF,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AACpD,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,gCAAgC,EAAE,QAAQ,CAAC,SAAS,CAAC,kCAAkC,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACvI,QAAQ,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC;AACtC,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA,IAAI,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,EAAE;AAChF,MAAM,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;AACrE,MAAM,OAAO,QAAQ,CAAC,OAAO,CAAC;AAC9B,IAAI,CAAC;AACL;AACA,IAAI,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE;AACvC,MAAM,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE;AAC/C,QAAQ,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;AACtE,QAAQ,OAAO,QAAQ,CAAC,MAAM,CAAC;AAC/B,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC9D,QAAQ,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;AAC9D,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA;AACA,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AACpC,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,QAAQ,EAAE;AACtB,IAAI,MAAM,UAAU,GAAG;AACvB,MAAM,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;AAChC,MAAM,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC;AAChD,MAAM,EAAE,EAAE;AACV,QAAQ,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,IAAI,EAAE;AAC3C,QAAQ,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,IAAI,EAAE;AAC3C,QAAQ,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE;AACzC,QAAQ,WAAW,EAAE,QAAQ,CAAC,EAAE,EAAE,WAAW,IAAI,EAAE;AACnD,OAAO;AACP,KAAK,CAAC;AACN;AACA;AACA,IAAI,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,MAAM,UAAU,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;AAChD,IAAI,CAAC;AACL,IAAI,IAAI,QAAQ,CAAC,OAAO,EAAE;AAC1B,MAAM,UAAU,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;AAC5C,IAAI,CAAC;AACL,IAAI,IAAI,QAAQ,CAAC,MAAM,EAAE;AACzB,MAAM,UAAU,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;AAC1C,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE;AAC/B,MAAM,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACnC,MAAM,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE;AACvE,QAAQ,iBAAiB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;AACnE,MAAM,CAAC;AACP,MAAM,UAAU,CAAC,EAAE,CAAC,OAAO,GAAG,iBAAiB,CAAC;AAChD,IAAI,CAAC;AACL;AACA;AACA,IAAI,UAAU,CAAC,EAAE,CAAC,OAAO,GAAG,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI;AAChE,MAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACzD,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAClE,QAAQ,OAAO,KAAK,CAAC;AACrB,MAAM,CAAC;AACP,MAAM,OAAO,IAAI,CAAC;AAClB,IAAI,CAAC,CAAC,CAAC;AACP;AACA,IAAI,OAAO,UAAU,CAAC;AACtB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,KAAK,EAAE;AACxB,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,UAAU,CAAC;AAClC;AACA,IAAI,IAAI,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;AAClC;AACA;AACA,IAAI,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACrC,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC3C,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACnC,MAAM,UAAU,IAAI,KAAK,CAAC;AAC1B,IAAI,CAAC;AACL;AACA,IAAI,OAAO,UAAU,CAAC;AACtB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,sBAAsB,CAAC,IAAI,EAAE;AAC/B,IAAI,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;AACzB;AACA,IAAI,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACjC;AACA;AACA,IAAI,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACrC,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC3C,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACnC,MAAM,UAAU,IAAI,KAAK,CAAC;AAC1B,IAAI,CAAC;AACL;AACA,IAAI,OAAO,UAAU,CAAC;AACtB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,oBAAoB,CAAC,OAAO,EAAE,aAAa,EAAE;AAC/C,IAAI,MAAM,MAAM,GAAG;AACnB,MAAM,KAAK,EAAE,EAAE;AACf,MAAM,OAAO,EAAE,EAAE;AACjB,MAAM,OAAO,EAAE,EAAE;AACjB,KAAK,CAAC;AACN;AACA,IAAI,KAAK,MAAM,UAAU,IAAI,OAAO,EAAE;AACtC,MAAM,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC7D;AACA,MAAM,IAAI,CAAC,OAAO,IAAI,CAAC,aAAa,EAAE;AACtC,QAAQ,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;AAC5B,UAAU,MAAM,EAAE,UAAU;AAC5B,UAAU,MAAM,EAAE,qCAAqC;AACvD,SAAS,CAAC,CAAC;AACX,QAAQ,SAAS;AACjB,MAAM,CAAC;AACP;AACA,MAAM,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC7C,MAAM,IAAI,CAAC,GAAG,EAAE;AAChB,QAAQ,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;AAC5B,UAAU,MAAM,EAAE,UAAU;AAC5B,UAAU,GAAG,EAAE,OAAO;AACtB,UAAU,MAAM,EAAE,oBAAoB;AACtC,SAAS,CAAC,CAAC;AACX,QAAQ,SAAS;AACjB,MAAM,CAAC;AACP;AACA,MAAM,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AACpC,MAAM,MAAM,YAAY,GAAG,QAAQ,EAAE,EAAE,EAAE,OAAO,GAAG,aAAa,CAAC,CAAC;AAClE;AACA,MAAM,IAAI,CAAC,YAAY,EAAE;AACzB,QAAQ,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;AAC5B,UAAU,MAAM,EAAE,UAAU;AAC5B,UAAU,MAAM,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;AACzE,SAAS,CAAC,CAAC;AACX,QAAQ,SAAS;AACjB,MAAM,CAAC;AACP;AACA,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;AACxB,QAAQ,MAAM,EAAE,UAAU;AAC1B,QAAQ,GAAG,EAAE,OAAO;AACpB,QAAQ,SAAS,EAAE,aAAa;AAChC,QAAQ,IAAI,EAAE,YAAY;AAC1B,OAAO,CAAC,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,OAAO,MAAM,CAAC;AAClB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,EAAE,EAAE;AAC5B,IAAI,MAAM,QAAQ,GAAG;AACrB,MAAM,IAAI,EAAE,IAAI;AAChB,MAAM,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,UAAU;AACvC,MAAM,EAAE,EAAE;AACV,QAAQ,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;AACrC,QAAQ,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;AACrC,QAAQ,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;AACnC,QAAQ,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;AAC7C,OAAO;AACP,KAAK,CAAC;AACN;AACA,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AACpC,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,OAAO,EAAE;AACtB,IAAI,IAAI,OAAO,EAAE;AACjB,MAAM,IAAI,KAAK,CAAC;AAChB,MAAM,IAAI;AACV,QAAQ,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;AACpC,MAAM,CAAC,CAAC,OAAO,GAAG,EAAE;AACpB,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,yCAAyC,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5F,QAAQ,OAAO;AACf,MAAM,CAAC;AACP,MAAM,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;AACtC,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAC7B,UAAU,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACjC,UAAU,MAAM,CAAC,KAAK,CAAC,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACrE,QAAQ,CAAC;AACT,MAAM,CAAC;AACP,IAAI,CAAC,MAAM;AACX,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AACzB,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,kDAAkD,CAAC,CAAC,CAAC;AACzE,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO;AACX,MAAM,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AAC7B,MAAM,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;AAChC,MAAM,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAC9C,KAAK,CAAC;AACN,EAAE,CAAC;AACH;;AC7hBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,OAAO,CAAC;AACrB,EAAE,WAAW,CAAC,UAAU,GAAG,GAAG,EAAE;AAChC;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;AACtD,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AACpC,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC7C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACpB;AACA;AACA,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AACpB;AACA;AACA,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;AAC/B;AACA;AACA,IAAI,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,EAAE,CAAC;AACtC;AACA;AACA,IAAI,IAAI,CAAC,OAAO,GAAG;AACnB,MAAM,KAAK,EAAE,CAAC;AACd,MAAM,MAAM,EAAE,CAAC;AACf,MAAM,aAAa,EAAE,CAAC;AACtB,KAAK,CAAC;AACN;AACA;AACA,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE;AAC9C,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;AACjE,IAAI,CAAC;AACL;AACA;AACA,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,IAAI,EAAE;AACZ,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AACzB;AACA,IAAI,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC;AACjC;AACA;AACA;AACA,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACjC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,SAAS,CAAC;AAC1D;AACA,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7D,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE;AACnB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;AAC1B;AACA;AACA;AACA,IAAI,IAAI,IAAI,EAAE;AACd,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACnC,MAAM,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;AAC5B,QAAQ,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;AACpC,UAAU,MAAM,IAAI,KAAK,CAAC,CAAC,+BAA+B,EAAE,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACpF,QAAQ,CAAC;AACT,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;AACjC,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAClC,IAAI,MAAM,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;AACvC;AACA;AACA,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrC,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;AACtB,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;AACxB,IAAI,KAAK,CAAC,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;AACxC;AACA;AACA,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAClC;AACA;AACA,IAAI,cAAc,CAAC,MAAM;AACzB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC/B,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACvC,IAAI,CAAC,CAAC,CAAC;AACP;AACA,IAAI,OAAO,QAAQ,CAAC;AACpB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE;AACxB;AACA,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC/B;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAC/C,QAAQ,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AACtD,MAAM,CAAC;AACP,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACvD;AACA;AACA,MAAM,OAAO,MAAM;AACnB,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC7D,QAAQ,IAAI,SAAS,EAAE;AACvB,UAAU,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACrC,UAAU,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE;AACpC,YAAY,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAClD,UAAU,CAAC;AACX,QAAQ,CAAC;AACT,MAAM,CAAC,CAAC;AACR,IAAI,CAAC,MAAM;AACX;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACxC,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AAC/C,MAAM,CAAC;AACP,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAChD;AACA;AACA,MAAM,OAAO,MAAM;AACnB,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACtD,QAAQ,IAAI,SAAS,EAAE;AACvB,UAAU,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACrC,UAAU,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE;AACpC,YAAY,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC3C,UAAU,CAAC;AACX,QAAQ,CAAC;AACT,MAAM,CAAC,CAAC;AACR,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,KAAK,CAAC,OAAO,EAAE;AACjB,IAAI,MAAM,SAAS,GAAG,EAAE,CAAC;AACzB;AACA,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACzD,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAC5C,IAAI,CAAC;AACL;AACA,IAAI,OAAO,SAAS,CAAC;AACrB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,UAAU,GAAG;AACf;AACA;AACA;AACA;AACA,IAAI,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;AACnE,IAAI,OAAO;AACX,MAAM,GAAG,IAAI,CAAC,OAAO;AACrB,MAAM,iBAAiB,EAAE,WAAW;AACpC,MAAM,cAAc,EAAE,IAAI,CAAC,MAAM;AACjC,MAAM,UAAU,EAAE,IAAI,CAAC,UAAU;AACjC,MAAM,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI;AACrE,KAAK,CAAC;AACN,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,UAAU,CAAC,GAAG,EAAE;AACzB,IAAI,OAAO,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,aAAa,IAAI,GAAG,KAAK,WAAW,CAAC;AAC/E,EAAE,CAAC;AACH;AACA,EAAE,cAAc,CAAC,CAAC,EAAE;AACpB,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,EAAE,CAAC;AACH;AACA,EAAE,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE;AAC3B,IAAI,IAAI,CAAC,IAAI,EAAE;AACf,MAAM,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACzB,MAAM,OAAO;AACb,IAAI,CAAC;AACL;AACA,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACjC;AACA;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO;AAChD;AACA,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC5B;AACA;AACA;AACA,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;AAC5B,IAAI,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AAC5B,MAAM;AACN,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;AAC1D,QAAQ,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ;AACvC,QAAQ,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI;AAC5B,QAAQ;AACR,QAAQ,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AACzB,MAAM,CAAC;AACP,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AAC3B,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AACzB,EAAE,CAAC;AACH;AACA,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE;AACtB,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;AACjC;AACA;AACA,IAAI,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpD,IAAI,IAAI,cAAc,EAAE;AACxB,MAAM,cAAc,CAAC,OAAO,CAAC,QAAQ,IAAI;AACzC,QAAQ,IAAI;AACZ,UAAU,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAChC,QAAQ,CAAC,CAAC,OAAO,KAAK,EAAE;AACxB,UAAU,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;AAC5D,QAAQ,CAAC;AACT,MAAM,CAAC,CAAC,CAAC;AACT,IAAI,CAAC;AACL;AACA;AACA,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAClC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC/C,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrD,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC7D,MAAM,IAAI,eAAe,EAAE;AAC3B,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AACjD,QAAQ,eAAe,CAAC,OAAO,CAAC,QAAQ,IAAI;AAC5C,UAAU,IAAI;AACd,YAAY,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;AAC9C,UAAU,CAAC,CAAC,OAAO,KAAK,EAAE;AAC1B,YAAY,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;AACrE,UAAU,CAAC;AACX,QAAQ,CAAC,CAAC,CAAC;AACX,MAAM,CAAC;AACP,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA,EAAE,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE;AAC9B;AACA,IAAI,KAAK,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAC9D,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;AAC9C,QAAQ,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAI;AACtC,UAAU,IAAI;AACd,YAAY,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACtC,UAAU,CAAC,CAAC,OAAO,KAAK,EAAE;AAC1B,YAAY,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;AACtE,UAAU,CAAC;AACX,QAAQ,CAAC,CAAC,CAAC;AACX,MAAM,CAAC;AACP,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA,EAAE,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE;AAChC;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,OAAO,KAAK,GAAG,EAAE,OAAO,IAAI,CAAC;AACrC;AACA,IAAI,MAAM,YAAY,GAAG,OAAO;AAChC,OAAO,KAAK,CAAC,GAAG,CAAC;AACjB,OAAO,GAAG,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,GAAG,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACxF,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;AACnB;AACA,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,KAAK,GAAG;AACV,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AACpB,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AAC3B,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;AAClC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACpB;AACA;AACA,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE;AAC9C,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;AACjC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC;AAClC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;AACnC,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,KAAK,GAAG,EAAE,EAAE;AAC9B,IAAI,MAAM,MAAM,GAAG,EAAE,CAAC;AACtB,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;AACnD;AACA,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;AACvE,MAAM,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;AAClC,MAAM,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACvC,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE;AACtB,QAAQ,MAAM,CAAC,IAAI,CAAC;AACpB,UAAU,IAAI,EAAE,KAAK,CAAC,IAAI;AAC1B,UAAU,KAAK,EAAE,KAAK,CAAC,KAAK;AAC5B,UAAU,SAAS,EAAE,KAAK,CAAC,SAAS;AACpC,SAAS,CAAC,CAAC;AACX,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA,IAAI,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC;AAC5B,EAAE,CAAC;AACH,CAAC;AACD;AACA;AACK,MAAC,KAAK,GAAG,IAAI,OAAO;;AC1VzB;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACO,MAAM,KAAK,CAAC;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;AAChC,IAAI,IAAI,CAAC,IAAI,GAAG,KAAI;AACpB,IAAI,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,IAAG;AACzB,IAAI,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,UAAS;AACrC,IAAI,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,MAAK;AAC9C,IAAI,IAAI,CAAC,GAAG,GAAG,GAAE;AACjB,IAAI,IAAI,CAAC,QAAQ,GAAG,MAAK;AACzB,IAAI,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,QAAQ,KAAK,MAAK;AAC9C;AACA;AACA,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE;AACxB,MAAM,IAAI,CAAC,YAAY,GAAE;AACzB,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,GAAG;AACjB,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACvC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AACnC,QAAQ,IAAI,EAAE,IAAI,CAAC,IAAI;AACvB,QAAQ,GAAG,EAAE,IAAI,CAAC,GAAG;AACrB,QAAQ,SAAS,EAAE,IAAI,CAAC,SAAS;AACjC,QAAQ,MAAM,EAAE,YAAY;AAC5B,OAAO,EAAC;AACR,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAC;AACpE,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,KAAK,CAAC,SAAS,EAAE;AACzB,IAAI,MAAM,eAAe,GAAG,SAAS,IAAI,IAAI,CAAC,UAAS;AACvD;AACA,IAAI,IAAI,CAAC,eAAe,EAAE;AAC1B,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,iCAAiC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACtE,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACjC,MAAM,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,QAAQ,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AAClD,OAAO,EAAC;AACR,IAAI,CAAC;AACL;AACA;AACA,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,EAAC;AACpD,IAAI,IAAI,CAAC,QAAQ,GAAG,KAAI;AACxB;AACA,IAAI,OAAO,IAAI;AACf,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,CAAC,OAAO,GAAG,EAAE,EAAE;AAC9B,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACzD,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,EAAC;AACvD,MAAM,OAAO,IAAI;AACjB,IAAI,CAAC;AACL;AACA,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAC;AAC9C,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAC;AACjD;AACA,IAAI,OAAO,IAAI;AACf,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,IAAI,GAAG;AACf,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACxB,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,EAAC;AACvD,MAAM,OAAO,IAAI;AACjB,IAAI,CAAC;AACL;AACA,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAC;AAClC,IAAI,IAAI,CAAC,QAAQ,GAAG,MAAK;AACzB,IAAI,OAAO,IAAI;AACf,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,IAAI,GAAG;AACf,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACvC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,EAAC;AACnE,MAAM,OAAO,IAAI;AACjB,IAAI,CAAC;AACL;AACA,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAC;AAClC,IAAI,IAAI,CAAC,QAAQ,GAAG,KAAI;AACxB,IAAI,OAAO,IAAI;AACf,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,CAAC,SAAS,EAAE;AAC3B,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAC;AACvC,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAC;AAC/B,IAAI,OAAO,IAAI;AACf,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,SAAS,GAAG;AAClB,IAAI,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5D,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,QAAQ,GAAG;AACjB,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACvC,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,IAAI,GAAG;AACb,IAAI,OAAO;AACX,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI;AACrB,MAAM,GAAG,EAAE,IAAI,CAAC,GAAG;AACnB,MAAM,SAAS,EAAE,IAAI,CAAC,SAAS;AAC/B,MAAM,OAAO,EAAE,IAAI,CAAC,SAAS;AAC7B,MAAM,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,SAAS;AAC/D,KAAK;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,MAAM,GAAG;AACjB,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAC;AAClD;AACA,IAAI,MAAM,IAAI,CAAC,OAAO,GAAE;AACxB;AACA;AACA,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE;AACrC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAC;AAC3C,IAAI,CAAC;AACL,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE;AACvC,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAC;AAC7C,IAAI,CAAC;AACL;AACA,IAAI,MAAM,IAAI,CAAC,KAAK,GAAE;AACtB,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAC;AAChD;AACA,IAAI,OAAO,IAAI;AACf,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,MAAM,GAAG;AACjB,IAAI,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAC;AAC5D,IAAI,MAAM,YAAY,GAAG,SAAS,EAAE,UAAU,KAAK,KAAI;AACvD,IAAI,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC,IAAI,EAAC;AACzE;AACA,IAAI,OAAO;AACX,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI;AACrB,MAAM,OAAO,EAAE,IAAI,CAAC,SAAS;AAC7B,MAAM,SAAS,EAAE;AACjB,QAAQ,KAAK,EAAE,CAAC,CAAC,SAAS;AAC1B,QAAQ,QAAQ,EAAE,IAAI,CAAC,SAAS;AAChC,QAAQ,YAAY;AACpB,QAAQ,UAAU;AAClB,OAAO;AACP,MAAM,EAAE,EAAE;AACV,QAAQ,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AAChD,QAAQ,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AACrD,OAAO;AACP,KAAK;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,KAAK,CAAC,SAAS,EAAE;AACzB,IAAI,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;AACtC,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,IAAI,GAAG;AACf,IAAI,OAAO,MAAM,IAAI,CAAC,OAAO,EAAE;AAC/B,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,GAAG;AAClB,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAC;AACvC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAC;AACnC,IAAI,IAAI,CAAC,QAAQ,GAAG,MAAK;AACzB,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAC;AACnD,EAAE,CAAC;AACH;;AC3OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA,MAAM,0BAA0B,GAAG,CAAC,CAAC;AACrC;AACO,MAAM,OAAO,CAAC;AACrB,EAAE,WAAW,CAAC,OAAO,GAAG,EAAE,EAAE;AAC5B,IAAI,IAAI,CAAC,MAAM,GAAG;AAClB,MAAM,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;AACpC,MAAM,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,GAAG;AACvC,MAAM,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,OAAO;AAC/C,MAAM,UAAU,EAAE,OAAO,CAAC,UAAU,KAAK,KAAK;AAC9C,MAAM,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,QAAQ;AAC1C,KAAK,CAAC;AACN;AACA;AACA;AACA,IAAI,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,gBAAgB,CAAC;AACjH,IAAI,IAAI,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,0BAA0B,EAAE;AACzG,MAAM,MAAM,CAAC,MAAM;AACnB,QAAQ,CAAC,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;AAC7F,QAAQ,CAAC,4CAA4C,EAAE,0BAA0B,CAAC,eAAe,CAAC;AAClG,QAAQ,CAAC,kEAAkE,EAAE,0BAA0B,CAAC,CAAC,CAAC;AAC1G,QAAQ,CAAC,iDAAiD,CAAC;AAC3D,OAAO,CAAC;AACR,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,CAAC,YAAY,GAAG;AACxB,MAAM,OAAO,EAAE,OAAO,CAAC,YAAY,KAAK,KAAK;AAC7C,MAAM,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,GAAG;AACrD,MAAM,QAAQ,EAAE,IAAI;AACpB,MAAM,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;AAC5C,MAAM,UAAU,EAAE,EAAE;AACpB,MAAM,UAAU,EAAE,KAAK;AACvB,MAAM,aAAa,EAAE,CAAC;AACtB,KAAK,CAAC;AACN;AACA;AACA,IAAI,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;AACpC;AACA;AACA,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;AACjC;AACA;AACA,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;AACjC;AACA;AACA,IAAI,IAAI,CAAC,KAAK,GAAG;AACjB,MAAM,IAAI,EAAE,CAAC;AACb,MAAM,MAAM,EAAE,CAAC;AACf,MAAM,IAAI,EAAE,CAAC;AACb,MAAM,SAAS,EAAE,CAAC;AAClB,MAAM,IAAI,EAAE,CAAC;AACb,MAAM,WAAW,EAAE,CAAC;AACpB,KAAK,CAAC;AACN,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,GAAG;AACpB,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC;AAChD;AACA,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3B;AACA;AACA,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AACtC,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;AACjD,QAAQ,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;AACjC,QAAQ,OAAO,KAAK,CAAC;AACrB,MAAM,CAAC;AACP;AACA,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,KAAK,CAAC;AAC3C,MAAM,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;AACtC,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,EAAE,CAAC;AACxC,IAAI,CAAC;AACL;AACA;AACA,IAAI,MAAM,WAAW,GAAG,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;AACzD,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM;AACtE,MAAM,EAAE,IAAI,EAAE,GAAG,WAAW;AAC5B,KAAK,CAAC;AACN;AACA;AACA,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE;AAClF;AACA,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC;AAC1C,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,GAAG,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AAC3E,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;AAC/B,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,+CAA+C,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;AACtG,MAAM,OAAO,KAAK,CAAC;AACnB,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3C,IAAI,OAAO,IAAI,CAAC;AAChB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,SAAS,EAAE,GAAG,EAAE;AACjC,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AAClC,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAC1F,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,wBAAwB,EAAE,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,YAAY,EAAE,iBAAiB,CAAC,yBAAyB,CAAC,CAAC,CAAC;AACnI,MAAM,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;AACrC,IAAI,CAAC;AACL,IAAI,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;AACjD,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,kBAAkB,GAAG;AACvB,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3B,IAAI,OAAO;AACX,MAAM,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO;AACxC,MAAM,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU;AAC9C,MAAM,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU;AACrD,UAAU,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,aAAa,GAAG,GAAG,CAAC;AAC5D,UAAU,CAAC;AACX,MAAM,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM;AACrD,MAAM,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,eAAe;AAC/C,MAAM,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW;AACzC,KAAK,CAAC;AACN,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,GAAG,EAAE;AACX;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE;AACjC,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACtC,MAAM,OAAO,IAAI,CAAC;AAClB,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACnC,MAAM,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9C;AACA;AACA,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;AACjC,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACzB,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AAC5B,QAAQ,OAAO,IAAI,CAAC;AACpB,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5C,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AACxB;AACA,MAAM,OAAO,KAAK,CAAC,KAAK,CAAC;AACzB,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAChC,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AAC9C,MAAM,IAAI,MAAM,EAAE;AAClB;AACA,QAAQ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC1C,QAAQ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9C,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAC1B,QAAQ,OAAO,MAAM,CAAC,KAAK,CAAC;AAC5B,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AACxB,IAAI,OAAO,IAAI,CAAC;AAChB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;AACvB;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE;AACjC,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACtC,MAAM,OAAO,KAAK,CAAC;AACnB,IAAI,CAAC;AACL;AACA,IAAI,IAAI;AACR,MAAM,MAAM,KAAK,GAAG;AACpB,QAAQ,GAAG;AACX,QAAQ,KAAK;AACb,QAAQ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AAC7B,QAAQ,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU;AAC1C,QAAQ,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACtC,OAAO,CAAC;AACR;AACA;AACA,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACpD,MAAM,IAAI,QAAQ,KAAK,KAAK,EAAE;AAC9B,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,gCAAgC,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;AAC1E,QAAQ,OAAO,KAAK,CAAC;AACrB,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACvC,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5C;AACA;AACA,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAClC,QAAQ,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACvC,MAAM,CAAC;AACP;AACA,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AACxB,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC;AACpC;AACA,MAAM,OAAO,IAAI,CAAC;AAClB,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,IAAI,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;AAC9D,MAAM,OAAO,KAAK,CAAC;AACnB,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,CAAC,GAAG,EAAE;AACd,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5C,IAAI,IAAI,KAAK,EAAE;AACf,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC;AACpC,IAAI,CAAC;AACL;AACA,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACjC,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACjC;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAChC,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;AAClC,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,KAAK,GAAG;AACV,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;AAC7B,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;AAC7B,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;AACxB;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAChC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;AAC1B,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;AAC/C,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,KAAK,EAAE;AACnB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,KAAK,CAAC;AACjC,IAAI,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC;AACpD,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,CAAC,KAAK,EAAE;AACtB,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACnC,MAAM,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9B,IAAI,CAAC;AACL;AACA,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACnC,MAAM,IAAI;AACV,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAChD,MAAM,CAAC,CAAC,MAAM;AACd,QAAQ,OAAO,IAAI,CAAC;AACpB,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA,IAAI,OAAO,GAAG,CAAC;AACf,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,UAAU,EAAE;AAC1B,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;AAC3D;AACA;AACA,IAAI,IAAI,UAAU,GAAG,YAAY,EAAE;AACnC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,wBAAwB,EAAE,UAAU,CAAC,0BAA0B,EAAE,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC;AAChH,MAAM,OAAO,KAAK,CAAC;AACnB,IAAI,CAAC;AACL;AACA;AACA,IAAI,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC;AACpD,IAAI,IAAI,UAAU,GAAG,CAAC,CAAC;AACvB;AACA;AACA,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,GAAG,YAAY;AACvD,WAAW,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ;AACxD,WAAW,UAAU,GAAG,aAAa,EAAE;AACvC;AACA,MAAM,UAAU,EAAE,CAAC;AACnB;AACA;AACA,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,EAAE;AACvC,QAAQ,MAAM,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;AACnF,QAAQ,MAAM;AACd,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,SAAS,GAAG,IAAI,CAAC;AAC3B,MAAM,IAAI,UAAU,GAAG,QAAQ,CAAC;AAChC;AACA,MAAM,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE;AAClD,QAAQ,IAAI,IAAI,GAAG,UAAU,EAAE;AAC/B,UAAU,UAAU,GAAG,IAAI,CAAC;AAC5B,UAAU,SAAS,GAAG,GAAG,CAAC;AAC1B,QAAQ,CAAC;AACT,MAAM,CAAC;AACP;AACA,MAAM,IAAI,SAAS,EAAE;AACrB,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,kCAAkC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AACvE,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAC/B,QAAQ,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;AAC/B,MAAM,CAAC,MAAM;AACb,QAAQ,MAAM;AACd,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,UAAU,IAAI,aAAa,EAAE;AACrC,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,8CAA8C,EAAE,aAAa,CAAC,oCAAoC,CAAC,CAAC,CAAC;AAC1H,IAAI,CAAC;AACL;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,GAAG,EAAE;AACtB,IAAI,IAAI;AACR,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACxC,MAAM,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACxD;AACA,MAAM,IAAI,MAAM,EAAE;AAClB,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAClC,MAAM,CAAC;AACP,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,IAAI,CAAC,0CAA0C,EAAE,KAAK,CAAC,CAAC;AACrE,IAAI,CAAC;AACL,IAAI,OAAO,IAAI,CAAC;AAChB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE;AAC5B,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACtC,IAAI,IAAI;AACR,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAChE,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB;AACA,MAAM,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;AACrE,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;AACpC;AACA,MAAM,IAAI;AACV,QAAQ,OAAO,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAClE,MAAM,CAAC,CAAC,MAAM;AACd,QAAQ,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;AAC5E,MAAM,CAAC;AACP,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,GAAG,EAAE;AACzB,IAAI,IAAI;AACR,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACxC,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC5C,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,IAAI,CAAC,6CAA6C,EAAE,KAAK,CAAC,CAAC;AACxE,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,YAAY,GAAG;AACjB,IAAI,IAAI;AACR,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACxC,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxC;AACA,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI;AAC1B,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;AACzC,UAAU,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAClC,QAAQ,CAAC;AACT,MAAM,CAAC,CAAC,CAAC;AACT,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,IAAI,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;AAClE,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,sBAAsB,GAAG;AAC3B,IAAI,IAAI;AACR,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACxC,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxC,MAAM,MAAM,OAAO,GAAG,EAAE,CAAC;AACzB;AACA;AACA,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI;AAC1B,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;AACzC,UAAU,IAAI;AACd,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3D,YAAY,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AAC9D,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AACpB,QAAQ,CAAC;AACT,MAAM,CAAC,CAAC,CAAC;AACT;AACA;AACA,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;AACxD;AACA;AACA,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AACxD,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;AACzC,QAAQ,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3C,MAAM,CAAC;AACP;AACA,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,qBAAqB,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAC3E,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,IAAI,CAAC,mDAAmD,EAAE,KAAK,CAAC,CAAC;AAC9E,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,UAAU,GAAG;AACf,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,cAAc,EAAE;AAChD,MAAM,OAAO,MAAM,CAAC,YAAY,CAAC;AACjC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,gBAAgB,EAAE;AACzD,MAAM,OAAO,MAAM,CAAC,cAAc,CAAC;AACnC,IAAI,CAAC;AACL;AACA,IAAI,OAAO;AACX,MAAM,OAAO,EAAE,MAAM,IAAI;AACzB,MAAM,OAAO,EAAE,MAAM,CAAC,CAAC;AACvB,MAAM,UAAU,EAAE,MAAM,CAAC,CAAC;AAC1B,MAAM,KAAK,EAAE,MAAM,CAAC,CAAC;AACrB,KAAK,CAAC;AACN,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AAC3D,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;AAClF,QAAQ,CAAC,CAAC;AACV;AACA,IAAI,OAAO;AACX,MAAM,GAAG,IAAI,CAAC,KAAK;AACnB,MAAM,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5B,MAAM,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;AAClC,MAAM,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AACxD,KAAK,CAAC;AACN,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,MAAM,EAAE;AACpB,IAAI,IAAI,CAAC,MAAM,GAAG;AAClB,MAAM,GAAG,IAAI,CAAC,MAAM;AACpB,MAAM,GAAG,MAAM;AACf,KAAK,CAAC;AACN,EAAE,CAAC;AACH;;AC7gBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,UAAU,CAAC;AACxB,EAAE,WAAW,GAAG;AAChB,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;AAC/B,IAAI,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AACtB;AACA;AACA,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;AACpC;AACA;AACA,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;AACpC,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AACvD;AACA;AACA,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;AAChF;AACA;AACA;AACA,IAAI,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;AACrC,IAAI,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE;AACxC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;AAC/D,IAAI,CAAC;AACL;AACA;AACA,IAAI,MAAM,YAAY,GAAG,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,QAAQ,KAAK,YAAY,CAAC;AAClG;AACA,IAAI,IAAI,CAAC,MAAM,GAAG;AAClB,MAAM,UAAU,EAAE,GAAG;AACrB,MAAM,YAAY,EAAE,IAAI;AACxB,MAAM,eAAe,EAAE,IAAI;AAC3B,MAAM,SAAS,EAAE,KAAK;AACtB;AACA,MAAM,UAAU,EAAE,YAAY;AAC9B,MAAM,cAAc,EAAE,IAAI;AAC1B,KAAK,CAAC;AACN;AACA,IAAI,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;AACnC;AACA,IAAI,IAAI,CAAC,KAAK,GAAG;AACjB,MAAM,OAAO,EAAE,CAAC;AAChB,MAAM,aAAa,EAAE,CAAC;AACtB,MAAM,QAAQ,EAAE,CAAC;AACjB,KAAK,CAAC;AACN,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,EAAE,EAAE;AACrC,IAAI,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;AACzD;AACA,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE;AACrC,MAAM,KAAK;AACX,MAAM,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,CAAC,GAAG,CAAC;AAC/C,MAAM,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;AAC9B,KAAK,CAAC,CAAC;AACP;AACA,IAAI,OAAO,KAAK,CAAC;AACjB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,OAAO,EAAE;AACzB,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACxC,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;AAC7C;AACA,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;AACxC,MAAM,OAAO,IAAI,CAAC;AAClB,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AACjC,MAAM,OAAO,IAAI,CAAC;AAClB,IAAI,CAAC;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACvC,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACzD,MAAM,OAAO,KAAK,KAAK,QAAQ,CAAC;AAChC,IAAI,CAAC;AACL;AACA;AACA,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACrD,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB,MAAM,OAAO,KAAK,CAAC;AACnB,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,KAAK,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE;AAC1C,MAAM,OAAO,KAAK,CAAC;AACnB,IAAI,CAAC;AACL;AACA;AACA,IAAI,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AAC/D,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,WAAW,EAAE,SAAS,EAAE;AACzC,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC;AAC/C;AACA,IAAI,OAAO,WAAW,CAAC,IAAI,CAAC,OAAO,IAAI;AACvC,MAAM,IAAI,OAAO,KAAK,SAAS,EAAE,OAAO,IAAI,CAAC;AAC7C,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACjC,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACxD,MAAM,CAAC;AACP,MAAM,OAAO,KAAK,CAAC;AACnB,IAAI,CAAC,CAAC,CAAC;AACP,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,SAAS,EAAE;AAC5B,IAAI,OAAO,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC;AACtC,WAAW,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC;AAC1C,WAAW,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACxC,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,gBAAgB,CAAC,OAAO,EAAE;AAC5B,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,IAAI,CAAC;AACpD,IAAI,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;AACrD,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,GAAG;AACvB,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE;AAClF,MAAM,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AAC7C,IAAI,CAAC;AACL,IAAI,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC9D,IAAI,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AAChE,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,GAAG;AACnB,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE;AAClF,MAAM,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AACzC,IAAI,CAAC;AACL;AACA,IAAI,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC9D,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AAC5D,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAmB,GAAG;AACxB,IAAI,IAAI,IAAI,CAAC,iBAAiB,EAAE,OAAO;AACvC,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAClC,IAAI,MAAM,CAAC,IAAI;AACf,MAAM,wFAAwF;AAC9F,MAAM,gGAAgG;AACtG,KAAK,CAAC;AACN,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE;AACtC,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,SAAS,CAAC;AACjD;AACA;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AACjC,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;AACjC,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAC9D,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;AACpE,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC9B,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,gCAAgC,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;AACnG,QAAQ,OAAO,KAAK,CAAC;AACrB,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA,IAAI,MAAM,KAAK,GAAG;AAClB,MAAM,IAAI,EAAE,SAAS;AACrB,MAAM,IAAI;AACV,MAAM,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;AAChD,MAAM,OAAO;AACb,MAAM,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE;AAC9B;AACA,MAAM,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;AAChD,KAAK,CAAC;AACN;AACA;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;AAClC,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC/B,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AAC/B,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACzD,IAAI,CAAC;AACL;AACA;AACA,IAAI,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACzD,IAAI,IAAI,cAAc,EAAE;AACxB,MAAM,cAAc,CAAC,OAAO,CAAC,QAAQ,IAAI;AACzC,QAAQ,IAAI;AACZ,UAAU,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC1B,QAAQ,CAAC,CAAC,OAAO,KAAK,EAAE;AACxB,UAAU,OAAO,CAAC,KAAK,CAAC,CAAC,qCAAqC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACrF,QAAQ,CAAC;AACT,MAAM,CAAC,CAAC,CAAC;AACT,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;AACrC,MAAM,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACrD,IAAI,CAAC;AACL;AACA,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AACzB,IAAI,OAAO,IAAI,CAAC;AAChB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE;AAC1B,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AACxC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AAC/C,IAAI,CAAC;AACL;AACA,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAChD,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;AAC/B;AACA,IAAI,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC/C,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE;AAC3B,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACpD,IAAI,IAAI,SAAS,EAAE;AACnB,MAAM,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACjC,MAAM,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE;AAChC,QAAQ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACzC,MAAM,CAAC;AACP,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;AACjC,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE;AAC5B,IAAI,MAAM,eAAe,GAAG,CAAC,KAAK,KAAK;AACvC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;AACtB,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AAC3C,IAAI,CAAC,CAAC;AACN,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AAC/C,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,uBAAuB,CAAC,SAAS,EAAE,KAAK,EAAE;AAC5C,IAAI,KAAK,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;AACvD,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE;AACpD,QAAQ,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAI;AACtC,UAAU,IAAI;AACd,YAAY,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC5B,UAAU,CAAC,CAAC,OAAO,KAAK,EAAE;AAC1B,YAAY,OAAO,CAAC,KAAK,CAAC,CAAC,8CAA8C,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC9F,UAAU,CAAC;AACX,QAAQ,CAAC,CAAC,CAAC;AACX,MAAM,CAAC;AACP,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,SAAS,EAAE,OAAO,EAAE;AACtC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,CAAC;AAC7C,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACjD,IAAI,IAAI,CAAC,KAAK,EAAE;AAChB,MAAM,MAAM,YAAY,GAAG,OAAO;AAClC,SAAS,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC;AAC9C,SAAS,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC9B,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC9C,IAAI,CAAC;AACL,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACjC,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,CAAC,KAAK,EAAE;AACtB,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7B,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AACtD,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AAC3B,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,CAAC,kBAAkB,EAAE,QAAQ,EAAE;AACvC,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI;AAChD,MAAM,IAAI,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC5C,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;AACpE,MAAM,CAAC;AACP,MAAM,OAAO,KAAK,CAAC,IAAI,KAAK,kBAAkB,CAAC;AAC/C,IAAI,CAAC,CAAC,CAAC;AACP;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI;AAC5B,MAAM,IAAI;AACV,QAAQ,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxB,MAAM,CAAC,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,qCAAqC,CAAC,EAAE,KAAK,CAAC,CAAC;AACtE,MAAM,CAAC;AACP,IAAI,CAAC,CAAC,CAAC;AACP,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,YAAY,CAAC,kBAAkB,EAAE;AACnC,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC7B,MAAM,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AACxB,MAAM,OAAO;AACb,IAAI,CAAC;AACL;AACA,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI;AAChD,MAAM,IAAI,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC5C,QAAQ,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;AACrE,MAAM,CAAC;AACP,MAAM,OAAO,KAAK,CAAC,IAAI,KAAK,kBAAkB,CAAC;AAC/C,IAAI,CAAC,CAAC,CAAC;AACP,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO;AACX,MAAM,GAAG,IAAI,CAAC,KAAK;AACnB,MAAM,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;AAC1C,MAAM,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;AACtC,MAAM,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI;AAC9C,MAAM,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM;AAC1F,QAAQ,KAAK;AACb,QAAQ,SAAS,EAAE,SAAS,CAAC,IAAI;AACjC,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,MAAM,EAAE;AACpB,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;AAChD,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,gBAAgB,GAAG;AACrB,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;AAClC,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,iBAAiB,GAAG;AACtB,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC;AACnC,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,SAAS,GAAG;AACd,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC;AACjC,EAAE,CAAC;AACH;;AC7cA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA,MAAM,WAAW,GAAG,KAAK,CAAC;AAC1B;AACA;AACA,MAAM,eAAe;AACrB,EAAE,OAAO,WAAW,KAAK,WAAW;AACpC,EAAE,OAAO,WAAW,CAAC,IAAI,KAAK,UAAU;AACxC,EAAE,OAAO,WAAW,CAAC,OAAO,KAAK,UAAU;AAC3C,CAAC,CAAC;AACF;AACO,MAAM,aAAa,CAAC;AAC3B,EAAE,WAAW,GAAG;AAChB,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;AAC7B,IAAI,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AAC3B,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;AAC3B;AACA,IAAI,IAAI,CAAC,MAAM,GAAG;AAClB,MAAM,OAAO,EAAE,IAAI;AACnB,MAAM,eAAe,EAAE,IAAI;AAC3B;AACA;AACA;AACA,MAAM,gBAAgB,EAAE,eAAe;AACvC,KAAK,CAAC;AACN;AACA,IAAI,IAAI,CAAC,UAAU,GAAG;AACtB,MAAM,KAAK,EAAE,IAAI;AACjB,MAAM,OAAO,EAAE,IAAI;AACnB,MAAM,IAAI,EAAE,IAAI;AAChB,KAAK,CAAC;AACN;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;AACnF,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,EAAE;AACzC,IAAI,OAAO,CAAC,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AACvD,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,EAAE;AACzC,IAAI,MAAM,QAAQ,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAChD,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC;AAChD;AACA;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;AACtC,MAAM,IAAI;AACV,QAAQ,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE;AACnE,UAAU,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE;AAC3E,SAAS,CAAC,CAAC;AACX,MAAM,CAAC,CAAC,MAAM;AACd;AACA,QAAQ,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACpF,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,oCAAoC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AACpE,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,EAAE;AACvC,IAAI,MAAM,QAAQ,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAChD,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC/C;AACA,IAAI,IAAI,CAAC,SAAS,EAAE;AACpB;AACA,MAAM,OAAO,CAAC,CAAC;AACf,IAAI,CAAC;AACL;AACA,IAAI,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;AACtC,IAAI,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AACzC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAChC;AACA;AACA;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;AACtC,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACzD,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AACjE,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAC7D,MAAM,IAAI;AACV,QAAQ,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE;AAClC,UAAU,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE;AACnF,SAAS,CAAC,CAAC;AACX,QAAQ,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE;AACzC,UAAU,KAAK,EAAE,SAAS;AAC1B,UAAU,GAAG,EAAE,OAAO;AACtB,UAAU,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE;AACrE,SAAS,CAAC,CAAC;AACX,MAAM,CAAC,CAAC,MAAM;AACd;AACA,QAAQ,IAAI;AACZ,UAAU,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACpC,UAAU,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAC/D,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAClB,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,CAAC,iBAAiB,CAAC;AAC3B,MAAM,IAAI;AACV,MAAM,OAAO;AACb,MAAM,QAAQ;AACd,MAAM,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AAC3B,MAAM,IAAI,EAAE,UAAU;AACtB,KAAK,CAAC,CAAC;AACP;AACA;AACA,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE;AAC7C,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,0CAA0C,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACjG,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,kCAAkC,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7F,IAAI,OAAO,QAAQ,CAAC;AACpB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,WAAW,EAAE;AACjC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACxC;AACA;AACA,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;AAChE,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;AAChC,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE;AAChD,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE;AAC5C,QAAQ,OAAO,EAAE,WAAW,CAAC,OAAO;AACpC,QAAQ,YAAY,EAAE,EAAE;AACxB,QAAQ,KAAK,EAAE,EAAE;AACjB,OAAO,CAAC,CAAC;AACT,IAAI,CAAC;AACL;AACA,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC7D,IAAI,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC9C;AACA;AACA,IAAI,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC7C,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,OAAO,EAAE;AAC1B,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACjD,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO;AAC5B;AACA,IAAI,MAAM,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;AACjD,IAAI,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO;AAC1C;AACA;AACA,IAAI,MAAM,MAAM,GAAG,EAAE,CAAC;AACtB,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI;AAC9B,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAC/C,MAAM,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AACtC,IAAI,CAAC,CAAC,CAAC;AACP;AACA;AACA,IAAI,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC;AAC1B,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK;AAC1D,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG;AAC/B,QAAQ,KAAK,EAAE,SAAS,CAAC,MAAM;AAC/B,QAAQ,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM;AACpE,QAAQ,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;AACnC,QAAQ,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;AACnC,QAAQ,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7C,OAAO,CAAC;AACR,IAAI,CAAC,CAAC,CAAC;AACP,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE;AAC9B,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC5C,IAAI,OAAO,SAAS,IAAI,KAAK,GAAG,SAAS,CAAC;AAC1C,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,GAAG;AACnB,IAAI,MAAM,MAAM,GAAG;AACnB,MAAM,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AAC3B,MAAM,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM;AACjD,MAAM,IAAI,EAAE,EAAE;AACd,KAAK,CAAC;AACN;AACA;AACA,IAAI,KAAK,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AACnD,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG;AAC7B,QAAQ,gBAAgB,EAAE,OAAO,CAAC,YAAY,CAAC,MAAM;AACrD,QAAQ,KAAK,EAAE,OAAO,CAAC,KAAK;AAC5B,OAAO,CAAC;AACR,IAAI,CAAC;AACL;AACA,IAAI,OAAO,MAAM,CAAC;AAClB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,CAAC,IAAI,GAAG,EAAE,EAAE;AAChC,IAAI,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,CAAC;AACpC,IAAI,MAAM,EAAE,IAAI,GAAG,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;AAC3C,IAAI,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;AACvE;AACA,IAAI,MAAM,MAAM,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC5D,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,MAAM,EAAE;AAC3C,MAAM,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5F,IAAI,CAAC;AACL,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,SAAS,EAAE;AAC9C,MAAM,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC/F,IAAI,CAAC;AACL,IAAI,OAAO,OAAO,CAAC;AACnB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE;AAC/B,IAAI,IAAI,OAAO,mBAAmB,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;AACtF,MAAM,OAAO,MAAM,CAAC,CAAC,CAAC;AACtB,IAAI,CAAC;AACL,IAAI,MAAM,EAAE,IAAI,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC;AACtC,IAAI,MAAM,UAAU,GAAG,IAAI,KAAK,KAAK,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACrE;AACA,IAAI,IAAI,QAAQ,CAAC;AACjB,IAAI,IAAI;AACR,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CAAC,CAAC,IAAI,KAAK;AACnD,QAAQ,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AAC/C,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;AAClD,YAAY,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;AAC/C,cAAc,MAAM,CAAC,IAAI,CAAC,CAAC,wCAAwC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACnF,YAAY,CAAC;AACb,UAAU,CAAC;AACX,QAAQ,CAAC;AACT,MAAM,CAAC,CAAC,CAAC;AACT,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;AACvC,IAAI,CAAC,CAAC,OAAO,GAAG,EAAE;AAClB,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,uCAAuC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAC5E,MAAM,OAAO,MAAM,CAAC,CAAC,CAAC;AACtB,IAAI,CAAC;AACL,IAAI,OAAO,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,OAAO,EAAE;AACtB,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;AAC7C,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,GAAG;AAClB,IAAI,MAAM,UAAU,GAAG,EAAE,CAAC;AAC1B;AACA,IAAI,KAAK,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AACnD,MAAM,UAAU,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;AACpC,IAAI,CAAC;AACL;AACA,IAAI,OAAO,UAAU,CAAC;AACtB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,CAAC,OAAO,EAAE;AACxB,IAAI,IAAI,OAAO,EAAE;AACjB,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACnC,MAAM,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;AAC/E,IAAI,CAAC,MAAM;AACX,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AAC3B,MAAM,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AAC7B,IAAI,CAAC;AACL;AACA;AACA;AACA,IAAI,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AACxC;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,kCAAkC,EAAE,OAAO,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1F,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,qBAAqB,CAAC,OAAO,EAAE;AACjC,IAAI,IAAI,CAAC,eAAe,EAAE,OAAO;AACjC,IAAI,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;AACvE;AACA,IAAI,IAAI;AACR,MAAM,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE;AAChE,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AAC3C,UAAU,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7C,QAAQ,CAAC;AACT,MAAM,CAAC;AACP,MAAM,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE;AACnE,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AAC3C,UAAU,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChD,QAAQ,CAAC;AACT,MAAM,CAAC;AACP,IAAI,CAAC,CAAC,MAAM;AACZ;AACA,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,MAAM,EAAE;AACpB,IAAI,IAAI,CAAC,MAAM,GAAG;AAClB,MAAM,GAAG,IAAI,CAAC,MAAM;AACpB,MAAM,GAAG,MAAM;AACf,KAAK,CAAC;AACN;AACA,IAAI,IAAI,MAAM,CAAC,UAAU,EAAE;AAC3B,MAAM,IAAI,CAAC,UAAU,GAAG;AACxB,QAAQ,GAAG,IAAI,CAAC,UAAU;AAC1B,QAAQ,GAAG,MAAM,CAAC,UAAU;AAC5B,OAAO,CAAC;AACR,IAAI,CAAC;AACL,EAAE,CAAC;AACH;;ACpYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACO,MAAM,cAAc,CAAC;AAC5B,EAAE,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE;AAClC,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACtB,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;AAC7B,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;AAC3B;AACA;AACA,IAAI,IAAI,CAAC,cAAc,GAAG;AAC1B,MAAM,YAAY,EAAE,WAAW;AAC/B,MAAM,aAAa,EAAE,YAAY;AACjC,MAAM,eAAe,EAAE,cAAc;AACrC,MAAM,SAAS,EAAE,WAAW;AAC5B,KAAK,CAAC;AACN;AACA;AACA,IAAI,IAAI,CAAC,oBAAoB,GAAG;AAChC,MAAM,OAAO;AACb,MAAM,QAAQ;AACd,MAAM,OAAO;AACb,MAAM,MAAM;AACZ,MAAM,QAAQ;AACd,MAAM,QAAQ;AACd,KAAK,CAAC;AACN;AACA;AACA,IAAI,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC;AACnD;AACA,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,IAAI;AACxC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC/B,IAAI,CAAC,CAAC,CAAC;AACP,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAmB,CAAC,WAAW,EAAE;AACnC,IAAI,MAAM,GAAG,GAAG;AAChB;AACA,MAAM,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;AACjC,MAAM,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AAC3B;AACA;AACA,MAAM,UAAU,EAAE,CAAC,OAAO,KAAK;AAC/B,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACxD,QAAQ,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC;AAClC,QAAQ,OAAO;AACf,UAAU,IAAI,EAAE,OAAO;AACvB,UAAU,KAAK,EAAE,OAAO,CAAC,KAAK;AAC9B,UAAU,SAAS,EAAE,OAAO,CAAC,SAAS;AACtC,SAAS,CAAC;AACV,MAAM,CAAC;AACP;AACA,MAAM,cAAc,EAAE,MAAM;AAC5B,QAAQ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AACrD,MAAM,CAAC;AACP;AACA,MAAM,QAAQ,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AAC3C,KAAK,CAAC;AACN;AACA;AACA,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAC1E;AACA;AACA;AACA,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,gBAAgB,GAAG,QAAQ,CAAC,IAAI,IAAI,CAAC;AACnF,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;AACxE,QAAQ,OAAO,EAAE,QAAQ;AACzB,QAAQ,KAAK,EAAE,WAAW;AAC1B,OAAO,CAAC,CAAC;AACT,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAChE,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAClE,IAAI,CAAC;AACL;AACA,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACzE,MAAM,GAAG,CAAC,QAAQ,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1D,MAAM,GAAG,CAAC,QAAQ,GAAG,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACxE,IAAI,CAAC;AACL;AACA,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACzE,MAAM,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAC/E,MAAM,GAAG,CAAC,OAAO,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC7D,IAAI,CAAC;AACL;AACA,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAC1E,MAAM,GAAG,CAAC,SAAS,GAAG,CAAC,MAAM,KAAK;AAClC;AACA,QAAQ,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC/C,QAAQ,MAAM,UAAU,GAAG,EAAE,CAAC;AAC9B,QAAQ,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;AACpC,UAAU,IAAI,GAAG,IAAI,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AAC3D,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AAC9C,MAAM,CAAC,CAAC;AACR,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACxC,MAAM,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;AACnC,MAAM,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;AACrE,IAAI,CAAC;AACL;AACA;AACA,IAAI,OAAO,cAAc,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AAC3C,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE;AAChC,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE;AAC3C,MAAM,OAAO,GAAG,CAAC;AACjB,IAAI,CAAC;AACL;AACA;AACA;AACA;AACA,IAAI,MAAM,SAAS,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC;AAC9C,IAAI,IAAI,CAAC,SAAS,EAAE;AACpB,MAAM,OAAO,GAAG,CAAC;AACjB,IAAI,CAAC;AACL;AACA,IAAI,MAAM,aAAa;AACvB,MAAM,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,SAAS;AACrD,MAAM,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;AAC1C,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACvC;AACA,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,OAAO,EAAE;AACpC,MAAM,OAAO,GAAG,CAAC;AACjB,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,CAAC,IAAI,EAAE;AACf,MAAM,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC;AAC3B,IAAI,CAAC;AACL,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACvB,MAAM,OAAO,GAAG,CAAC;AACjB,IAAI,CAAC;AACL,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAClB;AACA;AACA,IAAI,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,MAAM,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,MAAM,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC9E,QAAQ,cAAc,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAChD,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC9B,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,MAAM,EAAE;AAC1B,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC/C,MAAM,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;AACtE,IAAI,CAAC;AACL;AACA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;AACzD,MAAM,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;AAC9E,IAAI,CAAC;AACL;AACA,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE;AACjC,MAAM,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;AACjF,IAAI,CAAC;AACL;AACA;AACA,IAAI,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE;AAChD,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,UAAU,EAAE;AACtE,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,2BAA2B,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;AACrF,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,MAAM,CAAC,WAAW,EAAE;AAC5B,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;AAC9C,QAAQ,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;AACnF,MAAM,CAAC;AACP;AACA,MAAM,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,WAAW,EAAE;AAC7C,QAAQ,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACvD,UAAU,MAAM,IAAI,KAAK,CAAC,CAAC,+BAA+B,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACpE,QAAQ,CAAC;AACT,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE;AAC5B;AACA;AACA,IAAI,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE;AACtC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAC/B,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AACjC;AACA;AACA,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACvC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,mBAAmB,EAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAC1E,MAAM,OAAO;AACb,IAAI,CAAC;AACL;AACA;AACA,IAAI,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzD;AACA;AACA,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;AAC/D;AACA;AACA,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE;AACxB,MAAM,IAAI;AACV,QAAQ,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AAC9C,MAAM,CAAC,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,6BAA6B,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AAC9E,QAAQ,MAAM,KAAK,CAAC;AACpB,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,IAAI;AAC5C,MAAM,IAAI,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,UAAU,EAAE;AAClD;AACA,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACjG,QAAQ,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AACjD,MAAM,CAAC;AACP,IAAI,CAAC,CAAC,CAAC;AACP;AACA;AACA,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;AAClC,MAAM,MAAM;AACZ,MAAM,OAAO;AACb,MAAM,WAAW;AACjB,MAAM,YAAY;AAClB,MAAM,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;AAC7B,KAAK,CAAC,CAAC;AACP;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,qBAAqB,EAAE,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5G,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;AAC1C,IAAI,OAAO,OAAO,OAAO,KAAK;AAC9B,MAAM,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK;AACxD,QAAQ,UAAU,CAAC,MAAM;AACzB,UAAU,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,kBAAkB,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/G,QAAQ,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AAC7B,MAAM,CAAC,CAAC,CAAC;AACT;AACA,MAAM,IAAI;AACV;AACA,QAAQ,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC;AAClC,UAAU,MAAM,CAAC,OAAO,CAAC;AACzB,UAAU,cAAc;AACxB,SAAS,CAAC,CAAC;AACX,MAAM,CAAC,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC/E;AACA,QAAQ,OAAO,SAAS,CAAC;AACzB,MAAM,CAAC;AACP,IAAI,CAAC,CAAC;AACN,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE;AACnC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACnC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,yBAAyB,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC1D,MAAM,OAAO;AACb,IAAI,CAAC;AACL,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC5C,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE;AACpC,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrD;AACA,IAAI,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AACtC,MAAM,IAAI;AACV,QAAQ,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC/C,QAAQ,IAAI,MAAM,KAAK,KAAK,EAAE;AAC9B,UAAU,OAAO,KAAK,CAAC;AACvB,QAAQ,CAAC;AACT,MAAM,CAAC,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,yBAAyB,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACtE,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,UAAU,EAAE;AACxB,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AACpD,IAAI,IAAI,CAAC,UAAU,EAAE;AACrB,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,mBAAmB,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;AACjE,MAAM,OAAO;AACb,IAAI,CAAC;AACL;AACA,IAAI,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,UAAU,CAAC;AAChD;AACA,IAAI,IAAI,MAAM,CAAC,SAAS,EAAE;AAC1B,MAAM,IAAI;AACV,QAAQ,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;AACvC,MAAM,CAAC,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,+BAA+B,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AAC/E,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACpC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,qBAAqB,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;AACpE,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,UAAU,EAAE;AACxB,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;AAChD,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO;AACX,MAAM,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;AACrC,MAAM,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM;AACzE,QAAQ,IAAI;AACZ,QAAQ,WAAW,EAAE,IAAI,CAAC,WAAW;AACrC,QAAQ,WAAW,EAAE,IAAI,CAAC,WAAW;AACrC,OAAO,CAAC,CAAC;AACT,MAAM,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM;AAC1E,QAAQ,IAAI;AACZ,QAAQ,SAAS,EAAE,SAAS,CAAC,MAAM;AACnC,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AACvC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC3B,IAAI,CAAC;AACL,EAAE,CAAC;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,YAAY,GAAG,CAAC,MAAM,KAAK;AACxC,EAAE,OAAO;AACT,IAAI,IAAI,EAAE,MAAM,CAAC,IAAI;AACrB,IAAI,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC;AACjD,IAAI,OAAO,EAAE,MAAM,CAAC,OAAO;AAC3B,IAAI,SAAS,EAAE,MAAM,CAAC,SAAS;AAC/B,IAAI,UAAU,EAAE,MAAM,CAAC,UAAU;AACjC,IAAI,SAAS,EAAE,MAAM,CAAC,SAAS;AAC/B,IAAI,WAAW,EAAE,MAAM,CAAC,WAAW;AACnC,IAAI,UAAU,EAAE,MAAM,CAAC,UAAU;AACjC,IAAI,aAAa,EAAE,MAAM,CAAC,aAAa;AACvC,IAAI,YAAY,EAAE,MAAM,CAAC,YAAY;AACrC,IAAI,OAAO,EAAE,MAAM,CAAC,OAAO;AAC3B,IAAI,SAAS,EAAE,MAAM,CAAC,SAAS;AAC/B,GAAG,CAAC;AACJ;;ACvZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACO,MAAM,iBAAiB,CAAC;AAC/B,EAAE,WAAW,CAAC,IAAI,EAAE;AACpB,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;AAChC,IAAI,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AAC3B,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACxB,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAC5B,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC9B,IAAI,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AAC5B;AACA,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;AACrC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC7B;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;AACrE,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,yBAAyB,GAAG;AAC9B;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AAC1B,MAAM,aAAa,EAAE,KAAK;AAC1B,MAAM,IAAI,EAAE,OAAO,OAAO,EAAE,MAAM,KAAK;AACvC,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,wBAAwB,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC;AAClF;AACA,QAAQ,OAAO;AACf,MAAM,CAAC;AACP,KAAK,CAAC,CAAC;AACP;AACA;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AAC3B,MAAM,aAAa,EAAE,IAAI;AACzB,MAAM,QAAQ,EAAE,MAAM;AACtB,MAAM,IAAI,EAAE,OAAO,OAAO,EAAE,MAAM,KAAK;AACvC,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,4BAA4B,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;AAC3E;AACA;AACA,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAChD,QAAQ,IAAI,GAAG,EAAE;AACjB,UAAU,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;AACnE,UAAU,MAAM,0BAA0B,SAAS,CAAC,CAAC;AACrD,UAAU,MAAM,CAAC,KAAK,CAAC,CAAC,mBAAmB,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;AAClE,QAAQ,CAAC;AACT,MAAM,CAAC;AACP,KAAK,CAAC,CAAC;AACP;AACA;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;AAC7B,MAAM,aAAa,EAAE,IAAI;AACzB,MAAM,QAAQ,EAAE,QAAQ;AACxB,MAAM,IAAI,EAAE,OAAO,OAAO,EAAE,MAAM,KAAK;AACvC,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,4CAA4C,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAC/E;AACA;AACA,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAChD,QAAQ,IAAI,GAAG,EAAE;AACjB,UAAU,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;AACnE;AACA,UAAU,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AACtD,UAAU,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC;AAChC,UAAU,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;AAChC,UAAU,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC;AAC7B,UAAU,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC1C;AACA,UAAU,MAAM,CAAC,KAAK,CAAC,CAAC,6CAA6C,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAClF,QAAQ,CAAC;AACT,MAAM,CAAC;AACP,KAAK,CAAC,CAAC;AACP;AACA;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;AAC/B,MAAM,aAAa,EAAE,IAAI;AACzB,MAAM,QAAQ,EAAE,QAAQ;AACxB,MAAM,IAAI,EAAE,OAAO,OAAO,EAAE,MAAM,KAAK;AACvC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAClC,UAAU,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE;AACvD,YAAY,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,UAAU;AACrD,WAAW,CAAC,CAAC;AACb,QAAQ,CAAC;AACT,MAAM,CAAC;AACP,KAAK,CAAC,CAAC;AACP;AACA;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AAC1B,MAAM,aAAa,EAAE,KAAK;AAC1B,MAAM,IAAI,EAAE,OAAO,OAAO,EAAE,MAAM,KAAK;AACvC,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,yBAAyB,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAC7E;AACA,QAAQ,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;AACxC,UAAU,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACjC,YAAY,OAAO;AACnB,YAAY,MAAM;AAClB,YAAY,OAAO;AACnB,WAAW,CAAC,CAAC;AACb;AACA;AACA,UAAU,IAAI,IAAI,CAAC,MAAM,EAAE;AAC3B,YAAY,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACpC,UAAU,CAAC;AACX,QAAQ,CAAC,CAAC,CAAC;AACX,MAAM,CAAC;AACP,KAAK,CAAC,CAAC;AACP,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE;AAC3B,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;AAC/D,MAAM,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;AAC3E,IAAI,CAAC;AACL;AACA,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE;AAC9B,MAAM,IAAI;AACV,MAAM,aAAa,EAAE,QAAQ,CAAC,aAAa,IAAI,KAAK;AACpD,MAAM,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,KAAK;AAC1C,MAAM,IAAI,EAAE,QAAQ,CAAC,IAAI;AACzB,KAAK,CAAC,CAAC;AACP;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,yBAAyB,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AACjE,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE;AAC9B,IAAI,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC;AACnD,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AACvD;AACA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnB,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,yBAAyB,EAAE,YAAY,CAAC,uBAAuB,CAAC,CAAC,CAAC;AACrF,MAAM,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACrE,IAAI,CAAC;AACL;AACA,IAAI,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAChD,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,CAAC,IAAI,EAAE;AACtB,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI;AACzC,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,CAAC;AACnE,MAAM,OAAO,QAAQ,CAAC,aAAa,CAAC;AACpC,IAAI,CAAC,CAAC,CAAC;AACP;AACA;AACA,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AAC7B,MAAM,MAAM,aAAa,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AAC3D,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,QAAQ,IAAI,KAAK,CAAC;AAC3E,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,QAAQ,IAAI,KAAK,CAAC;AAC3E,MAAM,OAAO,aAAa,CAAC,SAAS,CAAC,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;AACjE,IAAI,CAAC,CAAC,CAAC;AACP;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,0BAA0B,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACvE;AACA;AACA,IAAI,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE;AACjC,MAAM,IAAI;AACV,QAAQ,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACvC,MAAM,CAAC,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,iCAAiC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC9E,MAAM,CAAC;AACP,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,iBAAiB,GAAG;AACtB,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,OAAO;AAC9C;AACA,IAAI,IAAI,qBAAqB,IAAI,MAAM,EAAE;AACzC,MAAM,MAAM,YAAY,GAAG,CAAC,QAAQ,KAAK;AACzC,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO;AACpC,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AAC3B,QAAQ,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACxC;AACA,QAAQ,IAAI,CAAC,WAAW,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;AAC7D,MAAM,CAAC,CAAC;AACR,MAAM,IAAI,CAAC,WAAW,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;AAC3D,IAAI,CAAC,MAAM;AACX;AACA,MAAM,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,MAAM;AAC5C,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO;AACpC,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AAC3B,QAAQ,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAChC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;AACf,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,gBAAgB,CAAC,QAAQ,EAAE;AACnC,IAAI,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AACzC;AACA,MAAM,IAAI,QAAQ,IAAI,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE;AACrD,QAAQ,MAAM;AACd,MAAM,CAAC;AACP;AACA,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;AAC7C;AACA,MAAM,IAAI;AACV,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACrD,QAAQ,IAAI,GAAG,EAAE;AACjB,UAAU,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;AACnE,UAAU,MAAM,0BAA0B,SAAS,CAAC,CAAC;AACrD,UAAU,MAAM,CAAC,KAAK,CAAC,CAAC,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAC;AACpF,UAAU,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC7B,QAAQ,CAAC,MAAM;AACf,UAAU,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC7B,QAAQ,CAAC;AACT,MAAM,CAAC,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,+BAA+B,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAChF,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC3B,MAAM,CAAC;AACP,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO;AACX,MAAM,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI;AAC3C,MAAM,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AACpD,MAAM,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM;AAC7C,MAAM,MAAM,EAAE,IAAI,CAAC,MAAM;AACzB,KAAK,CAAC;AACN,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AAC3B,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI,OAAO,kBAAkB,KAAK,UAAU,EAAE;AAC9E,MAAM,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC3C,MAAM,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAC9B,IAAI,CAAC;AACL,IAAI,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,EAAE;AACpC,MAAM,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACvC,MAAM,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAChC,IAAI,CAAC;AACL;AACA,IAAI,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;AAC1C,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC1C,IAAI,CAAC;AACL,IAAI,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AAC3B,IAAI,MAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;AAC5D,EAAE,CAAC;AACH;;ACjRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACO,MAAM,eAAe,CAAC;AAC7B,EAAE,WAAW,CAAC,IAAI,EAAE;AACpB,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB,IAAI,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACvB,IAAI,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACvB,IAAI,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;AAC3B;AACA,IAAI,IAAI,CAAC,MAAM,GAAG;AAClB,MAAM,UAAU,EAAE,CAAC;AACnB,MAAM,UAAU,EAAE,IAAI;AACtB,MAAM,WAAW,EAAE,IAAI;AACvB,KAAK,CAAC;AACN;AACA,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;AACnC;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;AACrE,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,uBAAuB,GAAG;AAC5B;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC;AAClB,MAAM,IAAI,EAAE,SAAS;AACrB,MAAM,SAAS,EAAE,CAAC,KAAK,KAAK;AAC5B,QAAQ,OAAO,KAAK,CAAC,IAAI,KAAK,WAAW;AACzC,gBAAgB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AACtF,MAAM,CAAC;AACP,MAAM,MAAM,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;AACxC,QAAQ,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;AACtE;AACA;AACA,QAAQ,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AACzD,UAAU,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;AACjF,UAAU,MAAM,CAAC,KAAK,CAAC,CAAC,mCAAmC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3E;AACA,QAAQ,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AACjE;AACA,UAAU,OAAO;AACjB,YAAY,SAAS,EAAE,IAAI;AAC3B,YAAY,MAAM,EAAE,OAAO;AAC3B,YAAY,UAAU,EAAE,OAAO,CAAC,UAAU,GAAG,CAAC;AAC9C,WAAW,CAAC;AACZ,QAAQ,CAAC;AACT;AACA,QAAQ,OAAO;AACf,UAAU,SAAS,EAAE,KAAK;AAC1B,UAAU,MAAM,EAAE,UAAU;AAC5B,UAAU,OAAO,EAAE,6CAA6C;AAChE,SAAS,CAAC;AACV,MAAM,CAAC;AACP,KAAK,CAAC,CAAC;AACP;AACA;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC;AAClB,MAAM,IAAI,EAAE,aAAa;AACzB,MAAM,SAAS,EAAE,CAAC,KAAK,KAAK;AAC5B,QAAQ,OAAO,KAAK,CAAC,IAAI,KAAK,OAAO;AACrC,gBAAgB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;AACjD,gBAAgB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAC3D,MAAM,CAAC;AACP,MAAM,MAAM,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;AACxC,QAAQ,MAAM,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;AAC7E;AACA;AACA,QAAQ,IAAI,OAAO,CAAC,WAAW,EAAE;AACjC,UAAU,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;AACxE,UAAU,OAAO;AACjB,YAAY,SAAS,EAAE,IAAI;AAC3B,YAAY,MAAM,EAAE,kBAAkB;AACtC,YAAY,GAAG,EAAE,OAAO,CAAC,WAAW;AACpC,WAAW,CAAC;AACZ,QAAQ,CAAC;AACT;AACA,QAAQ,OAAO;AACf,UAAU,SAAS,EAAE,KAAK;AAC1B,UAAU,MAAM,EAAE,UAAU;AAC5B,UAAU,OAAO,EAAE,8BAA8B;AACjD,SAAS,CAAC;AACV,MAAM,CAAC;AACP,KAAK,CAAC,CAAC;AACP;AACA;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC;AAClB,MAAM,IAAI,EAAE,OAAO;AACnB,MAAM,SAAS,EAAE,CAAC,KAAK,KAAK;AAC5B,QAAQ,OAAO,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAChE,MAAM,CAAC;AACP,MAAM,MAAM,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;AACxC,QAAQ,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;AAClE;AACA;AACA,QAAQ,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,EAAE;AACpC,UAAU,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;AAC3E;AACA;AACA,UAAU,IAAI;AACd,YAAY,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACrD,UAAU,CAAC,CAAC,OAAO,YAAY,EAAE;AACjC,YAAY,MAAM,CAAC,IAAI,CAAC,sCAAsC,EAAE,YAAY,CAAC,CAAC;AAC9E,UAAU,CAAC;AACX;AACA,UAAU,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AACjE;AACA,UAAU,OAAO;AACjB,YAAY,SAAS,EAAE,IAAI;AAC3B,YAAY,MAAM,EAAE,OAAO;AAC3B,YAAY,UAAU,EAAE,OAAO,CAAC,UAAU,GAAG,CAAC;AAC9C,WAAW,CAAC;AACZ,QAAQ,CAAC;AACT;AACA,QAAQ,OAAO;AACf,UAAU,SAAS,EAAE,KAAK;AAC1B,UAAU,MAAM,EAAE,UAAU;AAC5B,UAAU,OAAO,EAAE,6BAA6B;AAChD,SAAS,CAAC;AACV,MAAM,CAAC;AACP,KAAK,CAAC,CAAC;AACP;AACA;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC;AAClB,MAAM,IAAI,EAAE,SAAS;AACrB,MAAM,SAAS,EAAE,CAAC,KAAK,KAAK;AAC5B,QAAQ,OAAO,KAAK,CAAC,IAAI,KAAK,cAAc;AAC5C,eAAe,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACjD,MAAM,CAAC;AACP,MAAM,MAAM,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;AACxC,QAAQ,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;AACtE;AACA;AACA,QAAQ,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,EAAE;AACpC,UAAU,OAAO;AACjB,YAAY,SAAS,EAAE,IAAI;AAC3B,YAAY,MAAM,EAAE,2BAA2B;AAC/C,YAAY,OAAO,EAAE,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,IAAI,CAAC;AAClD,YAAY,UAAU,EAAE,OAAO,CAAC,UAAU,GAAG,CAAC;AAC9C,WAAW,CAAC;AACZ,QAAQ,CAAC;AACT;AACA,QAAQ,OAAO;AACf,UAAU,SAAS,EAAE,KAAK;AAC1B,UAAU,MAAM,EAAE,UAAU;AAC5B,UAAU,OAAO,EAAE,qBAAqB;AACxC,SAAS,CAAC;AACV,MAAM,CAAC;AACP,KAAK,CAAC,CAAC;AACP;AACA;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC;AAClB,MAAM,IAAI,EAAE,SAAS;AACrB,MAAM,SAAS,EAAE,MAAM,IAAI;AAC3B,MAAM,MAAM,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;AACxC,QAAQ,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;AACtE;AACA,QAAQ,OAAO;AACf,UAAU,SAAS,EAAE,KAAK;AAC1B,UAAU,MAAM,EAAE,UAAU;AAC5B,UAAU,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,8BAA8B;AAClE,SAAS,CAAC;AACV,MAAM,CAAC;AACP,KAAK,CAAC,CAAC;AACP,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,OAAO,EAAE;AACpB,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AAChE,MAAM,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;AACzF,IAAI,CAAC;AACL;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAChC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,2BAA2B,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AAC3E,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,EAAE,EAAE;AACpC;AACA,IAAI,OAAO,GAAG;AACd,MAAM,UAAU,EAAE,CAAC;AACnB,MAAM,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AAC3B,MAAM,GAAG,OAAO;AAChB,KAAK,CAAC;AACN;AACA;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAClC;AACA;AACA,IAAI,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;AACzC,MAAM,IAAI;AACV,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;AAC/C,UAAU,MAAM,CAAC,KAAK,CAAC,CAAC,iCAAiC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3E;AACA,UAAU,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC9D;AACA,UAAU,IAAI,MAAM,CAAC,SAAS,EAAE;AAChC,YAAY,MAAM,CAAC,KAAK,CAAC,CAAC,uCAAuC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnF,YAAY,OAAO,MAAM,CAAC;AAC1B,UAAU,CAAC;AACX;AACA;AACA,UAAU,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;AACvE,YAAY,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACjD,UAAU,CAAC;AACX;AACA,UAAU,OAAO,MAAM,CAAC;AACxB,QAAQ,CAAC;AACT,MAAM,CAAC,CAAC,OAAO,YAAY,EAAE;AAC7B,QAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,2BAA2B,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC,CAAC;AAC3F,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA;AACA,IAAI,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;AAC3E;AACA,IAAI,OAAO;AACX,MAAM,SAAS,EAAE,KAAK;AACtB,MAAM,MAAM,EAAE,WAAW;AACzB,MAAM,OAAO,EAAE,iBAAiB;AAChC,KAAK,CAAC;AACN,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE;AAClC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAC5B,MAAM,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;AACvE,MAAM,OAAO;AACb,IAAI,CAAC;AACL;AACA,IAAI,MAAM,SAAS,GAAG,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ;AAC3D,QAAQ,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC;AACjD,QAAQ,OAAO,CAAC,SAAS,CAAC;AAC1B;AACA,IAAI,IAAI,CAAC,SAAS,EAAE,OAAO;AAC3B;AACA;AACA,IAAI,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC;AAC7B;AACA;AACA,IAAI,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAClD,IAAI,OAAO,CAAC,SAAS,GAAG,mBAAmB,CAAC;AAC5C;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE;AACjC,MAAM,OAAO,EAAE,MAAM;AACrB,MAAM,YAAY,EAAE,KAAK;AACzB,MAAM,UAAU,EAAE,SAAS;AAC3B,MAAM,MAAM,EAAE,mBAAmB;AACjC,MAAM,KAAK,EAAE,SAAS;AACtB,MAAM,UAAU,EAAE,sCAAsC;AACxD,MAAM,SAAS,EAAE,QAAQ;AACzB,KAAK,CAAC,CAAC;AACP;AACA,IAAI,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC/C,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAC5B,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC;AACjC,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC;AACrC;AACA,IAAI,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAC/C,IAAI,KAAK,CAAC,WAAW,GAAG,mBAAmB,CAAC;AAC5C,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC;AACxC;AACA,IAAI,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAChD,IAAI,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,OAAO,IAAI,mBAAmB,CAAC;AAChE,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC;AACxC;AACA,IAAI,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACpD,IAAI,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;AACrC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;AAChC,MAAM,OAAO,EAAE,aAAa;AAC5B,MAAM,UAAU,EAAE,SAAS;AAC3B,MAAM,MAAM,EAAE,MAAM;AACpB,MAAM,YAAY,EAAE,KAAK;AACzB,MAAM,MAAM,EAAE,SAAS;AACvB,MAAM,UAAU,EAAE,MAAM;AACxB,MAAM,KAAK,EAAE,MAAM;AACnB,KAAK,CAAC,CAAC;AACP;AACA,IAAI,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;AACrE;AACA,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC9B,IAAI,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC/B,IAAI,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AACjC,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAChC;AACA,IAAI,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AACnC,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE;AAC3B;AACA,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AACpF;AACA;AACA,IAAI,MAAM,WAAW,GAAG,EAAE,CAAC;AAC3B,IAAI,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AAC5C,MAAM,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AAC/B,MAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE;AAC1G,QAAQ,WAAW,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AAC/B,MAAM,CAAC,MAAM;AACb,QAAQ,WAAW,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AACvC,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA,IAAI,MAAM,UAAU,GAAG;AACvB,MAAM,KAAK,EAAE;AACb,QAAQ,IAAI,EAAE,KAAK,CAAC,IAAI;AACxB,QAAQ,OAAO,EAAE,KAAK,CAAC,OAAO;AAC9B,QAAQ,KAAK;AACb,OAAO;AACP,MAAM,OAAO,EAAE,WAAW;AAC1B,MAAM,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AAC3B,KAAK,CAAC;AACN;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACnC;AACA;AACA,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE;AACjD,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;AAC5B,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,KAAK,GAAG,EAAE,EAAE;AAC1B,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;AACvC,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,MAAM,YAAY,GAAG,EAAE,CAAC;AAC5B;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI;AACnC,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC;AACjD,MAAM,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzD,IAAI,CAAC,CAAC,CAAC;AACP;AACA,IAAI,OAAO;AACX,MAAM,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;AACvC,MAAM,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;AACpC,MAAM,YAAY;AAClB,MAAM,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AACvC,KAAK,CAAC;AACN,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,MAAM,EAAE;AACpB,IAAI,IAAI,CAAC,MAAM,GAAG;AAClB,MAAM,GAAG,IAAI,CAAC,MAAM;AACpB,MAAM,GAAG,MAAM;AACf,KAAK,CAAC;AACN,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACvB,IAAI,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACvB,IAAI,MAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;AACnE,EAAE,CAAC;AACH;;AClZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACO,MAAM,gBAAgB,CAAC;AAC9B,EAAE,WAAW,CAAC,IAAI,EAAE;AACpB,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;AAC3B,IAAI,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AAC3B,IAAI,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;AAC1B;AACA;AACA,IAAI,IAAI,CAAC,eAAe,GAAG;AAC3B,MAAM,YAAY;AAClB,MAAM,WAAW;AACjB,MAAM,YAAY;AAClB,MAAM,WAAW;AACjB,MAAM,aAAa;AACnB,MAAM,YAAY;AAClB,MAAM,eAAe;AACrB,MAAM,cAAc;AACpB,MAAM,eAAe;AACrB,MAAM,cAAc;AACpB,KAAK,CAAC;AACN;AACA;AACA,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,IAAI;AAC1C,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAChC,IAAI,CAAC,CAAC,CAAC;AACP;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;AAC7D,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,GAAG,EAAE,EAAE;AACvC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAChC,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACrE,IAAI,CAAC;AACL;AACA,IAAI,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE;AAC1C,MAAM,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;AACjE,IAAI,CAAC;AACL;AACA,IAAI,MAAM,IAAI,GAAG;AACjB,MAAM,UAAU;AAChB,MAAM,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAChD,MAAM,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC;AACrC,MAAM,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;AAC9B,KAAK,CAAC;AACN;AACA,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACxC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB;AACA;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;AAClD;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACvG;AACA;AACA,IAAI,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/C,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE;AACtB,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO;AACvC;AACA,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACxC,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACxD;AACA,IAAI,IAAI,KAAK,GAAG,EAAE,EAAE;AACpB,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC7B,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACrE,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,EAAE,EAAE;AACrC,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACxC;AACA,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtC,MAAM,OAAO,OAAO,CAAC;AACrB,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,oBAAoB,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3E;AACA;AACA,IAAI,MAAM,cAAc,GAAG;AAC3B,MAAM,KAAK;AACX,MAAM,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AAC3B,MAAM,UAAU,EAAE,KAAK,CAAC,MAAM;AAC9B,MAAM,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;AACvC,KAAK,CAAC;AACN;AACA,IAAI,IAAI,cAAc,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;AACxC,IAAI,IAAI,SAAS,GAAG,KAAK,CAAC;AAC1B;AACA;AACA,IAAI,MAAM,YAAY,GAAG,OAAO,KAAK,KAAK;AAC1C;AACA,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;AACjC,QAAQ,OAAO,cAAc,CAAC;AAC9B,MAAM,CAAC;AACP;AACA,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AAChC,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACnC;AACA,MAAM,IAAI;AACV,QAAQ,IAAI,UAAU,GAAG,KAAK,CAAC;AAC/B;AACA;AACA,QAAQ,MAAM,IAAI,GAAG,OAAO,eAAe,KAAK;AAChD,UAAU,UAAU,GAAG,IAAI,CAAC;AAC5B;AACA;AACA,UAAU,IAAI,eAAe,KAAK,SAAS,EAAE;AAC7C,YAAY,cAAc,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,eAAe,EAAE,CAAC;AACvE,UAAU,CAAC;AACX;AACA;AACA,UAAU,OAAO,MAAM,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAC/C,QAAQ,CAAC,CAAC;AACV;AACA;AACA,QAAQ,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;AACpD;AACA;AACA,QAAQ,IAAI,CAAC,UAAU,EAAE;AACzB,UAAU,MAAM,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;AAC5E,UAAU,SAAS,GAAG,IAAI,CAAC;AAC3B,UAAU,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACrC,QAAQ,CAAC;AACT;AACA,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;AAChD,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AAChF;AACA,MAAM,CAAC,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,yBAAyB,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AACxE;AACA;AACA,QAAQ,OAAO,MAAM,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAC7C,MAAM,CAAC;AACP;AACA,MAAM,OAAO,cAAc,CAAC;AAC5B,IAAI,CAAC,CAAC;AACN;AACA;AACA,IAAI,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,CAAC,CAAC,CAAC;AACzC;AACA;AACA,IAAI,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC,SAAS,CAAC;AACpE,IAAI,cAAc,CAAC,SAAS,GAAG,SAAS,CAAC;AACzC,IAAI,cAAc,CAAC,OAAO,GAAG,CAAC,SAAS,CAAC;AACxC;AACA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC3C;AACA;AACA,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;AACpD,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;AAChC,IAAI,CAAC;AACL;AACA,IAAI,OAAO,MAAM,CAAC;AAClB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,EAAE,EAAE;AAChD,IAAI,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK;AAC1C,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;AACnF,KAAK,CAAC;AACN;AACA;AACA,IAAI,OAAO,MAAM,aAAa,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AACnD,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,KAAK,EAAE;AAClB,IAAI,IAAI,KAAK,EAAE;AACf,MAAM,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AACzC,IAAI,CAAC;AACL;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,EAAE,CAAC;AACxB,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK;AACzC,MAAM,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK;AACxC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI;AACpB,QAAQ,QAAQ,EAAE,CAAC,CAAC,QAAQ;AAC5B,QAAQ,YAAY,EAAE,CAAC,CAAC,YAAY;AACpC,OAAO,CAAC,CAAC,CAAC;AACV,IAAI,CAAC,CAAC,CAAC;AACP;AACA,IAAI,OAAO,QAAQ,CAAC;AACpB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AACtD,OAAO,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACrD;AACA,IAAI,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACjC,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,IAAI;AACvC,MAAM,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjF,IAAI,CAAC,CAAC,CAAC;AACP;AACA,IAAI,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;AACpD,QAAQ,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM;AACpG,QAAQ,CAAC,CAAC;AACV;AACA,IAAI,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;AACrF;AACA,IAAI,OAAO;AACX,MAAM,UAAU;AAChB,MAAM,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM;AAC/C,MAAM,iBAAiB;AACvB,MAAM,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;AAC1C,MAAM,cAAc;AACpB,MAAM,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;AACpD,KAAK,CAAC;AACN,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,KAAK,EAAE;AACjB,IAAI,IAAI,KAAK,EAAE;AACf,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAChC,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3D,IAAI,CAAC,MAAM;AACX,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI;AACxC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC9B,MAAM,CAAC,CAAC,CAAC;AACT,MAAM,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AAC7B,MAAM,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;AACrD,IAAI,CAAC;AACL,EAAE,CAAC;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,gBAAgB,GAAG,CAAC,EAAE,KAAK;AACxC,EAAE,OAAO,OAAO,OAAO,EAAE,IAAI,KAAK;AAClC,IAAI,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC;AACtB,IAAI,MAAM,IAAI,EAAE,CAAC;AACjB,EAAE,CAAC,CAAC;AACJ,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,qBAAqB,GAAG,CAAC,SAAS,EAAE,EAAE,KAAK;AACxD,EAAE,OAAO,OAAO,OAAO,EAAE,IAAI,KAAK;AAClC,IAAI,IAAI,MAAM,SAAS,CAAC,OAAO,CAAC,EAAE;AAClC,MAAM,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC;AACxB,IAAI,CAAC;AACL,IAAI,MAAM,IAAI,EAAE,CAAC;AACjB,EAAE,CAAC,CAAC;AACJ,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,eAAe,GAAG,CAAC,cAAc,KAAK;AACnD,EAAE,OAAO,OAAO,OAAO,EAAE,IAAI,KAAK;AAClC,IAAI,IAAI,MAAM,cAAc,CAAC,OAAO,CAAC,EAAE;AACvC,MAAM,MAAM,IAAI,EAAE,CAAC;AACnB,IAAI,CAAC;AACL;AACA,EAAE,CAAC,CAAC;AACJ,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,mBAAmB,GAAG,CAAC,WAAW,KAAK;AACpD,EAAE,OAAO,OAAO,OAAO,EAAE,IAAI,KAAK;AAClC,IAAI,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;AAChD,IAAI,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzB,EAAE,CAAC,CAAC;AACJ,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,eAAe,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,KAAK;AACvD,EAAE,OAAO,OAAO,OAAO,EAAE,IAAI,KAAK;AAClC,IAAI,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM;AACjD,MAAM,UAAU,CAAC,MAAM,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,EAAE,OAAO,CAAC;AAClE,KAAK,CAAC;AACN;AACA,IAAI,IAAI;AACR,MAAM,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;AACxD,MAAM,MAAM,IAAI,EAAE,CAAC;AACnB,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;AAC3D,MAAM,MAAM,IAAI,EAAE,CAAC;AACnB,IAAI,CAAC;AACL,EAAE,CAAC,CAAC;AACJ;;AC7VA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACO,MAAM,UAAU,CAAC;AACxB,EAAE,WAAW,CAAC,IAAI,EAAE;AACpB,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB;AACA;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;AAChC;AACA;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;AAChC,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACzB;AACA;AACA,IAAI,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;AACnC,IAAI,IAAI,CAAC,iBAAiB,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AAC7D;AACA;AACA,IAAI,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;AACnE,IAAI,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC7D;AACA,IAAI,MAAM,CAAC,OAAO;AAClB,MAAM,CAAC,2BAA2B,CAAC;AACnC,MAAM,CAAC,mBAAmB,EAAE,IAAI,CAAC,wBAAwB,GAAG,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC;AAC5E,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC,qBAAqB,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC;AACpE,KAAK,CAAC;AACN,EAAE,CAAC;AACH;AACA;AACA;AACA,EAAE,uBAAuB,GAAG;AAC5B,IAAI,IAAI,OAAO,iBAAiB,KAAK,WAAW,EAAE,OAAO,KAAK,CAAC;AAC/D,IAAI,OAAO,iBAAiB,CAAC,QAAQ,GAAG,kBAAkB,CAAC,IAAI,KAAK,CAAC;AACrE,EAAE,CAAC;AACH;AACA,EAAE,oBAAoB,GAAG;AACzB,IAAI,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,OAAO,KAAK,CAAC;AACtD,IAAI,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAChD,IAAI,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,GAAG,eAAe,CAAC,IAAI,KAAK,CAAC;AAC9D,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,EAAE,EAAE;AACzC,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC;AAClE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,IAAI,WAAW,CAAC;AAC9C;AACA,IAAI,QAAQ,OAAO;AACnB,MAAM,KAAK,WAAW;AACtB,QAAQ,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACvD;AACA,MAAM,KAAK,OAAO;AAClB,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACrD;AACA,MAAM,KAAK,SAAS;AACpB,QAAQ,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACvD;AACA,MAAM,KAAK,MAAM;AACjB,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACpD;AACA,MAAM;AACN,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,8BAA8B,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;AACpF,QAAQ,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACvD,KAAK;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA,EAAE,MAAM,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE;AAC9C,IAAI,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;AACtD,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO;AAClC;AACA;AACA,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1D;AACA;AACA,IAAI,IAAI,IAAI,CAAC,wBAAwB,EAAE;AACvC,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,IAAI,UAAU,CAAC,CAAC;AACvE,MAAM,OAAO;AACb,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,IAAI,CAAC,qBAAqB,EAAE;AACpC,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC;AAChE,MAAM,OAAO;AACb,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;AACzD,EAAE,CAAC;AACH;AACA;AACA;AACA,EAAE,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE;AACtC,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACvD,IAAI,IAAI,CAAC,MAAM,EAAE;AACjB,MAAM,MAAM,CAAC,MAAM,CAAC,kEAAkE,CAAC,CAAC;AACxF,MAAM,OAAO,MAAM,CAAC,CAAC,CAAC;AACtB,IAAI,CAAC;AACL;AACA,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC;AACrB;AACA;AACA,IAAI,MAAM,OAAO,GAAG,MAAM;AAC1B,MAAM,MAAM,CAAC,mBAAmB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AACxD,MAAM,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACrD,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACnD,MAAM,IAAI,GAAG,KAAK,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACrD,IAAI,CAAC,CAAC;AACN;AACA,IAAI,MAAM,OAAO,GAAG,MAAM;AAC1B,MAAM,IAAI,IAAI,EAAE,OAAO;AACvB,MAAM,IAAI,GAAG,IAAI,CAAC;AAClB,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACjD;AACA;AACA;AACA,MAAM,OAAO,EAAE,CAAC;AAChB,IAAI,CAAC,CAAC;AACN;AACA,IAAI,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACtE,IAAI,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACnE,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClC,IAAI,OAAO,OAAO,CAAC;AACnB,EAAE,CAAC;AACH;AACA;AACA;AACA,EAAE,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE;AACxC,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACvD,IAAI,IAAI,CAAC,MAAM,EAAE;AACjB,MAAM,MAAM,CAAC,MAAM,CAAC,oEAAoE,CAAC,CAAC;AAC1F,MAAM,OAAO,MAAM,CAAC,CAAC,CAAC;AACtB,IAAI,CAAC;AACL;AACA,IAAI,IAAI,OAAO,oBAAoB,KAAK,WAAW,EAAE;AACrD;AACA,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACjD,MAAM,OAAO,MAAM,CAAC,CAAC,CAAC;AACtB,IAAI,CAAC;AACL;AACA,IAAI,MAAM,QAAQ,GAAG,IAAI,oBAAoB;AAC7C,MAAM,CAAC,OAAO,KAAK;AACnB,QAAQ,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;AACrC,UAAU,IAAI,KAAK,CAAC,cAAc,EAAE;AACpC,YAAY,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACvD,YAAY,OAAO,EAAE,CAAC;AACtB,YAAY,MAAM;AAClB,UAAU,CAAC;AACX,QAAQ,CAAC;AACT,MAAM,CAAC;AACP,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE;AAC7B,KAAK,CAAC;AACN;AACA,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC1C;AACA,IAAI,MAAM,OAAO,GAAG,MAAM;AAC1B,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;AAC5B,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACrC,IAAI,CAAC,CAAC;AACN;AACA,IAAI,OAAO,OAAO,CAAC;AACnB,EAAE,CAAC;AACH;AACA;AACA;AACA,EAAE,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE;AACrC,IAAI,IAAI,OAAO,CAAC;AAChB;AACA,IAAI,MAAM,KAAK,GAAG,MAAM;AACxB,MAAM,IAAI,CAAC,OAAO,EAAE,OAAO;AAC3B,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACnD,MAAM,IAAI,GAAG,KAAK,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACrD,IAAI,CAAC,CAAC;AACN;AACA,IAAI,MAAM,QAAQ,GAAG,MAAM;AAC3B,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACjD,MAAM,KAAK,EAAE,CAAC;AACd,IAAI,CAAC,CAAC;AACN;AACA,IAAI,IAAI,qBAAqB,IAAI,MAAM,EAAE;AACzC,MAAM,MAAM,EAAE,GAAG,mBAAmB,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAClE,MAAM,OAAO,GAAG,MAAM,EAAE,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3D,IAAI,CAAC,MAAM;AACX;AACA,MAAM,MAAM,EAAE,GAAG,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC5C,MAAM,OAAO,GAAG,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACrD,IAAI,CAAC;AACL;AACA,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClC,IAAI,OAAO,OAAO,CAAC;AACnB,EAAE,CAAC;AACH;AACA;AACA;AACA,EAAE,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE;AACxC,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7E,IAAI,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO;AACxC;AACA;AACA,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAChE;AACA;AACA,IAAI,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC;AACrD;AACA;AACA,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC;AACzC,MAAM,MAAM,EAAE,MAAM;AACpB,MAAM,IAAI,EAAE,OAAO;AACnB,MAAM,SAAS;AACf,KAAK,CAAC,CAAC;AACP;AACA;AACA,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;AACpC;AACA,IAAI,MAAM,CAAC,OAAO;AAClB,MAAM,CAAC,yCAAyC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3F,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC;AACjC,KAAK,CAAC;AACN,EAAE,CAAC;AACH;AACA,EAAE,wBAAwB,GAAG;AAC7B;AACA,IAAI,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACjC,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC;AACvC,IAAI,CAAC;AACL;AACA,IAAI,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACpD,IAAI,MAAM,CAAC,IAAI,GAAG,kBAAkB,CAAC;AACrC,IAAI,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAChE,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACtC;AACA,IAAI,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC;AACrC,EAAE,CAAC;AACH;AACA;AACA;AACA,EAAE,oBAAoB,CAAC,GAAG,EAAE;AAC5B,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO;AACzC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7B;AACA,IAAI,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAChD,IAAI,IAAI,CAAC,GAAG,GAAG,eAAe,CAAC;AAC/B,IAAI,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;AACpB,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACpC;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACzD,EAAE,CAAC;AACH;AACA;AACA;AACA,EAAE,eAAe,CAAC,GAAG,EAAE;AACvB,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO;AACzC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7B;AACA,IAAI,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAChD,IAAI,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC;AAC1B,IAAI,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;AACpB,IAAI,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC;AACvB,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACpC;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACpD,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,eAAe,CAAC,QAAQ,EAAE;AAClC,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB;AACA,IAAI,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;AACjC;AACA,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACrC,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;AAC5E,QAAQ,SAAS;AACjB,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACvC,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;AACzE,QAAQ,SAAS;AACjB,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAC3C,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;AACzE,QAAQ,SAAS;AACjB,MAAM,CAAC;AACP;AACA,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC3C,MAAM,IAAI,CAAC,GAAG,EAAE;AAChB,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,kBAAkB,EAAE,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;AACpF,QAAQ,SAAS;AACjB,MAAM,CAAC;AACP;AACA,MAAM,IAAI;AACV,QAAQ,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;AAC3D,QAAQ,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;AACpC,MAAM,CAAC,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,wCAAwC,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;AAC1F,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA,IAAI,OAAO,OAAO,CAAC;AACnB,EAAE,CAAC;AACH;AACA;AACA;AACA,EAAE,cAAc,CAAC,MAAM,EAAE;AACzB,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC;AAC7B,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,OAAO,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAC1E,IAAI,IAAI,MAAM,YAAY,OAAO,EAAE,OAAO,MAAM,CAAC;AACjD,IAAI,OAAO,IAAI,CAAC;AAChB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,WAAW,CAAC,OAAO,GAAG,EAAE,EAAE;AAClC,IAAI,MAAM,aAAa,GAAG,EAAE,CAAC;AAC7B,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACzC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACtE,QAAQ,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA,IAAI,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;AACpC,MAAM,MAAM,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;AACzD,MAAM,OAAO;AACb,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,8BAA8B,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAChF,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;AACjD,EAAE,CAAC;AACH;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO;AACX,MAAM,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;AACtC,MAAM,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI;AAC3C,MAAM,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAC7C,MAAM,yBAAyB,EAAE,IAAI,CAAC,wBAAwB;AAC9D,MAAM,sBAAsB,EAAE,IAAI,CAAC,qBAAqB;AACxD,MAAM,gBAAgB,EAAE,IAAI,CAAC,iBAAiB;AAC9C,KAAK,CAAC;AACN,EAAE,CAAC;AACH;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ;AACA,IAAI,KAAK,MAAM,GAAG,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;AAChD,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;AAC5B,IAAI,CAAC;AACL,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;AAC5B;AACA;AACA,IAAI,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE;AAC3C,MAAM,OAAO,EAAE,CAAC;AAChB,IAAI,CAAC;AACL,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACzB;AACA;AACA,IAAI,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACjC,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC;AACvC,MAAM,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;AACrC,IAAI,CAAC;AACL;AACA,IAAI,IAAI,CAAC,iBAAiB,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AAC7D,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;AAC5B;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;AAC9C,EAAE,CAAC;AACH;;ACxaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA,MAAM,aAAa,GAAG,cAAc,CAAC;AACrC;AACO,MAAM,WAAW,CAAC;AACzB,EAAE,WAAW,CAAC,MAAM,GAAG,EAAE,EAAE;AAC3B;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;AAChC;AACA;AACA,IAAI,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC;AACvD,IAAI,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC;AACvD,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAClC;AACA;AACA;AACA;AACA,IAAI,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE;AACtC,MAAM,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AACrC,IAAI,CAAC,MAAM;AACX,MAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC/C,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;AACvB,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC/B,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,GAAG;AACtB,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,OAAO,KAAK,CAAC;AACpD;AACA,IAAI,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,QAAQ,IAAI,EAAE,CAAC;AACrD,IAAI,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;AAC7C;AACA;AACA,IAAI;AACJ,MAAM,QAAQ,KAAK,WAAW;AAC9B,MAAM,QAAQ,KAAK,WAAW;AAC9B,MAAM,QAAQ,KAAK,SAAS;AAC5B,MAAM,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACjC,OAAO,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,CAAC;AACtD,MAAM;AACN,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,gBAAgB,CAAC,GAAG,EAAE;AACxB;AACA,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI,CAAC;AACvD;AACA,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;AAChD,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO,KAAK,CAAC;AAChC;AACA,IAAI,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,eAAe,EAAE;AAChD,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,OAAO,IAAI,CAAC;AAC5D,IAAI,CAAC;AACL;AACA,IAAI,OAAO,KAAK,CAAC;AACjB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,gBAAgB,CAAC,GAAG,EAAE;AACxB,IAAI,IAAI;AACR;AACA,MAAM,IAAI,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,WAAW,CAAC;AAC5D;AACA;AACA,MAAM,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AACrE,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;AACzC,MAAM,OAAO,MAAM,CAAC,QAAQ,CAAC;AAC7B,IAAI,CAAC,CAAC,MAAM;AACZ,MAAM,OAAO,IAAI,CAAC;AAClB,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE;AAClC;AACA,IAAI,IAAI,QAAQ,KAAK,OAAO,EAAE,OAAO,IAAI,CAAC;AAC1C;AACA;AACA,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AAClC,MAAM,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC1C,MAAM,OAAO,QAAQ,KAAK,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC;AACpE,IAAI,CAAC;AACL;AACA,IAAI,OAAO,KAAK,CAAC;AACjB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,GAAG;AACtB,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;AAC5B;AACA,IAAI,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,OAAO,IAAI,CAAC,UAAU,CAAC;AAChE;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACxB,MAAM,MAAM,CAAC,OAAO,CAAC,0DAA0D,CAAC,CAAC;AACjF,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC;AAC7B,IAAI,CAAC;AACL;AACA,IAAI,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC;AACpC,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC,UAAU,CAAC;AACzC;AACA;AACA,IAAI,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACrC;AACA,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AAC9B,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAClC;AACA,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,SAAS;AACvD;AACA;AACA,MAAM,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC3C,MAAM,IAAI,OAAO,KAAK,EAAE,EAAE,SAAS;AACnC;AACA,MAAM,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9E,MAAM,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACxD;AACA,MAAM,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE,SAAS;AACrC;AACA;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;AAClC,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,wCAAwC,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACrF,QAAQ,SAAS;AACjB,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE;AACvC,QAAQ,MAAM,CAAC,MAAM;AACrB,UAAU,CAAC,wBAAwB,EAAE,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,IAAI,CAAC;AACvE,UAAU,CAAC,8BAA8B,CAAC;AAC1C,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACzD,SAAS,CAAC;AACV,QAAQ,SAAS;AACjB,MAAM,CAAC;AACP;AACA,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACxC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,+BAA+B,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3E,IAAI,CAAC;AACL;AACA,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE;AAClC,MAAM,MAAM,CAAC,MAAM;AACnB,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC;AACpE,QAAQ,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9C,OAAO,CAAC;AACR,IAAI,CAAC;AACL;AACA,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC;AAC3B,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,IAAI,EAAE;AACpB,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,OAAO,IAAI,CAAC;AAClE;AACA,IAAI,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AAC5B,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxD,MAAM,IAAI,WAAW,EAAE;AACvB,QAAQ,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC;AACnC,QAAQ,GAAG,CAAC,GAAG,GAAG,WAAW,CAAC;AAC9B,QAAQ,MAAM,CAAC,MAAM;AACrB,UAAU,CAAC,eAAe,EAAE,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;AACxF,SAAS,CAAC;AACV,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE;AACzD,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;AACpC,IAAI,CAAC;AACL;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,OAAO,EAAE;AAC1B,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;AAChD,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE;AAClC,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE;AAC1B,MAAM,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;AACpE,IAAI,CAAC;AACL;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACxB,MAAM,MAAM,IAAI,KAAK;AACrB,QAAQ,4DAA4D;AACpE,QAAQ,uDAAuD;AAC/D,OAAO,CAAC;AACR,IAAI,CAAC;AACL;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;AAChC,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3D,IAAI,CAAC;AACL;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE;AACrC,MAAM,MAAM,IAAI,KAAK;AACrB,QAAQ,CAAC,mCAAmC,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AAC7E,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACvD,OAAO,CAAC;AACR,IAAI,CAAC;AACL;AACA,IAAI,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;AAC3C,IAAI,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,GAAG,CAAC;AACrC;AACA;AACA,IAAI,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACzC,MAAM,QAAQ,CAAC,MAAM;AACrB,QAAQ,CAAC,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;AAC3F,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACtC;AACA;AACA,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE;AAC7B,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;AACpC,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,4BAA4B,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7F,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,CAAC,OAAO,EAAE;AAClB;AACA,IAAI,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACzC,MAAM,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;AACzE,IAAI,CAAC;AACL;AACA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACpC;AACA;AACA,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE;AAC7B,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE;AACtC,QAAQ,IAAI,CAAC,wBAAwB,EAAE,CAAC;AACxC,MAAM,CAAC,MAAM;AACb,QAAQ,IAAI,CAAC,sBAAsB,EAAE,CAAC;AACtC,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,gCAAgC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAChE,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE;AACvD,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC3B,IAAI,CAAC;AACL;AACA,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;AACpC;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,qCAAqC,CAAC,CAAC;AACzD,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,GAAG;AACX,IAAI,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC/C,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,GAAG;AACjB,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC;AACpC,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,GAAG;AACd,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC;AACzB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,MAAM,GAAG,EAAE,EAAE;AACzB,IAAI,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE;AACtC,MAAM,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AACrC,IAAI,CAAC;AACL,IAAI,IAAI,MAAM,CAAC,cAAc,EAAE;AAC/B,MAAM,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC;AACnD,IAAI,CAAC;AACL,IAAI,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE;AAC5C,MAAM,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;AACjD,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;AACvB,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC/B,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC7B,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,sBAAsB,GAAG;AAC3B,IAAI,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,OAAO;AAChD;AACA;AACA,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;AACpC;AACA,IAAI,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACpD,IAAI,SAAS,CAAC,EAAE,GAAG,uBAAuB,CAAC;AAC3C;AACA,IAAI,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;AACvD,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;AACnB;AACA,IAAI,SAAS,CAAC,WAAW,GAAG,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC,CAAC;AAClE;AACA,IAAI,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG;AAC9B,MAAM,iBAAiB;AACvB,MAAM,WAAW;AACjB,MAAM,SAAS;AACf,MAAM,UAAU;AAChB,MAAM,qBAAqB;AAC3B,MAAM,qBAAqB;AAC3B,MAAM,aAAa;AACnB,MAAM,wBAAwB;AAC9B,MAAM,iBAAiB;AACvB,MAAM,mBAAmB;AACzB,MAAM,mBAAmB;AACzB,MAAM,oBAAoB;AAC1B,MAAM,iBAAiB;AACvB,MAAM,mBAAmB;AACzB,MAAM,wCAAwC;AAC9C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChB;AACA;AACA,IAAI,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM;AAC9C,MAAM,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AACvC,IAAI,CAAC,CAAC,CAAC;AACP;AACA;AACA,IAAI,SAAS,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,CAAC,KAAK;AAClD,MAAM,CAAC,CAAC,cAAc,EAAE,CAAC;AACzB,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;AACtB,IAAI,CAAC,CAAC,CAAC;AACP;AACA,IAAI,SAAS,CAAC,KAAK,GAAG,qDAAqD,CAAC;AAC5E;AACA,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AACzC,IAAI,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;AACvC,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,wBAAwB,GAAG;AAC7B,IAAI,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAChC,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;AACtC,MAAM,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AACpC,IAAI,CAAC;AACL;AACA,IAAI,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACzC,MAAM,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC;AACxE,MAAM,IAAI,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;AACtC,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA,EAAE,WAAW,CAAC,GAAG,EAAE;AACnB;AACA,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACzF,MAAM,OAAO,IAAI,CAAC;AAClB,IAAI,CAAC;AACL;AACA,IAAI,IAAI,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AACvC,MAAM,OAAO,IAAI,CAAC;AAClB,IAAI,CAAC;AACL,IAAI,OAAO,KAAK,CAAC;AACjB,EAAE,CAAC;AACH;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO;AACX,MAAM,OAAO,EAAE,IAAI,CAAC,QAAQ;AAC5B,MAAM,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI;AAC3C,MAAM,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE;AAC9B,MAAM,cAAc,EAAE,IAAI,CAAC,eAAe;AAC1C,MAAM,aAAa,EAAE,IAAI,CAAC,cAAc;AACxC,MAAM,WAAW,EAAE,IAAI,CAAC,iBAAiB,EAAE,GAAG,aAAa,GAAG,YAAY;AAC1E,KAAK,CAAC;AACN,EAAE,CAAC;AACH;;AC7fA;AACA;AACA;AACA;AACA;AAmBA;AACO,MAAM,MAAM,CAAC;AACpB,EAAE,WAAW,CAAC,OAAO,GAAG,EAAE,EAAE;AAC5B;AACA,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;AAC1B,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;AACjC,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;AAC/B,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;AAC7B,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;AAC5B,IAAI,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,EAAE,CAAC;AACtC,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,EAAE,CAAC;AACvC,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;AACpC,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;AACpC;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;AAChC;AACA;AACA,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;AACjC,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,SAAS,EAAE,CAAC;AACnC,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,UAAU,EAAE,CAAC;AACrC,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACvB;AACA;AACA;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AAC3B,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC/B,IAAI,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;AACtE,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,UAAU,EAAE,CAAC;AACrC,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,aAAa,EAAE,CAAC;AAC3C;AACA;AACA,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;AACjD,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAClD,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;AACnD,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAC5C,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;AAC3C,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,WAAW,EAAE,CAAC;AACvC;AACA;AACA,IAAI,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;AAC/B;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,qDAAqD,CAAC,CAAC;AACzE,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE;AACrB,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE;AAC5B,MAAM,MAAM,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC;AACrD,MAAM,OAAO;AACb,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC;AACnD;AACA;AACA,IAAI,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,cAAc,KAAK,KAAK,CAAC;AAC3D;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,uBAAuB,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACjH;AACA,IAAI,IAAI;AACR;AACA,MAAM,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAClF,MAAM,IAAI,gBAAgB,CAAC,SAAS,EAAE;AACtC,QAAQ,MAAM,CAAC,MAAM,CAAC,6CAA6C,CAAC,CAAC;AACrE,QAAQ,OAAO;AACf,MAAM,CAAC;AACP;AACA;AACA,MAAM,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AACjE;AACA;AACA,MAAM,IAAI,MAAM,CAAC,SAAS,EAAE;AAC5B,QAAQ,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACnD,MAAM,CAAC;AACP,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;AACrC,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AAC/B,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACvC;AACA;AACA,MAAM,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE;AACpC,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AAC1C,MAAM,CAAC;AACP;AACA;AACA,MAAM,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AACvD;AACA,MAAM,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAChC;AACA;AACA,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AACxD;AACA;AACA,MAAM,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAChE;AACA,MAAM,MAAM,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC;AAC1D,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,OAAO,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;AACtD;AACA;AACA,MAAM,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5E;AACA,MAAM,MAAM,KAAK,CAAC;AAClB,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,WAAW,CAAC,SAAS,EAAE;AAC/B,IAAI,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;AACpC;AACA,IAAI,IAAI;AACR,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,iBAAiB,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7D;AACA;AACA,MAAM,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzD,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AAC7C;AACA;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;AAC1B,QAAQ,GAAG,SAAS;AACpB,QAAQ,QAAQ,EAAE,YAAY;AAC9B,QAAQ,MAAM,EAAE,YAAY;AAC5B,OAAO,CAAC,CAAC;AACT;AACA,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;AAC5D,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC/D,MAAM,MAAM,KAAK,CAAC;AAClB,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE;AAC7B,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AAC1B,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,sCAAsC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1E,IAAI,CAAC;AACL;AACA,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAC7C;AACA;AACA;AACA,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACpD,IAAI,IAAI,MAAM,EAAE;AAChB,MAAM,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACjC,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC1C,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;AACvB,IAAI,CAAC;AACL;AACA;AACA,IAAI,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,cAAc,EAAE;AAClD,MAAM,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE;AAChD,KAAK,CAAC,CAAC;AACP,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAChC;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACxD,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,KAAK,CAAC,OAAO,EAAE,iBAAiB,EAAE;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACvD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;AAC/C,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3E;AACA,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAC5C,MAAM,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AACvD,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC5C,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,sCAAsC,CAAC,CAAC,CAAC;AACzE,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACnC,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACjD,MAAM,IAAI,QAAQ,CAAC,iBAAiB,KAAK,iBAAiB,EAAE;AAC5D,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAC7E,QAAQ,OAAO;AACf,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,yCAAyC,CAAC,CAAC,CAAC;AAC5E,MAAM,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACvD,IAAI,CAAC;AACL;AACA;AACA,IAAI,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACjD,IAAI,IAAI,WAAW,EAAE;AACrB,MAAM,IAAI,WAAW,CAAC,iBAAiB,KAAK,iBAAiB,EAAE;AAC/D;AACA,QAAQ,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxC,MAAM,CAAC;AACP;AACA,MAAM,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AACzC,IAAI,CAAC;AACL;AACA;AACA,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC;AAC/E,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AACtD;AACA,IAAI,IAAI;AACR,MAAM,OAAO,MAAM,YAAY,CAAC;AAChC,IAAI,CAAC,SAAS;AACd,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC7C,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,EAAE,OAAO,GAAG,CAAC,EAAE;AACnE,IAAI,MAAM,WAAW,GAAG,CAAC,CAAC;AAC1B;AACA,IAAI,IAAI;AACR;AACA,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACtD;AACA,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,iBAAiB,CAAC,UAAU,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7F;AACA;AACA,MAAM,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,CAAC;AAC/G,MAAM,IAAI,gBAAgB,CAAC,SAAS,EAAE;AACtC,QAAQ,MAAM,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC;AAC5D,QAAQ,OAAO;AACf,MAAM,CAAC;AACP;AACA;AACA,MAAM,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;AAChH,MAAM,IAAI,iBAAiB,KAAK,KAAK,EAAE;AACvC,QAAQ,MAAM,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;AACpE,QAAQ,OAAO;AACf,MAAM,CAAC;AACP;AACA;AACA,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACzC,MAAM,IAAI,CAAC,GAAG,EAAE;AAChB,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,sCAAsC,CAAC,CAAC,CAAC;AAChF,MAAM,CAAC;AACP;AACA;AACA,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;AAClE,MAAM,IAAI,CAAC,SAAS,EAAE;AACtB,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,qBAAqB,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;AACrE,MAAM,CAAC;AACP;AACA;AACA,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE;AAC9D,QAAQ,QAAQ,EAAE,GAAG,CAAC,QAAQ;AAC9B,QAAQ,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,SAAS;AAC1C,QAAQ,MAAM,EAAE,GAAG,CAAC,GAAG;AACvB,OAAO,CAAC,CAAC;AACT;AACA;AACA,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,CAAC;AACrF;AACA;AACA,MAAM,IAAI,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACpD,MAAM,IAAI,CAAC,SAAS,EAAE;AACtB;AACA,QAAQ,MAAM,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AACvD,QAAQ,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAClD;AACA,QAAQ,IAAI,CAAC,SAAS,EAAE;AACxB,UAAU,MAAM,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,kCAAkC,CAAC,CAAC,CAAC;AAC9E,QAAQ,CAAC;AACT,MAAM,CAAC;AACP;AACA;AACA,MAAM,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;AAC5H,MAAM,IAAI,iBAAiB,CAAC,SAAS,EAAE;AACvC,QAAQ,MAAM,CAAC,MAAM,CAAC,qCAAqC,CAAC,CAAC;AAC7D,QAAQ,OAAO;AACf,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,OAAO,CAAC,WAAW,EAAE;AAC/B,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,mCAAmC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3E,QAAQ,MAAM,OAAO,CAAC,WAAW,CAAC;AAClC,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACtD,MAAM,CAAC;AACP;AACA;AACA,MAAM,MAAM,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAC/C;AACA;AACA,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE;AAChC,QAAQ,GAAG;AACX,QAAQ,OAAO;AACf,QAAQ,SAAS;AACjB,QAAQ,SAAS,EAAE,OAAO,CAAC,SAAS;AACpC,QAAQ,aAAa,EAAE,SAAS;AAChC,QAAQ,iBAAiB;AACzB,QAAQ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AAC7B,QAAQ,KAAK,EAAE,QAAQ;AACvB,OAAO,CAAC,CAAC;AACT;AACA;AACA,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACtE;AACA;AACA,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;AACjG;AACA;AACA,MAAM,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC,CAAC;AAChG;AACA;AACA,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AACtF;AACA,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,yBAAyB,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACpF;AACA,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,OAAO,GAAG,CAAC,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACnF;AACA;AACA,MAAM,IAAI;AACV,QAAQ,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAC3F,UAAU,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACzD,UAAU,IAAI,EAAE,IAAI,EAAE,CAAC,YAAY,EAAE;AACrC,YAAY,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;AACzC,UAAU,CAAC;AACX,UAAU,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACjD,UAAU,MAAM,CAAC,OAAO,CAAC,CAAC,2CAA2C,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAClF,QAAQ,CAAC;AACT,MAAM,CAAC,CAAC,OAAO,YAAY,EAAE;AAC7B,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;AAC9E,MAAM,CAAC;AACP;AACA;AACA,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE;AACjE,QAAQ,OAAO;AACf,QAAQ,iBAAiB;AACzB,QAAQ,UAAU,EAAE,OAAO;AAC3B,QAAQ,SAAS,EAAE,iBAAiB;AACpC,OAAO,CAAC,CAAC;AACT;AACA;AACA,MAAM,IAAI,WAAW,CAAC,SAAS,EAAE;AACjC,QAAQ,MAAM,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;AAC5D,QAAQ,OAAO;AACf,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,OAAO,GAAG,WAAW,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,OAAO,EAAE;AACvE,QAAQ,MAAM,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;AAC1D;AACA;AACA,QAAQ,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;AAC/D;AACA;AACA,QAAQ,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,IAAI,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChF;AACA;AACA,QAAQ,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;AACrF,MAAM,CAAC;AACP;AACA;AACA,MAAM,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AACtF;AACA;AACA,MAAM,MAAM,KAAK,CAAC;AAClB,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,eAAe,CAAC,OAAO,EAAE,iBAAiB,EAAE;AACpD,IAAI,IAAI;AACR,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,+BAA+B,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AACrE;AACA;AACA,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACpC,QAAQ,IAAI;AACZ,UAAU,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAC7C,QAAQ,CAAC,CAAC,OAAO,WAAW,EAAE;AAC9B,UAAU,MAAM,CAAC,MAAM,CAAC,4BAA4B,EAAE,WAAW,CAAC,CAAC;AACnE,QAAQ,CAAC;AACT,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACrC,QAAQ,IAAI;AACZ,UAAU,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACvD,QAAQ,CAAC,CAAC,OAAO,YAAY,EAAE;AAC/B,UAAU,MAAM,CAAC,MAAM,CAAC,gCAAgC,EAAE,YAAY,CAAC,CAAC;AACxE,QAAQ,CAAC;AACT,MAAM,CAAC;AACP;AACA;AACA,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;AAClE,MAAM,IAAI,SAAS,EAAE;AACrB;AACA,QAAQ,IAAI,SAAS,CAAC,UAAU,EAAE;AAClC,UAAU,IAAI;AACd;AACA,YAAY,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC7E,YAAY,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI;AAC5C,cAAc,IAAI;AAClB,gBAAgB,KAAK,CAAC,MAAM,EAAE,CAAC;AAC/B,cAAc,CAAC,CAAC,OAAO,WAAW,EAAE;AACpC,gBAAgB,MAAM,CAAC,MAAM,CAAC,gCAAgC,EAAE,WAAW,CAAC,CAAC;AAC7E,cAAc,CAAC;AACf,YAAY,CAAC,CAAC,CAAC;AACf,UAAU,CAAC,CAAC,OAAO,WAAW,EAAE;AAChC,YAAY,MAAM,CAAC,MAAM,CAAC,6BAA6B,EAAE,WAAW,CAAC,CAAC;AACtE,UAAU,CAAC;AACX,QAAQ,CAAC;AACT;AACA;AACA,QAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACpE,UAAU,IAAI;AACd,YAAY,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC;AACrC,UAAU,CAAC,CAAC,OAAO,SAAS,EAAE;AAC9B,YAAY,MAAM,CAAC,MAAM,CAAC,qCAAqC,EAAE,SAAS,CAAC,CAAC;AAC5E,UAAU,CAAC;AACX,QAAQ,CAAC;AACT;AACA;AACA,QAAQ,SAAS,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;AACjD,QAAQ,SAAS,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC;AACxD,QAAQ,SAAS,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;AAC9C,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACvC;AACA;AACA,MAAM,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAClD,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC/C,MAAM,CAAC;AACP;AACA,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,mCAAmC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACtE;AACA,IAAI,CAAC,CAAC,OAAO,YAAY,EAAE;AAC3B,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,gCAAgC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;AACjF;AACA;AACA,MAAM,IAAI;AACV,QAAQ,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;AACpE,QAAQ,IAAI,SAAS,EAAE;AACvB,UAAU,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AAC3C,UAAU,UAAU,CAAC,MAAM;AAC3B,YAAY,IAAI,SAAS,EAAE;AAC3B,cAAc,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;AAC3C,YAAY,CAAC;AACb,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC;AAClB,QAAQ,CAAC;AACT,MAAM,CAAC,CAAC,OAAO,cAAc,EAAE;AAC/B,QAAQ,MAAM,CAAC,OAAO,CAAC,2BAA2B,EAAE,cAAc,CAAC,CAAC;AACpE,MAAM,CAAC;AACP,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,qBAAqB,CAAC,GAAG,EAAE,OAAO,EAAE;AAC5C,IAAI,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,YAAY,IAAI,QAAQ,CAAC;AACvE;AACA,IAAI,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC;AAC3C,IAAI,OAAO,CAAC,WAAW,GAAG,aAAa,CAAC;AACxC;AACA,IAAI,IAAI,aAAa,KAAK,QAAQ,EAAE;AACpC,MAAM,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC3C,IAAI,CAAC,MAAM,IAAI,aAAa,KAAK,MAAM,EAAE;AACzC,MAAM,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AACzC,IAAI,CAAC,MAAM;AACX,MAAM,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC3C,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE;AAC7B,IAAI,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE,CAAC,YAAY,KAAK,UAAU,IAAI,CAAC,OAAO,EAAE,OAAO;AACzE,IAAI,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;AAC5C,EAAE,CAAC;AACH;AACA,EAAE,cAAc,CAAC,OAAO,EAAE;AAC1B,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC1E,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC;AAC9B,IAAI,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;AAC/B,IAAI,MAAM,UAAU,GAAG,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,cAAc,IAAI,QAAQ,CAAC;AACvE,IAAI,MAAM,cAAc;AACxB,MAAM,UAAU,KAAK,QAAQ,GAAG,QAAQ;AACxC,MAAM,UAAU,KAAK,MAAM,GAAG,YAAY;AAC1C,MAAM,MAAM,CAAC;AACb,IAAI,OAAO;AACX,MAAM,aAAa,EAAE,EAAE,CAAC,cAAc,IAAI,QAAQ;AAClD,MAAM,UAAU;AAChB,MAAM,cAAc;AACpB,MAAM,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AACxC,KAAK,CAAC;AACN,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,yBAAyB,GAAG;AACpC,IAAI,IAAI,IAAI,CAAC,gBAAgB,EAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC;AAC5D,IAAI,MAAM,GAAG,GAAG,MAAM,OAAO,6BAAwB,CAAC,CAAC;AACvD,IAAI,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,eAAe,CAAC;AAChD,IAAI,OAAO,IAAI,CAAC,gBAAgB,CAAC;AACjC,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,eAAe,GAAG;AAC1B,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAC1B,MAAM,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,OAAO,0BAAqB,CAAC,CAAC;AACnE,MAAM,IAAI,CAAC,UAAU,GAAG,IAAI,YAAY,EAAE,CAAC;AAC3C,IAAI,CAAC;AACL,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC9B,MAAM,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,OAAO,8BAAyB,CAAC,CAAC;AAC3E,MAAM,IAAI,CAAC,cAAc,GAAG,IAAI,gBAAgB,EAAE,CAAC;AACnD,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE;AAClC,IAAI,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;AACxD,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,4BAA4B,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AAC/D;AACA,IAAI,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;AACxC,IAAI,IAAI,SAAS,EAAE,WAAW,EAAE;AAChC,MAAM,SAAS,CAAC,WAAW,EAAE,CAAC;AAC9B,IAAI,CAAC;AACL;AACA,IAAI,IAAI;AACR,MAAM,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;AACnD,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,2BAA2B,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/D,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACrE,MAAM,MAAM,KAAK,CAAC;AAClB,IAAI,CAAC,SAAS;AACd,MAAM,IAAI,SAAS,EAAE,aAAa,EAAE;AACpC,QAAQ,SAAS,CAAC,aAAa,EAAE,CAAC;AAClC,MAAM,CAAC;AACP,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE;AAClC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,iBAAiB,EAAE,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;AACtE;AACA;AACA,IAAI,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC;AACjE,IAAI,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACtD,IAAI,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;AAC3E,IAAI,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC;AAC1C;AACA,IAAI,IAAI;AACR;AACA,MAAM,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;AAC1D,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,qCAAqC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AAC1E;AACA;AACA,MAAM,MAAM,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;AAClD,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,6BAA6B,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjE;AACA,IAAI,CAAC,CAAC,OAAO,WAAW,EAAE;AAC1B;AACA;AACA,MAAM,MAAM,eAAe;AAC3B,QAAQ,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC;AAC3D;AACA;AACA,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC;AAC9B,MAAM,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;AACnC;AACA,MAAM,IAAI,CAAC,eAAe,EAAE;AAC5B;AACA,QAAQ,MAAM,IAAI,KAAK;AACvB,UAAU,CAAC,mCAAmC,EAAE,GAAG,CAAC,IAAI,CAAC,mCAAmC,CAAC;AAC7F,UAAU,CAAC,gBAAgB,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;AACpD,UAAU,CAAC,4EAA4E,CAAC;AACxF,UAAU,CAAC,6EAA6E,CAAC;AACzF,SAAS,CAAC;AACV,MAAM,CAAC;AACP;AACA,MAAM,MAAM,CAAC,MAAM;AACnB,QAAQ,CAAC,kCAAkC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;AACjF,QAAQ,CAAC,iEAAiE,CAAC;AAC3E,QAAQ,CAAC,kFAAkF,CAAC;AAC5F,QAAQ,CAAC,yDAAyD,CAAC;AACnE,QAAQ,CAAC,0EAA0E,CAAC;AACpF,OAAO,CAAC;AACR;AACA;AACA,MAAM,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC;AACnC,MAAM,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;AACzC;AACA;AACA,MAAM,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AACzC,MAAM,OAAO;AACb,IAAI,CAAC;AACL;AACA;AACA,IAAI,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAClD;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;AAC5E,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE;AAChC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,eAAe,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACjE;AACA,IAAI,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;AACxC,IAAI,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;AACvC;AACA,IAAI,IAAI,CAAC,KAAK,EAAE;AAChB,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,2BAA2B,EAAE,GAAG,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;AAClG,IAAI,CAAC;AACL;AACA;AACA,IAAI,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;AACjC;AACA;AACA,IAAI,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1E;AACA;AACA,IAAI,IAAI,MAAM,CAAC,GAAG,EAAE;AACpB,MAAM,OAAO,CAAC,SAAS,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC;AAC/C,IAAI,CAAC;AACL;AACA;AACA,IAAI,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC;AAChE;AACA,IAAI,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;AAChD,MAAM,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACpD,MAAM,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC;AAClC,MAAM,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACrC,IAAI,CAAC;AACL;AACA,IAAI,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;AAC/C,MAAM,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAClD,MAAM,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC;AAC9B,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACvB,MAAM,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACpC,IAAI,CAAC;AACL;AACA;AACA,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB,IAAI,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;AACjD,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;AAChC,IAAI,CAAC;AACL,IAAI,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE;AAC/C,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;AAC5B,IAAI,CAAC;AACL;AACA,IAAI,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACnE,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,4BAA4B,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC9D;AACA;AACA,IAAI,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAChD;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;AAC/D,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,KAAK,EAAE;AACrD,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;AAChE;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACtD,IAAI,IAAI,QAAQ,EAAE,OAAO,QAAQ,CAAC,OAAO,CAAC;AAC1C;AACA,IAAI,IAAI,SAAS,CAAC;AAClB,IAAI,IAAI,QAAQ,CAAC;AACjB,IAAI,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AACrD,MAAM,SAAS,GAAG,OAAO,CAAC;AAC1B,MAAM,QAAQ,GAAG,MAAM,CAAC;AACxB,IAAI,CAAC,CAAC,CAAC;AACP;AACA,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM;AACnC,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;AAC/C,QAAQ,QAAQ,CAAC,IAAI,KAAK;AAC1B,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,+CAA+C,EAAE,WAAW,CAAC,KAAK,CAAC;AACvG,UAAU,CAAC,4CAA4C,EAAE,OAAO,CAAC,sBAAsB,CAAC;AACxF,SAAS,CAAC,CAAC;AACX,MAAM,CAAC;AACP,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC;AACpB;AACA,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AAC/F,IAAI,OAAO,OAAO,CAAC;AACnB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAmB,CAAC,OAAO,EAAE;AAC/B,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACpD,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO;AACxB,IAAI,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/B,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACxC,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,iBAAiB,CAAC,GAAG,EAAE;AAC/B,IAAI,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,EAAE,KAAK,IAAI,SAAS,CAAC;AACvD,IAAI,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC/C;AACA;AACA;AACA,IAAI,MAAM,eAAe,GAAG,0CAA0C,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACvF;AACA,IAAI,IAAI,eAAe,EAAE;AACzB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,iCAAiC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AACtE;AACA,MAAM,MAAM,UAAU,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;AACnD,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;AACzD,MAAM,OAAO,UAAU,CAAC;AACxB,IAAI,CAAC;AACL;AACA;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;AAChD,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACrD,IAAI,IAAI,MAAM,EAAE;AAChB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,+BAA+B,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAC9E,MAAM,OAAO,MAAM,CAAC;AACpB,IAAI,CAAC;AACL;AACA;AACA,IAAI,MAAM,cAAc,GAAG;AAC3B,MAAM,CAAC,EAAE,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACnC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAC/B,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACpC,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACtC,MAAM,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACrC,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACtC,MAAM,CAAC,EAAE,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACnC,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAClC,KAAK,CAAC;AACN;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,mBAAmB,EAAE,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;AAC9E;AACA;AACA;AACA;AACA,IAAI,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG;AACrC,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;AAC1B,QAAQ,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AAC5B,WAAW,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AACtC,WAAW,KAAK,CAAC,MAAM,IAAI,CAAC;AAC5B,OAAO;AACP,KAAK,CAAC;AACN;AACA,IAAI,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;AACnD,IAAI,IAAI,QAAQ,EAAE;AAClB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,4BAA4B,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AAChE,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAClD,MAAM,OAAO,QAAQ,CAAC;AACtB,IAAI,CAAC;AACL;AACA;AACA,IAAI,MAAM,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;AAC3C,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,4CAA4C,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;AACjF,IAAI,OAAO,YAAY,CAAC;AACxB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,YAAY,CAAC,GAAG,EAAE;AAC1B,IAAI,IAAI;AACR,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7C;AACA,MAAM,IAAI,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;AACtC,QAAQ,MAAM,EAAE,MAAM;AACtB,QAAQ,KAAK,EAAE,UAAU;AACzB,QAAQ,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;AACzC,OAAO,CAAC,CAAC;AACT;AACA;AACA;AACA,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;AAC9D,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACtG,QAAQ,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;AACpC,UAAU,MAAM,EAAE,KAAK;AACvB,UAAU,KAAK,EAAE,UAAU;AAC3B,UAAU,OAAO,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;AAC3C,UAAU,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;AAC3C,SAAS,CAAC,CAAC;AACX,MAAM,CAAC;AACP;AACA,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;AACnD,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,8BAA8B,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACnF,QAAQ,OAAO,KAAK,CAAC;AACrB,MAAM,CAAC;AACP;AACA,MAAM,MAAM,WAAW,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC;AACrF;AACA;AACA;AACA,MAAM,IAAI,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;AAC/C,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,iDAAiD,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAClF,QAAQ,OAAO,KAAK,CAAC;AACrB,MAAM,CAAC;AACP;AACA;AACA;AACA,MAAM,MAAM,YAAY;AACxB,QAAQ,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC;AAC1C,QAAQ,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACtC,QAAQ,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC;AAC1C,QAAQ,WAAW,KAAK,EAAE;AAC1B,QAAQ,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC3B,QAAQ,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC7B;AACA,MAAM,IAAI,CAAC,YAAY,EAAE;AACzB,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,8CAA8C,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAChG,QAAQ,OAAO,KAAK,CAAC;AACrB,MAAM,CAAC;AACP;AACA,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3D,MAAM,OAAO,IAAI,CAAC;AAClB;AACA,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB;AACA,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,2BAA2B,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC5E,MAAM,OAAO,KAAK,CAAC;AACnB,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE;AACzC;AACA,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACvC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAC1D,MAAM,OAAO;AACb,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,mCAAmC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACpE;AACA;AACA;AACA,IAAI,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACjE;AACA,IAAI,IAAI;AACR,MAAM,MAAM,0BAA0B,SAAS,CAAC,CAAC;AACjD,IAAI,CAAC,CAAC,OAAO,SAAS,EAAE;AACxB,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AACxC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AACzE,MAAM,MAAM,SAAS,CAAC;AACtB,IAAI,CAAC;AACL;AACA,IAAI,MAAM,aAAa,CAAC;AACxB,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,gDAAgD,CAAC,CAAC,CAAC;AACrF,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,EAAE,EAAE;AACvC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAC5C;AACA,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC9C,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB;AACA,MAAM,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACrD,QAAQ,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACxC,QAAQ,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAClD,MAAM,CAAC;AACP,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;AAClD,MAAM,OAAO;AACb,IAAI,CAAC;AACL;AACA;AACA,IAAI,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK;AACnC,QAAQ,KAAK;AACb,SAAS,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,SAAS,IAAI,KAAK,CAAC,CAAC;AAC/D;AACA,IAAI,IAAI,SAAS,EAAE;AACnB,MAAM,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtC,IAAI,CAAC;AACL;AACA;AACA,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE;AACvB,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACtC,MAAM,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAC9C,QAAQ,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AACzD,QAAQ,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC9C,MAAM,CAAC;AACP,MAAM,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC1D,IAAI,CAAC;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACnD,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC;AAC1B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACpD,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACjE;AACA,IAAI,IAAI,IAAI,GAAG,CAAC,EAAE;AAClB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAChF,MAAM,OAAO;AACb,IAAI,CAAC;AACL;AACA,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAC5C,MAAM,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AACvD,IAAI,CAAC;AACL;AACA,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,YAAY;AAC9D,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC5C;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO;AAC1D;AACA,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,OAAO,EAAE;AAC9E,QAAQ,IAAI;AACZ,UAAU,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACvD,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC1C,QAAQ,CAAC,CAAC,OAAO,KAAK,EAAE;AACxB,UAAU,MAAM,CAAC,OAAO,CAAC,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC3E,QAAQ,CAAC;AACT,MAAM,CAAC;AACP,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACZ,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE;AAC1C,IAAI,IAAI;AACR;AACA,MAAM,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;AAClG,MAAM,IAAI,mBAAmB,CAAC,SAAS,EAAE;AACzC,QAAQ,MAAM,CAAC,MAAM,CAAC,yCAAyC,CAAC,CAAC;AACjE,QAAQ,OAAO;AACf,MAAM,CAAC;AACP;AACA;AACA,MAAM,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AACjG,MAAM,IAAI,mBAAmB,KAAK,KAAK,EAAE;AACzC,QAAQ,MAAM,CAAC,MAAM,CAAC,gDAAgD,CAAC,CAAC;AACxE,QAAQ,OAAO;AACf,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE;AACtC,QAAQ,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAC3D,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE;AACzC,QAAQ,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;AAChD,QAAQ,OAAO,CAAC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;AAC7C,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC5C;AACA;AACA,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACnC;AACA;AACA,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AAC5D;AACA;AACA,MAAM,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AACpE;AACA;AACA,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AACpE;AACA,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC;AAC1D,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC7D;AACA;AACA,MAAM,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AACxF;AACA;AACA,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AACtF,MAAM,MAAM,KAAK,CAAC;AAClB,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,IAAI,CAAC,OAAO,EAAE;AACtB,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC9C,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;AAC3D,MAAM,OAAO;AACb,IAAI,CAAC;AACL;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;AACrD;AACA;AACA,IAAI,IAAI,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE;AACvC,MAAM,IAAI;AACV,QAAQ,MAAM,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAC9D,MAAM,CAAC,CAAC,OAAO,GAAG,EAAE;AACpB,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAClE,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA;AACA,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACrF,IAAI,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACpF;AACA;AACA,IAAI,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AACjD,IAAI,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC;AAC7B,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAClC;AACA;AACA,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACtC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACjC;AACA;AACA,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3E,IAAI,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACnF;AACA;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AAC/D;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,sCAAsC,CAAC,CAAC,CAAC;AACtE,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,IAAI,CAAC,OAAO,EAAE;AACtB,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC5C,IAAI,IAAI,CAAC,MAAM,EAAE;AACjB,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC,CAAC;AACvE,MAAM,OAAO;AACb,IAAI,CAAC;AACL;AACA,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACnD,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACzD;AACA;AACA,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE;AAC5C,MAAM,OAAO;AACb,MAAM,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;AACjD,MAAM,OAAO,EAAE,MAAM,CAAC,OAAO;AAC7B,MAAM,SAAS,EAAE,MAAM,CAAC,SAAS;AACjC,MAAM,SAAS,EAAE,IAAI;AACrB,KAAK,CAAC,CAAC;AACP,IAAI,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,EAAE;AACpD,MAAM,OAAO;AACb,MAAM,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;AACjD,MAAM,SAAS,EAAE,IAAI;AACrB,KAAK,CAAC,CAAC;AACP;AACA;AACA,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;AAC5C,IAAI,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC;AAC5B,IAAI,OAAO,MAAM,CAAC,QAAQ,CAAC;AAC3B;AACA;AACA,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACtC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAChC;AACA;AACA,IAAI,IAAI,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE;AACpC,MAAM,IAAI;AACV,QAAQ,MAAM,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAC1D,MAAM,CAAC,CAAC,OAAO,GAAG,EAAE;AACpB,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAChE,MAAM,CAAC;AACP,IAAI,CAAC;AACL;AACA,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAClE;AACA;AACA,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE;AAC3C,MAAM,OAAO;AACb,MAAM,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;AACjD,MAAM,OAAO,EAAE,MAAM,CAAC,OAAO;AAC7B,MAAM,SAAS,EAAE,QAAQ;AACzB,MAAM,SAAS,EAAE,IAAI;AACrB,KAAK,CAAC,CAAC;AACP,IAAI,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE;AACnD,MAAM,OAAO;AACb,MAAM,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;AACjD,MAAM,SAAS,EAAE,QAAQ;AACzB,MAAM,SAAS,EAAE,IAAI;AACrB,KAAK,CAAC,CAAC;AACP;AACA;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AACxE;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,0BAA0B,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAClF,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,cAAc,CAAC,OAAO,EAAE;AAChC,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC5C,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO;AACxB;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAC9D;AACA;AACA,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;AAC5C,IAAI,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC;AAC5B;AACA;AACA,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACtC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAChC;AACA;AACA,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACjD,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,OAAO,EAAE;AACpB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACpC,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,GAAG,CAAC,aAAa,EAAE;AAC3B,IAAI,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC9D;AACA,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,aAAa,EAAE;AACpC,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,wBAAwB,EAAE,aAAa,CAAC,4BAA4B,CAAC,CAAC,CAAC;AAC9F,IAAI,CAAC;AACL;AACA,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACvC,IAAI,IAAI,CAAC,GAAG,EAAE;AACd,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;AACvD,IAAI,CAAC;AACL;AACA,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACjD,IAAI,MAAM,UAAU,GAAG,QAAQ,EAAE,EAAE,EAAE,OAAO,GAAG,aAAa,CAAC,CAAC;AAC9D;AACA,IAAI,IAAI,CAAC,UAAU,EAAE;AACrB,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAC/E,IAAI,CAAC;AACL;AACA;AACA,IAAI,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AAChE,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,OAAO,EAAE;AACtB,IAAI,OAAO;AACX,MAAM,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;AACxC,MAAM,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;AAC3C,MAAM,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AACxC,MAAM,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;AAC/C,KAAK,CAAC;AACN,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO;AACX,MAAM,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;AAChC,MAAM,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;AACpC,MAAM,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;AAChC,MAAM,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;AAC9B,MAAM,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACxC,KAAK,CAAC;AACN,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,IAAI,EAAE;AACjB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChC,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE;AACxB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACvC,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE;AACnC,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC5C,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,OAAO,EAAE;AACtB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACrC,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,GAAG;AACpB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;AACnC,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,UAAU,GAAG;AACf,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AACvB,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE;AAClC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;AAC9C,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,OAAO,EAAE;AAC1B,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACnC,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,GAAG;AACjB,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;AACnC,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,cAAc,GAAG;AACnB,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC9B,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE;AAC9B,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACvD,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,OAAO,EAAE;AACvB,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAChD,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE;AACpB,IAAI,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACzC,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,GAAG;AAClB,IAAI,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;AAC9C;AACA,IAAI,IAAI;AACR;AACA,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;AACpD;AACA;AACA,MAAM,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACxD;AACA;AACA,MAAM,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE;AAC1D,QAAQ,YAAY,CAAC,KAAK,CAAC,CAAC;AAC5B,MAAM,CAAC;AACP,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;AACpC,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;AACrC;AACA;AACA,MAAM,KAAK,MAAM,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE;AACpD,QAAQ,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnC,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;AACxD,MAAM,CAAC;AACP,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;AAClC,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;AAClC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;AAC9B;AACA;AACA,MAAM,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE;AACrD,QAAQ,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAC3C,MAAM,CAAC;AACP;AACA;AACA,MAAM,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE;AACtD,QAAQ,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACrD,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AACzB,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;AAChC,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;AACnC,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;AACtC;AACA;AACA,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;AAClC,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;AAChC,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;AACnC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AAC3B,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;AAChC;AACA;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACxB,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;AAC/B,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AAC7B,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AAC3B,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AAC1B;AACA;AACA,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AACzB;AACA,MAAM,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;AACjC;AACA;AACA,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;AACnD;AACA,MAAM,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAC5C,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,OAAO,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;AACrD,MAAM,MAAM,KAAK,CAAC;AAClB,IAAI,CAAC;AACL,EAAE,CAAC;AACH;;ACnjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;AAC7B,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU;AAC3D,EAAE,WAAW,EAAE,MAAM;AACrB,CAAC,CAAC,CAAC;AACH;AACA;AACA;AACA,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;AAC3E;AACA;AACA;AACA,MAAM,iBAAiB,GAAG;AAC1B,EAAE,KAAK,EAAE,MAAM,EAAE;AACjB,EAAE,MAAM,EAAE,MAAM,KAAK;AACrB,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACtD,CAAC,CAAC;AACF;AACA;AACA,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;AAC7B,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa;AAChE,CAAC,CAAC,CAAC;AACH;AACA;AACA,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;AACjE;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,UAAU,EAAE;AACjC,EAAE,IAAI,WAAW,GAAG,IAAI,CAAC;AACzB,EAAE,IAAI,YAAY,GAAG,IAAI,CAAC;AAC1B,EAAE,MAAM,MAAM,GAAG,EAAE,CAAC;AACpB;AACA,EAAE,MAAM,UAAU,GAAG,MAAM;AAC3B,IAAI,IAAI,WAAW,EAAE,OAAO,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AACzD,IAAI,IAAI,YAAY,EAAE,OAAO,YAAY,CAAC;AAC1C,IAAI,YAAY,GAAG,OAAO,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK;AAC9D,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC;AAC7B,QAAQ,QAAQ,EAAE,UAAU,CAAC,QAAQ;AACrC,QAAQ,KAAK,EAAE,UAAU,CAAC,KAAK;AAC/B,QAAQ,IAAI,EAAE,UAAU;AACxB;AACA;AACA;AACA,QAAQ,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,gBAAgB,GAAG,OAAO,CAAC,IAAI,IAAI;AACtE,OAAO,CAAC,CAAC;AACT;AACA,MAAM,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE;AACjC,QAAQ,IAAI;AACZ,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;AACtC,YAAY,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;AACjD,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;AAC1C,YAAY,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjD,YAAY,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,UAAU,EAAE;AAC7D,cAAc,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3C,YAAY,CAAC;AACb,UAAU,CAAC;AACX,QAAQ,CAAC,CAAC,OAAO,GAAG,EAAE;AACtB;AACA,UAAU,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9C,QAAQ,CAAC;AACT,MAAM,CAAC;AACP,MAAM,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AACxB,MAAM,OAAO,WAAW,CAAC;AACzB,IAAI,CAAC,CAAC,CAAC;AACP,IAAI,OAAO,YAAY,CAAC;AACxB,EAAE,CAAC,CAAC;AACJ;AACA;AACA,EAAE,MAAM,YAAY,GAAG,CAAC,UAAU,KAAK,IAAI,KAAK,CAAC,EAAE,EAAE;AACrD,IAAI,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE;AACnB,MAAM,IAAI,WAAW,EAAE;AACvB,QAAQ,MAAM,GAAG,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;AAC5C,QAAQ,MAAM,GAAG,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC;AAClC,QAAQ,OAAO,OAAO,GAAG,KAAK,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AAC/D,MAAM,CAAC;AACP,MAAM,OAAO,CAAC,GAAG,IAAI,KAAK;AAC1B;AACA,QAAQ,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7E,QAAQ,UAAU,EAAE,CAAC;AACrB,MAAM,CAAC,CAAC;AACR,IAAI,CAAC;AACL,GAAG,CAAC,CAAC;AACL;AACA,EAAE,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,EAAE,EAAE;AAChC,IAAI,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE;AACjB;AACA,MAAM,IAAI,WAAW,EAAE;AACvB,QAAQ,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AACnD,QAAQ,OAAO,OAAO,GAAG,KAAK,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC;AACvE,MAAM,CAAC;AACP;AACA,MAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,OAAO,IAAI,CAAC;AACzC,MAAM,IAAI,IAAI,KAAK,UAAU,EAAE,OAAO,KAAK,CAAC;AAC5C;AACA;AACA,MAAM,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;AAC9D;AACA;AACA,MAAM,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAClC,QAAQ,OAAO,CAAC,GAAG,IAAI,KAAK;AAC5B,UAAU,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACtD,UAAU,UAAU,EAAE,CAAC;AACvB,UAAU,OAAO,OAAO,CAAC;AACzB,QAAQ,CAAC,CAAC;AACV,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAClC,QAAQ,OAAO,CAAC,GAAG,IAAI,KAAK;AAC5B,UAAU,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACtD,UAAU,UAAU,EAAE,CAAC;AACvB,QAAQ,CAAC,CAAC;AACV,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,IAAI,IAAI,iBAAiB,EAAE;AACrC,QAAQ,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACvC,MAAM,CAAC;AACP;AACA;AACA,MAAM,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAClC,QAAQ,OAAO,gBAAgB,YAAY,CAAC,GAAG,IAAI,EAAE;AACrD,UAAU,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;AACxC,UAAU,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACnC,QAAQ,CAAC,CAAC;AACV,MAAM,CAAC;AACP;AACA;AACA;AACA,MAAM,OAAO,CAAC,GAAG,IAAI,KAAK,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI;AAClD,QAAQ,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;AAC5B,QAAQ,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAChE,QAAQ,OAAO,EAAE,CAAC;AAClB,MAAM,CAAC,CAAC,CAAC;AACT,IAAI,CAAC;AACL,GAAG,CAAC,CAAC;AACL;AACA,EAAE,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE;AAC1C,IAAI,GAAG,GAAG,EAAE,OAAO,WAAW,IAAI,OAAO,CAAC,CAAC,CAAC;AAC5C,IAAI,YAAY,EAAE,IAAI;AACtB,GAAG,CAAC,CAAC;AACL;AACA;AACA,EAAE,UAAU,CAAC,OAAO,GAAG,UAAU,CAAC;AAClC,CAAC;AACD;AACA;AACG,IAAC,GAAG;AACP;AACA,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE;AAC5E,EAAE,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;AACjB,CAAC,MAAM;AACP,EAAE,EAAE,GAAG,IAAI,MAAM,EAAE,CAAC;AACpB,EAAE,EAAE,CAAC,cAAc,GAAG,IAAI,CAAC;AAC3B;AACA;AACA,EAAE,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACrC,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAC9C,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;AACxB,EAAE,CAAC;AACH,CAAC;AACD;AACA;AACA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACnC;AACA,EAAE,IAAI,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE;AAC9C,IAAI,OAAO,CAAC,IAAI,CAAC,oJAAoJ,CAAC,CAAC;AACvK,EAAE,CAAC;AACH,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;AACjB;AACA,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;AACnB;AACA;AACA,IAAI,EAAE,CAAC,OAAO,GAA2C,OAAc,CAAc,CAAC;AACtF,IAAI,EAAE,CAAC,IAAI,GAAG;AACd,MAAM,IAAI,EAAE,cAAc;AAC1B,MAAM,WAAW,EAAE,0BAA0B;AAC7C,MAAM,QAAQ,EAAE,CAAC,oBAAoB,EAAE,aAAa,EAAE,sBAAsB,EAAE,iBAAiB,CAAC;AAChG,KAAK,CAAC;AACN,EAAE,CAAC;AACH;AACA;AACA,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE;AAChB,IAAI,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACzE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACrD,IAAI,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACzD,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACvD,EAAE,CAAC;AACH;AACA;AACA,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE;AACpB,IAAI,EAAE,CAAC,QAAQ,GAAG,CAAC,QAAQ,EAAE,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC7E,IAAI,EAAE,CAAC,WAAW,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC/D,EAAE,CAAC;AACH;AACA;AACA,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE;AACpB,IAAI,EAAE,CAAC,QAAQ,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,KAAK,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AACzE,IAAI,EAAE,CAAC,cAAc,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC5D,IAAI,EAAE,CAAC,YAAY,GAAG,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;AAClD,IAAI,EAAE,CAAC,cAAc,GAAG,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;AACtD,EAAE,CAAC;AACH;AACA;AACA,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;AACnB,IAAI,EAAE,CAAC,OAAO,GAAG,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,wDAA6B,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;AACnH,IAAI,EAAE,CAAC,OAAO,GAAG,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,wDAA6B,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;AACjH,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACd,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;AACpB,EAAE,CAAC;AACH;AACA;AACA,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;AACf,IAAI,IAAI,UAAU,GAAG,IAAI,CAAC;AAC1B,IAAI,EAAE,CAAC,GAAG,GAAG;AACb,MAAM,MAAM,OAAO,CAAC,GAAG,GAAG,sBAAsB,EAAE,OAAO,GAAG,EAAE,EAAE;AAChE,QAAQ,IAAI,CAAC,UAAU,EAAE;AACzB,UAAU,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,OAAO,yBAAyB,CAAC,CAAC;AAC9E,UAAU,UAAU,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;AAC3C,QAAQ,CAAC;AACT,QAAQ,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AACzC,MAAM,CAAC;AACP,MAAM,UAAU,GAAG;AACnB,QAAQ,UAAU,EAAE,UAAU,EAAE,CAAC;AACjC,MAAM,CAAC;AACP,MAAM,WAAW,GAAG;AACpB,QAAQ,OAAO,UAAU,EAAE,WAAW,EAAE,IAAI,KAAK,CAAC;AAClD,MAAM,CAAC;AACP,KAAK,CAAC;AACN,EAAE,CAAC;AACH,CAAC;AAID,iBAAe,EAAE,CAAC;AAkClB;AACA;AACY,MAAC,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE;AACpC,MAAC,KAAK,GAAG,CAAC,IAAI,EAAE,SAAS,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE;AACxD,MAAC,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE;AAClD,MAAC,MAAM,GAAG,CAAC,IAAI,EAAE,SAAS,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE;AAC1D,MAAC,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE;AAC9C,MAAC,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,GAAG;AAC1C;AACA;AACY,MAAC,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE;AAChC,MAAC,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE;AAChC,MAAC,QAAQ,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpD;AACA;AACY,MAAC,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;AACnE,MAAC,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE;AAC/C,MAAC,IAAI,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE;AACnD,MAAC,GAAG,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE;AAC7D;AACA;AACY,MAAC,QAAQ,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE;AACzC,MAAC,QAAQ,GAAG,CAAC,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE;AACvD,MAAC,aAAa,GAAG,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE;AACvE;AACA;AACY,MAAC,YAAY,GAAG,CAAC,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE;AACtE,MAAC,UAAU,GAAG,CAAC,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE;AAClE,MAAC,yBAAyB,GAAG,MAAM,EAAE,CAAC,WAAW,CAAC,cAAc,GAAG;AAC/E;AACA;AACY,MAAC,QAAQ,GAAG,CAAC,QAAQ,EAAE,IAAI,KAAK,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE;AAC5D,MAAC,WAAW,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE;AAC1D;AACA;AACY,MAAC,QAAQ,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;AAC9D,MAAC,cAAc,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE;AACpD,MAAC,YAAY,GAAG,MAAM,EAAE,CAAC,YAAY,GAAG;AACxC,MAAC,cAAc,GAAG,MAAM,EAAE,CAAC,cAAc,GAAG;AACxD;AACA;AACY,MAAC,SAAS,GAAG,CAAC,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE;AACjE,MAAC,OAAO,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;"}
|
|
1
|
+
{"version":3,"file":"wu-framework.dev.js","sources":["../src/core/wu-logger.js","../src/core/wu-style-bridge.js","../src/core/wu-proxy-sandbox.js","../src/core/wu-sandbox.js","../src/core/wu-manifest.js","../src/core/wu-store.js","../src/core/wu-app.js","../src/core/wu-cache.js","../src/core/wu-event-bus.js","../src/core/wu-performance.js","../src/core/wu-plugin.js","../src/core/wu-strategies.js","../src/core/wu-error-boundary.js","../src/core/wu-hooks.js","../src/core/wu-prefetch.js","../src/core/wu-overrides.js","../src/core/wu-core.js","../src/index.js"],"sourcesContent":["/**\n * 📝 WU-LOGGER: Sistema de logging inteligente para entornos\n * Controla los logs automáticamente según el entorno\n */\n\nexport class WuLogger {\n constructor() {\n // Detectar entorno automáticamente\n this.isDevelopment = this.detectEnvironment();\n // En desarrollo: warn (menos ruido), en producción: error\n this.logLevel = this.isDevelopment ? 'warn' : 'error';\n\n this.levels = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n silent: 4\n };\n }\n\n /**\n * Detectar si estamos en desarrollo\n */\n detectEnvironment() {\n // 1. Explicit flag takes priority\n if (typeof window !== 'undefined' && window.WU_DEBUG === true) return true;\n if (typeof window !== 'undefined' && window.WU_DEBUG === false) return false;\n\n // 2. NODE_ENV check (works in bundlers and Node)\n if (typeof process !== 'undefined' && process.env?.NODE_ENV === 'production') return false;\n if (typeof process !== 'undefined' && process.env?.NODE_ENV === 'development') return true;\n\n // 3. Browser heuristics (only if window exists)\n if (typeof window !== 'undefined' && window.location) {\n const hostname = window.location.hostname;\n if (hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '[::1]') return true;\n\n // URL param override\n try {\n if (new URLSearchParams(window.location.search).has('wu-debug')) return true;\n } catch {}\n }\n\n // 4. Default: assume production\n return false;\n }\n\n /**\n * Configurar nivel de logging\n */\n setLevel(level) {\n this.logLevel = level;\n return this;\n }\n\n /**\n * Habilitar/deshabilitar development mode\n */\n setDevelopment(isDev) {\n this.isDevelopment = isDev;\n this.logLevel = isDev ? 'debug' : 'error';\n return this;\n }\n\n /**\n * Verificar si debemos mostrar el log\n */\n shouldLog(level) {\n return this.levels[level] >= this.levels[this.logLevel];\n }\n\n /**\n * Logging methods\n */\n debug(...args) {\n if (this.shouldLog('debug')) {\n console.log(...args);\n }\n }\n\n info(...args) {\n if (this.shouldLog('info')) {\n console.info(...args);\n }\n }\n\n warn(...args) {\n if (this.shouldLog('warn')) {\n console.warn(...args);\n }\n }\n\n error(...args) {\n if (this.shouldLog('error')) {\n console.error(...args);\n }\n }\n\n /**\n * Logging con contexto Wu\n */\n wu(level, ...args) {\n if (this.shouldLog(level)) {\n const method = level === 'debug' ? 'log' : level;\n console[method]('[Wu]', ...args);\n }\n }\n\n /**\n * Helper methods específicos para Wu\n */\n wuDebug(...args) { this.wu('debug', ...args); }\n wuInfo(...args) { this.wu('info', ...args); }\n wuWarn(...args) { this.wu('warn', ...args); }\n wuError(...args) { this.wu('error', ...args); }\n}\n\n// Singleton instance\nexport const logger = new WuLogger();\n\n// Helper para compatibilidad con logs existentes\nexport const wuLog = {\n debug: (...args) => logger.wuDebug(...args),\n info: (...args) => logger.wuInfo(...args),\n warn: (...args) => logger.wuWarn(...args),\n error: (...args) => logger.wuError(...args)\n};\n\n/**\n * 🔇 Silenciar todos los logs de Wu Framework\n * Útil en producción para eliminar todo el ruido\n */\nexport function silenceAllLogs() {\n logger.setLevel('silent');\n}\n\n/**\n * 🔊 Restaurar logs (nivel debug)\n */\nexport function enableAllLogs() {\n logger.setLevel('debug');\n}","/**\n * 🎨 WU-STYLE-BRIDGE: SHADOW DOM STYLE SHARING SYSTEM\n *\n * Comparte automáticamente estilos de node_modules entre padre e hijos Shadow DOM\n * Soluciona el problema de aislamiento CSS en microfrontends\n *\n * MODOS DE INYECCIÓN DE ESTILOS:\n * ================================\n *\n * 1. \"shared\" (default):\n * - Inyecta TODOS los estilos del documento padre en el Shadow DOM\n * - Incluye: librerías (Element Plus, Vue Flow), estilos globales, etc.\n * - Ideal para: Apps que necesitan compartir un design system común\n * - Riesgo de colisiones: ALTO\n *\n * 2. \"isolated\":\n * - NO inyecta estilos externos\n * - Usa el encapsulamiento NATIVO del Shadow DOM\n * - La app debe incluir sus propios estilos (CSS-in-JS, scoped styles, etc.)\n * - Ideal para: Apps con estilos completamente independientes\n * - Riesgo de colisiones: NINGUNO\n *\n * 3. \"fully-isolated\":\n * - Inyecta SOLO los estilos propios de la micro-app específica\n * - Detecta estilos por patrón: packages/appName/src/\n * - Usa MutationObserver para HMR de Vite\n * - Ideal para: Apps que necesitan sus estilos pero no los globales\n * - Riesgo de colisiones: NINGUNO\n */\n\nimport { logger } from './wu-logger.js';\n\nexport class WuStyleBridge {\n constructor() {\n this.styleObserver = null;\n this.fullyIsolatedApps = new Map(); // Mapa de appName -> appUrl para apps con fully-isolated\n this.config = {\n // Librerías que se deben compartir automáticamente\n autoShareLibraries: [\n 'element-plus',\n 'vue-flow',\n '@vue-flow',\n 'vueuse',\n '@vueuse',\n 'normalize.css',\n 'reset.css'\n ],\n // Patrones de URLs a compartir\n sharePatterns: [\n /\\/node_modules\\//,\n /\\/@vite\\/client/,\n /\\/dist\\/index\\.css$/,\n /\\/dist\\/style\\.css$/\n ],\n // Modo de compartición\n mode: 'auto', // 'auto' | 'manual' | 'all'\n // Caché de estilos\n cacheEnabled: true\n };\n\n logger.debug('[WuStyleBridge] 🎨 Style sharing system initialized');\n }\n\n /**\n * 🛡️ REGISTRAR APP FULLY-ISOLATED: Registra una app con fully-isolated para filtrar sus estilos\n * @param {string} appName - Nombre de la app\n * @param {string} appUrl - URL base de la app\n */\n registerFullyIsolatedApp(appName, appUrl) {\n this.fullyIsolatedApps.set(appName, appUrl);\n logger.debug(`[WuStyleBridge] 🛡️ Registered fully-isolated app: ${appName} (${appUrl})`);\n }\n\n /**\n * 🛡️ DESREGISTRAR APP FULLY-ISOLATED: llamar al hacer unmount\n * @param {string} appName\n */\n unregisterFullyIsolatedApp(appName) {\n if (this.fullyIsolatedApps.delete(appName)) {\n logger.debug(`[WuStyleBridge] 🛡️ Unregistered fully-isolated app: ${appName}`);\n }\n }\n\n /**\n * 🔍 VERIFICAR SI ESTILO ES DE APP FULLY-ISOLATED: Verifica si un estilo proviene de una app con fully-isolated\n * @param {string|Object|HTMLElement} styleUrlOrElement - URL del estilo, objeto de estilo, o elemento DOM\n * @returns {boolean}\n */\n isStyleFromFullyIsolatedApp(styleUrlOrElement) {\n let url = '';\n let elementToCheck = null;\n\n // Si es un string, usar directamente\n if (typeof styleUrlOrElement === 'string') {\n url = styleUrlOrElement;\n }\n // Si es un elemento DOM\n else if (styleUrlOrElement && typeof styleUrlOrElement.getAttribute === 'function') {\n elementToCheck = styleUrlOrElement;\n // Preferred: framework-owned attribute (works for ANY bundler)\n // Fallback: vite dev id or element href\n url = styleUrlOrElement.getAttribute('data-vite-dev-id')\n || styleUrlOrElement.href\n || '';\n }\n // Si es un objeto wrapper\n else if (styleUrlOrElement) {\n if (styleUrlOrElement.href) {\n url = styleUrlOrElement.href;\n } else if (styleUrlOrElement.viteId) {\n url = styleUrlOrElement.viteId;\n } else if (styleUrlOrElement.element) {\n elementToCheck = styleUrlOrElement.element;\n if (typeof styleUrlOrElement.element.getAttribute === 'function') {\n url = styleUrlOrElement.element.getAttribute('data-vite-dev-id') || styleUrlOrElement.element.href || '';\n } else if (styleUrlOrElement.element.href) {\n url = styleUrlOrElement.element.href;\n }\n }\n }\n\n // First-class check: `data-wu-app=\"<name>\"` is the framework convention\n // for tagging styles as belonging to a specific app. Works across any\n // bundler — Vite, webpack, esbuild, plain HTML. See WuCore.tagStyleAsApp().\n if (elementToCheck) {\n const wuApp = elementToCheck.getAttribute('data-wu-app');\n if (wuApp && this.fullyIsolatedApps.has(wuApp)) {\n return true;\n }\n }\n\n if (!url || url.trim() === '') return false;\n\n // Normalizar la URL para comparación (convertir backslashes a forward slashes)\n const normalizedUrl = url.replace(/\\\\/g, '/').toLowerCase();\n\n // Verificar si la URL pertenece a alguna app con fully-isolated\n for (const [appName, appUrl] of this.fullyIsolatedApps.entries()) {\n const normalizedAppUrl = appUrl.replace(/\\\\/g, '/').toLowerCase();\n const normalizedAppName = appName.toLowerCase();\n \n // Verificar si la URL contiene la URL base de la app (ej: http://localhost:4001)\n if (normalizedAppUrl && normalizedUrl.includes(normalizedAppUrl)) {\n return true;\n }\n \n // Verificar si la URL contiene rutas del app en el sistema de archivos\n // Ej: C:/Users/.../header/src/... o /header/src/...\n // Patrón: cualquier ruta que contenga /header/ o \\header\\\n const appPathPattern = new RegExp(`[/\\\\\\\\]${normalizedAppName}[/\\\\\\\\]`, 'i');\n if (appPathPattern.test(normalizedUrl)) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * 🔍 DETECTAR ESTILOS: Escanea todos los estilos del documento\n * @returns {Array} Lista de estilos detectados (filtrados para excluir apps con fully-isolated)\n */\n detectDocumentStyles() {\n const styles = [];\n\n // 1. Detectar TODOS los <link> tags de CSS\n const linkTags = document.querySelectorAll('link[rel=\"stylesheet\"]');\n linkTags.forEach((link) => {\n // Filtrar estilos de apps con fully-isolated\n if (this.isStyleFromFullyIsolatedApp(link)) {\n return;\n }\n\n styles.push({\n type: 'link',\n href: link.href,\n element: link,\n library: this.extractLibraryName(link.href)\n });\n });\n\n // 2. Detectar TODOS los <style> tags (incluyendo Vue scoped styles)\n const styleTags = document.querySelectorAll('style');\n styleTags.forEach((style, index) => {\n // Excluir solo estilos ya compartidos por wu-framework\n if (style.getAttribute('data-wu-shared') === 'true') {\n return;\n }\n\n const viteId = style.getAttribute('data-vite-dev-id');\n const content = style.textContent;\n\n // Filtrar estilos de apps con fully-isolated (después de obtener viteId para mejor detección)\n if (this.isStyleFromFullyIsolatedApp(style) || (viteId && this.isStyleFromFullyIsolatedApp(viteId))) {\n logger.debug(`[WuStyleBridge] 🛡️ Filtered out style from fully-isolated app: ${viteId || 'unknown'}`);\n return;\n }\n\n // Incluir todos los estilos con contenido\n if (content && content.trim().length > 0) {\n styles.push({\n type: 'inline',\n content,\n element: style,\n viteId,\n library: this.extractLibraryName(viteId || ''),\n index\n });\n }\n });\n\n // 3. Detectar Constructable Stylesheets (si están disponibles)\n if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0) {\n document.adoptedStyleSheets.forEach((sheet, index) => {\n styles.push({\n type: 'adoptedStyleSheet',\n sheet,\n index\n });\n });\n }\n\n logger.debug(`[WuStyleBridge] 🔍 Detected ${styles.length} shareable styles`);\n return styles;\n }\n\n /**\n * 🎯 VERIFICAR SI SE DEBE COMPARTIR: Filtra estilos según configuración\n * @param {string} urlOrId - URL o ID del estilo\n * @returns {boolean}\n */\n shouldShareStyle(urlOrId) {\n if (!urlOrId) return false;\n\n // Modo 'all' - compartir todo\n if (this.config.mode === 'all') return true;\n\n // Verificar patrones configurados\n for (const pattern of this.config.sharePatterns) {\n if (pattern.test(urlOrId)) return true;\n }\n\n // Verificar librerías específicas\n for (const lib of this.config.autoShareLibraries) {\n if (urlOrId.includes(lib)) return true;\n }\n\n return false;\n }\n\n /**\n * 📦 EXTRAER NOMBRE DE LIBRERÍA: Obtiene el nombre de la librería desde la URL\n * @param {string} url - URL del estilo\n * @returns {string|null}\n */\n extractLibraryName(url) {\n if (!url) return null;\n\n // Extraer de node_modules\n const nodeModulesMatch = url.match(/\\/node_modules\\/(@?[^/]+\\/[^/]+|@?[^/]+)/);\n if (nodeModulesMatch) return nodeModulesMatch[1];\n\n // Extraer de vite dev id\n const viteMatch = url.match(/\\/node_modules\\/(.+?)\\/.*?\\.css/);\n if (viteMatch) return viteMatch[1];\n\n return null;\n }\n\n /**\n * 🌉 INYECTAR ESTILOS EN SHADOW DOM: Clona estilos al Shadow DOM\n * @param {ShadowRoot} shadowRoot - Shadow DOM donde inyectar\n * @param {string} appName - Nombre de la app\n * @param {string} styleMode - Modo de estilos: 'shared', 'isolated', 'fully-isolated'\n * @returns {Promise<number>}\n */\n async injectStylesIntoShadow(shadowRoot, appName, styleMode) {\n if (!shadowRoot) {\n logger.warn('[WuStyleBridge] ⚠️ No shadow root provided');\n return 0;\n }\n\n // 🛡️ MODO FULLY-ISOLATED: No inyectar ningún estilo compartido\n // Los estilos propios se manejan en wu-sandbox.js con injectOwnStylesToShadow\n if (styleMode === 'fully-isolated') {\n logger.debug(`[WuStyleBridge] 🛡️ Style mode \"fully-isolated\" for ${appName}, skipping shared style injection`);\n return 0;\n }\n\n // 🔒 MODO ISOLATED: No inyectar estilos externos - usar encapsulamiento nativo de Shadow DOM\n // La app debe manejar sus propios estilos (CSS-in-JS, scoped styles, imports directos)\n if (styleMode === 'isolated') {\n logger.debug(`[WuStyleBridge] 🔒 Style mode \"isolated\" for ${appName}, using native Shadow DOM encapsulation (no external styles)`);\n return 0;\n }\n\n // 🌐 MODO SHARED (default): Inyectar todos los estilos compartidos del documento\n logger.debug(`[WuStyleBridge] 🌐 Style mode \"shared\" for ${appName}, injecting all shared styles...`);\n\n // Detectar estilos del documento\n const styles = this.detectDocumentStyles();\n let injectedCount = 0;\n\n // Inyectar cada estilo\n for (const style of styles) {\n try {\n switch (style.type) {\n case 'link':\n await this.injectLinkStyle(shadowRoot, style);\n injectedCount++;\n break;\n\n case 'inline':\n this.injectInlineStyle(shadowRoot, style);\n injectedCount++;\n break;\n\n case 'adoptedStyleSheet':\n this.injectAdoptedStyleSheet(shadowRoot, style);\n injectedCount++;\n break;\n }\n } catch (error) {\n logger.warn(`[WuStyleBridge] ⚠️ Failed to inject style:`, error);\n }\n }\n\n logger.debug(`[WuStyleBridge] ✅ Injected ${injectedCount} shared styles into ${appName}`);\n return injectedCount;\n }\n\n /**\n * 🔗 INYECTAR LINK STYLE: Clona <link> tag al Shadow DOM\n * @param {ShadowRoot} shadowRoot\n * @param {Object} style\n */\n async injectLinkStyle(shadowRoot, style) {\n // Verificar si ya existe\n const existing = shadowRoot.querySelector(`link[href=\"${style.href}\"]`);\n if (existing) {\n logger.debug(`[WuStyleBridge] ⏭️ Style already exists: ${style.library || style.href}`);\n return;\n }\n\n // Clonar link tag\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = style.href;\n link.setAttribute('data-wu-shared', 'true');\n link.setAttribute('data-wu-library', style.library || 'unknown');\n\n // Insertar al principio del shadow root (antes de otros estilos)\n shadowRoot.insertBefore(link, shadowRoot.firstChild);\n\n logger.debug(`[WuStyleBridge] 🔗 Injected link: ${style.library || style.href}`);\n }\n\n /**\n * 📝 INYECTAR INLINE STYLE: Clona <style> tag al Shadow DOM\n * @param {ShadowRoot} shadowRoot\n * @param {Object} style\n */\n injectInlineStyle(shadowRoot, style) {\n // Verificar si ya existe\n const viteId = style.viteId;\n if (viteId) {\n const existing = shadowRoot.querySelector(`style[data-wu-vite-id=\"${viteId}\"]`);\n if (existing) {\n logger.debug(`[WuStyleBridge] ⏭️ Inline style already exists: ${viteId}`);\n return;\n }\n }\n\n // Crear nuevo style tag\n const styleTag = document.createElement('style');\n styleTag.textContent = style.content;\n styleTag.setAttribute('data-wu-shared', 'true');\n styleTag.setAttribute('data-wu-library', style.library || 'unknown');\n if (viteId) {\n styleTag.setAttribute('data-wu-vite-id', viteId);\n }\n\n // Insertar al principio del shadow root\n shadowRoot.insertBefore(styleTag, shadowRoot.firstChild);\n\n logger.debug(`[WuStyleBridge] 📝 Injected inline style: ${style.library || viteId}`);\n }\n\n /**\n * 📋 INYECTAR ADOPTED STYLESHEET: Comparte stylesheet constructable\n * @param {ShadowRoot} shadowRoot\n * @param {Object} style\n */\n injectAdoptedStyleSheet(shadowRoot, style) {\n try {\n // Agregar stylesheet al array de adopted stylesheets\n if (!shadowRoot.adoptedStyleSheets) {\n shadowRoot.adoptedStyleSheets = [];\n }\n\n // Verificar si ya existe\n if (shadowRoot.adoptedStyleSheets.includes(style.sheet)) {\n logger.debug(`[WuStyleBridge] ⏭️ Adopted stylesheet already exists`);\n return;\n }\n\n shadowRoot.adoptedStyleSheets = [\n ...shadowRoot.adoptedStyleSheets,\n style.sheet\n ];\n\n logger.debug(`[WuStyleBridge] 📋 Injected adopted stylesheet`);\n } catch (error) {\n logger.warn(`[WuStyleBridge] ⚠️ Failed to inject adopted stylesheet:`, error);\n }\n }\n\n /**\n * 🔄 OBSERVAR CAMBIOS: Monitorea nuevos estilos en el documento\n *\n * Each call registers an independent callback. All callbacks share a single\n * MutationObserver on document.head — this avoids the previous bug where the\n * second app to call observeStyleChanges() would silently disconnect the\n * first, leaving the earlier app without HMR style updates.\n *\n * @param {Function} callback - Callback cuando se detectan cambios\n * @returns {Function} Unsubscribe function — call it to stop receiving updates\n */\n observeStyleChanges(callback) {\n if (typeof callback !== 'function') return () => {};\n\n if (!this._styleCallbacks) {\n this._styleCallbacks = new Set();\n }\n this._styleCallbacks.add(callback);\n\n // Lazy-init the shared observer the first time someone subscribes\n if (!this.styleObserver) {\n this.styleObserver = new MutationObserver((mutations) => {\n let hasStyleChanges = false;\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n const addedNodes = Array.from(mutation.addedNodes);\n const hasNewStyles = addedNodes.some(node =>\n node.tagName === 'LINK' || node.tagName === 'STYLE'\n );\n if (hasNewStyles) { hasStyleChanges = true; break; }\n }\n }\n if (hasStyleChanges) {\n logger.debug('[WuStyleBridge] 🔄 Style changes detected');\n for (const cb of this._styleCallbacks) {\n try { cb(); } catch (err) {\n logger.warn('[WuStyleBridge] callback threw:', err);\n }\n }\n }\n });\n this.styleObserver.observe(document.head, { childList: true, subtree: true });\n logger.debug('[WuStyleBridge] 👀 Observing style changes (shared observer)');\n }\n\n // Return unsubscribe — caller (e.g. wu-sandbox cleanup) stores this\n return () => {\n if (!this._styleCallbacks) return;\n this._styleCallbacks.delete(callback);\n // When no callbacks remain, tear the observer down so we don't keep\n // hooking document.head for nothing.\n if (this._styleCallbacks.size === 0 && this.styleObserver) {\n this.styleObserver.disconnect();\n this.styleObserver = null;\n }\n };\n }\n\n /**\n * ⚙️ CONFIGURAR: Actualiza la configuración\n * @param {Object} config - Nueva configuración\n */\n configure(config) {\n this.config = {\n ...this.config,\n ...config\n };\n\n logger.debug('[WuStyleBridge] ⚙️ Configuration updated:', this.config);\n }\n\n /**\n * 🧹 LIMPIAR: Detiene la observación\n */\n cleanup() {\n if (this.styleObserver) {\n this.styleObserver.disconnect();\n this.styleObserver = null;\n }\n\n logger.debug('[WuStyleBridge] 🧹 StyleBridge cleaned up');\n }\n\n /**\n * 📊 OBTENER ESTADÍSTICAS: Información sobre estilos compartidos\n * @returns {Object}\n */\n getStats() {\n const styles = this.detectDocumentStyles();\n\n return {\n totalStyles: styles.length,\n linkStyles: styles.filter(s => s.type === 'link').length,\n inlineStyles: styles.filter(s => s.type === 'inline').length,\n adoptedStyleSheets: styles.filter(s => s.type === 'adoptedStyleSheet').length,\n libraries: [...new Set(styles.map(s => s.library).filter(Boolean))],\n config: this.config\n };\n }\n}\n","/**\n * WU-PROXY-SANDBOX: Hardened JavaScript Isolation\n *\n * ES6 Proxy-based sandbox with side-effect tracking:\n * - Timer hijacking (setTimeout, setInterval, requestAnimationFrame)\n * - Event listener tracking (window + document addEventListener)\n * - DOM scoping (querySelector/querySelectorAll → shadow root)\n * - Storage scoping (localStorage/sessionStorage → prefixed keys)\n *\n * All tracked side effects are automatically cleaned up on deactivate().\n */\n\nimport { logger } from './wu-logger.js';\n\nexport class WuProxySandbox {\n constructor(appName, options = {}) {\n this.appName = appName;\n this.options = options;\n this.proxy = null;\n this.fakeWindow = Object.create(null);\n this.active = false;\n this.modifiedKeys = new Set();\n\n // --- Side-effect tracking ---\n this._timers = new Set();\n this._intervals = new Set();\n this._rafs = new Set();\n this._eventListeners = []; // [{target, event, handler, options}]\n\n // --- DOM & Storage scoping ---\n this._container = null;\n this._shadowRoot = null;\n this._scopedDocument = null;\n this._scopedLocalStorage = null;\n this._scopedSessionStorage = null;\n\n // --- Window patching state ---\n this._patched = false;\n this._originals = null;\n }\n\n /**\n * Set the DOM scope for this sandbox.\n * Must be called before activate() for DOM scoping to work.\n * @param {HTMLElement} container - App container element\n * @param {ShadowRoot} shadowRoot - Shadow root containing the container\n */\n setContainer(container, shadowRoot) {\n this._container = container;\n this._shadowRoot = shadowRoot;\n }\n\n /**\n * Activate the sandbox. Creates the Proxy and starts tracking.\n * @returns {Proxy} The sandboxed window proxy\n */\n activate() {\n if (this.active) return this.proxy;\n\n const self = this;\n\n this.proxy = new Proxy(window, {\n get(target, prop) {\n // 1. App's own isolated globals\n if (prop in self.fakeWindow) {\n return self.fakeWindow[prop];\n }\n\n // 2. Intercepted APIs\n const intercepted = self._intercept(prop, target);\n if (intercepted !== undefined) {\n return intercepted;\n }\n\n // 3. Real window value with correct binding\n const value = target[prop];\n if (typeof value === 'function' && !self._isConstructor(value)) {\n return value.bind(target);\n }\n return value;\n },\n\n set(target, prop, value) {\n self.fakeWindow[prop] = value;\n self.modifiedKeys.add(prop);\n return true;\n },\n\n has(target, prop) {\n return prop in self.fakeWindow || prop in target;\n },\n\n deleteProperty(target, prop) {\n if (prop in self.fakeWindow) {\n delete self.fakeWindow[prop];\n self.modifiedKeys.delete(prop);\n return true;\n }\n return false;\n }\n });\n\n this.active = true;\n logger.wuDebug(`[ProxySandbox] Activated for ${this.appName}`);\n return this.proxy;\n }\n\n /**\n * Deactivate the sandbox. Cleans up ALL tracked side effects.\n */\n deactivate() {\n if (!this.active) return;\n\n // Unpatch window if patched\n this.unpatchWindow();\n\n // --- Clean timers ---\n for (const id of this._timers) {\n try { clearTimeout(id); } catch {}\n }\n for (const id of this._intervals) {\n try { clearInterval(id); } catch {}\n }\n for (const id of this._rafs) {\n try { cancelAnimationFrame(id); } catch {}\n }\n\n const timerCount = this._timers.size + this._intervals.size + this._rafs.size;\n this._timers.clear();\n this._intervals.clear();\n this._rafs.clear();\n\n // --- Clean event listeners ---\n const listenerCount = this._eventListeners.length;\n for (const { target, event, handler, options } of this._eventListeners) {\n try { target.removeEventListener(event, handler, options); } catch {}\n }\n this._eventListeners = [];\n\n // --- Clean namespace ---\n this.fakeWindow = Object.create(null);\n this.modifiedKeys.clear();\n this._scopedDocument = null;\n this._scopedLocalStorage = null;\n this._scopedSessionStorage = null;\n this.proxy = null;\n this.active = false;\n\n if (timerCount > 0 || listenerCount > 0) {\n logger.wuDebug(\n `[ProxySandbox] ${this.appName} cleanup: ${timerCount} timers, ${listenerCount} listeners`\n );\n }\n logger.wuDebug(`[ProxySandbox] Deactivated for ${this.appName}`);\n }\n\n // ================================================================\n // WINDOW PATCHING - patches real window APIs during module loading\n // ================================================================\n\n /**\n * Patch real window APIs to track side effects from global code.\n * Call before loading app module, unpatch after.\n *\n * IMPORTANT: Uses closure over originals so patched functions remain\n * valid even after unpatchWindow() — prevents crashes when frameworks\n * (React 19, etc.) cache references to patched setTimeout during import.\n */\n patchWindow() {\n if (this._patched) return;\n\n const self = this;\n\n // Capture originals in a local closure that survives unpatch\n const originals = {\n setTimeout: window.setTimeout,\n clearTimeout: window.clearTimeout,\n setInterval: window.setInterval,\n clearInterval: window.clearInterval,\n requestAnimationFrame: window.requestAnimationFrame,\n cancelAnimationFrame: window.cancelAnimationFrame,\n addEventListener: window.addEventListener,\n removeEventListener: window.removeEventListener\n };\n\n // Store reference (used by unpatchWindow to restore)\n this._originals = originals;\n\n // Patch timers — closure captures `originals`, not `self._originals`\n window.setTimeout = function(fn, delay, ...args) {\n const id = originals.setTimeout.call(window, fn, delay, ...args);\n if (self._patched) self._timers.add(id);\n return id;\n };\n window.clearTimeout = function(id) {\n self._timers.delete(id);\n return originals.clearTimeout.call(window, id);\n };\n window.setInterval = function(fn, delay, ...args) {\n const id = originals.setInterval.call(window, fn, delay, ...args);\n if (self._patched) self._intervals.add(id);\n return id;\n };\n window.clearInterval = function(id) {\n self._intervals.delete(id);\n return originals.clearInterval.call(window, id);\n };\n window.requestAnimationFrame = function(fn) {\n const id = originals.requestAnimationFrame.call(window, fn);\n if (self._patched) self._rafs.add(id);\n return id;\n };\n window.cancelAnimationFrame = function(id) {\n self._rafs.delete(id);\n return originals.cancelAnimationFrame.call(window, id);\n };\n\n // Patch event listeners\n window.addEventListener = function(event, handler, options) {\n if (self._patched) self._eventListeners.push({ target: window, event, handler, options });\n return originals.addEventListener.call(window, event, handler, options);\n };\n window.removeEventListener = function(event, handler, options) {\n self._eventListeners = self._eventListeners.filter(\n l => !(l.target === window && l.event === event && l.handler === handler)\n );\n return originals.removeEventListener.call(window, event, handler, options);\n };\n\n this._patched = true;\n logger.wuDebug(`[ProxySandbox] Window patched for ${this.appName}`);\n }\n\n /**\n * Restore original window APIs.\n * Safe: patched functions still work via closure even after restore.\n */\n unpatchWindow() {\n if (!this._patched || !this._originals) return;\n\n window.setTimeout = this._originals.setTimeout;\n window.clearTimeout = this._originals.clearTimeout;\n window.setInterval = this._originals.setInterval;\n window.clearInterval = this._originals.clearInterval;\n window.requestAnimationFrame = this._originals.requestAnimationFrame;\n window.cancelAnimationFrame = this._originals.cancelAnimationFrame;\n window.addEventListener = this._originals.addEventListener;\n window.removeEventListener = this._originals.removeEventListener;\n\n // NOTE: Do NOT null _originals — patched closures may still reference\n // the sandbox instance (e.g. React scheduler caches setTimeout).\n // The closure uses `originals` (local const), not `this._originals`.\n this._patched = false;\n logger.wuDebug(`[ProxySandbox] Window unpatched for ${this.appName}`);\n }\n\n // ================================================================\n // PROXY INTERCEPTS - for code running through the proxy\n // ================================================================\n\n /**\n * Intercept property access on the proxy.\n * Returns wrapped API or undefined to fall through.\n */\n _intercept(prop, target) {\n const self = this;\n\n switch (prop) {\n // --- Timer hijacking ---\n case 'setTimeout':\n return function(fn, delay, ...args) {\n const id = target.setTimeout(fn, delay, ...args);\n self._timers.add(id);\n return id;\n };\n case 'clearTimeout':\n return function(id) {\n self._timers.delete(id);\n target.clearTimeout(id);\n };\n case 'setInterval':\n return function(fn, delay, ...args) {\n const id = target.setInterval(fn, delay, ...args);\n self._intervals.add(id);\n return id;\n };\n case 'clearInterval':\n return function(id) {\n self._intervals.delete(id);\n target.clearInterval(id);\n };\n case 'requestAnimationFrame':\n return function(fn) {\n const id = target.requestAnimationFrame(fn);\n self._rafs.add(id);\n return id;\n };\n case 'cancelAnimationFrame':\n return function(id) {\n self._rafs.delete(id);\n target.cancelAnimationFrame(id);\n };\n\n // --- Event listener tracking ---\n case 'addEventListener':\n return function(event, handler, options) {\n self._eventListeners.push({ target, event, handler, options });\n target.addEventListener(event, handler, options);\n };\n case 'removeEventListener':\n return function(event, handler, options) {\n self._eventListeners = self._eventListeners.filter(\n l => !(l.target === target && l.event === event && l.handler === handler)\n );\n target.removeEventListener(event, handler, options);\n };\n\n // --- DOM scoping ---\n case 'document':\n return this._getScopedDocument();\n\n // --- Storage scoping ---\n case 'localStorage':\n return this._getScopedStorage('local');\n case 'sessionStorage':\n return this._getScopedStorage('session');\n }\n\n return undefined;\n }\n\n // ================================================================\n // DOM SCOPING - querySelector searches inside shadow root\n // ================================================================\n\n _getScopedDocument() {\n if (this._scopedDocument) return this._scopedDocument;\n\n const root = this._shadowRoot || this._container;\n if (!root) return document; // No container set, pass through\n\n const self = this;\n\n this._scopedDocument = new Proxy(document, {\n get(target, prop) {\n switch (prop) {\n case 'querySelector':\n return (selector) => root.querySelector(selector);\n case 'querySelectorAll':\n return (selector) => root.querySelectorAll(selector);\n case 'getElementById':\n return (id) => root.querySelector(`#${CSS.escape(id)}`);\n case 'getElementsByClassName':\n return (className) => root.querySelectorAll(`.${CSS.escape(className)}`);\n case 'getElementsByTagName':\n return (tag) => root.querySelectorAll(tag);\n\n // Track document event listeners too\n case 'addEventListener':\n return function(event, handler, options) {\n self._eventListeners.push({ target, event, handler, options });\n target.addEventListener(event, handler, options);\n };\n case 'removeEventListener':\n return function(event, handler, options) {\n self._eventListeners = self._eventListeners.filter(\n l => !(l.target === target && l.event === event && l.handler === handler)\n );\n target.removeEventListener(event, handler, options);\n };\n\n // createElement, createTextNode, etc. - pass through\n default: {\n const value = target[prop];\n if (typeof value === 'function') {\n return value.bind(target);\n }\n return value;\n }\n }\n }\n });\n\n return this._scopedDocument;\n }\n\n // ================================================================\n // STORAGE SCOPING - localStorage/sessionStorage with app prefix\n // ================================================================\n\n _getScopedStorage(type) {\n const cacheKey = type === 'local' ? '_scopedLocalStorage' : '_scopedSessionStorage';\n if (this[cacheKey]) return this[cacheKey];\n\n const realStorage = type === 'local' ? window.localStorage : window.sessionStorage;\n if (!realStorage) return realStorage;\n\n const prefix = `wu_${this.appName}_`;\n\n this[cacheKey] = {\n getItem(key) {\n return realStorage.getItem(prefix + key);\n },\n setItem(key, value) {\n realStorage.setItem(prefix + key, String(value));\n },\n removeItem(key) {\n realStorage.removeItem(prefix + key);\n },\n clear() {\n // Only clear this app's keys\n const toRemove = [];\n for (let i = 0; i < realStorage.length; i++) {\n const k = realStorage.key(i);\n if (k && k.startsWith(prefix)) toRemove.push(k);\n }\n toRemove.forEach(k => realStorage.removeItem(k));\n },\n key(index) {\n let count = 0;\n for (let i = 0; i < realStorage.length; i++) {\n const k = realStorage.key(i);\n if (k && k.startsWith(prefix)) {\n if (count === index) return k.slice(prefix.length);\n count++;\n }\n }\n return null;\n },\n get length() {\n let count = 0;\n for (let i = 0; i < realStorage.length; i++) {\n if (realStorage.key(i)?.startsWith(prefix)) count++;\n }\n return count;\n }\n };\n\n return this[cacheKey];\n }\n\n // ================================================================\n // UTILITIES\n // ================================================================\n\n _isConstructor(fn) {\n try {\n return fn.prototype && fn.prototype.constructor === fn;\n } catch {\n return false;\n }\n }\n\n getProxy() {\n return this.active ? this.proxy : null;\n }\n\n isActive() {\n return this.active;\n }\n\n getStats() {\n return {\n appName: this.appName,\n active: this.active,\n patched: this._patched,\n modifiedKeys: Array.from(this.modifiedKeys),\n isolatedPropsCount: Object.keys(this.fakeWindow).length,\n trackedTimers: this._timers.size,\n trackedIntervals: this._intervals.size,\n trackedRAFs: this._rafs.size,\n trackedEventListeners: this._eventListeners.length,\n hasContainer: !!this._container,\n hasShadowRoot: !!this._shadowRoot\n };\n }\n}\n","/**\n * 🛡️ WU-SANDBOX: ADVANCED ISOLATION SYSTEM\n * Shadow DOM + Proxy Sandbox + Script Execution + HTML Parsing\n * Combina lo mejor de video-code con Shadow DOM nativo\n */\n\nimport { WuStyleBridge } from './wu-style-bridge.js';\nimport { WuProxySandbox } from './wu-proxy-sandbox.js';\n// WuSnapshotSandbox was removed in v2.0 — browserslist excludes IE 11\n// and Proxy is available in every supported browser.\nimport { logger } from './wu-logger.js';\n\n/**\n * Normalize style mode aliases. v2.0 introduced clearer names:\n *\n * 'shared' (no alias — already clear)\n * 'isolated' ↔ 'none' (no external styles injected)\n * 'fully-isolated' ↔ 'own-only' (inject only the app's own styles)\n *\n * The original names are kept for backwards compatibility but new code\n * is encouraged to use 'none' / 'own-only' which describe behavior, not\n * isolation level (both 'isolated' modes ARE isolated; one injects nothing\n * extra, the other injects only owned styles).\n *\n * @param {string|undefined} mode\n * @returns {string|undefined} Canonical internal name\n */\nexport function normalizeStyleMode(mode) {\n if (mode === 'none') return 'isolated';\n if (mode === 'own-only') return 'fully-isolated';\n return mode;\n}\n\nexport class WuSandbox {\n constructor() {\n // Registros existentes\n this.sandboxes = new Map();\n this.styleBridge = new WuStyleBridge();\n\n // 🚀 NUEVOS SISTEMAS INTEGRADOS\n this.jsSandboxes = new Map(); // ProxySandbox o SnapshotSandbox por app\n this.sandboxStrategy = this.detectSandboxStrategy();\n\n logger.wuDebug(`Advanced isolation system initialized (strategy: ${this.sandboxStrategy})`);\n }\n\n /**\n * Detectar estrategia de sandbox.\n * Kept for backwards compatibility — always returns 'proxy' since v2.0.\n * Proxy is universal across supported browsers (browserslist excludes IE 11).\n * @returns {'proxy'}\n */\n detectSandboxStrategy() {\n return 'proxy';\n }\n\n /**\n * 🔧 SMART SANDBOX: Advanced Shadow DOM creation with error recovery\n * @param {string} appName - Nombre de la aplicación\n * @param {HTMLElement} hostContainer - Contenedor host\n * @param {Object} options - Opciones adicionales (styleMode, manifest, etc.)\n * @returns {Object} Sandbox con shadow root y container\n */\n create(appName, hostContainer, options = {}) {\n logger.wuDebug(`Creating sandbox for: ${appName}`);\n\n try {\n // 🔧 SHADOW DOM VERIFICATION\n if (!hostContainer.attachShadow) {\n throw new Error('Shadow DOM not supported in this browser');\n }\n\n // 🛠️ SMART CLEANUP: Handle existing shadow roots\n let shadowRoot;\n if (hostContainer.shadowRoot) {\n logger.wuDebug(`Existing shadow root detected for ${appName}, performing cleanup...`);\n\n // Clear existing shadow root content\n hostContainer.shadowRoot.innerHTML = '';\n shadowRoot = hostContainer.shadowRoot;\n\n logger.wuDebug(`Existing shadow root cleaned and reused for ${appName}`);\n } else {\n // Create new Shadow DOM\n shadowRoot = hostContainer.attachShadow({\n mode: 'open',\n delegatesFocus: true\n });\n\n logger.wuDebug(`New shadow root created for ${appName}`);\n }\n\n // 🎯 Create app container with advanced features\n const appContainer = document.createElement('div');\n appContainer.id = `wu-app-${appName}`;\n appContainer.className = 'wu-app-root';\n appContainer.setAttribute('data-wu-enhanced', 'true');\n appContainer.setAttribute('data-wu-timestamp', Date.now().toString());\n\n // 🎨 Enhanced base styles with advanced properties\n const baseStyles = document.createElement('style');\n baseStyles.textContent = this.generateSandboxStyles(appName);\n\n // 🌟 Assemble enhanced Shadow DOM\n shadowRoot.appendChild(baseStyles);\n shadowRoot.appendChild(appContainer);\n\n // Create JS Sandbox with container reference for DOM/storage scoping\n const jsSandbox = this.createAdvancedJSSandbox(appName);\n if (jsSandbox.setContainer) {\n jsSandbox.setContainer(appContainer, shadowRoot);\n }\n const jsProxy = jsSandbox.activate();\n\n // Verificar styleMode del manifest antes de inyectar estilos.\n // Acepta aliases v2.0+ ('none', 'own-only') y los normaliza a los nombres\n // internos. Los nombres originales se mantienen también para compat.\n const styleMode = normalizeStyleMode(options.styleMode || options.manifest?.styleMode);\n\n const sandbox = {\n appName,\n shadowRoot,\n container: appContainer,\n hostContainer,\n jsSandbox, // NUEVO: ProxySandbox o SnapshotSandbox\n jsProxy, // NUEVO: Proxy para ejecutar scripts\n styles: baseStyles,\n styleMode, // Guardar styleMode para uso futuro\n manifest: options.manifest, // Guardar manifest completo\n created: Date.now(),\n sandbox_state: 'stable',\n recovery_count: 0\n };\n\n // 🎨 INJECT STYLES: Comportamiento según styleMode\n // - \"shared\": Inyecta todos los estilos del documento padre\n // - \"isolated\": NO inyecta estilos externos (encapsulamiento nativo Shadow DOM)\n // - \"fully-isolated\": Inyecta SOLO estilos propios de la app\n\n if (styleMode === 'isolated') {\n // 🔒 MODO ISOLATED: Encapsulamiento nativo del Shadow DOM\n // No se inyectan estilos externos - la app debe manejar sus propios estilos\n logger.wuDebug(`Style mode \"isolated\" for ${appName}, using native Shadow DOM encapsulation`);\n sandbox.stylesReady = Promise.resolve(0);\n // No configurar observer de estilos - la app es responsable de sus propios estilos\n\n } else if (styleMode === 'fully-isolated') {\n logger.wuDebug(`Style mode \"fully-isolated\" detected for ${appName}, using enhanced style injection`);\n // Registrar esta app como fully-isolated en el style bridge para filtrar sus estilos\n const appUrl = options.appUrl || (options.manifest?.name ? `/${options.manifest.name}/` : `/${appName}/`);\n this.styleBridge.registerFullyIsolatedApp(appName, appUrl);\n\n // Guardar appUrl en sandbox para uso en reinjectStyles\n sandbox.appUrl = appUrl;\n\n // Para fully-isolated, inyectar SOLO los estilos propios de la app en su Shadow DOM\n // Guardamos referencia a this para usar en el observer\n const self = this;\n\n sandbox.stylesReady = new Promise((resolve) => {\n let resolved = false;\n\n const tryInject = async () => {\n const count = await self.injectOwnStylesToShadow(shadowRoot, appName, appUrl);\n\n if (count > 0) {\n logger.wuDebug(`Injected ${count} own styles for ${appName} (fully-isolated)`);\n if (!resolved) {\n resolved = true;\n resolve(count);\n }\n }\n\n return count;\n };\n\n // Usar MutationObserver PERSISTENTE para detectar cuando se inyectan estilos del app\n logger.wuDebug(`Setting up style observer for ${appName} (fully-isolated)`);\n const observer = new MutationObserver((mutations) => {\n let newStyleCount = 0;\n for (const m of mutations) {\n if (m.type === 'childList') {\n for (const n of m.addedNodes) {\n if (n.nodeName === 'STYLE' || n.nodeName === 'LINK') {\n newStyleCount++;\n if (!n.getAttribute) continue;\n // Bundler-agnostic detection: `data-wu-app=\"<name>\"`.\n // Falls back to Vite's `data-vite-dev-id` if present.\n const wuApp = n.getAttribute('data-wu-app');\n const viteId = n.getAttribute('data-vite-dev-id');\n if (wuApp === appName) {\n logger.wuDebug(`New ${appName} style (data-wu-app)`);\n } else if (viteId && viteId.toLowerCase().includes(appName.toLowerCase())) {\n logger.wuDebug(`New ${appName} style (vite): ${viteId.split('/').pop()}`);\n }\n }\n }\n }\n }\n if (newStyleCount > 0) {\n logger.wuDebug(`${newStyleCount} new styles detected in head, checking for ${appName}...`);\n tryInject();\n }\n });\n\n // Observar cambios en el head DE FORMA PERSISTENTE\n observer.observe(document.head, {\n childList: true,\n subtree: true\n });\n\n // Guardar referencia al observer para poder desconectarlo cuando se desmonte la app\n sandbox.styleObserver = observer;\n\n // Intento inicial con pequeño delay para que Vite procese los imports\n setTimeout(async () => {\n const count = await tryInject();\n // Si después de 3 segundos no hay estilos, usar fallback\n if (!resolved) {\n setTimeout(() => {\n if (!resolved) {\n logger.wuWarn(`No own styles found for ${appName} after timeout, using FALLBACK`);\n const fallbackCount = self.injectAllStylesToShadow(shadowRoot, appName);\n logger.wuDebug(`FALLBACK: Injected ${fallbackCount} styles for ${appName}`);\n resolved = true;\n resolve(fallbackCount);\n }\n }, 3000);\n }\n }, 50);\n });\n } else {\n // 🌐 MODO SHARED (default): Inyectar todos los estilos compartidos del documento\n logger.wuDebug(`Style mode \"shared\" for ${appName}, injecting all shared styles...`);\n sandbox.stylesReady = this.styleBridge.injectStylesIntoShadow(shadowRoot, appName, styleMode).then(count => {\n logger.wuDebug(`Shared ${count} styles with ${appName}`);\n\n // 🔄 Observar cambios dinámicos de estilos (HMR de Vite)\n // observeStyleChanges now returns an unsubscribe — keep it so we\n // tear down THIS app's listener on unmount without breaking others.\n sandbox.unsubscribeStyleChanges = this.styleBridge.observeStyleChanges(() => {\n logger.wuDebug(`Reinjecting styles for ${appName} due to changes`);\n this.styleBridge.injectStylesIntoShadow(shadowRoot, appName, styleMode).catch(err => {\n logger.wuWarn(`Failed to reinject styles: ${err}`);\n });\n });\n\n return count;\n }).catch(error => {\n logger.wuWarn(`Failed to inject styles: ${error}`);\n return 0;\n });\n }\n\n // 📊 Register in sandbox registry\n this.sandboxes.set(appName, sandbox);\n\n logger.wuDebug(`Enhanced sandbox created for ${appName}`);\n return sandbox;\n\n } catch (error) {\n logger.wuError(`Failed to create sandbox for ${appName}: ${error}`);\n\n // 🔧 FALLBACK RECOVERY: Create fallback sandbox when Shadow DOM fails\n if (error.message.includes('Shadow root cannot be created')) {\n return this.createFallbackSandbox(appName, hostContainer);\n }\n\n throw error;\n }\n }\n\n /**\n * 🔧 FALLBACK SANDBOX: Create fallback container when Shadow DOM is not available\n */\n createFallbackSandbox(appName, hostContainer) {\n logger.wuDebug(`Creating fallback sandbox for ${appName}...`);\n\n try {\n // 🛠️ Complete shadow DOM reset\n if (hostContainer.shadowRoot) {\n hostContainer.shadowRoot.innerHTML = '';\n }\n\n // 🌟 Create minimal container without shadow DOM if necessary\n const fallbackContainer = document.createElement('div');\n fallbackContainer.id = `wu-app-${appName}`;\n fallbackContainer.className = 'wu-app-root wu-fallback';\n fallbackContainer.style.cssText = `\n width: 100%;\n height: 100%;\n isolation: isolate;\n contain: layout style paint;\n `;\n\n // 🧹 Clear host container\n hostContainer.innerHTML = '';\n hostContainer.appendChild(fallbackContainer);\n\n const healedSandbox = {\n appName,\n shadowRoot: null, // No shadow DOM in fallback mode\n container: fallbackContainer,\n hostContainer,\n styles: null,\n created: Date.now(),\n sandbox_state: 'fallback_mode',\n recovery_count: 1,\n fallback_mode: true\n };\n\n this.sandboxes.set(appName, healedSandbox);\n\n logger.wuDebug(`Fallback sandbox created successfully for ${appName}`);\n return healedSandbox;\n\n } catch (healingError) {\n logger.wuError(`Fallback sandbox creation failed: ${healingError}`);\n throw healingError;\n }\n }\n\n /**\n * 🎨 SANDBOX STYLES: Generate CSS styles for Shadow DOM isolation\n */\n generateSandboxStyles(appName) {\n return `\n /* Wu Framework - Shadow DOM Isolation Styles */\n :host {\n display: block;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n contain: layout style paint;\n --wu-sandbox-active: true;\n --wu-isolation-state: stable;\n }\n\n .wu-app-root {\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n isolation: isolate;\n position: relative;\n overflow: hidden;\n }\n\n /* Loading animation for sandbox initialization */\n .wu-app-root[data-wu-loading=\"true\"] {\n background: linear-gradient(45deg,\n rgba(74, 144, 226, 0.1) 0%,\n rgba(80, 227, 194, 0.1) 100%);\n animation: sandboxPulse 2s ease-in-out infinite;\n }\n\n @keyframes sandboxPulse {\n 0%, 100% { opacity: 0.8; }\n 50% { opacity: 1; }\n }\n\n /* CSS reset for shadow DOM stability */\n * {\n box-sizing: border-box;\n }\n\n /* CSS custom properties for sandbox */\n :host {\n --wu-app-name: \"${appName}\";\n --wu-isolation: true;\n --wu-creation-timestamp: ${Date.now()};\n }\n\n /* 🛡️ Debug mode enhancements */\n :host([wu-debug]) {\n border: 2px dashed #4a90e2;\n background: rgba(74, 144, 226, 0.05);\n box-shadow: 0 0 10px rgba(74, 144, 226, 0.3);\n }\n\n :host([wu-debug])::before {\n content: \"Wu Framework: \" attr(wu-app);\n position: absolute;\n top: 0;\n left: 0;\n background: linear-gradient(45deg, #4a90e2, #50e3c2);\n color: white;\n padding: 4px 8px;\n font-size: 11px;\n font-family: 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, 'Courier New', monospace;\n z-index: 10000;\n border-radius: 0 0 4px 0;\n font-weight: 600;\n }\n\n /* Sandbox state indicators */\n :host([data-sandbox-state=\"stable\"]) {\n --wu-isolation-state: stable;\n }\n\n :host([data-sandbox-state=\"healing\"]) {\n --wu-dimensional-stability: healing;\n animation: sandboxHealing 1s ease-in-out infinite;\n }\n\n @keyframes sandboxHealing {\n 0%, 100% { filter: hue-rotate(0deg); }\n 50% { filter: hue-rotate(180deg); }\n }\n `;\n }\n\n /**\n * 🛡️ Crear JS Sandbox avanzado.\n * @param {string} appName - Nombre de la app\n * @returns {WuProxySandbox} Sandbox JS\n */\n createAdvancedJSSandbox(appName) {\n const jsSandbox = new WuProxySandbox(appName);\n logger.wuDebug(`Created ProxySandbox for ${appName}`);\n this.jsSandboxes.set(appName, jsSandbox);\n return jsSandbox;\n }\n\n /**\n * Agregar estilos personalizados al sandbox\n * @param {string} appName - Nombre de la aplicación\n * @param {string} css - CSS a agregar\n */\n addStyles(appName, css) {\n const sandbox = this.sandboxes.get(appName);\n if (!sandbox) {\n logger.wuWarn(`Sandbox not found for: ${appName}`);\n return;\n }\n\n const styleElement = document.createElement('style');\n styleElement.textContent = css;\n styleElement.setAttribute('wu-custom-styles', '');\n\n sandbox.shadowRoot.appendChild(styleElement);\n logger.wuDebug(`Custom styles added to ${appName}`);\n }\n\n /**\n * Cargar estilos externos en el sandbox\n * @param {string} appName - Nombre de la aplicación\n * @param {string} href - URL del CSS\n */\n loadExternalStyles(appName, href) {\n const sandbox = this.sandboxes.get(appName);\n if (!sandbox) {\n logger.wuWarn(`Sandbox not found for: ${appName}`);\n return;\n }\n\n const linkElement = document.createElement('link');\n linkElement.rel = 'stylesheet';\n linkElement.href = href;\n linkElement.setAttribute('wu-external-styles', '');\n\n sandbox.shadowRoot.appendChild(linkElement);\n logger.wuDebug(`External styles loaded in ${appName}: ${href}`);\n }\n\n /**\n * Establecer modo debug para un sandbox\n * @param {string} appName - Nombre de la aplicación\n * @param {boolean} enabled - Activar/desactivar debug\n */\n setDebugMode(appName, enabled = true) {\n const sandbox = this.sandboxes.get(appName);\n if (!sandbox) {\n logger.wuWarn(`Sandbox not found for: ${appName}`);\n return;\n }\n\n if (enabled) {\n sandbox.hostContainer.setAttribute('wu-debug', '');\n sandbox.hostContainer.setAttribute('wu-app', appName);\n } else {\n sandbox.hostContainer.removeAttribute('wu-debug');\n sandbox.hostContainer.removeAttribute('wu-app');\n }\n\n logger.wuDebug(`Debug mode ${enabled ? 'enabled' : 'disabled'} for ${appName}`);\n }\n\n /**\n * Limpiar y destruir sandbox\n * @param {Object} sandbox - Sandbox a limpiar\n */\n cleanup(sandbox) {\n if (!sandbox) return;\n\n const { appName, shadowRoot, hostContainer, jsSandbox } = sandbox;\n\n logger.wuDebug(`Cleaning up sandbox for: ${appName}`);\n\n try {\n // 🛡️ NUEVO: Desactivar JS Sandbox\n if (jsSandbox && jsSandbox.isActive()) {\n jsSandbox.deactivate();\n logger.wuDebug(`JS Sandbox deactivated for ${appName}`);\n }\n\n // Desconectar MutationObserver de estilos (fully-isolated mode)\n // Sin esto, el observer sigue escuchando document.head y mantiene\n // referencias al shadowRoot por closure → leak por cada mount.\n if (sandbox.styleObserver) {\n try {\n sandbox.styleObserver.disconnect();\n } catch (err) {\n logger.wuWarn(`Failed to disconnect styleObserver for ${appName}: ${err}`);\n }\n sandbox.styleObserver = null;\n }\n\n // Shared mode: unsubscribe from the shared style observer so this app's\n // callback stops firing. Other apps keep their subscriptions intact.\n if (typeof sandbox.unsubscribeStyleChanges === 'function') {\n try { sandbox.unsubscribeStyleChanges(); } catch (err) {\n logger.wuWarn(`Failed to unsubscribe style changes for ${appName}: ${err}`);\n }\n sandbox.unsubscribeStyleChanges = null;\n }\n\n // Desregistrar app del styleBridge si estaba en fully-isolated\n if (this.styleBridge?.unregisterFullyIsolatedApp) {\n this.styleBridge.unregisterFullyIsolatedApp(appName);\n }\n\n // Limpiar eventos y observers\n this.cleanupEventListeners(sandbox);\n\n // Limpiar contenido del Shadow DOM\n if (shadowRoot) {\n shadowRoot.innerHTML = '';\n }\n\n // Remover atributos del host\n if (hostContainer) {\n hostContainer.removeAttribute('wu-debug');\n hostContainer.removeAttribute('wu-app');\n hostContainer.removeAttribute('wu-no-scroll');\n }\n\n // Remover del registro\n this.sandboxes.delete(appName);\n this.jsSandboxes.delete(appName);\n\n logger.wuDebug(`Sandbox cleaned up: ${appName}`);\n\n } catch (error) {\n logger.wuError(`Error cleaning up sandbox ${appName}: ${error}`);\n }\n }\n\n /**\n * Limpiar event listeners del sandbox\n * @param {Object} sandbox - Sandbox a limpiar\n */\n cleanupEventListeners(sandbox) {\n // Remover todos los event listeners del Shadow DOM\n const { shadowRoot } = sandbox;\n if (!shadowRoot) return;\n\n // Clonar nodos para remover todos los event listeners\n const elements = shadowRoot.querySelectorAll('*');\n elements.forEach(element => {\n if (element.cloneNode) {\n const clone = element.cloneNode(true);\n element.parentNode?.replaceChild(clone, element);\n }\n });\n }\n\n /**\n * Obtener información de un sandbox\n * @param {string} appName - Nombre de la aplicación\n * @returns {Object} Información del sandbox\n */\n getSandboxInfo(appName) {\n const sandbox = this.sandboxes.get(appName);\n if (!sandbox) return null;\n\n return {\n appName: sandbox.appName,\n created: sandbox.created,\n hasContainer: !!sandbox.container,\n hasShadowRoot: !!sandbox.shadowRoot,\n elementCount: sandbox.shadowRoot?.children?.length || 0,\n uptime: Date.now() - sandbox.created\n };\n }\n\n /**\n * Obtener estadísticas de todos los sandboxes\n */\n getStats() {\n return {\n strategy: this.sandboxStrategy,\n total: this.sandboxes.size,\n sandboxes: Array.from(this.sandboxes.keys()),\n jsSandboxes: Array.from(this.jsSandboxes.keys()),\n details: Array.from(this.sandboxes.entries()).map(([name, sandbox]) => ({\n name,\n uptime: Date.now() - sandbox.created,\n elements: sandbox.shadowRoot?.children?.length || 0,\n hasJsSandbox: !!sandbox.jsSandbox,\n jsSandboxActive: sandbox.jsSandbox?.isActive() || false\n }))\n };\n }\n\n /**\n * Limpiar todos los sandboxes\n */\n cleanupAll() {\n logger.wuDebug(`Cleaning up all ${this.sandboxes.size} sandboxes...`);\n\n for (const [appName, sandbox] of this.sandboxes) {\n this.cleanup(sandbox);\n }\n\n // Limpiar StyleBridge\n if (this.styleBridge) {\n this.styleBridge.cleanup();\n }\n\n logger.wuDebug('All sandboxes cleaned up');\n }\n\n /**\n * 🎨 CONFIGURAR STYLE BRIDGE: Configura el sistema de compartición de estilos\n * @param {Object} config - Configuración del StyleBridge\n */\n configureStyleSharing(config) {\n if (this.styleBridge) {\n this.styleBridge.configure(config);\n logger.wuDebug('StyleBridge configured');\n }\n }\n\n /**\n * 📊 OBTENER ESTADÍSTICAS DE ESTILOS: Info sobre estilos compartidos\n * @returns {Object}\n */\n getStyleStats() {\n return this.styleBridge ? this.styleBridge.getStats() : null;\n }\n\n /**\n * 🔄 RE-INYECTAR ESTILOS: Vuelve a inyectar estilos en un sandbox\n * @param {string} appName - Nombre de la aplicación\n */\n async reinjectStyles(appName) {\n const sandbox = this.sandboxes.get(appName);\n if (!sandbox || !sandbox.shadowRoot) {\n logger.wuWarn(`Cannot reinject styles for ${appName}`);\n return;\n }\n\n const styleMode = sandbox.styleMode;\n\n // 🔒 MODO ISOLATED: No reinyectar estilos - la app maneja sus propios estilos\n if (styleMode === 'isolated') {\n logger.wuDebug(`Skipping reinject for ${appName} (isolated mode - app manages own styles)`);\n return;\n }\n\n // 🛡️ MODO FULLY-ISOLATED: Reinyectar SOLO estilos propios\n if (styleMode === 'fully-isolated') {\n logger.wuDebug(`Reinjecting OWN styles for ${appName} (fully-isolated)...`);\n const appUrl = sandbox.appUrl || sandbox.manifest?.name ? `/${sandbox.manifest.name}/` : `/${appName}/`;\n const count = await this.injectOwnStylesToShadow(sandbox.shadowRoot, appName, appUrl);\n logger.wuDebug(`Reinjected ${count} own styles for ${appName}`);\n return;\n }\n\n // 🌐 MODO SHARED: Reinyectar todos los estilos compartidos\n logger.wuDebug(`Reinjecting shared styles for ${appName}...`);\n const count = await this.styleBridge.injectStylesIntoShadow(\n sandbox.shadowRoot,\n appName,\n styleMode\n );\n logger.wuDebug(`Reinjected ${count} shared styles`);\n }\n\n /**\n * 🎨 INYECTAR ESTILOS PROPIOS: Inyecta SOLO los estilos propios de una app en su Shadow DOM\n * Usado para apps en modo fully-isolated\n * @param {ShadowRoot} shadowRoot - Shadow DOM donde inyectar\n * @param {string} appName - Nombre de la app\n * @param {string} appUrl - URL base de la app\n * @returns {Promise<number>} Número de estilos inyectados\n */\n async injectOwnStylesToShadow(shadowRoot, appName, appUrl) {\n if (!shadowRoot) return 0;\n\n let injectedCount = 0;\n\n // Buscar TODOS los estilos en el head\n const allStyles = document.querySelectorAll('style');\n const normalizedAppName = appName.toLowerCase();\n\n // Patrones para detectar estilos de esta app (Windows y Unix paths)\n // IMPORTANTE: Debe coincidir SOLO con packages/appName/ al inicio del path del paquete\n // NO debe coincidir con packages/shell/src/components/learning/ (eso es del shell)\n const appPatterns = [\n // Patrón específico: packages/learning/src o packages\\learning\\src\n // El src/ es clave para asegurar que es el MFE, no un subdirectorio de otro package\n new RegExp(`packages[/\\\\\\\\]${normalizedAppName}[/\\\\\\\\]src[/\\\\\\\\]`, 'i')\n ];\n\n logger.wuDebug(`Searching own styles for ${appName}, found ${allStyles.length} style tags in head`);\n\n // Log para debug: mostrar estilos que contienen el nombre de la app\n let matchingCount = 0;\n for (const s of allStyles) {\n const vid = s.getAttribute('data-vite-dev-id') || '';\n if (vid.toLowerCase().includes(normalizedAppName)) {\n matchingCount++;\n }\n }\n if (matchingCount > 0) {\n logger.wuDebug(`Found ${matchingCount} styles potentially matching ${appName}`);\n }\n\n for (const style of allStyles) {\n // NO saltar basándose en data-wu-injected del head - eso se pone en los clones del shadow DOM\n\n const viteId = style.getAttribute('data-vite-dev-id') || '';\n const normalizedViteId = viteId.replace(/\\\\/g, '/').toLowerCase();\n\n // Verificar si el estilo pertenece a esta app\n let belongsToApp = false;\n\n // 1. Por data-vite-dev-id (la forma más confiable)\n if (viteId) {\n // Revisar si el path contiene packages/appName/\n for (const pattern of appPatterns) {\n if (pattern instanceof RegExp) {\n if (pattern.test(viteId)) {\n belongsToApp = true;\n break;\n }\n } else {\n if (normalizedViteId.includes(pattern.toLowerCase())) {\n belongsToApp = true;\n break;\n }\n }\n }\n }\n\n if (belongsToApp) {\n // Verificar si ya existe en el Shadow DOM\n const existingStyle = shadowRoot.querySelector(`style[data-vite-dev-id=\"${viteId}\"]`);\n\n if (!existingStyle) {\n const clonedStyle = style.cloneNode(true);\n clonedStyle.setAttribute('data-wu-injected', 'true');\n shadowRoot.insertBefore(clonedStyle, shadowRoot.firstChild);\n injectedCount++;\n const styleName = viteId.substring(viteId.lastIndexOf('/') + 1) || viteId.substring(viteId.lastIndexOf('\\\\') + 1);\n logger.wuDebug(`Injected own style for ${appName}: ${styleName}`);\n }\n }\n }\n\n logger.wuDebug(`Total own styles injected for ${appName}: ${injectedCount}`);\n return injectedCount;\n }\n\n /**\n * 🎨 FALLBACK: Inyectar estilos que contengan el nombre de la app\n * Usado como último recurso cuando no se encuentran los estilos con el patrón exacto\n * @param {ShadowRoot} shadowRoot - Shadow DOM donde inyectar\n * @param {string} appName - Nombre de la app (para logging)\n * @returns {number} Número de estilos inyectados\n */\n injectAllStylesToShadow(shadowRoot, appName) {\n if (!shadowRoot) return 0;\n\n let injectedCount = 0;\n const normalizedAppName = appName.toLowerCase();\n\n // Inyectar estilos que contengan el nombre de la app en su vite-id\n const allStyles = document.querySelectorAll('style');\n for (const style of allStyles) {\n const viteId = style.getAttribute('data-vite-dev-id') || '';\n\n // Solo inyectar si contiene el nombre de la app\n if (!viteId.toLowerCase().includes(normalizedAppName)) continue;\n\n // Verificar si ya existe en el shadow DOM\n if (shadowRoot.querySelector(`style[data-vite-dev-id=\"${viteId}\"]`)) continue;\n\n const clonedStyle = style.cloneNode(true);\n clonedStyle.setAttribute('data-wu-fallback', 'true');\n shadowRoot.insertBefore(clonedStyle, shadowRoot.firstChild);\n injectedCount++;\n const styleName = viteId.split('/').pop() || viteId.split('\\\\').pop();\n logger.wuDebug(`FALLBACK injected: ${styleName}`);\n }\n\n logger.wuDebug(`FALLBACK: Total ${injectedCount} styles injected for ${appName}`);\n return injectedCount;\n }\n}\n","/**\n * 📋 WU-MANIFEST: SECURE MANIFEST SYSTEM\n * Validación estricta de wu.json para seguridad\n */\n\nimport { logger } from './wu-logger.js';\n\nexport class WuManifest {\n constructor() {\n this.cache = new Map();\n this.schemas = new Map();\n\n // 🔐 Configuración de seguridad\n this.security = {\n maxManifestSize: 100 * 1024, // 100KB máximo\n maxNameLength: 50,\n maxEntryLength: 200,\n maxExports: 100,\n maxImports: 50,\n maxRoutes: 100,\n // Patrones peligrosos en paths\n dangerousPatterns: [\n /\\.\\./, // Path traversal\n /^\\/etc\\//, // System paths\n /^\\/proc\\//,\n /^file:\\/\\//, // File protocol\n /javascript:/i, // JS injection\n /data:/i, // Data URLs\n /<script/i, // Script tags\n /on\\w+\\s*=/i // Event handlers\n ],\n // Dominios bloqueados\n blockedDomains: [\n 'evil.com',\n 'malware.com'\n ]\n };\n\n this.defineSchema();\n }\n\n /**\n * Definir schema de validación para wu.json\n */\n defineSchema() {\n this.schemas.set('wu.json', {\n required: ['name', 'entry'],\n optional: ['wu'],\n wu: {\n optional: ['exports', 'imports', 'routes', 'permissions'],\n exports: 'object',\n imports: 'array',\n routes: 'array',\n permissions: 'array'\n }\n });\n }\n\n /**\n * Cargar manifest desde URL\n * @param {string} appUrl - URL base de la aplicación\n * @returns {Object} Manifest parseado y validado\n */\n async load(appUrl) {\n const manifestUrl = `${appUrl}/wu.json`;\n\n logger.debug(`[WuManifest] 📥 Loading manifest: ${manifestUrl}`);\n\n try {\n // Verificar cache\n if (this.cache.has(manifestUrl)) {\n logger.debug(`[WuManifest] ⚡ Cache hit: ${manifestUrl}`);\n return this.cache.get(manifestUrl);\n }\n\n // Cargar manifest with timeout to avoid hanging on slow servers\n const response = await fetch(manifestUrl, {\n cache: 'no-cache',\n headers: {\n 'Accept': 'application/json'\n },\n signal: AbortSignal.timeout(10000)\n });\n\n if (!response.ok) {\n // Si no hay manifest, crear uno básico\n if (response.status === 404) {\n logger.debug(`[WuManifest] 📄 No manifest found, creating default for: ${appUrl}`);\n return this.createDefaultManifest(appUrl);\n }\n\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const manifestText = await response.text();\n\n // 🔐 Validar tamaño del manifest\n if (manifestText.length > this.security.maxManifestSize) {\n throw new Error(`Manifest too large (${manifestText.length} bytes, max ${this.security.maxManifestSize})`);\n }\n\n // 🔐 Intentar parsear JSON de forma segura\n let manifest;\n try {\n manifest = JSON.parse(manifestText);\n } catch (parseError) {\n throw new Error(`Invalid JSON in manifest: ${parseError.message}`);\n }\n\n // Validar manifest\n const validatedManifest = this.validate(manifest);\n\n // Cachear resultado\n this.cache.set(manifestUrl, validatedManifest);\n\n logger.debug(`[WuManifest] ✅ Manifest loaded: ${manifest.name}`);\n return validatedManifest;\n\n } catch (error) {\n console.error(`[WuManifest] ❌ Failed to load manifest: ${manifestUrl}`, error);\n\n // En caso de error, intentar crear manifest por defecto\n try {\n return this.createDefaultManifest(appUrl);\n } catch (defaultError) {\n throw new Error(`Failed to load manifest from ${manifestUrl}: ${error.message}`);\n }\n }\n }\n\n /**\n * Crear manifest por defecto cuando no existe wu.json\n * @param {string} appUrl - URL de la aplicación\n * @returns {Object} Manifest por defecto\n */\n createDefaultManifest(appUrl) {\n // Extraer nombre de la app de la URL\n const appName = this.extractAppNameFromUrl(appUrl);\n\n const defaultManifest = {\n name: appName,\n entry: 'index.js',\n wu: {\n exports: {},\n imports: [],\n routes: [],\n permissions: []\n }\n };\n\n logger.debug(`[WuManifest] 🔧 Created default manifest for: ${appName}`);\n return defaultManifest;\n }\n\n /**\n * Extraer nombre de app desde URL\n * @param {string} url - URL de la aplicación\n * @returns {string} Nombre de la aplicación\n */\n extractAppNameFromUrl(url) {\n try {\n const urlObj = new URL(url);\n const pathSegments = urlObj.pathname.split('/').filter(Boolean);\n\n // Usar el último segmento como nombre de la app\n return pathSegments[pathSegments.length - 1] || 'unknown-app';\n } catch {\n // Si no es una URL válida, usar como está\n return url.replace(/[^a-zA-Z0-9-]/g, '') || 'unknown-app';\n }\n }\n\n /**\n * 🔐 SANITIZE STRING: Limpiar string de caracteres peligrosos\n */\n _sanitizeString(str) {\n if (typeof str !== 'string') return '';\n return str\n .replace(/[<>'\"]/g, '') // Remove HTML chars\n .replace(/[\\x00-\\x1F\\x7F]/g, '') // Remove control chars\n .trim();\n }\n\n /**\n * 🔐 CHECK DANGEROUS PATTERNS: Verificar patrones peligrosos\n */\n _hasDangerousPatterns(str) {\n if (typeof str !== 'string') return false;\n return this.security.dangerousPatterns.some(pattern => pattern.test(str));\n }\n\n /**\n * 🔐 VALIDATE URL: Verificar que URL es segura\n */\n _isUrlSafe(url) {\n if (typeof url !== 'string') return false;\n\n // Verificar patrones peligrosos\n if (this._hasDangerousPatterns(url)) {\n return false;\n }\n\n // Verificar dominios bloqueados\n try {\n const urlObj = new URL(url, 'http://localhost');\n if (this.security.blockedDomains.some(d => urlObj.hostname.includes(d))) {\n return false;\n }\n } catch {\n // Si no es URL válida, verificar como path\n if (this._hasDangerousPatterns(url)) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Validar manifest contra schema con validación de seguridad\n * @param {Object} manifest - Manifest a validar\n * @returns {Object} Manifest validado\n */\n validate(manifest) {\n const schema = this.schemas.get('wu.json');\n\n // 🔐 Verificar que manifest es un objeto\n if (!manifest || typeof manifest !== 'object' || Array.isArray(manifest)) {\n throw new Error('Manifest must be a valid object');\n }\n\n // Verificar campos requeridos\n for (const field of schema.required) {\n if (!manifest[field]) {\n throw new Error(`Required field missing: ${field}`);\n }\n }\n\n // 🔐 Validar nombre\n if (typeof manifest.name !== 'string') {\n throw new Error('name must be a string');\n }\n if (manifest.name.length > this.security.maxNameLength) {\n throw new Error(`name too long (max ${this.security.maxNameLength} chars)`);\n }\n if (this._hasDangerousPatterns(manifest.name)) {\n throw new Error('name contains dangerous patterns');\n }\n\n // 🔐 Validar entry\n if (typeof manifest.entry !== 'string') {\n throw new Error('entry must be a string');\n }\n if (manifest.entry.length > this.security.maxEntryLength) {\n throw new Error(`entry too long (max ${this.security.maxEntryLength} chars)`);\n }\n if (!this._isUrlSafe(manifest.entry)) {\n throw new Error('entry contains dangerous patterns');\n }\n\n // Verificar tipos en sección wu\n if (manifest.wu) {\n const wu = manifest.wu;\n\n if (wu.exports && typeof wu.exports !== 'object') {\n throw new Error('wu.exports must be an object');\n }\n\n // 🔐 Validar límites de exports\n if (wu.exports && Object.keys(wu.exports).length > this.security.maxExports) {\n throw new Error(`Too many exports (max ${this.security.maxExports})`);\n }\n\n // 🔐 Validar cada export path\n if (wu.exports) {\n for (const [key, path] of Object.entries(wu.exports)) {\n if (!this._isUrlSafe(path)) {\n throw new Error(`Dangerous export path: ${key}`);\n }\n }\n }\n\n if (wu.imports && !Array.isArray(wu.imports)) {\n throw new Error('wu.imports must be an array');\n }\n\n // 🔐 Validar límites de imports\n if (wu.imports && wu.imports.length > this.security.maxImports) {\n throw new Error(`Too many imports (max ${this.security.maxImports})`);\n }\n\n if (wu.routes && !Array.isArray(wu.routes)) {\n throw new Error('wu.routes must be an array');\n }\n\n // 🔐 Validar límites de routes\n if (wu.routes && wu.routes.length > this.security.maxRoutes) {\n throw new Error(`Too many routes (max ${this.security.maxRoutes})`);\n }\n\n if (wu.permissions && !Array.isArray(wu.permissions)) {\n throw new Error('wu.permissions must be an array');\n }\n }\n\n // Validate optional fields.\n // Accept both v1 names ('isolated', 'fully-isolated') and v2 aliases\n // ('none', 'own-only'). The sandbox layer normalizes aliases at use.\n if (manifest.styleMode !== undefined) {\n const validModes = ['shared', 'isolated', 'fully-isolated', 'none', 'own-only'];\n if (!validModes.includes(manifest.styleMode)) {\n logger.warn(`[WuManifest] Invalid styleMode \"${manifest.styleMode}\", defaulting to \"shared\". Valid: ${validModes.join(', ')}`);\n manifest.styleMode = 'shared';\n }\n }\n\n if (manifest.version !== undefined && typeof manifest.version !== 'string') {\n logger.warn('[WuManifest] version must be a string, ignoring');\n delete manifest.version;\n }\n\n if (manifest.folder !== undefined) {\n if (typeof manifest.folder !== 'string') {\n logger.warn('[WuManifest] folder must be a string, ignoring');\n delete manifest.folder;\n } else if (this._hasDangerousPatterns(manifest.folder)) {\n throw new Error('folder contains dangerous patterns');\n }\n }\n\n // Normalizar y limpiar manifest\n return this.normalize(manifest);\n }\n\n /**\n * Normalizar manifest\n * @param {Object} manifest - Manifest a normalizar\n * @returns {Object} Manifest normalizado\n */\n normalize(manifest) {\n const normalized = {\n name: manifest.name.trim(),\n entry: this.normalizeEntry(manifest.entry),\n wu: {\n exports: manifest.wu?.exports || {},\n imports: manifest.wu?.imports || [],\n routes: manifest.wu?.routes || [],\n permissions: manifest.wu?.permissions || []\n }\n };\n\n // Preservar campos opcionales del manifest (styleMode, version, folder, etc.)\n if (manifest.styleMode) {\n normalized.styleMode = manifest.styleMode;\n }\n if (manifest.version) {\n normalized.version = manifest.version;\n }\n if (manifest.folder) {\n normalized.folder = manifest.folder;\n }\n\n // Normalizar exports\n if (normalized.wu.exports) {\n const normalizedExports = {};\n for (const [key, path] of Object.entries(normalized.wu.exports)) {\n normalizedExports[key] = this.normalizeComponentPath(path);\n }\n normalized.wu.exports = normalizedExports;\n }\n\n // Validar imports\n normalized.wu.imports = normalized.wu.imports.filter(imp => {\n if (typeof imp !== 'string' || !imp.includes('.')) {\n logger.warn(`[WuManifest] Invalid import format: ${imp}`);\n return false;\n }\n return true;\n });\n\n return normalized;\n }\n\n /**\n * Normalizar entry path\n * @param {string} entry - Entry path\n * @returns {string} Entry normalizado\n */\n normalizeEntry(entry) {\n if (!entry) return 'index.js';\n\n let normalized = entry.trim();\n\n // Remover ./ inicial si está presente\n if (normalized.startsWith('./')) {\n normalized = normalized.substring(2);\n }\n\n // Agregar extensión si no la tiene\n if (!normalized.includes('.')) {\n normalized += '.js';\n }\n\n return normalized;\n }\n\n /**\n * Normalizar path de componente\n * @param {string} path - Path del componente\n * @returns {string} Path normalizado\n */\n normalizeComponentPath(path) {\n if (!path) return '';\n\n let normalized = path.trim();\n\n // Remover ./ inicial si está presente\n if (normalized.startsWith('./')) {\n normalized = normalized.substring(2);\n }\n\n // Agregar extensión si no la tiene\n if (!normalized.includes('.')) {\n normalized += '.js';\n }\n\n return normalized;\n }\n\n /**\n * Validar dependencias de imports\n * @param {Array} imports - Lista de imports\n * @param {Map} availableApps - Apps disponibles\n * @returns {Object} Resultado de validación\n */\n validateDependencies(imports, availableApps) {\n const result = {\n valid: [],\n invalid: [],\n missing: []\n };\n\n for (const importPath of imports) {\n const [appName, componentName] = importPath.split('.');\n\n if (!appName || !componentName) {\n result.invalid.push({\n import: importPath,\n reason: 'Invalid format. Use \"app.component\"'\n });\n continue;\n }\n\n const app = availableApps.get(appName);\n if (!app) {\n result.missing.push({\n import: importPath,\n app: appName,\n reason: 'App not registered'\n });\n continue;\n }\n\n const manifest = app.manifest;\n const exportExists = manifest?.wu?.exports?.[componentName];\n\n if (!exportExists) {\n result.invalid.push({\n import: importPath,\n reason: `Component ${componentName} not exported by ${appName}`\n });\n continue;\n }\n\n result.valid.push({\n import: importPath,\n app: appName,\n component: componentName,\n path: exportExists\n });\n }\n\n return result;\n }\n\n /**\n * Crear manifest programáticamente\n * @param {string} name - Nombre de la app\n * @param {Object} config - Configuración\n * @returns {Object} Manifest creado\n */\n create(name, config = {}) {\n const manifest = {\n name: name,\n entry: config.entry || 'index.js',\n wu: {\n exports: config.exports || {},\n imports: config.imports || [],\n routes: config.routes || [],\n permissions: config.permissions || []\n }\n };\n\n return this.normalize(manifest);\n }\n\n /**\n * Limpiar cache de manifests\n * @param {string} pattern - Patrón opcional para limpiar URLs específicas\n */\n clearCache(pattern) {\n if (pattern) {\n let regex;\n try {\n regex = new RegExp(pattern);\n } catch (err) {\n logger.warn(`[WuManifest] Invalid clearCache pattern: ${pattern} (${err.message})`);\n return;\n }\n for (const [url] of this.cache) {\n if (regex.test(url)) {\n this.cache.delete(url);\n logger.debug(`[WuManifest] 🗑️ Cleared cache for: ${url}`);\n }\n }\n } else {\n this.cache.clear();\n logger.debug(`[WuManifest] 🗑️ Manifest cache cleared completely`);\n }\n }\n\n /**\n * Obtener estadísticas del sistema de manifests\n */\n getStats() {\n return {\n cached: this.cache.size,\n schemas: this.schemas.size,\n cacheKeys: Array.from(this.cache.keys())\n };\n }\n}","/**\n * 🚀 WU-STORE: Ultra-High Performance State Management\n *\n * Basado en patrones de Disruptor y Vert.x\n * - Ring Buffer para zero-allocation\n * - Lock-free operations\n * - Event Bus para pub/sub\n * - API minimalista: get(), set(), on()\n */\n\n/**\n * @typedef {Object} WuStoreMetrics\n * @property {number} reads - Total read operations\n * @property {number} writes - Total write operations\n * @property {number} notifications - Total notifications sent\n * @property {number} bufferUtilization - Ring buffer utilization (0-1)\n * @property {number} listenerCount - Active listener count\n */\n\nexport class WuStore {\n constructor(bufferSize = 256) {\n // Ring Buffer configuration\n this.bufferSize = this.nextPowerOfTwo(bufferSize);\n this.mask = this.bufferSize - 1;\n this.buffer = new Array(this.bufferSize);\n this.cursor = 0;\n\n // State storage\n this.state = {};\n\n // Event listeners map: path -> Set of callbacks\n this.listeners = new Map();\n\n // Pattern listeners for wildcards\n this.patternListeners = new Map();\n\n // Performance metrics\n this.metrics = {\n reads: 0,\n writes: 0,\n notifications: 0\n };\n\n // Initialize ring buffer slots\n for (let i = 0; i < this.bufferSize; i++) {\n this.buffer[i] = { path: null, value: null, timestamp: 0 };\n }\n\n // No global pollution - proper library architecture\n }\n\n /**\n * Get value from store\n * @param {string} path - Dot notation path (e.g., 'user.name')\n * @returns {*} Value at path or entire state if no path\n */\n get(path) {\n this.metrics.reads++;\n\n if (!path) return this.state;\n\n // Reject __proto__/constructor/prototype to prevent leaking internals.\n // We return undefined rather than throwing — get() is read-only.\n const keys = path.split('.');\n if (!keys.every(WuStore._isSafeKey)) return undefined;\n\n return keys.reduce((obj, key) => obj?.[key], this.state);\n }\n\n /**\n * Set value in store with Ring Buffer\n * @param {string} path - Dot notation path\n * @param {*} value - Value to set\n * @returns {number} Sequence number\n */\n set(path, value) {\n this.metrics.writes++;\n\n // Reject paths that would pollute Object.prototype.\n // Throws so the caller gets a clear signal instead of a silent no-op.\n if (path) {\n const keys = path.split('.');\n for (const k of keys) {\n if (!WuStore._isSafeKey(k)) {\n throw new Error(`[WuStore] Unsafe key in path: \"${k}\" (path: \"${path}\")`);\n }\n }\n }\n\n // Write to ring buffer. Cursor is monotonic (returned as sequence number),\n // index wraps via `& mask`. The previous `% (bufferSize * bufferSize)` was\n // an arbitrary modulus that distorted bufferUtilization metrics — replaced\n // by a plain increment. At 1M writes/sec it takes >285 years to overflow.\n const sequence = this.cursor;\n this.cursor = this.cursor + 1;\n const index = sequence & this.mask;\n\n // Reuse buffer slot (zero allocation)\n const event = this.buffer[index];\n event.path = path;\n event.value = value;\n event.timestamp = performance.now();\n\n // Update state synchronously\n this.updateState(path, value);\n\n // Schedule async notifications (non-blocking)\n queueMicrotask(() => {\n this.notify(path, value);\n this.notifyPatterns(path, value);\n });\n\n return sequence;\n }\n\n /**\n * Subscribe to state changes\n * @param {string} pattern - Path or pattern (supports * wildcard)\n * @param {Function} callback - Callback function\n * @returns {Function} Unsubscribe function\n */\n on(pattern, callback) {\n // Check if pattern contains wildcards\n if (pattern.includes('*')) {\n // Pattern subscription\n if (!this.patternListeners.has(pattern)) {\n this.patternListeners.set(pattern, new Set());\n }\n this.patternListeners.get(pattern).add(callback);\n\n // Return unsubscribe function\n return () => {\n const listeners = this.patternListeners.get(pattern);\n if (listeners) {\n listeners.delete(callback);\n if (listeners.size === 0) {\n this.patternListeners.delete(pattern);\n }\n }\n };\n } else {\n // Direct path subscription\n if (!this.listeners.has(pattern)) {\n this.listeners.set(pattern, new Set());\n }\n this.listeners.get(pattern).add(callback);\n\n // Return unsubscribe function\n return () => {\n const listeners = this.listeners.get(pattern);\n if (listeners) {\n listeners.delete(callback);\n if (listeners.size === 0) {\n this.listeners.delete(pattern);\n }\n }\n };\n }\n }\n\n /**\n * Batch set multiple values\n * @param {Object} updates - Object with path:value pairs\n */\n batch(updates) {\n const sequences = [];\n\n for (const [path, value] of Object.entries(updates)) {\n sequences.push(this.set(path, value));\n }\n\n return sequences;\n }\n\n /**\n * Get current metrics\n * @returns {Object} Performance metrics\n */\n getMetrics() {\n // Once we've written at least `bufferSize` entries, the ring is fully\n // utilized (every slot has been touched). Before that, utilization grows\n // linearly with writes. Old metric divided `cursor / bufferSize` which\n // grew unboundedly because cursor is monotonic now.\n const utilization = Math.min(1, this.cursor / this.bufferSize);\n return {\n ...this.metrics,\n bufferUtilization: utilization,\n sequenceNumber: this.cursor,\n bufferSize: this.bufferSize,\n listenerCount: this.listeners.size + this.patternListeners.size\n };\n }\n\n // Private methods\n\n /**\n * Reject keys that would let a path traverse into Object.prototype.\n * Called by both set() (write guard) and get() (read guard).\n * @private\n */\n static _isSafeKey(key) {\n return key !== '__proto__' && key !== 'constructor' && key !== 'prototype';\n }\n\n nextPowerOfTwo(n) {\n return Math.pow(2, Math.ceil(Math.log2(n)));\n }\n\n updateState(path, value) {\n if (!path) {\n this.state = value;\n return;\n }\n\n const keys = path.split('.');\n // Defense in depth — set() already rejects unsafe paths, but updateState\n // is also reachable via batch() and future internals.\n if (!keys.every(WuStore._isSafeKey)) return;\n\n const last = keys.pop();\n\n // Create nested structure if needed. Use Object.create(null) for new\n // intermediates so they don't carry Object.prototype methods.\n let target = this.state;\n for (const key of keys) {\n if (\n !Object.prototype.hasOwnProperty.call(target, key) ||\n typeof target[key] !== 'object' ||\n target[key] === null\n ) {\n target[key] = {};\n }\n target = target[key];\n }\n\n target[last] = value;\n }\n\n notify(path, value) {\n this.metrics.notifications++;\n\n // Notify exact path listeners\n const exactListeners = this.listeners.get(path);\n if (exactListeners) {\n exactListeners.forEach(callback => {\n try {\n callback(value, path);\n } catch (error) {\n console.error('[WuStore] Listener error:', error);\n }\n });\n }\n\n // Notify parent path listeners\n const parts = path.split('.');\n for (let i = parts.length - 1; i > 0; i--) {\n const parentPath = parts.slice(0, i).join('.');\n const parentListeners = this.listeners.get(parentPath);\n if (parentListeners) {\n const parentValue = this.get(parentPath);\n parentListeners.forEach(callback => {\n try {\n callback(parentValue, parentPath);\n } catch (error) {\n console.error('[WuStore] Parent listener error:', error);\n }\n });\n }\n }\n }\n\n notifyPatterns(path, value) {\n // Check all pattern listeners\n for (const [pattern, listeners] of this.patternListeners) {\n if (this.matchesPattern(path, pattern)) {\n listeners.forEach(callback => {\n try {\n callback({ path, value });\n } catch (error) {\n console.error('[WuStore] Pattern listener error:', error);\n }\n });\n }\n }\n }\n\n matchesPattern(path, pattern) {\n // Convert pattern to regex\n // user.* matches user.name, user.email, etc.\n // *.name matches user.name, post.name, etc.\n // * matches everything\n\n if (pattern === '*') return true;\n\n const regexPattern = pattern\n .split('.')\n .map(part => part === '*' ? '[^.]+' : part.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'))\n .join('\\\\.');\n\n const regex = new RegExp(`^${regexPattern}$`);\n return regex.test(path);\n }\n\n /**\n * Clear all state and listeners\n */\n clear() {\n this.state = {};\n this.listeners.clear();\n this.patternListeners.clear();\n this.cursor = 0;\n\n // Clear buffer\n for (let i = 0; i < this.bufferSize; i++) {\n this.buffer[i].path = null;\n this.buffer[i].value = null;\n this.buffer[i].timestamp = 0;\n }\n }\n\n /**\n * Get recent events from ring buffer\n * @param {number} count - Number of recent events\n * @returns {Array} Recent events\n */\n getRecentEvents(count = 10) {\n const events = [];\n const start = Math.max(0, this.cursor - count);\n\n for (let i = start; i < this.cursor && events.length < count; i++) {\n const index = i & this.mask;\n const event = this.buffer[index];\n if (event.path) {\n events.push({\n path: event.path,\n value: event.value,\n timestamp: event.timestamp\n });\n }\n }\n\n return events.reverse();\n }\n}\n\n// Create singleton instance\nconst store = new WuStore();\n\n// Export both class and instance\nexport default store;\n","/**\n * 🎯 WU-APP: SIMPLIFIED API WRAPPER\n *\n * Wrapper simple para uso declarativo de microfrontends\n * Mantiene todo el core de wu-framework pero simplifica el uso\n */\nimport { logger } from './wu-logger.js';\n\n\nexport class WuApp {\n /**\n * @param {string} name - Nombre de la app\n * @param {Object} config - Configuración de la app\n * @param {string} config.url - URL donde está corriendo la app\n * @param {string} [config.container] - Selector del contenedor (opcional)\n * @param {Object} wu - Instancia de WuCore\n */\n constructor(name, config, wu) {\n this.name = name\n this.url = config.url\n this.container = config.container\n this.keepAlive = config.keepAlive || false\n this._wu = wu\n this._mounted = false\n this._autoInit = config.autoInit !== false // Default true\n\n // Auto-register app in wu-framework\n if (this._autoInit) {\n this._registerApp()\n }\n }\n\n /**\n * Registrar app en wu-framework\n * @private\n */\n _registerApp() {\n if (!this._wu.apps.has(this.name)) {\n this._wu.apps.set(this.name, {\n name: this.name,\n url: this.url,\n keepAlive: this.keepAlive,\n status: 'registered'\n })\n logger.debug(`📦 App registered: ${this.name} at ${this.url}`)\n }\n }\n\n /**\n * Montar la app en el contenedor\n * @param {string} [container] - Selector del contenedor (opcional, usa config.container si no se pasa)\n * @returns {Promise<void>}\n */\n async mount(container) {\n const targetContainer = container || this.container\n\n if (!targetContainer) {\n throw new Error(`Container not specified for app: ${this.name}`)\n }\n\n // Asegurar que wu-framework está inicializado\n if (!this._wu.isInitialized) {\n await this._wu.init({\n apps: [{ name: this.name, url: this.url }]\n })\n }\n\n // Montar usando wu-framework core\n await this._wu.mount(this.name, targetContainer)\n this._mounted = true\n\n return this\n }\n\n /**\n * Desmontar la app.\n * If keepAlive is configured, hides instead of destroying.\n *\n * @param {Object} [options] - { keepAlive, force }\n * @returns {Promise<WuApp>}\n */\n async unmount(options = {}) {\n if (!this._mounted && !this._wu.isHidden(this.name)) {\n logger.warn(`⚠️ App ${this.name} is not mounted`)\n return this\n }\n\n await this._wu.unmount(this.name, options)\n this._mounted = !this._wu.isHidden(this.name)\n\n return this\n }\n\n /**\n * Hide the app (keep-alive). Preserves all state for instant re-show.\n * @returns {Promise<WuApp>}\n */\n async hide() {\n if (!this._mounted) {\n logger.warn(`⚠️ App ${this.name} is not mounted`)\n return this\n }\n\n await this._wu.hide(this.name)\n this._mounted = false\n return this\n }\n\n /**\n * Show a hidden (keep-alive) app instantly.\n * @returns {Promise<WuApp>}\n */\n async show() {\n if (!this._wu.isHidden(this.name)) {\n logger.warn(`⚠️ App ${this.name} is not in keep-alive state`)\n return this\n }\n\n await this._wu.show(this.name)\n this._mounted = true\n return this\n }\n\n /**\n * Remontar la app (útil para recargas)\n * @param {string} [container] - Selector del contenedor\n * @returns {Promise<void>}\n */\n async remount(container) {\n await this.unmount({ force: true })\n await this.mount(container)\n return this\n }\n\n /**\n * Verificar si la app está montada\n * @returns {boolean}\n */\n get isMounted() {\n return this._mounted && this._wu.mounted?.has(this.name)\n }\n\n /**\n * Check if the app is in keep-alive (hidden) state\n * @returns {boolean}\n */\n get isHidden() {\n return this._wu.isHidden(this.name)\n }\n\n /**\n * Obtener información de la app\n * @returns {Object}\n */\n get info() {\n return {\n name: this.name,\n url: this.url,\n container: this.container,\n mounted: this.isMounted,\n status: this._wu.apps.get(this.name)?.status || 'unknown'\n }\n }\n\n /**\n * Recargar la app (limpiar cache y remontar)\n * @returns {Promise<void>}\n */\n async reload() {\n logger.debug(`🔄 Reloading app: ${this.name}`)\n\n await this.unmount()\n\n // Limpiar caches\n if (this._wu.loader?.clearCache) {\n this._wu.loader.clearCache(this.name)\n }\n if (this._wu.manifest?.clearCache) {\n this._wu.manifest.clearCache(this.name)\n }\n\n await this.mount()\n logger.debug(`✅ App reloaded: ${this.name}`)\n\n return this\n }\n\n /**\n * Verificar el estado de la app\n * @returns {Object}\n */\n async verify() {\n const container = document.querySelector(this.container)\n const hasShadowDOM = container?.shadowRoot !== null\n const hasContent = (container?.shadowRoot?.children?.length || 0) > 0\n\n return {\n name: this.name,\n mounted: this.isMounted,\n container: {\n found: !!container,\n selector: this.container,\n hasShadowDOM,\n hasContent\n },\n wu: {\n registered: this._wu.apps.has(this.name),\n mountedInWu: this._wu.mounted?.has(this.name)\n }\n }\n }\n\n /**\n * Shorthand para mount\n */\n async start(container) {\n return await this.mount(container)\n }\n\n /**\n * Shorthand para unmount\n */\n async stop() {\n return await this.unmount()\n }\n\n /**\n * Destruir la app completamente\n */\n async destroy() {\n await this.unmount({ force: true })\n this._wu.apps.delete(this.name)\n this._mounted = false\n logger.debug(`🗑️ App destroyed: ${this.name}`)\n }\n}\n","/**\n * 💾 WU-CACHE: SECURE INTERNAL CACHING\n *\n * Sistema de caché INTERNO con rate limiting.\n * - Rate limiting para prevenir abuso\n * - LRU eviction sobre cache en memoria\n * - Backing opcional en localStorage / sessionStorage\n * - TTL por entrada\n *\n * ⚠️ USO INTERNO: No exponer en API pública.\n *\n * Tamaños y límites:\n * `maxSize` (MB) acota la MEMORIA usada por el cache, no el storage del browser.\n * - localStorage típicamente da 5–10 MB por origen (varía por browser).\n * - sessionStorage similar.\n * Si configuras `storage: 'localStorage'` con `maxSize > 5`, el cache\n * evictará por LRU en memoria mucho antes de que el storage se llene, pero\n * QuotaExceededError aún puede ocurrir si otras partes del origen usan\n * localStorage. Cuando eso pasa, cleanOldStorageEntries borra el 25% más\n * antiguo y reintenta una vez.\n */\n\nimport { logger } from './wu-logger.js';\n\n// localStorage/sessionStorage realistic ceiling. Browsers vary (Safari ~5MB,\n// Chrome ~10MB, Firefox ~10MB). We warn if the user requests more than this\n// with a persistent backing so they know LRU eviction will dominate.\nconst STORAGE_PRACTICAL_LIMIT_MB = 5;\n\nexport class WuCache {\n constructor(options = {}) {\n this.config = {\n maxSize: options.maxSize || 50, // MB (in-memory cap)\n maxItems: options.maxItems || 100,\n defaultTTL: options.defaultTTL || 3600000, // 1 hour\n persistent: options.persistent !== false,\n storage: options.storage || 'memory'\n };\n\n // Diagnose misleading config: persistent storage with an oversized memory\n // cap. Logged once at construction so the user can correct it.\n const persistentStorage = this.config.storage === 'localStorage' || this.config.storage === 'sessionStorage';\n if (persistentStorage && this.config.persistent && this.config.maxSize > STORAGE_PRACTICAL_LIMIT_MB) {\n logger.wuWarn(\n `[WuCache] maxSize=${this.config.maxSize}MB configured with ${this.config.storage}, ` +\n `but browsers typically cap that backing at ~${STORAGE_PRACTICAL_LIMIT_MB}MB per origin. ` +\n `In-memory LRU will evict before storage fills. Consider maxSize ≤ ${STORAGE_PRACTICAL_LIMIT_MB} ` +\n `or storage: 'memory' for a large in-memory cache.`\n );\n }\n\n // 🔐 Rate limiting configuration\n this.rateLimiting = {\n enabled: options.rateLimiting !== false,\n maxOpsPerSecond: options.maxOpsPerSecond || 100,\n windowMs: 1000, // 1 second window\n cooldownMs: options.cooldownMs || 5000, // 5 second cooldown after limit\n operations: [],\n inCooldown: false,\n cooldownUntil: 0\n };\n\n // Rate limit notification flag (log only once per cooldown)\n this._rateLimitNotified = false;\n\n // Memory cache\n this.memoryCache = new Map();\n\n // LRU tracking\n this.accessOrder = new Map();\n\n // Statistics\n this.stats = {\n hits: 0,\n misses: 0,\n sets: 0,\n evictions: 0,\n size: 0,\n rateLimited: 0 // 🔐 Contador de operaciones rechazadas\n };\n }\n\n /**\n * 🔐 CHECK RATE LIMIT: Verificar si la operación está permitida\n * @returns {boolean} true si la operación está permitida\n */\n _checkRateLimit() {\n if (!this.rateLimiting.enabled) return true;\n\n const now = Date.now();\n\n // Verificar si estamos en cooldown\n if (this.rateLimiting.inCooldown) {\n if (now < this.rateLimiting.cooldownUntil) {\n this.stats.rateLimited++;\n return false;\n }\n // Cooldown terminado\n this.rateLimiting.inCooldown = false;\n this._rateLimitNotified = false;\n this.rateLimiting.operations = [];\n }\n\n // Limpiar operaciones antiguas (fuera de la ventana)\n const windowStart = now - this.rateLimiting.windowMs;\n this.rateLimiting.operations = this.rateLimiting.operations.filter(\n ts => ts > windowStart\n );\n\n // Verificar límite\n if (this.rateLimiting.operations.length >= this.rateLimiting.maxOpsPerSecond) {\n // Activar cooldown\n this.rateLimiting.inCooldown = true;\n this.rateLimiting.cooldownUntil = now + this.rateLimiting.cooldownMs;\n this.stats.rateLimited++;\n logger.warn(`[WuCache] 🚫 Rate limit exceeded. Cooldown for ${this.rateLimiting.cooldownMs}ms`);\n return false;\n }\n\n // Registrar operación\n this.rateLimiting.operations.push(now);\n return true;\n }\n\n /**\n * Handle rate-limited operations: log once per cooldown, return diagnostic object\n * @param {string} operation - The operation that was rate limited ('get' or 'set')\n * @param {string} key - The cache key that was rejected\n * @returns {{ rateLimited: true, operation: string, key: string }}\n */\n _onRateLimited(operation, key) {\n if (!this._rateLimitNotified) {\n const cooldownRemaining = Math.max(0, this.rateLimiting.cooldownUntil - Date.now());\n logger.warn(`[WuCache] Rate limited: ${operation} for key \"${key}\" rejected. ${cooldownRemaining}ms remaining in cooldown.`);\n this._rateLimitNotified = true;\n }\n return { rateLimited: true, operation, key };\n }\n\n /**\n * GET RATE LIMIT STATUS\n */\n getRateLimitStatus() {\n const now = Date.now();\n return {\n enabled: this.rateLimiting.enabled,\n inCooldown: this.rateLimiting.inCooldown,\n cooldownRemaining: this.rateLimiting.inCooldown\n ? Math.max(0, this.rateLimiting.cooldownUntil - now)\n : 0,\n currentOps: this.rateLimiting.operations.length,\n maxOps: this.rateLimiting.maxOpsPerSecond,\n rateLimited: this.stats.rateLimited\n };\n }\n\n /**\n * 🔍 GET: Obtener valor del cache\n * @param {string} key - Clave\n * @returns {*} Valor cacheado o null\n */\n get(key) {\n // 🔐 Check rate limit\n if (!this._checkRateLimit()) {\n this._onRateLimited('get', key);\n return null;\n }\n\n // 1. Buscar en memoria\n if (this.memoryCache.has(key)) {\n const entry = this.memoryCache.get(key);\n\n // Verificar TTL\n if (this.isExpired(entry)) {\n this.delete(key);\n this.stats.misses++;\n return null;\n }\n\n // Actualizar acceso (LRU)\n this.accessOrder.set(key, Date.now());\n this.stats.hits++;\n\n return entry.value;\n }\n\n // 2. Buscar en storage persistente\n if (this.config.persistent) {\n const stored = this.getFromStorage(key);\n if (stored) {\n // Restaurar a memoria\n this.memoryCache.set(key, stored);\n this.accessOrder.set(key, Date.now());\n this.stats.hits++;\n return stored.value;\n }\n }\n\n this.stats.misses++;\n return null;\n }\n\n /**\n * 💾 SET: Guardar valor en cache\n * @param {string} key - Clave\n * @param {*} value - Valor\n * @param {number} ttl - Time to live (ms)\n * @returns {boolean}\n */\n set(key, value, ttl) {\n // 🔐 Check rate limit\n if (!this._checkRateLimit()) {\n this._onRateLimited('set', key);\n return false;\n }\n\n try {\n const entry = {\n key,\n value,\n timestamp: Date.now(),\n ttl: ttl || this.config.defaultTTL,\n size: this.estimateSize(value)\n };\n\n // Verificar si necesitamos hacer espacio\n const hasSpace = this.ensureSpace(entry.size);\n if (hasSpace === false) {\n logger.warn(`[WuCache] ⚠️ Cannot cache item: ${key} (too large)`);\n return false;\n }\n\n // Guardar en memoria\n this.memoryCache.set(key, entry);\n this.accessOrder.set(key, Date.now());\n\n // Guardar en storage persistente\n if (this.config.persistent) {\n this.saveToStorage(key, entry);\n }\n\n this.stats.sets++;\n this.stats.size += entry.size;\n\n return true;\n } catch (error) {\n logger.warn('[WuCache] ⚠️ Failed to set cache:', error);\n return false;\n }\n }\n\n /**\n * 🗑️ DELETE: Eliminar del cache\n * @param {string} key - Clave\n */\n delete(key) {\n const entry = this.memoryCache.get(key);\n if (entry) {\n this.stats.size -= entry.size;\n }\n\n this.memoryCache.delete(key);\n this.accessOrder.delete(key);\n\n if (this.config.persistent) {\n this.deleteFromStorage(key);\n }\n }\n\n /**\n * 🧹 CLEAR: Limpiar todo el cache\n */\n clear() {\n this.memoryCache.clear();\n this.accessOrder.clear();\n this.stats.size = 0;\n\n if (this.config.persistent) {\n this.clearStorage();\n }\n\n logger.debug('[WuCache] 🧹 Cache cleared');\n }\n\n /**\n * ⏰ IS EXPIRED: Verificar si entrada expiró\n * @param {Object} entry - Entrada del cache\n * @returns {boolean}\n */\n isExpired(entry) {\n if (!entry.ttl) return false;\n return Date.now() - entry.timestamp > entry.ttl;\n }\n\n /**\n * 📏 ESTIMATE SIZE: Estimar tamaño de un valor\n * @param {*} value - Valor\n * @returns {number} Tamaño en bytes\n */\n estimateSize(value) {\n if (typeof value === 'string') {\n return value.length * 2; // UTF-16\n }\n\n if (typeof value === 'object') {\n try {\n return JSON.stringify(value).length * 2;\n } catch {\n return 1000; // Estimación por defecto\n }\n }\n\n return 100; // Tamaño por defecto para primitivos\n }\n\n /**\n * 🎯 ENSURE SPACE: Asegurar espacio en cache (LRU eviction)\n * @param {number} neededSize - Tamaño necesario\n */\n ensureSpace(neededSize) {\n const maxSizeBytes = this.config.maxSize * 1024 * 1024;\n\n // 🛡️ FIX: Validar que el item no sea más grande que el máximo permitido\n if (neededSize > maxSizeBytes) {\n logger.warn(`[WuCache] ⚠️ Item size (${neededSize}) exceeds max cache size (${maxSizeBytes}). Skipping.`);\n return false;\n }\n\n // 🛡️ FIX: Límite de iteraciones para evitar loop infinito\n const maxIterations = this.config.maxItems + 10;\n let iterations = 0;\n\n // Verificar si necesitamos limpiar\n while ((this.stats.size + neededSize > maxSizeBytes ||\n this.memoryCache.size >= this.config.maxItems) &&\n iterations < maxIterations) {\n\n iterations++;\n\n // 🛡️ FIX: Si el cache está vacío pero aún no hay espacio, salir\n if (this.memoryCache.size === 0) {\n logger.warn('[WuCache] ⚠️ Cache empty but still no space. Breaking loop.');\n break;\n }\n\n // Encontrar entrada menos recientemente usada (LRU)\n let oldestKey = null;\n let oldestTime = Infinity;\n\n for (const [key, time] of this.accessOrder) {\n if (time < oldestTime) {\n oldestTime = time;\n oldestKey = key;\n }\n }\n\n if (oldestKey) {\n logger.debug(`[WuCache] 🗑️ Evicting LRU entry: ${oldestKey}`);\n this.delete(oldestKey);\n this.stats.evictions++;\n } else {\n break;\n }\n }\n\n // 🛡️ FIX: Log si alcanzamos el límite de iteraciones\n if (iterations >= maxIterations) {\n console.error(`[WuCache] 🚨 Max eviction iterations reached (${maxIterations}). Possible infinite loop prevented.`);\n }\n\n return true;\n }\n\n /**\n * 💽 GET FROM STORAGE: Obtener del storage persistente\n * @param {string} key - Clave\n * @returns {Object|null}\n */\n getFromStorage(key) {\n try {\n const storage = this.getStorage();\n const stored = storage.getItem(`wu_cache_${key}`);\n\n if (stored) {\n return JSON.parse(stored);\n }\n } catch (error) {\n logger.warn('[WuCache] ⚠️ Failed to get from storage:', error);\n }\n return null;\n }\n\n /**\n * 💾 SAVE TO STORAGE: Guardar en storage persistente\n * @param {string} key - Clave\n * @param {Object} entry - Entrada\n */\n saveToStorage(key, entry) {\n const storage = this.getStorage();\n try {\n storage.setItem(`wu_cache_${key}`, JSON.stringify(entry));\n } catch (error) {\n // Storage lleno, limpiar entradas antiguas\n logger.warn('[WuCache] ⚠️ Storage full, cleaning old entries');\n this.cleanOldStorageEntries();\n\n try {\n storage.setItem(`wu_cache_${key}`, JSON.stringify(entry));\n } catch {\n logger.warn('[WuCache] ⚠️ Failed to save to storage after cleanup');\n }\n }\n }\n\n /**\n * 🗑️ DELETE FROM STORAGE: Eliminar del storage\n * @param {string} key - Clave\n */\n deleteFromStorage(key) {\n try {\n const storage = this.getStorage();\n storage.removeItem(`wu_cache_${key}`);\n } catch (error) {\n logger.warn('[WuCache] ⚠️ Failed to delete from storage:', error);\n }\n }\n\n /**\n * 🧹 CLEAR STORAGE: Limpiar storage\n */\n clearStorage() {\n try {\n const storage = this.getStorage();\n const keys = Object.keys(storage);\n\n keys.forEach(key => {\n if (key.startsWith('wu_cache_')) {\n storage.removeItem(key);\n }\n });\n } catch (error) {\n logger.warn('[WuCache] ⚠️ Failed to clear storage:', error);\n }\n }\n\n /**\n * 🧹 CLEAN OLD STORAGE ENTRIES: Limpiar entradas antiguas del storage\n */\n cleanOldStorageEntries() {\n try {\n const storage = this.getStorage();\n const keys = Object.keys(storage);\n const entries = [];\n\n // Recopilar todas las entradas con timestamp\n keys.forEach(key => {\n if (key.startsWith('wu_cache_')) {\n try {\n const entry = JSON.parse(storage.getItem(key));\n entries.push({ key, timestamp: entry.timestamp });\n } catch {}\n }\n });\n\n // Ordenar por timestamp (más antiguas primero)\n entries.sort((a, b) => a.timestamp - b.timestamp);\n\n // Eliminar 25% de entradas más antiguas\n const toRemove = Math.ceil(entries.length * 0.25);\n for (let i = 0; i < toRemove; i++) {\n storage.removeItem(entries[i].key);\n }\n\n logger.debug(`[WuCache] 🧹 Cleaned ${toRemove} old storage entries`);\n } catch (error) {\n logger.warn('[WuCache] ⚠️ Failed to clean old storage entries:', error);\n }\n }\n\n /**\n * 💽 GET STORAGE: Obtener instancia de storage\n * @returns {Storage}\n */\n getStorage() {\n if (this.config.storage === 'localStorage') {\n return window.localStorage;\n } else if (this.config.storage === 'sessionStorage') {\n return window.sessionStorage;\n }\n // Fallback a memoria\n return {\n getItem: () => null,\n setItem: () => {},\n removeItem: () => {},\n clear: () => {}\n };\n }\n\n /**\n * 📊 GET STATS: Obtener estadísticas del cache\n * @returns {Object}\n */\n getStats() {\n const hitRate = this.stats.hits + this.stats.misses > 0\n ? (this.stats.hits / (this.stats.hits + this.stats.misses) * 100).toFixed(2)\n : 0;\n\n return {\n ...this.stats,\n hitRate: `${hitRate}%`,\n items: this.memoryCache.size,\n sizeMB: (this.stats.size / 1024 / 1024).toFixed(2)\n };\n }\n\n /**\n * ⚙️ CONFIGURE: Actualizar configuración\n * @param {Object} config - Nueva configuración\n */\n configure(config) {\n this.config = {\n ...this.config,\n ...config\n };\n }\n}\n","/**\n * 📡 WU-EVENT-BUS: SECURE PUB/SUB SYSTEM\n *\n * Sistema de eventos para comunicación entre microfrontends\n * - Pub/Sub pattern con validación de origen\n * - Event namespaces\n * - Wildcards\n * - Event replay\n * - Verificación de apps autorizadas\n */\nimport { logger } from './wu-logger.js';\n\n/**\n * @typedef {Object} WuEvent\n * @property {string} name - Event name\n * @property {*} data - Event payload\n * @property {number} timestamp - Event timestamp\n * @property {string} appName - Source app name\n * @property {Object} meta - Additional metadata\n * @property {boolean} verified - Whether origin was verified\n */\n\n/**\n * @typedef {Object} WuEventBusConfig\n * @property {number} [maxHistory=100] - Maximum events in history\n * @property {boolean} [enableReplay=true] - Enable event replay\n * @property {boolean} [enableWildcards=true] - Enable wildcard matching\n * @property {boolean} [logEvents=false] - Log all events\n * @property {boolean} [strictMode=false] - Reject unauthorized events\n * @property {boolean} [validateOrigin=true] - Validate event origins\n */\n\nexport class WuEventBus {\n constructor() {\n this.listeners = new Map();\n this.history = [];\n\n // Cache of compiled wildcard patterns. Avoids `new RegExp()` per emit per listener.\n this._wildcardCache = new Map();\n\n // 🔐 SEGURIDAD: Registro de apps autorizadas con tokens\n this.authorizedApps = new Map(); // appName -> { token, permissions }\n this.trustedEvents = new Set(['wu:*', 'system:*']); // Eventos del sistema\n // Internal subsystems whose appName is always trusted in strictMode.\n // These are framework-owned and never come from user-loaded micro-apps.\n this.trustedApps = new Set(['wu-ai', 'wu-mcp-bridge', 'wu-core', 'plugin']);\n // Per-subsystem secret tokens. A trusted appName WITHOUT the matching\n // token is rejected in strictMode — closes the spoofing vector where any\n // micro-app could pretend to be 'wu-ai' to bypass authorization.\n this._internalTokens = new Map();\n for (const app of this.trustedApps) {\n this._internalTokens.set(app, this._mintInternalToken());\n }\n\n // Auto-detect production environment for strictMode default\n const isProduction = typeof process !== 'undefined' && process.env?.NODE_ENV === 'production';\n\n this.config = {\n maxHistory: 100,\n enableReplay: true,\n enableWildcards: true,\n logEvents: false,\n // 🔐 Opciones de seguridad\n strictMode: isProduction, // Auto-enabled in production, permissive in development\n validateOrigin: true // Valida que appName sea una app registrada\n };\n\n this._permissiveWarned = false;\n\n this.stats = {\n emitted: 0,\n subscriptions: 0,\n rejected: 0 // Eventos rechazados por seguridad\n };\n }\n\n /**\n * 🔐 REGISTER APP: Registrar app autorizada para emitir eventos\n * @param {string} appName - Nombre de la app\n * @param {Object} options - { permissions: ['event:*'], token }\n * @returns {string} Token de autorización\n */\n registerApp(appName, options = {}) {\n const token = options.token || this._generateToken();\n\n this.authorizedApps.set(appName, {\n token,\n permissions: options.permissions || ['*'], // Por defecto puede emitir todo\n registeredAt: Date.now()\n });\n\n return token;\n }\n\n /**\n * 🔓 UNREGISTER APP: Desregistrar app\n * @param {string} appName\n */\n unregisterApp(appName) {\n this.authorizedApps.delete(appName);\n }\n\n /**\n * 🔐 VALIDATE ORIGIN: Verificar que el emisor está autorizado\n * @param {string} eventName\n * @param {string} appName\n * @param {string} token\n * @returns {boolean}\n */\n _validateOrigin(eventName, appName, token) {\n // Eventos del sistema siempre permitidos\n if (this._isSystemEvent(eventName)) {\n return true;\n }\n\n // Si no está en modo estricto, permitir todo\n if (!this.config.strictMode) {\n return true;\n }\n\n // Subsistemas internos: requieren el token minted al construir el bus.\n // Antes era confianza por nombre — cualquier micro-app podía declararse\n // `appName: 'wu-ai'` y bypassear strictMode. Ahora el nombre es metadata\n // y el token (closure-capturado por WuAI/Plugin/McpBridge) es identidad.\n if (this.trustedApps.has(appName)) {\n const expected = this._internalTokens.get(appName);\n return token === expected;\n }\n\n // Verificar que la app esté registrada\n const appInfo = this.authorizedApps.get(appName);\n if (!appInfo) {\n return false;\n }\n\n // Verificar token si se proporciona\n if (token && appInfo.token !== token) {\n return false;\n }\n\n // Verificar permisos\n return this._hasPermission(appInfo.permissions, eventName);\n }\n\n /**\n * 🔐 HAS PERMISSION: Verificar si la app tiene permiso para el evento\n */\n _hasPermission(permissions, eventName) {\n if (permissions.includes('*')) return true;\n\n return permissions.some(pattern => {\n if (pattern === eventName) return true;\n if (pattern.includes('*')) {\n return this.matchesWildcard(eventName, pattern);\n }\n return false;\n });\n }\n\n /**\n * 🔐 IS SYSTEM EVENT: Verificar si es un evento del sistema\n */\n _isSystemEvent(eventName) {\n return eventName.startsWith('wu:') ||\n eventName.startsWith('system:') ||\n eventName.startsWith('app:');\n }\n\n /**\n * Retrieve the secret token minted for an internal subsystem.\n * Only meaningful to subsystems WuCore explicitly trusts (wu-ai,\n * wu-mcp-bridge, plugin). External code calling this for a non-trusted\n * name gets null.\n *\n * The framework passes this token to internal subsystems at construction\n * (e.g. setupLazyAi reads it and gives it to WuAI). User code never sees\n * the token unless it imports core internals.\n *\n * @param {string} appName\n * @returns {string|null}\n */\n getInternalToken(appName) {\n if (!this.trustedApps.has(appName)) return null;\n return this._internalTokens.get(appName) || null;\n }\n\n /**\n * Mint a token for an internal subsystem. Uses crypto.randomUUID() when\n * available, the same fallback as _generateToken otherwise.\n * @private\n */\n _mintInternalToken() {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return `wu-int-${crypto.randomUUID()}`;\n }\n const seg = () => Math.random().toString(36).slice(2, 11);\n return `wu-int-${Date.now().toString(36)}-${seg()}${seg()}`;\n }\n\n /**\n * 🔐 GENERATE TOKEN: Generar token único.\n * Prefers crypto.randomUUID() (collision-resistant, available in all modern\n * browsers and Node ≥ 19). Falls back to a longer Math.random() string only\n * if crypto isn't reachable.\n */\n _generateToken() {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return `wu_${crypto.randomUUID()}`;\n }\n // Fallback: two stacked random segments to lower collision odds\n const seg = () => Math.random().toString(36).slice(2, 11);\n return `wu_${Date.now().toString(36)}_${seg()}${seg()}`;\n }\n\n /**\n * WARN PERMISSIVE MODE: Log a one-time warning when strictMode is off\n * Alerts developers that events are flowing without authorization checks\n */\n _warnPermissiveMode() {\n if (this._permissiveWarned) return;\n this._permissiveWarned = true;\n logger.warn(\n '[WuEventBus] strictMode is disabled. Events are emitted without authorization checks. ' +\n 'Enable strictMode for production by calling enableStrictMode() or setting NODE_ENV=production.'\n );\n }\n\n /**\n * 📢 EMIT: Emitir evento con validación de origen\n * @param {string} eventName - Nombre del evento\n * @param {*} data - Datos del evento\n * @param {Object} options - { appName, timestamp, meta, token }\n */\n emit(eventName, data, options = {}) {\n const appName = options.appName || 'unknown';\n\n // Warn once if running in permissive mode (strictMode off)\n if (!this.config.strictMode) {\n this._warnPermissiveMode();\n }\n\n // 🔐 Validar origen si está habilitado\n if (this.config.validateOrigin && this.config.strictMode) {\n if (!this._validateOrigin(eventName, appName, options.token)) {\n this.stats.rejected++;\n logger.warn(`[WuEventBus] 🚫 Event rejected: ${eventName} from ${appName} (unauthorized)`);\n return false;\n }\n }\n\n const event = {\n name: eventName,\n data,\n timestamp: options.timestamp || Date.now(),\n appName,\n meta: options.meta || {},\n // 🔐 Marcar si el origen fue verificado\n verified: this.authorizedApps.has(appName)\n };\n\n // Agregar a historial\n if (this.config.enableReplay) {\n this.addToHistory(event);\n }\n\n // Log si está habilitado\n if (this.config.logEvents) {\n logger.debug(`[WuEventBus] 📢 ${eventName}`, data);\n }\n\n // Notificar listeners exactos\n const exactListeners = this.listeners.get(eventName);\n if (exactListeners) {\n exactListeners.forEach(callback => {\n try {\n callback(event);\n } catch (error) {\n console.error(`[WuEventBus] ❌ Error in listener for ${eventName}:`, error);\n }\n });\n }\n\n // Notificar listeners con wildcards\n if (this.config.enableWildcards) {\n this.notifyWildcardListeners(eventName, event);\n }\n\n this.stats.emitted++;\n return true;\n }\n\n /**\n * 👂 ON: Suscribirse a evento\n */\n on(eventName, callback) {\n if (!this.listeners.has(eventName)) {\n this.listeners.set(eventName, new Set());\n }\n\n this.listeners.get(eventName).add(callback);\n this.stats.subscriptions++;\n\n return () => this.off(eventName, callback);\n }\n\n /**\n * 🔇 OFF: Desuscribirse de evento\n */\n off(eventName, callback) {\n const listeners = this.listeners.get(eventName);\n if (listeners) {\n listeners.delete(callback);\n if (listeners.size === 0) {\n this.listeners.delete(eventName);\n }\n this.stats.subscriptions--;\n }\n }\n\n /**\n * 🎯 ONCE: Suscribirse una sola vez\n */\n once(eventName, callback) {\n const wrappedCallback = (event) => {\n callback(event);\n this.off(eventName, wrappedCallback);\n };\n return this.on(eventName, wrappedCallback);\n }\n\n /**\n * 🌟 WILDCARD LISTENERS\n */\n notifyWildcardListeners(eventName, event) {\n for (const [pattern, listeners] of this.listeners) {\n if (this.matchesWildcard(eventName, pattern)) {\n listeners.forEach(callback => {\n try {\n callback(event);\n } catch (error) {\n console.error(`[WuEventBus] ❌ Error in wildcard listener for ${pattern}:`, error);\n }\n });\n }\n }\n }\n\n /**\n * 🎯 MATCHES WILDCARD\n * Compiled regexes are cached in `_wildcardCache` to avoid recompiling on every emit.\n */\n matchesWildcard(eventName, pattern) {\n if (!pattern.includes('*')) return false;\n let regex = this._wildcardCache.get(pattern);\n if (!regex) {\n const regexPattern = pattern\n .replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&')\n .replace(/\\*/g, '.*');\n regex = new RegExp(`^${regexPattern}$`);\n this._wildcardCache.set(pattern, regex);\n }\n return regex.test(eventName);\n }\n\n /**\n * 📝 ADD TO HISTORY\n *\n * Note: kept as shift() rather than amortized slice. V8 optimizes\n * Array.prototype.shift() on PACKED_ELEMENTS arrays to amortized O(1)\n * via element-shifting heuristics. The previous concern about O(N) per\n * emit doesn't hold for the common case. Revisit only if you switch to\n * an array of sparse/holey shape.\n */\n addToHistory(event) {\n this.history.push(event);\n if (this.history.length > this.config.maxHistory) {\n this.history.shift();\n }\n }\n\n /**\n * 🔄 REPLAY\n */\n replay(eventNameOrPattern, callback) {\n const events = this.history.filter(event => {\n if (eventNameOrPattern.includes('*')) {\n return this.matchesWildcard(event.name, eventNameOrPattern);\n }\n return event.name === eventNameOrPattern;\n });\n\n events.forEach(event => {\n try {\n callback(event);\n } catch (error) {\n console.error(`[WuEventBus] ❌ Error replaying event:`, error);\n }\n });\n }\n\n /**\n * 🧹 CLEAR HISTORY\n */\n clearHistory(eventNameOrPattern) {\n if (!eventNameOrPattern) {\n this.history = [];\n return;\n }\n\n this.history = this.history.filter(event => {\n if (eventNameOrPattern.includes('*')) {\n return !this.matchesWildcard(event.name, eventNameOrPattern);\n }\n return event.name !== eventNameOrPattern;\n });\n }\n\n /**\n * 📊 GET STATS\n */\n getStats() {\n return {\n ...this.stats,\n activeListeners: this.listeners.size,\n historySize: this.history.length,\n authorizedApps: this.authorizedApps.size,\n listenersByEvent: Array.from(this.listeners.entries()).map(([event, listeners]) => ({\n event,\n listeners: listeners.size\n }))\n };\n }\n\n /**\n * ⚙️ CONFIGURE\n */\n configure(config) {\n this.config = { ...this.config, ...config };\n }\n\n /**\n * 🔐 ENABLE STRICT MODE: Activar modo estricto de seguridad\n */\n enableStrictMode() {\n this.config.strictMode = true;\n }\n\n /**\n * 🔓 DISABLE STRICT MODE\n */\n disableStrictMode() {\n this.config.strictMode = false;\n }\n\n /**\n * 🗑️ REMOVE ALL\n */\n removeAll() {\n this.listeners.clear();\n this.stats.subscriptions = 0;\n }\n}\n","/**\n * ⚡ WU-PERFORMANCE: MICROFRONTEND LIFECYCLE MONITORING\n *\n * Monitoreo de performance específico para operaciones del framework:\n * - Tiempos de mount/unmount\n * - Tiempos de carga de módulos\n * - Estadísticas por app\n */\n\nimport { logger } from './wu-logger.js';\n\n// Prefix used for all entries surfaced to the User Timing API.\n// Filter by this in Chrome DevTools > Performance > User Timing.\nconst PERF_PREFIX = 'wu:';\n\n// Feature detection — done once at module load.\nconst HAS_USER_TIMING = (\n typeof performance !== 'undefined' &&\n typeof performance.mark === 'function' &&\n typeof performance.measure === 'function'\n);\n\nexport class WuPerformance {\n constructor() {\n this.metrics = new Map(); // appName -> metrics\n this.measurements = [];\n this.marks = new Map();\n\n this.config = {\n enabled: true,\n maxMeasurements: 1000,\n // Surface measurements via performance.mark/measure so they appear\n // in Chrome DevTools Performance timeline. Off by default has no\n // user impact other than DevTools entries — keep enabled.\n devtoolsTimeline: HAS_USER_TIMING\n };\n\n this.thresholds = {\n mount: 3000, // ms\n unmount: 1000, // ms\n load: 5000 // ms\n };\n\n logger.debug('[WuPerformance] ⚡ Framework performance monitoring initialized');\n }\n\n /**\n * Build the User Timing entry name for a given measurement.\n * @private\n */\n _entryName(appName, name, suffix = '') {\n return `${PERF_PREFIX}${appName}:${name}${suffix}`;\n }\n\n /**\n * 📊 START MEASURE: Iniciar medición\n * @param {string} name - Nombre de la medición\n * @param {string} appName - Nombre de la app (opcional)\n */\n startMeasure(name, appName = 'global') {\n const markName = `${appName}:${name}:start`;\n this.marks.set(markName, performance.now());\n\n // Surface in DevTools Performance > User Timing\n if (this.config.devtoolsTimeline) {\n try {\n performance.mark(this._entryName(appName, name, ':start'), {\n detail: { appName, name, source: 'wu-framework', phase: 'start' }\n });\n } catch {\n // Older browsers may not support the options object — try plain mark\n try { performance.mark(this._entryName(appName, name, ':start')); } catch {}\n }\n }\n\n logger.debug(`[WuPerformance] 📊 Measure started: ${markName}`);\n }\n\n /**\n * ⏹️ END MEASURE: Finalizar medición\n * @param {string} name - Nombre de la medición\n * @param {string} appName - Nombre de la app (opcional)\n * @returns {number} Duración en ms\n */\n endMeasure(name, appName = 'global') {\n const markName = `${appName}:${name}:start`;\n const startTime = this.marks.get(markName);\n\n if (!startTime) {\n // Puede ocurrir en React StrictMode (doble mount) — no es un error\n return 0;\n }\n\n const endTime = performance.now();\n const duration = endTime - startTime;\n this.marks.delete(markName);\n\n // Surface a measure entry in DevTools spanning start → end.\n // Modern form with `detail` gives a clickable metadata blob in the panel.\n if (this.config.devtoolsTimeline) {\n const measureName = this._entryName(appName, name);\n const startMark = this._entryName(appName, name, ':start');\n const endMark = this._entryName(appName, name, ':end');\n try {\n performance.mark(endMark, {\n detail: { appName, name, source: 'wu-framework', phase: 'end', duration }\n });\n performance.measure(measureName, {\n start: startTime,\n end: endTime,\n detail: { appName, name, source: 'wu-framework', duration }\n });\n } catch {\n // Fallback to classic 3-arg form (Safari < 16, older browsers)\n try {\n performance.mark(endMark);\n performance.measure(measureName, startMark, endMark);\n } catch {}\n }\n }\n\n // Registrar medición\n this.recordMeasurement({\n name,\n appName,\n duration,\n timestamp: Date.now(),\n type: 'duration'\n });\n\n // Verificar threshold\n if (this.checkThreshold(name, duration)) {\n logger.warn(`[WuPerformance] ⚠️ Threshold exceeded for ${name}: ${duration.toFixed(2)}ms`);\n }\n\n logger.debug(`[WuPerformance] ⏹️ Measure ended: ${markName} (${duration.toFixed(2)}ms)`);\n return duration;\n }\n\n /**\n * 📝 RECORD MEASUREMENT: Registrar medición\n * @param {Object} measurement - Medición\n */\n recordMeasurement(measurement) {\n this.measurements.push(measurement);\n\n // Mantener tamaño máximo\n if (this.measurements.length > this.config.maxMeasurements) {\n this.measurements.shift();\n }\n\n // Actualizar métricas de la app\n if (!this.metrics.has(measurement.appName)) {\n this.metrics.set(measurement.appName, {\n appName: measurement.appName,\n measurements: [],\n stats: {}\n });\n }\n\n const appMetrics = this.metrics.get(measurement.appName);\n appMetrics.measurements.push(measurement);\n\n // Calcular estadísticas\n this.calculateStats(measurement.appName);\n }\n\n /**\n * 📊 CALCULATE STATS: Calcular estadísticas\n * @param {string} appName - Nombre de la app\n */\n calculateStats(appName) {\n const appMetrics = this.metrics.get(appName);\n if (!appMetrics) return;\n\n const measurements = appMetrics.measurements;\n if (measurements.length === 0) return;\n\n // Agrupar por tipo de medición\n const byType = {};\n measurements.forEach(m => {\n if (!byType[m.name]) byType[m.name] = [];\n byType[m.name].push(m.duration);\n });\n\n // Calcular estadísticas para cada tipo\n appMetrics.stats = {};\n Object.entries(byType).forEach(([name, durations]) => {\n appMetrics.stats[name] = {\n count: durations.length,\n avg: durations.reduce((a, b) => a + b, 0) / durations.length,\n min: Math.min(...durations),\n max: Math.max(...durations),\n last: durations[durations.length - 1]\n };\n });\n }\n\n /**\n * 🎯 CHECK THRESHOLD: Verificar si se excedió threshold\n * @param {string} name - Nombre de la medición\n * @param {number} value - Valor\n * @returns {boolean}\n */\n checkThreshold(name, value) {\n const threshold = this.thresholds[name];\n return threshold && value > threshold;\n }\n\n /**\n * 📊 GENERATE REPORT: Generar reporte de performance del framework\n * @returns {Object}\n */\n generateReport() {\n const report = {\n timestamp: Date.now(),\n totalMeasurements: this.measurements.length,\n apps: {}\n };\n\n // Agregar métricas por app\n for (const [appName, metrics] of this.metrics) {\n report.apps[appName] = {\n measurementCount: metrics.measurements.length,\n stats: metrics.stats\n };\n }\n\n return report;\n }\n\n /**\n * Read User Timing entries created by this framework.\n * Useful for programmatic introspection without opening DevTools.\n *\n * @param {Object} [opts]\n * @param {'mark'|'measure'|'all'} [opts.type='all']\n * @param {string} [opts.appName] - Filter to a single app\n * @returns {PerformanceEntry[]}\n *\n * @example\n * const entries = wu.performance.getDevToolsEntries({ type: 'measure', appName: 'cart' });\n * entries.forEach(e => console.log(e.name, e.duration));\n */\n getDevToolsEntries(opts = {}) {\n if (!HAS_USER_TIMING) return [];\n const { type = 'all', appName } = opts;\n const prefix = appName ? `${PERF_PREFIX}${appName}:` : PERF_PREFIX;\n\n const filter = (entry) => entry.name.startsWith(prefix);\n const buckets = [];\n if (type === 'all' || type === 'mark') {\n try { buckets.push(...performance.getEntriesByType('mark').filter(filter)); } catch {}\n }\n if (type === 'all' || type === 'measure') {\n try { buckets.push(...performance.getEntriesByType('measure').filter(filter)); } catch {}\n }\n return buckets;\n }\n\n /**\n * Subscribe to wu-framework User Timing entries via PerformanceObserver.\n * Only entries whose name starts with `wu:` are delivered.\n *\n * @param {(entry: PerformanceEntry) => void} callback\n * @param {Object} [opts]\n * @param {'mark'|'measure'|'all'} [opts.type='measure']\n * @returns {Function} Unsubscribe function\n *\n * @example\n * const off = wu.performance.observe((e) => {\n * if (e.duration > 1000) console.warn('Slow:', e.name, e.duration);\n * });\n * // later\n * off();\n */\n observe(callback, opts = {}) {\n if (typeof PerformanceObserver === 'undefined' || typeof callback !== 'function') {\n return () => {};\n }\n const { type = 'measure' } = opts;\n const entryTypes = type === 'all' ? ['mark', 'measure'] : [type];\n\n let observer;\n try {\n observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n if (entry.name.startsWith(PERF_PREFIX)) {\n try { callback(entry); } catch (e) {\n logger.warn(`[WuPerformance] observe callback threw: ${e?.message}`);\n }\n }\n }\n });\n observer.observe({ entryTypes });\n } catch (err) {\n logger.warn(`[WuPerformance] observe() unavailable: ${err?.message}`);\n return () => {};\n }\n return () => { try { observer.disconnect(); } catch {} };\n }\n\n /**\n * 📋 GET METRICS: Obtener métricas de una app\n * @param {string} appName - Nombre de la app\n * @returns {Object}\n */\n getMetrics(appName) {\n return this.metrics.get(appName) || null;\n }\n\n /**\n * 📊 GET ALL METRICS: Obtener todas las métricas\n * @returns {Object}\n */\n getAllMetrics() {\n const allMetrics = {};\n\n for (const [appName, metrics] of this.metrics) {\n allMetrics[appName] = metrics;\n }\n\n return allMetrics;\n }\n\n /**\n * 🧹 CLEAR METRICS: Limpiar métricas\n * @param {string} appName - Nombre de la app (opcional)\n */\n clearMetrics(appName) {\n if (appName) {\n this.metrics.delete(appName);\n this.measurements = this.measurements.filter(m => m.appName !== appName);\n } else {\n this.metrics.clear();\n this.measurements = [];\n }\n\n // Also evict User Timing entries so DevTools / getEntries() stay tidy.\n // Chrome buffers ~150 entries by default before truncating — keep ours small.\n this._clearTimelineEntries(appName);\n\n logger.debug(`[WuPerformance] 🧹 Metrics cleared${appName ? ` for ${appName}` : ''}`);\n }\n\n /**\n * Clear User Timing entries created by this module.\n * Filters by the `wu:` prefix (and optionally a specific appName) so we never\n * touch entries other libraries or the app itself created.\n * @private\n */\n _clearTimelineEntries(appName) {\n if (!HAS_USER_TIMING) return;\n const prefix = appName ? `${PERF_PREFIX}${appName}:` : PERF_PREFIX;\n\n try {\n for (const entry of performance.getEntriesByType('mark')) {\n if (entry.name.startsWith(prefix)) {\n performance.clearMarks(entry.name);\n }\n }\n for (const entry of performance.getEntriesByType('measure')) {\n if (entry.name.startsWith(prefix)) {\n performance.clearMeasures(entry.name);\n }\n }\n } catch {\n // Some embedded contexts disable the buffer — ignore\n }\n }\n\n /**\n * ⚙️ CONFIGURE: Configurar performance monitor\n * @param {Object} config - Nueva configuración\n */\n configure(config) {\n this.config = {\n ...this.config,\n ...config\n };\n\n if (config.thresholds) {\n this.thresholds = {\n ...this.thresholds,\n ...config.thresholds\n };\n }\n }\n}\n","/**\n * 🔌 WU-PLUGIN: SECURE PLUGIN SYSTEM\n *\n * Sistema de plugins con sandboxing de seguridad\n * - Plugin lifecycle (install, beforeMount, afterMount, etc.)\n * - Sandboxed API (plugins no tienen acceso completo al core)\n * - Permission system\n * - Timeout protection\n */\nimport { logger } from './wu-logger.js';\n\n\nexport class WuPluginSystem {\n constructor(core, options = {}) {\n this._core = core; // Privado - no expuesto a plugins\n this.plugins = new Map();\n this.hooks = new Map();\n\n // Hooks disponibles\n this.availableHooks = [\n 'beforeInit', 'afterInit',\n 'beforeMount', 'afterMount',\n 'beforeUnmount', 'afterUnmount',\n 'onError', 'onDestroy'\n ];\n\n // 🔐 Permisos disponibles\n this.availablePermissions = [\n 'mount', // Puede montar/desmontar apps\n 'events', // Puede emitir/escuchar eventos\n 'store', // Puede leer/escribir store\n 'apps', // Puede ver lista de apps\n 'config', // Puede modificar configuración\n 'unsafe' // Acceso completo (peligroso)\n ];\n\n // 🔐 Timeout para hooks (evita que plugins bloqueen)\n this.hookTimeout = options.hookTimeout || 5000; // Default: 5 segundos\n\n this.availableHooks.forEach(hook => {\n this.hooks.set(hook, []);\n });\n }\n\n /**\n * 🔐 CREATE SANDBOXED API: Crea API limitada para el plugin\n * @param {Array} permissions - Permisos del plugin\n * @returns {Object} API sandboxeada\n */\n _createSandboxedApi(permissions) {\n const api = {\n // Info básica siempre disponible\n version: this._core.version,\n info: this._core.info,\n\n // 📊 Métodos de solo lectura\n getAppInfo: (appName) => {\n const mounted = this._core.mounted.get(appName);\n if (!mounted) return null;\n return {\n name: appName,\n state: mounted.state,\n timestamp: mounted.timestamp\n };\n },\n\n getMountedApps: () => {\n return Array.from(this._core.mounted.keys());\n },\n\n getStats: () => this._core.getStats()\n };\n\n // 🔐 Agregar métodos según permisos\n if (permissions.includes('events') || permissions.includes('unsafe')) {\n // Read the internal token at api construction (closure-captured).\n // Used so strictMode accepts plugin emits as appName='plugin' without\n // letting random micro-apps spoof that identity.\n const pluginToken = this._core.eventBus.getInternalToken?.('plugin') || null;\n api.emit = (event, data) => this._core.eventBus.emit(event, data, {\n appName: 'plugin',\n token: pluginToken,\n });\n api.on = (event, cb) => this._core.eventBus.on(event, cb);\n api.off = (event, cb) => this._core.eventBus.off(event, cb);\n }\n\n if (permissions.includes('store') || permissions.includes('unsafe')) {\n api.getState = (path) => this._core.store.get(path);\n api.setState = (path, value) => this._core.store.set(path, value);\n }\n\n if (permissions.includes('mount') || permissions.includes('unsafe')) {\n api.mount = (appName, container) => this._core.mount(appName, container);\n api.unmount = (appName) => this._core.unmount(appName);\n }\n\n if (permissions.includes('config') || permissions.includes('unsafe')) {\n api.configure = (config) => {\n // Solo permitir configuración segura\n const safeKeys = ['debug', 'logLevel'];\n const safeConfig = {};\n for (const key of safeKeys) {\n if (key in config) safeConfig[key] = config[key];\n }\n Object.assign(this._core, safeConfig);\n };\n }\n\n // 🚨 Acceso completo solo con permiso 'unsafe'\n if (permissions.includes('unsafe')) {\n api._unsafeCore = this._core;\n logger.warn('[WuPlugin] ⚠️ Plugin has unsafe access to core!');\n }\n\n // Congelar API recursivamente para evitar modificaciones en cualquier nivel\n return WuPluginSystem._deepFreeze(api);\n }\n\n /**\n * Deep-freeze an object and all its nested plain objects and arrays.\n * Functions, DOM nodes, and other non-plain types are left untouched\n * so they remain callable / functional. A WeakSet guards against\n * circular references.\n *\n * @param {*} obj - The value to deep-freeze\n * @param {WeakSet} [seen] - Internal tracker for circular references\n * @returns {*} The same object, now deeply frozen\n */\n static _deepFreeze(obj, seen) {\n if (obj === null || obj === undefined) {\n return obj;\n }\n\n // Only freeze plain objects and arrays.\n // Functions must stay invocable; DOM nodes, class instances, etc.\n // should not be tampered with.\n const dominated = typeof obj === 'object';\n if (!dominated) {\n return obj;\n }\n\n const isPlainObject =\n Object.getPrototypeOf(obj) === Object.prototype ||\n Object.getPrototypeOf(obj) === null;\n const isArray = Array.isArray(obj);\n\n if (!isPlainObject && !isArray) {\n return obj;\n }\n\n // Circular-reference guard\n if (!seen) {\n seen = new WeakSet();\n }\n if (seen.has(obj)) {\n return obj;\n }\n seen.add(obj);\n\n // Recurse into own enumerable properties\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const value = obj[keys[i]];\n if (value !== null && value !== undefined && typeof value === 'object') {\n WuPluginSystem._deepFreeze(value, seen);\n }\n }\n\n return Object.freeze(obj);\n }\n\n /**\n * 🔐 VALIDATE PLUGIN: Validar estructura del plugin\n * @param {Object} plugin\n * @returns {boolean}\n */\n _validatePlugin(plugin) {\n if (!plugin || typeof plugin !== 'object') {\n throw new Error('[WuPlugin] Invalid plugin: must be an object');\n }\n\n if (!plugin.name || typeof plugin.name !== 'string') {\n throw new Error('[WuPlugin] Invalid plugin: must have a name (string)');\n }\n\n if (plugin.name.length > 50) {\n throw new Error('[WuPlugin] Invalid plugin: name too long (max 50 chars)');\n }\n\n // Validar que los hooks sean funciones\n for (const hookName of this.availableHooks) {\n if (plugin[hookName] && typeof plugin[hookName] !== 'function') {\n throw new Error(`[WuPlugin] Invalid plugin: ${hookName} must be a function`);\n }\n }\n\n // Validar permisos\n if (plugin.permissions) {\n if (!Array.isArray(plugin.permissions)) {\n throw new Error('[WuPlugin] Invalid plugin: permissions must be an array');\n }\n\n for (const perm of plugin.permissions) {\n if (!this.availablePermissions.includes(perm)) {\n throw new Error(`[WuPlugin] Invalid permission: ${perm}`);\n }\n }\n }\n\n return true;\n }\n\n /**\n * 📦 USE: Instalar plugin con sandboxing\n * @param {Object|Function} plugin - Plugin o factory function\n * @param {Object} options - Opciones del plugin\n */\n use(plugin, options = {}) {\n // Si es una función, ejecutarla para obtener el plugin\n // Nota: factory functions NO reciben acceso al core\n if (typeof plugin === 'function') {\n plugin = plugin(options);\n }\n\n // Validar plugin\n this._validatePlugin(plugin);\n\n // Verificar si ya está instalado\n if (this.plugins.has(plugin.name)) {\n logger.warn(`[WuPlugin] Plugin \"${plugin.name}\" already installed`);\n return;\n }\n\n // Determinar permisos (por defecto: solo eventos)\n const permissions = plugin.permissions || ['events'];\n\n // 🔐 Crear API sandboxeada\n const sandboxedApi = this._createSandboxedApi(permissions);\n\n // Ejecutar install del plugin con API sandboxeada\n if (plugin.install) {\n try {\n plugin.install(sandboxedApi, options);\n } catch (error) {\n console.error(`[WuPlugin] Error installing \"${plugin.name}\":`, error);\n throw error;\n }\n }\n\n // Registrar hooks del plugin con protección\n this.availableHooks.forEach(hookName => {\n if (typeof plugin[hookName] === 'function') {\n // Wrap el hook con timeout y try-catch\n const wrappedHook = this._wrapHook(plugin[hookName].bind(plugin), plugin.name, hookName);\n this.registerHook(hookName, wrappedHook);\n }\n });\n\n // Guardar plugin\n this.plugins.set(plugin.name, {\n plugin,\n options,\n permissions,\n sandboxedApi,\n installedAt: Date.now()\n });\n\n logger.debug(`[WuPlugin] ✅ Plugin \"${plugin.name}\" installed (permissions: ${permissions.join(', ')})`);\n }\n\n /**\n * 🔐 WRAP HOOK: Envolver hook con timeout y error handling\n */\n _wrapHook(hookFn, pluginName, hookName) {\n return async (context) => {\n const timeoutPromise = new Promise((_, reject) => {\n setTimeout(() => {\n reject(new Error(`Plugin \"${pluginName}\" hook \"${hookName}\" timed out after ${this.hookTimeout}ms`));\n }, this.hookTimeout);\n });\n\n try {\n // Race entre el hook y el timeout\n return await Promise.race([\n hookFn(context),\n timeoutPromise\n ]);\n } catch (error) {\n console.error(`[WuPlugin] Error in ${pluginName}.${hookName}:`, error);\n // No propagar error para no romper otros plugins\n return undefined;\n }\n };\n }\n\n /**\n * 🪝 REGISTER HOOK\n */\n registerHook(hookName, callback) {\n if (!this.hooks.has(hookName)) {\n logger.warn(`[WuPlugin] Unknown hook: ${hookName}`);\n return;\n }\n this.hooks.get(hookName).push(callback);\n }\n\n /**\n * 🎯 CALL HOOK\n */\n async callHook(hookName, context) {\n const callbacks = this.hooks.get(hookName) || [];\n\n for (const callback of callbacks) {\n try {\n const result = await callback(context);\n if (result === false) {\n return false;\n }\n } catch (error) {\n console.error(`[WuPlugin] Error in hook ${hookName}:`, error);\n }\n }\n\n return true;\n }\n\n /**\n * 🗑️ UNINSTALL\n */\n uninstall(pluginName) {\n const pluginData = this.plugins.get(pluginName);\n if (!pluginData) {\n logger.warn(`[WuPlugin] Plugin \"${pluginName}\" not found`);\n return;\n }\n\n const { plugin, sandboxedApi } = pluginData;\n\n if (plugin.uninstall) {\n try {\n plugin.uninstall(sandboxedApi);\n } catch (error) {\n console.error(`[WuPlugin] Error uninstalling \"${pluginName}\":`, error);\n }\n }\n\n this.plugins.delete(pluginName);\n logger.debug(`[WuPlugin] ✅ Plugin \"${pluginName}\" uninstalled`);\n }\n\n /**\n * 📋 GET PLUGIN\n */\n getPlugin(pluginName) {\n return this.plugins.get(pluginName)?.plugin;\n }\n\n /**\n * 📊 GET STATS\n */\n getStats() {\n return {\n totalPlugins: this.plugins.size,\n plugins: Array.from(this.plugins.entries()).map(([name, data]) => ({\n name,\n permissions: data.permissions,\n installedAt: data.installedAt\n })),\n hooks: Array.from(this.hooks.entries()).map(([name, callbacks]) => ({\n name,\n callbacks: callbacks.length\n }))\n };\n }\n\n /**\n * 🧹 CLEANUP\n */\n cleanup() {\n for (const [name] of this.plugins) {\n this.uninstall(name);\n }\n }\n}\n\n/**\n * 📦 PLUGIN HELPER: Helper para crear plugins\n * @param {Object} config - Configuración del plugin\n * @param {string} config.name - Nombre del plugin\n * @param {Array} config.permissions - Permisos requeridos\n */\nexport const createPlugin = (config) => {\n return {\n name: config.name,\n permissions: config.permissions || ['events'],\n install: config.install,\n uninstall: config.uninstall,\n beforeInit: config.beforeInit,\n afterInit: config.afterInit,\n beforeMount: config.beforeMount,\n afterMount: config.afterMount,\n beforeUnmount: config.beforeUnmount,\n afterUnmount: config.afterUnmount,\n onError: config.onError,\n onDestroy: config.onDestroy\n };\n};\n","/**\n * 🎯 WU-STRATEGIES: LOADING STRATEGIES\n *\n * Estrategias de carga para optimizar performance:\n * - Lazy: Carga solo cuando se monta\n * - Eager: Precarga en init\n * - Preload: Usa <link rel=\"prefetch\">\n * - Idle: Carga cuando el navegador está idle\n */\n\nimport { logger } from './wu-logger.js';\n\nexport class WuLoadingStrategy {\n constructor(core) {\n this.core = core;\n this.strategies = new Map();\n this.loadingQueue = [];\n this.isIdle = false;\n this._idleHandle = null; // current requestIdleCallback id\n this._idleFallback = null; // setTimeout id when rIC unavailable\n this._destroyed = false; // stops the self-rescheduling loop\n\n this.registerDefaultStrategies();\n this.setupIdleCallback();\n\n logger.debug('[WuStrategies] 🎯 Loading strategies initialized');\n }\n\n /**\n * 📋 REGISTER DEFAULT STRATEGIES\n */\n registerDefaultStrategies() {\n // Lazy: Solo carga cuando se necesita (no precarga)\n this.register('lazy', {\n shouldPreload: false,\n load: async (appName, config) => {\n logger.debug(`[Strategy:Lazy] Loading ${appName} on demand (no preload)`);\n // No hace nada, la app se carga cuando se monta\n return;\n }\n });\n\n // Eager: Carga inmediatamente en init\n this.register('eager', {\n shouldPreload: true,\n priority: 'high',\n load: async (appName, config) => {\n logger.debug(`[Strategy:Eager] Preloading ${appName} immediately`);\n\n // Cargar el módulo de la app\n const app = this.core.apps.get(appName);\n if (app) {\n const moduleUrl = await this.core.resolveModulePath(app);\n await import(/* @vite-ignore */ moduleUrl);\n logger.debug(`[Strategy:Eager] ✅ ${appName} preloaded`);\n }\n }\n });\n\n // Preload: Usa resource hints del navegador\n this.register('preload', {\n shouldPreload: true,\n priority: 'medium',\n load: async (appName, config) => {\n logger.debug(`[Strategy:Preload] Using resource hints for ${appName}`);\n\n // Crear <link rel=\"prefetch\">\n const app = this.core.apps.get(appName);\n if (app) {\n const moduleUrl = await this.core.resolveModulePath(app);\n\n const link = document.createElement('link');\n link.rel = 'prefetch';\n link.href = moduleUrl;\n link.as = 'script';\n document.head.appendChild(link);\n\n logger.debug(`[Strategy:Preload] ✅ Resource hint added for ${appName}`);\n }\n }\n });\n\n // Speculate: Uses Speculation Rules API (Chrome 121+) with fallbacks\n this.register('speculate', {\n shouldPreload: true,\n priority: 'medium',\n load: async (appName, config) => {\n if (this.core.prefetcher) {\n await this.core.prefetcher.prefetch(appName, {\n eagerness: config.eagerness || 'moderate'\n });\n }\n }\n });\n\n // Idle: Carga cuando el navegador está idle\n this.register('idle', {\n shouldPreload: false,\n load: async (appName, config) => {\n logger.debug(`[Strategy:Idle] Queueing ${appName} for idle loading`);\n\n return new Promise((resolve) => {\n this.loadingQueue.push({\n appName,\n config,\n resolve\n });\n\n // Si ya estamos idle, procesar inmediatamente\n if (this.isIdle) {\n this.processIdleQueue();\n }\n });\n }\n });\n }\n\n /**\n * 📦 REGISTER: Registrar estrategia personalizada\n * @param {string} name - Nombre de la estrategia\n * @param {Object} strategy - Configuración de la estrategia\n */\n register(name, strategy) {\n if (!strategy.load || typeof strategy.load !== 'function') {\n throw new Error('[WuStrategies] Strategy must have a load function');\n }\n\n this.strategies.set(name, {\n name,\n shouldPreload: strategy.shouldPreload || false,\n priority: strategy.priority || 'low',\n load: strategy.load\n });\n\n logger.debug(`[WuStrategies] Strategy \"${name}\" registered`);\n }\n\n /**\n * 🚀 LOAD: Cargar app con estrategia\n * @param {string} appName - Nombre de la app\n * @param {Object} config - Configuración con strategy\n * @returns {Promise}\n */\n async load(appName, config) {\n const strategyName = config.strategy || 'lazy';\n const strategy = this.strategies.get(strategyName);\n\n if (!strategy) {\n logger.warn(`[WuStrategies] Strategy \"${strategyName}\" not found, using lazy`);\n return await this.strategies.get('lazy').load(appName, config);\n }\n\n return await strategy.load(appName, config);\n }\n\n /**\n * 🎯 PRELOAD: Precargar apps según estrategia\n * @param {Array} apps - Apps a evaluar para precarga\n */\n async preload(apps) {\n const toPreload = apps.filter(app => {\n const strategy = this.strategies.get(app.strategy || 'lazy');\n return strategy.shouldPreload;\n });\n\n // Ordenar por prioridad\n toPreload.sort((a, b) => {\n const priorityOrder = { high: 0, medium: 1, low: 2 };\n const aPriority = this.strategies.get(a.strategy)?.priority || 'low';\n const bPriority = this.strategies.get(b.strategy)?.priority || 'low';\n return priorityOrder[aPriority] - priorityOrder[bPriority];\n });\n\n logger.debug(`[WuStrategies] Preloading ${toPreload.length} apps`);\n\n // Precargar en orden\n for (const app of toPreload) {\n try {\n await this.load(app.name, app);\n } catch (error) {\n console.error(`[WuStrategies] Failed to preload ${app.name}:`, error);\n }\n }\n }\n\n /**\n * ⏰ SETUP IDLE CALLBACK: Configurar idle loading\n */\n setupIdleCallback() {\n if (typeof window === 'undefined') return; // SSR no-op\n\n if ('requestIdleCallback' in window) {\n const idleCallback = (deadline) => {\n if (this._destroyed) return; // stop the loop on cleanup\n this.isIdle = true;\n this.processIdleQueue(deadline);\n // Re-schedule — but keep the handle so cleanup() can cancel us.\n this._idleHandle = requestIdleCallback(idleCallback);\n };\n this._idleHandle = requestIdleCallback(idleCallback);\n } else {\n // Fallback: usar setTimeout\n this._idleFallback = setTimeout(() => {\n if (this._destroyed) return;\n this.isIdle = true;\n this.processIdleQueue();\n }, 2000);\n }\n }\n\n /**\n * 📋 PROCESS IDLE QUEUE: Procesar cola de carga idle\n * @param {Object} deadline - IdleDeadline object\n */\n async processIdleQueue(deadline) {\n while (this.loadingQueue.length > 0) {\n // Si tenemos deadline y se acabó el tiempo, salir\n if (deadline && deadline.timeRemaining() <= 0) {\n break;\n }\n\n const item = this.loadingQueue.shift();\n\n try {\n const app = this.core.apps.get(item.appName);\n if (app) {\n const moduleUrl = await this.core.resolveModulePath(app);\n await import(/* @vite-ignore */ moduleUrl);\n logger.debug(`[Strategy:Idle] ✅ ${item.appName} loaded during idle time`);\n item.resolve(true);\n } else {\n item.resolve(null);\n }\n } catch (error) {\n console.error(`[Strategy:Idle] Failed to load ${item.appName}:`, error);\n item.resolve(null);\n }\n }\n }\n\n /**\n * 📊 GET STATS: Estadísticas de estrategias\n * @returns {Object}\n */\n getStats() {\n return {\n totalStrategies: this.strategies.size,\n strategies: Array.from(this.strategies.keys()),\n idleQueueSize: this.loadingQueue.length,\n isIdle: this.isIdle\n };\n }\n\n /**\n * 🧹 CLEANUP: Limpiar estrategias\n */\n cleanup() {\n this._destroyed = true;\n if (this._idleHandle != null && typeof cancelIdleCallback === 'function') {\n cancelIdleCallback(this._idleHandle);\n this._idleHandle = null;\n }\n if (this._idleFallback != null) {\n clearTimeout(this._idleFallback);\n this._idleFallback = null;\n }\n // Resolve pending queue items so awaiters don't hang forever\n for (const item of this.loadingQueue) {\n try { item.resolve(null); } catch {}\n }\n this.loadingQueue = [];\n logger.debug('[WuStrategies] 🧹 Strategies cleaned up');\n }\n}\n","/**\n * 🛡️ WU-ERROR-BOUNDARY: ADVANCED ERROR HANDLING\n *\n * Sistema de error boundaries con:\n * - Chain of Responsibility pattern\n * - Recovery strategies\n * - Error classification\n * - Fallback rendering\n */\n\nimport { logger } from './wu-logger.js';\n\nexport class WuErrorBoundary {\n constructor(core) {\n this.core = core;\n this.handlers = [];\n this.errorLog = [];\n this.maxErrorLog = 100;\n\n this.config = {\n maxRetries: 3,\n retryDelay: 1000,\n showErrorUI: true\n };\n\n this.registerDefaultHandlers();\n\n logger.debug('[WuErrorBoundary] 🛡️ Error boundary initialized');\n }\n\n /**\n * 📋 REGISTER DEFAULT HANDLERS: Chain of responsibility\n */\n registerDefaultHandlers() {\n // 1. Network Error Handler\n this.register({\n name: 'network',\n canHandle: (error) => {\n return error.name === 'TypeError' &&\n (error.message.includes('fetch') || error.message.includes('network'));\n },\n handle: async (error, context) => {\n logger.debug('[ErrorHandler:Network] Handling network error');\n\n // Retry con backoff\n if (context.retryCount < this.config.maxRetries) {\n const delay = this.config.retryDelay * Math.pow(2, context.retryCount);\n logger.debug(`[ErrorHandler:Network] Retrying in ${delay}ms...`);\n\n await new Promise(resolve => setTimeout(resolve, delay));\n\n return {\n recovered: true,\n action: 'retry',\n retryCount: context.retryCount + 1\n };\n }\n\n return {\n recovered: false,\n action: 'fallback',\n message: 'Network error: Please check your connection'\n };\n }\n });\n\n // 2. Script Load Error Handler\n this.register({\n name: 'script-load',\n canHandle: (error) => {\n return error.name === 'Error' &&\n (error.message.includes('Loading') ||\n error.message.includes('Failed to fetch'));\n },\n handle: async (error, context) => {\n logger.debug('[ErrorHandler:ScriptLoad] Handling script load error');\n\n // Intentar URL alternativa si existe\n if (context.fallbackUrl) {\n logger.debug('[ErrorHandler:ScriptLoad] Trying fallback URL');\n return {\n recovered: true,\n action: 'use-fallback-url',\n url: context.fallbackUrl\n };\n }\n\n return {\n recovered: false,\n action: 'fallback',\n message: 'Failed to load microfrontend'\n };\n }\n });\n\n // 3. Mount Error Handler\n this.register({\n name: 'mount',\n canHandle: (error) => {\n return error.message && error.message.includes('mount');\n },\n handle: async (error, context) => {\n logger.debug('[ErrorHandler:Mount] Handling mount error');\n\n // Limpiar y reintentar\n if (context.retryCount < 2) {\n logger.debug('[ErrorHandler:Mount] Cleaning up and retrying...');\n\n // Cleanup\n try {\n await this.core.unmount(context.appName);\n } catch (cleanupError) {\n logger.warn('[ErrorHandler:Mount] Cleanup failed:', cleanupError);\n }\n\n await new Promise(resolve => setTimeout(resolve, 500));\n\n return {\n recovered: true,\n action: 'retry',\n retryCount: context.retryCount + 1\n };\n }\n\n return {\n recovered: false,\n action: 'fallback',\n message: 'Failed to mount application'\n };\n }\n });\n\n // 4. Timeout Error Handler\n this.register({\n name: 'timeout',\n canHandle: (error) => {\n return error.name === 'TimeoutError' ||\n error.message.includes('timeout');\n },\n handle: async (error, context) => {\n logger.debug('[ErrorHandler:Timeout] Handling timeout error');\n\n // Aumentar timeout y reintentar\n if (context.retryCount < 2) {\n return {\n recovered: true,\n action: 'retry-with-longer-timeout',\n timeout: (context.timeout || 5000) * 2,\n retryCount: context.retryCount + 1\n };\n }\n\n return {\n recovered: false,\n action: 'fallback',\n message: 'Operation timed out'\n };\n }\n });\n\n // 5. Generic Error Handler (fallback)\n this.register({\n name: 'generic',\n canHandle: () => true, // Maneja todo\n handle: async (error, context) => {\n logger.debug('[ErrorHandler:Generic] Handling generic error');\n\n return {\n recovered: false,\n action: 'fallback',\n message: error.message || 'An unexpected error occurred'\n };\n }\n });\n }\n\n /**\n * 📦 REGISTER: Registrar error handler\n * @param {Object} handler - Error handler { name, canHandle, handle }\n */\n register(handler) {\n if (!handler.name || !handler.canHandle || !handler.handle) {\n throw new Error('[WuErrorBoundary] Handler must have name, canHandle, and handle');\n }\n\n this.handlers.push(handler);\n logger.debug(`[WuErrorBoundary] Handler \"${handler.name}\" registered`);\n }\n\n /**\n * 🎯 HANDLE: Manejar error con chain of responsibility\n * @param {Error} error - Error a manejar\n * @param {Object} context - Contexto del error\n * @returns {Promise<Object>} Recovery result\n */\n async handle(error, context = {}) {\n // Agregar valores por defecto\n context = {\n retryCount: 0,\n timestamp: Date.now(),\n ...context\n };\n\n // Log error\n this.logError(error, context);\n\n // Buscar handler que pueda manejar este error\n for (const handler of this.handlers) {\n try {\n if (handler.canHandle(error, context)) {\n logger.debug(`[WuErrorBoundary] Using handler: ${handler.name}`);\n\n const result = await handler.handle(error, context);\n\n if (result.recovered) {\n logger.debug(`[WuErrorBoundary] ✅ Error recovered by ${handler.name}`);\n return result;\n }\n\n // Si no se recuperó, renderizar fallback\n if (result.action === 'fallback' && this.config.showErrorUI) {\n this.renderFallback(context, result);\n }\n\n return result;\n }\n } catch (handlerError) {\n console.error(`[WuErrorBoundary] Handler \"${handler.name}\" failed:`, handlerError);\n }\n }\n\n // No handler pudo manejar el error\n console.error('[WuErrorBoundary] ❌ No handler could handle the error');\n\n return {\n recovered: false,\n action: 'unhandled',\n message: 'Unhandled error'\n };\n }\n\n /**\n * 🎨 RENDER FALLBACK: Renderizar UI de error\n * @param {Object} context - Contexto del error\n * @param {Object} result - Resultado del handler\n */\n renderFallback(context, result) {\n if (!context.container) {\n logger.warn('[WuErrorBoundary] No container to render fallback');\n return;\n }\n\n const container = typeof context.container === 'string'\n ? document.querySelector(context.container)\n : context.container;\n\n if (!container) return;\n\n // Limpiar container\n container.innerHTML = '';\n\n // Crear UI de error\n const errorUI = document.createElement('div');\n errorUI.className = 'wu-error-boundary';\n\n Object.assign(errorUI.style, {\n padding: '2rem',\n borderRadius: '8px',\n background: '#fff3cd',\n border: '1px solid #ffc107',\n color: '#856404',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n textAlign: 'center'\n });\n\n const icon = document.createElement('div');\n icon.textContent = '⚠️';\n icon.style.fontSize = '3rem';\n icon.style.marginBottom = '1rem';\n\n const title = document.createElement('h3');\n title.textContent = 'Application Error';\n title.style.margin = '0 0 0.5rem 0';\n\n const message = document.createElement('p');\n message.textContent = result.message || 'An error occurred';\n message.style.margin = '0 0 1rem 0';\n\n const button = document.createElement('button');\n button.textContent = '🔄 Reload';\n Object.assign(button.style, {\n padding: '0.5rem 1rem',\n background: '#ffc107',\n border: 'none',\n borderRadius: '4px',\n cursor: 'pointer',\n fontWeight: 'bold',\n color: '#000'\n });\n\n button.addEventListener('click', () => window.location.reload());\n\n errorUI.appendChild(icon);\n errorUI.appendChild(title);\n errorUI.appendChild(message);\n errorUI.appendChild(button);\n\n container.appendChild(errorUI);\n }\n\n /**\n * 📝 LOG ERROR: Registrar error\n * @param {Error} error - Error\n * @param {Object} context - Contexto\n */\n logError(error, context) {\n // Truncate stack to first 5 lines to prevent retaining large object references\n const stack = error.stack ? error.stack.split('\\n').slice(0, 5).join('\\n') : '';\n\n // Shallow-copy context to avoid retaining references to live objects\n const safeContext = {};\n for (const key of Object.keys(context)) {\n const val = context[key];\n if (typeof val === 'string' || typeof val === 'number' || typeof val === 'boolean' || val === null) {\n safeContext[key] = val;\n } else {\n safeContext[key] = String(val);\n }\n }\n\n const errorEntry = {\n error: {\n name: error.name,\n message: error.message,\n stack\n },\n context: safeContext,\n timestamp: Date.now()\n };\n\n this.errorLog.push(errorEntry);\n\n // Maintain log limit\n if (this.errorLog.length > this.maxErrorLog) {\n this.errorLog.shift();\n }\n }\n\n /**\n * 📋 GET ERROR LOG: Obtener log de errores\n * @param {number} limit - Límite de errores a retornar\n * @returns {Array}\n */\n getErrorLog(limit = 10) {\n return this.errorLog.slice(-limit);\n }\n\n /**\n * 📊 GET STATS: Estadísticas de errores\n * @returns {Object}\n */\n getStats() {\n const errorsByType = {};\n\n this.errorLog.forEach(entry => {\n const type = entry.error.name || 'Unknown';\n errorsByType[type] = (errorsByType[type] || 0) + 1;\n });\n\n return {\n totalErrors: this.errorLog.length,\n handlers: this.handlers.length,\n errorsByType,\n recentErrors: this.getErrorLog(5)\n };\n }\n\n /**\n * ⚙️ CONFIGURE: Configurar error boundary\n * @param {Object} config - Nueva configuración\n */\n configure(config) {\n this.config = {\n ...this.config,\n ...config\n };\n }\n\n /**\n * 🧹 CLEANUP: Limpiar error boundary.\n * Clears the error log AND the handler chain. If you re-init (e.g.\n * via WuCore destroy → new framework instance), default handlers\n * are re-registered fresh by the next constructor call.\n *\n * Pre-v2.0 cleanup only emptied the log, so destroy+reinit doubled\n * the default handlers each cycle.\n */\n cleanup() {\n this.errorLog = [];\n this.handlers = [];\n logger.debug('[WuErrorBoundary] 🧹 Error boundary cleaned up');\n }\n}\n","/**\n * 🪝 WU-HOOKS: LIFECYCLE MIDDLEWARE SYSTEM\n *\n * Sistema de hooks basado en middleware pattern para control fino:\n * - Middleware chain con next()\n * - Puede cancelar operaciones (no llamar next)\n * - Puede modificar contexto\n * - Prioridad de hooks\n * - Async/await support\n */\n\nimport { logger } from './wu-logger.js';\n\nexport class WuLifecycleHooks {\n constructor(core) {\n this.core = core;\n this.hooks = new Map();\n this.executionLog = [];\n this.maxLogSize = 100;\n\n // Lifecycle phases disponibles\n this.lifecyclePhases = [\n 'beforeInit', // Antes de inicializar framework\n 'afterInit', // Después de inicializar\n 'beforeLoad', // Antes de cargar una app\n 'afterLoad', // Después de cargar\n 'beforeMount', // Antes de montar\n 'afterMount', // Después de montar\n 'beforeUnmount', // Antes de desmontar\n 'afterUnmount', // Después de desmontar\n 'beforeDestroy', // Antes de destruir framework\n 'afterDestroy' // Después de destruir\n ];\n\n // Inicializar hooks\n this.lifecyclePhases.forEach(phase => {\n this.hooks.set(phase, []);\n });\n\n logger.debug('[WuHooks] 🪝 Lifecycle hooks initialized');\n }\n\n /**\n * 📦 USE: Registrar middleware hook\n * @param {string} phase - Fase del lifecycle\n * @param {Function} middleware - Función middleware (context, next)\n * @param {Object} options - { priority, name }\n */\n use(phase, middleware, options = {}) {\n if (!this.hooks.has(phase)) {\n throw new Error(`[WuHooks] Unknown lifecycle phase: ${phase}`);\n }\n\n if (typeof middleware !== 'function') {\n throw new Error('[WuHooks] Middleware must be a function');\n }\n\n const hook = {\n middleware,\n name: options.name || `hook_${Date.now()}`,\n priority: options.priority || 0,\n registeredAt: Date.now()\n };\n\n const hooks = this.hooks.get(phase);\n hooks.push(hook);\n\n // Ordenar por prioridad (mayor primero)\n hooks.sort((a, b) => b.priority - a.priority);\n\n logger.debug(`[WuHooks] Hook \"${hook.name}\" registered for ${phase} (priority: ${hook.priority})`);\n\n // Retornar función para desregistrar\n return () => this.remove(phase, hook.name);\n }\n\n /**\n * 🗑️ REMOVE: Remover hook\n * @param {string} phase - Fase del lifecycle\n * @param {string} name - Nombre del hook\n */\n remove(phase, name) {\n if (!this.hooks.has(phase)) return;\n\n const hooks = this.hooks.get(phase);\n const index = hooks.findIndex(h => h.name === name);\n\n if (index > -1) {\n hooks.splice(index, 1);\n logger.debug(`[WuHooks] Hook \"${name}\" removed from ${phase}`);\n }\n }\n\n /**\n * 🎯 EXECUTE: Ejecutar middleware chain\n * @param {string} phase - Fase del lifecycle\n * @param {Object} context - Contexto a pasar\n * @returns {Promise<Object>} Contexto modificado o { cancelled: true }\n */\n async execute(phase, context = {}) {\n const hooks = this.hooks.get(phase);\n\n if (!hooks || hooks.length === 0) {\n return context;\n }\n\n logger.debug(`[WuHooks] Executing ${hooks.length} hooks for ${phase}`);\n\n // Log para debugging\n const executionEntry = {\n phase,\n timestamp: Date.now(),\n hooksCount: hooks.length,\n hookNames: hooks.map(h => h.name)\n };\n\n let currentContext = { ...context };\n let cancelled = false;\n\n // Crear cadena de middleware\n const executeChain = async (index) => {\n // Si llegamos al final de la cadena, retornar contexto\n if (index >= hooks.length) {\n return currentContext;\n }\n\n const hook = hooks[index];\n const startTime = Date.now();\n\n try {\n let nextCalled = false;\n\n // Función next\n const next = async (modifiedContext) => {\n nextCalled = true;\n\n // Si se pasa un contexto modificado, usarlo\n if (modifiedContext !== undefined) {\n currentContext = { ...currentContext, ...modifiedContext };\n }\n\n // Continuar con siguiente hook\n return await executeChain(index + 1);\n };\n\n // Ejecutar middleware\n await hook.middleware(currentContext, next);\n\n // Si no se llamó next(), la operación fue cancelada\n if (!nextCalled) {\n logger.debug(`[WuHooks] Hook \"${hook.name}\" cancelled execution`);\n cancelled = true;\n return { cancelled: true };\n }\n\n const duration = Date.now() - startTime;\n logger.debug(`[WuHooks] Hook \"${hook.name}\" executed in ${duration}ms`);\n\n } catch (error) {\n console.error(`[WuHooks] Error in hook \"${hook.name}\":`, error);\n\n // Si hay error, pasar al siguiente hook\n return await executeChain(index + 1);\n }\n\n return currentContext;\n };\n\n // Ejecutar cadena\n const result = await executeChain(0);\n\n // Completar log\n executionEntry.duration = Date.now() - executionEntry.timestamp;\n executionEntry.cancelled = cancelled;\n executionEntry.success = !cancelled;\n\n this.executionLog.push(executionEntry);\n\n // Mantener límite de log\n if (this.executionLog.length > this.maxLogSize) {\n this.executionLog.shift();\n }\n\n return result;\n }\n\n /**\n * 🚀 HELPER: Registrar hook para múltiples fases\n * @param {Array<string>} phases - Fases del lifecycle\n * @param {Function} middleware - Función middleware\n * @param {Object} options - Opciones\n * @returns {Function} Función para desregistrar de todas las fases\n */\n useMultiple(phases, middleware, options = {}) {\n const unregisterFns = phases.map(phase =>\n this.use(phase, middleware, { ...options, name: `${options.name}_${phase}` })\n );\n\n // Retornar función que desregistra de todas las fases\n return () => unregisterFns.forEach(fn => fn());\n }\n\n /**\n * 📋 GET HOOKS: Obtener hooks registrados\n * @param {string} phase - Fase del lifecycle (opcional)\n * @returns {Object|Array}\n */\n getHooks(phase) {\n if (phase) {\n return this.hooks.get(phase) || [];\n }\n\n // Retornar todos los hooks\n const allHooks = {};\n this.hooks.forEach((hooks, phase) => {\n allHooks[phase] = hooks.map(h => ({\n name: h.name,\n priority: h.priority,\n registeredAt: h.registeredAt\n }));\n });\n\n return allHooks;\n }\n\n /**\n * 📊 GET STATS: Estadísticas de hooks\n * @returns {Object}\n */\n getStats() {\n const totalHooks = Array.from(this.hooks.values())\n .reduce((sum, hooks) => sum + hooks.length, 0);\n\n const executionsByPhase = {};\n this.executionLog.forEach(entry => {\n executionsByPhase[entry.phase] = (executionsByPhase[entry.phase] || 0) + 1;\n });\n\n const avgDuration = this.executionLog.length > 0\n ? this.executionLog.reduce((sum, entry) => sum + entry.duration, 0) / this.executionLog.length\n : 0;\n\n const cancelledCount = this.executionLog.filter(entry => entry.cancelled).length;\n\n return {\n totalHooks,\n totalExecutions: this.executionLog.length,\n executionsByPhase,\n avgDuration: Math.round(avgDuration),\n cancelledCount,\n recentExecutions: this.executionLog.slice(-10)\n };\n }\n\n /**\n * 🧹 CLEANUP: Limpiar todos los hooks\n * @param {string} phase - Fase específica (opcional)\n */\n cleanup(phase) {\n if (phase) {\n this.hooks.set(phase, []);\n logger.debug(`[WuHooks] Hooks cleaned for ${phase}`);\n } else {\n this.lifecyclePhases.forEach(p => {\n this.hooks.set(p, []);\n });\n this.executionLog = [];\n logger.debug('[WuHooks] 🧹 All hooks cleaned');\n }\n }\n}\n\n/**\n * 🔧 HELPER: Crear middleware hooks fácilmente\n */\n\n/**\n * Crear hook simple que siempre llama next\n * @param {Function} fn - Función a ejecutar\n * @returns {Function} Middleware function\n */\nexport const createSimpleHook = (fn) => {\n return async (context, next) => {\n await fn(context);\n await next();\n };\n};\n\n/**\n * Crear hook condicional\n * @param {Function} condition - Función de condición (context) => boolean\n * @param {Function} fn - Función a ejecutar si condición es true\n * @returns {Function} Middleware function\n */\nexport const createConditionalHook = (condition, fn) => {\n return async (context, next) => {\n if (await condition(context)) {\n await fn(context);\n }\n await next();\n };\n};\n\n/**\n * Crear hook que puede cancelar operación\n * @param {Function} shouldContinue - Función que retorna true para continuar\n * @returns {Function} Middleware function\n */\nexport const createGuardHook = (shouldContinue) => {\n return async (context, next) => {\n if (await shouldContinue(context)) {\n await next();\n }\n // Si no retorna true, no llama next() y cancela\n };\n};\n\n/**\n * Crear hook que modifica contexto\n * @param {Function} transformer - Función que transforma el contexto\n * @returns {Function} Middleware function\n */\nexport const createTransformHook = (transformer) => {\n return async (context, next) => {\n const modified = await transformer(context);\n await next(modified);\n };\n};\n\n/**\n * Crear hook con timeout\n * @param {Function} fn - Función a ejecutar\n * @param {number} timeout - Timeout en ms\n * @returns {Function} Middleware function\n */\nexport const createTimedHook = (fn, timeout = 5000) => {\n return async (context, next) => {\n const timeoutPromise = new Promise((_, reject) =>\n setTimeout(() => reject(new Error('Hook timeout')), timeout)\n );\n\n try {\n await Promise.race([fn(context), timeoutPromise]);\n await next();\n } catch (error) {\n console.error('[WuHooks] Timed hook failed:', error);\n await next(); // Continuar a pesar del error\n }\n };\n};\n","/**\n * WU-PREFETCH: Intelligent Prefetching with Speculation Rules API\n *\n * Prefetches microfrontend modules BEFORE they're needed using:\n * 1. Speculation Rules API (Chrome 121+) — browser-native prerender/prefetch\n * 2. <link rel=\"modulepreload\"> — ES module prefetch (all modern browsers)\n * 3. <link rel=\"prefetch\"> — generic fallback\n *\n * Trigger modes:\n * - immediate: prefetch now\n * - hover: prefetch when user hovers a target element\n * - visible: prefetch when target element enters viewport (IntersectionObserver)\n * - idle: prefetch during browser idle time (requestIdleCallback)\n *\n * @example\n * // Prefetch immediately\n * wu.prefetch('cart');\n *\n * // Prefetch when user hovers the cart link\n * wu.prefetch('cart', { on: 'hover', target: '#cart-link' });\n *\n * // Prefetch when the section becomes visible\n * wu.prefetch('cart', { on: 'visible', target: '#cart-section' });\n *\n * // Prefetch during idle time\n * wu.prefetch('cart', { on: 'idle' });\n *\n * // Prefetch multiple apps with eagerness control\n * wu.prefetch(['cart', 'profile'], { eagerness: 'moderate' });\n */\n\nimport { logger } from './wu-logger.js';\n\nexport class WuPrefetch {\n constructor(core) {\n this.core = core;\n\n // Track what we've already prefetched to avoid duplicates\n this.prefetched = new Set();\n\n // Active observers and listeners (for cleanup)\n this._observers = new Map();\n this._listeners = [];\n\n // Speculation Rules script element (one per page, updated dynamically)\n this._speculationScript = null;\n this._speculationRules = { prefetch: [], prerender: [] };\n\n // Detect browser support\n this.supportsSpeculationRules = this._detectSpeculationRules();\n this.supportsModulePreload = this._detectModulePreload();\n\n logger.wuDebug(\n `[WuPrefetch] Initialized — ` +\n `Speculation Rules: ${this.supportsSpeculationRules ? 'yes' : 'no'}, ` +\n `Module Preload: ${this.supportsModulePreload ? 'yes' : 'no'}`\n );\n }\n\n // ─── Detection ───────────────────────────────────────────────\n\n _detectSpeculationRules() {\n if (typeof HTMLScriptElement === 'undefined') return false;\n return HTMLScriptElement.supports?.('speculationrules') ?? false;\n }\n\n _detectModulePreload() {\n if (typeof document === 'undefined') return false;\n const link = document.createElement('link');\n return link.relList?.supports?.('modulepreload') ?? false;\n }\n\n // ─── Main API ────────────────────────────────────────────────\n\n /**\n * Prefetch one or more apps.\n *\n * @param {string|string[]} appNames - App name(s) to prefetch\n * @param {Object} [options]\n * @param {'immediate'|'hover'|'visible'|'idle'} [options.on='immediate'] - Trigger mode\n * @param {string|Element} [options.target] - CSS selector or element (for hover/visible)\n * @param {'conservative'|'moderate'|'eager'} [options.eagerness='moderate'] - Speculation Rules eagerness\n * @returns {Promise<void>|Function} Promise for immediate, cleanup function for deferred\n */\n async prefetch(appNames, options = {}) {\n const names = Array.isArray(appNames) ? appNames : [appNames];\n const trigger = options.on || 'immediate';\n\n switch (trigger) {\n case 'immediate':\n return this._prefetchImmediate(names, options);\n\n case 'hover':\n return this._prefetchOnHover(names, options);\n\n case 'visible':\n return this._prefetchOnVisible(names, options);\n\n case 'idle':\n return this._prefetchOnIdle(names, options);\n\n default:\n logger.wuWarn(`[WuPrefetch] Unknown trigger \"${trigger}\", using immediate`);\n return this._prefetchImmediate(names, options);\n }\n }\n\n // ─── Immediate Prefetch ──────────────────────────────────────\n\n async _prefetchImmediate(appNames, options) {\n const urls = await this._resolveAppUrls(appNames);\n if (urls.length === 0) return;\n\n // Mark all as prefetched by name (prevents duplicate resolution)\n urls.forEach(({ name }) => this.prefetched.add(name));\n\n // Strategy 1: Speculation Rules API (Chrome 121+)\n if (this.supportsSpeculationRules) {\n this._addSpeculationRules(urls, options.eagerness || 'moderate');\n return;\n }\n\n // Strategy 2: <link rel=\"modulepreload\"> for ES modules\n if (this.supportsModulePreload) {\n urls.forEach(({ url }) => this._injectModulePreload(url));\n return;\n }\n\n // Strategy 3: <link rel=\"prefetch\"> fallback\n urls.forEach(({ url }) => this._injectPrefetch(url));\n }\n\n // ─── Hover Trigger ───────────────────────────────────────────\n\n _prefetchOnHover(appNames, options) {\n const target = this._resolveTarget(options.target);\n if (!target) {\n logger.wuWarn('[WuPrefetch] hover trigger requires a target element or selector');\n return () => {};\n }\n\n let done = false;\n\n // Forward declaration so handler() can call cleanup() to self-evict.\n const cleanup = () => {\n target.removeEventListener('mouseenter', handler);\n target.removeEventListener('focusin', handler);\n const idx = this._listeners.indexOf(cleanup);\n if (idx !== -1) this._listeners.splice(idx, 1);\n };\n\n const handler = () => {\n if (done) return;\n done = true;\n this._prefetchImmediate(appNames, options);\n // Self-evict: remove listeners AND clear our slot in _listeners so\n // long-running pages don't accumulate dead cleanups (one per hover\n // prefetch ever fired).\n cleanup();\n };\n\n target.addEventListener('mouseenter', handler, { passive: true });\n target.addEventListener('focusin', handler, { passive: true });\n this._listeners.push(cleanup);\n return cleanup;\n }\n\n // ─── Visibility Trigger (IntersectionObserver) ───────────────\n\n _prefetchOnVisible(appNames, options) {\n const target = this._resolveTarget(options.target);\n if (!target) {\n logger.wuWarn('[WuPrefetch] visible trigger requires a target element or selector');\n return () => {};\n }\n\n if (typeof IntersectionObserver === 'undefined') {\n // No IntersectionObserver → prefetch immediately\n this._prefetchImmediate(appNames, options);\n return () => {};\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n this._prefetchImmediate(appNames, options);\n cleanup(); // self-evict from _observers AND disconnect\n break;\n }\n }\n },\n { rootMargin: '200px' } // Start prefetching 200px before visible\n );\n\n observer.observe(target);\n this._observers.set(target, observer);\n\n const cleanup = () => {\n observer.disconnect();\n this._observers.delete(target);\n };\n\n return cleanup;\n }\n\n // ─── Idle Trigger ────────────────────────────────────────────\n\n _prefetchOnIdle(appNames, options) {\n let cleanup; // forward ref so callback can self-evict\n\n const evict = () => {\n if (!cleanup) return;\n const idx = this._listeners.indexOf(cleanup);\n if (idx !== -1) this._listeners.splice(idx, 1);\n };\n\n const callback = () => {\n this._prefetchImmediate(appNames, options);\n evict();\n };\n\n if ('requestIdleCallback' in window) {\n const id = requestIdleCallback(callback, { timeout: 3000 });\n cleanup = () => { cancelIdleCallback(id); evict(); };\n } else {\n // Fallback: setTimeout 2s\n const id = setTimeout(callback, 2000);\n cleanup = () => { clearTimeout(id); evict(); };\n }\n\n this._listeners.push(cleanup);\n return cleanup;\n }\n\n // ─── Speculation Rules API ───────────────────────────────────\n\n _addSpeculationRules(urls, eagerness) {\n const newEntries = urls.filter(({ name }) => !this.prefetched.has(name));\n if (newEntries.length === 0) return;\n\n // Mark as prefetched\n newEntries.forEach(({ name }) => this.prefetched.add(name));\n\n // Build URL list for speculation rules\n const urlList = newEntries.map(({ url }) => url);\n\n // Add prefetch rule\n this._speculationRules.prefetch.push({\n source: 'list',\n urls: urlList,\n eagerness\n });\n\n // Inject or update the speculation rules script\n this._updateSpeculationScript();\n\n logger.wuDebug(\n `[WuPrefetch] Speculation Rules: prefetch ${newEntries.map(e => e.name).join(', ')} ` +\n `(eagerness: ${eagerness})`\n );\n }\n\n _updateSpeculationScript() {\n // Remove existing script (spec requires replacing, not updating)\n if (this._speculationScript) {\n this._speculationScript.remove();\n }\n\n const script = document.createElement('script');\n script.type = 'speculationrules';\n script.textContent = JSON.stringify(this._speculationRules);\n document.head.appendChild(script);\n\n this._speculationScript = script;\n }\n\n // ─── Module Preload ──────────────────────────────────────────\n\n _injectModulePreload(url) {\n if (this.prefetched.has(url)) return;\n this.prefetched.add(url);\n\n const link = document.createElement('link');\n link.rel = 'modulepreload';\n link.href = url;\n document.head.appendChild(link);\n\n logger.wuDebug(`[WuPrefetch] modulepreload: ${url}`);\n }\n\n // ─── Generic Prefetch ────────────────────────────────────────\n\n _injectPrefetch(url) {\n if (this.prefetched.has(url)) return;\n this.prefetched.add(url);\n\n const link = document.createElement('link');\n link.rel = 'prefetch';\n link.href = url;\n link.as = 'script';\n document.head.appendChild(link);\n\n logger.wuDebug(`[WuPrefetch] prefetch: ${url}`);\n }\n\n // ─── URL Resolution ──────────────────────────────────────────\n\n /**\n * Resolve app names to their module URLs.\n * Skips apps that are already mounted, already prefetched, or not registered.\n */\n async _resolveAppUrls(appNames) {\n const results = [];\n\n for (const name of appNames) {\n // Skip if already prefetched\n if (this.prefetched.has(name)) {\n logger.wuDebug(`[WuPrefetch] ${name} already prefetched, skipping`);\n continue;\n }\n\n // Skip if already mounted (no need to prefetch)\n if (this.core.mounted.has(name)) {\n logger.wuDebug(`[WuPrefetch] ${name} already mounted, skipping`);\n continue;\n }\n\n // Skip if already loaded (definition exists)\n if (this.core.definitions.has(name)) {\n logger.wuDebug(`[WuPrefetch] ${name} already defined, skipping`);\n continue;\n }\n\n const app = this.core.apps.get(name);\n if (!app) {\n logger.wuWarn(`[WuPrefetch] App \"${name}\" not registered, cannot prefetch`);\n continue;\n }\n\n try {\n const url = await this.core.resolveModulePath(app);\n results.push({ name, url });\n } catch (error) {\n logger.wuWarn(`[WuPrefetch] Failed to resolve URL for \"${name}\":`, error.message);\n }\n }\n\n return results;\n }\n\n // ─── Helpers ─────────────────────────────────────────────────\n\n _resolveTarget(target) {\n if (!target) return null;\n if (typeof target === 'string') return document.querySelector(target);\n if (target instanceof Element) return target;\n return null;\n }\n\n // ─── Prefetch All Registered (utility) ───────────────────────\n\n /**\n * Prefetch all registered but not-yet-mounted apps.\n * Useful for aggressive prefetching after initial load.\n *\n * @param {Object} [options] - Same options as prefetch()\n */\n async prefetchAll(options = {}) {\n const unmountedApps = [];\n for (const [name] of this.core.apps) {\n if (!this.core.mounted.has(name) && !this.prefetched.has(name)) {\n unmountedApps.push(name);\n }\n }\n\n if (unmountedApps.length === 0) {\n logger.wuDebug('[WuPrefetch] No apps to prefetch');\n return;\n }\n\n logger.wuDebug(`[WuPrefetch] Prefetching all: ${unmountedApps.join(', ')}`);\n return this.prefetch(unmountedApps, options);\n }\n\n // ─── Stats ───────────────────────────────────────────────────\n\n getStats() {\n return {\n prefetched: [...this.prefetched],\n activeObservers: this._observers.size,\n activeListeners: this._listeners.length,\n speculationRulesSupported: this.supportsSpeculationRules,\n modulePreloadSupported: this.supportsModulePreload,\n speculationRules: this._speculationRules\n };\n }\n\n // ─── Cleanup ─────────────────────────────────────────────────\n\n cleanup() {\n // Disconnect all IntersectionObservers\n for (const [, observer] of this._observers) {\n observer.disconnect();\n }\n this._observers.clear();\n\n // Remove all event listeners\n for (const cleanup of this._listeners) {\n cleanup();\n }\n this._listeners = [];\n\n // Remove speculation rules script\n if (this._speculationScript) {\n this._speculationScript.remove();\n this._speculationScript = null;\n }\n\n this._speculationRules = { prefetch: [], prerender: [] };\n this.prefetched.clear();\n\n logger.wuDebug('[WuPrefetch] Cleaned up');\n }\n}\n","/**\n * WU-OVERRIDES: Cookie-based URL overrides for QA/testing\n *\n * SECURITY MODEL:\n * - DISABLED in production by default (must opt-in with allowOverrides: true)\n * - Allowlist of trusted domains (only overrides to whitelisted hosts are accepted)\n * - Visual indicator when overrides are active (prevents silent phishing)\n *\n * How it works:\n * 1. QA sets a cookie: wu-override:cart=http://localhost:5173\n * 2. During wu.init(), overrides are parsed from document.cookie\n * 3. The URL for \"cart\" is replaced ONLY in that browser session\n * 4. Everyone else sees the production URL\n *\n * Cookie format:\n * wu-override:<appName>=<url>\n *\n * @example\n * // Enable in init (required in production)\n * wu.init({\n * apps: [...],\n * overrides: {\n * enabled: true,\n * allowedDomains: ['*.company.com', 'localhost', '*.vercel.app'],\n * showIndicator: true\n * }\n * });\n *\n * // Programmatic API\n * wu.override('cart', 'http://localhost:5173');\n * wu.removeOverride('cart');\n * wu.getOverrides();\n * wu.clearOverrides();\n */\n\nimport { logger } from './wu-logger.js';\n\nconst COOKIE_PREFIX = 'wu-override:';\n\nexport class WuOverrides {\n constructor(config = {}) {\n // In-memory cache of active overrides (synced with cookies)\n this._overrides = new Map();\n\n // Security config\n this._allowedDomains = config.allowedDomains || [];\n this._showIndicator = config.showIndicator ?? true;\n this._indicatorElement = null;\n\n // Determine enabled state:\n // - If explicitly passed → use that value (respect user intent)\n // - If not passed → auto-detect from environment\n if (config.enabled !== undefined) {\n this._enabled = config.enabled;\n } else {\n this._enabled = this._isDevEnvironment();\n }\n\n // Parse existing cookies on construction (only if enabled)\n if (this._enabled) {\n this._parseFromCookies();\n }\n }\n\n // ─── Security: Environment Detection ─────────────────────────\n\n /**\n * Detect if we're in a development environment.\n * Overrides are auto-enabled in dev, disabled in production.\n */\n _isDevEnvironment() {\n if (typeof window === 'undefined') return false;\n\n const hostname = window.location?.hostname || '';\n const port = window.location?.port || '';\n\n // localhost, 127.0.0.1, or non-standard ports = development\n return (\n hostname === 'localhost' ||\n hostname === '127.0.0.1' ||\n hostname === '0.0.0.0' ||\n hostname.endsWith('.local') ||\n (port !== '' && port !== '80' && port !== '443')\n );\n }\n\n // ─── Security: Domain Allowlist ──────────────────────────────\n\n /**\n * Check if a URL's domain is in the allowlist.\n * If no allowlist is configured, all valid URLs are accepted (dev-mode behavior).\n * If an allowlist IS configured, only matching domains pass.\n *\n * @param {string} url\n * @returns {boolean}\n */\n _isDomainAllowed(url) {\n // No allowlist = allow everything (but only if overrides are enabled)\n if (this._allowedDomains.length === 0) return true;\n\n const hostname = this._extractHostname(url);\n if (!hostname) return false;\n\n for (const pattern of this._allowedDomains) {\n if (this._matchDomain(hostname, pattern)) return true;\n }\n\n return false;\n }\n\n /**\n * Extract hostname from a URL string.\n */\n _extractHostname(url) {\n try {\n // Handle localhost:PORT shorthand\n if (/^localhost(:\\d+)?/.test(url)) return 'localhost';\n\n // Handle protocol-relative\n const normalized = url.startsWith('//') ? `https:${url}` : url;\n const parsed = new URL(normalized);\n return parsed.hostname;\n } catch {\n return null;\n }\n }\n\n /**\n * Match a hostname against a domain pattern.\n * Supports wildcard: *.company.com matches sub.company.com\n *\n * @param {string} hostname - e.g., 'cart.staging.company.com'\n * @param {string} pattern - e.g., '*.company.com' or 'localhost'\n * @returns {boolean}\n */\n _matchDomain(hostname, pattern) {\n // Exact match\n if (hostname === pattern) return true;\n\n // Wildcard match: *.company.com\n if (pattern.startsWith('*.')) {\n const suffix = pattern.substring(2); // 'company.com'\n return hostname === suffix || hostname.endsWith('.' + suffix);\n }\n\n return false;\n }\n\n // ─── Cookie Parsing ──────────────────────────────────────────\n\n /**\n * Parse all wu-override cookies from document.cookie.\n * Called automatically on construction and can be called manually to refresh.\n *\n * @returns {Map<string, string>} Map of appName → overrideUrl\n */\n _parseFromCookies() {\n this._overrides.clear();\n\n if (typeof document === 'undefined') return this._overrides;\n\n if (!this._enabled) {\n logger.wuDebug('[WuOverrides] Overrides disabled — skipping cookie parse');\n return this._overrides;\n }\n\n const cookies = document.cookie;\n if (!cookies) return this._overrides;\n\n // Split cookies and find wu-override:* entries\n const pairs = cookies.split(';');\n\n for (const pair of pairs) {\n const trimmed = pair.trim();\n\n if (!trimmed.startsWith(COOKIE_PREFIX)) continue;\n\n // wu-override:cart=http://localhost:5173\n const eqIndex = trimmed.indexOf('=');\n if (eqIndex === -1) continue;\n\n const appName = trimmed.substring(COOKIE_PREFIX.length, eqIndex).trim();\n const url = trimmed.substring(eqIndex + 1).trim();\n\n if (!appName || !url) continue;\n\n // Validate URL format\n if (!this._isValidUrl(url)) {\n logger.wuWarn(`[WuOverrides] Invalid override URL for \"${appName}\": ${url}`);\n continue;\n }\n\n // Validate domain is allowed\n if (!this._isDomainAllowed(url)) {\n logger.wuWarn(\n `[WuOverrides] BLOCKED: \"${appName}\" override to \"${url}\" — ` +\n `domain not in allowedDomains. ` +\n `Allowed: [${this._allowedDomains.join(', ')}]`\n );\n continue;\n }\n\n this._overrides.set(appName, url);\n logger.wuDebug(`[WuOverrides] Parsed override: ${appName} → ${url}`);\n }\n\n if (this._overrides.size > 0) {\n logger.wuInfo(\n `[WuOverrides] ${this._overrides.size} active override(s): ` +\n [...this._overrides.keys()].join(', ')\n );\n }\n\n return this._overrides;\n }\n\n // ─── Apply Overrides ─────────────────────────────────────────\n\n /**\n * Apply overrides to an array of app configs.\n * Mutates the url field of matching apps.\n * Called by WuCore during init, before registerApp.\n *\n * @param {Array<{name: string, url: string}>} apps - App configs to process\n * @returns {Array<{name: string, url: string, _originalUrl?: string}>} Same array, mutated\n */\n applyToApps(apps) {\n if (!this._enabled || this._overrides.size === 0) return apps;\n\n for (const app of apps) {\n const overrideUrl = this._overrides.get(app.name);\n if (overrideUrl) {\n app._originalUrl = app.url;\n app.url = overrideUrl;\n logger.wuInfo(\n `[WuOverrides] \"${app.name}\" overridden: ${app._originalUrl} → ${overrideUrl}`\n );\n }\n }\n\n // Show visual indicator if overrides were applied\n if (this._showIndicator && this._overrides.size > 0) {\n this._showOverrideIndicator();\n }\n\n return apps;\n }\n\n /**\n * Get the override URL for a specific app, or null if none.\n *\n * @param {string} appName\n * @returns {string|null}\n */\n getOverrideFor(appName) {\n return this._overrides.get(appName) || null;\n }\n\n // ─── Programmatic API ────────────────────────────────────────\n\n /**\n * Set an override for an app. Writes a cookie and updates in-memory cache.\n *\n * @param {string} appName - App to override\n * @param {string} url - Override URL (e.g., 'http://localhost:5173')\n * @param {Object} [options]\n * @param {number} [options.maxAge=86400] - Cookie max-age in seconds (default: 24h)\n * @param {string} [options.path='/'] - Cookie path\n */\n set(appName, url, options = {}) {\n if (!appName || !url) {\n throw new Error('[WuOverrides] appName and url are required');\n }\n\n if (!this._enabled) {\n throw new Error(\n '[WuOverrides] Overrides are disabled in this environment. ' +\n 'Enable with wu.init({ overrides: { enabled: true } })'\n );\n }\n\n if (!this._isValidUrl(url)) {\n throw new Error(`[WuOverrides] Invalid URL: ${url}`);\n }\n\n if (!this._isDomainAllowed(url)) {\n throw new Error(\n `[WuOverrides] Domain not allowed: \"${this._extractHostname(url)}\". ` +\n `Allowed: [${this._allowedDomains.join(', ')}]`\n );\n }\n\n const maxAge = options.maxAge ?? 86400; // 24 hours default\n const path = options.path ?? '/';\n\n // Set cookie\n if (typeof document !== 'undefined') {\n document.cookie =\n `${COOKIE_PREFIX}${appName}=${url}; path=${path}; max-age=${maxAge}; SameSite=Lax`;\n }\n\n // Update in-memory cache\n this._overrides.set(appName, url);\n\n // Update visual indicator\n if (this._showIndicator) {\n this._showOverrideIndicator();\n }\n\n logger.wuInfo(`[WuOverrides] Override set: ${appName} → ${url} (expires in ${maxAge}s)`);\n }\n\n /**\n * Remove an override for a specific app.\n *\n * @param {string} appName - App to remove override for\n */\n remove(appName) {\n // Delete cookie by setting max-age=0\n if (typeof document !== 'undefined') {\n document.cookie = `${COOKIE_PREFIX}${appName}=; path=/; max-age=0`;\n }\n\n this._overrides.delete(appName);\n\n // Update or remove indicator\n if (this._showIndicator) {\n if (this._overrides.size === 0) {\n this._removeOverrideIndicator();\n } else {\n this._showOverrideIndicator();\n }\n }\n\n logger.wuInfo(`[WuOverrides] Override removed: ${appName}`);\n }\n\n /**\n * Remove all overrides.\n */\n clearAll() {\n for (const appName of [...this._overrides.keys()]) {\n this.remove(appName);\n }\n\n this._removeOverrideIndicator();\n\n logger.wuInfo('[WuOverrides] All overrides cleared');\n }\n\n /**\n * Get all active overrides as a plain object.\n *\n * @returns {Object} { appName: url, ... }\n */\n getAll() {\n return Object.fromEntries(this._overrides);\n }\n\n /**\n * Check if any overrides are active.\n *\n * @returns {boolean}\n */\n hasOverrides() {\n return this._overrides.size > 0;\n }\n\n /**\n * Check if overrides are enabled in this environment.\n *\n * @returns {boolean}\n */\n isEnabled() {\n return this._enabled;\n }\n\n /**\n * Configure the override system.\n * Called by WuCore during init with config.overrides.\n *\n * @param {Object} config\n * @param {boolean} [config.enabled]\n * @param {string[]} [config.allowedDomains]\n * @param {boolean} [config.showIndicator]\n */\n configure(config = {}) {\n if (config.enabled !== undefined) {\n this._enabled = config.enabled;\n }\n if (config.allowedDomains) {\n this._allowedDomains = config.allowedDomains;\n }\n if (config.showIndicator !== undefined) {\n this._showIndicator = config.showIndicator;\n }\n\n // Re-parse cookies with new config\n if (this._enabled) {\n this._parseFromCookies();\n }\n }\n\n /**\n * Refresh overrides by re-parsing cookies.\n * Useful if cookies were modified externally (DevTools, other tabs).\n */\n refresh() {\n this._parseFromCookies();\n }\n\n // ─── Visual Indicator (anti-phishing) ────────────────────────\n\n /**\n * Show a fixed banner when overrides are active.\n * This prevents silent phishing — the user ALWAYS sees when\n * microfrontends are being loaded from non-standard URLs.\n */\n _showOverrideIndicator() {\n if (typeof document === 'undefined') return;\n\n // Remove existing indicator first\n this._removeOverrideIndicator();\n\n const indicator = document.createElement('div');\n indicator.id = 'wu-override-indicator';\n\n const overrideList = [...this._overrides.entries()]\n .map(([name, url]) => `${name} → ${url}`)\n .join(' | ');\n\n indicator.textContent = `WU OVERRIDE ACTIVE: ${overrideList}`;\n\n indicator.style.cssText = [\n 'position: fixed',\n 'bottom: 0',\n 'left: 0',\n 'right: 0',\n 'z-index: 2147483647',\n 'background: #f59e0b',\n 'color: #000',\n 'font-family: monospace',\n 'font-size: 12px',\n 'font-weight: bold',\n 'padding: 6px 12px',\n 'text-align: center',\n 'cursor: pointer',\n 'user-select: none',\n 'box-shadow: 0 -2px 8px rgba(0,0,0,0.2)'\n ].join(';');\n\n // Click to dismiss (but override stays active)\n indicator.addEventListener('click', () => {\n indicator.style.display = 'none';\n });\n\n // Double-click to clear all overrides\n indicator.addEventListener('dblclick', (e) => {\n e.preventDefault();\n this.clearAll();\n });\n\n indicator.title = 'Click to hide | Double-click to clear all overrides';\n\n document.body.appendChild(indicator);\n this._indicatorElement = indicator;\n }\n\n /**\n * Remove the visual indicator.\n */\n _removeOverrideIndicator() {\n if (this._indicatorElement) {\n this._indicatorElement.remove();\n this._indicatorElement = null;\n }\n // Also remove by ID in case element reference was lost\n if (typeof document !== 'undefined') {\n const existing = document.getElementById('wu-override-indicator');\n if (existing) existing.remove();\n }\n }\n\n // ─── Validation ──────────────────────────────────────────────\n\n _isValidUrl(url) {\n // Accept http://, https://, and // protocol-relative\n if (url.startsWith('http://') || url.startsWith('https://') || url.startsWith('//')) {\n return true;\n }\n // Accept localhost shorthand like localhost:3000\n if (/^localhost(:\\d+)?/.test(url)) {\n return true;\n }\n return false;\n }\n\n // ─── Stats ───────────────────────────────────────────────────\n\n getStats() {\n return {\n enabled: this._enabled,\n activeOverrides: this._overrides.size,\n overrides: this.getAll(),\n allowedDomains: this._allowedDomains,\n showIndicator: this._showIndicator,\n environment: this._isDevEnvironment() ? 'development' : 'production'\n };\n }\n}\n","/**\n * WU-FRAMEWORK: UNIVERSAL MICROFRONTENDS\n * Motor principal agnostico - Funciona con cualquier framework\n */\n\n// WuLoader is imported lazily — it's only needed when the user calls\n// wu.use(componentPath) to load a shared component across apps. Static\n// import would pull its `new Function()` evaluator into the main bundle\n// and trip npm security scanners. See _ensureLoader().\nimport { WuSandbox } from './wu-sandbox.js';\nimport { WuManifest } from './wu-manifest.js';\nimport { logger } from './wu-logger.js';\nimport { default as store } from './wu-store.js';\nimport { WuApp } from './wu-app.js';\nimport { WuCache } from './wu-cache.js';\nimport { WuEventBus } from './wu-event-bus.js';\nimport { WuPerformance } from './wu-performance.js';\nimport { WuPluginSystem } from './wu-plugin.js';\nimport { WuLoadingStrategy } from './wu-strategies.js';\nimport { WuErrorBoundary } from './wu-error-boundary.js';\nimport { WuLifecycleHooks } from './wu-hooks.js';\n// WuHtmlParser, WuScriptExecutor, WuIframeSandbox are imported lazily.\n// They are only needed when an app uses sandbox: 'strict' | 'eval'.\n// The default 'module' mode never loads them — see _ensureEvalDeps / _ensureIframeSandbox.\nimport { WuPrefetch } from './wu-prefetch.js';\nimport { WuOverrides } from './wu-overrides.js';\n\nexport class WuCore {\n constructor(options = {}) {\n // Registros principales\n this.apps = new Map(); // Apps registradas\n this.definitions = new Map(); // Definiciones de lifecycle\n this.manifests = new Map(); // Manifiestos cargados\n this.mounted = new Map(); // Apps montadas\n this.hidden = new Map(); // Keep-alive hidden apps\n this._pendingUnmounts = new Map(); // Deferred unmount timers (StrictMode compat)\n this._mountingPromises = new Map(); // In-flight mount dedup\n this._defineWaiters = new Map(); // Promise waiters for wu.define(): appName -> { resolve, timer, promise }\n this._resolvedPaths = new Map(); // Cached module URL: cacheKey -> resolved path\n // Reference counting for mount/unmount. Survives multi-cycle StrictMode +\n // Suspense scenarios where the 60ms grace timer alone wasn't enough.\n // Each successful mount() increments; each unmount() decrements; real\n // teardown only happens when the count hits 0.\n this._mountRefs = new Map(); // appName -> int\n\n // Componentes core\n this.sandbox = new WuSandbox();\n this.manifest = new WuManifest();\n this.store = store;\n\n // Strict/eval sandbox support is lazy-instantiated on first use.\n // See _ensureEvalDeps() — module mode never pays this cost.\n this.htmlParser = null;\n this.scriptExecutor = null;\n this._WuIframeSandbox = null;\n // Loader for wu.use() — same lazy pattern. Only instantiated when a\n // caller actually requests a shared component. See _ensureLoader().\n this.loader = null;\n\n // Sistemas esenciales\n // Cache: localStorage backing has a real-world ceiling of ~5MB per origin.\n // Pre-v2.0 we configured 100MB which only acted as the in-memory LRU cap\n // and produced misleading \"100MB cache\" expectations. 4MB stays under the\n // tightest browser quota (Safari) and keeps eviction predictable.\n this.cache = new WuCache({ storage: 'localStorage', maxSize: 4 });\n this.eventBus = new WuEventBus();\n this.performance = new WuPerformance();\n\n // Advanced systems\n this.pluginSystem = new WuPluginSystem(this);\n this.strategies = new WuLoadingStrategy(this);\n this.errorBoundary = new WuErrorBoundary(this);\n this.hooks = new WuLifecycleHooks(this);\n this.prefetcher = new WuPrefetch(this);\n this.overrides = new WuOverrides();\n\n // Estado\n this.isInitialized = false;\n\n logger.wuInfo('Wu Framework initialized - Universal Microfrontends');\n }\n\n /**\n * Inicializar wu-framework con configuracion de apps\n * @param {Object} config - Configuracion { apps: [{name, url}, ...] }\n */\n async init(config) {\n if (this.isInitialized) {\n logger.wuWarn('Framework already initialized');\n return;\n }\n\n // Global sandbox mode: 'module' (default), 'strict', or 'eval'\n this._sandboxMode = config.sandbox || 'module';\n // Global policy: when strict mode can't load via iframe (CORS, etc.),\n // should we degrade to eval? Default true for compat. Set false to throw.\n this._strictFallback = config.strictFallback !== false;\n\n logger.wuDebug(`Initializing (sandbox: ${this._sandboxMode}) with apps:`, config.apps?.map(app => app.name));\n\n try {\n // Execute beforeInit hooks\n const beforeInitResult = await this.hooks.execute('beforeInit', { config });\n if (beforeInitResult.cancelled) {\n logger.wuWarn('Initialization cancelled by beforeInit hook');\n return;\n }\n\n // Call plugin beforeInit hooks\n await this.pluginSystem.callHook('beforeInit', { config });\n\n // Configure and apply cookie overrides (QA/testing: wu-override:<app>=<url>)\n if (config.overrides) {\n this.overrides.configure(config.overrides);\n }\n const apps = config.apps || [];\n this.overrides.refresh();\n this.overrides.applyToApps(apps);\n\n // Registrar todas las apps\n for (const appConfig of apps) {\n await this.registerApp(appConfig);\n }\n\n // Preload apps with eager/preload strategies\n await this.strategies.preload(config.apps || []);\n\n this.isInitialized = true;\n\n // Execute afterInit hooks\n await this.hooks.execute('afterInit', { config });\n\n // Call plugin afterInit hooks\n await this.pluginSystem.callHook('afterInit', { config });\n\n logger.wuInfo('Framework initialized successfully');\n } catch (error) {\n logger.wuError('Initialization failed:', error);\n\n // Call plugin error hooks\n await this.pluginSystem.callHook('onError', { phase: 'init', error });\n\n throw error;\n }\n }\n\n /**\n * Registrar una aplicacion\n * @param {Object} appConfig - { name, url, keepAlive, sandbox, container, ... }\n */\n async registerApp(appConfig) {\n const { name, url } = appConfig;\n\n try {\n logger.wuDebug(`Registering app: ${name} from ${url}`);\n\n // Cargar manifest\n const manifestData = await this.manifest.load(url);\n this.manifests.set(name, manifestData);\n\n // Registrar la app — preserve all config fields (keepAlive, sandbox, container, etc.)\n this.apps.set(name, {\n ...appConfig,\n manifest: manifestData,\n status: 'registered'\n });\n\n logger.wuDebug(`App ${name} registered successfully`);\n } catch (error) {\n logger.wuError(`Failed to register app ${name}:`, error);\n throw error;\n }\n }\n\n /**\n * Definir lifecycle de una micro-app\n * @param {string} appName - Nombre de la app\n * @param {Object} lifecycle - { mount, unmount }\n */\n define(appName, lifecycle) {\n if (!lifecycle.mount) {\n throw new Error(`[Wu] Mount function required for app: ${appName}`);\n }\n\n this.definitions.set(appName, lifecycle);\n\n // Resolve any pending waiter created by _waitForDefine().\n // This eliminates the previous 50ms-interval polling.\n const waiter = this._defineWaiters.get(appName);\n if (waiter) {\n clearTimeout(waiter.timer);\n this._defineWaiters.delete(appName);\n waiter.resolve();\n }\n\n // Dispatch custom event for external listeners\n const event = new CustomEvent('wu:app:ready', {\n detail: { appName, timestamp: Date.now() }\n });\n window.dispatchEvent(event);\n\n logger.wuDebug(`Lifecycle defined for: ${appName}`);\n }\n\n /**\n * Mount app with multi-retry mounting and recovery.\n * If the app is in keep-alive (hidden) state, shows it instantly.\n *\n * @param {string} appName - Nombre de la app\n * @param {string} containerSelector - Selector del contenedor\n */\n async mount(appName, containerSelector) {\n // ── StrictMode + Suspense compat: reference counting ──\n // Old approach was a single 60ms grace timer cancelled by the second\n // mount(). That works for one mount→unmount→mount cycle but breaks\n // when Suspense schedules multiple. Ref counting is naturally robust:\n // every mount() increments, every unmount() decrements, teardown only\n // runs when count hits 0 AND the grace timer fires without a remount.\n const prevRefs = this._mountRefs.get(appName) || 0;\n this._mountRefs.set(appName, prevRefs + 1);\n logger.wuDebug(`${appName} mount refs: ${prevRefs} → ${prevRefs + 1}`);\n\n if (this._pendingUnmounts.has(appName)) {\n clearTimeout(this._pendingUnmounts.get(appName));\n this._pendingUnmounts.delete(appName);\n logger.wuDebug(`${appName} deferred unmount cancelled by remount`);\n }\n\n // Already mounted in same container → no-op (refs already incremented above)\n if (this.mounted.has(appName)) {\n const existing = this.mounted.get(appName);\n if (existing.containerSelector === containerSelector) {\n logger.wuDebug(`${appName} already mounted in ${containerSelector}`);\n return;\n }\n }\n\n // Deduplicate concurrent mounts (StrictMode fires effect twice)\n if (this._mountingPromises.has(appName)) {\n logger.wuDebug(`${appName} mount already in progress, deduplicating`);\n return await this._mountingPromises.get(appName);\n }\n\n // Check if app is in keep-alive (hidden) state\n const hiddenEntry = this.hidden.get(appName);\n if (hiddenEntry) {\n if (hiddenEntry.containerSelector === containerSelector) {\n // Same container → instant show (no reload)\n return await this.show(appName);\n }\n // Different container → destroy hidden state, remount normally\n await this._destroyHidden(appName);\n }\n\n // Track mount promise for deduplication\n const mountPromise = this.mountWithRecovery(appName, containerSelector, 0);\n this._mountingPromises.set(appName, mountPromise);\n\n try {\n return await mountPromise;\n } finally {\n this._mountingPromises.delete(appName);\n }\n }\n\n /**\n * Mount with recovery: self-healing app mounting\n */\n async mountWithRecovery(appName, containerSelector, attempt = 0) {\n const maxAttempts = 3;\n\n try {\n // Start performance measurement\n this.performance.startMeasure('mount', appName);\n\n logger.wuDebug(`Mounting ${appName} in ${containerSelector} (attempt ${attempt + 1})`);\n\n // Execute beforeLoad hooks\n const beforeLoadResult = await this.hooks.execute('beforeLoad', { appName, containerSelector, attempt });\n if (beforeLoadResult.cancelled) {\n logger.wuWarn('Mount cancelled by beforeLoad hook');\n return;\n }\n\n // Call plugin beforeMount hooks\n const pluginBeforeMount = await this.pluginSystem.callHook('beforeMount', { appName, containerSelector });\n if (pluginBeforeMount === false) {\n logger.wuWarn('Mount cancelled by plugin beforeMount hook');\n return;\n }\n\n // Verify app is registered\n const app = this.apps.get(appName);\n if (!app) {\n throw new Error(`App ${appName} not registered. Call wu.init() first.`);\n }\n\n // Container reality check\n const container = document.querySelector(containerSelector);\n if (!container) {\n throw new Error(`Container not found: ${containerSelector}`);\n }\n\n // Create sandbox - pasar manifest con styleMode y URL de la app\n const sandbox = this.sandbox.create(appName, container, {\n manifest: app.manifest,\n styleMode: app.manifest?.styleMode,\n appUrl: app.url // Pasar URL de la app para filtrar estilos de apps fully-isolated\n });\n\n // Execute afterLoad hooks\n await this.hooks.execute('afterLoad', { appName, containerSelector, sandbox });\n\n // Resolve lifecycle definition\n let lifecycle = this.definitions.get(appName);\n if (!lifecycle) {\n // Load remote app\n await this.loadAndMountRemoteApp(app, sandbox);\n lifecycle = this.definitions.get(appName);\n\n if (!lifecycle) {\n throw new Error(`App ${appName} did not register with wu.define()`);\n }\n }\n\n // Execute beforeMount hooks\n const beforeMountResult = await this.hooks.execute('beforeMount', { appName, containerSelector, sandbox, lifecycle });\n if (beforeMountResult.cancelled) {\n logger.wuWarn('Mount cancelled by beforeMount hook');\n return;\n }\n\n // Wait for styles to be ready before mounting\n if (sandbox.stylesReady) {\n logger.wuDebug(`Waiting for styles to be ready for ${appName}...`);\n await sandbox.stylesReady;\n logger.wuDebug(`Styles ready for ${appName}`);\n }\n\n // Execute mount lifecycle\n await lifecycle.mount(sandbox.container);\n\n // Register mounted app\n this.mounted.set(appName, {\n app,\n sandbox,\n lifecycle,\n container: sandbox.container,\n hostContainer: container,\n containerSelector,\n timestamp: Date.now(),\n state: 'stable'\n });\n\n // End performance measurement\n const mountTime = this.performance.endMeasure('mount', appName);\n\n // Execute afterMount hooks\n await this.hooks.execute('afterMount', { appName, containerSelector, sandbox, mountTime });\n\n // Call plugin afterMount hooks\n await this.pluginSystem.callHook('afterMount', { appName, containerSelector, mountTime });\n\n // Emit mount event\n this.eventBus.emit('app:mounted', { appName, mountTime, attempt }, { appName });\n\n logger.wuInfo(`${appName} mounted successfully in ${mountTime.toFixed(2)}ms`);\n\n } catch (error) {\n logger.wuError(`Mount attempt ${attempt + 1} failed for ${appName}:`, error);\n\n // Cleanup sandbox to prevent orphaned shadow DOMs\n try {\n if (this.sandbox && this.sandbox.sandboxes && this.sandbox.sandboxes.has(appName)) {\n const sb = this.sandbox.sandboxes.get(appName);\n if (sb && sb.proxySandbox) {\n sb.proxySandbox.deactivate();\n }\n this.sandbox.sandboxes.delete(appName);\n logger.wuDebug(`Sandbox cleaned up after mount failure for ${appName}`);\n }\n } catch (cleanupError) {\n logger.wuWarn(`Sandbox cleanup failed for ${appName}:`, cleanupError);\n }\n\n // Use error boundary for intelligent error handling\n const errorResult = await this.errorBoundary.handle(error, {\n appName,\n containerSelector,\n retryCount: attempt,\n container: containerSelector\n });\n\n // Si el error boundary recupero el error, no necesitamos reintentar\n if (errorResult.recovered) {\n logger.wuDebug('Error recovered by error boundary');\n return;\n }\n\n // Recovery protocol\n if (attempt < maxAttempts - 1 && errorResult.action === 'retry') {\n logger.wuDebug('Initiating recovery protocol...');\n\n // Clean app state\n await this.appStateCleanup(appName, containerSelector);\n\n // Temporal stabilization\n await new Promise(resolve => setTimeout(resolve, 1000 * (attempt + 1)));\n\n // Recursive mounting with recovery\n return await this.mountWithRecovery(appName, containerSelector, attempt + 1);\n }\n\n // Call plugin error hooks\n await this.pluginSystem.callHook('onError', { phase: 'mount', error, appName });\n\n // Final mount failure - error boundary already handled fallback UI\n throw error;\n }\n }\n\n /**\n * App state cleanup: Enhanced container cleanup with framework protection\n */\n async appStateCleanup(appName, containerSelector) {\n try {\n logger.wuDebug(`Starting app state cleanup for ${appName}...`);\n\n // Clear hidden (keep-alive) state if present\n if (this.hidden.has(appName)) {\n try {\n await this._destroyHidden(appName);\n } catch (hiddenError) {\n logger.wuWarn('Hidden app cleanup failed:', hiddenError);\n }\n }\n\n // Clear any existing mounted state safely\n if (this.mounted.has(appName)) {\n try {\n await this.unmount(appName, { force: true });\n } catch (unmountError) {\n logger.wuWarn('Unmount failed during cleanup:', unmountError);\n }\n }\n\n // Enhanced container cleanup with Vue safety measures\n const container = document.querySelector(containerSelector);\n if (container) {\n // Protect Vue's reactivity system\n if (container.shadowRoot) {\n try {\n // Clear shadow root content safely\n const shadowChildren = Array.from(container.shadowRoot.children);\n shadowChildren.forEach(child => {\n try {\n child.remove();\n } catch (removeError) {\n logger.wuWarn('Failed to remove shadow child:', removeError);\n }\n });\n } catch (shadowError) {\n logger.wuWarn('Shadow root cleanup failed:', shadowError);\n }\n }\n\n // Clear any direct children if no shadow root\n if (!container.shadowRoot && container.children.length > 0) {\n try {\n container.innerHTML = '';\n } catch (htmlError) {\n logger.wuWarn('Container innerHTML cleanup failed:', htmlError);\n }\n }\n\n // Reset container attributes\n container.removeAttribute('data-wu-app');\n container.removeAttribute('data-quantum-state');\n container.removeAttribute('wu-debug');\n }\n\n // Reset definition state\n this.definitions.delete(appName);\n\n // Clear sandbox registry\n if (this.sandbox && this.sandbox.sandboxes) {\n this.sandbox.sandboxes.delete(appName);\n }\n\n logger.wuDebug(`App state cleaned successfully for ${appName}`);\n\n } catch (cleanupError) {\n logger.wuWarn(`App cleanup partial failure for ${appName}:`, cleanupError);\n\n // Emergency cleanup - force clear everything\n try {\n const container = document.querySelector(containerSelector);\n if (container) {\n container.style.display = 'none';\n setTimeout(() => {\n if (container) {\n container.style.display = '';\n }\n }, 100);\n }\n } catch (emergencyError) {\n logger.wuError('Emergency cleanup failed:', emergencyError);\n }\n }\n }\n\n /**\n * Remote app loader: Load app in the configured sandbox mode.\n *\n * ⚠️ Honest naming note: \"sandbox\" is a level, not a guarantee.\n *\n * ┌──────────┬────────────────────┬─────────────────────────────────┐\n * │ Mode │ JS isolation │ Real behavior │\n * ├──────────┼────────────────────┼─────────────────────────────────┤\n * │ module │ NONE (cleanup-only)│ Code runs in main window. The │\n * │ (default)│ │ proxy TRACKS side effects so │\n * │ │ │ unmount can clean them. App can │\n * │ │ │ still pollute globals at will. │\n * ├──────────┼────────────────────┼─────────────────────────────────┤\n * │ strict │ Iframe-level │ Separate window (real isolation)│\n * │ │ │ + real import() (HMR works). │\n * │ │ │ Falls back to 'eval' if CORS │\n * │ │ │ blocks the import — control via │\n * │ │ │ { strictFallback: false }. │\n * ├──────────┼────────────────────┼─────────────────────────────────┤\n * │ eval │ Proxy-trap-level │ Code runs inside with(proxy){}. │\n * │ │ │ All unqualified refs go through │\n * │ │ │ traps. Requires UMD/IIFE bundles│\n * │ │ │ (not ES modules). │\n * └──────────┴────────────────────┴─────────────────────────────────┘\n *\n * Verify the actual mode used at runtime via `wu.getSandboxInfo(appName)`.\n *\n * Set per-app: { name: 'app', url: '...', sandbox: 'strict' }\n * Or globally: wu.init({ sandbox: 'strict', apps: [...] })\n */\n async loadAndMountRemoteApp(app, sandbox) {\n const requestedMode = app.sandbox || this._sandboxMode || 'module';\n // sandbox._actualMode is set by _loadStrict if it falls back to eval\n sandbox._requestedMode = requestedMode;\n sandbox._actualMode = requestedMode;\n\n if (requestedMode === 'strict') {\n await this._loadStrict(app, sandbox);\n } else if (requestedMode === 'eval') {\n await this._loadEval(app, sandbox);\n } else {\n await this._loadModule(app, sandbox);\n }\n }\n\n /**\n * Inspect the JS isolation level for a mounted app. Useful to verify that\n * a 'strict' request didn't silently degrade to 'eval' (CORS failures).\n *\n * @param {string} appName\n * @returns {{ requestedMode: string, actualMode: string, isolationLevel: 'none'|'iframe'|'proxy-trap', mounted: boolean }|null}\n *\n * @example\n * wu.init({ apps: [{ name: 'cart', url: '...', sandbox: 'strict' }] });\n * await wu.mount('cart', '#cart');\n * const info = wu.getSandboxInfo('cart');\n * if (info.actualMode !== 'strict') {\n * console.warn('Strict mode degraded — likely a CORS issue with', info);\n * }\n */\n /**\n * Tag a style/link element as belonging to a specific app, so that\n * `fully-isolated` (alias: `own-only`) styleMode picks it up regardless\n * of bundler. Pre-v2.1, only Vite's `data-vite-dev-id` was recognized —\n * webpack / esbuild users had to rely on the URL-pattern fallback.\n *\n * Call this from your app's bootstrap when injecting global styles:\n *\n * @example\n * const style = document.createElement('style');\n * style.textContent = '...';\n * wu.tagStyleAsApp(style, 'cart');\n * document.head.appendChild(style);\n *\n * @param {HTMLElement} el - <style> or <link> element\n * @param {string} appName - The app this style belongs to\n */\n tagStyleAsApp(el, appName) {\n if (!el || typeof el.setAttribute !== 'function' || !appName) return;\n el.setAttribute('data-wu-app', appName);\n }\n\n getSandboxInfo(appName) {\n const mounted = this.mounted.get(appName) || this.hidden.get(appName);\n if (!mounted) return null;\n const sb = mounted.sandbox;\n const actualMode = sb._actualMode || sb._requestedMode || 'module';\n const isolationLevel =\n actualMode === 'strict' ? 'iframe' :\n actualMode === 'eval' ? 'proxy-trap' :\n 'none';\n return {\n requestedMode: sb._requestedMode || 'module',\n actualMode,\n isolationLevel,\n mounted: this.mounted.has(appName),\n };\n }\n\n /**\n * Lazy-load iframe sandbox class. Only used by strict mode.\n * @private\n */\n async _ensureIframeSandboxClass() {\n if (this._WuIframeSandbox) return this._WuIframeSandbox;\n const mod = await import('./wu-iframe-sandbox.js');\n this._WuIframeSandbox = mod.WuIframeSandbox;\n return this._WuIframeSandbox;\n }\n\n /**\n * Lazy-load and instantiate eval-mode dependencies (html parser + script executor).\n * Only used when an app uses sandbox: 'eval' (or strict mode falls back to eval).\n * @private\n */\n async _ensureEvalDeps() {\n if (!this.htmlParser) {\n const { WuHtmlParser } = await import('./wu-html-parser.js');\n this.htmlParser = new WuHtmlParser();\n }\n if (!this.scriptExecutor) {\n const { WuScriptExecutor } = await import('./wu-script-executor.js');\n this.scriptExecutor = new WuScriptExecutor();\n }\n }\n\n /**\n * Lazy-load and instantiate the shared-component loader.\n * Only used when wu.use(componentPath) is called. Keeps the loader's\n * `new Function()` evaluator out of the main bundle.\n * @private\n */\n async _ensureLoader() {\n if (!this.loader) {\n const { WuLoader } = await import('./wu-loader.js');\n this.loader = new WuLoader();\n }\n }\n\n /**\n * MODULE MODE: import() + patchWindow (default).\n * Side effects tracked during load, cleaned on unmount.\n * App code runs in global scope.\n */\n async _loadModule(app, sandbox) {\n const moduleUrl = await this.resolveModulePath(app);\n logger.wuDebug(`[module] Loading ES module: ${moduleUrl}`);\n\n const jsSandbox = sandbox.jsSandbox;\n if (jsSandbox?.patchWindow) {\n jsSandbox.patchWindow();\n }\n\n try {\n await this.moduleLoader(moduleUrl, app.name);\n logger.wuDebug(`[module] ES module loaded: ${app.name}`);\n } catch (error) {\n logger.wuError(`[module] Failed to load ${moduleUrl}:`, error);\n throw error;\n } finally {\n if (jsSandbox?.unpatchWindow) {\n jsSandbox.unpatchWindow();\n }\n }\n }\n\n /**\n * STRICT MODE: Hidden iframe + real import().\n *\n * The iframe provides a separate window context. import() inside the iframe\n * is a real ES module import — tree shaking, source maps, and HMR all work.\n *\n * Pipeline:\n * 1. Create hidden iframe with <base href=\"appUrl\">\n * 2. Patch iframe's document → DOM operations go to Shadow DOM\n * 3. import() the app module inside iframe\n * 4. Wait for wu.define() registration\n *\n * If import() fails (CORS, network, etc.), the default behavior is to\n * fall back to eval mode with a console warning. Set `strictFallback: false`\n * on the app config (or globally on init) to throw instead — useful when\n * iframe isolation is a hard requirement (e.g. third-party untrusted apps).\n */\n async _loadStrict(app, sandbox) {\n logger.wuDebug(`[strict] Loading ${app.name} via iframe sandbox`);\n\n // Lazy-load the iframe sandbox class on first use\n const IframeSandbox = await this._ensureIframeSandboxClass();\n const iframeSandbox = new IframeSandbox(app.name);\n iframeSandbox.activate(app.url, sandbox.container, sandbox.shadowRoot);\n sandbox.iframeSandbox = iframeSandbox;\n\n try {\n // Resolve module path (same logic as module mode)\n const moduleUrl = await this.resolveModulePath(app);\n logger.wuDebug(`[strict] Importing module in iframe: ${moduleUrl}`);\n\n // Import module inside iframe — real import()!\n await iframeSandbox.importModule(moduleUrl);\n logger.wuDebug(`[strict] Module imported for ${app.name}`);\n\n } catch (importError) {\n // import() failed — likely CORS or module error.\n // Resolve fallback policy: per-app > global > default (true)\n const fallbackAllowed =\n app.strictFallback ?? this._strictFallback ?? true;\n\n // Destroy failed iframe regardless\n iframeSandbox.destroy();\n sandbox.iframeSandbox = null;\n\n if (!fallbackAllowed) {\n // Caller demanded strict isolation. Honor it — throw clearly.\n throw new Error(\n `[strict] iframe import failed for '${app.name}' and strictFallback is disabled.\\n` +\n `Original error: ${importError.message}\\n` +\n `Fix: ensure the app's dev server sets Access-Control-Allow-Origin headers,\\n` +\n `or explicitly allow degrade with { strictFallback: true } or sandbox: 'eval'.`\n );\n }\n\n logger.wuWarn(\n `[strict] iframe import failed for ${app.name}: ${importError.message}\\n` +\n `Falling back to eval mode (fetch + parse + execute with proxy).\\n` +\n `To fix: ensure the app's dev server sets Access-Control-Allow-Origin: * headers,\\n` +\n `or use sandbox: 'eval' explicitly for UMD/IIFE bundles.\\n` +\n `To make this an error instead of a warning, set { strictFallback: false }.`\n );\n\n // Track that the actual isolation level is now 'eval', not 'strict'\n sandbox._actualMode = 'eval';\n sandbox._fellBackFromStrict = true;\n\n // Fallback to eval mode\n await this._loadEval(app, sandbox);\n return;\n }\n\n // Wait for wu.define()\n await this._waitForDefine(app.name, 'strict');\n\n logger.wuDebug(`[strict] ${app.name} loaded and registered via iframe`);\n }\n\n /**\n * EVAL MODE: Fetch HTML → parse → execute scripts inside proxy.\n *\n * Maximum JS isolation via with(proxy) statement — all unqualified\n * identifiers (setTimeout, document, fetch) go through proxy traps.\n *\n * Requires bundled apps (UMD/IIFE). ES modules cannot be eval'd.\n * No tree shaking, no source maps, no HMR.\n *\n * Pipeline:\n * 1. Fetch HTML from app URL\n * 2. Parse: extract scripts (inline + external), styles, clean DOM\n * 3. Inject DOM + styles into Shadow DOM\n * 4. Execute all scripts inside the proxy via WuScriptExecutor\n * 5. Wait for wu.define()\n */\n async _loadEval(app, sandbox) {\n logger.wuDebug(`[eval] Loading ${app.name} from ${app.url}`);\n\n const jsSandbox = sandbox.jsSandbox;\n const proxy = jsSandbox.getProxy();\n\n if (!proxy) {\n throw new Error(`[eval] No active proxy for ${app.name}. Sandbox must be activated first.`);\n }\n\n // Lazy-load html parser + script executor on first eval-mode app\n await this._ensureEvalDeps();\n\n // 1. Fetch and parse HTML\n const parsed = await this.htmlParser.fetchAndParse(app.url, app.name);\n\n // 2. Inject clean DOM into container\n if (parsed.dom) {\n sandbox.container.innerHTML = parsed.dom;\n }\n\n // 3. Inject styles into shadow root\n const styleTarget = sandbox.shadowRoot || sandbox.container;\n\n for (const cssText of parsed.styles.inline) {\n const style = document.createElement('style');\n style.textContent = cssText;\n styleTarget.appendChild(style);\n }\n\n for (const href of parsed.styles.external) {\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = href;\n styleTarget.appendChild(link);\n }\n\n // 4. Build and execute scripts inside the proxy\n const scripts = [];\n for (const content of parsed.scripts.inline) {\n scripts.push({ content });\n }\n for (const src of parsed.scripts.external) {\n scripts.push({ src });\n }\n\n await this.scriptExecutor.executeAll(scripts, app.name, proxy);\n logger.wuDebug(`[eval] Scripts executed for ${app.name}`);\n\n // 5. Wait for wu.define()\n await this._waitForDefine(app.name, 'eval');\n\n logger.wuDebug(`[eval] ${app.name} loaded and registered`);\n }\n\n /**\n * Wait for an app to call wu.define() with a timeout.\n * Resolves the instant define() fires — no polling.\n * Shared by module, strict, and eval modes.\n */\n _waitForDefine(appName, mode, maxWaitTime = 10000) {\n if (this.definitions.has(appName)) return Promise.resolve();\n\n // De-dupe concurrent waiters for the same app (e.g. strict-mode retry)\n const existing = this._defineWaiters.get(appName);\n if (existing) return existing.promise;\n\n let resolveFn;\n let rejectFn;\n const promise = new Promise((resolve, reject) => {\n resolveFn = resolve;\n rejectFn = reject;\n });\n\n const timer = setTimeout(() => {\n if (this._defineWaiters.delete(appName)) {\n rejectFn(new Error(\n `[${mode}] App '${appName}' loaded but wu.define() was not called within ${maxWaitTime}ms.\\n` +\n `Make sure your app calls: window.wu.define('${appName}', { mount, unmount })`\n ));\n }\n }, maxWaitTime);\n\n this._defineWaiters.set(appName, { resolve: resolveFn, reject: rejectFn, timer, promise });\n return promise;\n }\n\n /**\n * Cancel a pending define-waiter (called when module load itself fails,\n * so the waiter doesn't run out its 10s timeout pointlessly).\n * @private\n */\n _cancelDefineWaiter(appName) {\n const waiter = this._defineWaiters.get(appName);\n if (!waiter) return;\n clearTimeout(waiter.timer);\n this._defineWaiters.delete(appName);\n }\n\n /**\n * Module path resolver: Intelligent URL construction with fallback\n * Intelligently resolves module paths with real-time validation\n */\n async resolveModulePath(app) {\n const entryFile = app.manifest?.entry || 'main.js';\n const baseUrl = app.url.replace(/\\/$/, ''); // Remove trailing slash\n\n // Normalize path: Remove duplicated directories\n // If entry already starts with 'src/', 'dist/', etc., use it as-is\n const hasFolderPrefix = /^(src|dist|public|build|assets|lib|es)\\//.test(entryFile);\n\n if (hasFolderPrefix) {\n logger.wuDebug(`Entry already has folder prefix: ${entryFile}`);\n // Entry already has folder, just use baseUrl + entryFile\n const directPath = `${baseUrl}/${entryFile}`;\n logger.wuDebug(`Using direct path: ${directPath}`);\n return directPath;\n }\n\n // Cache: re-mounting an app should not redo 8 HEADs.\n // Keyed by baseUrl+entry so manifest changes invalidate naturally.\n const cacheKey = `${baseUrl}::${entryFile}`;\n const cached = this._resolvedPaths.get(cacheKey);\n if (cached) {\n logger.wuDebug(`Using cached resolved path for ${app.name}: ${cached}`);\n return cached;\n }\n\n // Multi-path candidates (in order of preference)\n const pathCandidates = [\n `${baseUrl}/src/${entryFile}`, // Standard structure\n `${baseUrl}/${entryFile}`, // Root level\n `${baseUrl}/dist/${entryFile}`, // Built version\n `${baseUrl}/public/${entryFile}`, // Public folder\n `${baseUrl}/build/${entryFile}`, // Build folder\n `${baseUrl}/assets/${entryFile}`, // Assets folder\n `${baseUrl}/lib/${entryFile}`, // Library folder\n `${baseUrl}/es/${entryFile}` // ES modules folder\n ];\n\n logger.wuDebug(`Resolving path for ${app.name} (parallel HEAD probe)...`);\n\n // Probe all candidates in parallel — fan-out HEAD requests.\n // We collect results and then pick the FIRST in priority order\n // (not the fastest one), preserving the original semantics.\n const results = await Promise.all(\n pathCandidates.map(c =>\n this.validatePath(c)\n .then(ok => (ok ? c : null))\n .catch(() => null)\n )\n );\n\n const resolved = results.find(r => r !== null);\n if (resolved) {\n logger.wuDebug(`Path resolved successfully: ${resolved}`);\n this._resolvedPaths.set(cacheKey, resolved);\n return resolved;\n }\n\n // Fallback: If all candidates fail, use the first one and let the error bubble up\n const fallbackPath = pathCandidates[0];\n logger.wuWarn(`All path candidates failed, using fallback: ${fallbackPath}`);\n return fallbackPath;\n }\n\n /**\n * Path validator: HEAD-based existence + content-type check.\n * Falls back to ranged GET only if HEAD is unsupported (405) — most dev\n * servers (Vite, webpack-dev-server, http-server) handle HEAD natively.\n *\n * Detects SPA HTML-fallback by content-type. Pure HEAD avoids downloading\n * full bundles (Angular bundles can be MBs each, 8 candidates × MBs is a\n * lot of bandwidth for path resolution).\n */\n async validatePath(url) {\n try {\n logger.wuDebug(`Probing path: ${url}`);\n\n let response = await fetch(url, {\n method: 'HEAD',\n cache: 'no-cache',\n signal: AbortSignal.timeout(2000)\n });\n\n // Some servers (older nginx configs, S3 static hosting) reject HEAD.\n // Fall back to a tiny ranged GET — first 256 bytes is plenty to sniff.\n if (response.status === 405 || response.status === 501) {\n logger.wuDebug(`HEAD not supported (${response.status}), falling back to ranged GET: ${url}`);\n response = await fetch(url, {\n method: 'GET',\n cache: 'no-cache',\n headers: { Range: 'bytes=0-255' },\n signal: AbortSignal.timeout(2000)\n });\n }\n\n if (!response.ok && response.status !== 206) {\n logger.wuDebug(`Path validation failed - HTTP ${response.status}: ${url}`);\n return false;\n }\n\n const contentType = (response.headers.get('content-type') || '').toLowerCase();\n\n // Reject obvious SPA HTML fallback (Vite/webpack-dev-server in SPA mode\n // return 200 + text/html for any non-matching URL).\n if (contentType.startsWith('text/html')) {\n logger.wuDebug(`Path validation failed - HTML fallback detected: ${url}`);\n return false;\n }\n\n // Accept anything that looks like JavaScript, or extension-based when\n // the server doesn't bother setting content-type (some static hosts).\n const isJavaScript =\n contentType.includes('javascript') ||\n contentType.includes('module') ||\n contentType.includes('text/plain') ||\n contentType === '' || // No content-type set → trust the extension\n url.endsWith('.js') ||\n url.endsWith('.mjs');\n\n if (!isJavaScript) {\n logger.wuDebug(`Path validation failed - non-JS content-type '${contentType}': ${url}`);\n return false;\n }\n\n logger.wuDebug(`Path validation successful: ${url}`);\n return true;\n\n } catch (error) {\n // Network, timeout, or parsing error means path is invalid\n logger.wuDebug(`Path validation failed for ${url}: ${error.message}`);\n return false;\n }\n }\n\n /**\n * Module loader: Advanced registration patterns\n * Handles asynchronous registration with timing synchronization\n * Verifica que definitions tenga el lifecycle despues de cargar\n */\n async moduleLoader(moduleUrl, appName) {\n // Check if already registered\n if (this.definitions.has(appName)) {\n logger.wuDebug(`App ${appName} already registered`);\n return;\n }\n\n logger.wuDebug(`Using event-based registration for ${appName}`);\n\n // Set up waiter BEFORE import so a synchronously-firing define()\n // inside the module is captured atomically.\n const definePromise = this._waitForDefine(appName, 'module');\n\n try {\n await import(/* @vite-ignore */ moduleUrl);\n } catch (loadError) {\n this._cancelDefineWaiter(appName);\n logger.wuError(`Failed to import module ${moduleUrl}:`, loadError);\n throw loadError;\n }\n\n await definePromise;\n logger.wuDebug(`App ${appName} loaded and registered (verified in definitions)`);\n }\n\n /**\n * Desmontar una aplicacion.\n *\n * With keepAlive, the app is hidden instead of destroyed.\n * All DOM, JS state, timers, and iframe are preserved.\n * Re-mounting shows the app instantly.\n *\n * keepAlive is resolved from (in priority order):\n * 1. options.keepAlive (per-call override)\n * 2. app config keepAlive (set via wu.app() or registerApp)\n * 3. false (default: destroy)\n *\n * Use options.force = true to destroy even if keepAlive is set.\n *\n * @param {string} appName - Nombre de la app\n * @param {Object} [options] - Unmount options\n * @param {boolean} [options.keepAlive] - Preserve state for instant re-mount\n * @param {boolean} [options.force] - Force destroy even if keepAlive\n */\n async unmount(appName, options = {}) {\n logger.wuDebug(`Unmounting ${appName}`);\n\n const mounted = this.mounted.get(appName);\n if (!mounted) {\n // Check if it's hidden (keep-alive) — force destroy if requested\n if (options.force && this.hidden.has(appName)) {\n this._mountRefs.delete(appName);\n return await this._destroyHidden(appName);\n }\n logger.wuWarn(`App ${appName} not mounted`);\n return;\n }\n\n // Resolve keepAlive: per-call > per-app config > default false\n const keepAlive = options.force\n ? false\n : (options.keepAlive ?? mounted.app?.keepAlive ?? false);\n\n if (keepAlive) {\n return await this.hide(appName);\n }\n\n // Force → bypass ref counting, immediate unmount\n if (options.force) {\n this._mountRefs.delete(appName);\n if (this._pendingUnmounts.has(appName)) {\n clearTimeout(this._pendingUnmounts.get(appName));\n this._pendingUnmounts.delete(appName);\n }\n return await this._executeUnmount(appName, mounted);\n }\n\n // ── Ref counting + grace period ──\n // Each unmount() decrements. Only the LAST unmount (count → 0) starts a\n // grace timer. A subsequent mount() before the timer fires increments\n // the count and cancels the timer, keeping the app alive.\n const prev = this._mountRefs.get(appName) || 1;\n const next = prev - 1;\n this._mountRefs.set(appName, Math.max(0, next));\n logger.wuDebug(`${appName} unmount refs: ${prev} → ${next}`);\n\n if (next > 0) {\n logger.wuDebug(`${appName} unmount skipped: ${next} ref(s) still active`);\n return;\n }\n\n if (this._pendingUnmounts.has(appName)) {\n clearTimeout(this._pendingUnmounts.get(appName));\n }\n\n this._pendingUnmounts.set(appName, setTimeout(async () => {\n this._pendingUnmounts.delete(appName);\n // Re-check refs at fire time — caller may have re-mounted during grace\n if ((this._mountRefs.get(appName) || 0) > 0) return;\n // Re-verify: only unmount if the same mount entry is still current\n if (this.mounted.has(appName) && this.mounted.get(appName) === mounted) {\n try {\n await this._executeUnmount(appName, mounted);\n this._mountRefs.delete(appName);\n } catch (error) {\n logger.wuError(`Deferred unmount failed for ${appName}:`, error);\n }\n }\n }, 60));\n }\n\n /**\n * Execute the actual unmount immediately (no deferral).\n * Called by the deferred timer, force unmount, or destroy.\n * @private\n */\n async _executeUnmount(appName, mounted) {\n try {\n // Execute beforeUnmount hooks\n const beforeUnmountResult = await this.hooks.execute('beforeUnmount', { appName, mounted });\n if (beforeUnmountResult.cancelled) {\n logger.wuWarn('Unmount cancelled by beforeUnmount hook');\n return;\n }\n\n // Call plugin beforeUnmount hooks\n const pluginBeforeUnmount = await this.pluginSystem.callHook('beforeUnmount', { appName });\n if (pluginBeforeUnmount === false) {\n logger.wuWarn('Unmount cancelled by plugin beforeUnmount hook');\n return;\n }\n\n // Ejecutar unmount del lifecycle si existe\n if (mounted.lifecycle?.unmount) {\n await mounted.lifecycle.unmount(mounted.container);\n }\n\n // Destroy iframe sandbox if present (strict mode)\n if (mounted.sandbox.iframeSandbox) {\n mounted.sandbox.iframeSandbox.destroy();\n mounted.sandbox.iframeSandbox = null;\n }\n\n // Limpiar sandbox\n this.sandbox.cleanup(mounted.sandbox);\n\n // Remover del registro de montadas\n this.mounted.delete(appName);\n\n // Execute afterUnmount hooks\n await this.hooks.execute('afterUnmount', { appName });\n\n // Call plugin afterUnmount hooks\n await this.pluginSystem.callHook('afterUnmount', { appName });\n\n // Emit unmount event\n this.eventBus.emit('app:unmounted', { appName }, { appName });\n\n logger.wuDebug(`${appName} unmounted successfully`);\n } catch (error) {\n logger.wuError(`Failed to unmount ${appName}:`, error);\n\n // Call plugin error hooks\n await this.pluginSystem.callHook('onError', { phase: 'unmount', error, appName });\n\n // Emit error event\n this.eventBus.emit('app:error', { appName, error: error.message }, { appName });\n throw error;\n }\n }\n\n /**\n * Hide a mounted app (keep-alive).\n *\n * Preserves all state: DOM in Shadow DOM, JS in iframe, timers, listeners.\n * The app's optional `deactivate()` lifecycle hook is called.\n * Re-show with `show()` or `mount()` with the same container.\n *\n * @param {string} appName - App to hide\n */\n async hide(appName) {\n const mounted = this.mounted.get(appName);\n if (!mounted) {\n logger.wuWarn(`Cannot hide ${appName}: not mounted`);\n return;\n }\n\n logger.wuDebug(`Hiding ${appName} (keep-alive)`);\n\n // Call optional deactivate lifecycle hook\n if (mounted.lifecycle?.deactivate) {\n try {\n await mounted.lifecycle.deactivate(mounted.container);\n } catch (err) {\n logger.wuWarn(`deactivate() failed for ${appName}:`, err);\n }\n }\n\n // Execute beforeUnmount hooks (so plugins know)\n await this.hooks.execute('beforeUnmount', { appName, mounted, keepAlive: true });\n await this.pluginSystem.callHook('beforeUnmount', { appName, keepAlive: true });\n\n // Hide the host container — all Shadow DOM content stays intact\n mounted.hostContainer.style.display = 'none';\n mounted.state = 'hidden';\n mounted.hiddenAt = Date.now();\n\n // Move from mounted → hidden\n this.hidden.set(appName, mounted);\n this.mounted.delete(appName);\n\n // Execute afterUnmount hooks\n await this.hooks.execute('afterUnmount', { appName, keepAlive: true });\n await this.pluginSystem.callHook('afterUnmount', { appName, keepAlive: true });\n\n // Emit event\n this.eventBus.emit('app:hidden', { appName }, { appName });\n\n logger.wuInfo(`${appName} hidden (keep-alive) — state preserved`);\n }\n\n /**\n * Show a hidden (keep-alive) app.\n *\n * Restores visibility instantly — no reload, no remount.\n * The app's optional `activate()` lifecycle hook is called.\n *\n * @param {string} appName - App to show\n */\n async show(appName) {\n const hidden = this.hidden.get(appName);\n if (!hidden) {\n logger.wuWarn(`Cannot show ${appName}: not in keep-alive state`);\n return;\n }\n\n this.performance.startMeasure('show', appName);\n logger.wuDebug(`Showing ${appName} from keep-alive`);\n\n // Execute beforeMount hooks\n await this.hooks.execute('beforeMount', {\n appName,\n containerSelector: hidden.containerSelector,\n sandbox: hidden.sandbox,\n lifecycle: hidden.lifecycle,\n keepAlive: true\n });\n await this.pluginSystem.callHook('beforeMount', {\n appName,\n containerSelector: hidden.containerSelector,\n keepAlive: true\n });\n\n // Show the host container\n hidden.hostContainer.style.display = '';\n hidden.state = 'stable';\n delete hidden.hiddenAt;\n\n // Move from hidden → mounted\n this.mounted.set(appName, hidden);\n this.hidden.delete(appName);\n\n // Call optional activate lifecycle hook\n if (hidden.lifecycle?.activate) {\n try {\n await hidden.lifecycle.activate(hidden.container);\n } catch (err) {\n logger.wuWarn(`activate() failed for ${appName}:`, err);\n }\n }\n\n const showTime = this.performance.endMeasure('show', appName);\n\n // Execute afterMount hooks\n await this.hooks.execute('afterMount', {\n appName,\n containerSelector: hidden.containerSelector,\n sandbox: hidden.sandbox,\n mountTime: showTime,\n keepAlive: true\n });\n await this.pluginSystem.callHook('afterMount', {\n appName,\n containerSelector: hidden.containerSelector,\n mountTime: showTime,\n keepAlive: true\n });\n\n // Emit event\n this.eventBus.emit('app:shown', { appName, showTime }, { appName });\n\n logger.wuInfo(`${appName} shown from keep-alive in ${showTime.toFixed(2)}ms`);\n }\n\n /**\n * Force-destroy a hidden (keep-alive) app.\n * Runs full cleanup: lifecycle unmount, iframe destroy, sandbox cleanup.\n *\n * @param {string} appName\n * @private\n */\n async _destroyHidden(appName) {\n const hidden = this.hidden.get(appName);\n if (!hidden) return;\n\n logger.wuDebug(`Force-destroying hidden app: ${appName}`);\n\n // Show first (so unmount sees the container)\n hidden.hostContainer.style.display = '';\n hidden.state = 'stable';\n\n // Move back to mounted temporarily\n this.mounted.set(appName, hidden);\n this.hidden.delete(appName);\n\n // Now do a full unmount\n await this.unmount(appName, { force: true });\n }\n\n /**\n * Check if an app is in keep-alive (hidden) state.\n * @param {string} appName\n * @returns {boolean}\n */\n isHidden(appName) {\n return this.hidden.has(appName);\n }\n\n /**\n * Cargar componente compartido (para imports/exports)\n * @param {string} componentPath - Ruta del componente (ej: \"shared.Button\")\n */\n async use(componentPath) {\n const [appName, componentName] = componentPath.split('.');\n\n if (!appName || !componentName) {\n throw new Error(`Invalid component path: ${componentPath}. Use format \"app.component\"`);\n }\n\n const app = this.apps.get(appName);\n if (!app) {\n throw new Error(`App ${appName} not registered`);\n }\n\n const manifest = this.manifests.get(appName);\n const exportPath = manifest?.wu?.exports?.[componentName];\n\n if (!exportPath) {\n throw new Error(`Component ${componentName} not exported by ${appName}`);\n }\n\n // Cargar componente (lazy loader — solo se importa al primer use())\n await this._ensureLoader();\n return await this.loader.loadComponent(app.url, exportPath);\n }\n\n /**\n * Obtener informacion de una app\n * @param {string} appName - Nombre de la app\n */\n getAppInfo(appName) {\n return {\n registered: this.apps.get(appName),\n manifest: this.manifests.get(appName),\n mounted: this.mounted.get(appName),\n definition: this.definitions.get(appName)\n };\n }\n\n /**\n * Obtener estadisticas del framework\n */\n getStats() {\n return {\n registered: this.apps.size,\n defined: this.definitions.size,\n mounted: this.mounted.size,\n hidden: this.hidden.size,\n apps: Array.from(this.apps.keys())\n };\n }\n\n /**\n * Store methods: Convenience methods for state management\n */\n\n /**\n * Get value from global store\n * @param {string} path - Dot notation path\n * @returns {*} Value at path\n */\n getState(path) {\n return this.store.get(path);\n }\n\n /**\n * Set value in global store\n * @param {string} path - Dot notation path\n * @param {*} value - Value to set\n * @returns {number} Sequence number\n */\n setState(path, value) {\n return this.store.set(path, value);\n }\n\n /**\n * Subscribe to state changes\n * @param {string} pattern - Path or pattern\n * @param {Function} callback - Callback function\n * @returns {Function} Unsubscribe function\n */\n onStateChange(pattern, callback) {\n return this.store.on(pattern, callback);\n }\n\n /**\n * Batch set multiple state values\n * @param {Object} updates - Object with path:value pairs\n * @returns {Array} Sequence numbers\n */\n batchState(updates) {\n return this.store.batch(updates);\n }\n\n /**\n * Get store metrics\n * @returns {Object} Performance metrics\n */\n getStoreMetrics() {\n return this.store.getMetrics();\n }\n\n /**\n * Clear all state\n */\n clearState() {\n this.store.clear();\n }\n\n /**\n * Set a URL override for an app (QA/testing).\n * Sets a cookie so the override persists across page reloads.\n * Only affects the current browser — no one else sees it.\n *\n * @param {string} appName - App to override\n * @param {string} url - Override URL (e.g., 'http://localhost:5173')\n * @param {Object} [options]\n * @param {number} [options.maxAge=86400] - Cookie lifetime in seconds (default: 24h)\n *\n * @example\n * wu.override('cart', 'http://localhost:5173');\n * wu.override('header', 'https://preview-abc123.vercel.app');\n */\n override(appName, url, options) {\n this.overrides.set(appName, url, options);\n }\n\n /**\n * Remove URL override for an app.\n * @param {string} appName\n */\n removeOverride(appName) {\n this.overrides.remove(appName);\n }\n\n /**\n * Get all active overrides.\n * @returns {Object} { appName: url, ... }\n */\n getOverrides() {\n return this.overrides.getAll();\n }\n\n /**\n * Remove all overrides.\n */\n clearOverrides() {\n this.overrides.clearAll();\n }\n\n /**\n * Prefetch one or more apps before they're needed.\n *\n * Uses Speculation Rules API (Chrome 121+), falls back to\n * <link rel=\"modulepreload\"> or <link rel=\"prefetch\">.\n *\n * @param {string|string[]} appNames - App name(s) to prefetch\n * @param {Object} [options]\n * @param {'immediate'|'hover'|'visible'|'idle'} [options.on='immediate'] - When to trigger\n * @param {string|Element} [options.target] - Element for hover/visible triggers\n * @param {'conservative'|'moderate'|'eager'} [options.eagerness='moderate'] - Speculation eagerness\n * @returns {Promise<void>|Function} Promise or cleanup function\n *\n * @example\n * wu.prefetch('cart');\n * wu.prefetch('cart', { on: 'hover', target: '#cart-link' });\n * wu.prefetch('cart', { on: 'visible', target: '#cart-section' });\n * wu.prefetch(['profile', 'settings'], { on: 'idle' });\n */\n prefetch(appNames, options) {\n return this.prefetcher.prefetch(appNames, options);\n }\n\n /**\n * Prefetch all registered but not-yet-mounted apps.\n * @param {Object} [options] - Same options as prefetch()\n */\n prefetchAll(options) {\n return this.prefetcher.prefetchAll(options);\n }\n\n /**\n * Create WuApp instance for declarative usage\n * @param {string} name - App name\n * @param {Object} config - Configuration { url, container, autoInit }\n * @returns {WuApp} WuApp instance\n */\n app(name, config) {\n return new WuApp(name, config, this);\n }\n\n /**\n * Limpiar todo el framework\n */\n async destroy() {\n logger.wuDebug('Destroying framework...');\n\n try {\n // Execute beforeDestroy hooks\n await this.hooks.execute('beforeDestroy', {});\n\n // Call plugin onDestroy hooks\n await this.pluginSystem.callHook('onDestroy', {});\n\n // Cancel all pending deferred unmounts\n for (const timer of this._pendingUnmounts.values()) {\n clearTimeout(timer);\n }\n this._pendingUnmounts.clear();\n this._mountingPromises.clear();\n\n // Cancel and reject any pending define() waiters\n for (const [, waiter] of this._defineWaiters) {\n clearTimeout(waiter.timer);\n waiter.reject(new Error('Framework destroyed'));\n }\n this._defineWaiters.clear();\n this._resolvedPaths.clear();\n this._mountRefs.clear();\n\n // Force-destroy all hidden (keep-alive) apps first\n for (const appName of [...this.hidden.keys()]) {\n await this._destroyHidden(appName);\n }\n\n // Desmontar todas las apps\n for (const appName of [...this.mounted.keys()]) {\n await this.unmount(appName, { force: true });\n }\n\n // Limpiar sistemas esenciales\n this.cache.clear();\n this.eventBus.removeAll();\n this.eventBus.clearHistory();\n this.performance.clearMetrics();\n\n // Limpiar advanced systems\n this.pluginSystem.cleanup();\n this.strategies.cleanup();\n this.errorBoundary.cleanup();\n this.hooks.cleanup();\n this.prefetcher.cleanup();\n\n // Limpiar registros\n this.apps.clear();\n this.definitions.clear();\n this.manifests.clear();\n this.mounted.clear();\n this.hidden.clear();\n\n // Limpiar store\n this.store.clear();\n\n this.isInitialized = false;\n\n // Execute afterDestroy hooks\n await this.hooks.execute('afterDestroy', {});\n\n logger.wuDebug('Framework destroyed');\n } catch (error) {\n logger.wuError('Error during destroy:', error);\n throw error;\n }\n }\n}\n","/**\n * WU-FRAMEWORK: UNIVERSAL MICROFRONTENDS\n *\n * Framework agnostic microfrontends with Shadow DOM isolation.\n * Supports React, Vue, Angular, Svelte, Solid, Preact, Lit, Vanilla.\n *\n * @example\n * import { wu, emit, on } from 'wu-framework';\n *\n * const canvas = wu.app('canvas', { url: 'http://localhost:5178', container: '#canvas' });\n * await canvas.mount();\n *\n * emit('user:login', { userId: 123 });\n * on('user:*', (e) => console.log(e.data));\n */\n\nimport { WuCore } from './core/wu-core.js';\n// WuAI is loaded lazily via setupLazyAi() — see below. Not imported here so\n// the wu-ai chunk (~80 KB) stays out of the main bundle until first use.\n\n// Methods that return `this` for chaining — these MUST work sync, so we\n// queue calls and return the proxy. They are flushed against the real\n// instance once it loads.\nconst AI_CHAINABLE = new Set([\n 'provider', 'action', 'trigger', 'capability', 'workflow',\n 'removeApp', 'init',\n]);\n\n// Sub-object getters (e.g. wu.ai.context.configure(...)) — each returns\n// a small proxy that forwards method calls asynchronously.\nconst AI_SUB_OBJECTS = new Set(['context', 'conversation', 'permissions']);\n\n// Methods that return a value sync. If called before the chunk loads we\n// return a safe default and queue the real call for after-load.\nconst AI_SYNC_RETURNERS = {\n tools: () => [],\n expose: () => false,\n getStats: () => ({ initialized: false, lazy: true }),\n};\n\n// Sync void methods — queue them (no return value needed)\nconst AI_SYNC_VOID = new Set([\n 'abort', 'destroy', 'confirmTool', 'rejectTool', 'fireTrigger',\n]);\n\n// Methods that return an async generator\nconst AI_ASYNC_GEN = new Set(['stream', 'agent', 'runWorkflow']);\n\n/**\n * Install a lazy-loading proxy on wu.ai. The proxy preserves the sync\n * chaining API while deferring the actual chunk load until first use.\n */\nfunction setupLazyAi(wuInstance) {\n let _aiInstance = null;\n let _loadPromise = null;\n const _queue = []; // { kind: 'method'|'sub', prop, args, parent? }\n\n const ensureLoad = () => {\n if (_aiInstance) return Promise.resolve(_aiInstance);\n if (_loadPromise) return _loadPromise;\n _loadPromise = import('./ai/wu-ai.js').then(({ WuAI }) => {\n _aiInstance = new WuAI({\n eventBus: wuInstance.eventBus,\n store: wuInstance.store,\n core: wuInstance,\n // Closure-captured secret token. WuAI will inject it into every\n // emit. EventBus rejects appName='wu-ai' WITHOUT a matching token,\n // closing the spoofing vector even when strictMode is on.\n token: wuInstance.eventBus.getInternalToken?.('wu-ai') || null,\n });\n // Flush queued calls in order\n for (const call of _queue) {\n try {\n if (call.kind === 'method') {\n _aiInstance[call.prop](...call.args);\n } else if (call.kind === 'sub') {\n const sub = _aiInstance[call.parent];\n if (sub && typeof sub[call.prop] === 'function') {\n sub[call.prop](...call.args);\n }\n }\n } catch (err) {\n // Errors during flush surface in next tick rather than blocking\n setTimeout(() => { throw err; }, 0);\n }\n }\n _queue.length = 0;\n return _aiInstance;\n });\n return _loadPromise;\n };\n\n // Build a sub-object proxy for context/conversation/permissions\n const makeSubProxy = (parentProp) => new Proxy({}, {\n get(_, method) {\n if (_aiInstance) {\n const sub = _aiInstance[parentProp];\n const val = sub?.[method];\n return typeof val === 'function' ? val.bind(sub) : val;\n }\n return (...args) => {\n // Queue with sub-object context. Best-effort: returns void.\n _queue.push({ kind: 'sub', parent: parentProp, prop: method, args });\n ensureLoad();\n };\n },\n });\n\n const aiProxy = new Proxy({}, {\n get(_, prop) {\n // Once loaded, delegate every access to the real instance.\n if (_aiInstance) {\n const val = Reflect.get(_aiInstance, prop);\n return typeof val === 'function' ? val.bind(_aiInstance) : val;\n }\n\n if (prop === 'isLazy') return true;\n if (prop === 'isLoaded') return false;\n\n // Sub-object passthrough\n if (AI_SUB_OBJECTS.has(prop)) return makeSubProxy(prop);\n\n // Chainable config: queue + return proxy synchronously\n if (AI_CHAINABLE.has(prop)) {\n return (...args) => {\n _queue.push({ kind: 'method', prop, args });\n ensureLoad();\n return aiProxy;\n };\n }\n\n // Sync void: queue, return undefined\n if (AI_SYNC_VOID.has(prop)) {\n return (...args) => {\n _queue.push({ kind: 'method', prop, args });\n ensureLoad();\n };\n }\n\n // Sync returners: return placeholder synchronously, do NOT queue\n if (prop in AI_SYNC_RETURNERS) {\n return AI_SYNC_RETURNERS[prop];\n }\n\n // Async generator\n if (AI_ASYNC_GEN.has(prop)) {\n return async function* lazyAsyncGen(...args) {\n const ai = await ensureLoad();\n yield* ai[prop](...args);\n };\n }\n\n // Default: any other method becomes async returning Promise.\n // Covers send, json, intent, execute, fireTrigger and any future API.\n return (...args) => ensureLoad().then(ai => {\n const fn = ai[prop];\n if (typeof fn === 'function') return fn.apply(ai, args);\n return fn;\n });\n },\n });\n\n Object.defineProperty(wuInstance, 'ai', {\n get() { return _aiInstance || aiProxy; },\n configurable: true,\n });\n\n // Public warm-up — `await wu.aiReady()` to get the real instance up front.\n wuInstance.aiReady = ensureLoad;\n}\n\n// --- Singleton: reuse host instance if it exists ---\nlet wu;\n\nif (typeof window !== 'undefined' && window.wu && window.wu._isWuFramework) {\n wu = window.wu;\n} else {\n wu = new WuCore();\n wu._isWuFramework = true;\n\n // Also store on a Symbol key for collision-safe access\n if (typeof window !== 'undefined') {\n const WU_KEY = Symbol.for('wu-framework');\n window[WU_KEY] = wu;\n }\n}\n\n// Expose globally for microfrontends\nif (typeof window !== 'undefined') {\n // Warn if window.wu exists but is not a Wu Framework instance\n if (window.wu && !window.wu._isWuFramework) {\n console.warn('[Wu Framework] window.wu already exists and is not a Wu Framework instance. Overwriting. Use Symbol.for(\"wu-framework\") for collision-safe access.');\n }\n window.wu = wu;\n\n if (!wu.version) {\n // __WU_VERSION__ is replaced at build time with package.json version.\n // Fallback handles raw-source imports (no bundler).\n wu.version = typeof __WU_VERSION__ !== 'undefined' ? __WU_VERSION__ : '0.0.0-dev';\n wu.info = {\n name: 'Wu Framework',\n description: 'Universal Microfrontends',\n features: ['Framework Agnostic', 'Zero Config', 'Shadow DOM Isolation', 'Runtime Loading']\n };\n }\n\n // Event Bus shortcuts on window.wu\n if (!wu.emit) {\n wu.emit = (event, data, opts) => wu.eventBus.emit(event, data, opts);\n wu.on = (event, cb) => wu.eventBus.on(event, cb);\n wu.once = (event, cb) => wu.eventBus.once(event, cb);\n wu.off = (event, cb) => wu.eventBus.off(event, cb);\n }\n\n // Prefetch shortcuts on window.wu\n if (!wu.prefetch) {\n wu.prefetch = (appNames, opts) => wu.prefetcher.prefetch(appNames, opts);\n wu.prefetchAll = (opts) => wu.prefetcher.prefetchAll(opts);\n }\n\n // Override shortcuts on window.wu\n if (!wu.override) {\n wu.override = (name, url, opts) => wu.overrides.set(name, url, opts);\n wu.removeOverride = (name) => wu.overrides.remove(name);\n wu.getOverrides = () => wu.overrides.getAll();\n wu.clearOverrides = () => wu.overrides.clearAll();\n }\n\n // Log control: window.wu.silence() / window.wu.verbose()\n if (!wu.silence) {\n wu.silence = async () => { const { silenceAllLogs } = await import('./core/wu-logger.js'); silenceAllLogs(); };\n wu.verbose = async () => { const { enableAllLogs } = await import('./core/wu-logger.js'); enableAllLogs(); };\n }\n\n // AI integration — lazy-loaded chunk + transparent proxy.\n // The wu-ai subsystem (~80–100 KB minified) lives in a separate chunk\n // and is only fetched on first access of `wu.ai.*`. Chainable config\n // methods (provider/action/trigger/...) queue calls sync and return the\n // proxy. Async methods (send/stream/agent/...) await the import + delegate.\n // Use `await wu.aiReady()` to force load + get the real instance.\n if (!wu.ai) {\n setupLazyAi(wu);\n }\n\n // MCP bridge — connects to wu-mcp-server for AI agent control\n if (!wu.mcp) {\n let _mcpBridge = null;\n wu.mcp = {\n async connect(url = 'ws://localhost:19100', options = {}) {\n if (!_mcpBridge) {\n const { createMcpBridge } = await import('./core/wu-mcp-bridge.js');\n _mcpBridge = createMcpBridge(wu);\n }\n _mcpBridge.connect(url, options);\n },\n disconnect() {\n _mcpBridge?.disconnect();\n },\n isConnected() {\n return _mcpBridge?.isConnected() || false;\n },\n };\n }\n}\n\n// --- Primary exports ---\nexport { wu };\nexport default wu;\n\n// --- Core classes (advanced usage) ---\nexport { WuCore } from './core/wu-core.js';\nexport { WuLoader } from './core/wu-loader.js';\nexport { WuSandbox, normalizeStyleMode } from './core/wu-sandbox.js';\nexport { WuManifest } from './core/wu-manifest.js';\nexport { WuStore, default as store } from './core/wu-store.js';\nexport { WuApp } from './core/wu-app.js';\nexport { WuStyleBridge } from './core/wu-style-bridge.js';\nexport { WuCache } from './core/wu-cache.js';\nexport { WuEventBus } from './core/wu-event-bus.js';\nexport { WuPerformance } from './core/wu-performance.js';\nexport { WuProxySandbox } from './core/wu-proxy-sandbox.js';\n// WuSnapshotSandbox removed in v2.0 — dead code (Proxy is universal on\n// supported browsers per browserslist; IE 11 was already excluded).\n// Strict/eval sandbox internals are no longer re-exported from the main bundle\n// (breaking change, v2.0). They are loaded lazily by WuCore when an app uses\n// sandbox: 'strict' | 'eval'. If you need direct access, import from the\n// subpaths declared in package.json#exports.\nexport { WuPluginSystem, createPlugin } from './core/wu-plugin.js';\nexport { WuLoadingStrategy } from './core/wu-strategies.js';\nexport { WuPrefetch } from './core/wu-prefetch.js';\nexport { WuOverrides } from './core/wu-overrides.js';\nexport { WuErrorBoundary } from './core/wu-error-boundary.js';\nexport {\n WuLifecycleHooks,\n createSimpleHook,\n createConditionalHook,\n createGuardHook,\n createTransformHook,\n createTimedHook\n} from './core/wu-hooks.js';\nexport { silenceAllLogs, enableAllLogs } from './core/wu-logger.js';\n\n// --- Convenience API (most-used shortcuts) ---\nexport const init = (apps) => wu.init({ apps });\nexport const mount = (name, container) => wu.mount(name, container);\nexport const unmount = (name, opts) => wu.unmount(name, opts);\nexport const define = (name, lifecycle) => wu.define(name, lifecycle);\nexport const app = (name, config) => wu.app(name, config);\nexport const destroy = () => wu.destroy();\n\n// Keep-alive\nexport const hide = (name) => wu.hide(name);\nexport const show = (name) => wu.show(name);\nexport const isHidden = (name) => wu.isHidden(name);\n\n// Event Bus\nexport const emit = (event, data, opts) => wu.eventBus.emit(event, data, opts);\nexport const on = (event, cb) => wu.eventBus.on(event, cb);\nexport const once = (event, cb) => wu.eventBus.once(event, cb);\nexport const off = (event, cb) => wu.eventBus.off(event, cb);\n\n// Store\nexport const getState = (path) => wu.store.get(path);\nexport const setState = (path, value) => wu.store.set(path, value);\nexport const onStateChange = (pattern, cb) => wu.store.on(pattern, cb);\n\n// Performance\nexport const startMeasure = (name, app) => wu.performance.startMeasure(name, app);\nexport const endMeasure = (name, app) => wu.performance.endMeasure(name, app);\nexport const generatePerformanceReport = () => wu.performance.generateReport();\n\n// Prefetch\nexport const prefetch = (appNames, opts) => wu.prefetch(appNames, opts);\nexport const prefetchAll = (opts) => wu.prefetchAll(opts);\n\n// Overrides (QA/testing)\nexport const override = (name, url, opts) => wu.override(name, url, opts);\nexport const removeOverride = (name) => wu.removeOverride(name);\nexport const getOverrides = () => wu.getOverrides();\nexport const clearOverrides = () => wu.clearOverrides();\n\n// Plugins & Hooks\nexport const usePlugin = (plugin, opts) => wu.pluginSystem.use(plugin, opts);\nexport const useHook = (phase, middleware, opts) => wu.hooks.use(phase, middleware, opts);\n\n// --- AI subsystem ---\n// AI classes were previously re-exported from this entry point. Doing so anchored\n// the ~80 KB AI chunk to the main bundle. As of v2.0, AI is loaded lazily via the\n// `wu.ai` proxy (see setupLazyAi above). Import classes directly from the subpaths\n// declared in package.json#exports if you need them at build time:\n//\n// import { WuAI } from 'wu-framework/ai';\n// import { WuAIAgent } from 'wu-framework/ai/agent';\n// import { sanitizeForPrompt } from 'wu-framework/ai/schema';\n//\n// For runtime use, prefer `wu.ai.*` — it auto-loads the chunk on first method call.\n"],"names":[],"mappings":";;;AAAA;AACA;AACA;AACA;;AAEO,MAAM,QAAQ,CAAC;AACtB,EAAE,WAAW,GAAG;AAChB;AACA,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACjD;AACA,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,GAAG,MAAM,GAAG,OAAO;;AAEzD,IAAI,IAAI,CAAC,MAAM,GAAG;AAClB,MAAM,KAAK,EAAE,CAAC;AACd,MAAM,IAAI,EAAE,CAAC;AACb,MAAM,IAAI,EAAE,CAAC;AACb,MAAM,KAAK,EAAE,CAAC;AACd,MAAM,MAAM,EAAE;AACd,KAAK;AACL,EAAE;;AAEF;AACA;AACA;AACA,EAAE,iBAAiB,GAAG;AACtB;AACA,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE,OAAO,IAAI;AAC9E,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,EAAE,OAAO,KAAK;;AAEhF;AACA,IAAI,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,QAAQ,KAAK,YAAY,EAAE,OAAO,KAAK;AAC9F,IAAI,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,QAAQ,KAAK,aAAa,EAAE,OAAO,IAAI;;AAE9F;AACA,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,EAAE;AAC1D,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ;AAC/C,MAAM,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,OAAO,EAAE,OAAO,IAAI;;AAEnG;AACA,MAAM,IAAI;AACV,QAAQ,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,OAAO,IAAI;AACpF,MAAM,CAAC,CAAC,MAAM,CAAC;AACf,IAAI;;AAEJ;AACA,IAAI,OAAO,KAAK;AAChB,EAAE;;AAEF;AACA;AACA;AACA,EAAE,QAAQ,CAAC,KAAK,EAAE;AAClB,IAAI,IAAI,CAAC,QAAQ,GAAG,KAAK;AACzB,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF;AACA;AACA;AACA,EAAE,cAAc,CAAC,KAAK,EAAE;AACxB,IAAI,IAAI,CAAC,aAAa,GAAG,KAAK;AAC9B,IAAI,IAAI,CAAC,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO;AAC7C,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF;AACA;AACA;AACA,EAAE,SAAS,CAAC,KAAK,EAAE;AACnB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC3D,EAAE;;AAEF;AACA;AACA;AACA,EAAE,KAAK,CAAC,GAAG,IAAI,EAAE;AACjB,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;AACjC,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AAC1B,IAAI;AACJ,EAAE;;AAEF,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;AAChB,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;AAChC,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAC3B,IAAI;AACJ,EAAE;;AAEF,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;AAChB,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;AAChC,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAC3B,IAAI;AACJ,EAAE;;AAEF,EAAE,KAAK,CAAC,GAAG,IAAI,EAAE;AACjB,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;AACjC,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AAC5B,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE;AACrB,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;AAC/B,MAAM,MAAM,MAAM,GAAG,KAAK,KAAK,OAAO,GAAG,KAAK,GAAG,KAAK;AACtD,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;AACtC,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA,EAAE,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AAChD,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AAC9C,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AAC9C,EAAE,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AAChD;;AAEA;AACO,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE;;AAUpC;AACA;AACA;AACA;AACO,SAAS,cAAc,GAAG;AACjC,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC3B;;AAEA;AACA;AACA;AACO,SAAS,aAAa,GAAG;AAChC,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC1B;;;;;;;;;;AC9IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAIO,MAAM,aAAa,CAAC;AAC3B,EAAE,WAAW,GAAG;AAChB,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI;AAC7B,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,EAAE,CAAC;AACvC,IAAI,IAAI,CAAC,MAAM,GAAG;AAClB;AACA,MAAM,kBAAkB,EAAE;AAC1B,QAAQ,cAAc;AACtB,QAAQ,UAAU;AAClB,QAAQ,WAAW;AACnB,QAAQ,QAAQ;AAChB,QAAQ,SAAS;AACjB,QAAQ,eAAe;AACvB,QAAQ;AACR,OAAO;AACP;AACA,MAAM,aAAa,EAAE;AACrB,QAAQ,kBAAkB;AAC1B,QAAQ,iBAAiB;AACzB,QAAQ,qBAAqB;AAC7B,QAAQ;AACR,OAAO;AACP;AACA,MAAM,IAAI,EAAE,MAAM;AAClB;AACA,MAAM,YAAY,EAAE;AACpB,KAAK;;AAEL,IAAI,MAAM,CAAC,KAAK,CAAC,qDAAqD,CAAC;AACvE,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE;AAC5C,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC;AAC/C,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,mDAAmD,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAC7F,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,0BAA0B,CAAC,OAAO,EAAE;AACtC,IAAI,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;AAChD,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,qDAAqD,EAAE,OAAO,CAAC,CAAC,CAAC;AACrF,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,2BAA2B,CAAC,iBAAiB,EAAE;AACjD,IAAI,IAAI,GAAG,GAAG,EAAE;AAChB,IAAI,IAAI,cAAc,GAAG,IAAI;;AAE7B;AACA,IAAI,IAAI,OAAO,iBAAiB,KAAK,QAAQ,EAAE;AAC/C,MAAM,GAAG,GAAG,iBAAiB;AAC7B,IAAI;AACJ;AACA,SAAS,IAAI,iBAAiB,IAAI,OAAO,iBAAiB,CAAC,YAAY,KAAK,UAAU,EAAE;AACxF,MAAM,cAAc,GAAG,iBAAiB;AACxC;AACA;AACA,MAAM,GAAG,GAAG,iBAAiB,CAAC,YAAY,CAAC,kBAAkB;AAC7D,WAAW,iBAAiB,CAAC;AAC7B,WAAW,EAAE;AACb,IAAI;AACJ;AACA,SAAS,IAAI,iBAAiB,EAAE;AAChC,MAAM,IAAI,iBAAiB,CAAC,IAAI,EAAE;AAClC,QAAQ,GAAG,GAAG,iBAAiB,CAAC,IAAI;AACpC,MAAM,CAAC,MAAM,IAAI,iBAAiB,CAAC,MAAM,EAAE;AAC3C,QAAQ,GAAG,GAAG,iBAAiB,CAAC,MAAM;AACtC,MAAM,CAAC,MAAM,IAAI,iBAAiB,CAAC,OAAO,EAAE;AAC5C,QAAQ,cAAc,GAAG,iBAAiB,CAAC,OAAO;AAClD,QAAQ,IAAI,OAAO,iBAAiB,CAAC,OAAO,CAAC,YAAY,KAAK,UAAU,EAAE;AAC1E,UAAU,GAAG,GAAG,iBAAiB,CAAC,OAAO,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,iBAAiB,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE;AAClH,QAAQ,CAAC,MAAM,IAAI,iBAAiB,CAAC,OAAO,CAAC,IAAI,EAAE;AACnD,UAAU,GAAG,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI;AAC9C,QAAQ;AACR,MAAM;AACN,IAAI;;AAEJ;AACA;AACA;AACA,IAAI,IAAI,cAAc,EAAE;AACxB,MAAM,MAAM,KAAK,GAAG,cAAc,CAAC,YAAY,CAAC,aAAa,CAAC;AAC9D,MAAM,IAAI,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACtD,QAAQ,OAAO,IAAI;AACnB,MAAM;AACN,IAAI;;AAEJ,IAAI,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,OAAO,KAAK;;AAE/C;AACA,IAAI,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE;;AAE/D;AACA,IAAI,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE;AACtE,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE;AACvE,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE;AACrD;AACA;AACA,MAAM,IAAI,gBAAgB,IAAI,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;AACxE,QAAQ,OAAO,IAAI;AACnB,MAAM;AACN;AACA;AACA;AACA;AACA,MAAM,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,CAAC,OAAO,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC;AAClF,MAAM,IAAI,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;AAC9C,QAAQ,OAAO,IAAI;AACnB,MAAM;AACN,IAAI;;AAEJ,IAAI,OAAO,KAAK;AAChB,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,oBAAoB,GAAG;AACzB,IAAI,MAAM,MAAM,GAAG,EAAE;;AAErB;AACA,IAAI,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC,wBAAwB,CAAC;AACxE,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AAC/B;AACA,MAAM,IAAI,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;AAClD,QAAQ;AACR,MAAM;;AAEN,MAAM,MAAM,CAAC,IAAI,CAAC;AAClB,QAAQ,IAAI,EAAE,MAAM;AACpB,QAAQ,IAAI,EAAE,IAAI,CAAC,IAAI;AACvB,QAAQ,OAAO,EAAE,IAAI;AACrB,QAAQ,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI;AAClD,OAAO,CAAC;AACR,IAAI,CAAC,CAAC;;AAEN;AACA,IAAI,MAAM,SAAS,GAAG,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC;AACxD,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK;AACxC;AACA,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,gBAAgB,CAAC,KAAK,MAAM,EAAE;AAC3D,QAAQ;AACR,MAAM;;AAEN,MAAM,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,kBAAkB,CAAC;AAC3D,MAAM,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW;;AAEvC;AACA,MAAM,IAAI,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,KAAK,MAAM,IAAI,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC,EAAE;AAC3G,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,gEAAgE,EAAE,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC;AAC9G,QAAQ;AACR,MAAM;;AAEN;AACA,MAAM,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AAChD,QAAQ,MAAM,CAAC,IAAI,CAAC;AACpB,UAAU,IAAI,EAAE,QAAQ;AACxB,UAAU,OAAO;AACjB,UAAU,OAAO,EAAE,KAAK;AACxB,UAAU,MAAM;AAChB,UAAU,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,MAAM,IAAI,EAAE,CAAC;AACxD,UAAU;AACV,SAAS,CAAC;AACV,MAAM;AACN,IAAI,CAAC,CAAC;;AAEN;AACA,IAAI,IAAI,QAAQ,CAAC,kBAAkB,IAAI,QAAQ,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/E,MAAM,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK;AAC5D,QAAQ,MAAM,CAAC,IAAI,CAAC;AACpB,UAAU,IAAI,EAAE,mBAAmB;AACnC,UAAU,KAAK;AACf,UAAU;AACV,SAAS,CAAC;AACV,MAAM,CAAC,CAAC;AACR,IAAI;;AAEJ,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,4BAA4B,EAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;AACjF,IAAI,OAAO,MAAM;AACjB,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,gBAAgB,CAAC,OAAO,EAAE;AAC5B,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,KAAK;;AAE9B;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,OAAO,IAAI;;AAE/C;AACA,IAAI,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;AACrD,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,IAAI;AAC5C,IAAI;;AAEJ;AACA,IAAI,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;AACtD,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,IAAI;AAC5C,IAAI;;AAEJ,IAAI,OAAO,KAAK;AAChB,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,CAAC,GAAG,EAAE;AAC1B,IAAI,IAAI,CAAC,GAAG,EAAE,OAAO,IAAI;;AAEzB;AACA,IAAI,MAAM,gBAAgB,GAAG,GAAG,CAAC,KAAK,CAAC,0CAA0C,CAAC;AAClF,IAAI,IAAI,gBAAgB,EAAE,OAAO,gBAAgB,CAAC,CAAC,CAAC;;AAEpD;AACA,IAAI,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,iCAAiC,CAAC;AAClE,IAAI,IAAI,SAAS,EAAE,OAAO,SAAS,CAAC,CAAC,CAAC;;AAEtC,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,sBAAsB,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE;AAC/D,IAAI,IAAI,CAAC,UAAU,EAAE;AACrB,MAAM,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC;AAC/D,MAAM,OAAO,CAAC;AACd,IAAI;;AAEJ;AACA;AACA,IAAI,IAAI,SAAS,KAAK,gBAAgB,EAAE;AACxC,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,oDAAoD,EAAE,OAAO,CAAC,iCAAiC,CAAC,CAAC;AACrH,MAAM,OAAO,CAAC;AACd,IAAI;;AAEJ;AACA;AACA,IAAI,IAAI,SAAS,KAAK,UAAU,EAAE;AAClC,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,6CAA6C,EAAE,OAAO,CAAC,4DAA4D,CAAC,CAAC;AACzI,MAAM,OAAO,CAAC;AACd,IAAI;;AAEJ;AACA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,2CAA2C,EAAE,OAAO,CAAC,gCAAgC,CAAC,CAAC;;AAEzG;AACA,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,EAAE;AAC9C,IAAI,IAAI,aAAa,GAAG,CAAC;;AAEzB;AACA,IAAI,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AAChC,MAAM,IAAI;AACV,QAAQ,QAAQ,KAAK,CAAC,IAAI;AAC1B,UAAU,KAAK,MAAM;AACrB,YAAY,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC;AACzD,YAAY,aAAa,EAAE;AAC3B,YAAY;;AAEZ,UAAU,KAAK,QAAQ;AACvB,YAAY,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,KAAK,CAAC;AACrD,YAAY,aAAa,EAAE;AAC3B,YAAY;;AAEZ,UAAU,KAAK,mBAAmB;AAClC,YAAY,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,KAAK,CAAC;AAC3D,YAAY,aAAa,EAAE;AAC3B,YAAY;AACZ;AACA,MAAM,CAAC,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,0CAA0C,CAAC,EAAE,KAAK,CAAC;AACxE,MAAM;AACN,IAAI;;AAEJ,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,2BAA2B,EAAE,aAAa,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAAC;AAC7F,IAAI,OAAO,aAAa;AACxB,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,eAAe,CAAC,UAAU,EAAE,KAAK,EAAE;AAC3C;AACA,IAAI,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC3E,IAAI,IAAI,QAAQ,EAAE;AAClB,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,yCAAyC,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7F,MAAM;AACN,IAAI;;AAEJ;AACA,IAAI,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC/C,IAAI,IAAI,CAAC,GAAG,GAAG,YAAY;AAC3B,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI;AAC1B,IAAI,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,MAAM,CAAC;AAC/C,IAAI,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,KAAK,CAAC,OAAO,IAAI,SAAS,CAAC;;AAEpE;AACA,IAAI,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC;;AAExD,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,kCAAkC,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACpF,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,UAAU,EAAE,KAAK,EAAE;AACvC;AACA,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;AAC/B,IAAI,IAAI,MAAM,EAAE;AAChB,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC,uBAAuB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AACrF,MAAM,IAAI,QAAQ,EAAE;AACpB,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,gDAAgD,EAAE,MAAM,CAAC,CAAC,CAAC;AACjF,QAAQ;AACR,MAAM;AACN,IAAI;;AAEJ;AACA,IAAI,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AACpD,IAAI,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC,OAAO;AACxC,IAAI,QAAQ,CAAC,YAAY,CAAC,gBAAgB,EAAE,MAAM,CAAC;AACnD,IAAI,QAAQ,CAAC,YAAY,CAAC,iBAAiB,EAAE,KAAK,CAAC,OAAO,IAAI,SAAS,CAAC;AACxE,IAAI,IAAI,MAAM,EAAE;AAChB,MAAM,QAAQ,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC;AACtD,IAAI;;AAEJ;AACA,IAAI,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC;;AAE5D,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,0CAA0C,EAAE,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC;AACxF,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,uBAAuB,CAAC,UAAU,EAAE,KAAK,EAAE;AAC7C,IAAI,IAAI;AACR;AACA,MAAM,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE;AAC1C,QAAQ,UAAU,CAAC,kBAAkB,GAAG,EAAE;AAC1C,MAAM;;AAEN;AACA,MAAM,IAAI,UAAU,CAAC,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AAC/D,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,oDAAoD,CAAC,CAAC;AAC5E,QAAQ;AACR,MAAM;;AAEN,MAAM,UAAU,CAAC,kBAAkB,GAAG;AACtC,QAAQ,GAAG,UAAU,CAAC,kBAAkB;AACxC,QAAQ,KAAK,CAAC;AACd,OAAO;;AAEP,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,8CAA8C,CAAC,CAAC;AACpE,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,uDAAuD,CAAC,EAAE,KAAK,CAAC;AACnF,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAmB,CAAC,QAAQ,EAAE;AAChC,IAAI,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,OAAO,MAAM,CAAC,CAAC;;AAEvD,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AAC/B,MAAM,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE;AACtC,IAAI;AACJ,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;;AAEtC;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AAC7B,MAAM,IAAI,CAAC,aAAa,GAAG,IAAI,gBAAgB,CAAC,CAAC,SAAS,KAAK;AAC/D,QAAQ,IAAI,eAAe,GAAG,KAAK;AACnC,QAAQ,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AAC1C,UAAU,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,EAAE;AAC7C,YAAY,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;AAC9D,YAAY,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI;AACrD,cAAc,IAAI,CAAC,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,KAAK;AAC1D,aAAa;AACb,YAAY,IAAI,YAAY,EAAE,EAAE,eAAe,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC;AAC/D,UAAU;AACV,QAAQ;AACR,QAAQ,IAAI,eAAe,EAAE;AAC7B,UAAU,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC;AACnE,UAAU,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE;AACjD,YAAY,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE;AACtC,cAAc,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE,GAAG,CAAC;AACjE,YAAY;AACZ,UAAU;AACV,QAAQ;AACR,MAAM,CAAC,CAAC;AACR,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACnF,MAAM,MAAM,CAAC,KAAK,CAAC,8DAA8D,CAAC;AAClF,IAAI;;AAEJ;AACA,IAAI,OAAO,MAAM;AACjB,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AACjC,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC3C;AACA;AACA,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE;AACjE,QAAQ,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;AACvC,QAAQ,IAAI,CAAC,aAAa,GAAG,IAAI;AACjC,MAAM;AACN,IAAI,CAAC;AACL,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,MAAM,EAAE;AACpB,IAAI,IAAI,CAAC,MAAM,GAAG;AAClB,MAAM,GAAG,IAAI,CAAC,MAAM;AACpB,MAAM,GAAG;AACT,KAAK;;AAEL,IAAI,MAAM,CAAC,KAAK,CAAC,2CAA2C,EAAE,IAAI,CAAC,MAAM,CAAC;AAC1E,EAAE;;AAEF;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE;AAC5B,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;AACrC,MAAM,IAAI,CAAC,aAAa,GAAG,IAAI;AAC/B,IAAI;;AAEJ,IAAI,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC;AAC7D,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,EAAE;;AAE9C,IAAI,OAAO;AACX,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM;AAChC,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,MAAM;AAC9D,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,MAAM;AAClE,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAC,MAAM;AACnF,MAAM,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACzE,MAAM,MAAM,EAAE,IAAI,CAAC;AACnB,KAAK;AACL,EAAE;AACF;;ACpgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAIO,MAAM,cAAc,CAAC;AAC5B,EAAE,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,EAAE,EAAE;AACrC,IAAI,IAAI,CAAC,OAAO,GAAG,OAAO;AAC1B,IAAI,IAAI,CAAC,OAAO,GAAG,OAAO;AAC1B,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI;AACrB,IAAI,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;AACzC,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK;AACvB,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,EAAE;;AAEjC;AACA,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE;AAC5B,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE;AAC/B,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE;AAC1B,IAAI,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;;AAE9B;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI;AAC1B,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI;AAC3B,IAAI,IAAI,CAAC,eAAe,GAAG,IAAI;AAC/B,IAAI,IAAI,CAAC,mBAAmB,GAAG,IAAI;AACnC,IAAI,IAAI,CAAC,qBAAqB,GAAG,IAAI;;AAErC;AACA,IAAI,IAAI,CAAC,QAAQ,GAAG,KAAK;AACzB,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI;AAC1B,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,CAAC,SAAS,EAAE,UAAU,EAAE;AACtC,IAAI,IAAI,CAAC,UAAU,GAAG,SAAS;AAC/B,IAAI,IAAI,CAAC,WAAW,GAAG,UAAU;AACjC,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,KAAK;;AAEtC,IAAI,MAAM,IAAI,GAAG,IAAI;;AAErB,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE;AACnC,MAAM,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE;AACxB;AACA,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACrC,UAAU,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACtC,QAAQ;;AAER;AACA,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC;AACzD,QAAQ,IAAI,WAAW,KAAK,SAAS,EAAE;AACvC,UAAU,OAAO,WAAW;AAC5B,QAAQ;;AAER;AACA,QAAQ,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;AAClC,QAAQ,IAAI,OAAO,KAAK,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;AACxE,UAAU,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;AACnC,QAAQ;AACR,QAAQ,OAAO,KAAK;AACpB,MAAM,CAAC;;AAEP,MAAM,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE;AAC/B,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK;AACrC,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AACnC,QAAQ,OAAO,IAAI;AACnB,MAAM,CAAC;;AAEP,MAAM,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE;AACxB,QAAQ,OAAO,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,MAAM;AACxD,MAAM,CAAC;;AAEP,MAAM,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE;AACnC,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACrC,UAAU,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACtC,UAAU,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;AACxC,UAAU,OAAO,IAAI;AACrB,QAAQ;AACR,QAAQ,OAAO,KAAK;AACpB,MAAM;AACN,KAAK,CAAC;;AAEN,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI;AACtB,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,6BAA6B,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAClE,IAAI,OAAO,IAAI,CAAC,KAAK;AACrB,EAAE;;AAEF;AACA;AACA;AACA,EAAE,UAAU,GAAG;AACf,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;;AAEtB;AACA,IAAI,IAAI,CAAC,aAAa,EAAE;;AAExB;AACA,IAAI,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;AACnC,MAAM,IAAI,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACvC,IAAI;AACJ,IAAI,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE;AACtC,MAAM,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACxC,IAAI;AACJ,IAAI,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;AACjC,MAAM,IAAI,EAAE,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC/C,IAAI;;AAEJ,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI;AACjF,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACxB,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;;AAEtB;AACA,IAAI,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM;AACrD,IAAI,KAAK,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE;AAC5E,MAAM,IAAI,EAAE,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC1E,IAAI;AACJ,IAAI,IAAI,CAAC,eAAe,GAAG,EAAE;;AAE7B;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;AACzC,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAC7B,IAAI,IAAI,CAAC,eAAe,GAAG,IAAI;AAC/B,IAAI,IAAI,CAAC,mBAAmB,GAAG,IAAI;AACnC,IAAI,IAAI,CAAC,qBAAqB,GAAG,IAAI;AACrC,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI;AACrB,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK;;AAEvB,IAAI,IAAI,UAAU,GAAG,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE;AAC7C,MAAM,MAAM,CAAC,OAAO;AACpB,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,SAAS,EAAE,aAAa,CAAC,UAAU;AACjG,OAAO;AACP,IAAI;AACJ,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,+BAA+B,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACpE,EAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,GAAG;AAChB,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;;AAEvB,IAAI,MAAM,IAAI,GAAG,IAAI;;AAErB;AACA,IAAI,MAAM,SAAS,GAAG;AACtB,MAAM,UAAU,EAAE,MAAM,CAAC,UAAU;AACnC,MAAM,YAAY,EAAE,MAAM,CAAC,YAAY;AACvC,MAAM,WAAW,EAAE,MAAM,CAAC,WAAW;AACrC,MAAM,aAAa,EAAE,MAAM,CAAC,aAAa;AACzC,MAAM,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;AACzD,MAAM,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;AACvD,MAAM,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;AAC/C,MAAM,mBAAmB,EAAE,MAAM,CAAC;AAClC,KAAK;;AAEL;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,SAAS;;AAE/B;AACA,IAAI,MAAM,CAAC,UAAU,GAAG,SAAS,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE;AACrD,MAAM,MAAM,EAAE,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;AACtE,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;AAC7C,MAAM,OAAO,EAAE;AACf,IAAI,CAAC;AACL,IAAI,MAAM,CAAC,YAAY,GAAG,SAAS,EAAE,EAAE;AACvC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AAC7B,MAAM,OAAO,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AACpD,IAAI,CAAC;AACL,IAAI,MAAM,CAAC,WAAW,GAAG,SAAS,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE;AACtD,MAAM,MAAM,EAAE,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;AACvE,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;AAChD,MAAM,OAAO,EAAE;AACf,IAAI,CAAC;AACL,IAAI,MAAM,CAAC,aAAa,GAAG,SAAS,EAAE,EAAE;AACxC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;AAChC,MAAM,OAAO,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AACrD,IAAI,CAAC;AACL,IAAI,MAAM,CAAC,qBAAqB,GAAG,SAAS,EAAE,EAAE;AAChD,MAAM,MAAM,EAAE,GAAG,SAAS,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AACjE,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAC3C,MAAM,OAAO,EAAE;AACf,IAAI,CAAC;AACL,IAAI,MAAM,CAAC,oBAAoB,GAAG,SAAS,EAAE,EAAE;AAC/C,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;AAC3B,MAAM,OAAO,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AAC5D,IAAI,CAAC;;AAEL;AACA,IAAI,MAAM,CAAC,gBAAgB,GAAG,SAAS,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;AAChE,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC/F,MAAM,OAAO,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC;AAC7E,IAAI,CAAC;AACL,IAAI,MAAM,CAAC,mBAAmB,GAAG,SAAS,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;AACnE,MAAM,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM;AACxD,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO;AAChF,OAAO;AACP,MAAM,OAAO,SAAS,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC;AAChF,IAAI,CAAC;;AAEL,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI;AACxB,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,kCAAkC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACvE,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,aAAa,GAAG;AAClB,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;;AAE5C,IAAI,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU;AAClD,IAAI,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY;AACtD,IAAI,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW;AACpD,IAAI,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;AACxD,IAAI,MAAM,CAAC,qBAAqB,GAAG,IAAI,CAAC,UAAU,CAAC,qBAAqB;AACxE,IAAI,MAAM,CAAC,oBAAoB,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB;AACtE,IAAI,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB;AAC9D,IAAI,MAAM,CAAC,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB;;AAEpE;AACA;AACA;AACA,IAAI,IAAI,CAAC,QAAQ,GAAG,KAAK;AACzB,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,oCAAoC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACzE,EAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE;AAC3B,IAAI,MAAM,IAAI,GAAG,IAAI;;AAErB,IAAI,QAAQ,IAAI;AAChB;AACA,MAAM,KAAK,YAAY;AACvB,QAAQ,OAAO,SAAS,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE;AAC5C,UAAU,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;AAC1D,UAAU,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9B,UAAU,OAAO,EAAE;AACnB,QAAQ,CAAC;AACT,MAAM,KAAK,cAAc;AACzB,QAAQ,OAAO,SAAS,EAAE,EAAE;AAC5B,UAAU,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AACjC,UAAU,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;AACjC,QAAQ,CAAC;AACT,MAAM,KAAK,aAAa;AACxB,QAAQ,OAAO,SAAS,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE;AAC5C,UAAU,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;AAC3D,UAAU,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;AACjC,UAAU,OAAO,EAAE;AACnB,QAAQ,CAAC;AACT,MAAM,KAAK,eAAe;AAC1B,QAAQ,OAAO,SAAS,EAAE,EAAE;AAC5B,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;AACpC,UAAU,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;AAClC,QAAQ,CAAC;AACT,MAAM,KAAK,uBAAuB;AAClC,QAAQ,OAAO,SAAS,EAAE,EAAE;AAC5B,UAAU,MAAM,EAAE,GAAG,MAAM,CAAC,qBAAqB,CAAC,EAAE,CAAC;AACrD,UAAU,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAC5B,UAAU,OAAO,EAAE;AACnB,QAAQ,CAAC;AACT,MAAM,KAAK,sBAAsB;AACjC,QAAQ,OAAO,SAAS,EAAE,EAAE;AAC5B,UAAU,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;AAC/B,UAAU,MAAM,CAAC,oBAAoB,CAAC,EAAE,CAAC;AACzC,QAAQ,CAAC;;AAET;AACA,MAAM,KAAK,kBAAkB;AAC7B,QAAQ,OAAO,SAAS,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;AACjD,UAAU,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACxE,UAAU,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC;AAC1D,QAAQ,CAAC;AACT,MAAM,KAAK,qBAAqB;AAChC,QAAQ,OAAO,SAAS,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;AACjD,UAAU,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM;AAC5D,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO;AACpF,WAAW;AACX,UAAU,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC;AAC7D,QAAQ,CAAC;;AAET;AACA,MAAM,KAAK,UAAU;AACrB,QAAQ,OAAO,IAAI,CAAC,kBAAkB,EAAE;;AAExC;AACA,MAAM,KAAK,cAAc;AACzB,QAAQ,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;AAC9C,MAAM,KAAK,gBAAgB;AAC3B,QAAQ,OAAO,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC;AAChD;;AAEA,IAAI,OAAO,SAAS;AACpB,EAAE;;AAEF;AACA;AACA;;AAEA,EAAE,kBAAkB,GAAG;AACvB,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,OAAO,IAAI,CAAC,eAAe;;AAEzD,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU;AACpD,IAAI,IAAI,CAAC,IAAI,EAAE,OAAO,QAAQ,CAAC;;AAE/B,IAAI,MAAM,IAAI,GAAG,IAAI;;AAErB,IAAI,IAAI,CAAC,eAAe,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE;AAC/C,MAAM,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE;AACxB,QAAQ,QAAQ,IAAI;AACpB,UAAU,KAAK,eAAe;AAC9B,YAAY,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC7D,UAAU,KAAK,kBAAkB;AACjC,YAAY,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;AAChE,UAAU,KAAK,gBAAgB;AAC/B,YAAY,OAAO,CAAC,EAAE,KAAK,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACnE,UAAU,KAAK,wBAAwB;AACvC,YAAY,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACpF,UAAU,KAAK,sBAAsB;AACrC,YAAY,OAAO,CAAC,GAAG,KAAK,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;;AAEtD;AACA,UAAU,KAAK,kBAAkB;AACjC,YAAY,OAAO,SAAS,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;AACrD,cAAc,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC5E,cAAc,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC;AAC9D,YAAY,CAAC;AACb,UAAU,KAAK,qBAAqB;AACpC,YAAY,OAAO,SAAS,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;AACrD,cAAc,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM;AAChE,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO;AACxF,eAAe;AACf,cAAc,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC;AACjE,YAAY,CAAC;;AAEb;AACA,UAAU,SAAS;AACnB,YAAY,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;AACtC,YAAY,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AAC7C,cAAc,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;AACvC,YAAY;AACZ,YAAY,OAAO,KAAK;AACxB,UAAU;AACV;AACA,MAAM;AACN,KAAK,CAAC;;AAEN,IAAI,OAAO,IAAI,CAAC,eAAe;AAC/B,EAAE;;AAEF;AACA;AACA;;AAEA,EAAE,iBAAiB,CAAC,IAAI,EAAE;AAC1B,IAAI,MAAM,QAAQ,GAAG,IAAI,KAAK,OAAO,GAAG,qBAAqB,GAAG,uBAAuB;AACvF,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC;;AAE7C,IAAI,MAAM,WAAW,GAAG,IAAI,KAAK,OAAO,GAAG,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,cAAc;AACtF,IAAI,IAAI,CAAC,WAAW,EAAE,OAAO,WAAW;;AAExC,IAAI,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;;AAExC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG;AACrB,MAAM,OAAO,CAAC,GAAG,EAAE;AACnB,QAAQ,OAAO,WAAW,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC;AAChD,MAAM,CAAC;AACP,MAAM,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE;AAC1B,QAAQ,WAAW,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AACxD,MAAM,CAAC;AACP,MAAM,UAAU,CAAC,GAAG,EAAE;AACtB,QAAQ,WAAW,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC;AAC5C,MAAM,CAAC;AACP,MAAM,KAAK,GAAG;AACd;AACA,QAAQ,MAAM,QAAQ,GAAG,EAAE;AAC3B,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrD,UAAU,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;AACtC,UAAU,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACzD,QAAQ;AACR,QAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACxD,MAAM,CAAC;AACP,MAAM,GAAG,CAAC,KAAK,EAAE;AACjB,QAAQ,IAAI,KAAK,GAAG,CAAC;AACrB,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrD,UAAU,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;AACtC,UAAU,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AACzC,YAAY,IAAI,KAAK,KAAK,KAAK,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AAC9D,YAAY,KAAK,EAAE;AACnB,UAAU;AACV,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,MAAM,CAAC;AACP,MAAM,IAAI,MAAM,GAAG;AACnB,QAAQ,IAAI,KAAK,GAAG,CAAC;AACrB,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrD,UAAU,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE;AAC7D,QAAQ;AACR,QAAQ,OAAO,KAAK;AACpB,MAAM;AACN,KAAK;;AAEL,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC;AACzB,EAAE;;AAEF;AACA;AACA;;AAEA,EAAE,cAAc,CAAC,EAAE,EAAE;AACrB,IAAI,IAAI;AACR,MAAM,OAAO,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,CAAC,WAAW,KAAK,EAAE;AAC5D,IAAI,CAAC,CAAC,MAAM;AACZ,MAAM,OAAO,KAAK;AAClB,IAAI;AACJ,EAAE;;AAEF,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI;AAC1C,EAAE;;AAEF,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO,IAAI,CAAC,MAAM;AACtB,EAAE;;AAEF,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO;AACX,MAAM,OAAO,EAAE,IAAI,CAAC,OAAO;AAC3B,MAAM,MAAM,EAAE,IAAI,CAAC,MAAM;AACzB,MAAM,OAAO,EAAE,IAAI,CAAC,QAAQ;AAC5B,MAAM,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;AACjD,MAAM,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM;AAC7D,MAAM,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;AACtC,MAAM,gBAAgB,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI;AAC5C,MAAM,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AAClC,MAAM,qBAAqB,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM;AACxD,MAAM,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU;AACrC,MAAM,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC;AAC5B,KAAK;AACL,EAAE;AACF;;AC5dA;AACA;AACA;AACA;AACA;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,kBAAkB,CAAC,IAAI,EAAE;AACzC,EAAE,IAAI,IAAI,KAAK,MAAM,EAAE,OAAO,UAAU;AACxC,EAAE,IAAI,IAAI,KAAK,UAAU,EAAE,OAAO,gBAAgB;AAClD,EAAE,OAAO,IAAI;AACb;;AAEO,MAAM,SAAS,CAAC;AACvB,EAAE,WAAW,GAAG;AAChB;AACA,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE;AAC9B,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,aAAa,EAAE;;AAE1C;AACA,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;AACjC,IAAI,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,qBAAqB,EAAE;;AAEvD,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,iDAAiD,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAC/F,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,qBAAqB,GAAG;AAC1B,IAAI,OAAO,OAAO;AAClB,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,GAAG,EAAE,EAAE;AAC/C,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC,CAAC;;AAEtD,IAAI,IAAI;AACR;AACA,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;AACvC,QAAQ,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC;AACnE,MAAM;;AAEN;AACA,MAAM,IAAI,UAAU;AACpB,MAAM,IAAI,aAAa,CAAC,UAAU,EAAE;AACpC,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,kCAAkC,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;;AAE7F;AACA,QAAQ,aAAa,CAAC,UAAU,CAAC,SAAS,GAAG,EAAE;AAC/C,QAAQ,UAAU,GAAG,aAAa,CAAC,UAAU;;AAE7C,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,4CAA4C,EAAE,OAAO,CAAC,CAAC,CAAC;AAChF,MAAM,CAAC,MAAM;AACb;AACA,QAAQ,UAAU,GAAG,aAAa,CAAC,YAAY,CAAC;AAChD,UAAU,IAAI,EAAE,MAAM;AACtB,UAAU,cAAc,EAAE;AAC1B,SAAS,CAAC;;AAEV,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC,CAAC;AAChE,MAAM;;AAEN;AACA,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACxD,MAAM,YAAY,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC3C,MAAM,YAAY,CAAC,SAAS,GAAG,aAAa;AAC5C,MAAM,YAAY,CAAC,YAAY,CAAC,kBAAkB,EAAE,MAAM,CAAC;AAC3D,MAAM,YAAY,CAAC,YAAY,CAAC,mBAAmB,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;;AAE3E;AACA,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AACxD,MAAM,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;;AAElE;AACA,MAAM,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC;AACxC,MAAM,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC;;AAE1C;AACA,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC;AAC7D,MAAM,IAAI,SAAS,CAAC,YAAY,EAAE;AAClC,QAAQ,SAAS,CAAC,YAAY,CAAC,YAAY,EAAE,UAAU,CAAC;AACxD,MAAM;AACN,MAAM,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,EAAE;;AAE1C;AACA;AACA;AACA,MAAM,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC;;AAE5F,MAAM,MAAM,OAAO,GAAG;AACtB,QAAQ,OAAO;AACf,QAAQ,UAAU;AAClB,QAAQ,SAAS,EAAE,YAAY;AAC/B,QAAQ,aAAa;AACrB,QAAQ,SAAS;AACjB,QAAQ,OAAO;AACf,QAAQ,MAAM,EAAE,UAAU;AAC1B,QAAQ,SAAS;AACjB,QAAQ,QAAQ,EAAE,OAAO,CAAC,QAAQ;AAClC,QAAQ,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;AAC3B,QAAQ,aAAa,EAAE,QAAQ;AAC/B,QAAQ,cAAc,EAAE;AACxB,OAAO;;AAEP;AACA;AACA;AACA;;AAEA,MAAM,IAAI,SAAS,KAAK,UAAU,EAAE;AACpC;AACA;AACA,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,0BAA0B,EAAE,OAAO,CAAC,uCAAuC,CAAC,CAAC;AACrG,QAAQ,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AAChD;;AAEA,MAAM,CAAC,MAAM,IAAI,SAAS,KAAK,gBAAgB,EAAE;AACjD,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,yCAAyC,EAAE,OAAO,CAAC,gCAAgC,CAAC,CAAC;AAC7G;AACA,QAAQ,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACjH,QAAQ,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,CAAC;;AAElE;AACA,QAAQ,OAAO,CAAC,MAAM,GAAG,MAAM;;AAE/B;AACA;AACA,QAAQ,MAAM,IAAI,GAAG,IAAI;;AAEzB,QAAQ,OAAO,CAAC,WAAW,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;AACvD,UAAU,IAAI,QAAQ,GAAG,KAAK;;AAE9B,UAAU,MAAM,SAAS,GAAG,YAAY;AACxC,YAAY,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC;;AAEzF,YAAY,IAAI,KAAK,GAAG,CAAC,EAAE;AAC3B,cAAc,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,gBAAgB,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAC5F,cAAc,IAAI,CAAC,QAAQ,EAAE;AAC7B,gBAAgB,QAAQ,GAAG,IAAI;AAC/B,gBAAgB,OAAO,CAAC,KAAK,CAAC;AAC9B,cAAc;AACd,YAAY;;AAEZ,YAAY,OAAO,KAAK;AACxB,UAAU,CAAC;;AAEX;AACA,UAAU,MAAM,CAAC,OAAO,CAAC,CAAC,8BAA8B,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;AACrF,UAAU,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,CAAC,SAAS,KAAK;AAC/D,YAAY,IAAI,aAAa,GAAG,CAAC;AACjC,YAAY,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE;AACvC,cAAc,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE;AAC1C,gBAAgB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE;AAC9C,kBAAkB,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,EAAE;AACvE,oBAAoB,aAAa,EAAE;AACnC,oBAAoB,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE;AACzC;AACA;AACA,oBAAoB,MAAM,KAAK,GAAG,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC;AAC/D,oBAAoB,MAAM,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,kBAAkB,CAAC;AACrE,oBAAoB,IAAI,KAAK,KAAK,OAAO,EAAE;AAC3C,sBAAsB,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAC1E,oBAAoB,CAAC,MAAM,IAAI,MAAM,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE;AAC/F,sBAAsB,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAC/F,oBAAoB;AACpB,kBAAkB;AAClB,gBAAgB;AAChB,cAAc;AACd,YAAY;AACZ,YAAY,IAAI,aAAa,GAAG,CAAC,EAAE;AACnC,cAAc,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,CAAC,2CAA2C,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AACxG,cAAc,SAAS,EAAE;AACzB,YAAY;AACZ,UAAU,CAAC,CAAC;;AAEZ;AACA,UAAU,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;AAC1C,YAAY,SAAS,EAAE,IAAI;AAC3B,YAAY,OAAO,EAAE;AACrB,WAAW,CAAC;;AAEZ;AACA,UAAU,OAAO,CAAC,aAAa,GAAG,QAAQ;;AAE1C;AACA,UAAU,UAAU,CAAC,YAAY;AACjC,YAAY,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE;AAC3C;AACA,YAAY,IAAI,CAAC,QAAQ,EAAE;AAC3B,cAAc,UAAU,CAAC,MAAM;AAC/B,gBAAgB,IAAI,CAAC,QAAQ,EAAE;AAC/B,kBAAkB,MAAM,CAAC,MAAM,CAAC,CAAC,wBAAwB,EAAE,OAAO,CAAC,8BAA8B,CAAC,CAAC;AACnG,kBAAkB,MAAM,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,OAAO,CAAC;AACzF,kBAAkB,MAAM,CAAC,OAAO,CAAC,CAAC,mBAAmB,EAAE,aAAa,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;AAC7F,kBAAkB,QAAQ,GAAG,IAAI;AACjC,kBAAkB,OAAO,CAAC,aAAa,CAAC;AACxC,gBAAgB;AAChB,cAAc,CAAC,EAAE,IAAI,CAAC;AACtB,YAAY;AACZ,UAAU,CAAC,EAAE,EAAE,CAAC;AAChB,QAAQ,CAAC,CAAC;AACV,MAAM,CAAC,MAAM;AACb;AACA,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,wBAAwB,EAAE,OAAO,CAAC,gCAAgC,CAAC,CAAC;AAC5F,QAAQ,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI;AACpH,UAAU,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;;AAElE;AACA;AACA;AACA,UAAU,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,MAAM;AACvF,YAAY,MAAM,CAAC,OAAO,CAAC,CAAC,uBAAuB,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;AAC9E,YAAY,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI;AACjG,cAAc,MAAM,CAAC,MAAM,CAAC,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC,CAAC;AAChE,YAAY,CAAC,CAAC;AACd,UAAU,CAAC,CAAC;;AAEZ,UAAU,OAAO,KAAK;AACtB,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI;AAC1B,UAAU,MAAM,CAAC,MAAM,CAAC,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC,CAAC;AAC5D,UAAU,OAAO,CAAC;AAClB,QAAQ,CAAC,CAAC;AACV,MAAM;;AAEN;AACA,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;;AAE1C,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC,CAAC;AAC/D,MAAM,OAAO,OAAO;;AAEpB,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,6BAA6B,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;;AAEzE;AACA,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAAE;AACnE,QAAQ,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,aAAa,CAAC;AACjE,MAAM;;AAEN,MAAM,MAAM,KAAK;AACjB,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA,EAAE,qBAAqB,CAAC,OAAO,EAAE,aAAa,EAAE;AAChD,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,8BAA8B,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;;AAEjE,IAAI,IAAI;AACR;AACA,MAAM,IAAI,aAAa,CAAC,UAAU,EAAE;AACpC,QAAQ,aAAa,CAAC,UAAU,CAAC,SAAS,GAAG,EAAE;AAC/C,MAAM;;AAEN;AACA,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC7D,MAAM,iBAAiB,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAChD,MAAM,iBAAiB,CAAC,SAAS,GAAG,yBAAyB;AAC7D,MAAM,iBAAiB,CAAC,KAAK,CAAC,OAAO,GAAG;AACxC;AACA;AACA;AACA;AACA,MAAM,CAAC;;AAEP;AACA,MAAM,aAAa,CAAC,SAAS,GAAG,EAAE;AAClC,MAAM,aAAa,CAAC,WAAW,CAAC,iBAAiB,CAAC;;AAElD,MAAM,MAAM,aAAa,GAAG;AAC5B,QAAQ,OAAO;AACf,QAAQ,UAAU,EAAE,IAAI;AACxB,QAAQ,SAAS,EAAE,iBAAiB;AACpC,QAAQ,aAAa;AACrB,QAAQ,MAAM,EAAE,IAAI;AACpB,QAAQ,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;AAC3B,QAAQ,aAAa,EAAE,eAAe;AACtC,QAAQ,cAAc,EAAE,CAAC;AACzB,QAAQ,aAAa,EAAE;AACvB,OAAO;;AAEP,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC;;AAEhD,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,0CAA0C,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5E,MAAM,OAAO,aAAa;;AAE1B,IAAI,CAAC,CAAC,OAAO,YAAY,EAAE;AAC3B,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,kCAAkC,EAAE,YAAY,CAAC,CAAC,CAAC;AACzE,MAAM,MAAM,YAAY;AACxB,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA,EAAE,qBAAqB,CAAC,OAAO,EAAE;AACjC,IAAI,OAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,EAAE,OAAO,CAAC;AAClC;AACA,iCAAiC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AAC9C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI,CAAC;AACL,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,uBAAuB,CAAC,OAAO,EAAE;AACnC,IAAI,MAAM,SAAS,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC;AACjD,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC,CAAC;AACzD,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC;AAC5C,IAAI,OAAO,SAAS;AACpB,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE;AAC1B,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;AAC/C,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC,CAAC;AACxD,MAAM;AACN,IAAI;;AAEJ,IAAI,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AACxD,IAAI,YAAY,CAAC,WAAW,GAAG,GAAG;AAClC,IAAI,YAAY,CAAC,YAAY,CAAC,kBAAkB,EAAE,EAAE,CAAC;;AAErD,IAAI,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC;AAChD,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC,CAAC;AACvD,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE;AACpC,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;AAC/C,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC,CAAC;AACxD,MAAM;AACN,IAAI;;AAEJ,IAAI,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AACtD,IAAI,WAAW,CAAC,GAAG,GAAG,YAAY;AAClC,IAAI,WAAW,CAAC,IAAI,GAAG,IAAI;AAC3B,IAAI,WAAW,CAAC,YAAY,CAAC,oBAAoB,EAAE,EAAE,CAAC;;AAEtD,IAAI,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC;AAC/C,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,0BAA0B,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;AACnE,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,EAAE;AACxC,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;AAC/C,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC,CAAC;AACxD,MAAM;AACN,IAAI;;AAEJ,IAAI,IAAI,OAAO,EAAE;AACjB,MAAM,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC;AACxD,MAAM,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC;AAC3D,IAAI,CAAC,MAAM;AACX,MAAM,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,UAAU,CAAC;AACvD,MAAM,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,QAAQ,CAAC;AACrD,IAAI;;AAEJ,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AACnF,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,OAAO,EAAE;AACnB,IAAI,IAAI,CAAC,OAAO,EAAE;;AAElB,IAAI,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,OAAO;;AAErE,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC,CAAC;;AAEzD,IAAI,IAAI;AACR;AACA,MAAM,IAAI,SAAS,IAAI,SAAS,CAAC,QAAQ,EAAE,EAAE;AAC7C,QAAQ,SAAS,CAAC,UAAU,EAAE;AAC9B,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC,CAAC;AAC/D,MAAM;;AAEN;AACA;AACA;AACA,MAAM,IAAI,OAAO,CAAC,aAAa,EAAE;AACjC,QAAQ,IAAI;AACZ,UAAU,OAAO,CAAC,aAAa,CAAC,UAAU,EAAE;AAC5C,QAAQ,CAAC,CAAC,OAAO,GAAG,EAAE;AACtB,UAAU,MAAM,CAAC,MAAM,CAAC,CAAC,uCAAuC,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;AACpF,QAAQ;AACR,QAAQ,OAAO,CAAC,aAAa,GAAG,IAAI;AACpC,MAAM;;AAEN;AACA;AACA,MAAM,IAAI,OAAO,OAAO,CAAC,uBAAuB,KAAK,UAAU,EAAE;AACjE,QAAQ,IAAI,EAAE,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE;AAC/D,UAAU,MAAM,CAAC,MAAM,CAAC,CAAC,wCAAwC,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;AACrF,QAAQ;AACR,QAAQ,OAAO,CAAC,uBAAuB,GAAG,IAAI;AAC9C,MAAM;;AAEN;AACA,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,0BAA0B,EAAE;AACxD,QAAQ,IAAI,CAAC,WAAW,CAAC,0BAA0B,CAAC,OAAO,CAAC;AAC5D,MAAM;;AAEN;AACA,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;;AAEzC;AACA,MAAM,IAAI,UAAU,EAAE;AACtB,QAAQ,UAAU,CAAC,SAAS,GAAG,EAAE;AACjC,MAAM;;AAEN;AACA,MAAM,IAAI,aAAa,EAAE;AACzB,QAAQ,aAAa,CAAC,eAAe,CAAC,UAAU,CAAC;AACjD,QAAQ,aAAa,CAAC,eAAe,CAAC,QAAQ,CAAC;AAC/C,QAAQ,aAAa,CAAC,eAAe,CAAC,cAAc,CAAC;AACrD,MAAM;;AAEN;AACA,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;AACpC,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC;;AAEtC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAAC;;AAEtD,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,0BAA0B,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;AACtE,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,qBAAqB,CAAC,OAAO,EAAE;AACjC;AACA,IAAI,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO;AAClC,IAAI,IAAI,CAAC,UAAU,EAAE;;AAErB;AACA,IAAI,MAAM,QAAQ,GAAG,UAAU,CAAC,gBAAgB,CAAC,GAAG,CAAC;AACrD,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAI;AAChC,MAAM,IAAI,OAAO,CAAC,SAAS,EAAE;AAC7B,QAAQ,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;AAC7C,QAAQ,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC;AACxD,MAAM;AACN,IAAI,CAAC,CAAC;AACN,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,OAAO,EAAE;AAC1B,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;AAC/C,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI;;AAE7B,IAAI,OAAO;AACX,MAAM,OAAO,EAAE,OAAO,CAAC,OAAO;AAC9B,MAAM,OAAO,EAAE,OAAO,CAAC,OAAO;AAC9B,MAAM,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS;AACvC,MAAM,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU;AACzC,MAAM,YAAY,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC7D,MAAM,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;AACnC,KAAK;AACL,EAAE;;AAEF;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO;AACX,MAAM,QAAQ,EAAE,IAAI,CAAC,eAAe;AACpC,MAAM,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;AAChC,MAAM,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;AAClD,MAAM,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AACtD,MAAM,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM;AAC9E,QAAQ,IAAI;AACZ,QAAQ,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO;AAC5C,QAAQ,QAAQ,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC3D,QAAQ,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS;AACzC,QAAQ,eAAe,EAAE,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI;AAC1D,OAAO,CAAC;AACR,KAAK;AACL,EAAE;;AAEF;AACA;AACA;AACA,EAAE,UAAU,GAAG;AACf,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;;AAEzE,IAAI,KAAK,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;AACrD,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;AAC3B,IAAI;;AAEJ;AACA,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;AAC1B,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AAChC,IAAI;;AAEJ,IAAI,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC;AAC9C,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,qBAAqB,CAAC,MAAM,EAAE;AAChC,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;AAC1B,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC;AACxC,MAAM,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC;AAC9C,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,aAAa,GAAG;AAClB,IAAI,OAAO,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,IAAI;AAChE,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,MAAM,cAAc,CAAC,OAAO,EAAE;AAChC,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;AAC/C,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AACzC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5D,MAAM;AACN,IAAI;;AAEJ,IAAI,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS;;AAEvC;AACA,IAAI,IAAI,SAAS,KAAK,UAAU,EAAE;AAClC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,sBAAsB,EAAE,OAAO,CAAC,yCAAyC,CAAC,CAAC;AACjG,MAAM;AACN,IAAI;;AAEJ;AACA,IAAI,IAAI,SAAS,KAAK,gBAAgB,EAAE;AACxC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,2BAA2B,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;AACjF,MAAM,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAC7G,MAAM,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC;AAC3F,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC;AACrE,MAAM;AACN,IAAI;;AAEJ;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,8BAA8B,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AACjE,IAAI,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,sBAAsB;AAC/D,MAAM,OAAO,CAAC,UAAU;AACxB,MAAM,OAAO;AACb,MAAM;AACN,KAAK;AACL,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;AACvD,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,uBAAuB,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE;AAC7D,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC;;AAE7B,IAAI,IAAI,aAAa,GAAG,CAAC;;AAEzB;AACA,IAAI,MAAM,SAAS,GAAG,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC;AACxD,IAAI,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE;;AAEnD;AACA;AACA;AACA,IAAI,MAAM,WAAW,GAAG;AACxB;AACA;AACA,MAAM,IAAI,MAAM,CAAC,CAAC,eAAe,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,EAAE,GAAG;AAC5E,KAAK;;AAEL,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,yBAAyB,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;;AAEvG;AACA,IAAI,IAAI,aAAa,GAAG,CAAC;AACzB,IAAI,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE;AAC/B,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,EAAE;AAC1D,MAAM,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE;AACzD,QAAQ,aAAa,EAAE;AACvB,MAAM;AACN,IAAI;AACJ,IAAI,IAAI,aAAa,GAAG,CAAC,EAAE;AAC3B,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC,CAAC;AACrF,IAAI;;AAEJ,IAAI,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE;AACnC;;AAEA,MAAM,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,EAAE;AACjE,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE;;AAEvE;AACA,MAAM,IAAI,YAAY,GAAG,KAAK;;AAE9B;AACA,MAAM,IAAI,MAAM,EAAE;AAClB;AACA,QAAQ,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE;AAC3C,UAAU,IAAI,OAAO,YAAY,MAAM,EAAE;AACzC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACtC,cAAc,YAAY,GAAG,IAAI;AACjC,cAAc;AACd,YAAY;AACZ,UAAU,CAAC,MAAM;AACjB,YAAY,IAAI,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE;AAClE,cAAc,YAAY,GAAG,IAAI;AACjC,cAAc;AACd,YAAY;AACZ,UAAU;AACV,QAAQ;AACR,MAAM;;AAEN,MAAM,IAAI,YAAY,EAAE;AACxB;AACA,QAAQ,MAAM,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC,wBAAwB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;;AAE7F,QAAQ,IAAI,CAAC,aAAa,EAAE;AAC5B,UAAU,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;AACnD,UAAU,WAAW,CAAC,YAAY,CAAC,kBAAkB,EAAE,MAAM,CAAC;AAC9D,UAAU,UAAU,CAAC,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC,UAAU,CAAC;AACrE,UAAU,aAAa,EAAE;AACzB,UAAU,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3H,UAAU,MAAM,CAAC,OAAO,CAAC,CAAC,uBAAuB,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;AAC3E,QAAQ;AACR,MAAM;AACN,IAAI;;AAEJ,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,8BAA8B,EAAE,OAAO,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;AAChF,IAAI,OAAO,aAAa;AACxB,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,uBAAuB,CAAC,UAAU,EAAE,OAAO,EAAE;AAC/C,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC;;AAE7B,IAAI,IAAI,aAAa,GAAG,CAAC;AACzB,IAAI,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE;;AAEnD;AACA,IAAI,MAAM,SAAS,GAAG,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC;AACxD,IAAI,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE;AACnC,MAAM,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,EAAE;;AAEjE;AACA,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE;;AAE7D;AACA,MAAM,IAAI,UAAU,CAAC,aAAa,CAAC,CAAC,wBAAwB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE;;AAE3E,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;AAC/C,MAAM,WAAW,CAAC,YAAY,CAAC,kBAAkB,EAAE,MAAM,CAAC;AAC1D,MAAM,UAAU,CAAC,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC,UAAU,CAAC;AACjE,MAAM,aAAa,EAAE;AACrB,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE;AAC3E,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC,CAAC;AACvD,IAAI;;AAEJ,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,gBAAgB,EAAE,aAAa,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC,CAAC;AACrF,IAAI,OAAO,aAAa;AACxB,EAAE;AACF;;AC1yBA;AACA;AACA;AACA;;;AAIO,MAAM,UAAU,CAAC;AACxB,EAAE,WAAW,GAAG;AAChB,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE;AAC1B,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE;;AAE5B;AACA,IAAI,IAAI,CAAC,QAAQ,GAAG;AACpB,MAAM,eAAe,EAAE,GAAG,GAAG,IAAI;AACjC,MAAM,aAAa,EAAE,EAAE;AACvB,MAAM,cAAc,EAAE,GAAG;AACzB,MAAM,UAAU,EAAE,GAAG;AACrB,MAAM,UAAU,EAAE,EAAE;AACpB,MAAM,SAAS,EAAE,GAAG;AACpB;AACA,MAAM,iBAAiB,EAAE;AACzB,QAAQ,MAAM;AACd,QAAQ,UAAU;AAClB,QAAQ,WAAW;AACnB,QAAQ,YAAY;AACpB,QAAQ,cAAc;AACtB,QAAQ,QAAQ;AAChB,QAAQ,UAAU;AAClB,QAAQ,YAAY;AACpB,OAAO;AACP;AACA,MAAM,cAAc,EAAE;AACtB,QAAQ,UAAU;AAClB,QAAQ;AACR;AACA,KAAK;;AAEL,IAAI,IAAI,CAAC,YAAY,EAAE;AACvB,EAAE;;AAEF;AACA;AACA;AACA,EAAE,YAAY,GAAG;AACjB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE;AAChC,MAAM,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;AACjC,MAAM,QAAQ,EAAE,CAAC,IAAI,CAAC;AACtB,MAAM,EAAE,EAAE;AACV,QAAQ,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC;AACjE,QAAQ,OAAO,EAAE,QAAQ;AACzB,QAAQ,OAAO,EAAE,OAAO;AACxB,QAAQ,MAAM,EAAE,OAAO;AACvB,QAAQ,WAAW,EAAE;AACrB;AACA,KAAK,CAAC;AACN,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE;AACrB,IAAI,MAAM,WAAW,GAAG,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;;AAE3C,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,kCAAkC,EAAE,WAAW,CAAC,CAAC,CAAC;;AAEpE,IAAI,IAAI;AACR;AACA,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;AACvC,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,0BAA0B,EAAE,WAAW,CAAC,CAAC,CAAC;AAChE,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;AAC1C,MAAM;;AAEN;AACA,MAAM,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE;AAChD,QAAQ,KAAK,EAAE,UAAU;AACzB,QAAQ,OAAO,EAAE;AACjB,UAAU,QAAQ,EAAE;AACpB,SAAS;AACT,QAAQ,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK;AACzC,OAAO,CAAC;;AAER,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AACxB;AACA,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;AACrC,UAAU,MAAM,CAAC,KAAK,CAAC,CAAC,yDAAyD,EAAE,MAAM,CAAC,CAAC,CAAC;AAC5F,UAAU,OAAO,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;AACnD,QAAQ;;AAER,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AAC1E,MAAM;;AAEN,MAAM,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;;AAEhD;AACA,MAAM,IAAI,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;AAC/D,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,oBAAoB,EAAE,YAAY,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAClH,MAAM;;AAEN;AACA,MAAM,IAAI,QAAQ;AAClB,MAAM,IAAI;AACV,QAAQ,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;AAC3C,MAAM,CAAC,CAAC,OAAO,UAAU,EAAE;AAC3B,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,0BAA0B,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1E,MAAM;;AAEN;AACA,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;;AAEvD;AACA,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,iBAAiB,CAAC;;AAEpD,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,gCAAgC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACtE,MAAM,OAAO,iBAAiB;;AAE9B,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,wCAAwC,EAAE,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC;;AAEpF;AACA,MAAM,IAAI;AACV,QAAQ,OAAO,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;AACjD,MAAM,CAAC,CAAC,OAAO,YAAY,EAAE;AAC7B,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,6BAA6B,EAAE,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AACxF,MAAM;AACN,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,qBAAqB,CAAC,MAAM,EAAE;AAChC;AACA,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;;AAEtD,IAAI,MAAM,eAAe,GAAG;AAC5B,MAAM,IAAI,EAAE,OAAO;AACnB,MAAM,KAAK,EAAE,UAAU;AACvB,MAAM,EAAE,EAAE;AACV,QAAQ,OAAO,EAAE,EAAE;AACnB,QAAQ,OAAO,EAAE,EAAE;AACnB,QAAQ,MAAM,EAAE,EAAE;AAClB,QAAQ,WAAW,EAAE;AACrB;AACA,KAAK;;AAEL,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,8CAA8C,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5E,IAAI,OAAO,eAAe;AAC1B,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,qBAAqB,CAAC,GAAG,EAAE;AAC7B,IAAI,IAAI;AACR,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;AACjC,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;;AAErE;AACA,MAAM,OAAO,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,aAAa;AACnE,IAAI,CAAC,CAAC,MAAM;AACZ;AACA,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,IAAI,aAAa;AAC/D,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA,EAAE,eAAe,CAAC,GAAG,EAAE;AACvB,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,OAAO,EAAE;AAC1C,IAAI,OAAO;AACX,OAAO,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;AAC7B,OAAO,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;AACtC,OAAO,IAAI,EAAE;AACb,EAAE;;AAEF;AACA;AACA;AACA,EAAE,qBAAqB,CAAC,GAAG,EAAE;AAC7B,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,OAAO,KAAK;AAC7C,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7E,EAAE;;AAEF;AACA;AACA;AACA,EAAE,UAAU,CAAC,GAAG,EAAE;AAClB,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,OAAO,KAAK;;AAE7C;AACA,IAAI,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE;AACzC,MAAM,OAAO,KAAK;AAClB,IAAI;;AAEJ;AACA,IAAI,IAAI;AACR,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,kBAAkB,CAAC;AACrD,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;AAC/E,QAAQ,OAAO,KAAK;AACpB,MAAM;AACN,IAAI,CAAC,CAAC,MAAM;AACZ;AACA,MAAM,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE;AAC3C,QAAQ,OAAO,KAAK;AACpB,MAAM;AACN,IAAI;;AAEJ,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,QAAQ,EAAE;AACrB,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;;AAE9C;AACA,IAAI,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AAC9E,MAAM,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC;AACxD,IAAI;;AAEJ;AACA,IAAI,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE;AACzC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC5B,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC,CAAC;AAC3D,MAAM;AACN,IAAI;;AAEJ;AACA,IAAI,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC3C,MAAM,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC;AAC9C,IAAI;AACJ,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE;AAC5D,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACjF,IAAI;AACJ,IAAI,IAAI,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACnD,MAAM,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC;AACzD,IAAI;;AAEJ;AACA,IAAI,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,EAAE;AAC5C,MAAM,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;AAC/C,IAAI;AACJ,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE;AAC9D,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AACnF,IAAI;AACJ,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC1C,MAAM,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;AAC1D,IAAI;;AAEJ;AACA,IAAI,IAAI,QAAQ,CAAC,EAAE,EAAE;AACrB,MAAM,MAAM,EAAE,GAAG,QAAQ,CAAC,EAAE;;AAE5B,MAAM,IAAI,EAAE,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC,OAAO,KAAK,QAAQ,EAAE;AACxD,QAAQ,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;AACvD,MAAM;;AAEN;AACA,MAAM,IAAI,EAAE,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;AACnF,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,sBAAsB,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC7E,MAAM;;AAEN;AACA,MAAM,IAAI,EAAE,CAAC,OAAO,EAAE;AACtB,QAAQ,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE;AAC9D,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACtC,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5D,UAAU;AACV,QAAQ;AACR,MAAM;;AAEN,MAAM,IAAI,EAAE,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE;AACpD,QAAQ,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;AACtD,MAAM;;AAEN;AACA,MAAM,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;AACtE,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,sBAAsB,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC7E,MAAM;;AAEN,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE;AAClD,QAAQ,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC;AACrD,MAAM;;AAEN;AACA,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;AACnE,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,qBAAqB,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC3E,MAAM;;AAEN,MAAM,IAAI,EAAE,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE;AAC5D,QAAQ,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC;AAC1D,MAAM;AACN,IAAI;;AAEJ;AACA;AACA;AACA,IAAI,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS,EAAE;AAC1C,MAAM,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,UAAU,CAAC;AACrF,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AACpD,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,gCAAgC,EAAE,QAAQ,CAAC,SAAS,CAAC,kCAAkC,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACtI,QAAQ,QAAQ,CAAC,SAAS,GAAG,QAAQ;AACrC,MAAM;AACN,IAAI;;AAEJ,IAAI,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,EAAE;AAChF,MAAM,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC;AACpE,MAAM,OAAO,QAAQ,CAAC,OAAO;AAC7B,IAAI;;AAEJ,IAAI,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE;AACvC,MAAM,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE;AAC/C,QAAQ,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC;AACrE,QAAQ,OAAO,QAAQ,CAAC,MAAM;AAC9B,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC9D,QAAQ,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC;AAC7D,MAAM;AACN,IAAI;;AAEJ;AACA,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AACnC,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,QAAQ,EAAE;AACtB,IAAI,MAAM,UAAU,GAAG;AACvB,MAAM,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;AAChC,MAAM,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC;AAChD,MAAM,EAAE,EAAE;AACV,QAAQ,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,IAAI,EAAE;AAC3C,QAAQ,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,IAAI,EAAE;AAC3C,QAAQ,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE;AACzC,QAAQ,WAAW,EAAE,QAAQ,CAAC,EAAE,EAAE,WAAW,IAAI;AACjD;AACA,KAAK;;AAEL;AACA,IAAI,IAAI,QAAQ,CAAC,SAAS,EAAE;AAC5B,MAAM,UAAU,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS;AAC/C,IAAI;AACJ,IAAI,IAAI,QAAQ,CAAC,OAAO,EAAE;AAC1B,MAAM,UAAU,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO;AAC3C,IAAI;AACJ,IAAI,IAAI,QAAQ,CAAC,MAAM,EAAE;AACzB,MAAM,UAAU,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM;AACzC,IAAI;;AAEJ;AACA,IAAI,IAAI,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE;AAC/B,MAAM,MAAM,iBAAiB,GAAG,EAAE;AAClC,MAAM,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE;AACvE,QAAQ,iBAAiB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;AAClE,MAAM;AACN,MAAM,UAAU,CAAC,EAAE,CAAC,OAAO,GAAG,iBAAiB;AAC/C,IAAI;;AAEJ;AACA,IAAI,UAAU,CAAC,EAAE,CAAC,OAAO,GAAG,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI;AAChE,MAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACzD,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC,CAAC;AACjE,QAAQ,OAAO,KAAK;AACpB,MAAM;AACN,MAAM,OAAO,IAAI;AACjB,IAAI,CAAC,CAAC;;AAEN,IAAI,OAAO,UAAU;AACrB,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,KAAK,EAAE;AACxB,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,UAAU;;AAEjC,IAAI,IAAI,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE;;AAEjC;AACA,IAAI,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACrC,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AAC1C,IAAI;;AAEJ;AACA,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACnC,MAAM,UAAU,IAAI,KAAK;AACzB,IAAI;;AAEJ,IAAI,OAAO,UAAU;AACrB,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,sBAAsB,CAAC,IAAI,EAAE;AAC/B,IAAI,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE;;AAExB,IAAI,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE;;AAEhC;AACA,IAAI,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACrC,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AAC1C,IAAI;;AAEJ;AACA,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACnC,MAAM,UAAU,IAAI,KAAK;AACzB,IAAI;;AAEJ,IAAI,OAAO,UAAU;AACrB,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,oBAAoB,CAAC,OAAO,EAAE,aAAa,EAAE;AAC/C,IAAI,MAAM,MAAM,GAAG;AACnB,MAAM,KAAK,EAAE,EAAE;AACf,MAAM,OAAO,EAAE,EAAE;AACjB,MAAM,OAAO,EAAE;AACf,KAAK;;AAEL,IAAI,KAAK,MAAM,UAAU,IAAI,OAAO,EAAE;AACtC,MAAM,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;;AAE5D,MAAM,IAAI,CAAC,OAAO,IAAI,CAAC,aAAa,EAAE;AACtC,QAAQ,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;AAC5B,UAAU,MAAM,EAAE,UAAU;AAC5B,UAAU,MAAM,EAAE;AAClB,SAAS,CAAC;AACV,QAAQ;AACR,MAAM;;AAEN,MAAM,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;AAC5C,MAAM,IAAI,CAAC,GAAG,EAAE;AAChB,QAAQ,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;AAC5B,UAAU,MAAM,EAAE,UAAU;AAC5B,UAAU,GAAG,EAAE,OAAO;AACtB,UAAU,MAAM,EAAE;AAClB,SAAS,CAAC;AACV,QAAQ;AACR,MAAM;;AAEN,MAAM,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ;AACnC,MAAM,MAAM,YAAY,GAAG,QAAQ,EAAE,EAAE,EAAE,OAAO,GAAG,aAAa,CAAC;;AAEjE,MAAM,IAAI,CAAC,YAAY,EAAE;AACzB,QAAQ,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;AAC5B,UAAU,MAAM,EAAE,UAAU;AAC5B,UAAU,MAAM,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,iBAAiB,EAAE,OAAO,CAAC;AACxE,SAAS,CAAC;AACV,QAAQ;AACR,MAAM;;AAEN,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;AACxB,QAAQ,MAAM,EAAE,UAAU;AAC1B,QAAQ,GAAG,EAAE,OAAO;AACpB,QAAQ,SAAS,EAAE,aAAa;AAChC,QAAQ,IAAI,EAAE;AACd,OAAO,CAAC;AACR,IAAI;;AAEJ,IAAI,OAAO,MAAM;AACjB,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,EAAE,EAAE;AAC5B,IAAI,MAAM,QAAQ,GAAG;AACrB,MAAM,IAAI,EAAE,IAAI;AAChB,MAAM,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,UAAU;AACvC,MAAM,EAAE,EAAE;AACV,QAAQ,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;AACrC,QAAQ,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;AACrC,QAAQ,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;AACnC,QAAQ,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI;AAC3C;AACA,KAAK;;AAEL,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AACnC,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,OAAO,EAAE;AACtB,IAAI,IAAI,OAAO,EAAE;AACjB,MAAM,IAAI,KAAK;AACf,MAAM,IAAI;AACV,QAAQ,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC;AACnC,MAAM,CAAC,CAAC,OAAO,GAAG,EAAE;AACpB,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,yCAAyC,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC3F,QAAQ;AACR,MAAM;AACN,MAAM,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;AACtC,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAC7B,UAAU,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;AAChC,UAAU,MAAM,CAAC,KAAK,CAAC,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC,CAAC;AACpE,QAAQ;AACR,MAAM;AACN,IAAI,CAAC,MAAM;AACX,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AACxB,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,kDAAkD,CAAC,CAAC;AACxE,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO;AACX,MAAM,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AAC7B,MAAM,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;AAChC,MAAM,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AAC7C,KAAK;AACL,EAAE;AACF;;AC7hBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,MAAM,OAAO,CAAC;AACrB,EAAE,WAAW,CAAC,UAAU,GAAG,GAAG,EAAE;AAChC;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;AACrD,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC;AACnC,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;AAC5C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;;AAEnB;AACA,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE;;AAEnB;AACA,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE;;AAE9B;AACA,IAAI,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,EAAE;;AAErC;AACA,IAAI,IAAI,CAAC,OAAO,GAAG;AACnB,MAAM,KAAK,EAAE,CAAC;AACd,MAAM,MAAM,EAAE,CAAC;AACf,MAAM,aAAa,EAAE;AACrB,KAAK;;AAEL;AACA,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE;AAC9C,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE;AAChE,IAAI;;AAEJ;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,IAAI,EAAE;AACZ,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;;AAExB,IAAI,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,KAAK;;AAEhC;AACA;AACA,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAChC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,SAAS;;AAEzD,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC;AAC5D,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE;AACnB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;;AAEzB;AACA;AACA,IAAI,IAAI,IAAI,EAAE;AACd,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAClC,MAAM,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;AAC5B,QAAQ,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;AACpC,UAAU,MAAM,IAAI,KAAK,CAAC,CAAC,+BAA+B,EAAE,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;AACnF,QAAQ;AACR,MAAM;AACN,IAAI;;AAEJ;AACA;AACA;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM;AAChC,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;AACjC,IAAI,MAAM,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC,IAAI;;AAEtC;AACA,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AACpC,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI;AACrB,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK;AACvB,IAAI,KAAK,CAAC,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;;AAEvC;AACA,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC;;AAEjC;AACA,IAAI,cAAc,CAAC,MAAM;AACzB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;AAC9B,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC;AACtC,IAAI,CAAC,CAAC;;AAEN,IAAI,OAAO,QAAQ;AACnB,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE;AACxB;AACA,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC/B;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAC/C,QAAQ,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC;AACrD,MAAM;AACN,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;;AAEtD;AACA,MAAM,OAAO,MAAM;AACnB,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC;AAC5D,QAAQ,IAAI,SAAS,EAAE;AACvB,UAAU,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;AACpC,UAAU,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE;AACpC,YAAY,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC;AACjD,UAAU;AACV,QAAQ;AACR,MAAM,CAAC;AACP,IAAI,CAAC,MAAM;AACX;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACxC,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC;AAC9C,MAAM;AACN,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;;AAE/C;AACA,MAAM,OAAO,MAAM;AACnB,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;AACrD,QAAQ,IAAI,SAAS,EAAE;AACvB,UAAU,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;AACpC,UAAU,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE;AACpC,YAAY,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;AAC1C,UAAU;AACV,QAAQ;AACR,MAAM,CAAC;AACP,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,KAAK,CAAC,OAAO,EAAE;AACjB,IAAI,MAAM,SAAS,GAAG,EAAE;;AAExB,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACzD,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC3C,IAAI;;AAEJ,IAAI,OAAO,SAAS;AACpB,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,UAAU,GAAG;AACf;AACA;AACA;AACA;AACA,IAAI,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;AAClE,IAAI,OAAO;AACX,MAAM,GAAG,IAAI,CAAC,OAAO;AACrB,MAAM,iBAAiB,EAAE,WAAW;AACpC,MAAM,cAAc,EAAE,IAAI,CAAC,MAAM;AACjC,MAAM,UAAU,EAAE,IAAI,CAAC,UAAU;AACjC,MAAM,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC;AACjE,KAAK;AACL,EAAE;;AAEF;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,UAAU,CAAC,GAAG,EAAE;AACzB,IAAI,OAAO,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,aAAa,IAAI,GAAG,KAAK,WAAW;AAC9E,EAAE;;AAEF,EAAE,cAAc,CAAC,CAAC,EAAE;AACpB,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,EAAE;;AAEF,EAAE,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE;AAC3B,IAAI,IAAI,CAAC,IAAI,EAAE;AACf,MAAM,IAAI,CAAC,KAAK,GAAG,KAAK;AACxB,MAAM;AACN,IAAI;;AAEJ,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAChC;AACA;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;;AAEzC,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE;;AAE3B;AACA;AACA,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK;AAC3B,IAAI,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AAC5B,MAAM;AACN,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;AAC1D,QAAQ,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ;AACvC,QAAQ,MAAM,CAAC,GAAG,CAAC,KAAK;AACxB,QAAQ;AACR,QAAQ,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE;AACxB,MAAM;AACN,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC;AAC1B,IAAI;;AAEJ,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK;AACxB,EAAE;;AAEF,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE;AACtB,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;;AAEhC;AACA,IAAI,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACnD,IAAI,IAAI,cAAc,EAAE;AACxB,MAAM,cAAc,CAAC,OAAO,CAAC,QAAQ,IAAI;AACzC,QAAQ,IAAI;AACZ,UAAU,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;AAC/B,QAAQ,CAAC,CAAC,OAAO,KAAK,EAAE;AACxB,UAAU,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC;AAC3D,QAAQ;AACR,MAAM,CAAC,CAAC;AACR,IAAI;;AAEJ;AACA,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AACjC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC/C,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACpD,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;AAC5D,MAAM,IAAI,eAAe,EAAE;AAC3B,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;AAChD,QAAQ,eAAe,CAAC,OAAO,CAAC,QAAQ,IAAI;AAC5C,UAAU,IAAI;AACd,YAAY,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC;AAC7C,UAAU,CAAC,CAAC,OAAO,KAAK,EAAE;AAC1B,YAAY,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC;AACpE,UAAU;AACV,QAAQ,CAAC,CAAC;AACV,MAAM;AACN,IAAI;AACJ,EAAE;;AAEF,EAAE,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE;AAC9B;AACA,IAAI,KAAK,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAC9D,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;AAC9C,QAAQ,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAI;AACtC,UAAU,IAAI;AACd,YAAY,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACrC,UAAU,CAAC,CAAC,OAAO,KAAK,EAAE;AAC1B,YAAY,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC;AACrE,UAAU;AACV,QAAQ,CAAC,CAAC;AACV,MAAM;AACN,IAAI;AACJ,EAAE;;AAEF,EAAE,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE;AAChC;AACA;AACA;AACA;;AAEA,IAAI,IAAI,OAAO,KAAK,GAAG,EAAE,OAAO,IAAI;;AAEpC,IAAI,MAAM,YAAY,GAAG;AACzB,OAAO,KAAK,CAAC,GAAG;AAChB,OAAO,GAAG,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,GAAG,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC;AACvF,OAAO,IAAI,CAAC,KAAK,CAAC;;AAElB,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;AACjD,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3B,EAAE;;AAEF;AACA;AACA;AACA,EAAE,KAAK,GAAG;AACV,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE;AACnB,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AAC1B,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AACjC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;;AAEnB;AACA,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE;AAC9C,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI;AAChC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI;AACjC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC;AAClC,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,KAAK,GAAG,EAAE,EAAE;AAC9B,IAAI,MAAM,MAAM,GAAG,EAAE;AACrB,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;;AAElD,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;AACvE,MAAM,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI;AACjC,MAAM,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AACtC,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE;AACtB,QAAQ,MAAM,CAAC,IAAI,CAAC;AACpB,UAAU,IAAI,EAAE,KAAK,CAAC,IAAI;AAC1B,UAAU,KAAK,EAAE,KAAK,CAAC,KAAK;AAC5B,UAAU,SAAS,EAAE,KAAK,CAAC;AAC3B,SAAS,CAAC;AACV,MAAM;AACN,IAAI;;AAEJ,IAAI,OAAO,MAAM,CAAC,OAAO,EAAE;AAC3B,EAAE;AACF;;AAEA;AACK,MAAC,KAAK,GAAG,IAAI,OAAO;;AC1VzB;AACA;AACA;AACA;AACA;AACA;;;AAIO,MAAM,KAAK,CAAC;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;AAChC,IAAI,IAAI,CAAC,IAAI,GAAG;AAChB,IAAI,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC;AACtB,IAAI,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;AAC5B,IAAI,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI;AACzC,IAAI,IAAI,CAAC,GAAG,GAAG;AACf,IAAI,IAAI,CAAC,QAAQ,GAAG;AACpB,IAAI,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,QAAQ,KAAK,MAAK;;AAE9C;AACA,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE;AACxB,MAAM,IAAI,CAAC,YAAY;AACvB,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,YAAY,GAAG;AACjB,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACvC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AACnC,QAAQ,IAAI,EAAE,IAAI,CAAC,IAAI;AACvB,QAAQ,GAAG,EAAE,IAAI,CAAC,GAAG;AACrB,QAAQ,SAAS,EAAE,IAAI,CAAC,SAAS;AACjC,QAAQ,MAAM,EAAE;AAChB,OAAO;AACP,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACnE,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,KAAK,CAAC,SAAS,EAAE;AACzB,IAAI,MAAM,eAAe,GAAG,SAAS,IAAI,IAAI,CAAC;;AAE9C,IAAI,IAAI,CAAC,eAAe,EAAE;AAC1B,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,iCAAiC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACrE,IAAI;;AAEJ;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACjC,MAAM,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,QAAQ,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;AACjD,OAAO;AACP,IAAI;;AAEJ;AACA,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe;AACnD,IAAI,IAAI,CAAC,QAAQ,GAAG;;AAEpB,IAAI,OAAO;AACX,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,CAAC,OAAO,GAAG,EAAE,EAAE;AAC9B,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACzD,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;AACtD,MAAM,OAAO;AACb,IAAI;;AAEJ,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO;AAC7C,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI;;AAEhD,IAAI,OAAO;AACX,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,MAAM,IAAI,GAAG;AACf,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACxB,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;AACtD,MAAM,OAAO;AACb,IAAI;;AAEJ,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AACjC,IAAI,IAAI,CAAC,QAAQ,GAAG;AACpB,IAAI,OAAO;AACX,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,MAAM,IAAI,GAAG;AACf,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACvC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC;AAClE,MAAM,OAAO;AACb,IAAI;;AAEJ,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AACjC,IAAI,IAAI,CAAC,QAAQ,GAAG;AACpB,IAAI,OAAO;AACX,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,CAAC,SAAS,EAAE;AAC3B,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AACtC,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS;AAC9B,IAAI,OAAO;AACX,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,IAAI,SAAS,GAAG;AAClB,IAAI,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI;AAC3D,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,IAAI,QAAQ,GAAG;AACjB,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI;AACtC,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,IAAI,IAAI,GAAG;AACb,IAAI,OAAO;AACX,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI;AACrB,MAAM,GAAG,EAAE,IAAI,CAAC,GAAG;AACnB,MAAM,SAAS,EAAE,IAAI,CAAC,SAAS;AAC/B,MAAM,OAAO,EAAE,IAAI,CAAC,SAAS;AAC7B,MAAM,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI;AACtD;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,MAAM,MAAM,GAAG;AACjB,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;;AAEjD,IAAI,MAAM,IAAI,CAAC,OAAO;;AAEtB;AACA,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE;AACrC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI;AAC1C,IAAI;AACJ,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE;AACvC,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI;AAC5C,IAAI;;AAEJ,IAAI,MAAM,IAAI,CAAC,KAAK;AACpB,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;;AAE/C,IAAI,OAAO;AACX,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,MAAM,MAAM,GAAG;AACjB,IAAI,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS;AAC3D,IAAI,MAAM,YAAY,GAAG,SAAS,EAAE,UAAU,KAAK;AACnD,IAAI,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC,IAAI;;AAExE,IAAI,OAAO;AACX,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI;AACrB,MAAM,OAAO,EAAE,IAAI,CAAC,SAAS;AAC7B,MAAM,SAAS,EAAE;AACjB,QAAQ,KAAK,EAAE,CAAC,CAAC,SAAS;AAC1B,QAAQ,QAAQ,EAAE,IAAI,CAAC,SAAS;AAChC,QAAQ,YAAY;AACpB,QAAQ;AACR,OAAO;AACP,MAAM,EAAE,EAAE;AACV,QAAQ,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AAChD,QAAQ,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI;AACpD;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA,EAAE,MAAM,KAAK,CAAC,SAAS,EAAE;AACzB,IAAI,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS;AACrC,EAAE;;AAEF;AACA;AACA;AACA,EAAE,MAAM,IAAI,GAAG;AACf,IAAI,OAAO,MAAM,IAAI,CAAC,OAAO;AAC7B,EAAE;;AAEF;AACA;AACA;AACA,EAAE,MAAM,OAAO,GAAG;AAClB,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AACtC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI;AAClC,IAAI,IAAI,CAAC,QAAQ,GAAG;AACpB,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAClD,EAAE;AACF;;AC3OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAIA;AACA;AACA;AACA,MAAM,0BAA0B,GAAG,CAAC;;AAE7B,MAAM,OAAO,CAAC;AACrB,EAAE,WAAW,CAAC,OAAO,GAAG,EAAE,EAAE;AAC5B,IAAI,IAAI,CAAC,MAAM,GAAG;AAClB,MAAM,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;AACpC,MAAM,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,GAAG;AACvC,MAAM,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,OAAO;AAC/C,MAAM,UAAU,EAAE,OAAO,CAAC,UAAU,KAAK,KAAK;AAC9C,MAAM,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI;AAClC,KAAK;;AAEL;AACA;AACA,IAAI,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,gBAAgB;AAChH,IAAI,IAAI,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,0BAA0B,EAAE;AACzG,MAAM,MAAM,CAAC,MAAM;AACnB,QAAQ,CAAC,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;AAC7F,QAAQ,CAAC,4CAA4C,EAAE,0BAA0B,CAAC,eAAe,CAAC;AAClG,QAAQ,CAAC,kEAAkE,EAAE,0BAA0B,CAAC,CAAC,CAAC;AAC1G,QAAQ,CAAC,iDAAiD;AAC1D,OAAO;AACP,IAAI;;AAEJ;AACA,IAAI,IAAI,CAAC,YAAY,GAAG;AACxB,MAAM,OAAO,EAAE,OAAO,CAAC,YAAY,KAAK,KAAK;AAC7C,MAAM,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,GAAG;AACrD,MAAM,QAAQ,EAAE,IAAI;AACpB,MAAM,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;AAC5C,MAAM,UAAU,EAAE,EAAE;AACpB,MAAM,UAAU,EAAE,KAAK;AACvB,MAAM,aAAa,EAAE;AACrB,KAAK;;AAEL;AACA,IAAI,IAAI,CAAC,kBAAkB,GAAG,KAAK;;AAEnC;AACA,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE;;AAEhC;AACA,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE;;AAEhC;AACA,IAAI,IAAI,CAAC,KAAK,GAAG;AACjB,MAAM,IAAI,EAAE,CAAC;AACb,MAAM,MAAM,EAAE,CAAC;AACf,MAAM,IAAI,EAAE,CAAC;AACb,MAAM,SAAS,EAAE,CAAC;AAClB,MAAM,IAAI,EAAE,CAAC;AACb,MAAM,WAAW,EAAE,CAAC;AACpB,KAAK;AACL,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,eAAe,GAAG;AACpB,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,IAAI;;AAE/C,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;;AAE1B;AACA,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AACtC,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;AACjD,QAAQ,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;AAChC,QAAQ,OAAO,KAAK;AACpB,MAAM;AACN;AACA,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,KAAK;AAC1C,MAAM,IAAI,CAAC,kBAAkB,GAAG,KAAK;AACrC,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,EAAE;AACvC,IAAI;;AAEJ;AACA,IAAI,MAAM,WAAW,GAAG,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ;AACxD,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM;AACtE,MAAM,EAAE,IAAI,EAAE,GAAG;AACjB,KAAK;;AAEL;AACA,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE;AAClF;AACA,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,IAAI;AACzC,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,GAAG,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU;AAC1E,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;AAC9B,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,+CAA+C,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AACrG,MAAM,OAAO,KAAK;AAClB,IAAI;;AAEJ;AACA,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1C,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,SAAS,EAAE,GAAG,EAAE;AACjC,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AAClC,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACzF,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,wBAAwB,EAAE,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,YAAY,EAAE,iBAAiB,CAAC,yBAAyB,CAAC,CAAC;AAClI,MAAM,IAAI,CAAC,kBAAkB,GAAG,IAAI;AACpC,IAAI;AACJ,IAAI,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE;AAChD,EAAE;;AAEF;AACA;AACA;AACA,EAAE,kBAAkB,GAAG;AACvB,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AAC1B,IAAI,OAAO;AACX,MAAM,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO;AACxC,MAAM,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU;AAC9C,MAAM,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC;AAC3C,UAAU,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,aAAa,GAAG,GAAG;AAC3D,UAAU,CAAC;AACX,MAAM,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM;AACrD,MAAM,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,eAAe;AAC/C,MAAM,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC;AAC9B,KAAK;AACL,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,GAAG,EAAE;AACX;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE;AACjC,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC;AACrC,MAAM,OAAO,IAAI;AACjB,IAAI;;AAEJ;AACA,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACnC,MAAM,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;;AAE7C;AACA,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;AACjC,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AACxB,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AAC3B,QAAQ,OAAO,IAAI;AACnB,MAAM;;AAEN;AACA,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3C,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;;AAEvB,MAAM,OAAO,KAAK,CAAC,KAAK;AACxB,IAAI;;AAEJ;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAChC,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AAC7C,MAAM,IAAI,MAAM,EAAE;AAClB;AACA,QAAQ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;AACzC,QAAQ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AAC7C,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AACzB,QAAQ,OAAO,MAAM,CAAC,KAAK;AAC3B,MAAM;AACN,IAAI;;AAEJ,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACvB,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;AACvB;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE;AACjC,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC;AACrC,MAAM,OAAO,KAAK;AAClB,IAAI;;AAEJ,IAAI,IAAI;AACR,MAAM,MAAM,KAAK,GAAG;AACpB,QAAQ,GAAG;AACX,QAAQ,KAAK;AACb,QAAQ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AAC7B,QAAQ,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU;AAC1C,QAAQ,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK;AACrC,OAAO;;AAEP;AACA,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;AACnD,MAAM,IAAI,QAAQ,KAAK,KAAK,EAAE;AAC9B,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,gCAAgC,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;AACzE,QAAQ,OAAO,KAAK;AACpB,MAAM;;AAEN;AACA,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;AACtC,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;;AAE3C;AACA,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAClC,QAAQ,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC;AACtC,MAAM;;AAEN,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AACvB,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI;;AAEnC,MAAM,OAAO,IAAI;AACjB,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,IAAI,CAAC,mCAAmC,EAAE,KAAK,CAAC;AAC7D,MAAM,OAAO,KAAK;AAClB,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,MAAM,CAAC,GAAG,EAAE;AACd,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;AAC3C,IAAI,IAAI,KAAK,EAAE;AACf,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI;AACnC,IAAI;;AAEJ,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC;AAChC,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC;;AAEhC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAChC,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;AACjC,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA,EAAE,KAAK,GAAG;AACV,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AAC5B,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AAC5B,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;;AAEvB,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAChC,MAAM,IAAI,CAAC,YAAY,EAAE;AACzB,IAAI;;AAEJ,IAAI,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC;AAC9C,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,KAAK,EAAE;AACnB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,KAAK;AAChC,IAAI,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG;AACnD,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,CAAC,KAAK,EAAE;AACtB,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACnC,MAAM,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9B,IAAI;;AAEJ,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACnC,MAAM,IAAI;AACV,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;AAC/C,MAAM,CAAC,CAAC,MAAM;AACd,QAAQ,OAAO,IAAI,CAAC;AACpB,MAAM;AACN,IAAI;;AAEJ,IAAI,OAAO,GAAG,CAAC;AACf,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,UAAU,EAAE;AAC1B,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,GAAG,IAAI;;AAE1D;AACA,IAAI,IAAI,UAAU,GAAG,YAAY,EAAE;AACnC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,wBAAwB,EAAE,UAAU,CAAC,0BAA0B,EAAE,YAAY,CAAC,YAAY,CAAC,CAAC;AAC/G,MAAM,OAAO,KAAK;AAClB,IAAI;;AAEJ;AACA,IAAI,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,EAAE;AACnD,IAAI,IAAI,UAAU,GAAG,CAAC;;AAEtB;AACA,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,GAAG,YAAY;AACvD,WAAW,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ;AACxD,WAAW,UAAU,GAAG,aAAa,EAAE;;AAEvC,MAAM,UAAU,EAAE;;AAElB;AACA,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,EAAE;AACvC,QAAQ,MAAM,CAAC,IAAI,CAAC,6DAA6D,CAAC;AAClF,QAAQ;AACR,MAAM;;AAEN;AACA,MAAM,IAAI,SAAS,GAAG,IAAI;AAC1B,MAAM,IAAI,UAAU,GAAG,QAAQ;;AAE/B,MAAM,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE;AAClD,QAAQ,IAAI,IAAI,GAAG,UAAU,EAAE;AAC/B,UAAU,UAAU,GAAG,IAAI;AAC3B,UAAU,SAAS,GAAG,GAAG;AACzB,QAAQ;AACR,MAAM;;AAEN,MAAM,IAAI,SAAS,EAAE;AACrB,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,kCAAkC,EAAE,SAAS,CAAC,CAAC,CAAC;AACtE,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;AAC9B,QAAQ,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;AAC9B,MAAM,CAAC,MAAM;AACb,QAAQ;AACR,MAAM;AACN,IAAI;;AAEJ;AACA,IAAI,IAAI,UAAU,IAAI,aAAa,EAAE;AACrC,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,8CAA8C,EAAE,aAAa,CAAC,oCAAoC,CAAC,CAAC;AACzH,IAAI;;AAEJ,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,GAAG,EAAE;AACtB,IAAI,IAAI;AACR,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;AACvC,MAAM,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;;AAEvD,MAAM,IAAI,MAAM,EAAE;AAClB,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACjC,MAAM;AACN,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,IAAI,CAAC,0CAA0C,EAAE,KAAK,CAAC;AACpE,IAAI;AACJ,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE;AAC5B,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;AACrC,IAAI,IAAI;AACR,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/D,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB;AACA,MAAM,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC;AACpE,MAAM,IAAI,CAAC,sBAAsB,EAAE;;AAEnC,MAAM,IAAI;AACV,QAAQ,OAAO,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACjE,MAAM,CAAC,CAAC,MAAM;AACd,QAAQ,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC;AAC3E,MAAM;AACN,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,GAAG,EAAE;AACzB,IAAI,IAAI;AACR,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;AACvC,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;AAC3C,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,IAAI,CAAC,6CAA6C,EAAE,KAAK,CAAC;AACvE,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA,EAAE,YAAY,GAAG;AACjB,IAAI,IAAI;AACR,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;AACvC,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;;AAEvC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI;AAC1B,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;AACzC,UAAU,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;AACjC,QAAQ;AACR,MAAM,CAAC,CAAC;AACR,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,IAAI,CAAC,uCAAuC,EAAE,KAAK,CAAC;AACjE,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA,EAAE,sBAAsB,GAAG;AAC3B,IAAI,IAAI;AACR,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;AACvC,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AACvC,MAAM,MAAM,OAAO,GAAG,EAAE;;AAExB;AACA,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI;AAC1B,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;AACzC,UAAU,IAAI;AACd,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC1D,YAAY,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;AAC7D,UAAU,CAAC,CAAC,MAAM,CAAC;AACnB,QAAQ;AACR,MAAM,CAAC,CAAC;;AAER;AACA,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;;AAEvD;AACA,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;AACvD,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;AACzC,QAAQ,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC1C,MAAM;;AAEN,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,qBAAqB,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAC;AAC1E,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,IAAI,CAAC,mDAAmD,EAAE,KAAK,CAAC;AAC7E,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,UAAU,GAAG;AACf,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,cAAc,EAAE;AAChD,MAAM,OAAO,MAAM,CAAC,YAAY;AAChC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,gBAAgB,EAAE;AACzD,MAAM,OAAO,MAAM,CAAC,cAAc;AAClC,IAAI;AACJ;AACA,IAAI,OAAO;AACX,MAAM,OAAO,EAAE,MAAM,IAAI;AACzB,MAAM,OAAO,EAAE,MAAM,CAAC,CAAC;AACvB,MAAM,UAAU,EAAE,MAAM,CAAC,CAAC;AAC1B,MAAM,KAAK,EAAE,MAAM,CAAC;AACpB,KAAK;AACL,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG;AAC1D,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC;AACjF,QAAQ,CAAC;;AAET,IAAI,OAAO;AACX,MAAM,GAAG,IAAI,CAAC,KAAK;AACnB,MAAM,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5B,MAAM,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;AAClC,MAAM,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AACvD,KAAK;AACL,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,MAAM,EAAE;AACpB,IAAI,IAAI,CAAC,MAAM,GAAG;AAClB,MAAM,GAAG,IAAI,CAAC,MAAM;AACpB,MAAM,GAAG;AACT,KAAK;AACL,EAAE;AACF;;AC7gBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,MAAM,UAAU,CAAC;AACxB,EAAE,WAAW,GAAG;AAChB,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE;AAC9B,IAAI,IAAI,CAAC,OAAO,GAAG,EAAE;;AAErB;AACA,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE;;AAEnC;AACA,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;AACpC,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AACvD;AACA;AACA,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC/E;AACA;AACA;AACA,IAAI,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE;AACpC,IAAI,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE;AACxC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC9D,IAAI;;AAEJ;AACA,IAAI,MAAM,YAAY,GAAG,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,QAAQ,KAAK,YAAY;;AAEjG,IAAI,IAAI,CAAC,MAAM,GAAG;AAClB,MAAM,UAAU,EAAE,GAAG;AACrB,MAAM,YAAY,EAAE,IAAI;AACxB,MAAM,eAAe,EAAE,IAAI;AAC3B,MAAM,SAAS,EAAE,KAAK;AACtB;AACA,MAAM,UAAU,EAAE,YAAY;AAC9B,MAAM,cAAc,EAAE,IAAI;AAC1B,KAAK;;AAEL,IAAI,IAAI,CAAC,iBAAiB,GAAG,KAAK;;AAElC,IAAI,IAAI,CAAC,KAAK,GAAG;AACjB,MAAM,OAAO,EAAE,CAAC;AAChB,MAAM,aAAa,EAAE,CAAC;AACtB,MAAM,QAAQ,EAAE,CAAC;AACjB,KAAK;AACL,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,EAAE,EAAE;AACrC,IAAI,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE;;AAExD,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE;AACrC,MAAM,KAAK;AACX,MAAM,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,CAAC,GAAG,CAAC;AAC/C,MAAM,YAAY,EAAE,IAAI,CAAC,GAAG;AAC5B,KAAK,CAAC;;AAEN,IAAI,OAAO,KAAK;AAChB,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,OAAO,EAAE;AACzB,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC;AACvC,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;AAC7C;AACA,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;AACxC,MAAM,OAAO,IAAI;AACjB,IAAI;;AAEJ;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AACjC,MAAM,OAAO,IAAI;AACjB,IAAI;;AAEJ;AACA;AACA;AACA;AACA,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACvC,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;AACxD,MAAM,OAAO,KAAK,KAAK,QAAQ;AAC/B,IAAI;;AAEJ;AACA,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;AACpD,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB,MAAM,OAAO,KAAK;AAClB,IAAI;;AAEJ;AACA,IAAI,IAAI,KAAK,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE;AAC1C,MAAM,OAAO,KAAK;AAClB,IAAI;;AAEJ;AACA,IAAI,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC;AAC9D,EAAE;;AAEF;AACA;AACA;AACA,EAAE,cAAc,CAAC,WAAW,EAAE,SAAS,EAAE;AACzC,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,IAAI;;AAE9C,IAAI,OAAO,WAAW,CAAC,IAAI,CAAC,OAAO,IAAI;AACvC,MAAM,IAAI,OAAO,KAAK,SAAS,EAAE,OAAO,IAAI;AAC5C,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACjC,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC;AACvD,MAAM;AACN,MAAM,OAAO,KAAK;AAClB,IAAI,CAAC,CAAC;AACN,EAAE;;AAEF;AACA;AACA;AACA,EAAE,cAAc,CAAC,SAAS,EAAE;AAC5B,IAAI,OAAO,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC;AACtC,WAAW,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC;AAC1C,WAAW,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC;AACvC,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,gBAAgB,CAAC,OAAO,EAAE;AAC5B,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,IAAI;AACnD,IAAI,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI;AACpD,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,GAAG;AACvB,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE;AAClF,MAAM,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;AAC5C,IAAI;AACJ,IAAI,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AAC7D,IAAI,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;AAC/D,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,GAAG;AACnB,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE;AAClF,MAAM,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;AACxC,IAAI;AACJ;AACA,IAAI,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AAC7D,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;AAC3D,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,mBAAmB,GAAG;AACxB,IAAI,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAChC,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI;AACjC,IAAI,MAAM,CAAC,IAAI;AACf,MAAM,wFAAwF;AAC9F,MAAM;AACN,KAAK;AACL,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE;AACtC,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,SAAS;;AAEhD;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AACjC,MAAM,IAAI,CAAC,mBAAmB,EAAE;AAChC,IAAI;;AAEJ;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAC9D,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;AACpE,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AAC7B,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,gCAAgC,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;AAClG,QAAQ,OAAO,KAAK;AACpB,MAAM;AACN,IAAI;;AAEJ,IAAI,MAAM,KAAK,GAAG;AAClB,MAAM,IAAI,EAAE,SAAS;AACrB,MAAM,IAAI;AACV,MAAM,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;AAChD,MAAM,OAAO;AACb,MAAM,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE;AAC9B;AACA,MAAM,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO;AAC/C,KAAK;;AAEL;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;AAClC,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAC9B,IAAI;;AAEJ;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AAC/B,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC;AACxD,IAAI;;AAEJ;AACA,IAAI,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;AACxD,IAAI,IAAI,cAAc,EAAE;AACxB,MAAM,cAAc,CAAC,OAAO,CAAC,QAAQ,IAAI;AACzC,QAAQ,IAAI;AACZ,UAAU,QAAQ,CAAC,KAAK,CAAC;AACzB,QAAQ,CAAC,CAAC,OAAO,KAAK,EAAE;AACxB,UAAU,OAAO,CAAC,KAAK,CAAC,CAAC,qCAAqC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AACpF,QAAQ;AACR,MAAM,CAAC,CAAC;AACR,IAAI;;AAEJ;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;AACrC,MAAM,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,KAAK,CAAC;AACpD,IAAI;;AAEJ,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AACxB,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF;AACA;AACA;AACA,EAAE,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE;AAC1B,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AACxC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,GAAG,EAAE,CAAC;AAC9C,IAAI;;AAEJ,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC/C,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;;AAE9B,IAAI,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC;AAC9C,EAAE;;AAEF;AACA;AACA;AACA,EAAE,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE;AAC3B,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;AACnD,IAAI,IAAI,SAAS,EAAE;AACnB,MAAM,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;AAChC,MAAM,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE;AAChC,QAAQ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;AACxC,MAAM;AACN,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;AAChC,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE;AAC5B,IAAI,MAAM,eAAe,GAAG,CAAC,KAAK,KAAK;AACvC,MAAM,QAAQ,CAAC,KAAK,CAAC;AACrB,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC;AAC1C,IAAI,CAAC;AACL,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC;AAC9C,EAAE;;AAEF;AACA;AACA;AACA,EAAE,uBAAuB,CAAC,SAAS,EAAE,KAAK,EAAE;AAC5C,IAAI,KAAK,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;AACvD,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE;AACpD,QAAQ,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAI;AACtC,UAAU,IAAI;AACd,YAAY,QAAQ,CAAC,KAAK,CAAC;AAC3B,UAAU,CAAC,CAAC,OAAO,KAAK,EAAE;AAC1B,YAAY,OAAO,CAAC,KAAK,CAAC,CAAC,8CAA8C,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AAC7F,UAAU;AACV,QAAQ,CAAC,CAAC;AACV,MAAM;AACN,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,SAAS,EAAE,OAAO,EAAE;AACtC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK;AAC5C,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;AAChD,IAAI,IAAI,CAAC,KAAK,EAAE;AAChB,MAAM,MAAM,YAAY,GAAG;AAC3B,SAAS,OAAO,CAAC,oBAAoB,EAAE,MAAM;AAC7C,SAAS,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;AAC7B,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;AAC7C,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;AAC7C,IAAI;AACJ,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;AAChC,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,CAAC,KAAK,EAAE;AACtB,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AACtD,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AAC1B,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA,EAAE,MAAM,CAAC,kBAAkB,EAAE,QAAQ,EAAE;AACvC,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI;AAChD,MAAM,IAAI,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC5C,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,kBAAkB,CAAC;AACnE,MAAM;AACN,MAAM,OAAO,KAAK,CAAC,IAAI,KAAK,kBAAkB;AAC9C,IAAI,CAAC,CAAC;;AAEN,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI;AAC5B,MAAM,IAAI;AACV,QAAQ,QAAQ,CAAC,KAAK,CAAC;AACvB,MAAM,CAAC,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,qCAAqC,CAAC,EAAE,KAAK,CAAC;AACrE,MAAM;AACN,IAAI,CAAC,CAAC;AACN,EAAE;;AAEF;AACA;AACA;AACA,EAAE,YAAY,CAAC,kBAAkB,EAAE;AACnC,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC7B,MAAM,IAAI,CAAC,OAAO,GAAG,EAAE;AACvB,MAAM;AACN,IAAI;;AAEJ,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI;AAChD,MAAM,IAAI,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC5C,QAAQ,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,kBAAkB,CAAC;AACpE,MAAM;AACN,MAAM,OAAO,KAAK,CAAC,IAAI,KAAK,kBAAkB;AAC9C,IAAI,CAAC,CAAC;AACN,EAAE;;AAEF;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO;AACX,MAAM,GAAG,IAAI,CAAC,KAAK;AACnB,MAAM,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;AAC1C,MAAM,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;AACtC,MAAM,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI;AAC9C,MAAM,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM;AAC1F,QAAQ,KAAK;AACb,QAAQ,SAAS,EAAE,SAAS,CAAC;AAC7B,OAAO,CAAC;AACR,KAAK;AACL,EAAE;;AAEF;AACA;AACA;AACA,EAAE,SAAS,CAAC,MAAM,EAAE;AACpB,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE;AAC/C,EAAE;;AAEF;AACA;AACA;AACA,EAAE,gBAAgB,GAAG;AACrB,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI;AACjC,EAAE;;AAEF;AACA;AACA;AACA,EAAE,iBAAiB,GAAG;AACtB,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,KAAK;AAClC,EAAE;;AAEF;AACA;AACA;AACA,EAAE,SAAS,GAAG;AACd,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AAC1B,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC;AAChC,EAAE;AACF;;AC7cA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAIA;AACA;AACA,MAAM,WAAW,GAAG,KAAK;;AAEzB;AACA,MAAM,eAAe;AACrB,EAAE,OAAO,WAAW,KAAK,WAAW;AACpC,EAAE,OAAO,WAAW,CAAC,IAAI,KAAK,UAAU;AACxC,EAAE,OAAO,WAAW,CAAC,OAAO,KAAK;AACjC,CAAC;;AAEM,MAAM,aAAa,CAAC;AAC3B,EAAE,WAAW,GAAG;AAChB,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;AAC7B,IAAI,IAAI,CAAC,YAAY,GAAG,EAAE;AAC1B,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE;;AAE1B,IAAI,IAAI,CAAC,MAAM,GAAG;AAClB,MAAM,OAAO,EAAE,IAAI;AACnB,MAAM,eAAe,EAAE,IAAI;AAC3B;AACA;AACA;AACA,MAAM,gBAAgB,EAAE;AACxB,KAAK;;AAEL,IAAI,IAAI,CAAC,UAAU,GAAG;AACtB,MAAM,KAAK,EAAE,IAAI;AACjB,MAAM,OAAO,EAAE,IAAI;AACnB,MAAM,IAAI,EAAE,IAAI;AAChB,KAAK;;AAEL,IAAI,MAAM,CAAC,KAAK,CAAC,gEAAgE,CAAC;AAClF,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,EAAE;AACzC,IAAI,OAAO,CAAC,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;AACtD,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,EAAE;AACzC,IAAI,MAAM,QAAQ,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;AAC/C,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,EAAE,CAAC;;AAE/C;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;AACtC,MAAM,IAAI;AACV,QAAQ,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE;AACnE,UAAU,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO;AACzE,SAAS,CAAC;AACV,MAAM,CAAC,CAAC,MAAM;AACd;AACA,QAAQ,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACnF,MAAM;AACN,IAAI;;AAEJ,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,oCAAoC,EAAE,QAAQ,CAAC,CAAC,CAAC;AACnE,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,EAAE;AACvC,IAAI,MAAM,QAAQ,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;AAC/C,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;;AAE9C,IAAI,IAAI,CAAC,SAAS,EAAE;AACpB;AACA,MAAM,OAAO,CAAC;AACd,IAAI;;AAEJ,IAAI,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;AACrC,IAAI,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS;AACxC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;;AAE/B;AACA;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;AACtC,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC;AACxD,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC;AAChE,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC;AAC5D,MAAM,IAAI;AACV,QAAQ,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE;AAClC,UAAU,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ;AACjF,SAAS,CAAC;AACV,QAAQ,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE;AACzC,UAAU,KAAK,EAAE,SAAS;AAC1B,UAAU,GAAG,EAAE,OAAO;AACtB,UAAU,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ;AACnE,SAAS,CAAC;AACV,MAAM,CAAC,CAAC,MAAM;AACd;AACA,QAAQ,IAAI;AACZ,UAAU,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;AACnC,UAAU,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC;AAC9D,QAAQ,CAAC,CAAC,MAAM,CAAC;AACjB,MAAM;AACN,IAAI;;AAEJ;AACA,IAAI,IAAI,CAAC,iBAAiB,CAAC;AAC3B,MAAM,IAAI;AACV,MAAM,OAAO;AACb,MAAM,QAAQ;AACd,MAAM,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AAC3B,MAAM,IAAI,EAAE;AACZ,KAAK,CAAC;;AAEN;AACA,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE;AAC7C,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,0CAA0C,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAChG,IAAI;;AAEJ,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,kCAAkC,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5F,IAAI,OAAO,QAAQ;AACnB,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,iBAAiB,CAAC,WAAW,EAAE;AACjC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;;AAEvC;AACA,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;AAChE,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAC/B,IAAI;;AAEJ;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE;AAChD,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE;AAC5C,QAAQ,OAAO,EAAE,WAAW,CAAC,OAAO;AACpC,QAAQ,YAAY,EAAE,EAAE;AACxB,QAAQ,KAAK,EAAE;AACf,OAAO,CAAC;AACR,IAAI;;AAEJ,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC;AAC5D,IAAI,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;;AAE7C;AACA,IAAI,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC;AAC5C,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,OAAO,EAAE;AAC1B,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AAChD,IAAI,IAAI,CAAC,UAAU,EAAE;;AAErB,IAAI,MAAM,YAAY,GAAG,UAAU,CAAC,YAAY;AAChD,IAAI,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;;AAEnC;AACA,IAAI,MAAM,MAAM,GAAG,EAAE;AACrB,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI;AAC9B,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;AAC9C,MAAM,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;AACrC,IAAI,CAAC,CAAC;;AAEN;AACA,IAAI,UAAU,CAAC,KAAK,GAAG,EAAE;AACzB,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK;AAC1D,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG;AAC/B,QAAQ,KAAK,EAAE,SAAS,CAAC,MAAM;AAC/B,QAAQ,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM;AACpE,QAAQ,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;AACnC,QAAQ,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;AACnC,QAAQ,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;AAC5C,OAAO;AACP,IAAI,CAAC,CAAC;AACN,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE;AAC9B,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AAC3C,IAAI,OAAO,SAAS,IAAI,KAAK,GAAG,SAAS;AACzC,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,cAAc,GAAG;AACnB,IAAI,MAAM,MAAM,GAAG;AACnB,MAAM,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AAC3B,MAAM,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM;AACjD,MAAM,IAAI,EAAE;AACZ,KAAK;;AAEL;AACA,IAAI,KAAK,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AACnD,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG;AAC7B,QAAQ,gBAAgB,EAAE,OAAO,CAAC,YAAY,CAAC,MAAM;AACrD,QAAQ,KAAK,EAAE,OAAO,CAAC;AACvB,OAAO;AACP,IAAI;;AAEJ,IAAI,OAAO,MAAM;AACjB,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,CAAC,IAAI,GAAG,EAAE,EAAE;AAChC,IAAI,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE;AACnC,IAAI,MAAM,EAAE,IAAI,GAAG,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI;AAC1C,IAAI,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW;;AAEtE,IAAI,MAAM,MAAM,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;AAC3D,IAAI,MAAM,OAAO,GAAG,EAAE;AACtB,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,MAAM,EAAE;AAC3C,MAAM,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC3F,IAAI;AACJ,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,SAAS,EAAE;AAC9C,MAAM,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC9F,IAAI;AACJ,IAAI,OAAO,OAAO;AAClB,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE;AAC/B,IAAI,IAAI,OAAO,mBAAmB,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;AACtF,MAAM,OAAO,MAAM,CAAC,CAAC;AACrB,IAAI;AACJ,IAAI,MAAM,EAAE,IAAI,GAAG,SAAS,EAAE,GAAG,IAAI;AACrC,IAAI,MAAM,UAAU,GAAG,IAAI,KAAK,KAAK,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;;AAEpE,IAAI,IAAI,QAAQ;AAChB,IAAI,IAAI;AACR,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CAAC,CAAC,IAAI,KAAK;AACnD,QAAQ,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AAC/C,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;AAClD,YAAY,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;AAC/C,cAAc,MAAM,CAAC,IAAI,CAAC,CAAC,wCAAwC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAClF,YAAY;AACZ,UAAU;AACV,QAAQ;AACR,MAAM,CAAC,CAAC;AACR,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;AACtC,IAAI,CAAC,CAAC,OAAO,GAAG,EAAE;AAClB,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,uCAAuC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;AAC3E,MAAM,OAAO,MAAM,CAAC,CAAC;AACrB,IAAI;AACJ,IAAI,OAAO,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC5D,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,OAAO,EAAE;AACtB,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI;AAC5C,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,aAAa,GAAG;AAClB,IAAI,MAAM,UAAU,GAAG,EAAE;;AAEzB,IAAI,KAAK,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AACnD,MAAM,UAAU,CAAC,OAAO,CAAC,GAAG,OAAO;AACnC,IAAI;;AAEJ,IAAI,OAAO,UAAU;AACrB,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,YAAY,CAAC,OAAO,EAAE;AACxB,IAAI,IAAI,OAAO,EAAE;AACjB,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;AAClC,MAAM,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC;AAC9E,IAAI,CAAC,MAAM;AACX,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AAC1B,MAAM,IAAI,CAAC,YAAY,GAAG,EAAE;AAC5B,IAAI;;AAEJ;AACA;AACA,IAAI,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;;AAEvC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,kCAAkC,EAAE,OAAO,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACzF,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,qBAAqB,CAAC,OAAO,EAAE;AACjC,IAAI,IAAI,CAAC,eAAe,EAAE;AAC1B,IAAI,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW;;AAEtE,IAAI,IAAI;AACR,MAAM,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE;AAChE,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AAC3C,UAAU,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;AAC5C,QAAQ;AACR,MAAM;AACN,MAAM,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE;AACnE,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AAC3C,UAAU,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;AAC/C,QAAQ;AACR,MAAM;AACN,IAAI,CAAC,CAAC,MAAM;AACZ;AACA,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,MAAM,EAAE;AACpB,IAAI,IAAI,CAAC,MAAM,GAAG;AAClB,MAAM,GAAG,IAAI,CAAC,MAAM;AACpB,MAAM,GAAG;AACT,KAAK;;AAEL,IAAI,IAAI,MAAM,CAAC,UAAU,EAAE;AAC3B,MAAM,IAAI,CAAC,UAAU,GAAG;AACxB,QAAQ,GAAG,IAAI,CAAC,UAAU;AAC1B,QAAQ,GAAG,MAAM,CAAC;AAClB,OAAO;AACP,IAAI;AACJ,EAAE;AACF;;ACpYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAIO,MAAM,cAAc,CAAC;AAC5B,EAAE,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE;AAClC,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACtB,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE;AAC5B,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE;;AAE1B;AACA,IAAI,IAAI,CAAC,cAAc,GAAG;AAC1B,MAAM,YAAY,EAAE,WAAW;AAC/B,MAAM,aAAa,EAAE,YAAY;AACjC,MAAM,eAAe,EAAE,cAAc;AACrC,MAAM,SAAS,EAAE;AACjB,KAAK;;AAEL;AACA,IAAI,IAAI,CAAC,oBAAoB,GAAG;AAChC,MAAM,OAAO;AACb,MAAM,QAAQ;AACd,MAAM,OAAO;AACb,MAAM,MAAM;AACZ,MAAM,QAAQ;AACd,MAAM,QAAQ;AACd,KAAK;;AAEL;AACA,IAAI,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC;;AAEnD,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,IAAI;AACxC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;AAC9B,IAAI,CAAC,CAAC;AACN,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAmB,CAAC,WAAW,EAAE;AACnC,IAAI,MAAM,GAAG,GAAG;AAChB;AACA,MAAM,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;AACjC,MAAM,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;;AAE3B;AACA,MAAM,UAAU,EAAE,CAAC,OAAO,KAAK;AAC/B,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AACvD,QAAQ,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI;AACjC,QAAQ,OAAO;AACf,UAAU,IAAI,EAAE,OAAO;AACvB,UAAU,KAAK,EAAE,OAAO,CAAC,KAAK;AAC9B,UAAU,SAAS,EAAE,OAAO,CAAC;AAC7B,SAAS;AACT,MAAM,CAAC;;AAEP,MAAM,cAAc,EAAE,MAAM;AAC5B,QAAQ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACpD,MAAM,CAAC;;AAEP,MAAM,QAAQ,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ;AACzC,KAAK;;AAEL;AACA,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAC1E;AACA;AACA;AACA,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,gBAAgB,GAAG,QAAQ,CAAC,IAAI,IAAI;AAClF,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;AACxE,QAAQ,OAAO,EAAE,QAAQ;AACzB,QAAQ,KAAK,EAAE,WAAW;AAC1B,OAAO,CAAC;AACR,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;AAC/D,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;AACjE,IAAI;;AAEJ,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACzE,MAAM,GAAG,CAAC,QAAQ,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACzD,MAAM,GAAG,CAAC,QAAQ,GAAG,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;AACvE,IAAI;;AAEJ,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACzE,MAAM,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC;AAC9E,MAAM,GAAG,CAAC,OAAO,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;AAC5D,IAAI;;AAEJ,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAC1E,MAAM,GAAG,CAAC,SAAS,GAAG,CAAC,MAAM,KAAK;AAClC;AACA,QAAQ,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC;AAC9C,QAAQ,MAAM,UAAU,GAAG,EAAE;AAC7B,QAAQ,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;AACpC,UAAU,IAAI,GAAG,IAAI,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;AAC1D,QAAQ;AACR,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC;AAC7C,MAAM,CAAC;AACP,IAAI;;AAEJ;AACA,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACxC,MAAM,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK;AAClC,MAAM,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC;AACpE,IAAI;;AAEJ;AACA,IAAI,OAAO,cAAc,CAAC,WAAW,CAAC,GAAG,CAAC;AAC1C,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE;AAChC,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE;AAC3C,MAAM,OAAO,GAAG;AAChB,IAAI;;AAEJ;AACA;AACA;AACA,IAAI,MAAM,SAAS,GAAG,OAAO,GAAG,KAAK,QAAQ;AAC7C,IAAI,IAAI,CAAC,SAAS,EAAE;AACpB,MAAM,OAAO,GAAG;AAChB,IAAI;;AAEJ,IAAI,MAAM,aAAa;AACvB,MAAM,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,SAAS;AACrD,MAAM,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,IAAI;AACzC,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;;AAEtC,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,OAAO,EAAE;AACpC,MAAM,OAAO,GAAG;AAChB,IAAI;;AAEJ;AACA,IAAI,IAAI,CAAC,IAAI,EAAE;AACf,MAAM,IAAI,GAAG,IAAI,OAAO,EAAE;AAC1B,IAAI;AACJ,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACvB,MAAM,OAAO,GAAG;AAChB,IAAI;AACJ,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;;AAEjB;AACA,IAAI,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AACjC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,MAAM,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChC,MAAM,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC9E,QAAQ,cAAc,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC;AAC/C,MAAM;AACN,IAAI;;AAEJ,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;AAC7B,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,CAAC,MAAM,EAAE;AAC1B,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC/C,MAAM,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC;AACrE,IAAI;;AAEJ,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;AACzD,MAAM,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC;AAC7E,IAAI;;AAEJ,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE;AACjC,MAAM,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC;AAChF,IAAI;;AAEJ;AACA,IAAI,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE;AAChD,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,UAAU,EAAE;AACtE,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,2BAA2B,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC;AACpF,MAAM;AACN,IAAI;;AAEJ;AACA,IAAI,IAAI,MAAM,CAAC,WAAW,EAAE;AAC5B,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;AAC9C,QAAQ,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC;AAClF,MAAM;;AAEN,MAAM,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,WAAW,EAAE;AAC7C,QAAQ,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACvD,UAAU,MAAM,IAAI,KAAK,CAAC,CAAC,+BAA+B,EAAE,IAAI,CAAC,CAAC,CAAC;AACnE,QAAQ;AACR,MAAM;AACN,IAAI;;AAEJ,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE;AAC5B;AACA;AACA,IAAI,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE;AACtC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;AAC9B,IAAI;;AAEJ;AACA,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;;AAEhC;AACA,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACvC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,mBAAmB,EAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACzE,MAAM;AACN,IAAI;;AAEJ;AACA,IAAI,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC;;AAExD;AACA,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC;;AAE9D;AACA,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE;AACxB,MAAM,IAAI;AACV,QAAQ,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC;AAC7C,MAAM,CAAC,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,6BAA6B,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAC7E,QAAQ,MAAM,KAAK;AACnB,MAAM;AACN,IAAI;;AAEJ;AACA,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,IAAI;AAC5C,MAAM,IAAI,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,UAAU,EAAE;AAClD;AACA,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC;AAChG,QAAQ,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,WAAW,CAAC;AAChD,MAAM;AACN,IAAI,CAAC,CAAC;;AAEN;AACA,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;AAClC,MAAM,MAAM;AACZ,MAAM,OAAO;AACb,MAAM,WAAW;AACjB,MAAM,YAAY;AAClB,MAAM,WAAW,EAAE,IAAI,CAAC,GAAG;AAC3B,KAAK,CAAC;;AAEN,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,qBAAqB,EAAE,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3G,EAAE;;AAEF;AACA;AACA;AACA,EAAE,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;AAC1C,IAAI,OAAO,OAAO,OAAO,KAAK;AAC9B,MAAM,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK;AACxD,QAAQ,UAAU,CAAC,MAAM;AACzB,UAAU,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,kBAAkB,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9G,QAAQ,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC;AAC5B,MAAM,CAAC,CAAC;;AAER,MAAM,IAAI;AACV;AACA,QAAQ,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC;AAClC,UAAU,MAAM,CAAC,OAAO,CAAC;AACzB,UAAU;AACV,SAAS,CAAC;AACV,MAAM,CAAC,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AAC9E;AACA,QAAQ,OAAO,SAAS;AACxB,MAAM;AACN,IAAI,CAAC;AACL,EAAE;;AAEF;AACA;AACA;AACA,EAAE,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE;AACnC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACnC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,yBAAyB,EAAE,QAAQ,CAAC,CAAC,CAAC;AACzD,MAAM;AACN,IAAI;AACJ,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC3C,EAAE;;AAEF;AACA;AACA;AACA,EAAE,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE;AACpC,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;;AAEpD,IAAI,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AACtC,MAAM,IAAI;AACV,QAAQ,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC;AAC9C,QAAQ,IAAI,MAAM,KAAK,KAAK,EAAE;AAC9B,UAAU,OAAO,KAAK;AACtB,QAAQ;AACR,MAAM,CAAC,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,yBAAyB,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AACrE,MAAM;AACN,IAAI;;AAEJ,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF;AACA;AACA;AACA,EAAE,SAAS,CAAC,UAAU,EAAE;AACxB,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;AACnD,IAAI,IAAI,CAAC,UAAU,EAAE;AACrB,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,mBAAmB,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;AAChE,MAAM;AACN,IAAI;;AAEJ,IAAI,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,UAAU;;AAE/C,IAAI,IAAI,MAAM,CAAC,SAAS,EAAE;AAC1B,MAAM,IAAI;AACV,QAAQ,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC;AACtC,MAAM,CAAC,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,+BAA+B,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAC9E,MAAM;AACN,IAAI;;AAEJ,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;AACnC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,qBAAqB,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;AACnE,EAAE;;AAEF;AACA;AACA;AACA,EAAE,SAAS,CAAC,UAAU,EAAE;AACxB,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM;AAC/C,EAAE;;AAEF;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO;AACX,MAAM,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;AACrC,MAAM,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM;AACzE,QAAQ,IAAI;AACZ,QAAQ,WAAW,EAAE,IAAI,CAAC,WAAW;AACrC,QAAQ,WAAW,EAAE,IAAI,CAAC;AAC1B,OAAO,CAAC,CAAC;AACT,MAAM,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM;AAC1E,QAAQ,IAAI;AACZ,QAAQ,SAAS,EAAE,SAAS,CAAC;AAC7B,OAAO,CAAC;AACR,KAAK;AACL,EAAE;;AAEF;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AACvC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAC1B,IAAI;AACJ,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,YAAY,GAAG,CAAC,MAAM,KAAK;AACxC,EAAE,OAAO;AACT,IAAI,IAAI,EAAE,MAAM,CAAC,IAAI;AACrB,IAAI,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC;AACjD,IAAI,OAAO,EAAE,MAAM,CAAC,OAAO;AAC3B,IAAI,SAAS,EAAE,MAAM,CAAC,SAAS;AAC/B,IAAI,UAAU,EAAE,MAAM,CAAC,UAAU;AACjC,IAAI,SAAS,EAAE,MAAM,CAAC,SAAS;AAC/B,IAAI,WAAW,EAAE,MAAM,CAAC,WAAW;AACnC,IAAI,UAAU,EAAE,MAAM,CAAC,UAAU;AACjC,IAAI,aAAa,EAAE,MAAM,CAAC,aAAa;AACvC,IAAI,YAAY,EAAE,MAAM,CAAC,YAAY;AACrC,IAAI,OAAO,EAAE,MAAM,CAAC,OAAO;AAC3B,IAAI,SAAS,EAAE,MAAM,CAAC;AACtB,GAAG;AACH;;ACvZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAIO,MAAM,iBAAiB,CAAC;AAC/B,EAAE,WAAW,CAAC,IAAI,EAAE;AACpB,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI;AACpB,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE;AAC/B,IAAI,IAAI,CAAC,YAAY,GAAG,EAAE;AAC1B,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK;AACvB,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAC5B,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC9B,IAAI,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;;AAE5B,IAAI,IAAI,CAAC,yBAAyB,EAAE;AACpC,IAAI,IAAI,CAAC,iBAAiB,EAAE;;AAE5B,IAAI,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC;AACpE,EAAE;;AAEF;AACA;AACA;AACA,EAAE,yBAAyB,GAAG;AAC9B;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AAC1B,MAAM,aAAa,EAAE,KAAK;AAC1B,MAAM,IAAI,EAAE,OAAO,OAAO,EAAE,MAAM,KAAK;AACvC,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,wBAAwB,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;AACjF;AACA,QAAQ;AACR,MAAM;AACN,KAAK,CAAC;;AAEN;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AAC3B,MAAM,aAAa,EAAE,IAAI;AACzB,MAAM,QAAQ,EAAE,MAAM;AACtB,MAAM,IAAI,EAAE,OAAO,OAAO,EAAE,MAAM,KAAK;AACvC,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,4BAA4B,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;;AAE1E;AACA,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;AAC/C,QAAQ,IAAI,GAAG,EAAE;AACjB,UAAU,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;AAClE,UAAU,MAAM,0BAA0B,SAAS,CAAC;AACpD,UAAU,MAAM,CAAC,KAAK,CAAC,CAAC,mBAAmB,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;AACjE,QAAQ;AACR,MAAM;AACN,KAAK,CAAC;;AAEN;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;AAC7B,MAAM,aAAa,EAAE,IAAI;AACzB,MAAM,QAAQ,EAAE,QAAQ;AACxB,MAAM,IAAI,EAAE,OAAO,OAAO,EAAE,MAAM,KAAK;AACvC,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,4CAA4C,EAAE,OAAO,CAAC,CAAC,CAAC;;AAE9E;AACA,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;AAC/C,QAAQ,IAAI,GAAG,EAAE;AACjB,UAAU,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;;AAElE,UAAU,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AACrD,UAAU,IAAI,CAAC,GAAG,GAAG,UAAU;AAC/B,UAAU,IAAI,CAAC,IAAI,GAAG,SAAS;AAC/B,UAAU,IAAI,CAAC,EAAE,GAAG,QAAQ;AAC5B,UAAU,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;;AAEzC,UAAU,MAAM,CAAC,KAAK,CAAC,CAAC,6CAA6C,EAAE,OAAO,CAAC,CAAC,CAAC;AACjF,QAAQ;AACR,MAAM;AACN,KAAK,CAAC;;AAEN;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;AAC/B,MAAM,aAAa,EAAE,IAAI;AACzB,MAAM,QAAQ,EAAE,QAAQ;AACxB,MAAM,IAAI,EAAE,OAAO,OAAO,EAAE,MAAM,KAAK;AACvC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAClC,UAAU,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE;AACvD,YAAY,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI;AAC3C,WAAW,CAAC;AACZ,QAAQ;AACR,MAAM;AACN,KAAK,CAAC;;AAEN;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AAC1B,MAAM,aAAa,EAAE,KAAK;AAC1B,MAAM,IAAI,EAAE,OAAO,OAAO,EAAE,MAAM,KAAK;AACvC,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,yBAAyB,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;;AAE5E,QAAQ,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;AACxC,UAAU,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACjC,YAAY,OAAO;AACnB,YAAY,MAAM;AAClB,YAAY;AACZ,WAAW,CAAC;;AAEZ;AACA,UAAU,IAAI,IAAI,CAAC,MAAM,EAAE;AAC3B,YAAY,IAAI,CAAC,gBAAgB,EAAE;AACnC,UAAU;AACV,QAAQ,CAAC,CAAC;AACV,MAAM;AACN,KAAK,CAAC;AACN,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE;AAC3B,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;AAC/D,MAAM,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC;AAC1E,IAAI;;AAEJ,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE;AAC9B,MAAM,IAAI;AACV,MAAM,aAAa,EAAE,QAAQ,CAAC,aAAa,IAAI,KAAK;AACpD,MAAM,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,KAAK;AAC1C,MAAM,IAAI,EAAE,QAAQ,CAAC;AACrB,KAAK,CAAC;;AAEN,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,yBAAyB,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AAChE,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE;AAC9B,IAAI,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM;AAClD,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC;;AAEtD,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnB,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,yBAAyB,EAAE,YAAY,CAAC,uBAAuB,CAAC,CAAC;AACpF,MAAM,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;AACpE,IAAI;;AAEJ,IAAI,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;AAC/C,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,CAAC,IAAI,EAAE;AACtB,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI;AACzC,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC;AAClE,MAAM,OAAO,QAAQ,CAAC,aAAa;AACnC,IAAI,CAAC,CAAC;;AAEN;AACA,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AAC7B,MAAM,MAAM,aAAa,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;AAC1D,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,QAAQ,IAAI,KAAK;AAC1E,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,QAAQ,IAAI,KAAK;AAC1E,MAAM,OAAO,aAAa,CAAC,SAAS,CAAC,GAAG,aAAa,CAAC,SAAS,CAAC;AAChE,IAAI,CAAC,CAAC;;AAEN,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,0BAA0B,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;;AAEtE;AACA,IAAI,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE;AACjC,MAAM,IAAI;AACV,QAAQ,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;AACtC,MAAM,CAAC,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,iCAAiC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AAC7E,MAAM;AACN,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA,EAAE,iBAAiB,GAAG;AACtB,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,OAAO;;AAE9C,IAAI,IAAI,qBAAqB,IAAI,MAAM,EAAE;AACzC,MAAM,MAAM,YAAY,GAAG,CAAC,QAAQ,KAAK;AACzC,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO;AACpC,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI;AAC1B,QAAQ,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;AACvC;AACA,QAAQ,IAAI,CAAC,WAAW,GAAG,mBAAmB,CAAC,YAAY,CAAC;AAC5D,MAAM,CAAC;AACP,MAAM,IAAI,CAAC,WAAW,GAAG,mBAAmB,CAAC,YAAY,CAAC;AAC1D,IAAI,CAAC,MAAM;AACX;AACA,MAAM,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,MAAM;AAC5C,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;AAC7B,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI;AAC1B,QAAQ,IAAI,CAAC,gBAAgB,EAAE;AAC/B,MAAM,CAAC,EAAE,IAAI,CAAC;AACd,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,MAAM,gBAAgB,CAAC,QAAQ,EAAE;AACnC,IAAI,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AACzC;AACA,MAAM,IAAI,QAAQ,IAAI,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE;AACrD,QAAQ;AACR,MAAM;;AAEN,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;;AAE5C,MAAM,IAAI;AACV,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;AACpD,QAAQ,IAAI,GAAG,EAAE;AACjB,UAAU,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;AAClE,UAAU,MAAM,0BAA0B,SAAS,CAAC;AACpD,UAAU,MAAM,CAAC,KAAK,CAAC,CAAC,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;AACnF,UAAU,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AAC5B,QAAQ,CAAC,MAAM;AACf,UAAU,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AAC5B,QAAQ;AACR,MAAM,CAAC,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,+BAA+B,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AAC/E,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AAC1B,MAAM;AACN,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO;AACX,MAAM,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI;AAC3C,MAAM,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AACpD,MAAM,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM;AAC7C,MAAM,MAAM,EAAE,IAAI,CAAC;AACnB,KAAK;AACL,EAAE;;AAEF;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI;AAC1B,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI,OAAO,kBAAkB,KAAK,UAAU,EAAE;AAC9E,MAAM,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AAC1C,MAAM,IAAI,CAAC,WAAW,GAAG,IAAI;AAC7B,IAAI;AACJ,IAAI,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,EAAE;AACpC,MAAM,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;AACtC,MAAM,IAAI,CAAC,aAAa,GAAG,IAAI;AAC/B,IAAI;AACJ;AACA,IAAI,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;AAC1C,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACzC,IAAI;AACJ,IAAI,IAAI,CAAC,YAAY,GAAG,EAAE;AAC1B,IAAI,MAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC;AAC3D,EAAE;AACF;;ACjRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAIO,MAAM,eAAe,CAAC;AAC7B,EAAE,WAAW,CAAC,IAAI,EAAE;AACpB,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI;AACpB,IAAI,IAAI,CAAC,QAAQ,GAAG,EAAE;AACtB,IAAI,IAAI,CAAC,QAAQ,GAAG,EAAE;AACtB,IAAI,IAAI,CAAC,WAAW,GAAG,GAAG;;AAE1B,IAAI,IAAI,CAAC,MAAM,GAAG;AAClB,MAAM,UAAU,EAAE,CAAC;AACnB,MAAM,UAAU,EAAE,IAAI;AACtB,MAAM,WAAW,EAAE;AACnB,KAAK;;AAEL,IAAI,IAAI,CAAC,uBAAuB,EAAE;;AAElC,IAAI,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC;AACpE,EAAE;;AAEF;AACA;AACA;AACA,EAAE,uBAAuB,GAAG;AAC5B;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC;AAClB,MAAM,IAAI,EAAE,SAAS;AACrB,MAAM,SAAS,EAAE,CAAC,KAAK,KAAK;AAC5B,QAAQ,OAAO,KAAK,CAAC,IAAI,KAAK,WAAW;AACzC,gBAAgB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACrF,MAAM,CAAC;AACP,MAAM,MAAM,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;AACxC,QAAQ,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC;;AAErE;AACA,QAAQ,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AACzD,UAAU,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC;AAChF,UAAU,MAAM,CAAC,KAAK,CAAC,CAAC,mCAAmC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;;AAE1E,QAAQ,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;;AAEhE,UAAU,OAAO;AACjB,YAAY,SAAS,EAAE,IAAI;AAC3B,YAAY,MAAM,EAAE,OAAO;AAC3B,YAAY,UAAU,EAAE,OAAO,CAAC,UAAU,GAAG;AAC7C,WAAW;AACX,QAAQ;;AAER,QAAQ,OAAO;AACf,UAAU,SAAS,EAAE,KAAK;AAC1B,UAAU,MAAM,EAAE,UAAU;AAC5B,UAAU,OAAO,EAAE;AACnB,SAAS;AACT,MAAM;AACN,KAAK,CAAC;;AAEN;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC;AAClB,MAAM,IAAI,EAAE,aAAa;AACzB,MAAM,SAAS,EAAE,CAAC,KAAK,KAAK;AAC5B,QAAQ,OAAO,KAAK,CAAC,IAAI,KAAK,OAAO;AACrC,gBAAgB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;AACjD,gBAAgB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;AAC1D,MAAM,CAAC;AACP,MAAM,MAAM,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;AACxC,QAAQ,MAAM,CAAC,KAAK,CAAC,sDAAsD,CAAC;;AAE5E;AACA,QAAQ,IAAI,OAAO,CAAC,WAAW,EAAE;AACjC,UAAU,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC;AACvE,UAAU,OAAO;AACjB,YAAY,SAAS,EAAE,IAAI;AAC3B,YAAY,MAAM,EAAE,kBAAkB;AACtC,YAAY,GAAG,EAAE,OAAO,CAAC;AACzB,WAAW;AACX,QAAQ;;AAER,QAAQ,OAAO;AACf,UAAU,SAAS,EAAE,KAAK;AAC1B,UAAU,MAAM,EAAE,UAAU;AAC5B,UAAU,OAAO,EAAE;AACnB,SAAS;AACT,MAAM;AACN,KAAK,CAAC;;AAEN;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC;AAClB,MAAM,IAAI,EAAE,OAAO;AACnB,MAAM,SAAS,EAAE,CAAC,KAAK,KAAK;AAC5B,QAAQ,OAAO,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC/D,MAAM,CAAC;AACP,MAAM,MAAM,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;AACxC,QAAQ,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC;;AAEjE;AACA,QAAQ,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,EAAE;AACpC,UAAU,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC;;AAE1E;AACA,UAAU,IAAI;AACd,YAAY,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;AACpD,UAAU,CAAC,CAAC,OAAO,YAAY,EAAE;AACjC,YAAY,MAAM,CAAC,IAAI,CAAC,sCAAsC,EAAE,YAAY,CAAC;AAC7E,UAAU;;AAEV,UAAU,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;;AAEhE,UAAU,OAAO;AACjB,YAAY,SAAS,EAAE,IAAI;AAC3B,YAAY,MAAM,EAAE,OAAO;AAC3B,YAAY,UAAU,EAAE,OAAO,CAAC,UAAU,GAAG;AAC7C,WAAW;AACX,QAAQ;;AAER,QAAQ,OAAO;AACf,UAAU,SAAS,EAAE,KAAK;AAC1B,UAAU,MAAM,EAAE,UAAU;AAC5B,UAAU,OAAO,EAAE;AACnB,SAAS;AACT,MAAM;AACN,KAAK,CAAC;;AAEN;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC;AAClB,MAAM,IAAI,EAAE,SAAS;AACrB,MAAM,SAAS,EAAE,CAAC,KAAK,KAAK;AAC5B,QAAQ,OAAO,KAAK,CAAC,IAAI,KAAK,cAAc;AAC5C,eAAe,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;AAChD,MAAM,CAAC;AACP,MAAM,MAAM,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;AACxC,QAAQ,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC;;AAErE;AACA,QAAQ,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,EAAE;AACpC,UAAU,OAAO;AACjB,YAAY,SAAS,EAAE,IAAI;AAC3B,YAAY,MAAM,EAAE,2BAA2B;AAC/C,YAAY,OAAO,EAAE,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,IAAI,CAAC;AAClD,YAAY,UAAU,EAAE,OAAO,CAAC,UAAU,GAAG;AAC7C,WAAW;AACX,QAAQ;;AAER,QAAQ,OAAO;AACf,UAAU,SAAS,EAAE,KAAK;AAC1B,UAAU,MAAM,EAAE,UAAU;AAC5B,UAAU,OAAO,EAAE;AACnB,SAAS;AACT,MAAM;AACN,KAAK,CAAC;;AAEN;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC;AAClB,MAAM,IAAI,EAAE,SAAS;AACrB,MAAM,SAAS,EAAE,MAAM,IAAI;AAC3B,MAAM,MAAM,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;AACxC,QAAQ,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC;;AAErE,QAAQ,OAAO;AACf,UAAU,SAAS,EAAE,KAAK;AAC1B,UAAU,MAAM,EAAE,UAAU;AAC5B,UAAU,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI;AACpC,SAAS;AACT,MAAM;AACN,KAAK,CAAC;AACN,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,OAAO,EAAE;AACpB,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AAChE,MAAM,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC;AACxF,IAAI;;AAEJ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AAC/B,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,2BAA2B,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC1E,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,EAAE,EAAE;AACpC;AACA,IAAI,OAAO,GAAG;AACd,MAAM,UAAU,EAAE,CAAC;AACnB,MAAM,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AAC3B,MAAM,GAAG;AACT,KAAK;;AAEL;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;;AAEjC;AACA,IAAI,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;AACzC,MAAM,IAAI;AACV,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;AAC/C,UAAU,MAAM,CAAC,KAAK,CAAC,CAAC,iCAAiC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;;AAE1E,UAAU,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;;AAE7D,UAAU,IAAI,MAAM,CAAC,SAAS,EAAE;AAChC,YAAY,MAAM,CAAC,KAAK,CAAC,CAAC,uCAAuC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAClF,YAAY,OAAO,MAAM;AACzB,UAAU;;AAEV;AACA,UAAU,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;AACvE,YAAY,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC;AAChD,UAAU;;AAEV,UAAU,OAAO,MAAM;AACvB,QAAQ;AACR,MAAM,CAAC,CAAC,OAAO,YAAY,EAAE;AAC7B,QAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,2BAA2B,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC;AAC1F,MAAM;AACN,IAAI;;AAEJ;AACA,IAAI,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC;;AAE1E,IAAI,OAAO;AACX,MAAM,SAAS,EAAE,KAAK;AACtB,MAAM,MAAM,EAAE,WAAW;AACzB,MAAM,OAAO,EAAE;AACf,KAAK;AACL,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE;AAClC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAC5B,MAAM,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC;AACtE,MAAM;AACN,IAAI;;AAEJ,IAAI,MAAM,SAAS,GAAG,OAAO,OAAO,CAAC,SAAS,KAAK;AACnD,QAAQ,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS;AAChD,QAAQ,OAAO,CAAC,SAAS;;AAEzB,IAAI,IAAI,CAAC,SAAS,EAAE;;AAEpB;AACA,IAAI,SAAS,CAAC,SAAS,GAAG,EAAE;;AAE5B;AACA,IAAI,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACjD,IAAI,OAAO,CAAC,SAAS,GAAG,mBAAmB;;AAE3C,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE;AACjC,MAAM,OAAO,EAAE,MAAM;AACrB,MAAM,YAAY,EAAE,KAAK;AACzB,MAAM,UAAU,EAAE,SAAS;AAC3B,MAAM,MAAM,EAAE,mBAAmB;AACjC,MAAM,KAAK,EAAE,SAAS;AACtB,MAAM,UAAU,EAAE,sCAAsC;AACxD,MAAM,SAAS,EAAE;AACjB,KAAK,CAAC;;AAEN,IAAI,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC9C,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI;AAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM;AAChC,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM;;AAEpC,IAAI,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;AAC9C,IAAI,KAAK,CAAC,WAAW,GAAG,mBAAmB;AAC3C,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,cAAc;;AAEvC,IAAI,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AAC/C,IAAI,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,OAAO,IAAI,mBAAmB;AAC/D,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY;;AAEvC,IAAI,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AACnD,IAAI,MAAM,CAAC,WAAW,GAAG,WAAW;AACpC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;AAChC,MAAM,OAAO,EAAE,aAAa;AAC5B,MAAM,UAAU,EAAE,SAAS;AAC3B,MAAM,MAAM,EAAE,MAAM;AACpB,MAAM,YAAY,EAAE,KAAK;AACzB,MAAM,MAAM,EAAE,SAAS;AACvB,MAAM,UAAU,EAAE,MAAM;AACxB,MAAM,KAAK,EAAE;AACb,KAAK,CAAC;;AAEN,IAAI,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;;AAEpE,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;AAC7B,IAAI,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC;AAC9B,IAAI,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;AAChC,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC;;AAE/B,IAAI,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC;AAClC,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE;AAC3B;AACA,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;;AAEnF;AACA,IAAI,MAAM,WAAW,GAAG,EAAE;AAC1B,IAAI,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AAC5C,MAAM,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;AAC9B,MAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE;AAC1G,QAAQ,WAAW,CAAC,GAAG,CAAC,GAAG,GAAG;AAC9B,MAAM,CAAC,MAAM;AACb,QAAQ,WAAW,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;AACtC,MAAM;AACN,IAAI;;AAEJ,IAAI,MAAM,UAAU,GAAG;AACvB,MAAM,KAAK,EAAE;AACb,QAAQ,IAAI,EAAE,KAAK,CAAC,IAAI;AACxB,QAAQ,OAAO,EAAE,KAAK,CAAC,OAAO;AAC9B,QAAQ;AACR,OAAO;AACP,MAAM,OAAO,EAAE,WAAW;AAC1B,MAAM,SAAS,EAAE,IAAI,CAAC,GAAG;AACzB,KAAK;;AAEL,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;;AAElC;AACA,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE;AACjD,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AAC3B,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,KAAK,GAAG,EAAE,EAAE;AAC1B,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;AACtC,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,MAAM,YAAY,GAAG,EAAE;;AAE3B,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI;AACnC,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS;AAChD,MAAM,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACxD,IAAI,CAAC,CAAC;;AAEN,IAAI,OAAO;AACX,MAAM,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;AACvC,MAAM,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;AACpC,MAAM,YAAY;AAClB,MAAM,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACtC,KAAK;AACL,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,MAAM,EAAE;AACpB,IAAI,IAAI,CAAC,MAAM,GAAG;AAClB,MAAM,GAAG,IAAI,CAAC,MAAM;AACpB,MAAM,GAAG;AACT,KAAK;AACL,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,IAAI,CAAC,QAAQ,GAAG,EAAE;AACtB,IAAI,IAAI,CAAC,QAAQ,GAAG,EAAE;AACtB,IAAI,MAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC;AAClE,EAAE;AACF;;AClZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAIO,MAAM,gBAAgB,CAAC;AAC9B,EAAE,WAAW,CAAC,IAAI,EAAE;AACpB,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI;AACpB,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE;AAC1B,IAAI,IAAI,CAAC,YAAY,GAAG,EAAE;AAC1B,IAAI,IAAI,CAAC,UAAU,GAAG,GAAG;;AAEzB;AACA,IAAI,IAAI,CAAC,eAAe,GAAG;AAC3B,MAAM,YAAY;AAClB,MAAM,WAAW;AACjB,MAAM,YAAY;AAClB,MAAM,WAAW;AACjB,MAAM,aAAa;AACnB,MAAM,YAAY;AAClB,MAAM,eAAe;AACrB,MAAM,cAAc;AACpB,MAAM,eAAe;AACrB,MAAM,cAAc;AACpB,KAAK;;AAEL;AACA,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,IAAI;AAC1C,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;AAC/B,IAAI,CAAC,CAAC;;AAEN,IAAI,MAAM,CAAC,KAAK,CAAC,0CAA0C,CAAC;AAC5D,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,GAAG,EAAE,EAAE;AACvC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAChC,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC,CAAC;AACpE,IAAI;;AAEJ,IAAI,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE;AAC1C,MAAM,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC;AAChE,IAAI;;AAEJ,IAAI,MAAM,IAAI,GAAG;AACjB,MAAM,UAAU;AAChB,MAAM,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAChD,MAAM,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC;AACrC,MAAM,YAAY,EAAE,IAAI,CAAC,GAAG;AAC5B,KAAK;;AAEL,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AACvC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;AAEpB;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;;AAEjD,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;;AAEtG;AACA,IAAI,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;AAC9C,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE;AACtB,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;;AAEhC,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AACvC,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;;AAEvD,IAAI,IAAI,KAAK,GAAG,EAAE,EAAE;AACpB,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AAC5B,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC;AACpE,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,EAAE,EAAE;AACrC,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;;AAEvC,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtC,MAAM,OAAO,OAAO;AACpB,IAAI;;AAEJ,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,oBAAoB,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;;AAE1E;AACA,IAAI,MAAM,cAAc,GAAG;AAC3B,MAAM,KAAK;AACX,MAAM,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AAC3B,MAAM,UAAU,EAAE,KAAK,CAAC,MAAM;AAC9B,MAAM,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI;AACtC,KAAK;;AAEL,IAAI,IAAI,cAAc,GAAG,EAAE,GAAG,OAAO,EAAE;AACvC,IAAI,IAAI,SAAS,GAAG,KAAK;;AAEzB;AACA,IAAI,MAAM,YAAY,GAAG,OAAO,KAAK,KAAK;AAC1C;AACA,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;AACjC,QAAQ,OAAO,cAAc;AAC7B,MAAM;;AAEN,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;AAC/B,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;;AAElC,MAAM,IAAI;AACV,QAAQ,IAAI,UAAU,GAAG,KAAK;;AAE9B;AACA,QAAQ,MAAM,IAAI,GAAG,OAAO,eAAe,KAAK;AAChD,UAAU,UAAU,GAAG,IAAI;;AAE3B;AACA,UAAU,IAAI,eAAe,KAAK,SAAS,EAAE;AAC7C,YAAY,cAAc,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,eAAe,EAAE;AACtE,UAAU;;AAEV;AACA,UAAU,OAAO,MAAM,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC;AAC9C,QAAQ,CAAC;;AAET;AACA,QAAQ,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,IAAI,CAAC;;AAEnD;AACA,QAAQ,IAAI,CAAC,UAAU,EAAE;AACzB,UAAU,MAAM,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAC3E,UAAU,SAAS,GAAG,IAAI;AAC1B,UAAU,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;AACpC,QAAQ;;AAER,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;AAC/C,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;;AAE/E,MAAM,CAAC,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,yBAAyB,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;;AAEvE;AACA,QAAQ,OAAO,MAAM,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC;AAC5C,MAAM;;AAEN,MAAM,OAAO,cAAc;AAC3B,IAAI,CAAC;;AAEL;AACA,IAAI,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,CAAC,CAAC;;AAExC;AACA,IAAI,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC,SAAS;AACnE,IAAI,cAAc,CAAC,SAAS,GAAG,SAAS;AACxC,IAAI,cAAc,CAAC,OAAO,GAAG,CAAC,SAAS;;AAEvC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;;AAE1C;AACA,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;AACpD,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAC/B,IAAI;;AAEJ,IAAI,OAAO,MAAM;AACjB,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,EAAE,EAAE;AAChD,IAAI,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK;AAC1C,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE;AAClF,KAAK;;AAEL;AACA,IAAI,OAAO,MAAM,aAAa,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;AAClD,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,KAAK,EAAE;AAClB,IAAI,IAAI,KAAK,EAAE;AACf,MAAM,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE;AACxC,IAAI;;AAEJ;AACA,IAAI,MAAM,QAAQ,GAAG,EAAE;AACvB,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK;AACzC,MAAM,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK;AACxC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI;AACpB,QAAQ,QAAQ,EAAE,CAAC,CAAC,QAAQ;AAC5B,QAAQ,YAAY,EAAE,CAAC,CAAC;AACxB,OAAO,CAAC,CAAC;AACT,IAAI,CAAC,CAAC;;AAEN,IAAI,OAAO,QAAQ;AACnB,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACrD,OAAO,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;;AAEpD,IAAI,MAAM,iBAAiB,GAAG,EAAE;AAChC,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,IAAI;AACvC,MAAM,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAChF,IAAI,CAAC,CAAC;;AAEN,IAAI,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG;AACnD,QAAQ,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;AAC9F,QAAQ,CAAC;;AAET,IAAI,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM;;AAEpF,IAAI,OAAO;AACX,MAAM,UAAU;AAChB,MAAM,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM;AAC/C,MAAM,iBAAiB;AACvB,MAAM,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;AAC1C,MAAM,cAAc;AACpB,MAAM,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG;AACnD,KAAK;AACL,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,KAAK,EAAE;AACjB,IAAI,IAAI,KAAK,EAAE;AACf,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;AAC/B,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC,CAAC;AAC1D,IAAI,CAAC,MAAM;AACX,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI;AACxC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;AAC7B,MAAM,CAAC,CAAC;AACR,MAAM,IAAI,CAAC,YAAY,GAAG,EAAE;AAC5B,MAAM,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC;AACpD,IAAI;AACJ,EAAE;AACF;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACY,MAAC,gBAAgB,GAAG,CAAC,EAAE,KAAK;AACxC,EAAE,OAAO,OAAO,OAAO,EAAE,IAAI,KAAK;AAClC,IAAI,MAAM,EAAE,CAAC,OAAO,CAAC;AACrB,IAAI,MAAM,IAAI,EAAE;AAChB,EAAE,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,qBAAqB,GAAG,CAAC,SAAS,EAAE,EAAE,KAAK;AACxD,EAAE,OAAO,OAAO,OAAO,EAAE,IAAI,KAAK;AAClC,IAAI,IAAI,MAAM,SAAS,CAAC,OAAO,CAAC,EAAE;AAClC,MAAM,MAAM,EAAE,CAAC,OAAO,CAAC;AACvB,IAAI;AACJ,IAAI,MAAM,IAAI,EAAE;AAChB,EAAE,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACY,MAAC,eAAe,GAAG,CAAC,cAAc,KAAK;AACnD,EAAE,OAAO,OAAO,OAAO,EAAE,IAAI,KAAK;AAClC,IAAI,IAAI,MAAM,cAAc,CAAC,OAAO,CAAC,EAAE;AACvC,MAAM,MAAM,IAAI,EAAE;AAClB,IAAI;AACJ;AACA,EAAE,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACY,MAAC,mBAAmB,GAAG,CAAC,WAAW,KAAK;AACpD,EAAE,OAAO,OAAO,OAAO,EAAE,IAAI,KAAK;AAClC,IAAI,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC;AAC/C,IAAI,MAAM,IAAI,CAAC,QAAQ,CAAC;AACxB,EAAE,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,eAAe,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,KAAK;AACvD,EAAE,OAAO,OAAO,OAAO,EAAE,IAAI,KAAK;AAClC,IAAI,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM;AACjD,MAAM,UAAU,CAAC,MAAM,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,EAAE,OAAO;AACjE,KAAK;;AAEL,IAAI,IAAI;AACR,MAAM,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC;AACvD,MAAM,MAAM,IAAI,EAAE;AAClB,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC;AAC1D,MAAM,MAAM,IAAI,EAAE,CAAC;AACnB,IAAI;AACJ,EAAE,CAAC;AACH;;AC7VA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAIO,MAAM,UAAU,CAAC;AACxB,EAAE,WAAW,CAAC,IAAI,EAAE;AACpB,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI;;AAEpB;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE;;AAE/B;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE;AAC/B,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE;;AAExB;AACA,IAAI,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAClC,IAAI,IAAI,CAAC,iBAAiB,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;;AAE5D;AACA,IAAI,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,uBAAuB,EAAE;AAClE,IAAI,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,oBAAoB,EAAE;;AAE5D,IAAI,MAAM,CAAC,OAAO;AAClB,MAAM,CAAC,2BAA2B,CAAC;AACnC,MAAM,CAAC,mBAAmB,EAAE,IAAI,CAAC,wBAAwB,GAAG,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC;AAC5E,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC,qBAAqB,GAAG,KAAK,GAAG,IAAI,CAAC;AACnE,KAAK;AACL,EAAE;;AAEF;;AAEA,EAAE,uBAAuB,GAAG;AAC5B,IAAI,IAAI,OAAO,iBAAiB,KAAK,WAAW,EAAE,OAAO,KAAK;AAC9D,IAAI,OAAO,iBAAiB,CAAC,QAAQ,GAAG,kBAAkB,CAAC,IAAI,KAAK;AACpE,EAAE;;AAEF,EAAE,oBAAoB,GAAG;AACzB,IAAI,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,OAAO,KAAK;AACrD,IAAI,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC/C,IAAI,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,GAAG,eAAe,CAAC,IAAI,KAAK;AAC7D,EAAE;;AAEF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,EAAE,EAAE;AACzC,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,CAAC,QAAQ,CAAC;AACjE,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,IAAI,WAAW;;AAE7C,IAAI,QAAQ,OAAO;AACnB,MAAM,KAAK,WAAW;AACtB,QAAQ,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC;;AAEtD,MAAM,KAAK,OAAO;AAClB,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC;;AAEpD,MAAM,KAAK,SAAS;AACpB,QAAQ,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC;;AAEtD,MAAM,KAAK,MAAM;AACjB,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC;;AAEnD,MAAM;AACN,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,8BAA8B,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;AACnF,QAAQ,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC;AACtD;AACA,EAAE;;AAEF;;AAEA,EAAE,MAAM,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE;AAC9C,IAAI,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AACrD,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;;AAE3B;AACA,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;;AAEzD;AACA,IAAI,IAAI,IAAI,CAAC,wBAAwB,EAAE;AACvC,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,IAAI,UAAU,CAAC;AACtE,MAAM;AACN,IAAI;;AAEJ;AACA,IAAI,IAAI,IAAI,CAAC,qBAAqB,EAAE;AACpC,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;AAC/D,MAAM;AACN,IAAI;;AAEJ;AACA,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AACxD,EAAE;;AAEF;;AAEA,EAAE,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE;AACtC,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AACtD,IAAI,IAAI,CAAC,MAAM,EAAE;AACjB,MAAM,MAAM,CAAC,MAAM,CAAC,kEAAkE,CAAC;AACvF,MAAM,OAAO,MAAM,CAAC,CAAC;AACrB,IAAI;;AAEJ,IAAI,IAAI,IAAI,GAAG,KAAK;;AAEpB;AACA,IAAI,MAAM,OAAO,GAAG,MAAM;AAC1B,MAAM,MAAM,CAAC,mBAAmB,CAAC,YAAY,EAAE,OAAO,CAAC;AACvD,MAAM,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC;AACpD,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC;AAClD,MAAM,IAAI,GAAG,KAAK,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;AACpD,IAAI,CAAC;;AAEL,IAAI,MAAM,OAAO,GAAG,MAAM;AAC1B,MAAM,IAAI,IAAI,EAAE;AAChB,MAAM,IAAI,GAAG,IAAI;AACjB,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC;AAChD;AACA;AACA;AACA,MAAM,OAAO,EAAE;AACf,IAAI,CAAC;;AAEL,IAAI,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACrE,IAAI,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAClE,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;AACjC,IAAI,OAAO,OAAO;AAClB,EAAE;;AAEF;;AAEA,EAAE,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE;AACxC,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AACtD,IAAI,IAAI,CAAC,MAAM,EAAE;AACjB,MAAM,MAAM,CAAC,MAAM,CAAC,oEAAoE,CAAC;AACzF,MAAM,OAAO,MAAM,CAAC,CAAC;AACrB,IAAI;;AAEJ,IAAI,IAAI,OAAO,oBAAoB,KAAK,WAAW,EAAE;AACrD;AACA,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC;AAChD,MAAM,OAAO,MAAM,CAAC,CAAC;AACrB,IAAI;;AAEJ,IAAI,MAAM,QAAQ,GAAG,IAAI,oBAAoB;AAC7C,MAAM,CAAC,OAAO,KAAK;AACnB,QAAQ,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;AACrC,UAAU,IAAI,KAAK,CAAC,cAAc,EAAE;AACpC,YAAY,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC;AACtD,YAAY,OAAO,EAAE,CAAC;AACtB,YAAY;AACZ,UAAU;AACV,QAAQ;AACR,MAAM,CAAC;AACP,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE;AAC7B,KAAK;;AAEL,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;AAC5B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;;AAEzC,IAAI,MAAM,OAAO,GAAG,MAAM;AAC1B,MAAM,QAAQ,CAAC,UAAU,EAAE;AAC3B,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;AACpC,IAAI,CAAC;;AAEL,IAAI,OAAO,OAAO;AAClB,EAAE;;AAEF;;AAEA,EAAE,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE;AACrC,IAAI,IAAI,OAAO,CAAC;;AAEhB,IAAI,MAAM,KAAK,GAAG,MAAM;AACxB,MAAM,IAAI,CAAC,OAAO,EAAE;AACpB,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC;AAClD,MAAM,IAAI,GAAG,KAAK,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;AACpD,IAAI,CAAC;;AAEL,IAAI,MAAM,QAAQ,GAAG,MAAM;AAC3B,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC;AAChD,MAAM,KAAK,EAAE;AACb,IAAI,CAAC;;AAEL,IAAI,IAAI,qBAAqB,IAAI,MAAM,EAAE;AACzC,MAAM,MAAM,EAAE,GAAG,mBAAmB,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACjE,MAAM,OAAO,GAAG,MAAM,EAAE,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC1D,IAAI,CAAC,MAAM;AACX;AACA,MAAM,MAAM,EAAE,GAAG,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC;AAC3C,MAAM,OAAO,GAAG,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACpD,IAAI;;AAEJ,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;AACjC,IAAI,OAAO,OAAO;AAClB,EAAE;;AAEF;;AAEA,EAAE,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE;AACxC,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC5E,IAAI,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;;AAEjC;AACA,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;;AAE/D;AACA,IAAI,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;;AAEpD;AACA,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC;AACzC,MAAM,MAAM,EAAE,MAAM;AACpB,MAAM,IAAI,EAAE,OAAO;AACnB,MAAM;AACN,KAAK,CAAC;;AAEN;AACA,IAAI,IAAI,CAAC,wBAAwB,EAAE;;AAEnC,IAAI,MAAM,CAAC,OAAO;AAClB,MAAM,CAAC,yCAAyC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3F,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;AAChC,KAAK;AACL,EAAE;;AAEF,EAAE,wBAAwB,GAAG;AAC7B;AACA,IAAI,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACjC,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE;AACtC,IAAI;;AAEJ,IAAI,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AACnD,IAAI,MAAM,CAAC,IAAI,GAAG,kBAAkB;AACpC,IAAI,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAC/D,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;;AAErC,IAAI,IAAI,CAAC,kBAAkB,GAAG,MAAM;AACpC,EAAE;;AAEF;;AAEA,EAAE,oBAAoB,CAAC,GAAG,EAAE;AAC5B,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAClC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;;AAE5B,IAAI,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC/C,IAAI,IAAI,CAAC,GAAG,GAAG,eAAe;AAC9B,IAAI,IAAI,CAAC,IAAI,GAAG,GAAG;AACnB,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;;AAEnC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC,CAAC;AACxD,EAAE;;AAEF;;AAEA,EAAE,eAAe,CAAC,GAAG,EAAE;AACvB,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAClC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;;AAE5B,IAAI,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC/C,IAAI,IAAI,CAAC,GAAG,GAAG,UAAU;AACzB,IAAI,IAAI,CAAC,IAAI,GAAG,GAAG;AACnB,IAAI,IAAI,CAAC,EAAE,GAAG,QAAQ;AACtB,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;;AAEnC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC,CAAC;AACnD,EAAE;;AAEF;;AAEA;AACA;AACA;AACA;AACA,EAAE,MAAM,eAAe,CAAC,QAAQ,EAAE;AAClC,IAAI,MAAM,OAAO,GAAG,EAAE;;AAEtB,IAAI,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;AACjC;AACA,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACrC,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;AAC3E,QAAQ;AACR,MAAM;;AAEN;AACA,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACvC,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC;AACxE,QAAQ;AACR,MAAM;;AAEN;AACA,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAC3C,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC;AACxE,QAAQ;AACR,MAAM;;AAEN,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1C,MAAM,IAAI,CAAC,GAAG,EAAE;AAChB,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,kBAAkB,EAAE,IAAI,CAAC,iCAAiC,CAAC,CAAC;AACnF,QAAQ;AACR,MAAM;;AAEN,MAAM,IAAI;AACV,QAAQ,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;AAC1D,QAAQ,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACnC,MAAM,CAAC,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,wCAAwC,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC;AACzF,MAAM;AACN,IAAI;;AAEJ,IAAI,OAAO,OAAO;AAClB,EAAE;;AAEF;;AAEA,EAAE,cAAc,CAAC,MAAM,EAAE;AACzB,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI;AAC5B,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,OAAO,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AACzE,IAAI,IAAI,MAAM,YAAY,OAAO,EAAE,OAAO,MAAM;AAChD,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,WAAW,CAAC,OAAO,GAAG,EAAE,EAAE;AAClC,IAAI,MAAM,aAAa,GAAG,EAAE;AAC5B,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACzC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACtE,QAAQ,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,MAAM;AACN,IAAI;;AAEJ,IAAI,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;AACpC,MAAM,MAAM,CAAC,OAAO,CAAC,kCAAkC,CAAC;AACxD,MAAM;AACN,IAAI;;AAEJ,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,8BAA8B,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/E,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;AAChD,EAAE;;AAEF;;AAEA,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO;AACX,MAAM,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;AACtC,MAAM,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI;AAC3C,MAAM,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAC7C,MAAM,yBAAyB,EAAE,IAAI,CAAC,wBAAwB;AAC9D,MAAM,sBAAsB,EAAE,IAAI,CAAC,qBAAqB;AACxD,MAAM,gBAAgB,EAAE,IAAI,CAAC;AAC7B,KAAK;AACL,EAAE;;AAEF;;AAEA,EAAE,OAAO,GAAG;AACZ;AACA,IAAI,KAAK,MAAM,GAAG,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;AAChD,MAAM,QAAQ,CAAC,UAAU,EAAE;AAC3B,IAAI;AACJ,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;;AAE3B;AACA,IAAI,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE;AAC3C,MAAM,OAAO,EAAE;AACf,IAAI;AACJ,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE;;AAExB;AACA,IAAI,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACjC,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE;AACtC,MAAM,IAAI,CAAC,kBAAkB,GAAG,IAAI;AACpC,IAAI;;AAEJ,IAAI,IAAI,CAAC,iBAAiB,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;AAC5D,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;;AAE3B,IAAI,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC;AAC7C,EAAE;AACF;;ACxaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAIA,MAAM,aAAa,GAAG,cAAc;;AAE7B,MAAM,WAAW,CAAC;AACzB,EAAE,WAAW,CAAC,MAAM,GAAG,EAAE,EAAE;AAC3B;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE;;AAE/B;AACA,IAAI,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,cAAc,IAAI,EAAE;AACtD,IAAI,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,aAAa,IAAI,IAAI;AACtD,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI;;AAEjC;AACA;AACA;AACA,IAAI,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE;AACtC,MAAM,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO;AACpC,IAAI,CAAC,MAAM;AACX,MAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC9C,IAAI;;AAEJ;AACA,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;AACvB,MAAM,IAAI,CAAC,iBAAiB,EAAE;AAC9B,IAAI;AACJ,EAAE;;AAEF;;AAEA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,GAAG;AACtB,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,OAAO,KAAK;;AAEnD,IAAI,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,QAAQ,IAAI,EAAE;AACpD,IAAI,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE;;AAE5C;AACA,IAAI;AACJ,MAAM,QAAQ,KAAK,WAAW;AAC9B,MAAM,QAAQ,KAAK,WAAW;AAC9B,MAAM,QAAQ,KAAK,SAAS;AAC5B,MAAM,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACjC,OAAO,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK;AACrD;AACA,EAAE;;AAEF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,gBAAgB,CAAC,GAAG,EAAE;AACxB;AACA,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI;;AAEtD,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AAC/C,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO,KAAK;;AAE/B,IAAI,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,eAAe,EAAE;AAChD,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,OAAO,IAAI;AAC3D,IAAI;;AAEJ,IAAI,OAAO,KAAK;AAChB,EAAE;;AAEF;AACA;AACA;AACA,EAAE,gBAAgB,CAAC,GAAG,EAAE;AACxB,IAAI,IAAI;AACR;AACA,MAAM,IAAI,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,WAAW;;AAE3D;AACA,MAAM,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG;AACpE,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC;AACxC,MAAM,OAAO,MAAM,CAAC,QAAQ;AAC5B,IAAI,CAAC,CAAC,MAAM;AACZ,MAAM,OAAO,IAAI;AACjB,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE;AAClC;AACA,IAAI,IAAI,QAAQ,KAAK,OAAO,EAAE,OAAO,IAAI;;AAEzC;AACA,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AAClC,MAAM,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC1C,MAAM,OAAO,QAAQ,KAAK,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,GAAG,MAAM,CAAC;AACnE,IAAI;;AAEJ,IAAI,OAAO,KAAK;AAChB,EAAE;;AAEF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,iBAAiB,GAAG;AACtB,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;;AAE3B,IAAI,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,OAAO,IAAI,CAAC,UAAU;;AAE/D,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACxB,MAAM,MAAM,CAAC,OAAO,CAAC,0DAA0D,CAAC;AAChF,MAAM,OAAO,IAAI,CAAC,UAAU;AAC5B,IAAI;;AAEJ,IAAI,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM;AACnC,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC,UAAU;;AAExC;AACA,IAAI,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;;AAEpC,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AAC9B,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;;AAEjC,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;;AAE9C;AACA,MAAM,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;AAC1C,MAAM,IAAI,OAAO,KAAK,EAAE,EAAE;;AAE1B,MAAM,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE;AAC7E,MAAM,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;;AAEvD,MAAM,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE;;AAE5B;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;AAClC,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,wCAAwC,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACpF,QAAQ;AACR,MAAM;;AAEN;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE;AACvC,QAAQ,MAAM,CAAC,MAAM;AACrB,UAAU,CAAC,wBAAwB,EAAE,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,IAAI,CAAC;AACvE,UAAU,CAAC,8BAA8B,CAAC;AAC1C,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACxD,SAAS;AACT,QAAQ;AACR,MAAM;;AAEN,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC;AACvC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,+BAA+B,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1E,IAAI;;AAEJ,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE;AAClC,MAAM,MAAM,CAAC,MAAM;AACnB,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC;AACpE,QAAQ,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI;AAC7C,OAAO;AACP,IAAI;;AAEJ,IAAI,OAAO,IAAI,CAAC,UAAU;AAC1B,EAAE;;AAEF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,IAAI,EAAE;AACpB,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,OAAO,IAAI;;AAEjE,IAAI,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AAC5B,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;AACvD,MAAM,IAAI,WAAW,EAAE;AACvB,QAAQ,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG;AAClC,QAAQ,GAAG,CAAC,GAAG,GAAG,WAAW;AAC7B,QAAQ,MAAM,CAAC,MAAM;AACrB,UAAU,CAAC,eAAe,EAAE,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC;AACvF,SAAS;AACT,MAAM;AACN,IAAI;;AAEJ;AACA,IAAI,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE;AACzD,MAAM,IAAI,CAAC,sBAAsB,EAAE;AACnC,IAAI;;AAEJ,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,OAAO,EAAE;AAC1B,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI;AAC/C,EAAE;;AAEF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE;AAClC,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE;AAC1B,MAAM,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC;AACnE,IAAI;;AAEJ,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACxB,MAAM,MAAM,IAAI,KAAK;AACrB,QAAQ,4DAA4D;AACpE,QAAQ;AACR,OAAO;AACP,IAAI;;AAEJ,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;AAChC,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1D,IAAI;;AAEJ,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE;AACrC,MAAM,MAAM,IAAI,KAAK;AACrB,QAAQ,CAAC,mCAAmC,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AAC7E,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACtD,OAAO;AACP,IAAI;;AAEJ,IAAI,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;AAC3C,IAAI,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,GAAG;;AAEpC;AACA,IAAI,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACzC,MAAM,QAAQ,CAAC,MAAM;AACrB,QAAQ,CAAC,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,cAAc,CAAC;AAC1F,IAAI;;AAEJ;AACA,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC;;AAErC;AACA,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE;AAC7B,MAAM,IAAI,CAAC,sBAAsB,EAAE;AACnC,IAAI;;AAEJ,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,4BAA4B,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AAC5F,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,CAAC,OAAO,EAAE;AAClB;AACA,IAAI,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACzC,MAAM,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC;AACxE,IAAI;;AAEJ,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC;;AAEnC;AACA,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE;AAC7B,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE;AACtC,QAAQ,IAAI,CAAC,wBAAwB,EAAE;AACvC,MAAM,CAAC,MAAM;AACb,QAAQ,IAAI,CAAC,sBAAsB,EAAE;AACrC,MAAM;AACN,IAAI;;AAEJ,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,gCAAgC,EAAE,OAAO,CAAC,CAAC,CAAC;AAC/D,EAAE;;AAEF;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE;AACvD,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AAC1B,IAAI;;AAEJ,IAAI,IAAI,CAAC,wBAAwB,EAAE;;AAEnC,IAAI,MAAM,CAAC,MAAM,CAAC,qCAAqC,CAAC;AACxD,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,GAAG;AACX,IAAI,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;AAC9C,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,GAAG;AACjB,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC;AACnC,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,GAAG;AACd,IAAI,OAAO,IAAI,CAAC,QAAQ;AACxB,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,MAAM,GAAG,EAAE,EAAE;AACzB,IAAI,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE;AACtC,MAAM,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO;AACpC,IAAI;AACJ,IAAI,IAAI,MAAM,CAAC,cAAc,EAAE;AAC/B,MAAM,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,cAAc;AAClD,IAAI;AACJ,IAAI,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE;AAC5C,MAAM,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,aAAa;AAChD,IAAI;;AAEJ;AACA,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;AACvB,MAAM,IAAI,CAAC,iBAAiB,EAAE;AAC9B,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,OAAO,GAAG;AACZ,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC5B,EAAE;;AAEF;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE,sBAAsB,GAAG;AAC3B,IAAI,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;;AAEzC;AACA,IAAI,IAAI,CAAC,wBAAwB,EAAE;;AAEnC,IAAI,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACnD,IAAI,SAAS,CAAC,EAAE,GAAG,uBAAuB;;AAE1C,IAAI,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AACtD,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAC9C,OAAO,IAAI,CAAC,KAAK,CAAC;;AAElB,IAAI,SAAS,CAAC,WAAW,GAAG,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC;;AAEjE,IAAI,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG;AAC9B,MAAM,iBAAiB;AACvB,MAAM,WAAW;AACjB,MAAM,SAAS;AACf,MAAM,UAAU;AAChB,MAAM,qBAAqB;AAC3B,MAAM,qBAAqB;AAC3B,MAAM,aAAa;AACnB,MAAM,wBAAwB;AAC9B,MAAM,iBAAiB;AACvB,MAAM,mBAAmB;AACzB,MAAM,mBAAmB;AACzB,MAAM,oBAAoB;AAC1B,MAAM,iBAAiB;AACvB,MAAM,mBAAmB;AACzB,MAAM;AACN,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;;AAEf;AACA,IAAI,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM;AAC9C,MAAM,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AACtC,IAAI,CAAC,CAAC;;AAEN;AACA,IAAI,SAAS,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,CAAC,KAAK;AAClD,MAAM,CAAC,CAAC,cAAc,EAAE;AACxB,MAAM,IAAI,CAAC,QAAQ,EAAE;AACrB,IAAI,CAAC,CAAC;;AAEN,IAAI,SAAS,CAAC,KAAK,GAAG,qDAAqD;;AAE3E,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;AACxC,IAAI,IAAI,CAAC,iBAAiB,GAAG,SAAS;AACtC,EAAE;;AAEF;AACA;AACA;AACA,EAAE,wBAAwB,GAAG;AAC7B,IAAI,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAChC,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;AACrC,MAAM,IAAI,CAAC,iBAAiB,GAAG,IAAI;AACnC,IAAI;AACJ;AACA,IAAI,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACzC,MAAM,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC;AACvE,MAAM,IAAI,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE;AACrC,IAAI;AACJ,EAAE;;AAEF;;AAEA,EAAE,WAAW,CAAC,GAAG,EAAE;AACnB;AACA,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACzF,MAAM,OAAO,IAAI;AACjB,IAAI;AACJ;AACA,IAAI,IAAI,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AACvC,MAAM,OAAO,IAAI;AACjB,IAAI;AACJ,IAAI,OAAO,KAAK;AAChB,EAAE;;AAEF;;AAEA,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO;AACX,MAAM,OAAO,EAAE,IAAI,CAAC,QAAQ;AAC5B,MAAM,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI;AAC3C,MAAM,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE;AAC9B,MAAM,cAAc,EAAE,IAAI,CAAC,eAAe;AAC1C,MAAM,aAAa,EAAE,IAAI,CAAC,cAAc;AACxC,MAAM,WAAW,EAAE,IAAI,CAAC,iBAAiB,EAAE,GAAG,aAAa,GAAG;AAC9D,KAAK;AACL,EAAE;AACF;;AC7fA;AACA;AACA;AACA;;;AAwBO,MAAM,MAAM,CAAC;AACpB,EAAE,WAAW,CAAC,OAAO,GAAG,EAAE,EAAE;AAC5B;AACA,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;AAC1B,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;AACjC,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;AAC/B,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;AAC7B,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;AAC5B,IAAI,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,EAAE,CAAC;AACtC,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,EAAE,CAAC;AACvC,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;AACpC,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;AACpC;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;;AAEhC;AACA,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,SAAS,EAAE;AAClC,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,UAAU,EAAE;AACpC,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK;;AAEtB;AACA;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI;AAC1B,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI;AAC9B,IAAI,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAChC;AACA;AACA,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI;;AAEtB;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AACrE,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,UAAU,EAAE;AACpC,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,aAAa,EAAE;;AAE1C;AACA,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC;AAChD,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC;AACjD,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC;AAClD,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC;AAC3C,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC;AAC1C,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,WAAW,EAAE;;AAEtC;AACA,IAAI,IAAI,CAAC,aAAa,GAAG,KAAK;;AAE9B,IAAI,MAAM,CAAC,MAAM,CAAC,qDAAqD,CAAC;AACxE,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE;AACrB,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE;AAC5B,MAAM,MAAM,CAAC,MAAM,CAAC,+BAA+B,CAAC;AACpD,MAAM;AACN,IAAI;;AAEJ;AACA,IAAI,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,IAAI,QAAQ;AAClD;AACA;AACA,IAAI,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,cAAc,KAAK,KAAK;;AAE1D,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,uBAAuB,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;;AAEhH,IAAI,IAAI;AACR;AACA,MAAM,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC;AACjF,MAAM,IAAI,gBAAgB,CAAC,SAAS,EAAE;AACtC,QAAQ,MAAM,CAAC,MAAM,CAAC,6CAA6C,CAAC;AACpE,QAAQ;AACR,MAAM;;AAEN;AACA,MAAM,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC;;AAEhE;AACA,MAAM,IAAI,MAAM,CAAC,SAAS,EAAE;AAC5B,QAAQ,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;AAClD,MAAM;AACN,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE;AACpC,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AAC9B,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC;;AAEtC;AACA,MAAM,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE;AACpC,QAAQ,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;AACzC,MAAM;;AAEN;AACA,MAAM,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;;AAEtD,MAAM,IAAI,CAAC,aAAa,GAAG,IAAI;;AAE/B;AACA,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC;;AAEvD;AACA,MAAM,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC;;AAE/D,MAAM,MAAM,CAAC,MAAM,CAAC,oCAAoC,CAAC;AACzD,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,OAAO,CAAC,wBAAwB,EAAE,KAAK,CAAC;;AAErD;AACA,MAAM,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;;AAE3E,MAAM,MAAM,KAAK;AACjB,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,MAAM,WAAW,CAAC,SAAS,EAAE;AAC/B,IAAI,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,SAAS;;AAEnC,IAAI,IAAI;AACR,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,iBAAiB,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;;AAE5D;AACA,MAAM,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;AACxD,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC;;AAE5C;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;AAC1B,QAAQ,GAAG,SAAS;AACpB,QAAQ,QAAQ,EAAE,YAAY;AAC9B,QAAQ,MAAM,EAAE;AAChB,OAAO,CAAC;;AAER,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;AAC3D,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AAC9D,MAAM,MAAM,KAAK;AACjB,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE;AAC7B,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AAC1B,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,sCAAsC,EAAE,OAAO,CAAC,CAAC,CAAC;AACzE,IAAI;;AAEJ,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC;;AAE5C;AACA;AACA,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;AACnD,IAAI,IAAI,MAAM,EAAE;AAChB,MAAM,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC;AAChC,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC;AACzC,MAAM,MAAM,CAAC,OAAO,EAAE;AACtB,IAAI;;AAEJ;AACA,IAAI,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,cAAc,EAAE;AAClD,MAAM,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AAC9C,KAAK,CAAC;AACN,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;;AAE/B,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC,CAAC;AACvD,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,KAAK,CAAC,OAAO,EAAE,iBAAiB,EAAE;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;AACtD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,GAAG,CAAC,CAAC;AAC9C,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;;AAE1E,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAC5C,MAAM,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACtD,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC;AAC3C,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,sCAAsC,CAAC,CAAC;AACxE,IAAI;;AAEJ;AACA,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACnC,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AAChD,MAAM,IAAI,QAAQ,CAAC,iBAAiB,KAAK,iBAAiB,EAAE;AAC5D,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAC5E,QAAQ;AACR,MAAM;AACN,IAAI;;AAEJ;AACA,IAAI,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,yCAAyC,CAAC,CAAC;AAC3E,MAAM,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;AACtD,IAAI;;AAEJ;AACA,IAAI,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;AAChD,IAAI,IAAI,WAAW,EAAE;AACrB,MAAM,IAAI,WAAW,CAAC,iBAAiB,KAAK,iBAAiB,EAAE;AAC/D;AACA,QAAQ,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AACvC,MAAM;AACN;AACA,MAAM,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACxC,IAAI;;AAEJ;AACA,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;AAC9E,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC;;AAErD,IAAI,IAAI;AACR,MAAM,OAAO,MAAM,YAAY;AAC/B,IAAI,CAAC,SAAS;AACd,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC;AAC5C,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA,EAAE,MAAM,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,EAAE,OAAO,GAAG,CAAC,EAAE;AACnE,IAAI,MAAM,WAAW,GAAG,CAAC;;AAEzB,IAAI,IAAI;AACR;AACA,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC;;AAErD,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,iBAAiB,CAAC,UAAU,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;;AAE5F;AACA,MAAM,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC;AAC9G,MAAM,IAAI,gBAAgB,CAAC,SAAS,EAAE;AACtC,QAAQ,MAAM,CAAC,MAAM,CAAC,oCAAoC,CAAC;AAC3D,QAAQ;AACR,MAAM;;AAEN;AACA,MAAM,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAC/G,MAAM,IAAI,iBAAiB,KAAK,KAAK,EAAE;AACvC,QAAQ,MAAM,CAAC,MAAM,CAAC,4CAA4C,CAAC;AACnE,QAAQ;AACR,MAAM;;AAEN;AACA,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;AACxC,MAAM,IAAI,CAAC,GAAG,EAAE;AAChB,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,sCAAsC,CAAC,CAAC;AAC/E,MAAM;;AAEN;AACA,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAC;AACjE,MAAM,IAAI,CAAC,SAAS,EAAE;AACtB,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,qBAAqB,EAAE,iBAAiB,CAAC,CAAC,CAAC;AACpE,MAAM;;AAEN;AACA,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE;AAC9D,QAAQ,QAAQ,EAAE,GAAG,CAAC,QAAQ;AAC9B,QAAQ,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,SAAS;AAC1C,QAAQ,MAAM,EAAE,GAAG,CAAC,GAAG;AACvB,OAAO,CAAC;;AAER;AACA,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC;;AAEpF;AACA,MAAM,IAAI,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;AACnD,MAAM,IAAI,CAAC,SAAS,EAAE;AACtB;AACA,QAAQ,MAAM,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,OAAO,CAAC;AACtD,QAAQ,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;;AAEjD,QAAQ,IAAI,CAAC,SAAS,EAAE;AACxB,UAAU,MAAM,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,kCAAkC,CAAC,CAAC;AAC7E,QAAQ;AACR,MAAM;;AAEN;AACA,MAAM,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAC3H,MAAM,IAAI,iBAAiB,CAAC,SAAS,EAAE;AACvC,QAAQ,MAAM,CAAC,MAAM,CAAC,qCAAqC,CAAC;AAC5D,QAAQ;AACR,MAAM;;AAEN;AACA,MAAM,IAAI,OAAO,CAAC,WAAW,EAAE;AAC/B,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,mCAAmC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AAC1E,QAAQ,MAAM,OAAO,CAAC,WAAW;AACjC,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC;AACrD,MAAM;;AAEN;AACA,MAAM,MAAM,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;;AAE9C;AACA,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE;AAChC,QAAQ,GAAG;AACX,QAAQ,OAAO;AACf,QAAQ,SAAS;AACjB,QAAQ,SAAS,EAAE,OAAO,CAAC,SAAS;AACpC,QAAQ,aAAa,EAAE,SAAS;AAChC,QAAQ,iBAAiB;AACzB,QAAQ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AAC7B,QAAQ,KAAK,EAAE;AACf,OAAO,CAAC;;AAER;AACA,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC;;AAErE;AACA,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;;AAEhG;AACA,MAAM,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC;;AAE/F;AACA,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;;AAErF,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,yBAAyB,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;;AAEnF,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,OAAO,GAAG,CAAC,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;;AAElF;AACA,MAAM,IAAI;AACV,QAAQ,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAC3F,UAAU,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;AACxD,UAAU,IAAI,EAAE,IAAI,EAAE,CAAC,YAAY,EAAE;AACrC,YAAY,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE;AACxC,UAAU;AACV,UAAU,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;AAChD,UAAU,MAAM,CAAC,OAAO,CAAC,CAAC,2CAA2C,EAAE,OAAO,CAAC,CAAC,CAAC;AACjF,QAAQ;AACR,MAAM,CAAC,CAAC,OAAO,YAAY,EAAE;AAC7B,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC;AAC7E,MAAM;;AAEN;AACA,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE;AACjE,QAAQ,OAAO;AACf,QAAQ,iBAAiB;AACzB,QAAQ,UAAU,EAAE,OAAO;AAC3B,QAAQ,SAAS,EAAE;AACnB,OAAO,CAAC;;AAER;AACA,MAAM,IAAI,WAAW,CAAC,SAAS,EAAE;AACjC,QAAQ,MAAM,CAAC,OAAO,CAAC,mCAAmC,CAAC;AAC3D,QAAQ;AACR,MAAM;;AAEN;AACA,MAAM,IAAI,OAAO,GAAG,WAAW,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,OAAO,EAAE;AACvE,QAAQ,MAAM,CAAC,OAAO,CAAC,iCAAiC,CAAC;;AAEzD;AACA,QAAQ,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,iBAAiB,CAAC;;AAE9D;AACA,QAAQ,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,IAAI,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;;AAE/E;AACA,QAAQ,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,EAAE,OAAO,GAAG,CAAC,CAAC;AACpF,MAAM;;AAEN;AACA,MAAM,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;;AAErF;AACA,MAAM,MAAM,KAAK;AACjB,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA,EAAE,MAAM,eAAe,CAAC,OAAO,EAAE,iBAAiB,EAAE;AACpD,IAAI,IAAI;AACR,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,+BAA+B,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;;AAEpE;AACA,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACpC,QAAQ,IAAI;AACZ,UAAU,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AAC5C,QAAQ,CAAC,CAAC,OAAO,WAAW,EAAE;AAC9B,UAAU,MAAM,CAAC,MAAM,CAAC,4BAA4B,EAAE,WAAW,CAAC;AAClE,QAAQ;AACR,MAAM;;AAEN;AACA,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACrC,QAAQ,IAAI;AACZ,UAAU,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACtD,QAAQ,CAAC,CAAC,OAAO,YAAY,EAAE;AAC/B,UAAU,MAAM,CAAC,MAAM,CAAC,gCAAgC,EAAE,YAAY,CAAC;AACvE,QAAQ;AACR,MAAM;;AAEN;AACA,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAC;AACjE,MAAM,IAAI,SAAS,EAAE;AACrB;AACA,QAAQ,IAAI,SAAS,CAAC,UAAU,EAAE;AAClC,UAAU,IAAI;AACd;AACA,YAAY,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC;AAC5E,YAAY,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI;AAC5C,cAAc,IAAI;AAClB,gBAAgB,KAAK,CAAC,MAAM,EAAE;AAC9B,cAAc,CAAC,CAAC,OAAO,WAAW,EAAE;AACpC,gBAAgB,MAAM,CAAC,MAAM,CAAC,gCAAgC,EAAE,WAAW,CAAC;AAC5E,cAAc;AACd,YAAY,CAAC,CAAC;AACd,UAAU,CAAC,CAAC,OAAO,WAAW,EAAE;AAChC,YAAY,MAAM,CAAC,MAAM,CAAC,6BAA6B,EAAE,WAAW,CAAC;AACrE,UAAU;AACV,QAAQ;;AAER;AACA,QAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACpE,UAAU,IAAI;AACd,YAAY,SAAS,CAAC,SAAS,GAAG,EAAE;AACpC,UAAU,CAAC,CAAC,OAAO,SAAS,EAAE;AAC9B,YAAY,MAAM,CAAC,MAAM,CAAC,qCAAqC,EAAE,SAAS,CAAC;AAC3E,UAAU;AACV,QAAQ;;AAER;AACA,QAAQ,SAAS,CAAC,eAAe,CAAC,aAAa,CAAC;AAChD,QAAQ,SAAS,CAAC,eAAe,CAAC,oBAAoB,CAAC;AACvD,QAAQ,SAAS,CAAC,eAAe,CAAC,UAAU,CAAC;AAC7C,MAAM;;AAEN;AACA,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC;;AAEtC;AACA,MAAM,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAClD,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;AAC9C,MAAM;;AAEN,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,mCAAmC,EAAE,OAAO,CAAC,CAAC,CAAC;;AAErE,IAAI,CAAC,CAAC,OAAO,YAAY,EAAE;AAC3B,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,gCAAgC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC;;AAEhF;AACA,MAAM,IAAI;AACV,QAAQ,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAC;AACnE,QAAQ,IAAI,SAAS,EAAE;AACvB,UAAU,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAC1C,UAAU,UAAU,CAAC,MAAM;AAC3B,YAAY,IAAI,SAAS,EAAE;AAC3B,cAAc,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE;AAC1C,YAAY;AACZ,UAAU,CAAC,EAAE,GAAG,CAAC;AACjB,QAAQ;AACR,MAAM,CAAC,CAAC,OAAO,cAAc,EAAE;AAC/B,QAAQ,MAAM,CAAC,OAAO,CAAC,2BAA2B,EAAE,cAAc,CAAC;AACnE,MAAM;AACN,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,qBAAqB,CAAC,GAAG,EAAE,OAAO,EAAE;AAC5C,IAAI,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,YAAY,IAAI,QAAQ;AACtE;AACA,IAAI,OAAO,CAAC,cAAc,GAAG,aAAa;AAC1C,IAAI,OAAO,CAAC,WAAW,GAAG,aAAa;;AAEvC,IAAI,IAAI,aAAa,KAAK,QAAQ,EAAE;AACpC,MAAM,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AAC1C,IAAI,CAAC,MAAM,IAAI,aAAa,KAAK,MAAM,EAAE;AACzC,MAAM,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC;AACxC,IAAI,CAAC,MAAM;AACX,MAAM,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AAC1C,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE;AAC7B,IAAI,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE,CAAC,YAAY,KAAK,UAAU,IAAI,CAAC,OAAO,EAAE;AAClE,IAAI,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC;AAC3C,EAAE;;AAEF,EAAE,cAAc,CAAC,OAAO,EAAE;AAC1B,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;AACzE,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI;AAC7B,IAAI,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO;AAC9B,IAAI,MAAM,UAAU,GAAG,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,cAAc,IAAI,QAAQ;AACtE,IAAI,MAAM,cAAc;AACxB,MAAM,UAAU,KAAK,QAAQ,GAAG,QAAQ;AACxC,MAAM,UAAU,KAAK,MAAM,GAAG,YAAY;AAC1C,MAAM,MAAM;AACZ,IAAI,OAAO;AACX,MAAM,aAAa,EAAE,EAAE,CAAC,cAAc,IAAI,QAAQ;AAClD,MAAM,UAAU;AAChB,MAAM,cAAc;AACpB,MAAM,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AACxC,KAAK;AACL,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,MAAM,yBAAyB,GAAG;AACpC,IAAI,IAAI,IAAI,CAAC,gBAAgB,EAAE,OAAO,IAAI,CAAC,gBAAgB;AAC3D,IAAI,MAAM,GAAG,GAAG,MAAM,OAAO,6BAAwB,CAAC;AACtD,IAAI,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,eAAe;AAC/C,IAAI,OAAO,IAAI,CAAC,gBAAgB;AAChC,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,eAAe,GAAG;AAC1B,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAC1B,MAAM,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,OAAO,0BAAqB,CAAC;AAClE,MAAM,IAAI,CAAC,UAAU,GAAG,IAAI,YAAY,EAAE;AAC1C,IAAI;AACJ,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC9B,MAAM,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,OAAO,8BAAyB,CAAC;AAC1E,MAAM,IAAI,CAAC,cAAc,GAAG,IAAI,gBAAgB,EAAE;AAClD,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,aAAa,GAAG;AACxB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACtB,MAAM,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,OAAO,qBAAgB,CAAC;AACzD,MAAM,IAAI,CAAC,MAAM,GAAG,IAAI,QAAQ,EAAE;AAClC,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE;AAClC,IAAI,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;AACvD,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,4BAA4B,EAAE,SAAS,CAAC,CAAC,CAAC;;AAE9D,IAAI,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS;AACvC,IAAI,IAAI,SAAS,EAAE,WAAW,EAAE;AAChC,MAAM,SAAS,CAAC,WAAW,EAAE;AAC7B,IAAI;;AAEJ,IAAI,IAAI;AACR,MAAM,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC;AAClD,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,2BAA2B,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9D,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AACpE,MAAM,MAAM,KAAK;AACjB,IAAI,CAAC,SAAS;AACd,MAAM,IAAI,SAAS,EAAE,aAAa,EAAE;AACpC,QAAQ,SAAS,CAAC,aAAa,EAAE;AACjC,MAAM;AACN,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE;AAClC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,iBAAiB,EAAE,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;;AAErE;AACA,IAAI,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,yBAAyB,EAAE;AAChE,IAAI,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AACrD,IAAI,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC;AAC1E,IAAI,OAAO,CAAC,aAAa,GAAG,aAAa;;AAEzC,IAAI,IAAI;AACR;AACA,MAAM,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;AACzD,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,qCAAqC,EAAE,SAAS,CAAC,CAAC,CAAC;;AAEzE;AACA,MAAM,MAAM,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC;AACjD,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,6BAA6B,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;;AAEhE,IAAI,CAAC,CAAC,OAAO,WAAW,EAAE;AAC1B;AACA;AACA,MAAM,MAAM,eAAe;AAC3B,QAAQ,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI;;AAE1D;AACA,MAAM,aAAa,CAAC,OAAO,EAAE;AAC7B,MAAM,OAAO,CAAC,aAAa,GAAG,IAAI;;AAElC,MAAM,IAAI,CAAC,eAAe,EAAE;AAC5B;AACA,QAAQ,MAAM,IAAI,KAAK;AACvB,UAAU,CAAC,mCAAmC,EAAE,GAAG,CAAC,IAAI,CAAC,mCAAmC,CAAC;AAC7F,UAAU,CAAC,gBAAgB,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;AACpD,UAAU,CAAC,4EAA4E,CAAC;AACxF,UAAU,CAAC,6EAA6E;AACxF,SAAS;AACT,MAAM;;AAEN,MAAM,MAAM,CAAC,MAAM;AACnB,QAAQ,CAAC,kCAAkC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;AACjF,QAAQ,CAAC,iEAAiE,CAAC;AAC3E,QAAQ,CAAC,kFAAkF,CAAC;AAC5F,QAAQ,CAAC,yDAAyD,CAAC;AACnE,QAAQ,CAAC,0EAA0E;AACnF,OAAO;;AAEP;AACA,MAAM,OAAO,CAAC,WAAW,GAAG,MAAM;AAClC,MAAM,OAAO,CAAC,mBAAmB,GAAG,IAAI;;AAExC;AACA,MAAM,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC;AACxC,MAAM;AACN,IAAI;;AAEJ;AACA,IAAI,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC;;AAEjD,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;AAC3E,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE;AAChC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,eAAe,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;;AAEhE,IAAI,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS;AACvC,IAAI,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,EAAE;;AAEtC,IAAI,IAAI,CAAC,KAAK,EAAE;AAChB,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,2BAA2B,EAAE,GAAG,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;AACjG,IAAI;;AAEJ;AACA,IAAI,MAAM,IAAI,CAAC,eAAe,EAAE;;AAEhC;AACA,IAAI,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC;;AAEzE;AACA,IAAI,IAAI,MAAM,CAAC,GAAG,EAAE;AACpB,MAAM,OAAO,CAAC,SAAS,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG;AAC9C,IAAI;;AAEJ;AACA,IAAI,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,SAAS;;AAE/D,IAAI,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;AAChD,MAAM,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AACnD,MAAM,KAAK,CAAC,WAAW,GAAG,OAAO;AACjC,MAAM,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC;AACpC,IAAI;;AAEJ,IAAI,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;AAC/C,MAAM,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AACjD,MAAM,IAAI,CAAC,GAAG,GAAG,YAAY;AAC7B,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI;AACtB,MAAM,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC;AACnC,IAAI;;AAEJ;AACA,IAAI,MAAM,OAAO,GAAG,EAAE;AACtB,IAAI,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;AACjD,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;AAC/B,IAAI;AACJ,IAAI,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE;AAC/C,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;AAC3B,IAAI;;AAEJ,IAAI,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;AAClE,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,4BAA4B,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;;AAE7D;AACA,IAAI,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC;;AAE/C,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAC9D,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,KAAK,EAAE;AACrD,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,OAAO,CAAC,OAAO,EAAE;;AAE/D;AACA,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;AACrD,IAAI,IAAI,QAAQ,EAAE,OAAO,QAAQ,CAAC,OAAO;;AAEzC,IAAI,IAAI,SAAS;AACjB,IAAI,IAAI,QAAQ;AAChB,IAAI,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AACrD,MAAM,SAAS,GAAG,OAAO;AACzB,MAAM,QAAQ,GAAG,MAAM;AACvB,IAAI,CAAC,CAAC;;AAEN,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM;AACnC,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;AAC/C,QAAQ,QAAQ,CAAC,IAAI,KAAK;AAC1B,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,+CAA+C,EAAE,WAAW,CAAC,KAAK,CAAC;AACvG,UAAU,CAAC,4CAA4C,EAAE,OAAO,CAAC,sBAAsB;AACvF,SAAS,CAAC;AACV,MAAM;AACN,IAAI,CAAC,EAAE,WAAW,CAAC;;AAEnB,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC9F,IAAI,OAAO,OAAO;AAClB,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAmB,CAAC,OAAO,EAAE;AAC/B,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;AACnD,IAAI,IAAI,CAAC,MAAM,EAAE;AACjB,IAAI,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC;AAC9B,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC;AACvC,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,MAAM,iBAAiB,CAAC,GAAG,EAAE;AAC/B,IAAI,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,EAAE,KAAK,IAAI,SAAS;AACtD,IAAI,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;;AAE/C;AACA;AACA,IAAI,MAAM,eAAe,GAAG,0CAA0C,CAAC,IAAI,CAAC,SAAS,CAAC;;AAEtF,IAAI,IAAI,eAAe,EAAE;AACzB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,iCAAiC,EAAE,SAAS,CAAC,CAAC,CAAC;AACrE;AACA,MAAM,MAAM,UAAU,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAClD,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC,CAAC;AACxD,MAAM,OAAO,UAAU;AACvB,IAAI;;AAEJ;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;AAC/C,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC;AACpD,IAAI,IAAI,MAAM,EAAE;AAChB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,+BAA+B,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AAC7E,MAAM,OAAO,MAAM;AACnB,IAAI;;AAEJ;AACA,IAAI,MAAM,cAAc,GAAG;AAC3B,MAAM,CAAC,EAAE,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACnC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAC/B,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACpC,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACtC,MAAM,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACrC,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACtC,MAAM,CAAC,EAAE,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACnC,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAClC,KAAK;;AAEL,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,mBAAmB,EAAE,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;;AAE7E;AACA;AACA;AACA,IAAI,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG;AACrC,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;AAC1B,QAAQ,IAAI,CAAC,YAAY,CAAC,CAAC;AAC3B,WAAW,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;AACrC,WAAW,KAAK,CAAC,MAAM,IAAI;AAC3B;AACA,KAAK;;AAEL,IAAI,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AAClD,IAAI,IAAI,QAAQ,EAAE;AAClB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,4BAA4B,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC/D,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACjD,MAAM,OAAO,QAAQ;AACrB,IAAI;;AAEJ;AACA,IAAI,MAAM,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC;AAC1C,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,4CAA4C,EAAE,YAAY,CAAC,CAAC,CAAC;AAChF,IAAI,OAAO,YAAY;AACvB,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,YAAY,CAAC,GAAG,EAAE;AAC1B,IAAI,IAAI;AACR,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC;;AAE5C,MAAM,IAAI,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;AACtC,QAAQ,MAAM,EAAE,MAAM;AACtB,QAAQ,KAAK,EAAE,UAAU;AACzB,QAAQ,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI;AACxC,OAAO,CAAC;;AAER;AACA;AACA,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;AAC9D,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAC,CAAC;AACrG,QAAQ,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;AACpC,UAAU,MAAM,EAAE,KAAK;AACvB,UAAU,KAAK,EAAE,UAAU;AAC3B,UAAU,OAAO,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;AAC3C,UAAU,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI;AAC1C,SAAS,CAAC;AACV,MAAM;;AAEN,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;AACnD,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,8BAA8B,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;AAClF,QAAQ,OAAO,KAAK;AACpB,MAAM;;AAEN,MAAM,MAAM,WAAW,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE;;AAEpF;AACA;AACA,MAAM,IAAI,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;AAC/C,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,iDAAiD,EAAE,GAAG,CAAC,CAAC,CAAC;AACjF,QAAQ,OAAO,KAAK;AACpB,MAAM;;AAEN;AACA;AACA,MAAM,MAAM,YAAY;AACxB,QAAQ,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC;AAC1C,QAAQ,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACtC,QAAQ,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC;AAC1C,QAAQ,WAAW,KAAK,EAAE;AAC1B,QAAQ,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC3B,QAAQ,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;;AAE5B,MAAM,IAAI,CAAC,YAAY,EAAE;AACzB,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,8CAA8C,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAC/F,QAAQ,OAAO,KAAK;AACpB,MAAM;;AAEN,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,OAAO,IAAI;;AAEjB,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB;AACA,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,2BAA2B,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAC3E,MAAM,OAAO,KAAK;AAClB,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE;AACzC;AACA,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACvC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;AACzD,MAAM;AACN,IAAI;;AAEJ,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,mCAAmC,EAAE,OAAO,CAAC,CAAC,CAAC;;AAEnE;AACA;AACA,IAAI,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC;;AAEhE,IAAI,IAAI;AACR,MAAM,MAAM,0BAA0B,SAAS,CAAC;AAChD,IAAI,CAAC,CAAC,OAAO,SAAS,EAAE;AACxB,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;AACvC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;AACxE,MAAM,MAAM,SAAS;AACrB,IAAI;;AAEJ,IAAI,MAAM,aAAa;AACvB,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,gDAAgD,CAAC,CAAC;AACpF,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,EAAE,EAAE;AACvC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;;AAE3C,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AAC7C,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB;AACA,MAAM,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACrD,QAAQ,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC;AACvC,QAAQ,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACjD,MAAM;AACN,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;AACjD,MAAM;AACN,IAAI;;AAEJ;AACA,IAAI,MAAM,SAAS,GAAG,OAAO,CAAC;AAC9B,QAAQ;AACR,SAAS,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,SAAS,IAAI,KAAK,CAAC;;AAE9D,IAAI,IAAI,SAAS,EAAE;AACnB,MAAM,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AACrC,IAAI;;AAEJ;AACA,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE;AACvB,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC;AACrC,MAAM,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAC9C,QAAQ,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACxD,QAAQ,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC;AAC7C,MAAM;AACN,MAAM,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC;AACzD,IAAI;;AAEJ;AACA;AACA;AACA;AACA,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;AAClD,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC;AACzB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACnD,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;;AAEhE,IAAI,IAAI,IAAI,GAAG,CAAC,EAAE;AAClB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC/E,MAAM;AACN,IAAI;;AAEJ,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAC5C,MAAM,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACtD,IAAI;;AAEJ,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,YAAY;AAC9D,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC;AAC3C;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACnD;AACA,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,OAAO,EAAE;AAC9E,QAAQ,IAAI;AACZ,UAAU,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC;AACtD,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC;AACzC,QAAQ,CAAC,CAAC,OAAO,KAAK,EAAE;AACxB,UAAU,MAAM,CAAC,OAAO,CAAC,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AAC1E,QAAQ;AACR,MAAM;AACN,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AACX,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE;AAC1C,IAAI,IAAI;AACR;AACA,MAAM,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACjG,MAAM,IAAI,mBAAmB,CAAC,SAAS,EAAE;AACzC,QAAQ,MAAM,CAAC,MAAM,CAAC,yCAAyC,CAAC;AAChE,QAAQ;AACR,MAAM;;AAEN;AACA,MAAM,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,CAAC;AAChG,MAAM,IAAI,mBAAmB,KAAK,KAAK,EAAE;AACzC,QAAQ,MAAM,CAAC,MAAM,CAAC,gDAAgD,CAAC;AACvE,QAAQ;AACR,MAAM;;AAEN;AACA,MAAM,IAAI,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE;AACtC,QAAQ,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;AAC1D,MAAM;;AAEN;AACA,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE;AACzC,QAAQ,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE;AAC/C,QAAQ,OAAO,CAAC,OAAO,CAAC,aAAa,GAAG,IAAI;AAC5C,MAAM;;AAEN;AACA,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;;AAE3C;AACA,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;;AAElC;AACA,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,CAAC;;AAE3D;AACA,MAAM,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,CAAC;;AAEnE;AACA,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;;AAEnE,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;AACzD,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;;AAE5D;AACA,MAAM,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;;AAEvF;AACA,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;AACrF,MAAM,MAAM,KAAK;AACjB,IAAI;AACJ,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,IAAI,CAAC,OAAO,EAAE;AACtB,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AAC7C,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;AAC1D,MAAM;AACN,IAAI;;AAEJ,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;;AAEpD;AACA,IAAI,IAAI,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE;AACvC,MAAM,IAAI;AACV,QAAQ,MAAM,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC;AAC7D,MAAM,CAAC,CAAC,OAAO,GAAG,EAAE;AACpB,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;AACjE,MAAM;AACN,IAAI;;AAEJ;AACA,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACpF,IAAI,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;;AAEnF;AACA,IAAI,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAChD,IAAI,OAAO,CAAC,KAAK,GAAG,QAAQ;AAC5B,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE;;AAEjC;AACA,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;AACrC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;;AAEhC;AACA,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC1E,IAAI,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;;AAElF;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;;AAE9D,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,sCAAsC,CAAC,CAAC;AACrE,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,IAAI,CAAC,OAAO,EAAE;AACtB,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;AAC3C,IAAI,IAAI,CAAC,MAAM,EAAE;AACjB,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC;AACtE,MAAM;AACN,IAAI;;AAEJ,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC;AAClD,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;;AAExD;AACA,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE;AAC5C,MAAM,OAAO;AACb,MAAM,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;AACjD,MAAM,OAAO,EAAE,MAAM,CAAC,OAAO;AAC7B,MAAM,SAAS,EAAE,MAAM,CAAC,SAAS;AACjC,MAAM,SAAS,EAAE;AACjB,KAAK,CAAC;AACN,IAAI,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,EAAE;AACpD,MAAM,OAAO;AACb,MAAM,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;AACjD,MAAM,SAAS,EAAE;AACjB,KAAK,CAAC;;AAEN;AACA,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE;AAC3C,IAAI,MAAM,CAAC,KAAK,GAAG,QAAQ;AAC3B,IAAI,OAAO,MAAM,CAAC,QAAQ;;AAE1B;AACA,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC;AACrC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;AAE/B;AACA,IAAI,IAAI,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE;AACpC,MAAM,IAAI;AACV,QAAQ,MAAM,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;AACzD,MAAM,CAAC,CAAC,OAAO,GAAG,EAAE;AACpB,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;AAC/D,MAAM;AACN,IAAI;;AAEJ,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC;;AAEjE;AACA,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE;AAC3C,MAAM,OAAO;AACb,MAAM,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;AACjD,MAAM,OAAO,EAAE,MAAM,CAAC,OAAO;AAC7B,MAAM,SAAS,EAAE,QAAQ;AACzB,MAAM,SAAS,EAAE;AACjB,KAAK,CAAC;AACN,IAAI,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE;AACnD,MAAM,OAAO;AACb,MAAM,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;AACjD,MAAM,SAAS,EAAE,QAAQ;AACzB,MAAM,SAAS,EAAE;AACjB,KAAK,CAAC;;AAEN;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;;AAEvE,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,0BAA0B,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACjF,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,cAAc,CAAC,OAAO,EAAE;AAChC,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;AAC3C,IAAI,IAAI,CAAC,MAAM,EAAE;;AAEjB,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC,CAAC;;AAE7D;AACA,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE;AAC3C,IAAI,MAAM,CAAC,KAAK,GAAG,QAAQ;;AAE3B;AACA,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC;AACrC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;AAE/B;AACA,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAChD,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,OAAO,EAAE;AACpB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;AACnC,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,MAAM,GAAG,CAAC,aAAa,EAAE;AAC3B,IAAI,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC;;AAE7D,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,aAAa,EAAE;AACpC,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,wBAAwB,EAAE,aAAa,CAAC,4BAA4B,CAAC,CAAC;AAC7F,IAAI;;AAEJ,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;AACtC,IAAI,IAAI,CAAC,GAAG,EAAE;AACd,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;AACtD,IAAI;;AAEJ,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;AAChD,IAAI,MAAM,UAAU,GAAG,QAAQ,EAAE,EAAE,EAAE,OAAO,GAAG,aAAa,CAAC;;AAE7D,IAAI,IAAI,CAAC,UAAU,EAAE;AACrB,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC;AAC9E,IAAI;;AAEJ;AACA,IAAI,MAAM,IAAI,CAAC,aAAa,EAAE;AAC9B,IAAI,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC;AAC/D,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,OAAO,EAAE;AACtB,IAAI,OAAO;AACX,MAAM,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;AACxC,MAAM,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;AAC3C,MAAM,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AACxC,MAAM,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO;AAC9C,KAAK;AACL,EAAE;;AAEF;AACA;AACA;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO;AACX,MAAM,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;AAChC,MAAM,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;AACpC,MAAM,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;AAChC,MAAM,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;AAC9B,MAAM,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACvC,KAAK;AACL,EAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,IAAI,EAAE;AACjB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/B,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE;AACxB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;AACtC,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE;AACnC,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;AAC3C,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,UAAU,CAAC,OAAO,EAAE;AACtB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;AACpC,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,eAAe,GAAG;AACpB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;AAClC,EAAE;;AAEF;AACA;AACA;AACA,EAAE,UAAU,GAAG;AACf,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AACtB,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE;AAClC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC;AAC7C,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,cAAc,CAAC,OAAO,EAAE;AAC1B,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;AAClC,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,YAAY,GAAG;AACjB,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AAClC,EAAE;;AAEF;AACA;AACA;AACA,EAAE,cAAc,GAAG;AACnB,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;AAC7B,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE;AAC9B,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;AACtD,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,OAAO,EAAE;AACvB,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC;AAC/C,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE;AACpB,IAAI,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC;AACxC,EAAE;;AAEF;AACA;AACA;AACA,EAAE,MAAM,OAAO,GAAG;AAClB,IAAI,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC;;AAE7C,IAAI,IAAI;AACR;AACA,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;;AAEnD;AACA,MAAM,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;;AAEvD;AACA,MAAM,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE;AAC1D,QAAQ,YAAY,CAAC,KAAK,CAAC;AAC3B,MAAM;AACN,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AACnC,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;;AAEpC;AACA,MAAM,KAAK,MAAM,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE;AACpD,QAAQ,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC;AAClC,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;AACvD,MAAM;AACN,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AACjC,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AACjC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;;AAE7B;AACA,MAAM,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE;AACrD,QAAQ,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AAC1C,MAAM;;AAEN;AACA,MAAM,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE;AACtD,QAAQ,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACpD,MAAM;;AAEN;AACA,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AACxB,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;AAC/B,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;AAClC,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;;AAErC;AACA,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;AACjC,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AAC/B,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;AAClC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AAC1B,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;;AAE/B;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACvB,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AAC9B,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AAC5B,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AAC1B,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;;AAEzB;AACA,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;;AAExB,MAAM,IAAI,CAAC,aAAa,GAAG,KAAK;;AAEhC;AACA,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;;AAElD,MAAM,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC;AAC3C,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,MAAM,CAAC,OAAO,CAAC,uBAAuB,EAAE,KAAK,CAAC;AACpD,MAAM,MAAM,KAAK;AACjB,IAAI;AACJ,EAAE;AACF;;ACtkDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;;AAEA;AACA;AACA;AACA,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;AAC7B,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU;AAC3D,EAAE,WAAW,EAAE,MAAM;AACrB,CAAC,CAAC;;AAEF;AACA;AACA,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;;AAE1E;AACA;AACA,MAAM,iBAAiB,GAAG;AAC1B,EAAE,KAAK,EAAE,MAAM,EAAE;AACjB,EAAE,MAAM,EAAE,MAAM,KAAK;AACrB,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACtD,CAAC;;AAED;AACA,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;AAC7B,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa;AAChE,CAAC,CAAC;;AAEF;AACA,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;;AAEhE;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,UAAU,EAAE;AACjC,EAAE,IAAI,WAAW,GAAG,IAAI;AACxB,EAAE,IAAI,YAAY,GAAG,IAAI;AACzB,EAAE,MAAM,MAAM,GAAG,EAAE,CAAC;;AAEpB,EAAE,MAAM,UAAU,GAAG,MAAM;AAC3B,IAAI,IAAI,WAAW,EAAE,OAAO,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;AACxD,IAAI,IAAI,YAAY,EAAE,OAAO,YAAY;AACzC,IAAI,YAAY,GAAG,OAAO,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK;AAC9D,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC;AAC7B,QAAQ,QAAQ,EAAE,UAAU,CAAC,QAAQ;AACrC,QAAQ,KAAK,EAAE,UAAU,CAAC,KAAK;AAC/B,QAAQ,IAAI,EAAE,UAAU;AACxB;AACA;AACA;AACA,QAAQ,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,gBAAgB,GAAG,OAAO,CAAC,IAAI,IAAI;AACtE,OAAO,CAAC;AACR;AACA,MAAM,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE;AACjC,QAAQ,IAAI;AACZ,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;AACtC,YAAY,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;AAChD,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;AAC1C,YAAY,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;AAChD,YAAY,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,UAAU,EAAE;AAC7D,cAAc,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;AAC1C,YAAY;AACZ,UAAU;AACV,QAAQ,CAAC,CAAC,OAAO,GAAG,EAAE;AACtB;AACA,UAAU,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7C,QAAQ;AACR,MAAM;AACN,MAAM,MAAM,CAAC,MAAM,GAAG,CAAC;AACvB,MAAM,OAAO,WAAW;AACxB,IAAI,CAAC,CAAC;AACN,IAAI,OAAO,YAAY;AACvB,EAAE,CAAC;;AAEH;AACA,EAAE,MAAM,YAAY,GAAG,CAAC,UAAU,KAAK,IAAI,KAAK,CAAC,EAAE,EAAE;AACrD,IAAI,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE;AACnB,MAAM,IAAI,WAAW,EAAE;AACvB,QAAQ,MAAM,GAAG,GAAG,WAAW,CAAC,UAAU,CAAC;AAC3C,QAAQ,MAAM,GAAG,GAAG,GAAG,GAAG,MAAM,CAAC;AACjC,QAAQ,OAAO,OAAO,GAAG,KAAK,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG;AAC9D,MAAM;AACN,MAAM,OAAO,CAAC,GAAG,IAAI,KAAK;AAC1B;AACA,QAAQ,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC5E,QAAQ,UAAU,EAAE;AACpB,MAAM,CAAC;AACP,IAAI,CAAC;AACL,GAAG,CAAC;;AAEJ,EAAE,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,EAAE,EAAE;AAChC,IAAI,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE;AACjB;AACA,MAAM,IAAI,WAAW,EAAE;AACvB,QAAQ,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC;AAClD,QAAQ,OAAO,OAAO,GAAG,KAAK,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG;AACtE,MAAM;;AAEN,MAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,OAAO,IAAI;AACxC,MAAM,IAAI,IAAI,KAAK,UAAU,EAAE,OAAO,KAAK;;AAE3C;AACA,MAAM,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,YAAY,CAAC,IAAI,CAAC;;AAE7D;AACA,MAAM,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAClC,QAAQ,OAAO,CAAC,GAAG,IAAI,KAAK;AAC5B,UAAU,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACrD,UAAU,UAAU,EAAE;AACtB,UAAU,OAAO,OAAO;AACxB,QAAQ,CAAC;AACT,MAAM;;AAEN;AACA,MAAM,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAClC,QAAQ,OAAO,CAAC,GAAG,IAAI,KAAK;AAC5B,UAAU,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACrD,UAAU,UAAU,EAAE;AACtB,QAAQ,CAAC;AACT,MAAM;;AAEN;AACA,MAAM,IAAI,IAAI,IAAI,iBAAiB,EAAE;AACrC,QAAQ,OAAO,iBAAiB,CAAC,IAAI,CAAC;AACtC,MAAM;;AAEN;AACA,MAAM,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAClC,QAAQ,OAAO,gBAAgB,YAAY,CAAC,GAAG,IAAI,EAAE;AACrD,UAAU,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE;AACvC,UAAU,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;AAClC,QAAQ,CAAC;AACT,MAAM;;AAEN;AACA;AACA,MAAM,OAAO,CAAC,GAAG,IAAI,KAAK,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI;AAClD,QAAQ,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;AAC3B,QAAQ,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC;AAC/D,QAAQ,OAAO,EAAE;AACjB,MAAM,CAAC,CAAC;AACR,IAAI,CAAC;AACL,GAAG,CAAC;;AAEJ,EAAE,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE;AAC1C,IAAI,GAAG,GAAG,EAAE,OAAO,WAAW,IAAI,OAAO,CAAC,CAAC,CAAC;AAC5C,IAAI,YAAY,EAAE,IAAI;AACtB,GAAG,CAAC;;AAEJ;AACA,EAAE,UAAU,CAAC,OAAO,GAAG,UAAU;AACjC;;AAEA;AACG,IAAC;;AAEJ,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE;AAC5E,EAAE,EAAE,GAAG,MAAM,CAAC,EAAE;AAChB,CAAC,MAAM;AACP,EAAE,EAAE,GAAG,IAAI,MAAM,EAAE;AACnB,EAAE,EAAE,CAAC,cAAc,GAAG,IAAI;;AAE1B;AACA,EAAE,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACrC,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC;AAC7C,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;AACvB,EAAE;AACF;;AAEA;AACA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACnC;AACA,EAAE,IAAI,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE;AAC9C,IAAI,OAAO,CAAC,IAAI,CAAC,oJAAoJ,CAAC;AACtK,EAAE;AACF,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE;;AAEhB,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;AACnB;AACA;AACA,IAAI,EAAE,CAAC,OAAO,GAA2C,OAAc,CAAc;AACrF,IAAI,EAAE,CAAC,IAAI,GAAG;AACd,MAAM,IAAI,EAAE,cAAc;AAC1B,MAAM,WAAW,EAAE,0BAA0B;AAC7C,MAAM,QAAQ,EAAE,CAAC,oBAAoB,EAAE,aAAa,EAAE,sBAAsB,EAAE,iBAAiB;AAC/F,KAAK;AACL,EAAE;;AAEF;AACA,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE;AAChB,IAAI,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;AACxE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;AACpD,IAAI,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;AACxD,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;AACtD,EAAE;;AAEF;AACA,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE;AACpB,IAAI,EAAE,CAAC,QAAQ,GAAG,CAAC,QAAQ,EAAE,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;AAC5E,IAAI,EAAE,CAAC,WAAW,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC;AAC9D,EAAE;;AAEF;AACA,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE;AACpB,IAAI,EAAE,CAAC,QAAQ,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,KAAK,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC;AACxE,IAAI,EAAE,CAAC,cAAc,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AAC3D,IAAI,EAAE,CAAC,YAAY,GAAG,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE;AACjD,IAAI,EAAE,CAAC,cAAc,GAAG,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE;AACrD,EAAE;;AAEF;AACA,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;AACnB,IAAI,EAAE,CAAC,OAAO,GAAG,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,wDAA6B,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;AAClH,IAAI,EAAE,CAAC,OAAO,GAAG,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,wDAA6B,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AAChH,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACd,IAAI,WAAW,CAAC,EAAE,CAAC;AACnB,EAAE;;AAEF;AACA,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;AACf,IAAI,IAAI,UAAU,GAAG,IAAI;AACzB,IAAI,EAAE,CAAC,GAAG,GAAG;AACb,MAAM,MAAM,OAAO,CAAC,GAAG,GAAG,sBAAsB,EAAE,OAAO,GAAG,EAAE,EAAE;AAChE,QAAQ,IAAI,CAAC,UAAU,EAAE;AACzB,UAAU,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,OAAO,yBAAyB,CAAC;AAC7E,UAAU,UAAU,GAAG,eAAe,CAAC,EAAE,CAAC;AAC1C,QAAQ;AACR,QAAQ,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC;AACxC,MAAM,CAAC;AACP,MAAM,UAAU,GAAG;AACnB,QAAQ,UAAU,EAAE,UAAU,EAAE;AAChC,MAAM,CAAC;AACP,MAAM,WAAW,GAAG;AACpB,QAAQ,OAAO,UAAU,EAAE,WAAW,EAAE,IAAI,KAAK;AACjD,MAAM,CAAC;AACP,KAAK;AACL,EAAE;AACF;AAIA,iBAAe,EAAE;;AAmCjB;AACY,MAAC,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE;AAClC,MAAC,KAAK,GAAG,CAAC,IAAI,EAAE,SAAS,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS;AACtD,MAAC,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI;AAChD,MAAC,MAAM,GAAG,CAAC,IAAI,EAAE,SAAS,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS;AACxD,MAAC,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM;AAC5C,MAAC,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO;;AAEvC;AACY,MAAC,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI;AAC9B,MAAC,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI;AAC9B,MAAC,QAAQ,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI;;AAElD;AACY,MAAC,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI;AACjE,MAAC,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE;AAC7C,MAAC,IAAI,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;AACjD,MAAC,GAAG,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE;;AAE3D;AACY,MAAC,QAAQ,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI;AACvC,MAAC,QAAQ,GAAG,CAAC,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK;AACrD,MAAC,aAAa,GAAG,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE;;AAErE;AACY,MAAC,YAAY,GAAG,CAAC,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG;AACpE,MAAC,UAAU,GAAG,CAAC,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG;AAChE,MAAC,yBAAyB,GAAG,MAAM,EAAE,CAAC,WAAW,CAAC,cAAc;;AAE5E;AACY,MAAC,QAAQ,GAAG,CAAC,QAAQ,EAAE,IAAI,KAAK,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI;AAC1D,MAAC,WAAW,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,WAAW,CAAC,IAAI;;AAExD;AACY,MAAC,QAAQ,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI;AAC5D,MAAC,cAAc,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,cAAc,CAAC,IAAI;AAClD,MAAC,YAAY,GAAG,MAAM,EAAE,CAAC,YAAY;AACrC,MAAC,cAAc,GAAG,MAAM,EAAE,CAAC,cAAc;;AAErD;AACY,MAAC,SAAS,GAAG,CAAC,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI;AAC/D,MAAC,OAAO,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI;;AAExF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;"}
|