{"version":3,"file":"index.cjs","names":["err","createIconlyError","ok","createIconlyError","ok","err","ok","err","createIconlyError","ok","err","resolveContainer","createIconlyError","insertSvg","ok"],"sources":["../src/fetcher.ts","../src/storage/indexeddb.ts","../src/storage/memory.ts","../src/storage/session.ts","../src/storage/index.ts","../src/core.ts"],"sourcesContent":["import { createIconlyError } from './errors';\nimport { err, ok } from './result';\nimport type { Result } from './types';\n\nexport const fetchSvg = async (file: string, signal?: AbortSignal): Promise<Result<string>> => {\n  try {\n    const response = await fetch(file, { signal });\n\n    if (!response.ok) {\n      return err(createIconlyError('fetch_failed', `Failed to fetch icons from \"${file}\".`));\n    }\n\n    const data = await response.text();\n\n    return ok(data);\n  } catch (error: unknown) {\n    if (error instanceof DOMException && error.name === 'AbortError') {\n      return err(createIconlyError('fetch_aborted', 'Fetch request was aborted.', error));\n    }\n\n    return err(createIconlyError('fetch_failed', 'Failed to fetch icons.', error));\n  }\n};\n","import { createIconlyError } from '../errors';\nimport { err, ok } from '../result';\nimport type { IconlyError, IconRecord, IconStorage, Result } from '../types';\n\ninterface IndexedDbOptions {\n  dbName?: string;\n  storeName?: string;\n}\n\nexport const createIndexedDbStorage = (options: IndexedDbOptions = {}): IconStorage => {\n  const dbName = options.dbName ?? 'iconlyDB';\n  const storeName = options.storeName ?? 'icons';\n\n  let dbPromise: Promise<IDBDatabase> | null = null;\n\n  const requestDb = (version?: number): Promise<IDBDatabase> =>\n    new Promise<IDBDatabase>((resolve, reject) => {\n      const request =\n        version === undefined ? indexedDB.open(dbName) : indexedDB.open(dbName, version);\n\n      request.onerror = (): void => {\n        reject(\n          createIconlyError(\n            'indexeddb_open_failed',\n            'Failed to open IndexedDB connection.',\n            request.error,\n          ),\n        );\n      };\n\n      request.onupgradeneeded = (event): void => {\n        const db = (event.target as IDBOpenDBRequest).result;\n\n        if (!db.objectStoreNames.contains(storeName)) {\n          db.createObjectStore(storeName, { keyPath: 'version' });\n        }\n      };\n\n      request.onsuccess = (): void => {\n        const db = request.result;\n\n        db.onversionchange = (): void => {\n          db.close();\n          dbPromise = null;\n        };\n\n        if (db.objectStoreNames.contains(storeName)) {\n          resolve(db);\n          return;\n        }\n\n        const nextVersion = db.version + 1;\n\n        db.close();\n        requestDb(nextVersion).then(resolve, reject);\n      };\n    });\n\n  const openDb = async (): Promise<IDBDatabase> => {\n    if (!dbPromise) {\n      if (typeof indexedDB === 'undefined') {\n        throw createIconlyError('indexeddb_not_supported', 'IndexedDB is not supported.');\n      }\n\n      dbPromise = requestDb();\n    }\n\n    try {\n      return await dbPromise;\n    } catch (error: unknown) {\n      dbPromise = null;\n      throw error;\n    }\n  };\n\n  const getStore = (db: IDBDatabase, mode: IDBTransactionMode): IDBObjectStore =>\n    db.transaction(storeName, mode).objectStore(storeName);\n\n  const toIconlyError = (\n    error: unknown,\n    fallbackCode: IconlyError['code'],\n    message: string,\n  ): IconlyError => {\n    if (error && typeof error === 'object' && 'code' in error && 'message' in error) {\n      return error as IconlyError;\n    }\n\n    return createIconlyError(fallbackCode, message, error);\n  };\n\n  const get = async (version: string): Promise<Result<IconRecord | undefined>> => {\n    try {\n      const db = await openDb();\n      const store = getStore(db, 'readonly');\n\n      return await new Promise<Result<IconRecord | undefined>>((resolve) => {\n        const request = store.get(version);\n\n        request.onsuccess = (): void => resolve(ok(request.result as IconRecord | undefined));\n        request.onerror = (): void =>\n          resolve(\n            err(\n              createIconlyError(\n                'indexeddb_request_failed',\n                'Failed to read from IndexedDB.',\n                request.error,\n              ),\n            ),\n          );\n      });\n    } catch (error: unknown) {\n      return err(toIconlyError(error, 'indexeddb_open_failed', 'Failed to open IndexedDB.'));\n    }\n  };\n\n  const set = async (record: IconRecord): Promise<Result<void>> => {\n    try {\n      const db = await openDb();\n      const store = getStore(db, 'readwrite');\n\n      return await new Promise<Result<void>>((resolve) => {\n        const request = store.put(record);\n\n        request.onsuccess = (): void => resolve(ok(undefined));\n        request.onerror = (): void =>\n          resolve(\n            err(\n              createIconlyError(\n                'indexeddb_request_failed',\n                'Failed to write to IndexedDB.',\n                request.error,\n              ),\n            ),\n          );\n      });\n    } catch (error: unknown) {\n      return err(createIconlyError('indexeddb_open_failed', 'Failed to open IndexedDB.', error));\n    }\n  };\n\n  return { get, set };\n};\n","import { ok } from '../result';\nimport type { IconRecord, IconStorage, Result } from '../types';\n\nexport const createMemoryStorage = (): IconStorage => {\n  const store = new Map<string, string>();\n\n  const get = async (version: string): Promise<Result<IconRecord | undefined>> => {\n    if (!store.has(version)) {\n      return ok(undefined);\n    }\n\n    return ok({ version, data: store.get(version) ?? '' });\n  };\n\n  const set = async (record: IconRecord): Promise<Result<void>> => {\n    store.set(record.version, record.data);\n\n    return ok(undefined);\n  };\n\n  return { get, set };\n};\n","import { createIconlyError } from '../errors';\nimport { err, ok } from '../result';\nimport type { IconRecord, IconStorage, Result } from '../types';\n\ninterface SessionStorageOptions {\n  keyPrefix?: string;\n}\n\nexport const createSessionStorage = (options: SessionStorageOptions = {}): IconStorage => {\n  const keyPrefix = options.keyPrefix ?? 'iconly';\n\n  const resolveStorage = (): Result<Storage> => {\n    try {\n      if (typeof window === 'undefined' || !window.sessionStorage) {\n        return err(createIconlyError('storage_unavailable', 'SessionStorage is not available.'));\n      }\n\n      return ok(window.sessionStorage);\n    } catch (error: unknown) {\n      return err(\n        createIconlyError('storage_unavailable', 'SessionStorage is not available.', error),\n      );\n    }\n  };\n\n  const get = async (version: string): Promise<Result<IconRecord | undefined>> => {\n    const storageResult = resolveStorage();\n\n    if (!storageResult.ok) {\n      return storageResult;\n    }\n\n    try {\n      const raw = storageResult.value.getItem(`${keyPrefix}:${version}`);\n\n      if (!raw) {\n        return ok(undefined);\n      }\n\n      const parsed = JSON.parse(raw) as IconRecord;\n\n      return ok(parsed);\n    } catch (error: unknown) {\n      return err(\n        createIconlyError('storage_read_failed', 'Failed to read from SessionStorage.', error),\n      );\n    }\n  };\n\n  const set = async (record: IconRecord): Promise<Result<void>> => {\n    const storageResult = resolveStorage();\n\n    if (!storageResult.ok) {\n      return storageResult;\n    }\n\n    try {\n      storageResult.value.setItem(`${keyPrefix}:${record.version}`, JSON.stringify(record));\n\n      return ok(undefined);\n    } catch (error: unknown) {\n      return err(\n        createIconlyError('storage_write_failed', 'Failed to write to SessionStorage.', error),\n      );\n    }\n  };\n\n  return { get, set };\n};\n","import type { IconStorage, StorageStrategy } from '../types';\nimport { createIndexedDbStorage } from './indexeddb';\nimport { createMemoryStorage } from './memory';\nimport { createSessionStorage } from './session';\n\nexport interface StorageFactoryOptions {\n  dbName?: string;\n  storeName?: string;\n  sessionKeyPrefix?: string;\n}\n\nexport const resolveStorage = (\n  strategy: StorageStrategy | undefined,\n  options: StorageFactoryOptions,\n): IconStorage => {\n  if (!strategy || strategy === 'indexeddb') {\n    return createIndexedDbStorage({\n      dbName: options.dbName,\n      storeName: options.storeName,\n    });\n  }\n\n  if (strategy === 'memory') {\n    return createMemoryStorage();\n  }\n\n  if (strategy === 'session') {\n    return createSessionStorage({ keyPrefix: options.sessionKeyPrefix });\n  }\n\n  return strategy;\n};\n","import { insertSvg, resolveContainer } from './dom';\nimport { createIconlyError } from './errors';\nimport { fetchSvg } from './fetcher';\nimport { err, ok } from './result';\nimport { resolveStorage } from './storage';\nimport type { IconlyConfig, IconlyError, IconlyInstance, IconStorage, Result } from './types';\n\ninterface ResolvedIconlyConfig {\n  file: string;\n  version: string;\n  debug: boolean;\n  container?: string | HTMLElement;\n  sanitize?: IconlyConfig['sanitize'];\n  logger?: IconlyConfig['logger'];\n  onError?: IconlyConfig['onError'];\n  onDebug?: IconlyConfig['onDebug'];\n}\n\nconst createCacheKey = (file: string, version: string, baseUrl: string): string => {\n  try {\n    return JSON.stringify([new URL(file, baseUrl).href, version]);\n  } catch {\n    return JSON.stringify([file, version]);\n  }\n};\n\nexport const createIconly = (config: IconlyConfig = {}): IconlyInstance => {\n  const resolved: ResolvedIconlyConfig = {\n    file: config.file ?? './icons.svg',\n    version: config.version ?? '1.0',\n    debug: config.debug ?? false,\n    container: config.container,\n    sanitize: config.sanitize,\n    logger: config.logger,\n    onError: config.onError,\n    onDebug: config.onDebug,\n  };\n\n  const storage: IconStorage = resolveStorage(config.storage, {\n    dbName: config.dbName,\n    storeName: config.storeName,\n    sessionKeyPrefix: config.sessionKeyPrefix,\n  });\n\n  let controller: AbortController | null = null;\n  let inFlight: Promise<Result<void>> | null = null;\n\n  const abort = (): void => {\n    controller?.abort();\n  };\n\n  const logDebug = (...messages: unknown[]): void => {\n    if (!resolved.debug) {\n      return;\n    }\n\n    try {\n      resolved.onDebug?.(...messages);\n    } catch {\n      // User callbacks must not break the Result contract.\n    }\n\n    try {\n      resolved.logger?.debug?.('[Iconly debug]', ...messages);\n    } catch {\n      // User callbacks must not break the Result contract.\n    }\n  };\n\n  const logError = (error: IconlyError): void => {\n    try {\n      resolved.onError?.(error);\n    } catch {\n      // User callbacks must not break the Result contract.\n    }\n\n    try {\n      resolved.logger?.error?.('[Iconly error]', error);\n    } catch {\n      // User callbacks must not break the Result contract.\n    }\n  };\n\n  const fail = (error: IconlyError): Result<void> => {\n    logError(error);\n\n    return err(error);\n  };\n\n  const runInit = async (): Promise<Result<void>> => {\n    try {\n      const containerResult = resolveContainer(resolved.container);\n\n      if (!containerResult.ok) {\n        return fail(containerResult.error);\n      }\n\n      const cacheKey = createCacheKey(\n        resolved.file,\n        resolved.version,\n        containerResult.value.ownerDocument.baseURI,\n      );\n      let cacheAvailable = true;\n      let data: string | undefined;\n\n      try {\n        const cacheResult = await storage.get(cacheKey);\n\n        if (cacheResult.ok) {\n          data = cacheResult.value?.data;\n        } else {\n          cacheAvailable = false;\n          logError(cacheResult.error);\n        }\n      } catch (error: unknown) {\n        cacheAvailable = false;\n        logError(\n          createIconlyError('storage_read_failed', 'Failed to read from icon storage.', error),\n        );\n      }\n\n      if (data) {\n        const insertResult = insertSvg(containerResult.value, data, {\n          sanitize: resolved.sanitize,\n        });\n\n        if (insertResult.ok) {\n          logDebug('Using cached icon set', resolved.version);\n          logDebug('Iconly has successfully initialized.');\n\n          return ok(undefined);\n        }\n\n        if (insertResult.error.cause) {\n          return fail(insertResult.error);\n        }\n\n        logError(insertResult.error);\n      }\n\n      controller = new AbortController();\n\n      const fetchResult = await fetchSvg(resolved.file, controller.signal);\n\n      if (!fetchResult.ok) {\n        return fail(fetchResult.error);\n      }\n\n      const insertResult = insertSvg(containerResult.value, fetchResult.value, {\n        sanitize: resolved.sanitize,\n      });\n\n      if (!insertResult.ok) {\n        return fail(insertResult.error);\n      }\n\n      if (cacheAvailable) {\n        try {\n          const storeResult = await storage.set({\n            version: cacheKey,\n            data: fetchResult.value,\n          });\n\n          if (!storeResult.ok) {\n            logError(storeResult.error);\n          }\n        } catch (error: unknown) {\n          logError(\n            createIconlyError('storage_write_failed', 'Failed to write to icon storage.', error),\n          );\n        }\n      }\n\n      logDebug('Iconly has successfully initialized.');\n\n      return ok(undefined);\n    } catch (error: unknown) {\n      return fail(\n        createIconlyError('unexpected_error', 'Unexpected error while initializing Iconly.', error),\n      );\n    }\n  };\n\n  const init = (): Promise<Result<void>> => {\n    if (!inFlight) {\n      inFlight = runInit().finally(() => {\n        controller = null;\n        inFlight = null;\n      });\n    }\n\n    return inFlight;\n  };\n\n  return { init, abort };\n};\n"],"mappings":";;;;AAIA,MAAa,WAAW,OAAO,MAAc,WAAkD;CAC7F,IAAI;EACF,MAAM,WAAW,MAAM,MAAM,MAAM,EAAE,OAAO,CAAC;EAE7C,IAAI,CAAC,SAAS,IACZ,OAAOA,gBAAIC,8BAAkB,gBAAgB,+BAA+B,KAAK,GAAG,CAAC;EAKvF,OAAOC,eAAG,MAFS,SAAS,KAAK,CAEnB;CAChB,SAAS,OAAgB;EACvB,IAAI,iBAAiB,gBAAgB,MAAM,SAAS,cAClD,OAAOF,gBAAIC,8BAAkB,iBAAiB,8BAA8B,KAAK,CAAC;EAGpF,OAAOD,gBAAIC,8BAAkB,gBAAgB,0BAA0B,KAAK,CAAC;CAC/E;AACF;;;;ACbA,MAAa,0BAA0B,UAA4B,CAAC,MAAmB;CACrF,MAAM,SAAS,QAAQ,UAAU;CACjC,MAAM,YAAY,QAAQ,aAAa;CAEvC,IAAI,YAAyC;CAE7C,MAAM,aAAa,YACjB,IAAI,SAAsB,SAAS,WAAW;EAC5C,MAAM,UACJ,YAAY,SAAY,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,QAAQ,OAAO;EAEjF,QAAQ,gBAAsB;GAC5B,OACEE,8BACE,yBACA,wCACA,QAAQ,KACV,CACF;EACF;EAEA,QAAQ,mBAAmB,UAAgB;GACzC,MAAM,KAAM,MAAM,OAA4B;GAE9C,IAAI,CAAC,GAAG,iBAAiB,SAAS,SAAS,GACzC,GAAG,kBAAkB,WAAW,EAAE,SAAS,UAAU,CAAC;EAE1D;EAEA,QAAQ,kBAAwB;GAC9B,MAAM,KAAK,QAAQ;GAEnB,GAAG,wBAA8B;IAC/B,GAAG,MAAM;IACT,YAAY;GACd;GAEA,IAAI,GAAG,iBAAiB,SAAS,SAAS,GAAG;IAC3C,QAAQ,EAAE;IACV;GACF;GAEA,MAAM,cAAc,GAAG,UAAU;GAEjC,GAAG,MAAM;GACT,UAAU,WAAW,CAAC,CAAC,KAAK,SAAS,MAAM;EAC7C;CACF,CAAC;CAEH,MAAM,SAAS,YAAkC;EAC/C,IAAI,CAAC,WAAW;GACd,IAAI,OAAO,cAAc,aACvB,MAAMA,8BAAkB,2BAA2B,6BAA6B;GAGlF,YAAY,UAAU;EACxB;EAEA,IAAI;GACF,OAAO,MAAM;EACf,SAAS,OAAgB;GACvB,YAAY;GACZ,MAAM;EACR;CACF;CAEA,MAAM,YAAY,IAAiB,SACjC,GAAG,YAAY,WAAW,IAAI,CAAC,CAAC,YAAY,SAAS;CAEvD,MAAM,iBACJ,OACA,cACA,YACgB;EAChB,IAAI,SAAS,OAAO,UAAU,YAAY,UAAU,SAAS,aAAa,OACxE,OAAO;EAGT,OAAOA,8BAAkB,cAAc,SAAS,KAAK;CACvD;CAEA,MAAM,MAAM,OAAO,YAA6D;EAC9E,IAAI;GAEF,MAAM,QAAQ,SAAS,MADN,OAAO,GACG,UAAU;GAErC,OAAO,MAAM,IAAI,SAAyC,YAAY;IACpE,MAAM,UAAU,MAAM,IAAI,OAAO;IAEjC,QAAQ,kBAAwB,QAAQC,eAAG,QAAQ,MAAgC,CAAC;IACpF,QAAQ,gBACN,QACEC,gBACEF,8BACE,4BACA,kCACA,QAAQ,KACV,CACF,CACF;GACJ,CAAC;EACH,SAAS,OAAgB;GACvB,OAAOE,gBAAI,cAAc,OAAO,yBAAyB,2BAA2B,CAAC;EACvF;CACF;CAEA,MAAM,MAAM,OAAO,WAA8C;EAC/D,IAAI;GAEF,MAAM,QAAQ,SAAS,MADN,OAAO,GACG,WAAW;GAEtC,OAAO,MAAM,IAAI,SAAuB,YAAY;IAClD,MAAM,UAAU,MAAM,IAAI,MAAM;IAEhC,QAAQ,kBAAwB,QAAQD,eAAG,MAAS,CAAC;IACrD,QAAQ,gBACN,QACEC,gBACEF,8BACE,4BACA,iCACA,QAAQ,KACV,CACF,CACF;GACJ,CAAC;EACH,SAAS,OAAgB;GACvB,OAAOE,gBAAIF,8BAAkB,yBAAyB,6BAA6B,KAAK,CAAC;EAC3F;CACF;CAEA,OAAO;EAAE;EAAK;CAAI;AACpB;;;;AC1IA,MAAa,4BAAyC;CACpD,MAAM,wBAAQ,IAAI,IAAoB;CAEtC,MAAM,MAAM,OAAO,YAA6D;EAC9E,IAAI,CAAC,MAAM,IAAI,OAAO,GACpB,OAAOG,eAAG,MAAS;EAGrB,OAAOA,eAAG;GAAE;GAAS,MAAM,MAAM,IAAI,OAAO,KAAK;EAAG,CAAC;CACvD;CAEA,MAAM,MAAM,OAAO,WAA8C;EAC/D,MAAM,IAAI,OAAO,SAAS,OAAO,IAAI;EAErC,OAAOA,eAAG,MAAS;CACrB;CAEA,OAAO;EAAE;EAAK;CAAI;AACpB;;;;ACbA,MAAa,wBAAwB,UAAiC,CAAC,MAAmB;CACxF,MAAM,YAAY,QAAQ,aAAa;CAEvC,MAAM,uBAAwC;EAC5C,IAAI;GACF,IAAI,OAAO,WAAW,eAAe,CAAC,OAAO,gBAC3C,OAAOC,gBAAIC,8BAAkB,uBAAuB,kCAAkC,CAAC;GAGzF,OAAOC,eAAG,OAAO,cAAc;EACjC,SAAS,OAAgB;GACvB,OAAOF,gBACLC,8BAAkB,uBAAuB,oCAAoC,KAAK,CACpF;EACF;CACF;CAEA,MAAM,MAAM,OAAO,YAA6D;EAC9E,MAAM,gBAAgB,eAAe;EAErC,IAAI,CAAC,cAAc,IACjB,OAAO;EAGT,IAAI;GACF,MAAM,MAAM,cAAc,MAAM,QAAQ,GAAG,UAAU,GAAG,SAAS;GAEjE,IAAI,CAAC,KACH,OAAOC,eAAG,MAAS;GAKrB,OAAOA,eAFQ,KAAK,MAAM,GAEX,CAAC;EAClB,SAAS,OAAgB;GACvB,OAAOF,gBACLC,8BAAkB,uBAAuB,uCAAuC,KAAK,CACvF;EACF;CACF;CAEA,MAAM,MAAM,OAAO,WAA8C;EAC/D,MAAM,gBAAgB,eAAe;EAErC,IAAI,CAAC,cAAc,IACjB,OAAO;EAGT,IAAI;GACF,cAAc,MAAM,QAAQ,GAAG,UAAU,GAAG,OAAO,WAAW,KAAK,UAAU,MAAM,CAAC;GAEpF,OAAOC,eAAG,MAAS;EACrB,SAAS,OAAgB;GACvB,OAAOF,gBACLC,8BAAkB,wBAAwB,sCAAsC,KAAK,CACvF;EACF;CACF;CAEA,OAAO;EAAE;EAAK;CAAI;AACpB;;;;ACzDA,MAAa,kBACX,UACA,YACgB;CAChB,IAAI,CAAC,YAAY,aAAa,aAC5B,OAAO,uBAAuB;EAC5B,QAAQ,QAAQ;EAChB,WAAW,QAAQ;CACrB,CAAC;CAGH,IAAI,aAAa,UACf,OAAO,oBAAoB;CAG7B,IAAI,aAAa,WACf,OAAO,qBAAqB,EAAE,WAAW,QAAQ,iBAAiB,CAAC;CAGrE,OAAO;AACT;;;;ACbA,MAAM,kBAAkB,MAAc,SAAiB,YAA4B;CACjF,IAAI;EACF,OAAO,KAAK,UAAU,CAAC,IAAI,IAAI,MAAM,OAAO,CAAC,CAAC,MAAM,OAAO,CAAC;CAC9D,QAAQ;EACN,OAAO,KAAK,UAAU,CAAC,MAAM,OAAO,CAAC;CACvC;AACF;AAEA,MAAa,gBAAgB,SAAuB,CAAC,MAAsB;CACzE,MAAM,WAAiC;EACrC,MAAM,OAAO,QAAQ;EACrB,SAAS,OAAO,WAAW;EAC3B,OAAO,OAAO,SAAS;EACvB,WAAW,OAAO;EAClB,UAAU,OAAO;EACjB,QAAQ,OAAO;EACf,SAAS,OAAO;EAChB,SAAS,OAAO;CAClB;CAEA,MAAM,UAAuB,eAAe,OAAO,SAAS;EAC1D,QAAQ,OAAO;EACf,WAAW,OAAO;EAClB,kBAAkB,OAAO;CAC3B,CAAC;CAED,IAAI,aAAqC;CACzC,IAAI,WAAyC;CAE7C,MAAM,cAAoB;EACxB,YAAY,MAAM;CACpB;CAEA,MAAM,YAAY,GAAG,aAA8B;EACjD,IAAI,CAAC,SAAS,OACZ;EAGF,IAAI;GACF,SAAS,UAAU,GAAG,QAAQ;EAChC,QAAQ,CAER;EAEA,IAAI;GACF,SAAS,QAAQ,QAAQ,kBAAkB,GAAG,QAAQ;EACxD,QAAQ,CAER;CACF;CAEA,MAAM,YAAY,UAA6B;EAC7C,IAAI;GACF,SAAS,UAAU,KAAK;EAC1B,QAAQ,CAER;EAEA,IAAI;GACF,SAAS,QAAQ,QAAQ,kBAAkB,KAAK;EAClD,QAAQ,CAER;CACF;CAEA,MAAM,QAAQ,UAAqC;EACjD,SAAS,KAAK;EAEd,OAAOE,gBAAI,KAAK;CAClB;CAEA,MAAM,UAAU,YAAmC;EACjD,IAAI;GACF,MAAM,kBAAkBC,6BAAiB,SAAS,SAAS;GAE3D,IAAI,CAAC,gBAAgB,IACnB,OAAO,KAAK,gBAAgB,KAAK;GAGnC,MAAM,WAAW,eACf,SAAS,MACT,SAAS,SACT,gBAAgB,MAAM,cAAc,OACtC;GACA,IAAI,iBAAiB;GACrB,IAAI;GAEJ,IAAI;IACF,MAAM,cAAc,MAAM,QAAQ,IAAI,QAAQ;IAE9C,IAAI,YAAY,IACd,OAAO,YAAY,OAAO;SACrB;KACL,iBAAiB;KACjB,SAAS,YAAY,KAAK;IAC5B;GACF,SAAS,OAAgB;IACvB,iBAAiB;IACjB,SACEC,8BAAkB,uBAAuB,qCAAqC,KAAK,CACrF;GACF;GAEA,IAAI,MAAM;IACR,MAAM,eAAeC,sBAAU,gBAAgB,OAAO,MAAM,EAC1D,UAAU,SAAS,SACrB,CAAC;IAED,IAAI,aAAa,IAAI;KACnB,SAAS,yBAAyB,SAAS,OAAO;KAClD,SAAS,sCAAsC;KAE/C,OAAOC,eAAG,MAAS;IACrB;IAEA,IAAI,aAAa,MAAM,OACrB,OAAO,KAAK,aAAa,KAAK;IAGhC,SAAS,aAAa,KAAK;GAC7B;GAEA,aAAa,IAAI,gBAAgB;GAEjC,MAAM,cAAc,MAAM,SAAS,SAAS,MAAM,WAAW,MAAM;GAEnE,IAAI,CAAC,YAAY,IACf,OAAO,KAAK,YAAY,KAAK;GAG/B,MAAM,eAAeD,sBAAU,gBAAgB,OAAO,YAAY,OAAO,EACvE,UAAU,SAAS,SACrB,CAAC;GAED,IAAI,CAAC,aAAa,IAChB,OAAO,KAAK,aAAa,KAAK;GAGhC,IAAI,gBACF,IAAI;IACF,MAAM,cAAc,MAAM,QAAQ,IAAI;KACpC,SAAS;KACT,MAAM,YAAY;IACpB,CAAC;IAED,IAAI,CAAC,YAAY,IACf,SAAS,YAAY,KAAK;GAE9B,SAAS,OAAgB;IACvB,SACED,8BAAkB,wBAAwB,oCAAoC,KAAK,CACrF;GACF;GAGF,SAAS,sCAAsC;GAE/C,OAAOE,eAAG,MAAS;EACrB,SAAS,OAAgB;GACvB,OAAO,KACLF,8BAAkB,oBAAoB,+CAA+C,KAAK,CAC5F;EACF;CACF;CAEA,MAAM,aAAoC;EACxC,IAAI,CAAC,UACH,WAAW,QAAQ,CAAC,CAAC,cAAc;GACjC,aAAa;GACb,WAAW;EACb,CAAC;EAGH,OAAO;CACT;CAEA,OAAO;EAAE;EAAM;CAAM;AACvB"}