@pandait.tech/payment-nuvei 0.1.0 → 0.1.1

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ui/bin-lookup.ts","../../src/ui/bank-colors.ts","../../src/ui/types.ts","../../src/ui/CardVisual.tsx","../../src/ui/SavedCards.tsx","../../src/ui/NuveiPaymentForm.tsx"],"names":["useState","useEffect","FaExclamationTriangle","FaLock"],"mappings":"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","file":"index.js","sourcesContent":["// Source: pauhenriques-website/src/lib/bin-database.ts\n// Phase 1.5: refactored to accept a configurable endpoint URL.\n//\n// Client-side BIN lookup with localStorage cache. The database lives on the\n// consumer's backend (typically at /api/bins, served from Firestore at\n// config/bins). This module handles the fetch + cache + lookup logic.\n\nimport type { BinDatabase, BinInfo } from \"./types.js\";\n\nconst STORAGE_KEY = \"binDatabase_v1\";\nlet memoryCache: BinDatabase | null = null;\nlet inflight: Promise<BinDatabase | null> | null = null;\n\nfunction readFromStorage(): BinDatabase | null {\n if (typeof window === \"undefined\") return null;\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n if (!raw) return null;\n const parsed = JSON.parse(raw) as BinDatabase;\n if (parsed && parsed.data && typeof parsed.data === \"object\") return parsed;\n } catch {\n /* corrupted cache, ignore */\n }\n return null;\n}\n\nfunction writeToStorage(db: BinDatabase) {\n if (typeof window === \"undefined\") return;\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(db));\n } catch {\n /* storage full or disabled, ignore */\n }\n}\n\nasync function fetchDatabase(endpoint: string): Promise<BinDatabase | null> {\n if (typeof window === \"undefined\") return null;\n try {\n const res = await fetch(endpoint, { cache: \"default\" });\n if (!res.ok) return null;\n return (await res.json()) as BinDatabase;\n } catch {\n return null;\n }\n}\n\n/**\n * Loads the BIN database. Uses memory cache → localStorage cache → network.\n * Returns null if no database is available (lookup will return null silently).\n *\n * @param endpoint URL serving the BIN database as JSON. Default: \"/api/bins\".\n */\nexport async function getBinDatabase(\n endpoint: string = \"/api/bins\",\n): Promise<BinDatabase | null> {\n if (memoryCache) return memoryCache;\n\n // Use cached version while we revalidate in background\n const cached = readFromStorage();\n if (cached) {\n memoryCache = cached;\n if (!inflight) {\n inflight = fetchDatabase(endpoint).then((fresh) => {\n if (fresh && fresh.version !== cached.version) {\n memoryCache = fresh;\n writeToStorage(fresh);\n }\n inflight = null;\n return fresh;\n });\n }\n return cached;\n }\n\n // No cache — fetch and wait\n if (!inflight) {\n inflight = fetchDatabase(endpoint).then((fresh) => {\n if (fresh) {\n memoryCache = fresh;\n writeToStorage(fresh);\n }\n inflight = null;\n return fresh;\n });\n }\n return inflight;\n}\n\n/**\n * Looks up a BIN for a given card number string. Tries 8, 7, 6 digit prefixes.\n * Returns null if no match or database not loaded yet.\n */\nexport function lookupBinSync(\n cardNumber: string,\n db: BinDatabase | null,\n): BinInfo | null {\n if (!db || !cardNumber) return null;\n const digits = cardNumber.replace(/\\D/g, \"\");\n if (digits.length < 6) return null;\n // Try most specific (8) → least specific (6)\n for (const len of [8, 7, 6]) {\n const prefix = digits.slice(0, len);\n const hit = db.data[prefix];\n if (hit) return hit;\n }\n return null;\n}\n\n/** Async helper that loads the DB if needed and looks up the BIN. */\nexport async function lookupBin(\n cardNumber: string,\n endpoint: string = \"/api/bins\",\n): Promise<BinInfo | null> {\n const db = await getBinDatabase(endpoint);\n return lookupBinSync(cardNumber, db);\n}\n","/**\n * Bank brand colors for Ecuadorian banks and cooperativas.\n * Each bank can have different colors per card type (credit / debit / prepaid).\n *\n * Lookup is by normalized bank name (lowercase, no accents, alphanumeric).\n * Falls back to brand network colors when no match.\n */\n\n// Source: pauhenriques-website/src/lib/bank-colors.ts\n// Phase 1.5: moved into the package. BankPalette is defined in ./types.ts;\n// re-exported here for backwards compatibility with code that imports it\n// from this module.\n\nimport type { BankPalette, CardType } from \"./types.js\";\n\nexport type { BankPalette } from \"./types.js\";\n\ntype BankByType = Partial<Record<CardType, BankPalette>>;\n\n/**\n * For each bank, color per card type. If a type is missing, falls back\n * to the bank's \"credit\" color, then \"debit\", then network brand color.\n */\nconst BANK_PALETTES: Record<string, BankByType> = {\n // ── Bancos comerciales con 3 variantes ──\n bancopichincha: {\n credit: { primary: \"#FFCB05\", secondary: \"#a87f00\" },\n debit: { primary: \"#FFCB05\", secondary: \"#a87f00\" },\n prepaid: { primary: \"#4A4A4A\", secondary: \"#1a1a1a\" },\n },\n pichincha: {\n credit: { primary: \"#FFCB05\", secondary: \"#a87f00\" },\n debit: { primary: \"#FFCB05\", secondary: \"#a87f00\" },\n prepaid: { primary: \"#4A4A4A\", secondary: \"#1a1a1a\" },\n },\n bancodelpacifico: {\n credit: { primary: \"#0A4664\", secondary: \"#031f30\" },\n debit: { primary: \"#0082C8\", secondary: \"#003e63\" },\n prepaid: { primary: \"#145A50\", secondary: \"#062b25\" },\n },\n pacifico: {\n credit: { primary: \"#0A4664\", secondary: \"#031f30\" },\n debit: { primary: \"#0082C8\", secondary: \"#003e63\" },\n prepaid: { primary: \"#145A50\", secondary: \"#062b25\" },\n },\n bancoguayaquil: {\n credit: { primary: \"#201858\", secondary: \"#0a081f\" },\n debit: { primary: \"#101040\", secondary: \"#06061f\" },\n },\n guayaquil: {\n credit: { primary: \"#201858\", secondary: \"#0a081f\" },\n debit: { primary: \"#101040\", secondary: \"#06061f\" },\n },\n bancointernacional: {\n credit: { primary: \"#F08820\", secondary: \"#8a460a\" },\n debit: { primary: \"#F08820\", secondary: \"#8a460a\" },\n prepaid: { primary: \"#F08820\", secondary: \"#8a460a\" },\n },\n internacional: {\n credit: { primary: \"#F08820\", secondary: \"#8a460a\" },\n debit: { primary: \"#F08820\", secondary: \"#8a460a\" },\n prepaid: { primary: \"#F08820\", secondary: \"#8a460a\" },\n },\n bancodelaproduccionsaprodubanco: {\n credit: { primary: \"#004828\", secondary: \"#001f10\" },\n debit: { primary: \"#004828\", secondary: \"#001f10\" },\n prepaid: { primary: \"#D0D028\", secondary: \"#7a7a14\" },\n },\n produbanco: {\n credit: { primary: \"#004828\", secondary: \"#001f10\" },\n debit: { primary: \"#004828\", secondary: \"#001f10\" },\n prepaid: { primary: \"#D0D028\", secondary: \"#7a7a14\" },\n },\n bancobolivarianoca: {\n credit: { primary: \"#B8B8B8\", secondary: \"#5e5e5e\" },\n debit: { primary: \"#009B8A\", secondary: \"#004540\" },\n },\n bolivariano: {\n credit: { primary: \"#B8B8B8\", secondary: \"#5e5e5e\" },\n debit: { primary: \"#009B8A\", secondary: \"#004540\" },\n },\n bancodiners: {\n credit: { primary: \"#1C1C1C\", secondary: \"#000000\" },\n debit: { primary: \"#1C1C1C\", secondary: \"#000000\" },\n prepaid: { primary: \"#1C1C1C\", secondary: \"#000000\" },\n },\n diners: {\n credit: { primary: \"#1C1C1C\", secondary: \"#000000\" },\n debit: { primary: \"#1C1C1C\", secondary: \"#000000\" },\n prepaid: { primary: \"#1C1C1C\", secondary: \"#000000\" },\n },\n cooperativadeahorroycreditojuventudecuatorianaprogresistaltdaecuador: {\n credit: { primary: \"#2C4A8C\", secondary: \"#101e3f\" },\n debit: { primary: \"#1E3A7A\", secondary: \"#0a1838\" },\n prepaid: { primary: \"#1E3A7A\", secondary: \"#0a1838\" },\n },\n cooperativajep: {\n credit: { primary: \"#2C4A8C\", secondary: \"#101e3f\" },\n debit: { primary: \"#1E3A7A\", secondary: \"#0a1838\" },\n prepaid: { primary: \"#1E3A7A\", secondary: \"#0a1838\" },\n },\n jep: {\n credit: { primary: \"#2C4A8C\", secondary: \"#101e3f\" },\n debit: { primary: \"#1E3A7A\", secondary: \"#0a1838\" },\n prepaid: { primary: \"#1E3A7A\", secondary: \"#0a1838\" },\n },\n cooperativadeahorroycreditopolicianacional: {\n credit: { primary: \"#003087\", secondary: \"#001138\" },\n debit: { primary: \"#003087\", secondary: \"#001138\" },\n prepaid: { primary: \"#003087\", secondary: \"#001138\" },\n },\n cooperativapolicianacional: {\n credit: { primary: \"#003087\", secondary: \"#001138\" },\n debit: { primary: \"#003087\", secondary: \"#001138\" },\n },\n\n // ── Bancos con 2 variantes ──\n bancodelaustro: {\n credit: { primary: \"#C0161A\", secondary: \"#5e0809\" },\n debit: { primary: \"#C0161A\", secondary: \"#5e0809\" },\n },\n austro: {\n credit: { primary: \"#C0161A\", secondary: \"#5e0809\" },\n debit: { primary: \"#C0161A\", secondary: \"#5e0809\" },\n },\n bancosolidario: {\n credit: { primary: \"#E07820\", secondary: \"#7a3e0a\" },\n debit: { primary: \"#78B830\", secondary: \"#3f6515\" },\n },\n solidario: {\n credit: { primary: \"#E07820\", secondary: \"#7a3e0a\" },\n debit: { primary: \"#78B830\", secondary: \"#3f6515\" },\n },\n bancoamazonassa: {\n credit: { primary: \"#1A1A1A\", secondary: \"#000000\" },\n debit: { primary: \"#1A1A1A\", secondary: \"#000000\" },\n },\n amazonas: {\n credit: { primary: \"#1A1A1A\", secondary: \"#000000\" },\n debit: { primary: \"#1A1A1A\", secondary: \"#000000\" },\n },\n bancoprocredit: {\n credit: { primary: \"#3A7830\", secondary: \"#1a3614\" },\n debit: { primary: \"#3A7830\", secondary: \"#1a3614\" },\n },\n bancoprocreditecuadorsa: {\n credit: { primary: \"#3A7830\", secondary: \"#1a3614\" },\n debit: { primary: \"#3A7830\", secondary: \"#1a3614\" },\n },\n procredit: {\n credit: { primary: \"#3A7830\", secondary: \"#1a3614\" },\n debit: { primary: \"#3A7830\", secondary: \"#1a3614\" },\n },\n bancodelojasa: {\n credit: { primary: \"#1E1E1E\", secondary: \"#000000\" },\n debit: { primary: \"#1E1E1E\", secondary: \"#000000\" },\n },\n loja: {\n credit: { primary: \"#1E1E1E\", secondary: \"#000000\" },\n debit: { primary: \"#1E1E1E\", secondary: \"#000000\" },\n },\n bancodemachalasa: {\n credit: { primary: \"#1B5E38\", secondary: \"#0a2c1a\" },\n debit: { primary: \"#1B5E38\", secondary: \"#0a2c1a\" },\n },\n machala: {\n credit: { primary: \"#1B5E38\", secondary: \"#0a2c1a\" },\n debit: { primary: \"#1B5E38\", secondary: \"#0a2c1a\" },\n },\n bancocomercialdemanabisa: {\n credit: { primary: \"#004F9F\", secondary: \"#001f44\" },\n debit: { primary: \"#004F9F\", secondary: \"#001f44\" },\n },\n bancogeneralrumiñahuisa: {\n credit: { primary: \"#E03020\", secondary: \"#7a1610\" },\n debit: { primary: \"#101010\", secondary: \"#000000\" },\n },\n bancogeneralruminahuisa: {\n credit: { primary: \"#E03020\", secondary: \"#7a1610\" },\n debit: { primary: \"#101010\", secondary: \"#000000\" },\n },\n rumiñahui: {\n credit: { primary: \"#E03020\", secondary: \"#7a1610\" },\n debit: { primary: \"#101010\", secondary: \"#000000\" },\n },\n ruminahui: {\n credit: { primary: \"#E03020\", secondary: \"#7a1610\" },\n debit: { primary: \"#101010\", secondary: \"#000000\" },\n },\n\n // ── Bancos con 1 variante ──\n banecuador: {\n debit: { primary: \"#2CC4B0\", secondary: \"#0e5e54\" },\n },\n bancoatlantida: {\n debit: { primary: \"#003087\", secondary: \"#001138\" },\n },\n atlantida: {\n debit: { primary: \"#003087\", secondary: \"#001138\" },\n },\n bancoatlantidadeecuador: {\n debit: { primary: \"#003087\", secondary: \"#001138\" },\n },\n bancodellitoral: {\n debit: { primary: \"#0070B8\", secondary: \"#003056\" },\n },\n bancocodesarrollo: {\n debit: { primary: \"#006837\", secondary: \"#002e18\" },\n },\n codesarrollo: {\n debit: { primary: \"#006837\", secondary: \"#002e18\" },\n },\n bancovisionfund: {\n debit: { primary: \"#FF6600\", secondary: \"#7a2f00\" },\n },\n\n // ── Mutualistas ──\n mutualistapichincha: {\n debit: { primary: \"#FFCB05\", secondary: \"#a87f00\" },\n },\n asociacionmutualistadeahorroycreditoparalaviviendapichincha: {\n debit: { primary: \"#FFCB05\", secondary: \"#a87f00\" },\n },\n asociacionmutualistadeahorroycreditoparalaviviendaazuay: {\n debit: { primary: \"#0057A8\", secondary: \"#00264a\" },\n },\n mutualistaazuay: {\n debit: { primary: \"#0057A8\", secondary: \"#00264a\" },\n },\n\n // ── Cooperativas grandes ──\n cooperativa29deoctubre: {\n credit: { primary: \"#B8001C\", secondary: \"#5e000e\" },\n debit: { primary: \"#B8001C\", secondary: \"#5e000e\" },\n },\n coop29deoctubre: {\n credit: { primary: \"#B8001C\", secondary: \"#5e000e\" },\n debit: { primary: \"#B8001C\", secondary: \"#5e000e\" },\n },\n cooperativadeahorroycredito29deoctubreltda: {\n credit: { primary: \"#B8001C\", secondary: \"#5e000e\" },\n debit: { primary: \"#B8001C\", secondary: \"#5e000e\" },\n },\n cooperativa23dejuliofinancoop: {\n credit: { primary: \"#005B9A\", secondary: \"#00263e\" },\n debit: { primary: \"#005B9A\", secondary: \"#00263e\" },\n },\n cooperativadaquilemafinancoop: {\n credit: { primary: \"#C8001C\", secondary: \"#5e000e\" },\n debit: { primary: \"#C8001C\", secondary: \"#5e000e\" },\n },\n cooperativamegofinancoop: {\n credit: { primary: \"#005038\", secondary: \"#001f15\" },\n debit: { primary: \"#005038\", secondary: \"#001f15\" },\n },\n cooperativamushucrunafinancoop: {\n credit: { primary: \"#5CB800\", secondary: \"#2e5e00\" },\n debit: { primary: \"#5CB800\", secondary: \"#2e5e00\" },\n },\n cooperativacacpeco: {\n credit: { primary: \"#F0F0F0\", secondary: \"#888888\" },\n debit: { primary: \"#F0F0F0\", secondary: \"#888888\" },\n },\n cooperativadeahorroycreditocacspmec: {\n credit: { primary: \"#003087\", secondary: \"#001138\" },\n debit: { primary: \"#003087\", secondary: \"#001138\" },\n },\n cacpmec: {\n credit: { primary: \"#003087\", secondary: \"#001138\" },\n debit: { primary: \"#003087\", secondary: \"#001138\" },\n },\n cooperativadeahorroycreditoandalucia: {\n credit: { primary: \"#006837\", secondary: \"#002e18\" },\n debit: { primary: \"#006837\", secondary: \"#002e18\" },\n },\n andalucia: {\n credit: { primary: \"#006837\", secondary: \"#002e18\" },\n debit: { primary: \"#006837\", secondary: \"#002e18\" },\n },\n cooperativadeahorroycreditochibuleo: {\n credit: { primary: \"#CC1020\", secondary: \"#5e0810\" },\n debit: { primary: \"#CC1020\", secondary: \"#5e0810\" },\n },\n chibuleo: {\n credit: { primary: \"#CC1020\", secondary: \"#5e0810\" },\n debit: { primary: \"#CC1020\", secondary: \"#5e0810\" },\n },\n cooperativadeahorroycreditocooprogresoltda: {\n credit: { primary: \"#005B9A\", secondary: \"#00263e\" },\n debit: { primary: \"#005B9A\", secondary: \"#00263e\" },\n },\n cooprogreso: {\n credit: { primary: \"#005B9A\", secondary: \"#00263e\" },\n debit: { primary: \"#005B9A\", secondary: \"#00263e\" },\n },\n cooperativadeahorroycreditodelapequenaempresadepastazaltda: {\n credit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativadeahorroycreditooscus: {\n credit: { primary: \"#C8C8C8\", secondary: \"#666666\" },\n debit: { primary: \"#C8C8C8\", secondary: \"#666666\" },\n },\n oscus: {\n credit: { primary: \"#C8C8C8\", secondary: \"#666666\" },\n debit: { primary: \"#C8C8C8\", secondary: \"#666666\" },\n },\n cooperativadeahorroycreditopablomunozvega: {\n credit: { primary: \"#006837\", secondary: \"#002e18\" },\n debit: { primary: \"#006837\", secondary: \"#002e18\" },\n },\n cooperativapablomunozvega: {\n credit: { primary: \"#006837\", secondary: \"#002e18\" },\n debit: { primary: \"#006837\", secondary: \"#002e18\" },\n },\n cooperativadeahorroycreditotulcan: {\n credit: { primary: \"#005B9A\", secondary: \"#00263e\" },\n debit: { primary: \"#005B9A\", secondary: \"#00263e\" },\n },\n tulcan: {\n credit: { primary: \"#005B9A\", secondary: \"#00263e\" },\n debit: { primary: \"#005B9A\", secondary: \"#00263e\" },\n },\n cooperativajardinazuayo: {\n credit: { primary: \"#1A3A6A\", secondary: \"#0a182e\" },\n debit: { primary: \"#1A3A6A\", secondary: \"#0a182e\" },\n },\n jardinazuayo: {\n credit: { primary: \"#1A3A6A\", secondary: \"#0a182e\" },\n debit: { primary: \"#1A3A6A\", secondary: \"#0a182e\" },\n },\n cooperativadeahorroycreditoalianzadelvalleltda: {\n credit: { primary: \"#004F9F\", secondary: \"#001f44\" },\n debit: { primary: \"#004F9F\", secondary: \"#001f44\" },\n },\n alianzadelvalle: {\n credit: { primary: \"#004F9F\", secondary: \"#001f44\" },\n debit: { primary: \"#004F9F\", secondary: \"#001f44\" },\n },\n cooperativaatuntaquifinancoop: {\n credit: { primary: \"#C8001C\", secondary: \"#5e000e\" },\n debit: { primary: \"#C8001C\", secondary: \"#5e000e\" },\n },\n cooperativasagrariofinancoop: {\n credit: { primary: \"#005FAA\", secondary: \"#002850\" },\n debit: { primary: \"#005FAA\", secondary: \"#002850\" },\n },\n financoop: {\n debit: { primary: \"#005FAA\", secondary: \"#002850\" },\n },\n\n // ── Cooperativas pequeñas (verde genérico cooperativista) ──\n cooperativa15deabril: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativacacpepastaza: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativacrea: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativadeahorroycreditocrea: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n crea: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativadeahorroycreditodelapequenaempresabiblianltda: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n biblian: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativaeducadoreschimborazo: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativaerco: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativagualaquiza: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativaimbaburapakfinancoop: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativajulianlorentefinancoop: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativalamerced: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativasantarosafinancoop: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativaambatofinancoop: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativacredilfinancoop: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativapuellarofinancoop: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativasanmigueldelosbancos: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n coemisorcooperativalasnaves: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n\n // ── Otros / procesadores ──\n creditia: {\n credit: { primary: \"#666666\", secondary: \"#333333\" },\n debit: { primary: \"#666666\", secondary: \"#333333\" },\n },\n};\n\nfunction normalize(name: string): string {\n return name\n .toLowerCase()\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\") // strip accents\n .replace(/[^a-z]/g, \"\");\n}\n\n/**\n * Lookup the palette for a bank, optionally by card type.\n * Strategy:\n * 1. Find the bank's BankByType by normalized name (or substring match).\n * 2. Try to return the palette for the requested type.\n * 3. Fall back to credit → debit → first available type.\n */\nexport function lookupBankPalette(\n bankName: string | undefined,\n cardType?: CardType,\n): BankPalette | null {\n if (!bankName) return null;\n const norm = normalize(bankName);\n if (!norm) return null;\n\n let bankByType: BankByType | undefined = BANK_PALETTES[norm];\n\n // Substring match for variations in bank naming\n if (!bankByType) {\n for (const key of Object.keys(BANK_PALETTES)) {\n if (norm.includes(key) && key.length >= 6) {\n bankByType = BANK_PALETTES[key];\n break;\n }\n }\n }\n\n if (!bankByType) return null;\n\n // Try requested type, then sensible fallbacks\n if (cardType && bankByType[cardType]) return bankByType[cardType]!;\n if (bankByType.credit) return bankByType.credit;\n if (bankByType.debit) return bankByType.debit;\n if (bankByType.prepaid) return bankByType.prepaid;\n return null;\n}\n","// Source: pauhenriques-website/src/types/{bin,card}.ts\n// Phase 1.5: types for UI components. Self-contained — no imports from\n// Pau-specific paths.\n\n/** Card brand codes as returned by Nuvei (Paymentez). */\nexport type CardBrand =\n | \"vi\"\n | \"mc\"\n | \"ax\"\n | \"di\"\n | \"dc\"\n | \"up\"\n | \"cs\"\n | \"unknown\";\n\n/** Card type. Nuvei returns this for known BINs. */\nexport type CardType = \"credit\" | \"debit\" | \"prepaid\" | \"unknown\";\n\n/** Card carrier (Ecuador-specific: Datafast vs Medianet processor). */\nexport type CardCarrier = \"datafast\" | \"medianet\" | \"both\" | \"unknown\";\n\n/** BIN lookup result — full info about a card's issuer and processing path. */\nexport interface BinInfo {\n bank: string;\n brand: CardBrand;\n type: CardType;\n carrier: CardCarrier;\n requiresOtp: boolean;\n}\n\n/** BIN database structure. Keyed by 6-8 digit BIN prefix. */\nexport interface BinDatabase {\n data: Record<string, BinInfo>;\n version: string;\n count: number;\n updatedAt?: string;\n}\n\n/** Bank color palette for rendering branded card visuals. */\nexport interface BankPalette {\n /** Primary brand color (hex) */\n primary: string;\n /** Optional secondary for gradients */\n secondary?: string;\n}\n\n/** Saved card as returned by Nuvei /v2/card/list. */\nexport interface SavedCard {\n bin: string;\n status: \"valid\" | \"review\" | \"pending\" | \"rejected\";\n token: string;\n holder_name: string;\n expiry_year: string;\n expiry_month: string;\n transaction_reference: string;\n /** Brand code: \"vi\", \"mc\", \"ax\", \"di\", \"dc\", etc. */\n type: string;\n /** Last 4 digits of the card number. */\n number: string;\n}\n\n/** Brand name display map. */\nexport const CARD_BRAND_NAMES: Record<CardBrand, string> = {\n vi: \"Visa\",\n mc: \"Mastercard\",\n ax: \"American Express\",\n di: \"Diners Club\",\n dc: \"Discover\",\n up: \"UnionPay\",\n cs: \"Credisensa\",\n unknown: \"Tarjeta\",\n};\n\n/** Card type display map (Spanish). */\nexport const CARD_TYPE_NAMES: Record<CardType, string> = {\n credit: \"Crédito\",\n debit: \"Débito\",\n prepaid: \"Prepago\",\n unknown: \"\",\n};\n","\"use client\";\n\n// Source: pauhenriques-website/src/components/checkout/CardVisual.tsx\n// Phase 1.5: refactored for the package.\n//\n// Renders a payment card thumbnail (compact) or full card mock (full variant)\n// with bank-specific colors when the BIN is known. The BIN lookup hits the\n// consumer's /api/bins endpoint (overridable via prop), and the bank-color\n// palette is bundled in the package and maintained centrally by PandaIT.\n\nimport { useEffect, useState } from \"react\";\nimport { getBinDatabase, lookupBinSync } from \"./bin-lookup.js\";\nimport { lookupBankPalette } from \"./bank-colors.js\";\nimport {\n CARD_BRAND_NAMES,\n CARD_TYPE_NAMES,\n type BinDatabase,\n type BinInfo,\n} from \"./types.js\";\n\ninterface CardVisualProps {\n bin?: string;\n brand: string;\n last4: string;\n holderName: string;\n expiryMonth: string;\n expiryYear: string;\n /** Compact = mini real-card thumbnail (Rappi/PayPal style). Full = larger card. */\n variant?: \"compact\" | \"full\";\n /** Pre-resolved BIN info. If provided, no network lookup is performed. Useful\n * for server-rendered scenarios or when the consumer already cached lookups. */\n binInfo?: BinInfo;\n /** Path of the consumer's BIN database endpoint. Default: \"/api/bins\".\n * Set to null to disable network lookup entirely (component will fall back\n * to brand network colors). */\n binDatabaseEndpoint?: string | null;\n}\n\n// Brand gradients — fallback when bank color is unknown.\nconst BRAND_GRADIENT: Record<string, { from: string; to: string }> = {\n vi: { from: \"#1a1f71\", to: \"#0d1240\" },\n mc: { from: \"#cc4d2e\", to: \"#561a0e\" },\n ax: { from: \"#016fcf\", to: \"#003f7a\" },\n di: { from: \"#2c3e50\", to: \"#11161e\" },\n dc: { from: \"#ff6f00\", to: \"#a83a00\" },\n default: { from: \"#3a4632\", to: \"#1a2014\" },\n};\n\n// Small SVG-ish brand mark using styled text — no external asset needed.\nfunction BrandMark({ brand }: { brand: string }) {\n const text = CARD_BRAND_NAMES[brand as keyof typeof CARD_BRAND_NAMES] || \"CARD\";\n if (brand === \"mc\") {\n // Mastercard interlocking circles\n return (\n <div className=\"flex items-center -space-x-2\">\n <span className=\"w-4 h-4 rounded-full bg-[#eb001b]\" />\n <span className=\"w-4 h-4 rounded-full bg-[#f79e1b]/90 mix-blend-screen\" />\n </div>\n );\n }\n return (\n <span className=\"text-white text-[11px] font-bold tracking-wider uppercase italic\">\n {text}\n </span>\n );\n}\n\nexport function CardVisual({\n bin,\n brand,\n last4,\n holderName,\n expiryMonth,\n expiryYear,\n variant = \"compact\",\n binInfo: preResolvedBinInfo,\n binDatabaseEndpoint = \"/api/bins\",\n}: CardVisualProps) {\n const [binInfo, setBinInfo] = useState<BinInfo | null>(\n preResolvedBinInfo ?? null,\n );\n\n useEffect(() => {\n // Skip network lookup if consumer pre-resolved or explicitly disabled\n if (preResolvedBinInfo || binDatabaseEndpoint === null || !bin) return;\n let cancelled = false;\n getBinDatabase(binDatabaseEndpoint).then((db: BinDatabase | null) => {\n if (cancelled || !db) return;\n const info = lookupBinSync(bin, db);\n if (info) setBinInfo(info);\n });\n return () => {\n cancelled = true;\n };\n }, [bin, binDatabaseEndpoint, preResolvedBinInfo]);\n\n const bankName = binInfo?.bank ?? \"\";\n const bankPalette = lookupBankPalette(bankName, binInfo?.type);\n // Bank color takes priority; fallback to network brand color.\n // noUncheckedIndexedAccess makes Record lookups `T | undefined`, so the\n // default entry needs a non-null assertion (BRAND_GRADIENT.default is\n // statically present).\n const brandFallback = BRAND_GRADIENT[brand] ?? BRAND_GRADIENT.default!;\n const gradientFrom = bankPalette?.primary ?? brandFallback.from;\n const gradientTo = bankPalette?.secondary ?? brandFallback.to;\n const gradientStyle = {\n background: `linear-gradient(135deg, ${gradientFrom} 0%, ${gradientTo} 100%)`,\n };\n const cardType = binInfo?.type ? CARD_TYPE_NAMES[binInfo.type] || \"\" : \"\";\n const expiryShort = `${expiryMonth.padStart(2, \"0\")}/${String(expiryYear).slice(-2)}`;\n\n if (variant === \"compact\") {\n // Mini real-card thumbnail (≈ 80x52, aspect 1.6:1) + meta on the right.\n return (\n <div className=\"flex items-center gap-3 min-w-0\">\n <div\n style={gradientStyle}\n className=\"shrink-0 relative w-22 h-14 rounded-md shadow-md overflow-hidden\"\n >\n {/* Subtle holographic shine */}\n <div className=\"absolute inset-0 bg-linear-to-br from-white/10 via-transparent to-black/20 pointer-events-none\" />\n {/* Chip */}\n <div className=\"absolute top-2 left-2 w-3.5 h-2.5 rounded-sm bg-linear-to-br from-yellow-200/80 to-yellow-600/80 border border-yellow-700/40\" />\n {/* Brand mark */}\n <div className=\"absolute top-1.5 right-2\">\n <BrandMark brand={brand} />\n </div>\n {/* Last 4 */}\n <div className=\"absolute bottom-1.5 left-2 right-2 flex justify-between items-end\">\n <span className=\"text-white/95 text-[11px] font-mono tracking-[0.05em] font-semibold drop-shadow\">\n ····{last4}\n </span>\n <span className=\"text-white/75 text-[8px] font-mono\">{expiryShort}</span>\n </div>\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-semibold text-[var(--color-text-main)] truncate\">\n {bankName || CARD_BRAND_NAMES[brand as keyof typeof CARD_BRAND_NAMES] || \"Tarjeta\"}\n </p>\n <p className=\"text-xs text-[var(--color-text-main)]/50 truncate\">\n {cardType ? `${cardType} · ` : \"\"}{holderName || \"—\"}\n </p>\n </div>\n </div>\n );\n }\n\n // Full variant — full real-card look (for confirm step / detailed views)\n return (\n <div\n style={gradientStyle}\n className=\"relative overflow-hidden rounded-2xl shadow-xl p-5 aspect-[1.586/1] w-full max-w-sm\"\n >\n <div className=\"absolute inset-0 bg-linear-to-br from-white/10 via-transparent to-black/30 pointer-events-none\" />\n {/* Top row: type label + brand */}\n <div className=\"relative flex justify-between items-start\">\n <div>\n <p className=\"text-[10px] font-medium tracking-[0.2em] uppercase text-white/50\">\n {cardType || \"Tarjeta\"}\n </p>\n {bankName && (\n <p className=\"text-xs text-white/85 mt-0.5 font-medium\">{bankName}</p>\n )}\n </div>\n <BrandMark brand={brand} />\n </div>\n\n {/* Chip */}\n <div className=\"relative mt-6 w-9 h-7 rounded-md bg-linear-to-br from-yellow-200 to-yellow-600 border border-yellow-700/40 shadow-inner\" />\n\n {/* Card number */}\n <div className=\"relative mt-4\">\n <p className=\"font-mono text-lg tracking-wider text-white drop-shadow\">\n ···· ···· ···· {last4}\n </p>\n </div>\n\n {/* Bottom row: holder + expiry */}\n <div className=\"relative mt-3 flex justify-between items-end\">\n <div className=\"min-w-0\">\n <p className=\"text-[9px] uppercase tracking-wider text-white/50\">Titular</p>\n <p className=\"text-white text-sm font-medium truncate uppercase\">\n {holderName || \"—\"}\n </p>\n </div>\n <div className=\"text-right\">\n <p className=\"text-[9px] uppercase tracking-wider text-white/50\">Expira</p>\n <p className=\"text-white text-sm font-mono font-medium\">{expiryShort}</p>\n </div>\n </div>\n </div>\n );\n}\n\nexport default CardVisual;\n","\"use client\";\n\n// Source: pauhenriques-website/src/components/checkout/SavedCards.tsx\n// Phase 1.5: refactored for the package.\n//\n// Renders the customer's saved Nuvei cards with selection + CVC input + delete +\n// micro-charge verify flow for Diners/Pichincha cards stuck in \"review\" status.\n// Reads /api/nuvei/cards and POSTs /api/nuvei/verify — those endpoints are\n// provided by the package's handler factories (createCardsHandler,\n// createVerifyHandler) so paths are fixed by convention.\n\nimport { useEffect, useState } from \"react\";\nimport {\n FaCheck,\n FaLock,\n FaPlus,\n FaTrash,\n FaExclamationTriangle,\n FaShieldAlt,\n} from \"react-icons/fa\";\nimport { CardVisual } from \"./CardVisual.js\";\nimport type { SavedCard } from \"./types.js\";\n\ninterface SavedCardsProps {\n onSelectCard: (card: SavedCard, cvc: string) => void;\n selectedToken: string | null;\n onAddNewCard: () => void;\n /** Path of the consumer's BIN database endpoint, forwarded to CardVisual.\n * Default: \"/api/bins\". Set to null to disable bank-color lookups. */\n binDatabaseEndpoint?: string | null;\n}\n\nexport function SavedCards({\n onSelectCard,\n selectedToken,\n onAddNewCard,\n binDatabaseEndpoint,\n}: SavedCardsProps) {\n const [cards, setCards] = useState<SavedCard[]>([]);\n const [loading, setLoading] = useState(true);\n const [deleting, setDeleting] = useState<string | null>(null);\n const [cvcValues, setCvcValues] = useState<Record<string, string>>({});\n const [verifyingToken, setVerifyingToken] = useState<string | null>(null);\n const [verifyValue, setVerifyValue] = useState(\"\");\n const [verifyError, setVerifyError] = useState<string | null>(null);\n const [verifySubmitting, setVerifySubmitting] = useState(false);\n\n useEffect(() => {\n loadCards();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n async function loadCards() {\n setLoading(true);\n try {\n const res = await fetch(\"/api/nuvei/cards\");\n if (res.ok) {\n const data = await res.json();\n const allCards: SavedCard[] = data.cards || [];\n setCards(allCards);\n // Auto-select first valid card only\n if (!selectedToken) {\n const firstValid = allCards.find((c) => c.status === \"valid\");\n if (firstValid) onSelectCard(firstValid, \"\");\n }\n }\n } catch (err) {\n console.error(\"Error loading cards:\", err);\n } finally {\n setLoading(false);\n }\n }\n\n async function handleDelete(token: string) {\n setDeleting(token);\n try {\n const res = await fetch(\"/api/nuvei/cards\", {\n method: \"DELETE\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ token }),\n });\n if (res.ok) {\n setCards((prev) => prev.filter((c) => c.token !== token));\n if (verifyingToken === token) {\n setVerifyingToken(null);\n setVerifyValue(\"\");\n setVerifyError(null);\n }\n if (selectedToken === token) {\n const remaining = cards.filter(\n (c) => c.token !== token && c.status === \"valid\",\n );\n if (remaining.length > 0) {\n onSelectCard(remaining[0]!, \"\");\n }\n }\n }\n } catch (err) {\n console.error(\"Error deleting card:\", err);\n } finally {\n setDeleting(null);\n }\n }\n\n async function handleVerify(card: SavedCard) {\n if (!verifyValue.trim()) return;\n setVerifySubmitting(true);\n setVerifyError(null);\n\n try {\n const res = await fetch(\"/api/nuvei/verify\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n cardToken: card.token,\n transactionReference: card.transaction_reference,\n value: verifyValue.trim(),\n }),\n });\n\n const data = await res.json();\n\n if (data.success) {\n // Card verified — update status locally and select it\n setCards((prev) =>\n prev.map((c) =>\n c.token === card.token ? { ...c, status: \"valid\" as const } : c,\n ),\n );\n setVerifyingToken(null);\n setVerifyValue(\"\");\n onSelectCard({ ...card, status: \"valid\" }, \"\");\n } else {\n setVerifyError(\n data.error || \"Monto incorrecto. Revisa tu estado de cuenta.\",\n );\n }\n } catch {\n setVerifyError(\"Error de conexión. Intenta de nuevo.\");\n } finally {\n setVerifySubmitting(false);\n }\n }\n\n if (loading) {\n return (\n <div className=\"flex justify-center py-6\">\n <div className=\"w-12 h-12 rounded-full border-2 border-[var(--color-text-main)]/20 border-t-[var(--color-primary)] animate-spin\" />\n </div>\n );\n }\n\n const validCards = cards.filter((c) => c.status === \"valid\");\n const reviewCards = cards.filter(\n (c) => c.status === \"review\" || c.status === \"pending\",\n );\n\n return (\n <div className=\"space-y-4\">\n {/* Valid cards */}\n {validCards.length > 0 && (\n <div className=\"space-y-3\">\n {validCards.map((card) => {\n const isSelected = selectedToken === card.token;\n const cvc = cvcValues[card.token] || \"\";\n const maxCvc = card.type === \"ax\" ? 4 : 3;\n\n return (\n <div\n key={card.token}\n onClick={() => {\n onSelectCard(card, cvc);\n if (!isSelected) {\n setCvcValues((prev) => ({ ...prev, [card.token]: \"\" }));\n }\n }}\n className={`border rounded-lg cursor-pointer transition-all duration-200 ${\n isSelected\n ? \"border-[var(--color-primary)] bg-[var(--color-primary)]/5 ring-1 ring-[var(--color-primary)]\"\n : \"border-[var(--color-border-default)] hover:border-[var(--color-border-strong)]\"\n }`}\n >\n <div className=\"p-4 flex items-center justify-between gap-3\">\n <div className=\"flex items-center gap-2 min-w-0 flex-1\">\n <CardVisual\n bin={card.bin}\n brand={card.type}\n last4={card.number}\n holderName={card.holder_name}\n expiryMonth={card.expiry_month}\n expiryYear={card.expiry_year}\n binDatabaseEndpoint={binDatabaseEndpoint}\n />\n {isSelected && (\n <FaCheck className=\"w-3.5 h-3.5 text-[var(--color-primary)] shrink-0\" />\n )}\n </div>\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleDelete(card.token);\n }}\n disabled={deleting === card.token}\n className=\"text-[var(--color-text-main)]/30 hover:text-[var(--color-error)] p-1 disabled:opacity-50 transition-colors cursor-pointer shrink-0\"\n title=\"Eliminar tarjeta\"\n >\n <FaTrash className=\"w-3 h-3\" />\n </button>\n </div>\n\n {/* CVC input — appears inline when card is selected */}\n {isSelected && (\n <div className=\"px-4 pb-4 pt-0 border-t border-[var(--color-primary)]/15\">\n <div className=\"flex items-center gap-3 pt-3\">\n <FaLock className=\"w-3 h-3 text-[var(--color-text-main)]/30 shrink-0\" />\n <label\n htmlFor={`cvc-${card.token}`}\n className=\"text-xs text-[var(--color-text-main)]/50 shrink-0\"\n >\n Código de seguridad\n </label>\n <input\n id={`cvc-${card.token}`}\n type=\"text\"\n inputMode=\"numeric\"\n maxLength={maxCvc}\n autoComplete=\"cc-csc\"\n placeholder={maxCvc === 4 ? \"····\" : \"···\"}\n value={cvc}\n onClick={(e) => e.stopPropagation()}\n onChange={(e) => {\n const val = e.target.value.replace(/\\D/g, \"\");\n setCvcValues((prev) => ({\n ...prev,\n [card.token]: val,\n }));\n onSelectCard(card, val);\n }}\n autoFocus\n className=\"w-16 text-center font-mono text-sm tracking-[0.25em] border border-[var(--color-border-default)] rounded-lg py-2 bg-[var(--color-background)] text-[var(--color-text-main)] placeholder:text-[var(--color-text-main)]/20 focus:outline-none focus:ring-2 focus:ring-[var(--color-primary)]/50 focus:border-[var(--color-primary)] transition-all\"\n />\n </div>\n </div>\n )}\n </div>\n );\n })}\n </div>\n )}\n\n {/* Review cards — need verification */}\n {reviewCards.length > 0 && (\n <div className=\"space-y-3\">\n {reviewCards.map((card) => {\n const isExpanded = verifyingToken === card.token;\n return (\n <div\n key={card.token}\n className=\"border border-[var(--color-warning)]/30 bg-[var(--color-warning)]/5 rounded-lg overflow-hidden transition-all duration-200\"\n >\n {/* Card header */}\n <div className=\"p-4 flex items-center justify-between gap-3\">\n <div className=\"flex items-center gap-2 min-w-0 flex-1\">\n <CardVisual\n bin={card.bin}\n brand={card.type}\n last4={card.number}\n holderName={card.holder_name}\n expiryMonth={card.expiry_month}\n expiryYear={card.expiry_year}\n binDatabaseEndpoint={binDatabaseEndpoint}\n />\n <span className=\"text-[10px] font-medium uppercase tracking-wider bg-[var(--color-warning)]/15 text-[var(--color-warning)] px-1.5 py-0.5 rounded shrink-0 inline-flex items-center gap-1\">\n <FaExclamationTriangle className=\"w-2.5 h-2.5\" />\n Verificar\n </span>\n </div>\n <div className=\"flex items-center gap-2 shrink-0\">\n {!isExpanded && (\n <button\n onClick={() => {\n setVerifyingToken(card.token);\n setVerifyValue(\"\");\n setVerifyError(null);\n }}\n className=\"text-xs font-medium text-[var(--color-primary)] hover:text-[var(--color-primary-hover)] underline underline-offset-2 transition-colors cursor-pointer\"\n >\n Verificar\n </button>\n )}\n <button\n onClick={() => handleDelete(card.token)}\n disabled={deleting === card.token}\n className=\"text-[var(--color-text-main)]/30 hover:text-[var(--color-error)] p-1 disabled:opacity-50 transition-colors cursor-pointer\"\n title=\"Eliminar tarjeta\"\n >\n <FaTrash className=\"w-3 h-3\" />\n </button>\n </div>\n </div>\n\n {/* Verification form — expanded inline */}\n {isExpanded && (\n <div className=\"px-4 pb-4 border-t border-[var(--color-warning)]/20\">\n <div className=\"pt-3 space-y-3\">\n <div className=\"flex items-start gap-2.5\">\n <FaShieldAlt className=\"w-3.5 h-3.5 text-[var(--color-primary)] mt-0.5 shrink-0\" />\n <p className=\"text-xs text-[var(--color-text-main)]/60 leading-relaxed\">\n Se realizó un micro-cobro a tu tarjeta. Revisa tu\n estado de cuenta bancario e ingresa el monto exacto\n para verificarla.\n </p>\n </div>\n\n <div className=\"flex gap-2\">\n <div className=\"relative flex-1\">\n <span className=\"absolute left-3 top-1/2 -translate-y-1/2 text-[var(--color-text-main)]/40 text-sm\">\n $\n </span>\n <input\n type=\"text\"\n inputMode=\"decimal\"\n value={verifyValue}\n onChange={(e) => {\n const val = e.target.value.replace(\n /[^0-9.]/g,\n \"\",\n );\n setVerifyValue(val);\n }}\n placeholder=\"0.00\"\n className=\"w-full pl-7 pr-3 py-2.5 text-sm border border-[var(--color-border-default)] rounded-lg bg-[var(--color-background)] text-[var(--color-text-main)] placeholder:text-[var(--color-text-main)]/30 focus:outline-none focus:ring-2 focus:ring-[var(--color-primary)]/50 focus:border-[var(--color-primary)] transition-all\"\n autoFocus\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleVerify(card);\n }}\n />\n </div>\n <button\n onClick={() => handleVerify(card)}\n disabled={verifySubmitting || !verifyValue.trim()}\n className=\"px-4 py-2.5 bg-[var(--color-primary)] hover:bg-[var(--color-primary-hover)] text-white text-sm font-medium rounded-lg transition-colors disabled:bg-[var(--color-surface-elevated)] disabled:text-[var(--color-text-main)]/30 cursor-pointer\"\n >\n {verifySubmitting ? (\n <div className=\"w-4 h-4 rounded-full border-2 border-white border-b-transparent animate-spin\" />\n ) : (\n \"Verificar\"\n )}\n </button>\n </div>\n\n {verifyError && (\n <p className=\"text-xs text-[var(--color-error)]\">{verifyError}</p>\n )}\n\n <button\n onClick={() => {\n setVerifyingToken(null);\n setVerifyValue(\"\");\n setVerifyError(null);\n }}\n className=\"text-xs text-[var(--color-text-main)]/40 hover:text-[var(--color-text-main)]/60 transition-colors cursor-pointer\"\n >\n Cancelar\n </button>\n </div>\n </div>\n )}\n </div>\n );\n })}\n </div>\n )}\n\n <button\n onClick={onAddNewCard}\n className=\"w-full flex items-center justify-center gap-2 p-3 border-2 border-dashed border-[var(--color-border-default)] rounded-lg text-sm text-[var(--color-text-main)]/50 hover:border-[var(--color-primary)] hover:text-[var(--color-primary)] transition-colors cursor-pointer\"\n >\n <FaPlus className=\"w-3 h-3\" />\n {cards.length > 0 ? \"Usar otra tarjeta\" : \"Agregar tarjeta\"}\n </button>\n </div>\n );\n}\n\nexport default SavedCards;\n","\"use client\";\n\n// Source: pauhenriques-website/src/components/checkout/NuveiPaymentForm.tsx\n// Phase 1.5: refactored for the package.\n//\n// Mounts the Paymentez SDK (loaded via next/script) into a tokenize form\n// container, captures the result, and calls onTokenSuccess/onTokenError.\n// Nuvei credentials and SDK config (country, exclusive card types, icon\n// color) are read from props with sensible defaults so the same component\n// works for Pau, whitelabel clients, and future custom-made sites.\n\nimport { useEffect, useRef, useState, useCallback } from \"react\";\nimport Script from \"next/script\";\nimport {\n FaLock,\n FaExclamationTriangle,\n FaTimesCircle,\n FaInfoCircle,\n FaRedo,\n} from \"react-icons/fa\";\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\ninterface PaymentGatewayInstance {\n generate_tokenize: (\n data: TokenizeData,\n containerSelector: string,\n responseCallback: (response: TokenizeResponse) => void,\n notCompletedCallback: (message: string) => void,\n ) => void;\n tokenize: () => void;\n}\n\ninterface TokenizeData {\n locale: string;\n user: {\n id: string;\n email: string;\n };\n configuration: {\n default_country: string;\n icon_colour?: string;\n use_dropdowns?: boolean;\n exclusive_types?: string[];\n invalid_card_type_message?: string;\n };\n}\n\ninterface TokenizeResponse {\n card: {\n bin: string;\n status: \"valid\" | \"review\" | \"rejected\" | string;\n token?: string;\n message?: string;\n expiry_year?: string;\n expiry_month?: string;\n transaction_reference?: string;\n type?: string;\n number?: string;\n };\n}\n\ntype ErrorVariant = \"rejected\" | \"duplicate\" | \"incomplete\" | \"system\";\n\ninterface CardError {\n variant: ErrorVariant;\n title: string;\n message: string;\n duplicateToken?: string;\n}\n\nexport interface TokenizedCardInfo {\n type?: string;\n number?: string;\n expiry_year?: string;\n expiry_month?: string;\n}\n\ninterface NuveiPaymentFormProps {\n uid: string;\n email: string;\n onTokenSuccess: (\n token: string,\n cardInfo: TokenizedCardInfo,\n saveCard: boolean,\n ) => void;\n /** @deprecated Errors are rendered inline by the component. This callback is\n * preserved as optional for API compatibility but is never invoked.\n * For telemetry, listen for the relevant DOM events or wrap setError yourself. */\n onTokenError?: (error: string) => void;\n /** Forces the submit button to disabled state (in addition to processing). */\n disabled?: boolean;\n /** Override button text (default: \"Agregar Tarjeta\" / \"Continuar con pago\") */\n buttonLabel?: string;\n /** Hide \"Guardar tarjeta\" checkbox — forces saveCard=false (guest flows) */\n showSaveCardCheckbox?: boolean;\n /** Text shown during processing (default: \"Verificando…\") */\n processingLabel?: string;\n /** Nuvei client app code. Default: NEXT_PUBLIC_NUVEI_CLIENT_APP_CODE env var. */\n nuveiAppCode?: string;\n /** Nuvei client app key. Default: NEXT_PUBLIC_NUVEI_CLIENT_APP_KEY env var. */\n nuveiAppKey?: string;\n /** Nuvei environment. Default: NEXT_PUBLIC_NUVEI_ENV env var, falling back to \"stg\". */\n nuveiEnv?: \"prod\" | \"stg\";\n /** ISO-3 country code for the SDK form. Default: \"ECU\". */\n defaultCountry?: string;\n /** Allowed card brand codes for tokenization (Paymentez). Default: [\"vi\",\"mc\",\"ax\",\"di\"]. */\n exclusiveCardTypes?: string[];\n /** Hex color for the SDK form icons. Default: reads var(--color-primary) from the DOM. */\n iconColor?: string;\n}\n\nconst SDK_URL =\n \"https://cdn.paymentez.com/ccapi/sdk/payment_sdk_stable.min.js\";\nconst CONTAINER_ID = \"nuvei-tokenize-container\";\n\nconst DEFAULT_EXCLUSIVE_TYPES = [\"vi\", \"mc\", \"ax\", \"di\"] as const;\n\nfunction readCssVar(name: string, fallback: string): string {\n if (typeof window === \"undefined\") return fallback;\n const value = getComputedStyle(document.documentElement)\n .getPropertyValue(name)\n .trim();\n return value || fallback;\n}\n\nexport function NuveiPaymentForm({\n uid,\n email,\n onTokenSuccess,\n disabled,\n buttonLabel,\n showSaveCardCheckbox = true,\n processingLabel = \"Verificando…\",\n nuveiAppCode,\n nuveiAppKey,\n nuveiEnv,\n defaultCountry = \"ECU\",\n exclusiveCardTypes,\n iconColor,\n}: NuveiPaymentFormProps) {\n const [sdkReady, setSdkReady] = useState(false);\n const [sdkTimedOut, setSdkTimedOut] = useState(false);\n const [isProcessing, setIsProcessing] = useState(false);\n const [isDeletingDuplicate, setIsDeletingDuplicate] = useState(false);\n const [error, setError] = useState<CardError | null>(null);\n const [saveCard, setSaveCard] = useState(showSaveCardCheckbox);\n const sdkInitRef = useRef(false);\n const pgSdkRef = useRef<PaymentGatewayInstance | null>(null);\n const saveCardRef = useRef(showSaveCardCheckbox);\n\n // Keep ref in sync for use inside memoized callback\n useEffect(() => {\n saveCardRef.current = saveCard;\n }, [saveCard]);\n\n // Timeout: if SDK hasn't loaded in 15s, show a helpful message\n useEffect(() => {\n if (sdkReady) return;\n const timer = setTimeout(() => {\n if (!sdkReady) setSdkTimedOut(true);\n }, 15000);\n return () => clearTimeout(timer);\n }, [sdkReady]);\n\n function buildError(rawMsg: string): CardError {\n const msg = rawMsg.toLowerCase();\n\n if (msg.includes(\"already\")) {\n return {\n variant: \"duplicate\",\n title: \"Tarjeta ya registrada\",\n message:\n \"Esta tarjeta ya está en tu cuenta. Selecciónala desde tus tarjetas guardadas.\",\n };\n }\n if (msg.includes(\"blacklist\") || msg.includes(\"black list\")) {\n return {\n variant: \"rejected\",\n title: \"Tarjeta no aceptada\",\n message:\n \"Esta tarjeta está en una lista restringida y no puede ser utilizada. Contacta a tu banco o intenta con otra tarjeta.\",\n };\n }\n if (msg.includes(\"fraud\")) {\n return {\n variant: \"rejected\",\n title: \"Tarjeta rechazada por seguridad\",\n message:\n \"El sistema de seguridad rechazó esta tarjeta. Intenta con otra tarjeta.\",\n };\n }\n if (\n msg.includes(\"reject\") ||\n msg.includes(\"response by mock\") ||\n msg.includes(\"denied\") ||\n msg.includes(\"declined\")\n ) {\n return {\n variant: \"rejected\",\n title: \"Tarjeta rechazada\",\n message:\n \"El banco emisor rechazó esta tarjeta. Verifica los datos o intenta con otra tarjeta.\",\n };\n }\n if (msg.includes(\"expired\")) {\n return {\n variant: \"rejected\",\n title: \"Tarjeta vencida\",\n message:\n \"Esta tarjeta está vencida. Actualiza tu método de pago o usa otra tarjeta.\",\n };\n }\n if (msg.includes(\"invalid\") || msg.includes(\"not valid\")) {\n return {\n variant: \"rejected\",\n title: \"Tarjeta inválida\",\n message:\n \"Los datos de la tarjeta no son válidos. Verifica el número, fecha y CVV.\",\n };\n }\n // Fallback — never show raw Nuvei messages to the user\n return {\n variant: \"rejected\",\n title: \"Tarjeta no aceptada\",\n message:\n \"No se pudo registrar esta tarjeta. Verifica los datos o intenta con otra.\",\n };\n }\n\n const responseCallback = useCallback(\n (response: any) => {\n setIsProcessing(false);\n\n if (response.error) {\n if (process.env.NODE_ENV !== \"production\") {\n console.log(\n \"[NuveiPaymentForm] SDK error response:\",\n JSON.stringify(response.error),\n );\n }\n const errorType = response.error?.type || \"\";\n if (errorType.toLowerCase().includes(\"card already added\")) {\n // Extract token from \"Card already added: TOKEN_HERE\"\n const tokenMatch = errorType.match(/Card already added:\\s*(\\S+)/i);\n setError({\n variant: \"duplicate\",\n title: \"Tarjeta ya registrada\",\n message:\n \"Esta tarjeta ya existe en tu cuenta pero no se puede usar. Puedes eliminarla y volver a agregarla.\",\n duplicateToken: tokenMatch?.[1],\n });\n } else {\n setError({\n variant: \"rejected\",\n title: \"Tarjeta no aceptada\",\n message:\n \"No se pudo registrar esta tarjeta. Verifica los datos o intenta con otra.\",\n });\n }\n return;\n }\n\n if (!response.card) {\n setError({\n variant: \"system\",\n title: \"Respuesta inesperada\",\n message: \"No se recibió respuesta del procesador. Intenta de nuevo.\",\n });\n return;\n }\n\n if (\n response.card.status === \"valid\" ||\n response.card.status === \"review\"\n ) {\n if (response.card.token) {\n setError(null);\n onTokenSuccess(\n response.card.token,\n {\n type: response.card.type,\n number: response.card.number,\n expiry_year: response.card.expiry_year,\n expiry_month: response.card.expiry_month,\n },\n saveCardRef.current,\n );\n } else {\n setError({\n variant: \"system\",\n title: \"Token no recibido\",\n message: \"No se pudo registrar la tarjeta. Intenta de nuevo.\",\n });\n }\n } else {\n // Show error inline only — don't propagate to parent to avoid duplicate messages\n setError(buildError(response.card.message || \"\"));\n }\n },\n [onTokenSuccess],\n );\n\n const notCompletedCallback = useCallback((message: string) => {\n setIsProcessing(false);\n setError({\n variant: \"incomplete\",\n title: \"Datos incompletos\",\n message: `Revisa los campos del formulario: ${message}`,\n });\n }, []);\n\n const handlePay = () => {\n if (!pgSdkRef.current) return;\n setError(null);\n setIsProcessing(true);\n pgSdkRef.current.tokenize();\n };\n\n const handleScriptReady = useCallback(() => {\n try {\n const PG = new Function(\"return PaymentGateway\")();\n (window as any).PaymentGateway = PG;\n setSdkReady(true);\n } catch {\n setError({\n variant: \"system\",\n title: \"Error de inicialización\",\n message:\n \"No se pudo inicializar el sistema de pagos. Recarga la página.\",\n });\n }\n }, []);\n\n useEffect(() => {\n if (!sdkReady || sdkInitRef.current) return;\n sdkInitRef.current = true;\n\n const appCode =\n nuveiAppCode ?? process.env.NEXT_PUBLIC_NUVEI_CLIENT_APP_CODE;\n const appKey = nuveiAppKey ?? process.env.NEXT_PUBLIC_NUVEI_CLIENT_APP_KEY;\n\n if (!appCode || !appKey) {\n setError({\n variant: \"system\",\n title: \"Configuración incompleta\",\n message: \"Credenciales de pago no configuradas. Contacta soporte.\",\n });\n return;\n }\n\n const env =\n nuveiEnv ??\n (process.env.NEXT_PUBLIC_NUVEI_ENV === \"prod\" ? \"prod\" : \"stg\");\n const PGClass = (window as any).PaymentGateway;\n\n if (!PGClass) {\n setError({\n variant: \"system\",\n title: \"SDK no disponible\",\n message:\n \"El sistema de pagos no cargó correctamente. Recarga la página.\",\n });\n return;\n }\n\n const pgSdk: PaymentGatewayInstance = new PGClass(env, appCode, appKey);\n pgSdkRef.current = pgSdk;\n\n const resolvedIconColor =\n iconColor ?? readCssVar(\"--color-primary\", \"#3b82f6\");\n const allowedTypes = exclusiveCardTypes ?? [...DEFAULT_EXCLUSIVE_TYPES];\n\n const tokenizeData: TokenizeData = {\n locale: \"es\",\n user: {\n id: uid,\n email: email,\n },\n configuration: {\n default_country: defaultCountry,\n icon_colour: resolvedIconColor,\n use_dropdowns: false,\n exclusive_types: allowedTypes,\n invalid_card_type_message:\n \"Tipo de tarjeta no aceptada para esta operación.\",\n },\n };\n\n pgSdk.generate_tokenize(\n tokenizeData,\n `#${CONTAINER_ID}`,\n responseCallback,\n notCompletedCallback,\n );\n }, [\n sdkReady,\n uid,\n email,\n responseCallback,\n notCompletedCallback,\n nuveiAppCode,\n nuveiAppKey,\n nuveiEnv,\n defaultCountry,\n exclusiveCardTypes,\n iconColor,\n ]);\n\n return (\n <div className=\"space-y-4\">\n <Script\n src={SDK_URL}\n strategy=\"afterInteractive\"\n onReady={handleScriptReady}\n />\n\n {/* Terminal error state — hide form, show only error with clear actions */}\n {error && error.variant !== \"incomplete\" ? (\n <div\n className={`rounded-xl border p-5 text-sm ${\n error.variant === \"duplicate\"\n ? \"bg-[var(--color-primary)]/5 border-[var(--color-primary)]/20\"\n : \"bg-[var(--color-error)]/5 border-[var(--color-error)]/20\"\n }`}\n >\n <div className=\"flex gap-3\">\n <div className=\"shrink-0 mt-0.5\">\n {error.variant === \"duplicate\" ? (\n <FaInfoCircle className=\"w-4 h-4 text-[var(--color-primary)]\" />\n ) : (\n <FaTimesCircle className=\"w-4 h-4 text-[var(--color-error)]\" />\n )}\n </div>\n <div className=\"grow space-y-1\">\n <p className=\"font-semibold text-[var(--color-text-main)]\">\n {error.title}\n </p>\n <p className=\"text-[var(--color-text-main)]/60 leading-relaxed\">\n {error.message}\n </p>\n </div>\n </div>\n <div className=\"flex gap-3 mt-4 pt-3 border-t border-[var(--color-border-subtle)]\">\n {error.variant === \"duplicate\" && error.duplicateToken ? (\n <button\n type=\"button\"\n disabled={isDeletingDuplicate}\n onClick={async () => {\n setIsDeletingDuplicate(true);\n try {\n const res = await fetch(\"/api/nuvei/cards\", {\n method: \"DELETE\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n token: error.duplicateToken,\n }),\n });\n const data = await res.json().catch(() => ({}));\n if (process.env.NODE_ENV !== \"production\") {\n console.log(\n \"[NuveiPaymentForm] Delete response:\",\n res.status,\n JSON.stringify(data),\n );\n }\n if (res.ok && !data.error) {\n setError(null);\n // Re-initialize SDK form so user can add again\n sdkInitRef.current = false;\n setSdkReady(false);\n setTimeout(() => handleScriptReady(), 100);\n } else {\n setError({\n variant: \"rejected\",\n title: \"No se pudo eliminar\",\n message:\n \"El procesador de pagos no permitió eliminar esta tarjeta. Intenta con otra tarjeta o contacta a tu banco.\",\n });\n }\n } catch {\n setError({\n variant: \"system\",\n title: \"Error de conexión\",\n message:\n \"No se pudo conectar al servidor. Intenta de nuevo.\",\n });\n } finally {\n setIsDeletingDuplicate(false);\n }\n }}\n className=\"flex-1 bg-[var(--color-primary)] hover:bg-[var(--color-primary-hover)] text-white font-semibold py-2.5 px-4 rounded-lg transition-colors text-sm cursor-pointer inline-flex items-center justify-center gap-2 disabled:opacity-50\"\n >\n {isDeletingDuplicate ? \"Eliminando...\" : \"Eliminar y reintentar\"}\n </button>\n ) : (\n <button\n type=\"button\"\n onClick={() => {\n setError(null);\n // Clean DOM container and re-initialize SDK form\n const container = document.getElementById(CONTAINER_ID);\n if (container) container.innerHTML = \"\";\n sdkInitRef.current = false;\n setSdkReady(false);\n setTimeout(() => handleScriptReady(), 100);\n }}\n className=\"flex-1 bg-[var(--color-primary)] hover:bg-[var(--color-primary-hover)] text-white font-semibold py-2.5 px-4 rounded-lg transition-colors text-sm cursor-pointer inline-flex items-center justify-center gap-2\"\n >\n <FaRedo className=\"w-3 h-3\" />\n Intentar con otra tarjeta\n </button>\n )}\n </div>\n </div>\n ) : (\n <>\n {/* SDK renders its iframe-based form inside this container.\n Visual styling is in globals.css — the iframe is cross-origin,\n so we can only style the wrapper, not the form inside. */}\n <div id={CONTAINER_ID} className=\"min-h-16\" />\n\n {/* Inline validation errors (incomplete fields, system errors) */}\n {error && (\n <div\n className={`rounded-xl border p-4 text-sm ${\n error.variant === \"incomplete\"\n ? \"bg-[var(--color-warning)]/5 border-[var(--color-warning)]/20\"\n : \"bg-[var(--color-surface-elevated)] border-[var(--color-border-subtle)]\"\n }`}\n >\n <div className=\"flex gap-3\">\n <FaExclamationTriangle\n className={`w-4 h-4 shrink-0 mt-0.5 ${\n error.variant === \"incomplete\"\n ? \"text-[var(--color-warning)]\"\n : \"text-[var(--color-text-main)]/40\"\n }`}\n />\n <div className=\"grow\">\n <p className=\"font-semibold text-[var(--color-text-main)]\">\n {error.title}\n </p>\n <p className=\"text-[var(--color-text-main)]/60 leading-relaxed\">\n {error.message}\n </p>\n </div>\n </div>\n </div>\n )}\n\n {sdkReady && (\n <>\n {showSaveCardCheckbox && (\n <label className=\"flex items-center gap-2.5 cursor-pointer select-none\">\n <input\n type=\"checkbox\"\n checked={saveCard}\n onChange={(e) => setSaveCard(e.target.checked)}\n className=\"w-4 h-4 rounded border-[var(--color-border-default)] text-[var(--color-primary)] focus:ring-[var(--color-primary)]/30 cursor-pointer accent-[var(--color-primary)]\"\n />\n <span className=\"text-sm text-[var(--color-text-main)]/60\">\n Guardar tarjeta para futuras compras\n </span>\n </label>\n )}\n <button\n type=\"button\"\n onClick={handlePay}\n disabled={isProcessing || disabled}\n className=\"w-full bg-[var(--color-primary)] hover:bg-[var(--color-primary-hover)] text-white font-semibold py-3 px-4 rounded-lg transition-all duration-200 disabled:bg-[var(--color-surface-elevated)] disabled:text-[var(--color-text-main)]/30 disabled:cursor-not-allowed flex items-center justify-center gap-2 active:scale-[0.97] cursor-pointer\"\n >\n {isProcessing ? (\n <>\n <div className=\"w-5 h-5 rounded-full border-2 border-white border-b-transparent animate-spin\" />\n {processingLabel}\n </>\n ) : (\n buttonLabel ??\n (saveCard ? \"Agregar Tarjeta\" : \"Continuar con pago\")\n )}\n </button>\n </>\n )}\n </>\n )}\n\n {!sdkReady && (\n <div className=\"flex flex-col items-center py-4 gap-3\">\n <div className=\"w-12 h-12 rounded-full border-2 border-[var(--color-text-main)]/20 border-t-[var(--color-primary)] animate-spin\" />\n {sdkTimedOut && (\n <div className=\"text-center space-y-2\">\n <p className=\"text-xs text-[var(--color-text-main)]/50\">\n El sistema de pagos está tardando en cargar.\n </p>\n <button\n type=\"button\"\n onClick={() => window.location.reload()}\n className=\"text-xs font-semibold text-[var(--color-primary)] hover:text-[var(--color-primary-hover)] underline underline-offset-2 transition-colors\"\n >\n Recargar página\n </button>\n </div>\n )}\n </div>\n )}\n\n {/* Trust indicator */}\n <div className=\"flex items-center justify-center gap-2 text-[var(--color-text-main)]/30 text-xs\">\n <FaLock className=\"w-3 h-3\" />\n <span>Pago 100% seguro · Tokenización PCI Compliant</span>\n </div>\n </div>\n );\n}\n\nexport default NuveiPaymentForm;\n"]}
1
+ {"version":3,"sources":["../../src/ui/bin-lookup.ts","../../src/ui/bank-colors.ts","../../src/ui/types.ts","../../src/ui/CardVisual.tsx","../../src/ui/SavedCards.tsx","../../src/ui/NuveiPaymentForm.tsx"],"names":["useState","useEffect","jsx","jsxs","FaExclamationTriangle","FaLock"],"mappings":";;;;;;;;AASA,IAAM,WAAA,GAAc,gBAAA;AACpB,IAAI,WAAA,GAAkC,IAAA;AACtC,IAAI,QAAA,GAA+C,IAAA;AAEnD,SAAS,eAAA,GAAsC;AAC7C,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,IAAA;AAC1C,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,YAAA,CAAa,OAAA,CAAQ,WAAW,CAAA;AAC5C,IAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AACjB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC7B,IAAA,IAAI,UAAU,MAAA,CAAO,IAAA,IAAQ,OAAO,MAAA,CAAO,IAAA,KAAS,UAAU,OAAO,MAAA;AAAA,EACvE,CAAA,CAAA,MAAQ;AAAA,EAER;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,eAAe,EAAA,EAAiB;AACvC,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACnC,EAAA,IAAI;AACF,IAAA,YAAA,CAAa,OAAA,CAAQ,WAAA,EAAa,IAAA,CAAK,SAAA,CAAU,EAAE,CAAC,CAAA;AAAA,EACtD,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAEA,eAAe,cAAc,QAAA,EAA+C;AAC1E,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,IAAA;AAC1C,EAAA,IAAI;AACF,IAAA,MAAM,MAAM,MAAM,KAAA,CAAM,UAAU,EAAE,KAAA,EAAO,WAAW,CAAA;AACtD,IAAA,IAAI,CAAC,GAAA,CAAI,EAAA,EAAI,OAAO,IAAA;AACpB,IAAA,OAAQ,MAAM,IAAI,IAAA,EAAK;AAAA,EACzB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAQA,eAAsB,cAAA,CACpB,WAAmB,WAAA,EACU;AAC7B,EAAA,IAAI,aAAa,OAAO,WAAA;AAGxB,EAAA,MAAM,SAAS,eAAA,EAAgB;AAC/B,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,WAAA,GAAc,MAAA;AACd,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,QAAA,GAAW,aAAA,CAAc,QAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,KAAA,KAAU;AACjD,QAAA,IAAI,KAAA,IAAS,KAAA,CAAM,OAAA,KAAY,MAAA,CAAO,OAAA,EAAS;AAC7C,UAAA,WAAA,GAAc,KAAA;AACd,UAAA,cAAA,CAAe,KAAK,CAAA;AAAA,QACtB;AACA,QAAA,QAAA,GAAW,IAAA;AACX,QAAA,OAAO,KAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAGA,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,QAAA,GAAW,aAAA,CAAc,QAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,KAAA,KAAU;AACjD,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,WAAA,GAAc,KAAA;AACd,QAAA,cAAA,CAAe,KAAK,CAAA;AAAA,MACtB;AACA,MAAA,QAAA,GAAW,IAAA;AACX,MAAA,OAAO,KAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH;AACA,EAAA,OAAO,QAAA;AACT;AAMO,SAAS,aAAA,CACd,YACA,EAAA,EACgB;AAChB,EAAA,IAAI,CAAC,EAAA,IAAM,CAAC,UAAA,EAAY,OAAO,IAAA;AAC/B,EAAA,MAAM,MAAA,GAAS,UAAA,CAAW,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAC3C,EAAA,IAAI,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,OAAO,IAAA;AAE9B,EAAA,KAAA,MAAW,GAAA,IAAO,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,EAAG;AAC3B,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA;AAClC,IAAA,MAAM,GAAA,GAAM,EAAA,CAAG,IAAA,CAAK,MAAM,CAAA;AAC1B,IAAA,IAAI,KAAK,OAAO,GAAA;AAAA,EAClB;AACA,EAAA,OAAO,IAAA;AACT;AAGA,eAAsB,SAAA,CACpB,UAAA,EACA,QAAA,GAAmB,WAAA,EACM;AACzB,EAAA,MAAM,EAAA,GAAK,MAAM,cAAA,CAAe,QAAQ,CAAA;AACxC,EAAA,OAAO,aAAA,CAAc,YAAY,EAAE,CAAA;AACrC;;;AC5FA,IAAM,aAAA,GAA4C;AAAA;AAAA,EAEhD,cAAA,EAAgB;AAAA,IACd,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IAClD,OAAA,EAAS,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACtD;AAAA,EACA,SAAA,EAAW;AAAA,IACT,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IAClD,OAAA,EAAS,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACtD;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IAClD,OAAA,EAAS,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACtD;AAAA,EACA,QAAA,EAAU;AAAA,IACR,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IAClD,OAAA,EAAS,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACtD;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,SAAA,EAAW;AAAA,IACT,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IAClD,OAAA,EAAS,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACtD;AAAA,EACA,aAAA,EAAe;AAAA,IACb,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IAClD,OAAA,EAAS,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACtD;AAAA,EACA,+BAAA,EAAiC;AAAA,IAC/B,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IAClD,OAAA,EAAS,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACtD;AAAA,EACA,UAAA,EAAY;AAAA,IACV,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IAClD,OAAA,EAAS,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACtD;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,WAAA,EAAa;AAAA,IACX,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,WAAA,EAAa;AAAA,IACX,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IAClD,OAAA,EAAS,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACtD;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IAClD,OAAA,EAAS,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACtD;AAAA,EACA,oEAAA,EAAsE;AAAA,IACpE,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IAClD,OAAA,EAAS,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACtD;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IAClD,OAAA,EAAS,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACtD;AAAA,EACA,GAAA,EAAK;AAAA,IACH,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IAClD,OAAA,EAAS,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACtD;AAAA,EACA,0CAAA,EAA4C;AAAA,IAC1C,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IAClD,OAAA,EAAS,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACtD;AAAA,EACA,0BAAA,EAA4B;AAAA,IAC1B,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA;AAAA,EAGA,cAAA,EAAgB;AAAA,IACd,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,SAAA,EAAW;AAAA,IACT,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,QAAA,EAAU;AAAA,IACR,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,uBAAA,EAAyB;AAAA,IACvB,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,SAAA,EAAW;AAAA,IACT,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,aAAA,EAAe;AAAA,IACb,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,OAAA,EAAS;AAAA,IACP,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,wBAAA,EAA0B;AAAA,IACxB,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,4BAAA,EAAyB;AAAA,IACvB,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,uBAAA,EAAyB;AAAA,IACvB,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,cAAA,EAAW;AAAA,IACT,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,SAAA,EAAW;AAAA,IACT,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA;AAAA,EAGA,UAAA,EAAY;AAAA,IACV,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,SAAA,EAAW;AAAA,IACT,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,uBAAA,EAAyB;AAAA,IACvB,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA;AAAA,EAGA,mBAAA,EAAqB;AAAA,IACnB,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,2DAAA,EAA6D;AAAA,IAC3D,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,uDAAA,EAAyD;AAAA,IACvD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA;AAAA,EAGA,sBAAA,EAAwB;AAAA,IACtB,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,0CAAA,EAA4C;AAAA,IAC1C,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,6BAAA,EAA+B;AAAA,IAC7B,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,6BAAA,EAA+B;AAAA,IAC7B,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,wBAAA,EAA0B;AAAA,IACxB,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,8BAAA,EAAgC;AAAA,IAC9B,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,mCAAA,EAAqC;AAAA,IACnC,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,OAAA,EAAS;AAAA,IACP,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,oCAAA,EAAsC;AAAA,IACpC,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,SAAA,EAAW;AAAA,IACT,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,mCAAA,EAAqC;AAAA,IACnC,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,QAAA,EAAU;AAAA,IACR,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,0CAAA,EAA4C;AAAA,IAC1C,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,WAAA,EAAa;AAAA,IACX,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,0DAAA,EAA4D;AAAA,IAC1D,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,gCAAA,EAAkC;AAAA,IAChC,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,KAAA,EAAO;AAAA,IACL,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,yCAAA,EAA2C;AAAA,IACzC,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,yBAAA,EAA2B;AAAA,IACzB,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,iCAAA,EAAmC;AAAA,IACjC,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,uBAAA,EAAyB;AAAA,IACvB,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,8CAAA,EAAgD;AAAA,IAC9C,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,6BAAA,EAA+B;AAAA,IAC7B,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,4BAAA,EAA8B;AAAA,IAC5B,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,SAAA,EAAW;AAAA,IACT,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA;AAAA,EAGA,oBAAA,EAAsB;AAAA,IACpB,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,uBAAA,EAAyB;AAAA,IACvB,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,+BAAA,EAAiC;AAAA,IAC/B,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,wDAAA,EAA0D;AAAA,IACxD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,+BAAA,EAAiC;AAAA,IAC/B,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,qBAAA,EAAuB;AAAA,IACrB,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,+BAAA,EAAiC;AAAA,IAC/B,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,iCAAA,EAAmC;AAAA,IACjC,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,mBAAA,EAAqB;AAAA,IACnB,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,6BAAA,EAA+B;AAAA,IAC7B,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,0BAAA,EAA4B;AAAA,IAC1B,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,0BAAA,EAA4B;AAAA,IAC1B,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,4BAAA,EAA8B;AAAA,IAC5B,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,+BAAA,EAAiC;AAAA,IAC/B,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA,EACA,2BAAA,EAA6B;AAAA,IAC3B,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU,GACpD;AAAA;AAAA,EAGA,QAAA,EAAU;AAAA,IACR,MAAA,EAAQ,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA,EAAU;AAAA,IACnD,KAAA,EAAO,EAAE,OAAA,EAAS,SAAA,EAAW,WAAW,SAAA;AAAU;AAEtD,CAAA;AAEA,SAAS,UAAU,IAAA,EAAsB;AACvC,EAAA,OAAO,IAAA,CACJ,WAAA,EAAY,CACZ,SAAA,CAAU,KAAK,CAAA,CACf,OAAA,CAAQ,kBAAA,EAAoB,EAAE,CAAA,CAC9B,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAA;AAC1B;AASO,SAAS,iBAAA,CACd,UACA,QAAA,EACoB;AACpB,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,EAAA,MAAM,IAAA,GAAO,UAAU,QAAQ,CAAA;AAC/B,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,EAAA,IAAI,UAAA,GAAqC,cAAc,IAAI,CAAA;AAG3D,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA,EAAG;AAC5C,MAAA,IAAI,KAAK,QAAA,CAAS,GAAG,CAAA,IAAK,GAAA,CAAI,UAAU,CAAA,EAAG;AACzC,QAAA,UAAA,GAAa,cAAc,GAAG,CAAA;AAC9B,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,YAAY,OAAO,IAAA;AAGxB,EAAA,IAAI,YAAY,UAAA,CAAW,QAAQ,CAAA,EAAG,OAAO,WAAW,QAAQ,CAAA;AAChE,EAAA,IAAI,UAAA,CAAW,MAAA,EAAQ,OAAO,UAAA,CAAW,MAAA;AACzC,EAAA,IAAI,UAAA,CAAW,KAAA,EAAO,OAAO,UAAA,CAAW,KAAA;AACxC,EAAA,IAAI,UAAA,CAAW,OAAA,EAAS,OAAO,UAAA,CAAW,OAAA;AAC1C,EAAA,OAAO,IAAA;AACT;;;AC9YO,IAAM,gBAAA,GAA8C;AAAA,EACzD,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,YAAA;AAAA,EACJ,EAAA,EAAI,kBAAA;AAAA,EACJ,EAAA,EAAI,aAAA;AAAA,EACJ,EAAA,EAAI,UAAA;AAAA,EACJ,EAAA,EAAI,UAAA;AAAA,EACJ,EAAA,EAAI,YAAA;AAAA,EACJ,OAAA,EAAS;AACX;AAGO,IAAM,eAAA,GAA4C;AAAA,EACvD,MAAA,EAAQ,YAAA;AAAA,EACR,KAAA,EAAO,WAAA;AAAA,EACP,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS;AACX;ACxCA,IAAM,cAAA,GAA+D;AAAA,EACnE,EAAA,EAAI,EAAE,IAAA,EAAM,SAAA,EAAW,IAAI,SAAA,EAAU;AAAA,EACrC,EAAA,EAAI,EAAE,IAAA,EAAM,SAAA,EAAW,IAAI,SAAA,EAAU;AAAA,EACrC,EAAA,EAAI,EAAE,IAAA,EAAM,SAAA,EAAW,IAAI,SAAA,EAAU;AAAA,EACrC,EAAA,EAAI,EAAE,IAAA,EAAM,SAAA,EAAW,IAAI,SAAA,EAAU;AAAA,EACrC,EAAA,EAAI,EAAE,IAAA,EAAM,SAAA,EAAW,IAAI,SAAA,EAAU;AAAA,EACrC,OAAA,EAAS,EAAE,IAAA,EAAM,SAAA,EAAW,IAAI,SAAA;AAClC,CAAA;AAGA,SAAS,SAAA,CAAU,EAAE,KAAA,EAAM,EAAsB;AAC/C,EAAA,MAAM,IAAA,GAAO,gBAAA,CAAiB,KAAsC,CAAA,IAAK,MAAA;AACzE,EAAA,IAAI,UAAU,IAAA,EAAM;AAElB,IAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,mCAAA,EAAoC,CAAA;AAAA,sBACpD,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uDAAA,EAAwD;AAAA,KAAA,EAC1E,CAAA;AAAA,EAEJ;AACA,EAAA,uBACE,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kEAAA,EACb,QAAA,EAAA,IAAA,EACH,CAAA;AAEJ;AAEO,SAAS,UAAA,CAAW;AAAA,EACzB,GAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,OAAA,EAAS,kBAAA;AAAA,EACT,mBAAA,GAAsB;AACxB,CAAA,EAAoB;AAClB,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,QAAA;AAAA,IAC5B,kBAAA,IAAsB;AAAA,GACxB;AAEA,EAAA,SAAA,CAAU,MAAM;AAEd,IAAA,IAAI,kBAAA,IAAsB,mBAAA,KAAwB,IAAA,IAAQ,CAAC,GAAA,EAAK;AAChE,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,cAAA,CAAe,mBAAmB,CAAA,CAAE,IAAA,CAAK,CAAC,EAAA,KAA2B;AACnE,MAAA,IAAI,SAAA,IAAa,CAAC,EAAA,EAAI;AACtB,MAAA,MAAM,IAAA,GAAO,aAAA,CAAc,GAAA,EAAK,EAAE,CAAA;AAClC,MAAA,IAAI,IAAA,aAAiB,IAAI,CAAA;AAAA,IAC3B,CAAC,CAAA;AACD,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AAAA,IACd,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,GAAA,EAAK,mBAAA,EAAqB,kBAAkB,CAAC,CAAA;AAEjD,EAAA,MAAM,QAAA,GAAW,SAAS,IAAA,IAAQ,EAAA;AAClC,EAAA,MAAM,WAAA,GAAc,iBAAA,CAAkB,QAAA,EAAU,OAAA,EAAS,IAAI,CAAA;AAK7D,EAAA,MAAM,aAAA,GAAgB,cAAA,CAAe,KAAK,CAAA,IAAK,cAAA,CAAe,OAAA;AAC9D,EAAA,MAAM,YAAA,GAAe,WAAA,EAAa,OAAA,IAAW,aAAA,CAAc,IAAA;AAC3D,EAAA,MAAM,UAAA,GAAa,WAAA,EAAa,SAAA,IAAa,aAAA,CAAc,EAAA;AAC3D,EAAA,MAAM,aAAA,GAAgB;AAAA,IACpB,UAAA,EAAY,CAAA,wBAAA,EAA2B,YAAY,CAAA,KAAA,EAAQ,UAAU,CAAA,MAAA;AAAA,GACvE;AACA,EAAA,MAAM,WAAW,OAAA,EAAS,IAAA,GAAO,gBAAgB,OAAA,CAAQ,IAAI,KAAK,EAAA,GAAK,EAAA;AACvE,EAAA,MAAM,WAAA,GAAc,CAAA,EAAG,WAAA,CAAY,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,UAAU,CAAA,CAAE,KAAA,CAAM,EAAE,CAAC,CAAA,CAAA;AAEnF,EAAA,IAAI,YAAY,SAAA,EAAW;AAEzB,IAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EACb,QAAA,EAAA;AAAA,sBAAA,IAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,aAAA;AAAA,UACP,SAAA,EAAU,kEAAA;AAAA,UAGV,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gGAAA,EAAiG,CAAA;AAAA,4BAEhH,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8HAAA,EAA+H,CAAA;AAAA,gCAE7I,KAAA,EAAA,EAAI,SAAA,EAAU,4BACb,QAAA,kBAAA,GAAA,CAAC,SAAA,EAAA,EAAU,OAAc,CAAA,EAC3B,CAAA;AAAA,4BAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mEAAA,EACb,QAAA,EAAA;AAAA,8BAAA,IAAA,CAAC,MAAA,EAAA,EAAK,WAAU,iFAAA,EAAkF,QAAA,EAAA;AAAA,gBAAA,kBAAA;AAAA,gBAC3F;AAAA,eAAA,EACP,CAAA;AAAA,8BACA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAA,EAAsC,QAAA,EAAA,WAAA,EAAY;AAAA,aAAA,EACpE;AAAA;AAAA;AAAA,OACF;AAAA,sBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,OAAE,SAAA,EAAU,8DAAA,EACV,sBAAY,gBAAA,CAAiB,KAAsC,KAAK,SAAA,EAC3E,CAAA;AAAA,wBACA,IAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,mDAAA,EACV,QAAA,EAAA;AAAA,UAAA,QAAA,GAAW,CAAA,EAAG,QAAQ,CAAA,MAAA,CAAA,GAAQ,EAAA;AAAA,UAAI,UAAA,IAAc;AAAA,SAAA,EACnD;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAGA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,aAAA;AAAA,MACP,SAAA,EAAU,qFAAA;AAAA,MAEV,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gGAAA,EAAiG,CAAA;AAAA,wBAEhH,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EACb,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kEAAA,EACV,QAAA,EAAA,QAAA,IAAY,SAAA,EACf,CAAA;AAAA,YACC,QAAA,oBACC,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4CAA4C,QAAA,EAAA,QAAA,EAAS;AAAA,WAAA,EAEtE,CAAA;AAAA,0BACA,GAAA,CAAC,aAAU,KAAA,EAAc;AAAA,SAAA,EAC3B,CAAA;AAAA,wBAGA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yHAAA,EAA0H,CAAA;AAAA,4BAGxI,KAAA,EAAA,EAAI,SAAA,EAAU,iBACb,QAAA,kBAAA,IAAA,CAAC,GAAA,EAAA,EAAE,WAAU,yDAAA,EAA0D,QAAA,EAAA;AAAA,UAAA,wDAAA;AAAA,UAClD;AAAA,SAAA,EACrB,CAAA,EACF,CAAA;AAAA,wBAGA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8CAAA,EACb,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,SAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,mDAAA,EAAoD,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,4BACxE,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,mDAAA,EACV,wBAAc,QAAA,EACjB;AAAA,WAAA,EACF,CAAA;AAAA,0BACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,mDAAA,EAAoD,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,4BACvE,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0CAAA,EAA4C,QAAA,EAAA,WAAA,EAAY;AAAA,WAAA,EACvE;AAAA,SAAA,EACF;AAAA;AAAA;AAAA,GACF;AAEJ;AChKO,SAAS,UAAA,CAAW;AAAA,EACzB,YAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAAoB;AAClB,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,QAAAA,CAAsB,EAAE,CAAA;AAClD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,IAAI,CAAA;AAC3C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAC5D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,QAAAA,CAAiC,EAAE,CAAA;AACrE,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,SAAwB,IAAI,CAAA;AACxE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAAS,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAClE,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,SAAS,KAAK,CAAA;AAE9D,EAAAC,UAAU,MAAM;AACd,IAAA,SAAA,EAAU;AAAA,EAEZ,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,eAAe,SAAA,GAAY;AACzB,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,kBAAkB,CAAA;AAC1C,MAAA,IAAI,IAAI,EAAA,EAAI;AACV,QAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,QAAA,MAAM,QAAA,GAAwB,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7C,QAAA,QAAA,CAAS,QAAQ,CAAA;AAEjB,QAAA,IAAI,CAAC,aAAA,EAAe;AAClB,UAAA,MAAM,aAAa,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,OAAO,CAAA;AAC5D,UAAA,IAAI,UAAA,EAAY,YAAA,CAAa,UAAA,EAAY,EAAE,CAAA;AAAA,QAC7C;AAAA,MACF;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,wBAAwB,GAAG,CAAA;AAAA,IAC3C,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF;AAEA,EAAA,eAAe,aAAa,KAAA,EAAe;AACzC,IAAA,WAAA,CAAY,KAAK,CAAA;AACjB,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,kBAAA,EAAoB;AAAA,QAC1C,MAAA,EAAQ,QAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,QAC9C,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,OAAO;AAAA,OAC/B,CAAA;AACD,MAAA,IAAI,IAAI,EAAA,EAAI;AACV,QAAA,QAAA,CAAS,CAAC,SAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU,KAAK,CAAC,CAAA;AACxD,QAAA,IAAI,mBAAmB,KAAA,EAAO;AAC5B,UAAA,iBAAA,CAAkB,IAAI,CAAA;AACtB,UAAA,cAAA,CAAe,EAAE,CAAA;AACjB,UAAA,cAAA,CAAe,IAAI,CAAA;AAAA,QACrB;AACA,QAAA,IAAI,kBAAkB,KAAA,EAAO;AAC3B,UAAA,MAAM,YAAY,KAAA,CAAM,MAAA;AAAA,YACtB,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU,KAAA,IAAS,EAAE,MAAA,KAAW;AAAA,WAC3C;AACA,UAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,YAAA,YAAA,CAAa,SAAA,CAAU,CAAC,CAAA,EAAI,EAAE,CAAA;AAAA,UAChC;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,wBAAwB,GAAG,CAAA;AAAA,IAC3C,CAAA,SAAE;AACA,MAAA,WAAA,CAAY,IAAI,CAAA;AAAA,IAClB;AAAA,EACF;AAEA,EAAA,eAAe,aAAa,IAAA,EAAiB;AAC3C,IAAA,IAAI,CAAC,WAAA,CAAY,IAAA,EAAK,EAAG;AACzB,IAAA,mBAAA,CAAoB,IAAI,CAAA;AACxB,IAAA,cAAA,CAAe,IAAI,CAAA;AAEnB,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,mBAAA,EAAqB;AAAA,QAC3C,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,QAC9C,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,UACnB,WAAW,IAAA,CAAK,KAAA;AAAA,UAChB,sBAAsB,IAAA,CAAK,qBAAA;AAAA,UAC3B,KAAA,EAAO,YAAY,IAAA;AAAK,SACzB;AAAA,OACF,CAAA;AAED,MAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAE5B,MAAA,IAAI,KAAK,OAAA,EAAS;AAEhB,QAAA,QAAA;AAAA,UAAS,CAAC,SACR,IAAA,CAAK,GAAA;AAAA,YAAI,CAAC,CAAA,KACR,CAAA,CAAE,KAAA,KAAU,IAAA,CAAK,KAAA,GAAQ,EAAE,GAAG,CAAA,EAAG,MAAA,EAAQ,OAAA,EAAiB,GAAI;AAAA;AAChE,SACF;AACA,QAAA,iBAAA,CAAkB,IAAI,CAAA;AACtB,QAAA,cAAA,CAAe,EAAE,CAAA;AACjB,QAAA,YAAA,CAAa,EAAE,GAAG,IAAA,EAAM,MAAA,EAAQ,OAAA,IAAW,EAAE,CAAA;AAAA,MAC/C,CAAA,MAAO;AACL,QAAA,cAAA;AAAA,UACE,KAAK,KAAA,IAAS;AAAA,SAChB;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AACN,MAAA,cAAA,CAAe,yCAAsC,CAAA;AAAA,IACvD,CAAA,SAAE;AACA,MAAA,mBAAA,CAAoB,KAAK,CAAA;AAAA,IAC3B;AAAA,EACF;AAEA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,uBACEC,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACb,0BAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iHAAA,EAAkH,CAAA,EACnI,CAAA;AAAA,EAEJ;AAEA,EAAA,MAAM,aAAa,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,OAAO,CAAA;AAC3D,EAAA,MAAM,cAAc,KAAA,CAAM,MAAA;AAAA,IACxB,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,KAAW,QAAA,IAAY,EAAE,MAAA,KAAW;AAAA,GAC/C;AAEA,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EAEZ,QAAA,EAAA;AAAA,IAAA,UAAA,CAAW,MAAA,GAAS,CAAA,oBACnBD,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EACZ,QAAA,EAAA,UAAA,CAAW,GAAA,CAAI,CAAC,IAAA,KAAS;AACxB,MAAA,MAAM,UAAA,GAAa,kBAAkB,IAAA,CAAK,KAAA;AAC1C,MAAA,MAAM,GAAA,GAAM,SAAA,CAAU,IAAA,CAAK,KAAK,CAAA,IAAK,EAAA;AACrC,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,IAAA,KAAS,IAAA,GAAO,CAAA,GAAI,CAAA;AAExC,MAAA,uBACEC,IAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UAEC,SAAS,MAAM;AACb,YAAA,YAAA,CAAa,MAAM,GAAG,CAAA;AACtB,YAAA,IAAI,CAAC,UAAA,EAAY;AACf,cAAA,YAAA,CAAa,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,CAAC,IAAA,CAAK,KAAK,GAAG,EAAA,EAAG,CAAE,CAAA;AAAA,YACxD;AAAA,UACF,CAAA;AAAA,UACA,SAAA,EAAW,CAAA,6DAAA,EACT,UAAA,GACI,8FAAA,GACA,gFACN,CAAA,CAAA;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACb,QAAA,EAAA;AAAA,gCAAAD,GAAAA;AAAA,kBAAC,UAAA;AAAA,kBAAA;AAAA,oBACC,KAAK,IAAA,CAAK,GAAA;AAAA,oBACV,OAAO,IAAA,CAAK,IAAA;AAAA,oBACZ,OAAO,IAAA,CAAK,MAAA;AAAA,oBACZ,YAAY,IAAA,CAAK,WAAA;AAAA,oBACjB,aAAa,IAAA,CAAK,YAAA;AAAA,oBAClB,YAAY,IAAA,CAAK,WAAA;AAAA,oBACjB;AAAA;AAAA,iBACF;AAAA,gBACC,UAAA,oBACCA,GAAAA,CAAC,OAAA,EAAA,EAAQ,WAAU,kDAAA,EAAmD;AAAA,eAAA,EAE1E,CAAA;AAAA,8BACAA,GAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,oBAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,oBAAA,YAAA,CAAa,KAAK,KAAK,CAAA;AAAA,kBACzB,CAAA;AAAA,kBACA,QAAA,EAAU,aAAa,IAAA,CAAK,KAAA;AAAA,kBAC5B,SAAA,EAAU,oIAAA;AAAA,kBACV,KAAA,EAAM,kBAAA;AAAA,kBAEN,QAAA,kBAAAA,GAAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AAC/B,aAAA,EACF,CAAA;AAAA,YAGC,UAAA,oBACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4DACb,QAAA,kBAAAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,EAAA;AAAA,8BAAAD,GAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,mDAAA,EAAoD,CAAA;AAAA,8BACtEA,GAAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAS,CAAA,IAAA,EAAO,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,kBAC1B,SAAA,EAAU,mDAAA;AAAA,kBACX,QAAA,EAAA;AAAA;AAAA,eAED;AAAA,8BACAA,GAAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACC,EAAA,EAAI,CAAA,IAAA,EAAO,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,kBACrB,IAAA,EAAK,MAAA;AAAA,kBACL,SAAA,EAAU,SAAA;AAAA,kBACV,SAAA,EAAW,MAAA;AAAA,kBACX,YAAA,EAAa,QAAA;AAAA,kBACb,WAAA,EAAa,MAAA,KAAW,CAAA,GAAI,kBAAA,GAAS,cAAA;AAAA,kBACrC,KAAA,EAAO,GAAA;AAAA,kBACP,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,kBAClC,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,oBAAA,MAAM,MAAM,CAAA,CAAE,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,OAAO,EAAE,CAAA;AAC5C,oBAAA,YAAA,CAAa,CAAC,IAAA,MAAU;AAAA,sBACtB,GAAG,IAAA;AAAA,sBACH,CAAC,IAAA,CAAK,KAAK,GAAG;AAAA,qBAChB,CAAE,CAAA;AACF,oBAAA,YAAA,CAAa,MAAM,GAAG,CAAA;AAAA,kBACxB,CAAA;AAAA,kBACA,SAAA,EAAS,IAAA;AAAA,kBACT,SAAA,EAAU;AAAA;AAAA;AACZ,aAAA,EACF,CAAA,EACF;AAAA;AAAA,SAAA;AAAA,QAzEG,IAAA,CAAK;AAAA,OA2EZ;AAAA,IAEJ,CAAC,CAAA,EACH,CAAA;AAAA,IAID,WAAA,CAAY,MAAA,GAAS,CAAA,oBACpBA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACZ,QAAA,EAAA,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,KAAS;AACzB,MAAA,MAAM,UAAA,GAAa,mBAAmB,IAAA,CAAK,KAAA;AAC3C,MAAA,uBACEC,IAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UAEC,SAAA,EAAU,4HAAA;AAAA,UAGV,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACb,QAAA,EAAA;AAAA,gCAAAD,GAAAA;AAAA,kBAAC,UAAA;AAAA,kBAAA;AAAA,oBACC,KAAK,IAAA,CAAK,GAAA;AAAA,oBACV,OAAO,IAAA,CAAK,IAAA;AAAA,oBACZ,OAAO,IAAA,CAAK,MAAA;AAAA,oBACZ,YAAY,IAAA,CAAK,WAAA;AAAA,oBACjB,aAAa,IAAA,CAAK,YAAA;AAAA,oBAClB,YAAY,IAAA,CAAK,WAAA;AAAA,oBACjB;AAAA;AAAA,iBACF;AAAA,gCACAC,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yKAAA,EACd,QAAA,EAAA;AAAA,kCAAAD,GAAAA,CAAC,qBAAA,EAAA,EAAsB,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,kBAAE;AAAA,iBAAA,EAEnD;AAAA,eAAA,EACF,CAAA;AAAA,8BACAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACZ,QAAA,EAAA;AAAA,gBAAA,CAAC,8BACAD,GAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,SAAS,MAAM;AACb,sBAAA,iBAAA,CAAkB,KAAK,KAAK,CAAA;AAC5B,sBAAA,cAAA,CAAe,EAAE,CAAA;AACjB,sBAAA,cAAA,CAAe,IAAI,CAAA;AAAA,oBACrB,CAAA;AAAA,oBACA,SAAA,EAAU,uJAAA;AAAA,oBACX,QAAA,EAAA;AAAA;AAAA,iBAED;AAAA,gCAEFA,GAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,OAAA,EAAS,MAAM,YAAA,CAAa,IAAA,CAAK,KAAK,CAAA;AAAA,oBACtC,QAAA,EAAU,aAAa,IAAA,CAAK,KAAA;AAAA,oBAC5B,SAAA,EAAU,2HAAA;AAAA,oBACV,KAAA,EAAM,kBAAA;AAAA,oBAEN,QAAA,kBAAAA,GAAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AAC/B,eAAA,EACF;AAAA,aAAA,EACF,CAAA;AAAA,YAGC,UAAA,oBACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uDACb,QAAA,kBAAAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACb,QAAA,EAAA;AAAA,gCAAAD,GAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,yDAAA,EAA0D,CAAA;AAAA,gCACjFA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4DAA2D,QAAA,EAAA,4HAAA,EAIxE;AAAA,eAAA,EACF,CAAA;AAAA,8BAEAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,gCAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,EAAA;AAAA,kCAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mFAAA,EAAoF,QAAA,EAAA,GAAA,EAEpG,CAAA;AAAA,kCACAA,GAAAA;AAAA,oBAAC,OAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,MAAA;AAAA,sBACL,SAAA,EAAU,SAAA;AAAA,sBACV,KAAA,EAAO,WAAA;AAAA,sBACP,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,wBAAA,MAAM,GAAA,GAAM,CAAA,CAAE,MAAA,CAAO,KAAA,CAAM,OAAA;AAAA,0BACzB,UAAA;AAAA,0BACA;AAAA,yBACF;AACA,wBAAA,cAAA,CAAe,GAAG,CAAA;AAAA,sBACpB,CAAA;AAAA,sBACA,WAAA,EAAY,MAAA;AAAA,sBACZ,SAAA,EAAU,wTAAA;AAAA,sBACV,SAAA,EAAS,IAAA;AAAA,sBACT,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,wBAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,EAAS,YAAA,CAAa,IAAI,CAAA;AAAA,sBAC1C;AAAA;AAAA;AACF,iBAAA,EACF,CAAA;AAAA,gCACAA,GAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,OAAA,EAAS,MAAM,YAAA,CAAa,IAAI,CAAA;AAAA,oBAChC,QAAA,EAAU,gBAAA,IAAoB,CAAC,WAAA,CAAY,IAAA,EAAK;AAAA,oBAChD,SAAA,EAAU,8OAAA;AAAA,oBAET,6CACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gFAA+E,CAAA,GAE9F;AAAA;AAAA;AAEJ,eAAA,EACF,CAAA;AAAA,cAEC,+BACCA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qCAAqC,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,8BAGhEA,GAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,SAAS,MAAM;AACb,oBAAA,iBAAA,CAAkB,IAAI,CAAA;AACtB,oBAAA,cAAA,CAAe,EAAE,CAAA;AACjB,oBAAA,cAAA,CAAe,IAAI,CAAA;AAAA,kBACrB,CAAA;AAAA,kBACA,SAAA,EAAU,kHAAA;AAAA,kBACX,QAAA,EAAA;AAAA;AAAA;AAED,aAAA,EACF,CAAA,EACF;AAAA;AAAA,SAAA;AAAA,QA7GG,IAAA,CAAK;AAAA,OA+GZ;AAAA,IAEJ,CAAC,CAAA,EACH,CAAA;AAAA,oBAGFC,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,YAAA;AAAA,QACT,SAAA,EAAU,0QAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,UAC3B,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,mBAAA,GAAsB;AAAA;AAAA;AAAA;AAC5C,GAAA,EACF,CAAA;AAEJ;AC/QA,IAAM,OAAA,GACJ,+DAAA;AACF,IAAM,YAAA,GAAe,0BAAA;AAErB,IAAM,uBAAA,GAA0B,CAAC,IAAA,EAAM,IAAA,EAAM,MAAM,IAAI,CAAA;AAEvD,SAAS,UAAA,CAAW,MAAc,QAAA,EAA0B;AAC1D,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,QAAA;AAC1C,EAAA,MAAM,KAAA,GAAQ,iBAAiB,QAAA,CAAS,eAAe,EACpD,gBAAA,CAAiB,IAAI,EACrB,IAAA,EAAK;AACR,EAAA,OAAO,KAAA,IAAS,QAAA;AAClB;AAEO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,GAAA;AAAA,EACA,KAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,oBAAA,GAAuB,IAAA;AAAA,EACvB,eAAA,GAAkB,mBAAA;AAAA,EAClB,YAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA,GAAiB,KAAA;AAAA,EACjB,kBAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIF,SAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAAS,KAAK,CAAA;AACpD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAS,KAAK,CAAA;AACtD,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAIA,SAAS,KAAK,CAAA;AACpE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAA2B,IAAI,CAAA;AACzD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,SAAS,oBAAoB,CAAA;AAC7D,EAAA,MAAM,UAAA,GAAa,OAAO,KAAK,CAAA;AAC/B,EAAA,MAAM,QAAA,GAAW,OAAsC,IAAI,CAAA;AAC3D,EAAA,MAAM,WAAA,GAAc,OAAO,oBAAoB,CAAA;AAG/C,EAAAC,UAAU,MAAM;AACd,IAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AAAA,EACxB,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAGb,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAC7B,MAAA,IAAI,CAAC,QAAA,EAAU,cAAA,CAAe,IAAI,CAAA;AAAA,IACpC,GAAG,IAAK,CAAA;AACR,IAAA,OAAO,MAAM,aAAa,KAAK,CAAA;AAAA,EACjC,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,SAAS,WAAW,MAAA,EAA2B;AAC7C,IAAA,MAAM,GAAA,GAAM,OAAO,WAAA,EAAY;AAE/B,IAAA,IAAI,GAAA,CAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AAC3B,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,WAAA;AAAA,QACT,KAAA,EAAO,uBAAA;AAAA,QACP,OAAA,EACE;AAAA,OACJ;AAAA,IACF;AACA,IAAA,IAAI,IAAI,QAAA,CAAS,WAAW,KAAK,GAAA,CAAI,QAAA,CAAS,YAAY,CAAA,EAAG;AAC3D,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,UAAA;AAAA,QACT,KAAA,EAAO,qBAAA;AAAA,QACP,OAAA,EACE;AAAA,OACJ;AAAA,IACF;AACA,IAAA,IAAI,GAAA,CAAI,QAAA,CAAS,OAAO,CAAA,EAAG;AACzB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,UAAA;AAAA,QACT,KAAA,EAAO,iCAAA;AAAA,QACP,OAAA,EACE;AAAA,OACJ;AAAA,IACF;AACA,IAAA,IACE,GAAA,CAAI,QAAA,CAAS,QAAQ,CAAA,IACrB,IAAI,QAAA,CAAS,kBAAkB,CAAA,IAC/B,GAAA,CAAI,SAAS,QAAQ,CAAA,IACrB,GAAA,CAAI,QAAA,CAAS,UAAU,CAAA,EACvB;AACA,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,UAAA;AAAA,QACT,KAAA,EAAO,mBAAA;AAAA,QACP,OAAA,EACE;AAAA,OACJ;AAAA,IACF;AACA,IAAA,IAAI,GAAA,CAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AAC3B,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,UAAA;AAAA,QACT,KAAA,EAAO,iBAAA;AAAA,QACP,OAAA,EACE;AAAA,OACJ;AAAA,IACF;AACA,IAAA,IAAI,IAAI,QAAA,CAAS,SAAS,KAAK,GAAA,CAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACxD,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,UAAA;AAAA,QACT,KAAA,EAAO,qBAAA;AAAA,QACP,OAAA,EACE;AAAA,OACJ;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,UAAA;AAAA,MACT,KAAA,EAAO,qBAAA;AAAA,MACP,OAAA,EACE;AAAA,KACJ;AAAA,EACF;AAEA,EAAA,MAAM,gBAAA,GAAmB,WAAA;AAAA,IACvB,CAAC,QAAA,KAAkB;AACjB,MAAA,eAAA,CAAgB,KAAK,CAAA;AAErB,MAAA,IAAI,SAAS,KAAA,EAAO;AAClB,QAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,UAAA,OAAA,CAAQ,GAAA;AAAA,YACN,wCAAA;AAAA,YACA,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,KAAK;AAAA,WAC/B;AAAA,QACF;AACA,QAAA,MAAM,SAAA,GAAY,QAAA,CAAS,KAAA,EAAO,IAAA,IAAQ,EAAA;AAC1C,QAAA,IAAI,SAAA,CAAU,WAAA,EAAY,CAAE,QAAA,CAAS,oBAAoB,CAAA,EAAG;AAE1D,UAAA,MAAM,UAAA,GAAa,SAAA,CAAU,KAAA,CAAM,8BAA8B,CAAA;AACjE,UAAA,QAAA,CAAS;AAAA,YACP,OAAA,EAAS,WAAA;AAAA,YACT,KAAA,EAAO,uBAAA;AAAA,YACP,OAAA,EACE,oGAAA;AAAA,YACF,cAAA,EAAgB,aAAa,CAAC;AAAA,WAC/B,CAAA;AAAA,QACH,CAAA,MAAO;AACL,UAAA,QAAA,CAAS;AAAA,YACP,OAAA,EAAS,UAAA;AAAA,YACT,KAAA,EAAO,qBAAA;AAAA,YACP,OAAA,EACE;AAAA,WACH,CAAA;AAAA,QACH;AACA,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,QAAA,QAAA,CAAS;AAAA,UACP,OAAA,EAAS,QAAA;AAAA,UACT,KAAA,EAAO,sBAAA;AAAA,UACP,OAAA,EAAS;AAAA,SACV,CAAA;AACD,QAAA;AAAA,MACF;AAEA,MAAA,IACE,SAAS,IAAA,CAAK,MAAA,KAAW,WACzB,QAAA,CAAS,IAAA,CAAK,WAAW,QAAA,EACzB;AACA,QAAA,IAAI,QAAA,CAAS,KAAK,KAAA,EAAO;AACvB,UAAA,QAAA,CAAS,IAAI,CAAA;AACb,UAAA,cAAA;AAAA,YACE,SAAS,IAAA,CAAK,KAAA;AAAA,YACd;AAAA,cACE,IAAA,EAAM,SAAS,IAAA,CAAK,IAAA;AAAA,cACpB,MAAA,EAAQ,SAAS,IAAA,CAAK,MAAA;AAAA,cACtB,WAAA,EAAa,SAAS,IAAA,CAAK,WAAA;AAAA,cAC3B,YAAA,EAAc,SAAS,IAAA,CAAK;AAAA,aAC9B;AAAA,YACA,WAAA,CAAY;AAAA,WACd;AAAA,QACF,CAAA,MAAO;AACL,UAAA,QAAA,CAAS;AAAA,YACP,OAAA,EAAS,QAAA;AAAA,YACT,KAAA,EAAO,mBAAA;AAAA,YACP,OAAA,EAAS;AAAA,WACV,CAAA;AAAA,QACH;AAAA,MACF,CAAA,MAAO;AAEL,QAAA,QAAA,CAAS,UAAA,CAAW,QAAA,CAAS,IAAA,CAAK,OAAA,IAAW,EAAE,CAAC,CAAA;AAAA,MAClD;AAAA,IACF,CAAA;AAAA,IACA,CAAC,cAAc;AAAA,GACjB;AAEA,EAAA,MAAM,oBAAA,GAAuB,WAAA,CAAY,CAAC,OAAA,KAAoB;AAC5D,IAAA,eAAA,CAAgB,KAAK,CAAA;AACrB,IAAA,QAAA,CAAS;AAAA,MACP,OAAA,EAAS,YAAA;AAAA,MACT,KAAA,EAAO,mBAAA;AAAA,MACP,OAAA,EAAS,qCAAqC,OAAO,CAAA;AAAA,KACtD,CAAA;AAAA,EACH,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,YAAY,MAAM;AACtB,IAAA,IAAI,CAAC,SAAS,OAAA,EAAS;AACvB,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,IAAA,QAAA,CAAS,QAAQ,QAAA,EAAS;AAAA,EAC5B,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,YAAY,MAAM;AAC1C,IAAA,IAAI;AACF,MAAA,MAAM,EAAA,GAAK,IAAI,QAAA,CAAS,uBAAuB,CAAA,EAAE;AACjD,MAAC,OAAe,cAAA,GAAiB,EAAA;AACjC,MAAA,WAAA,CAAY,IAAI,CAAA;AAAA,IAClB,CAAA,CAAA,MAAQ;AACN,MAAA,QAAA,CAAS;AAAA,QACP,OAAA,EAAS,QAAA;AAAA,QACT,KAAA,EAAO,4BAAA;AAAA,QACP,OAAA,EACE;AAAA,OACH,CAAA;AAAA,IACH;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,QAAA,IAAY,UAAA,CAAW,OAAA,EAAS;AACrC,IAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAErB,IAAA,MAAM,OAAA,GACJ,YAAA,IAAgB,OAAA,CAAQ,GAAA,CAAI,iCAAA;AAC9B,IAAA,MAAM,MAAA,GAAS,WAAA,IAAe,OAAA,CAAQ,GAAA,CAAI,gCAAA;AAE1C,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,MAAA,EAAQ;AACvB,MAAA,QAAA,CAAS;AAAA,QACP,OAAA,EAAS,QAAA;AAAA,QACT,KAAA,EAAO,6BAAA;AAAA,QACP,OAAA,EAAS;AAAA,OACV,CAAA;AACD,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MACJ,QAAA,KACC,OAAA,CAAQ,GAAA,CAAI,qBAAA,KAA0B,SAAS,MAAA,GAAS,KAAA,CAAA;AAC3D,IAAA,MAAM,UAAW,MAAA,CAAe,cAAA;AAEhC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,QAAA,CAAS;AAAA,QACP,OAAA,EAAS,QAAA;AAAA,QACT,KAAA,EAAO,mBAAA;AAAA,QACP,OAAA,EACE;AAAA,OACH,CAAA;AACD,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAgC,IAAI,OAAA,CAAQ,GAAA,EAAK,SAAS,MAAM,CAAA;AACtE,IAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AAEnB,IAAA,MAAM,iBAAA,GACJ,SAAA,IAAa,UAAA,CAAW,iBAAA,EAAmB,SAAS,CAAA;AACtD,IAAA,MAAM,YAAA,GAAe,kBAAA,IAAsB,CAAC,GAAG,uBAAuB,CAAA;AAEtE,IAAA,MAAM,YAAA,GAA6B;AAAA,MACjC,MAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,GAAA;AAAA,QACJ;AAAA,OACF;AAAA,MACA,aAAA,EAAe;AAAA,QACb,eAAA,EAAiB,cAAA;AAAA,QACjB,WAAA,EAAa,iBAAA;AAAA,QACb,aAAA,EAAe,KAAA;AAAA,QACf,eAAA,EAAiB,YAAA;AAAA,QACjB,yBAAA,EACE;AAAA;AACJ,KACF;AAEA,IAAA,KAAA,CAAM,iBAAA;AAAA,MACJ,YAAA;AAAA,MACA,IAAI,YAAY,CAAA,CAAA;AAAA,MAChB,gBAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA,EAAG;AAAA,IACD,QAAA;AAAA,IACA,GAAA;AAAA,IACA,KAAA;AAAA,IACA,gBAAA;AAAA,IACA,oBAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,cAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,uBACEE,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,OAAA;AAAA,QACL,QAAA,EAAS,kBAAA;AAAA,QACT,OAAA,EAAS;AAAA;AAAA,KACX;AAAA,IAGC,KAAA,IAAS,KAAA,CAAM,OAAA,KAAY,YAAA,mBAC1BC,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,WAAW,CAAA,8BAAA,EACT,KAAA,CAAM,OAAA,KAAY,WAAA,GACd,iEACA,0DACN,CAAA,CAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,4BAAAD,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBACZ,QAAA,EAAA,KAAA,CAAM,OAAA,KAAY,8BACjBA,GAAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,uCAAsC,CAAA,mBAE9DA,IAAC,aAAA,EAAA,EAAc,SAAA,EAAU,qCAAoC,CAAA,EAEjE,CAAA;AAAA,4BACAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,8BAAAD,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6CAAA,EACV,gBAAM,KAAA,EACT,CAAA;AAAA,8BACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kDAAA,EACV,gBAAM,OAAA,EACT;AAAA,aAAA,EACF;AAAA,WAAA,EACF,CAAA;AAAA,0BACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mEAAA,EACZ,gBAAM,OAAA,KAAY,WAAA,IAAe,KAAA,CAAM,cAAA,mBACtCA,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,QAAA,EAAU,mBAAA;AAAA,cACV,SAAS,YAAY;AACnB,gBAAA,sBAAA,CAAuB,IAAI,CAAA;AAC3B,gBAAA,IAAI;AACF,kBAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,kBAAA,EAAoB;AAAA,oBAC1C,MAAA,EAAQ,QAAA;AAAA,oBACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,oBAC9C,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,sBACnB,OAAO,KAAA,CAAM;AAAA,qBACd;AAAA,mBACF,CAAA;AACD,kBAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,GAAO,KAAA,CAAM,OAAO,EAAC,CAAE,CAAA;AAC9C,kBAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,oBAAA,OAAA,CAAQ,GAAA;AAAA,sBACN,qCAAA;AAAA,sBACA,GAAA,CAAI,MAAA;AAAA,sBACJ,IAAA,CAAK,UAAU,IAAI;AAAA,qBACrB;AAAA,kBACF;AACA,kBAAA,IAAI,GAAA,CAAI,EAAA,IAAM,CAAC,IAAA,CAAK,KAAA,EAAO;AACzB,oBAAA,QAAA,CAAS,IAAI,CAAA;AAEb,oBAAA,UAAA,CAAW,OAAA,GAAU,KAAA;AACrB,oBAAA,WAAA,CAAY,KAAK,CAAA;AACjB,oBAAA,UAAA,CAAW,MAAM,iBAAA,EAAkB,EAAG,GAAG,CAAA;AAAA,kBAC3C,CAAA,MAAO;AACL,oBAAA,QAAA,CAAS;AAAA,sBACP,OAAA,EAAS,UAAA;AAAA,sBACT,KAAA,EAAO,qBAAA;AAAA,sBACP,OAAA,EACE;AAAA,qBACH,CAAA;AAAA,kBACH;AAAA,gBACF,CAAA,CAAA,MAAQ;AACN,kBAAA,QAAA,CAAS;AAAA,oBACP,OAAA,EAAS,QAAA;AAAA,oBACT,KAAA,EAAO,sBAAA;AAAA,oBACP,OAAA,EACE;AAAA,mBACH,CAAA;AAAA,gBACH,CAAA,SAAE;AACA,kBAAA,sBAAA,CAAuB,KAAK,CAAA;AAAA,gBAC9B;AAAA,cACF,CAAA;AAAA,cACA,SAAA,EAAU,mOAAA;AAAA,cAET,gCAAsB,eAAA,GAAkB;AAAA;AAAA,8BAG3CC,IAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,SAAS,MAAM;AACb,gBAAA,QAAA,CAAS,IAAI,CAAA;AAEb,gBAAA,MAAM,SAAA,GAAY,QAAA,CAAS,cAAA,CAAe,YAAY,CAAA;AACtD,gBAAA,IAAI,SAAA,YAAqB,SAAA,GAAY,EAAA;AACrC,gBAAA,UAAA,CAAW,OAAA,GAAU,KAAA;AACrB,gBAAA,WAAA,CAAY,KAAK,CAAA;AACjB,gBAAA,UAAA,CAAW,MAAM,iBAAA,EAAkB,EAAG,GAAG,CAAA;AAAA,cAC3C,CAAA;AAAA,cACA,SAAA,EAAU,+MAAA;AAAA,cAEV,QAAA,EAAA;AAAA,gCAAAD,GAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,gBAAE;AAAA;AAAA;AAAA,WAEhC,EAEJ;AAAA;AAAA;AAAA,KACF,mBAEAC,IAAAA,CAAA,QAAA,EAAA,EAIE,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,KAAA,EAAA,EAAI,EAAA,EAAI,YAAA,EAAc,WAAU,UAAA,EAAW,CAAA;AAAA,MAG3C,yBACCA,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,WAAW,CAAA,8BAAA,EACT,KAAA,CAAM,OAAA,KAAY,YAAA,GACd,iEACA,wEACN,CAAA,CAAA;AAAA,UAEA,QAAA,kBAAAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,4BAAAD,GAAAA;AAAA,cAACE,qBAAAA;AAAA,cAAA;AAAA,gBACC,WAAW,CAAA,wBAAA,EACT,KAAA,CAAM,OAAA,KAAY,YAAA,GACd,gCACA,kCACN,CAAA;AAAA;AAAA,aACF;AAAA,4BACAD,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACb,QAAA,EAAA;AAAA,8BAAAD,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6CAAA,EACV,gBAAM,KAAA,EACT,CAAA;AAAA,8BACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kDAAA,EACV,gBAAM,OAAA,EACT;AAAA,aAAA,EACF;AAAA,WAAA,EACF;AAAA;AAAA,OACF;AAAA,MAGD,QAAA,oBACCC,IAAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,QAAA,oBAAA,oBACCA,IAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,sDAAA,EACf,QAAA,EAAA;AAAA,0BAAAD,GAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,UAAA;AAAA,cACL,OAAA,EAAS,QAAA;AAAA,cACT,UAAU,CAAC,CAAA,KAAM,WAAA,CAAY,CAAA,CAAE,OAAO,OAAO,CAAA;AAAA,cAC7C,SAAA,EAAU;AAAA;AAAA,WACZ;AAAA,0BACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4CAA2C,QAAA,EAAA,sCAAA,EAE3D;AAAA,SAAA,EACF,CAAA;AAAA,wBAEFA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,SAAA;AAAA,YACT,UAAU,YAAA,IAAgB,QAAA;AAAA,YAC1B,SAAA,EAAU,8UAAA;AAAA,YAET,QAAA,EAAA,YAAA,mBACCC,IAAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,8BAAAD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8EAAA,EAA+E,CAAA;AAAA,cAC7F;AAAA,aAAA,EACH,CAAA,GAEA,WAAA,KACC,QAAA,GAAW,iBAAA,GAAoB,oBAAA;AAAA;AAAA;AAEpC,OAAA,EACF;AAAA,KAAA,EAEJ,CAAA;AAAA,IAGD,CAAC,QAAA,oBACAC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uCAAA,EACb,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iHAAA,EAAkH,CAAA;AAAA,MAChI,WAAA,oBACCC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uBAAA,EACb,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0CAAA,EAA2C,QAAA,EAAA,iDAAA,EAExD,CAAA;AAAA,wBACAA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,MAAA,CAAO,QAAA,CAAS,MAAA,EAAO;AAAA,YACtC,SAAA,EAAU,0IAAA;AAAA,YACX,QAAA,EAAA;AAAA;AAAA;AAED,OAAA,EACF;AAAA,KAAA,EAEJ,CAAA;AAAA,oBAIFC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iFAAA,EACb,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAACG,MAAAA,EAAA,EAAO,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,sBAC5BH,GAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,qDAAA,EAA6C;AAAA,KAAA,EACrD;AAAA,GAAA,EACF,CAAA;AAEJ","file":"index.js","sourcesContent":["// Source: pauhenriques-website/src/lib/bin-database.ts\n// Phase 1.5: refactored to accept a configurable endpoint URL.\n//\n// Client-side BIN lookup with localStorage cache. The database lives on the\n// consumer's backend (typically at /api/bins, served from Firestore at\n// config/bins). This module handles the fetch + cache + lookup logic.\n\nimport type { BinDatabase, BinInfo } from \"./types.js\";\n\nconst STORAGE_KEY = \"binDatabase_v1\";\nlet memoryCache: BinDatabase | null = null;\nlet inflight: Promise<BinDatabase | null> | null = null;\n\nfunction readFromStorage(): BinDatabase | null {\n if (typeof window === \"undefined\") return null;\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n if (!raw) return null;\n const parsed = JSON.parse(raw) as BinDatabase;\n if (parsed && parsed.data && typeof parsed.data === \"object\") return parsed;\n } catch {\n /* corrupted cache, ignore */\n }\n return null;\n}\n\nfunction writeToStorage(db: BinDatabase) {\n if (typeof window === \"undefined\") return;\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(db));\n } catch {\n /* storage full or disabled, ignore */\n }\n}\n\nasync function fetchDatabase(endpoint: string): Promise<BinDatabase | null> {\n if (typeof window === \"undefined\") return null;\n try {\n const res = await fetch(endpoint, { cache: \"default\" });\n if (!res.ok) return null;\n return (await res.json()) as BinDatabase;\n } catch {\n return null;\n }\n}\n\n/**\n * Loads the BIN database. Uses memory cache → localStorage cache → network.\n * Returns null if no database is available (lookup will return null silently).\n *\n * @param endpoint URL serving the BIN database as JSON. Default: \"/api/bins\".\n */\nexport async function getBinDatabase(\n endpoint: string = \"/api/bins\",\n): Promise<BinDatabase | null> {\n if (memoryCache) return memoryCache;\n\n // Use cached version while we revalidate in background\n const cached = readFromStorage();\n if (cached) {\n memoryCache = cached;\n if (!inflight) {\n inflight = fetchDatabase(endpoint).then((fresh) => {\n if (fresh && fresh.version !== cached.version) {\n memoryCache = fresh;\n writeToStorage(fresh);\n }\n inflight = null;\n return fresh;\n });\n }\n return cached;\n }\n\n // No cache — fetch and wait\n if (!inflight) {\n inflight = fetchDatabase(endpoint).then((fresh) => {\n if (fresh) {\n memoryCache = fresh;\n writeToStorage(fresh);\n }\n inflight = null;\n return fresh;\n });\n }\n return inflight;\n}\n\n/**\n * Looks up a BIN for a given card number string. Tries 8, 7, 6 digit prefixes.\n * Returns null if no match or database not loaded yet.\n */\nexport function lookupBinSync(\n cardNumber: string,\n db: BinDatabase | null,\n): BinInfo | null {\n if (!db || !cardNumber) return null;\n const digits = cardNumber.replace(/\\D/g, \"\");\n if (digits.length < 6) return null;\n // Try most specific (8) → least specific (6)\n for (const len of [8, 7, 6]) {\n const prefix = digits.slice(0, len);\n const hit = db.data[prefix];\n if (hit) return hit;\n }\n return null;\n}\n\n/** Async helper that loads the DB if needed and looks up the BIN. */\nexport async function lookupBin(\n cardNumber: string,\n endpoint: string = \"/api/bins\",\n): Promise<BinInfo | null> {\n const db = await getBinDatabase(endpoint);\n return lookupBinSync(cardNumber, db);\n}\n","/**\n * Bank brand colors for Ecuadorian banks and cooperativas.\n * Each bank can have different colors per card type (credit / debit / prepaid).\n *\n * Lookup is by normalized bank name (lowercase, no accents, alphanumeric).\n * Falls back to brand network colors when no match.\n */\n\n// Source: pauhenriques-website/src/lib/bank-colors.ts\n// Phase 1.5: moved into the package. BankPalette is defined in ./types.ts;\n// re-exported here for backwards compatibility with code that imports it\n// from this module.\n\nimport type { BankPalette, CardType } from \"./types.js\";\n\nexport type { BankPalette } from \"./types.js\";\n\ntype BankByType = Partial<Record<CardType, BankPalette>>;\n\n/**\n * For each bank, color per card type. If a type is missing, falls back\n * to the bank's \"credit\" color, then \"debit\", then network brand color.\n */\nconst BANK_PALETTES: Record<string, BankByType> = {\n // ── Bancos comerciales con 3 variantes ──\n bancopichincha: {\n credit: { primary: \"#FFCB05\", secondary: \"#a87f00\" },\n debit: { primary: \"#FFCB05\", secondary: \"#a87f00\" },\n prepaid: { primary: \"#4A4A4A\", secondary: \"#1a1a1a\" },\n },\n pichincha: {\n credit: { primary: \"#FFCB05\", secondary: \"#a87f00\" },\n debit: { primary: \"#FFCB05\", secondary: \"#a87f00\" },\n prepaid: { primary: \"#4A4A4A\", secondary: \"#1a1a1a\" },\n },\n bancodelpacifico: {\n credit: { primary: \"#0A4664\", secondary: \"#031f30\" },\n debit: { primary: \"#0082C8\", secondary: \"#003e63\" },\n prepaid: { primary: \"#145A50\", secondary: \"#062b25\" },\n },\n pacifico: {\n credit: { primary: \"#0A4664\", secondary: \"#031f30\" },\n debit: { primary: \"#0082C8\", secondary: \"#003e63\" },\n prepaid: { primary: \"#145A50\", secondary: \"#062b25\" },\n },\n bancoguayaquil: {\n credit: { primary: \"#201858\", secondary: \"#0a081f\" },\n debit: { primary: \"#101040\", secondary: \"#06061f\" },\n },\n guayaquil: {\n credit: { primary: \"#201858\", secondary: \"#0a081f\" },\n debit: { primary: \"#101040\", secondary: \"#06061f\" },\n },\n bancointernacional: {\n credit: { primary: \"#F08820\", secondary: \"#8a460a\" },\n debit: { primary: \"#F08820\", secondary: \"#8a460a\" },\n prepaid: { primary: \"#F08820\", secondary: \"#8a460a\" },\n },\n internacional: {\n credit: { primary: \"#F08820\", secondary: \"#8a460a\" },\n debit: { primary: \"#F08820\", secondary: \"#8a460a\" },\n prepaid: { primary: \"#F08820\", secondary: \"#8a460a\" },\n },\n bancodelaproduccionsaprodubanco: {\n credit: { primary: \"#004828\", secondary: \"#001f10\" },\n debit: { primary: \"#004828\", secondary: \"#001f10\" },\n prepaid: { primary: \"#D0D028\", secondary: \"#7a7a14\" },\n },\n produbanco: {\n credit: { primary: \"#004828\", secondary: \"#001f10\" },\n debit: { primary: \"#004828\", secondary: \"#001f10\" },\n prepaid: { primary: \"#D0D028\", secondary: \"#7a7a14\" },\n },\n bancobolivarianoca: {\n credit: { primary: \"#B8B8B8\", secondary: \"#5e5e5e\" },\n debit: { primary: \"#009B8A\", secondary: \"#004540\" },\n },\n bolivariano: {\n credit: { primary: \"#B8B8B8\", secondary: \"#5e5e5e\" },\n debit: { primary: \"#009B8A\", secondary: \"#004540\" },\n },\n bancodiners: {\n credit: { primary: \"#1C1C1C\", secondary: \"#000000\" },\n debit: { primary: \"#1C1C1C\", secondary: \"#000000\" },\n prepaid: { primary: \"#1C1C1C\", secondary: \"#000000\" },\n },\n diners: {\n credit: { primary: \"#1C1C1C\", secondary: \"#000000\" },\n debit: { primary: \"#1C1C1C\", secondary: \"#000000\" },\n prepaid: { primary: \"#1C1C1C\", secondary: \"#000000\" },\n },\n cooperativadeahorroycreditojuventudecuatorianaprogresistaltdaecuador: {\n credit: { primary: \"#2C4A8C\", secondary: \"#101e3f\" },\n debit: { primary: \"#1E3A7A\", secondary: \"#0a1838\" },\n prepaid: { primary: \"#1E3A7A\", secondary: \"#0a1838\" },\n },\n cooperativajep: {\n credit: { primary: \"#2C4A8C\", secondary: \"#101e3f\" },\n debit: { primary: \"#1E3A7A\", secondary: \"#0a1838\" },\n prepaid: { primary: \"#1E3A7A\", secondary: \"#0a1838\" },\n },\n jep: {\n credit: { primary: \"#2C4A8C\", secondary: \"#101e3f\" },\n debit: { primary: \"#1E3A7A\", secondary: \"#0a1838\" },\n prepaid: { primary: \"#1E3A7A\", secondary: \"#0a1838\" },\n },\n cooperativadeahorroycreditopolicianacional: {\n credit: { primary: \"#003087\", secondary: \"#001138\" },\n debit: { primary: \"#003087\", secondary: \"#001138\" },\n prepaid: { primary: \"#003087\", secondary: \"#001138\" },\n },\n cooperativapolicianacional: {\n credit: { primary: \"#003087\", secondary: \"#001138\" },\n debit: { primary: \"#003087\", secondary: \"#001138\" },\n },\n\n // ── Bancos con 2 variantes ──\n bancodelaustro: {\n credit: { primary: \"#C0161A\", secondary: \"#5e0809\" },\n debit: { primary: \"#C0161A\", secondary: \"#5e0809\" },\n },\n austro: {\n credit: { primary: \"#C0161A\", secondary: \"#5e0809\" },\n debit: { primary: \"#C0161A\", secondary: \"#5e0809\" },\n },\n bancosolidario: {\n credit: { primary: \"#E07820\", secondary: \"#7a3e0a\" },\n debit: { primary: \"#78B830\", secondary: \"#3f6515\" },\n },\n solidario: {\n credit: { primary: \"#E07820\", secondary: \"#7a3e0a\" },\n debit: { primary: \"#78B830\", secondary: \"#3f6515\" },\n },\n bancoamazonassa: {\n credit: { primary: \"#1A1A1A\", secondary: \"#000000\" },\n debit: { primary: \"#1A1A1A\", secondary: \"#000000\" },\n },\n amazonas: {\n credit: { primary: \"#1A1A1A\", secondary: \"#000000\" },\n debit: { primary: \"#1A1A1A\", secondary: \"#000000\" },\n },\n bancoprocredit: {\n credit: { primary: \"#3A7830\", secondary: \"#1a3614\" },\n debit: { primary: \"#3A7830\", secondary: \"#1a3614\" },\n },\n bancoprocreditecuadorsa: {\n credit: { primary: \"#3A7830\", secondary: \"#1a3614\" },\n debit: { primary: \"#3A7830\", secondary: \"#1a3614\" },\n },\n procredit: {\n credit: { primary: \"#3A7830\", secondary: \"#1a3614\" },\n debit: { primary: \"#3A7830\", secondary: \"#1a3614\" },\n },\n bancodelojasa: {\n credit: { primary: \"#1E1E1E\", secondary: \"#000000\" },\n debit: { primary: \"#1E1E1E\", secondary: \"#000000\" },\n },\n loja: {\n credit: { primary: \"#1E1E1E\", secondary: \"#000000\" },\n debit: { primary: \"#1E1E1E\", secondary: \"#000000\" },\n },\n bancodemachalasa: {\n credit: { primary: \"#1B5E38\", secondary: \"#0a2c1a\" },\n debit: { primary: \"#1B5E38\", secondary: \"#0a2c1a\" },\n },\n machala: {\n credit: { primary: \"#1B5E38\", secondary: \"#0a2c1a\" },\n debit: { primary: \"#1B5E38\", secondary: \"#0a2c1a\" },\n },\n bancocomercialdemanabisa: {\n credit: { primary: \"#004F9F\", secondary: \"#001f44\" },\n debit: { primary: \"#004F9F\", secondary: \"#001f44\" },\n },\n bancogeneralrumiñahuisa: {\n credit: { primary: \"#E03020\", secondary: \"#7a1610\" },\n debit: { primary: \"#101010\", secondary: \"#000000\" },\n },\n bancogeneralruminahuisa: {\n credit: { primary: \"#E03020\", secondary: \"#7a1610\" },\n debit: { primary: \"#101010\", secondary: \"#000000\" },\n },\n rumiñahui: {\n credit: { primary: \"#E03020\", secondary: \"#7a1610\" },\n debit: { primary: \"#101010\", secondary: \"#000000\" },\n },\n ruminahui: {\n credit: { primary: \"#E03020\", secondary: \"#7a1610\" },\n debit: { primary: \"#101010\", secondary: \"#000000\" },\n },\n\n // ── Bancos con 1 variante ──\n banecuador: {\n debit: { primary: \"#2CC4B0\", secondary: \"#0e5e54\" },\n },\n bancoatlantida: {\n debit: { primary: \"#003087\", secondary: \"#001138\" },\n },\n atlantida: {\n debit: { primary: \"#003087\", secondary: \"#001138\" },\n },\n bancoatlantidadeecuador: {\n debit: { primary: \"#003087\", secondary: \"#001138\" },\n },\n bancodellitoral: {\n debit: { primary: \"#0070B8\", secondary: \"#003056\" },\n },\n bancocodesarrollo: {\n debit: { primary: \"#006837\", secondary: \"#002e18\" },\n },\n codesarrollo: {\n debit: { primary: \"#006837\", secondary: \"#002e18\" },\n },\n bancovisionfund: {\n debit: { primary: \"#FF6600\", secondary: \"#7a2f00\" },\n },\n\n // ── Mutualistas ──\n mutualistapichincha: {\n debit: { primary: \"#FFCB05\", secondary: \"#a87f00\" },\n },\n asociacionmutualistadeahorroycreditoparalaviviendapichincha: {\n debit: { primary: \"#FFCB05\", secondary: \"#a87f00\" },\n },\n asociacionmutualistadeahorroycreditoparalaviviendaazuay: {\n debit: { primary: \"#0057A8\", secondary: \"#00264a\" },\n },\n mutualistaazuay: {\n debit: { primary: \"#0057A8\", secondary: \"#00264a\" },\n },\n\n // ── Cooperativas grandes ──\n cooperativa29deoctubre: {\n credit: { primary: \"#B8001C\", secondary: \"#5e000e\" },\n debit: { primary: \"#B8001C\", secondary: \"#5e000e\" },\n },\n coop29deoctubre: {\n credit: { primary: \"#B8001C\", secondary: \"#5e000e\" },\n debit: { primary: \"#B8001C\", secondary: \"#5e000e\" },\n },\n cooperativadeahorroycredito29deoctubreltda: {\n credit: { primary: \"#B8001C\", secondary: \"#5e000e\" },\n debit: { primary: \"#B8001C\", secondary: \"#5e000e\" },\n },\n cooperativa23dejuliofinancoop: {\n credit: { primary: \"#005B9A\", secondary: \"#00263e\" },\n debit: { primary: \"#005B9A\", secondary: \"#00263e\" },\n },\n cooperativadaquilemafinancoop: {\n credit: { primary: \"#C8001C\", secondary: \"#5e000e\" },\n debit: { primary: \"#C8001C\", secondary: \"#5e000e\" },\n },\n cooperativamegofinancoop: {\n credit: { primary: \"#005038\", secondary: \"#001f15\" },\n debit: { primary: \"#005038\", secondary: \"#001f15\" },\n },\n cooperativamushucrunafinancoop: {\n credit: { primary: \"#5CB800\", secondary: \"#2e5e00\" },\n debit: { primary: \"#5CB800\", secondary: \"#2e5e00\" },\n },\n cooperativacacpeco: {\n credit: { primary: \"#F0F0F0\", secondary: \"#888888\" },\n debit: { primary: \"#F0F0F0\", secondary: \"#888888\" },\n },\n cooperativadeahorroycreditocacspmec: {\n credit: { primary: \"#003087\", secondary: \"#001138\" },\n debit: { primary: \"#003087\", secondary: \"#001138\" },\n },\n cacpmec: {\n credit: { primary: \"#003087\", secondary: \"#001138\" },\n debit: { primary: \"#003087\", secondary: \"#001138\" },\n },\n cooperativadeahorroycreditoandalucia: {\n credit: { primary: \"#006837\", secondary: \"#002e18\" },\n debit: { primary: \"#006837\", secondary: \"#002e18\" },\n },\n andalucia: {\n credit: { primary: \"#006837\", secondary: \"#002e18\" },\n debit: { primary: \"#006837\", secondary: \"#002e18\" },\n },\n cooperativadeahorroycreditochibuleo: {\n credit: { primary: \"#CC1020\", secondary: \"#5e0810\" },\n debit: { primary: \"#CC1020\", secondary: \"#5e0810\" },\n },\n chibuleo: {\n credit: { primary: \"#CC1020\", secondary: \"#5e0810\" },\n debit: { primary: \"#CC1020\", secondary: \"#5e0810\" },\n },\n cooperativadeahorroycreditocooprogresoltda: {\n credit: { primary: \"#005B9A\", secondary: \"#00263e\" },\n debit: { primary: \"#005B9A\", secondary: \"#00263e\" },\n },\n cooprogreso: {\n credit: { primary: \"#005B9A\", secondary: \"#00263e\" },\n debit: { primary: \"#005B9A\", secondary: \"#00263e\" },\n },\n cooperativadeahorroycreditodelapequenaempresadepastazaltda: {\n credit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativadeahorroycreditooscus: {\n credit: { primary: \"#C8C8C8\", secondary: \"#666666\" },\n debit: { primary: \"#C8C8C8\", secondary: \"#666666\" },\n },\n oscus: {\n credit: { primary: \"#C8C8C8\", secondary: \"#666666\" },\n debit: { primary: \"#C8C8C8\", secondary: \"#666666\" },\n },\n cooperativadeahorroycreditopablomunozvega: {\n credit: { primary: \"#006837\", secondary: \"#002e18\" },\n debit: { primary: \"#006837\", secondary: \"#002e18\" },\n },\n cooperativapablomunozvega: {\n credit: { primary: \"#006837\", secondary: \"#002e18\" },\n debit: { primary: \"#006837\", secondary: \"#002e18\" },\n },\n cooperativadeahorroycreditotulcan: {\n credit: { primary: \"#005B9A\", secondary: \"#00263e\" },\n debit: { primary: \"#005B9A\", secondary: \"#00263e\" },\n },\n tulcan: {\n credit: { primary: \"#005B9A\", secondary: \"#00263e\" },\n debit: { primary: \"#005B9A\", secondary: \"#00263e\" },\n },\n cooperativajardinazuayo: {\n credit: { primary: \"#1A3A6A\", secondary: \"#0a182e\" },\n debit: { primary: \"#1A3A6A\", secondary: \"#0a182e\" },\n },\n jardinazuayo: {\n credit: { primary: \"#1A3A6A\", secondary: \"#0a182e\" },\n debit: { primary: \"#1A3A6A\", secondary: \"#0a182e\" },\n },\n cooperativadeahorroycreditoalianzadelvalleltda: {\n credit: { primary: \"#004F9F\", secondary: \"#001f44\" },\n debit: { primary: \"#004F9F\", secondary: \"#001f44\" },\n },\n alianzadelvalle: {\n credit: { primary: \"#004F9F\", secondary: \"#001f44\" },\n debit: { primary: \"#004F9F\", secondary: \"#001f44\" },\n },\n cooperativaatuntaquifinancoop: {\n credit: { primary: \"#C8001C\", secondary: \"#5e000e\" },\n debit: { primary: \"#C8001C\", secondary: \"#5e000e\" },\n },\n cooperativasagrariofinancoop: {\n credit: { primary: \"#005FAA\", secondary: \"#002850\" },\n debit: { primary: \"#005FAA\", secondary: \"#002850\" },\n },\n financoop: {\n debit: { primary: \"#005FAA\", secondary: \"#002850\" },\n },\n\n // ── Cooperativas pequeñas (verde genérico cooperativista) ──\n cooperativa15deabril: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativacacpepastaza: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativacrea: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativadeahorroycreditocrea: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n crea: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativadeahorroycreditodelapequenaempresabiblianltda: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n biblian: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativaeducadoreschimborazo: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativaerco: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativagualaquiza: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativaimbaburapakfinancoop: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativajulianlorentefinancoop: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativalamerced: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativasantarosafinancoop: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativaambatofinancoop: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativacredilfinancoop: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativapuellarofinancoop: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n cooperativasanmigueldelosbancos: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n coemisorcooperativalasnaves: {\n debit: { primary: \"#1E8449\", secondary: \"#0d4621\" },\n },\n\n // ── Otros / procesadores ──\n creditia: {\n credit: { primary: \"#666666\", secondary: \"#333333\" },\n debit: { primary: \"#666666\", secondary: \"#333333\" },\n },\n};\n\nfunction normalize(name: string): string {\n return name\n .toLowerCase()\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\") // strip accents\n .replace(/[^a-z]/g, \"\");\n}\n\n/**\n * Lookup the palette for a bank, optionally by card type.\n * Strategy:\n * 1. Find the bank's BankByType by normalized name (or substring match).\n * 2. Try to return the palette for the requested type.\n * 3. Fall back to credit → debit → first available type.\n */\nexport function lookupBankPalette(\n bankName: string | undefined,\n cardType?: CardType,\n): BankPalette | null {\n if (!bankName) return null;\n const norm = normalize(bankName);\n if (!norm) return null;\n\n let bankByType: BankByType | undefined = BANK_PALETTES[norm];\n\n // Substring match for variations in bank naming\n if (!bankByType) {\n for (const key of Object.keys(BANK_PALETTES)) {\n if (norm.includes(key) && key.length >= 6) {\n bankByType = BANK_PALETTES[key];\n break;\n }\n }\n }\n\n if (!bankByType) return null;\n\n // Try requested type, then sensible fallbacks\n if (cardType && bankByType[cardType]) return bankByType[cardType]!;\n if (bankByType.credit) return bankByType.credit;\n if (bankByType.debit) return bankByType.debit;\n if (bankByType.prepaid) return bankByType.prepaid;\n return null;\n}\n","// Source: pauhenriques-website/src/types/{bin,card}.ts\n// Phase 1.5: types for UI components. Self-contained — no imports from\n// Pau-specific paths.\n\n/** Card brand codes as returned by Nuvei (Paymentez). */\nexport type CardBrand =\n | \"vi\"\n | \"mc\"\n | \"ax\"\n | \"di\"\n | \"dc\"\n | \"up\"\n | \"cs\"\n | \"unknown\";\n\n/** Card type. Nuvei returns this for known BINs. */\nexport type CardType = \"credit\" | \"debit\" | \"prepaid\" | \"unknown\";\n\n/** Card carrier (Ecuador-specific: Datafast vs Medianet processor). */\nexport type CardCarrier = \"datafast\" | \"medianet\" | \"both\" | \"unknown\";\n\n/** BIN lookup result — full info about a card's issuer and processing path. */\nexport interface BinInfo {\n bank: string;\n brand: CardBrand;\n type: CardType;\n carrier: CardCarrier;\n requiresOtp: boolean;\n}\n\n/** BIN database structure. Keyed by 6-8 digit BIN prefix. */\nexport interface BinDatabase {\n data: Record<string, BinInfo>;\n version: string;\n count: number;\n updatedAt?: string;\n}\n\n/** Bank color palette for rendering branded card visuals. */\nexport interface BankPalette {\n /** Primary brand color (hex) */\n primary: string;\n /** Optional secondary for gradients */\n secondary?: string;\n}\n\n/** Saved card as returned by Nuvei /v2/card/list. */\nexport interface SavedCard {\n bin: string;\n status: \"valid\" | \"review\" | \"pending\" | \"rejected\";\n token: string;\n holder_name: string;\n expiry_year: string;\n expiry_month: string;\n transaction_reference: string;\n /** Brand code: \"vi\", \"mc\", \"ax\", \"di\", \"dc\", etc. */\n type: string;\n /** Last 4 digits of the card number. */\n number: string;\n}\n\n/** Brand name display map. */\nexport const CARD_BRAND_NAMES: Record<CardBrand, string> = {\n vi: \"Visa\",\n mc: \"Mastercard\",\n ax: \"American Express\",\n di: \"Diners Club\",\n dc: \"Discover\",\n up: \"UnionPay\",\n cs: \"Credisensa\",\n unknown: \"Tarjeta\",\n};\n\n/** Card type display map (Spanish). */\nexport const CARD_TYPE_NAMES: Record<CardType, string> = {\n credit: \"Crédito\",\n debit: \"Débito\",\n prepaid: \"Prepago\",\n unknown: \"\",\n};\n","\"use client\";\n\n// Source: pauhenriques-website/src/components/checkout/CardVisual.tsx\n// Phase 1.5: refactored for the package.\n//\n// Renders a payment card thumbnail (compact) or full card mock (full variant)\n// with bank-specific colors when the BIN is known. The BIN lookup hits the\n// consumer's /api/bins endpoint (overridable via prop), and the bank-color\n// palette is bundled in the package and maintained centrally by PandaIT.\n\nimport { useEffect, useState } from \"react\";\nimport { getBinDatabase, lookupBinSync } from \"./bin-lookup.js\";\nimport { lookupBankPalette } from \"./bank-colors.js\";\nimport {\n CARD_BRAND_NAMES,\n CARD_TYPE_NAMES,\n type BinDatabase,\n type BinInfo,\n} from \"./types.js\";\n\ninterface CardVisualProps {\n bin?: string;\n brand: string;\n last4: string;\n holderName: string;\n expiryMonth: string;\n expiryYear: string;\n /** Compact = mini real-card thumbnail (Rappi/PayPal style). Full = larger card. */\n variant?: \"compact\" | \"full\";\n /** Pre-resolved BIN info. If provided, no network lookup is performed. Useful\n * for server-rendered scenarios or when the consumer already cached lookups. */\n binInfo?: BinInfo;\n /** Path of the consumer's BIN database endpoint. Default: \"/api/bins\".\n * Set to null to disable network lookup entirely (component will fall back\n * to brand network colors). */\n binDatabaseEndpoint?: string | null;\n}\n\n// Brand gradients — fallback when bank color is unknown.\nconst BRAND_GRADIENT: Record<string, { from: string; to: string }> = {\n vi: { from: \"#1a1f71\", to: \"#0d1240\" },\n mc: { from: \"#cc4d2e\", to: \"#561a0e\" },\n ax: { from: \"#016fcf\", to: \"#003f7a\" },\n di: { from: \"#2c3e50\", to: \"#11161e\" },\n dc: { from: \"#ff6f00\", to: \"#a83a00\" },\n default: { from: \"#3a4632\", to: \"#1a2014\" },\n};\n\n// Small SVG-ish brand mark using styled text — no external asset needed.\nfunction BrandMark({ brand }: { brand: string }) {\n const text = CARD_BRAND_NAMES[brand as keyof typeof CARD_BRAND_NAMES] || \"CARD\";\n if (brand === \"mc\") {\n // Mastercard interlocking circles\n return (\n <div className=\"flex items-center -space-x-2\">\n <span className=\"w-4 h-4 rounded-full bg-[#eb001b]\" />\n <span className=\"w-4 h-4 rounded-full bg-[#f79e1b]/90 mix-blend-screen\" />\n </div>\n );\n }\n return (\n <span className=\"text-white text-[11px] font-bold tracking-wider uppercase italic\">\n {text}\n </span>\n );\n}\n\nexport function CardVisual({\n bin,\n brand,\n last4,\n holderName,\n expiryMonth,\n expiryYear,\n variant = \"compact\",\n binInfo: preResolvedBinInfo,\n binDatabaseEndpoint = \"/api/bins\",\n}: CardVisualProps) {\n const [binInfo, setBinInfo] = useState<BinInfo | null>(\n preResolvedBinInfo ?? null,\n );\n\n useEffect(() => {\n // Skip network lookup if consumer pre-resolved or explicitly disabled\n if (preResolvedBinInfo || binDatabaseEndpoint === null || !bin) return;\n let cancelled = false;\n getBinDatabase(binDatabaseEndpoint).then((db: BinDatabase | null) => {\n if (cancelled || !db) return;\n const info = lookupBinSync(bin, db);\n if (info) setBinInfo(info);\n });\n return () => {\n cancelled = true;\n };\n }, [bin, binDatabaseEndpoint, preResolvedBinInfo]);\n\n const bankName = binInfo?.bank ?? \"\";\n const bankPalette = lookupBankPalette(bankName, binInfo?.type);\n // Bank color takes priority; fallback to network brand color.\n // noUncheckedIndexedAccess makes Record lookups `T | undefined`, so the\n // default entry needs a non-null assertion (BRAND_GRADIENT.default is\n // statically present).\n const brandFallback = BRAND_GRADIENT[brand] ?? BRAND_GRADIENT.default!;\n const gradientFrom = bankPalette?.primary ?? brandFallback.from;\n const gradientTo = bankPalette?.secondary ?? brandFallback.to;\n const gradientStyle = {\n background: `linear-gradient(135deg, ${gradientFrom} 0%, ${gradientTo} 100%)`,\n };\n const cardType = binInfo?.type ? CARD_TYPE_NAMES[binInfo.type] || \"\" : \"\";\n const expiryShort = `${expiryMonth.padStart(2, \"0\")}/${String(expiryYear).slice(-2)}`;\n\n if (variant === \"compact\") {\n // Mini real-card thumbnail (≈ 80x52, aspect 1.6:1) + meta on the right.\n return (\n <div className=\"flex items-center gap-3 min-w-0\">\n <div\n style={gradientStyle}\n className=\"shrink-0 relative w-22 h-14 rounded-md shadow-md overflow-hidden\"\n >\n {/* Subtle holographic shine */}\n <div className=\"absolute inset-0 bg-linear-to-br from-white/10 via-transparent to-black/20 pointer-events-none\" />\n {/* Chip */}\n <div className=\"absolute top-2 left-2 w-3.5 h-2.5 rounded-sm bg-linear-to-br from-yellow-200/80 to-yellow-600/80 border border-yellow-700/40\" />\n {/* Brand mark */}\n <div className=\"absolute top-1.5 right-2\">\n <BrandMark brand={brand} />\n </div>\n {/* Last 4 */}\n <div className=\"absolute bottom-1.5 left-2 right-2 flex justify-between items-end\">\n <span className=\"text-white/95 text-[11px] font-mono tracking-[0.05em] font-semibold drop-shadow\">\n ····{last4}\n </span>\n <span className=\"text-white/75 text-[8px] font-mono\">{expiryShort}</span>\n </div>\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-semibold text-[var(--color-text-main)] truncate\">\n {bankName || CARD_BRAND_NAMES[brand as keyof typeof CARD_BRAND_NAMES] || \"Tarjeta\"}\n </p>\n <p className=\"text-xs text-[var(--color-text-main)]/50 truncate\">\n {cardType ? `${cardType} · ` : \"\"}{holderName || \"—\"}\n </p>\n </div>\n </div>\n );\n }\n\n // Full variant — full real-card look (for confirm step / detailed views)\n return (\n <div\n style={gradientStyle}\n className=\"relative overflow-hidden rounded-2xl shadow-xl p-5 aspect-[1.586/1] w-full max-w-sm\"\n >\n <div className=\"absolute inset-0 bg-linear-to-br from-white/10 via-transparent to-black/30 pointer-events-none\" />\n {/* Top row: type label + brand */}\n <div className=\"relative flex justify-between items-start\">\n <div>\n <p className=\"text-[10px] font-medium tracking-[0.2em] uppercase text-white/50\">\n {cardType || \"Tarjeta\"}\n </p>\n {bankName && (\n <p className=\"text-xs text-white/85 mt-0.5 font-medium\">{bankName}</p>\n )}\n </div>\n <BrandMark brand={brand} />\n </div>\n\n {/* Chip */}\n <div className=\"relative mt-6 w-9 h-7 rounded-md bg-linear-to-br from-yellow-200 to-yellow-600 border border-yellow-700/40 shadow-inner\" />\n\n {/* Card number */}\n <div className=\"relative mt-4\">\n <p className=\"font-mono text-lg tracking-wider text-white drop-shadow\">\n ···· ···· ···· {last4}\n </p>\n </div>\n\n {/* Bottom row: holder + expiry */}\n <div className=\"relative mt-3 flex justify-between items-end\">\n <div className=\"min-w-0\">\n <p className=\"text-[9px] uppercase tracking-wider text-white/50\">Titular</p>\n <p className=\"text-white text-sm font-medium truncate uppercase\">\n {holderName || \"—\"}\n </p>\n </div>\n <div className=\"text-right\">\n <p className=\"text-[9px] uppercase tracking-wider text-white/50\">Expira</p>\n <p className=\"text-white text-sm font-mono font-medium\">{expiryShort}</p>\n </div>\n </div>\n </div>\n );\n}\n\nexport default CardVisual;\n","\"use client\";\n\n// Source: pauhenriques-website/src/components/checkout/SavedCards.tsx\n// Phase 1.5: refactored for the package.\n//\n// Renders the customer's saved Nuvei cards with selection + CVC input + delete +\n// micro-charge verify flow for Diners/Pichincha cards stuck in \"review\" status.\n// Reads /api/nuvei/cards and POSTs /api/nuvei/verify — those endpoints are\n// provided by the package's handler factories (createCardsHandler,\n// createVerifyHandler) so paths are fixed by convention.\n\nimport { useEffect, useState } from \"react\";\nimport {\n FaCheck,\n FaLock,\n FaPlus,\n FaTrash,\n FaExclamationTriangle,\n FaShieldAlt,\n} from \"react-icons/fa\";\nimport { CardVisual } from \"./CardVisual.js\";\nimport type { SavedCard } from \"./types.js\";\n\ninterface SavedCardsProps {\n onSelectCard: (card: SavedCard, cvc: string) => void;\n selectedToken: string | null;\n onAddNewCard: () => void;\n /** Path of the consumer's BIN database endpoint, forwarded to CardVisual.\n * Default: \"/api/bins\". Set to null to disable bank-color lookups. */\n binDatabaseEndpoint?: string | null;\n}\n\nexport function SavedCards({\n onSelectCard,\n selectedToken,\n onAddNewCard,\n binDatabaseEndpoint,\n}: SavedCardsProps) {\n const [cards, setCards] = useState<SavedCard[]>([]);\n const [loading, setLoading] = useState(true);\n const [deleting, setDeleting] = useState<string | null>(null);\n const [cvcValues, setCvcValues] = useState<Record<string, string>>({});\n const [verifyingToken, setVerifyingToken] = useState<string | null>(null);\n const [verifyValue, setVerifyValue] = useState(\"\");\n const [verifyError, setVerifyError] = useState<string | null>(null);\n const [verifySubmitting, setVerifySubmitting] = useState(false);\n\n useEffect(() => {\n loadCards();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n async function loadCards() {\n setLoading(true);\n try {\n const res = await fetch(\"/api/nuvei/cards\");\n if (res.ok) {\n const data = await res.json();\n const allCards: SavedCard[] = data.cards || [];\n setCards(allCards);\n // Auto-select first valid card only\n if (!selectedToken) {\n const firstValid = allCards.find((c) => c.status === \"valid\");\n if (firstValid) onSelectCard(firstValid, \"\");\n }\n }\n } catch (err) {\n console.error(\"Error loading cards:\", err);\n } finally {\n setLoading(false);\n }\n }\n\n async function handleDelete(token: string) {\n setDeleting(token);\n try {\n const res = await fetch(\"/api/nuvei/cards\", {\n method: \"DELETE\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ token }),\n });\n if (res.ok) {\n setCards((prev) => prev.filter((c) => c.token !== token));\n if (verifyingToken === token) {\n setVerifyingToken(null);\n setVerifyValue(\"\");\n setVerifyError(null);\n }\n if (selectedToken === token) {\n const remaining = cards.filter(\n (c) => c.token !== token && c.status === \"valid\",\n );\n if (remaining.length > 0) {\n onSelectCard(remaining[0]!, \"\");\n }\n }\n }\n } catch (err) {\n console.error(\"Error deleting card:\", err);\n } finally {\n setDeleting(null);\n }\n }\n\n async function handleVerify(card: SavedCard) {\n if (!verifyValue.trim()) return;\n setVerifySubmitting(true);\n setVerifyError(null);\n\n try {\n const res = await fetch(\"/api/nuvei/verify\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n cardToken: card.token,\n transactionReference: card.transaction_reference,\n value: verifyValue.trim(),\n }),\n });\n\n const data = await res.json();\n\n if (data.success) {\n // Card verified — update status locally and select it\n setCards((prev) =>\n prev.map((c) =>\n c.token === card.token ? { ...c, status: \"valid\" as const } : c,\n ),\n );\n setVerifyingToken(null);\n setVerifyValue(\"\");\n onSelectCard({ ...card, status: \"valid\" }, \"\");\n } else {\n setVerifyError(\n data.error || \"Monto incorrecto. Revisa tu estado de cuenta.\",\n );\n }\n } catch {\n setVerifyError(\"Error de conexión. Intenta de nuevo.\");\n } finally {\n setVerifySubmitting(false);\n }\n }\n\n if (loading) {\n return (\n <div className=\"flex justify-center py-6\">\n <div className=\"w-12 h-12 rounded-full border-2 border-[var(--color-text-main)]/20 border-t-[var(--color-primary)] animate-spin\" />\n </div>\n );\n }\n\n const validCards = cards.filter((c) => c.status === \"valid\");\n const reviewCards = cards.filter(\n (c) => c.status === \"review\" || c.status === \"pending\",\n );\n\n return (\n <div className=\"space-y-4\">\n {/* Valid cards */}\n {validCards.length > 0 && (\n <div className=\"space-y-3\">\n {validCards.map((card) => {\n const isSelected = selectedToken === card.token;\n const cvc = cvcValues[card.token] || \"\";\n const maxCvc = card.type === \"ax\" ? 4 : 3;\n\n return (\n <div\n key={card.token}\n onClick={() => {\n onSelectCard(card, cvc);\n if (!isSelected) {\n setCvcValues((prev) => ({ ...prev, [card.token]: \"\" }));\n }\n }}\n className={`border rounded-lg cursor-pointer transition-all duration-200 ${\n isSelected\n ? \"border-[var(--color-primary)] bg-[var(--color-primary)]/5 ring-1 ring-[var(--color-primary)]\"\n : \"border-[var(--color-border-default)] hover:border-[var(--color-border-strong)]\"\n }`}\n >\n <div className=\"p-4 flex items-center justify-between gap-3\">\n <div className=\"flex items-center gap-2 min-w-0 flex-1\">\n <CardVisual\n bin={card.bin}\n brand={card.type}\n last4={card.number}\n holderName={card.holder_name}\n expiryMonth={card.expiry_month}\n expiryYear={card.expiry_year}\n binDatabaseEndpoint={binDatabaseEndpoint}\n />\n {isSelected && (\n <FaCheck className=\"w-3.5 h-3.5 text-[var(--color-primary)] shrink-0\" />\n )}\n </div>\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleDelete(card.token);\n }}\n disabled={deleting === card.token}\n className=\"text-[var(--color-text-main)]/30 hover:text-[var(--color-error)] p-1 disabled:opacity-50 transition-colors cursor-pointer shrink-0\"\n title=\"Eliminar tarjeta\"\n >\n <FaTrash className=\"w-3 h-3\" />\n </button>\n </div>\n\n {/* CVC input — appears inline when card is selected */}\n {isSelected && (\n <div className=\"px-4 pb-4 pt-0 border-t border-[var(--color-primary)]/15\">\n <div className=\"flex items-center gap-3 pt-3\">\n <FaLock className=\"w-3 h-3 text-[var(--color-text-main)]/30 shrink-0\" />\n <label\n htmlFor={`cvc-${card.token}`}\n className=\"text-xs text-[var(--color-text-main)]/50 shrink-0\"\n >\n Código de seguridad\n </label>\n <input\n id={`cvc-${card.token}`}\n type=\"text\"\n inputMode=\"numeric\"\n maxLength={maxCvc}\n autoComplete=\"cc-csc\"\n placeholder={maxCvc === 4 ? \"····\" : \"···\"}\n value={cvc}\n onClick={(e) => e.stopPropagation()}\n onChange={(e) => {\n const val = e.target.value.replace(/\\D/g, \"\");\n setCvcValues((prev) => ({\n ...prev,\n [card.token]: val,\n }));\n onSelectCard(card, val);\n }}\n autoFocus\n className=\"w-16 text-center font-mono text-sm tracking-[0.25em] border border-[var(--color-border-default)] rounded-lg py-2 bg-[var(--color-background)] text-[var(--color-text-main)] placeholder:text-[var(--color-text-main)]/20 focus:outline-none focus:ring-2 focus:ring-[var(--color-primary)]/50 focus:border-[var(--color-primary)] transition-all\"\n />\n </div>\n </div>\n )}\n </div>\n );\n })}\n </div>\n )}\n\n {/* Review cards — need verification */}\n {reviewCards.length > 0 && (\n <div className=\"space-y-3\">\n {reviewCards.map((card) => {\n const isExpanded = verifyingToken === card.token;\n return (\n <div\n key={card.token}\n className=\"border border-[var(--color-warning)]/30 bg-[var(--color-warning)]/5 rounded-lg overflow-hidden transition-all duration-200\"\n >\n {/* Card header */}\n <div className=\"p-4 flex items-center justify-between gap-3\">\n <div className=\"flex items-center gap-2 min-w-0 flex-1\">\n <CardVisual\n bin={card.bin}\n brand={card.type}\n last4={card.number}\n holderName={card.holder_name}\n expiryMonth={card.expiry_month}\n expiryYear={card.expiry_year}\n binDatabaseEndpoint={binDatabaseEndpoint}\n />\n <span className=\"text-[10px] font-medium uppercase tracking-wider bg-[var(--color-warning)]/15 text-[var(--color-warning)] px-1.5 py-0.5 rounded shrink-0 inline-flex items-center gap-1\">\n <FaExclamationTriangle className=\"w-2.5 h-2.5\" />\n Verificar\n </span>\n </div>\n <div className=\"flex items-center gap-2 shrink-0\">\n {!isExpanded && (\n <button\n onClick={() => {\n setVerifyingToken(card.token);\n setVerifyValue(\"\");\n setVerifyError(null);\n }}\n className=\"text-xs font-medium text-[var(--color-primary)] hover:text-[var(--color-primary-hover)] underline underline-offset-2 transition-colors cursor-pointer\"\n >\n Verificar\n </button>\n )}\n <button\n onClick={() => handleDelete(card.token)}\n disabled={deleting === card.token}\n className=\"text-[var(--color-text-main)]/30 hover:text-[var(--color-error)] p-1 disabled:opacity-50 transition-colors cursor-pointer\"\n title=\"Eliminar tarjeta\"\n >\n <FaTrash className=\"w-3 h-3\" />\n </button>\n </div>\n </div>\n\n {/* Verification form — expanded inline */}\n {isExpanded && (\n <div className=\"px-4 pb-4 border-t border-[var(--color-warning)]/20\">\n <div className=\"pt-3 space-y-3\">\n <div className=\"flex items-start gap-2.5\">\n <FaShieldAlt className=\"w-3.5 h-3.5 text-[var(--color-primary)] mt-0.5 shrink-0\" />\n <p className=\"text-xs text-[var(--color-text-main)]/60 leading-relaxed\">\n Se realizó un micro-cobro a tu tarjeta. Revisa tu\n estado de cuenta bancario e ingresa el monto exacto\n para verificarla.\n </p>\n </div>\n\n <div className=\"flex gap-2\">\n <div className=\"relative flex-1\">\n <span className=\"absolute left-3 top-1/2 -translate-y-1/2 text-[var(--color-text-main)]/40 text-sm\">\n $\n </span>\n <input\n type=\"text\"\n inputMode=\"decimal\"\n value={verifyValue}\n onChange={(e) => {\n const val = e.target.value.replace(\n /[^0-9.]/g,\n \"\",\n );\n setVerifyValue(val);\n }}\n placeholder=\"0.00\"\n className=\"w-full pl-7 pr-3 py-2.5 text-sm border border-[var(--color-border-default)] rounded-lg bg-[var(--color-background)] text-[var(--color-text-main)] placeholder:text-[var(--color-text-main)]/30 focus:outline-none focus:ring-2 focus:ring-[var(--color-primary)]/50 focus:border-[var(--color-primary)] transition-all\"\n autoFocus\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleVerify(card);\n }}\n />\n </div>\n <button\n onClick={() => handleVerify(card)}\n disabled={verifySubmitting || !verifyValue.trim()}\n className=\"px-4 py-2.5 bg-[var(--color-primary)] hover:bg-[var(--color-primary-hover)] text-white text-sm font-medium rounded-lg transition-colors disabled:bg-[var(--color-surface-elevated)] disabled:text-[var(--color-text-main)]/30 cursor-pointer\"\n >\n {verifySubmitting ? (\n <div className=\"w-4 h-4 rounded-full border-2 border-white border-b-transparent animate-spin\" />\n ) : (\n \"Verificar\"\n )}\n </button>\n </div>\n\n {verifyError && (\n <p className=\"text-xs text-[var(--color-error)]\">{verifyError}</p>\n )}\n\n <button\n onClick={() => {\n setVerifyingToken(null);\n setVerifyValue(\"\");\n setVerifyError(null);\n }}\n className=\"text-xs text-[var(--color-text-main)]/40 hover:text-[var(--color-text-main)]/60 transition-colors cursor-pointer\"\n >\n Cancelar\n </button>\n </div>\n </div>\n )}\n </div>\n );\n })}\n </div>\n )}\n\n <button\n onClick={onAddNewCard}\n className=\"w-full flex items-center justify-center gap-2 p-3 border-2 border-dashed border-[var(--color-border-default)] rounded-lg text-sm text-[var(--color-text-main)]/50 hover:border-[var(--color-primary)] hover:text-[var(--color-primary)] transition-colors cursor-pointer\"\n >\n <FaPlus className=\"w-3 h-3\" />\n {cards.length > 0 ? \"Usar otra tarjeta\" : \"Agregar tarjeta\"}\n </button>\n </div>\n );\n}\n\nexport default SavedCards;\n","\"use client\";\n\n// Source: pauhenriques-website/src/components/checkout/NuveiPaymentForm.tsx\n// Phase 1.5: refactored for the package.\n//\n// Mounts the Paymentez SDK (loaded via next/script) into a tokenize form\n// container, captures the result, and calls onTokenSuccess/onTokenError.\n// Nuvei credentials and SDK config (country, exclusive card types, icon\n// color) are read from props with sensible defaults so the same component\n// works for Pau, whitelabel clients, and future custom-made sites.\n\nimport { useEffect, useRef, useState, useCallback } from \"react\";\nimport Script from \"next/script\";\nimport {\n FaLock,\n FaExclamationTriangle,\n FaTimesCircle,\n FaInfoCircle,\n FaRedo,\n} from \"react-icons/fa\";\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\ninterface PaymentGatewayInstance {\n generate_tokenize: (\n data: TokenizeData,\n containerSelector: string,\n responseCallback: (response: TokenizeResponse) => void,\n notCompletedCallback: (message: string) => void,\n ) => void;\n tokenize: () => void;\n}\n\ninterface TokenizeData {\n locale: string;\n user: {\n id: string;\n email: string;\n };\n configuration: {\n default_country: string;\n icon_colour?: string;\n use_dropdowns?: boolean;\n exclusive_types?: string[];\n invalid_card_type_message?: string;\n };\n}\n\ninterface TokenizeResponse {\n card: {\n bin: string;\n status: \"valid\" | \"review\" | \"rejected\" | string;\n token?: string;\n message?: string;\n expiry_year?: string;\n expiry_month?: string;\n transaction_reference?: string;\n type?: string;\n number?: string;\n };\n}\n\ntype ErrorVariant = \"rejected\" | \"duplicate\" | \"incomplete\" | \"system\";\n\ninterface CardError {\n variant: ErrorVariant;\n title: string;\n message: string;\n duplicateToken?: string;\n}\n\nexport interface TokenizedCardInfo {\n type?: string;\n number?: string;\n expiry_year?: string;\n expiry_month?: string;\n}\n\ninterface NuveiPaymentFormProps {\n uid: string;\n email: string;\n onTokenSuccess: (\n token: string,\n cardInfo: TokenizedCardInfo,\n saveCard: boolean,\n ) => void;\n /** @deprecated Errors are rendered inline by the component. This callback is\n * preserved as optional for API compatibility but is never invoked.\n * For telemetry, listen for the relevant DOM events or wrap setError yourself. */\n onTokenError?: (error: string) => void;\n /** Forces the submit button to disabled state (in addition to processing). */\n disabled?: boolean;\n /** Override button text (default: \"Agregar Tarjeta\" / \"Continuar con pago\") */\n buttonLabel?: string;\n /** Hide \"Guardar tarjeta\" checkbox — forces saveCard=false (guest flows) */\n showSaveCardCheckbox?: boolean;\n /** Text shown during processing (default: \"Verificando…\") */\n processingLabel?: string;\n /** Nuvei client app code. Default: NEXT_PUBLIC_NUVEI_CLIENT_APP_CODE env var. */\n nuveiAppCode?: string;\n /** Nuvei client app key. Default: NEXT_PUBLIC_NUVEI_CLIENT_APP_KEY env var. */\n nuveiAppKey?: string;\n /** Nuvei environment. Default: NEXT_PUBLIC_NUVEI_ENV env var, falling back to \"stg\". */\n nuveiEnv?: \"prod\" | \"stg\";\n /** ISO-3 country code for the SDK form. Default: \"ECU\". */\n defaultCountry?: string;\n /** Allowed card brand codes for tokenization (Paymentez). Default: [\"vi\",\"mc\",\"ax\",\"di\"]. */\n exclusiveCardTypes?: string[];\n /** Hex color for the SDK form icons. Default: reads var(--color-primary) from the DOM. */\n iconColor?: string;\n}\n\nconst SDK_URL =\n \"https://cdn.paymentez.com/ccapi/sdk/payment_sdk_stable.min.js\";\nconst CONTAINER_ID = \"nuvei-tokenize-container\";\n\nconst DEFAULT_EXCLUSIVE_TYPES = [\"vi\", \"mc\", \"ax\", \"di\"] as const;\n\nfunction readCssVar(name: string, fallback: string): string {\n if (typeof window === \"undefined\") return fallback;\n const value = getComputedStyle(document.documentElement)\n .getPropertyValue(name)\n .trim();\n return value || fallback;\n}\n\nexport function NuveiPaymentForm({\n uid,\n email,\n onTokenSuccess,\n disabled,\n buttonLabel,\n showSaveCardCheckbox = true,\n processingLabel = \"Verificando…\",\n nuveiAppCode,\n nuveiAppKey,\n nuveiEnv,\n defaultCountry = \"ECU\",\n exclusiveCardTypes,\n iconColor,\n}: NuveiPaymentFormProps) {\n const [sdkReady, setSdkReady] = useState(false);\n const [sdkTimedOut, setSdkTimedOut] = useState(false);\n const [isProcessing, setIsProcessing] = useState(false);\n const [isDeletingDuplicate, setIsDeletingDuplicate] = useState(false);\n const [error, setError] = useState<CardError | null>(null);\n const [saveCard, setSaveCard] = useState(showSaveCardCheckbox);\n const sdkInitRef = useRef(false);\n const pgSdkRef = useRef<PaymentGatewayInstance | null>(null);\n const saveCardRef = useRef(showSaveCardCheckbox);\n\n // Keep ref in sync for use inside memoized callback\n useEffect(() => {\n saveCardRef.current = saveCard;\n }, [saveCard]);\n\n // Timeout: if SDK hasn't loaded in 15s, show a helpful message\n useEffect(() => {\n if (sdkReady) return;\n const timer = setTimeout(() => {\n if (!sdkReady) setSdkTimedOut(true);\n }, 15000);\n return () => clearTimeout(timer);\n }, [sdkReady]);\n\n function buildError(rawMsg: string): CardError {\n const msg = rawMsg.toLowerCase();\n\n if (msg.includes(\"already\")) {\n return {\n variant: \"duplicate\",\n title: \"Tarjeta ya registrada\",\n message:\n \"Esta tarjeta ya está en tu cuenta. Selecciónala desde tus tarjetas guardadas.\",\n };\n }\n if (msg.includes(\"blacklist\") || msg.includes(\"black list\")) {\n return {\n variant: \"rejected\",\n title: \"Tarjeta no aceptada\",\n message:\n \"Esta tarjeta está en una lista restringida y no puede ser utilizada. Contacta a tu banco o intenta con otra tarjeta.\",\n };\n }\n if (msg.includes(\"fraud\")) {\n return {\n variant: \"rejected\",\n title: \"Tarjeta rechazada por seguridad\",\n message:\n \"El sistema de seguridad rechazó esta tarjeta. Intenta con otra tarjeta.\",\n };\n }\n if (\n msg.includes(\"reject\") ||\n msg.includes(\"response by mock\") ||\n msg.includes(\"denied\") ||\n msg.includes(\"declined\")\n ) {\n return {\n variant: \"rejected\",\n title: \"Tarjeta rechazada\",\n message:\n \"El banco emisor rechazó esta tarjeta. Verifica los datos o intenta con otra tarjeta.\",\n };\n }\n if (msg.includes(\"expired\")) {\n return {\n variant: \"rejected\",\n title: \"Tarjeta vencida\",\n message:\n \"Esta tarjeta está vencida. Actualiza tu método de pago o usa otra tarjeta.\",\n };\n }\n if (msg.includes(\"invalid\") || msg.includes(\"not valid\")) {\n return {\n variant: \"rejected\",\n title: \"Tarjeta inválida\",\n message:\n \"Los datos de la tarjeta no son válidos. Verifica el número, fecha y CVV.\",\n };\n }\n // Fallback — never show raw Nuvei messages to the user\n return {\n variant: \"rejected\",\n title: \"Tarjeta no aceptada\",\n message:\n \"No se pudo registrar esta tarjeta. Verifica los datos o intenta con otra.\",\n };\n }\n\n const responseCallback = useCallback(\n (response: any) => {\n setIsProcessing(false);\n\n if (response.error) {\n if (process.env.NODE_ENV !== \"production\") {\n console.log(\n \"[NuveiPaymentForm] SDK error response:\",\n JSON.stringify(response.error),\n );\n }\n const errorType = response.error?.type || \"\";\n if (errorType.toLowerCase().includes(\"card already added\")) {\n // Extract token from \"Card already added: TOKEN_HERE\"\n const tokenMatch = errorType.match(/Card already added:\\s*(\\S+)/i);\n setError({\n variant: \"duplicate\",\n title: \"Tarjeta ya registrada\",\n message:\n \"Esta tarjeta ya existe en tu cuenta pero no se puede usar. Puedes eliminarla y volver a agregarla.\",\n duplicateToken: tokenMatch?.[1],\n });\n } else {\n setError({\n variant: \"rejected\",\n title: \"Tarjeta no aceptada\",\n message:\n \"No se pudo registrar esta tarjeta. Verifica los datos o intenta con otra.\",\n });\n }\n return;\n }\n\n if (!response.card) {\n setError({\n variant: \"system\",\n title: \"Respuesta inesperada\",\n message: \"No se recibió respuesta del procesador. Intenta de nuevo.\",\n });\n return;\n }\n\n if (\n response.card.status === \"valid\" ||\n response.card.status === \"review\"\n ) {\n if (response.card.token) {\n setError(null);\n onTokenSuccess(\n response.card.token,\n {\n type: response.card.type,\n number: response.card.number,\n expiry_year: response.card.expiry_year,\n expiry_month: response.card.expiry_month,\n },\n saveCardRef.current,\n );\n } else {\n setError({\n variant: \"system\",\n title: \"Token no recibido\",\n message: \"No se pudo registrar la tarjeta. Intenta de nuevo.\",\n });\n }\n } else {\n // Show error inline only — don't propagate to parent to avoid duplicate messages\n setError(buildError(response.card.message || \"\"));\n }\n },\n [onTokenSuccess],\n );\n\n const notCompletedCallback = useCallback((message: string) => {\n setIsProcessing(false);\n setError({\n variant: \"incomplete\",\n title: \"Datos incompletos\",\n message: `Revisa los campos del formulario: ${message}`,\n });\n }, []);\n\n const handlePay = () => {\n if (!pgSdkRef.current) return;\n setError(null);\n setIsProcessing(true);\n pgSdkRef.current.tokenize();\n };\n\n const handleScriptReady = useCallback(() => {\n try {\n const PG = new Function(\"return PaymentGateway\")();\n (window as any).PaymentGateway = PG;\n setSdkReady(true);\n } catch {\n setError({\n variant: \"system\",\n title: \"Error de inicialización\",\n message:\n \"No se pudo inicializar el sistema de pagos. Recarga la página.\",\n });\n }\n }, []);\n\n useEffect(() => {\n if (!sdkReady || sdkInitRef.current) return;\n sdkInitRef.current = true;\n\n const appCode =\n nuveiAppCode ?? process.env.NEXT_PUBLIC_NUVEI_CLIENT_APP_CODE;\n const appKey = nuveiAppKey ?? process.env.NEXT_PUBLIC_NUVEI_CLIENT_APP_KEY;\n\n if (!appCode || !appKey) {\n setError({\n variant: \"system\",\n title: \"Configuración incompleta\",\n message: \"Credenciales de pago no configuradas. Contacta soporte.\",\n });\n return;\n }\n\n const env =\n nuveiEnv ??\n (process.env.NEXT_PUBLIC_NUVEI_ENV === \"prod\" ? \"prod\" : \"stg\");\n const PGClass = (window as any).PaymentGateway;\n\n if (!PGClass) {\n setError({\n variant: \"system\",\n title: \"SDK no disponible\",\n message:\n \"El sistema de pagos no cargó correctamente. Recarga la página.\",\n });\n return;\n }\n\n const pgSdk: PaymentGatewayInstance = new PGClass(env, appCode, appKey);\n pgSdkRef.current = pgSdk;\n\n const resolvedIconColor =\n iconColor ?? readCssVar(\"--color-primary\", \"#3b82f6\");\n const allowedTypes = exclusiveCardTypes ?? [...DEFAULT_EXCLUSIVE_TYPES];\n\n const tokenizeData: TokenizeData = {\n locale: \"es\",\n user: {\n id: uid,\n email: email,\n },\n configuration: {\n default_country: defaultCountry,\n icon_colour: resolvedIconColor,\n use_dropdowns: false,\n exclusive_types: allowedTypes,\n invalid_card_type_message:\n \"Tipo de tarjeta no aceptada para esta operación.\",\n },\n };\n\n pgSdk.generate_tokenize(\n tokenizeData,\n `#${CONTAINER_ID}`,\n responseCallback,\n notCompletedCallback,\n );\n }, [\n sdkReady,\n uid,\n email,\n responseCallback,\n notCompletedCallback,\n nuveiAppCode,\n nuveiAppKey,\n nuveiEnv,\n defaultCountry,\n exclusiveCardTypes,\n iconColor,\n ]);\n\n return (\n <div className=\"space-y-4\">\n <Script\n src={SDK_URL}\n strategy=\"afterInteractive\"\n onReady={handleScriptReady}\n />\n\n {/* Terminal error state — hide form, show only error with clear actions */}\n {error && error.variant !== \"incomplete\" ? (\n <div\n className={`rounded-xl border p-5 text-sm ${\n error.variant === \"duplicate\"\n ? \"bg-[var(--color-primary)]/5 border-[var(--color-primary)]/20\"\n : \"bg-[var(--color-error)]/5 border-[var(--color-error)]/20\"\n }`}\n >\n <div className=\"flex gap-3\">\n <div className=\"shrink-0 mt-0.5\">\n {error.variant === \"duplicate\" ? (\n <FaInfoCircle className=\"w-4 h-4 text-[var(--color-primary)]\" />\n ) : (\n <FaTimesCircle className=\"w-4 h-4 text-[var(--color-error)]\" />\n )}\n </div>\n <div className=\"grow space-y-1\">\n <p className=\"font-semibold text-[var(--color-text-main)]\">\n {error.title}\n </p>\n <p className=\"text-[var(--color-text-main)]/60 leading-relaxed\">\n {error.message}\n </p>\n </div>\n </div>\n <div className=\"flex gap-3 mt-4 pt-3 border-t border-[var(--color-border-subtle)]\">\n {error.variant === \"duplicate\" && error.duplicateToken ? (\n <button\n type=\"button\"\n disabled={isDeletingDuplicate}\n onClick={async () => {\n setIsDeletingDuplicate(true);\n try {\n const res = await fetch(\"/api/nuvei/cards\", {\n method: \"DELETE\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n token: error.duplicateToken,\n }),\n });\n const data = await res.json().catch(() => ({}));\n if (process.env.NODE_ENV !== \"production\") {\n console.log(\n \"[NuveiPaymentForm] Delete response:\",\n res.status,\n JSON.stringify(data),\n );\n }\n if (res.ok && !data.error) {\n setError(null);\n // Re-initialize SDK form so user can add again\n sdkInitRef.current = false;\n setSdkReady(false);\n setTimeout(() => handleScriptReady(), 100);\n } else {\n setError({\n variant: \"rejected\",\n title: \"No se pudo eliminar\",\n message:\n \"El procesador de pagos no permitió eliminar esta tarjeta. Intenta con otra tarjeta o contacta a tu banco.\",\n });\n }\n } catch {\n setError({\n variant: \"system\",\n title: \"Error de conexión\",\n message:\n \"No se pudo conectar al servidor. Intenta de nuevo.\",\n });\n } finally {\n setIsDeletingDuplicate(false);\n }\n }}\n className=\"flex-1 bg-[var(--color-primary)] hover:bg-[var(--color-primary-hover)] text-white font-semibold py-2.5 px-4 rounded-lg transition-colors text-sm cursor-pointer inline-flex items-center justify-center gap-2 disabled:opacity-50\"\n >\n {isDeletingDuplicate ? \"Eliminando...\" : \"Eliminar y reintentar\"}\n </button>\n ) : (\n <button\n type=\"button\"\n onClick={() => {\n setError(null);\n // Clean DOM container and re-initialize SDK form\n const container = document.getElementById(CONTAINER_ID);\n if (container) container.innerHTML = \"\";\n sdkInitRef.current = false;\n setSdkReady(false);\n setTimeout(() => handleScriptReady(), 100);\n }}\n className=\"flex-1 bg-[var(--color-primary)] hover:bg-[var(--color-primary-hover)] text-white font-semibold py-2.5 px-4 rounded-lg transition-colors text-sm cursor-pointer inline-flex items-center justify-center gap-2\"\n >\n <FaRedo className=\"w-3 h-3\" />\n Intentar con otra tarjeta\n </button>\n )}\n </div>\n </div>\n ) : (\n <>\n {/* SDK renders its iframe-based form inside this container.\n Visual styling is in globals.css — the iframe is cross-origin,\n so we can only style the wrapper, not the form inside. */}\n <div id={CONTAINER_ID} className=\"min-h-16\" />\n\n {/* Inline validation errors (incomplete fields, system errors) */}\n {error && (\n <div\n className={`rounded-xl border p-4 text-sm ${\n error.variant === \"incomplete\"\n ? \"bg-[var(--color-warning)]/5 border-[var(--color-warning)]/20\"\n : \"bg-[var(--color-surface-elevated)] border-[var(--color-border-subtle)]\"\n }`}\n >\n <div className=\"flex gap-3\">\n <FaExclamationTriangle\n className={`w-4 h-4 shrink-0 mt-0.5 ${\n error.variant === \"incomplete\"\n ? \"text-[var(--color-warning)]\"\n : \"text-[var(--color-text-main)]/40\"\n }`}\n />\n <div className=\"grow\">\n <p className=\"font-semibold text-[var(--color-text-main)]\">\n {error.title}\n </p>\n <p className=\"text-[var(--color-text-main)]/60 leading-relaxed\">\n {error.message}\n </p>\n </div>\n </div>\n </div>\n )}\n\n {sdkReady && (\n <>\n {showSaveCardCheckbox && (\n <label className=\"flex items-center gap-2.5 cursor-pointer select-none\">\n <input\n type=\"checkbox\"\n checked={saveCard}\n onChange={(e) => setSaveCard(e.target.checked)}\n className=\"w-4 h-4 rounded border-[var(--color-border-default)] text-[var(--color-primary)] focus:ring-[var(--color-primary)]/30 cursor-pointer accent-[var(--color-primary)]\"\n />\n <span className=\"text-sm text-[var(--color-text-main)]/60\">\n Guardar tarjeta para futuras compras\n </span>\n </label>\n )}\n <button\n type=\"button\"\n onClick={handlePay}\n disabled={isProcessing || disabled}\n className=\"w-full bg-[var(--color-primary)] hover:bg-[var(--color-primary-hover)] text-white font-semibold py-3 px-4 rounded-lg transition-all duration-200 disabled:bg-[var(--color-surface-elevated)] disabled:text-[var(--color-text-main)]/30 disabled:cursor-not-allowed flex items-center justify-center gap-2 active:scale-[0.97] cursor-pointer\"\n >\n {isProcessing ? (\n <>\n <div className=\"w-5 h-5 rounded-full border-2 border-white border-b-transparent animate-spin\" />\n {processingLabel}\n </>\n ) : (\n buttonLabel ??\n (saveCard ? \"Agregar Tarjeta\" : \"Continuar con pago\")\n )}\n </button>\n </>\n )}\n </>\n )}\n\n {!sdkReady && (\n <div className=\"flex flex-col items-center py-4 gap-3\">\n <div className=\"w-12 h-12 rounded-full border-2 border-[var(--color-text-main)]/20 border-t-[var(--color-primary)] animate-spin\" />\n {sdkTimedOut && (\n <div className=\"text-center space-y-2\">\n <p className=\"text-xs text-[var(--color-text-main)]/50\">\n El sistema de pagos está tardando en cargar.\n </p>\n <button\n type=\"button\"\n onClick={() => window.location.reload()}\n className=\"text-xs font-semibold text-[var(--color-primary)] hover:text-[var(--color-primary-hover)] underline underline-offset-2 transition-colors\"\n >\n Recargar página\n </button>\n </div>\n )}\n </div>\n )}\n\n {/* Trust indicator */}\n <div className=\"flex items-center justify-center gap-2 text-[var(--color-text-main)]/30 text-xs\">\n <FaLock className=\"w-3 h-3\" />\n <span>Pago 100% seguro · Tokenización PCI Compliant</span>\n </div>\n </div>\n );\n}\n\nexport default NuveiPaymentForm;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pandait.tech/payment-nuvei",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Nuvei Ecuador payment gateway adapter for Next.js: charge handler, webhook, 3DS flow, refunds, tokenized cards, and payment links. Part of panda-commerce-kit.",
5
5
  "license": "MIT",
6
6
  "private": false,