{"version":3,"file":"index.browser-D9Oh3nWA.cjs","sources":["../src/lib/pdfium/helper.ts","../src/lib/pdfium/types/branded.ts","../src/lib/pdfium/cache.ts","../src/lib/pdfium/constants/limits.ts","../src/lib/pdfium/core/memory-manager.ts","../src/lib/pdfium/engine.ts","../../pdfium/dist/index.browser.js"],"sourcesContent":["import { Matrix, Rotation, Rect, Size } from '@kopjra/embedpdf-models';\nimport { PdfiumRuntimeMethods, PdfiumModule } from '@kopjra/embedpdf-pdfium';\n\n/**\n * Read string from WASM heap\n * @param wasmModule - pdfium wasm module instance\n * @param readChars - function to read chars\n * @param parseChars - function to parse chars\n * @param defaultLength - default length of chars that needs to read\n * @returns string from the heap\n *\n * @public\n */\nexport function readString(\n  wasmModule: PdfiumRuntimeMethods & PdfiumModule,\n  readChars: (buffer: number, bufferLength: number) => number,\n  parseChars: (buffer: number) => string,\n  defaultLength: number = 100,\n): string {\n  let buffer = wasmModule.wasmExports.malloc(defaultLength);\n  for (let i = 0; i < defaultLength; i++) {\n    wasmModule.HEAP8[buffer + i] = 0;\n  }\n  const actualLength = readChars(buffer, defaultLength);\n  let str: string;\n  if (actualLength > defaultLength) {\n    wasmModule.wasmExports.free(buffer);\n    buffer = wasmModule.wasmExports.malloc(actualLength);\n    for (let i = 0; i < actualLength; i++) {\n      wasmModule.HEAP8[buffer + i] = 0;\n    }\n    readChars(buffer, actualLength);\n    str = parseChars(buffer);\n  } else {\n    str = parseChars(buffer);\n  }\n  wasmModule.wasmExports.free(buffer);\n\n  return str;\n}\n/**\n * Read arraybyffer from WASM heap\n * @param wasmModule - pdfium wasm module instance\n * @param readChars - function to read chars\n * @returns arraybuffer from the heap\n *\n * @public\n */\nexport function readArrayBuffer(\n  wasmModule: PdfiumRuntimeMethods & PdfiumModule,\n  readChars: (buffer: number, bufferLength: number) => number,\n): ArrayBuffer {\n  const bufferSize = readChars(0, 0);\n\n  const bufferPtr = wasmModule.wasmExports.malloc(bufferSize);\n\n  readChars(bufferPtr, bufferSize);\n\n  const arrayBuffer = new ArrayBuffer(bufferSize);\n  const view = new DataView(arrayBuffer);\n\n  for (let i = 0; i < bufferSize; i++) {\n    view.setInt8(i, wasmModule.getValue(bufferPtr + i, 'i8'));\n  }\n\n  wasmModule.wasmExports.free(bufferPtr);\n\n  return arrayBuffer;\n}\n\nconst RESERVED_INFO_KEYS = new Set([\n  'Title',\n  'Author',\n  'Subject',\n  'Keywords',\n  'Producer',\n  'Creator',\n  'CreationDate',\n  'ModDate',\n  'Trapped',\n]);\n\nexport function isValidCustomKey(key: string): boolean {\n  // PDF Name object rules are looser than strings here, but keep it sane:\n  // - non-empty ASCII, no embedded NULs, avoid leading slash\n  if (!key || key.length > 127) return false;\n  if (RESERVED_INFO_KEYS.has(key)) return false;\n  if (key[0] === '/') return false;\n  // Keep ASCII-ish to avoid surprises; relax if you need.\n  for (let i = 0; i < key.length; i++) {\n    const c = key.charCodeAt(i);\n    if (c < 0x20 || c > 0x7e) return false;\n  }\n  return true;\n}\n\ninterface FormDrawParams {\n  startX: number;\n  startY: number;\n  formsWidth: number;\n  formsHeight: number;\n  scaleX: number;\n  scaleY: number;\n}\n\nexport function computeFormDrawParams(\n  matrix: Matrix,\n  rect: Rect,\n  pageSize: Size,\n  rotation: Rotation,\n): FormDrawParams {\n  const rectLeft = rect.origin.x;\n  const rectBottom = rect.origin.y;\n  const rectRight = rectLeft + rect.size.width;\n  const rectTop = rectBottom + rect.size.height;\n  const pageWidth = pageSize.width;\n  const pageHeight = pageSize.height;\n\n  // Extract the per-axis scale that the render matrix applies.\n  const scaleX = Math.hypot(matrix.a, matrix.b);\n  const scaleY = Math.hypot(matrix.c, matrix.d);\n  const swap = (rotation & 1) === 1;\n\n  const formsWidth = swap\n    ? Math.max(1, Math.round(pageHeight * scaleX))\n    : Math.max(1, Math.round(pageWidth * scaleX));\n  const formsHeight = swap\n    ? Math.max(1, Math.round(pageWidth * scaleY))\n    : Math.max(1, Math.round(pageHeight * scaleY));\n\n  let startX: number;\n  let startY: number;\n  switch (rotation) {\n    case Rotation.Degree0:\n      startX = -Math.round(rectLeft * scaleX);\n      startY = -Math.round(rectBottom * scaleY);\n      break;\n    case Rotation.Degree90:\n      startX = Math.round((rectTop - pageHeight) * scaleX);\n      startY = -Math.round(rectLeft * scaleY);\n      break;\n    case Rotation.Degree180:\n      startX = Math.round((rectRight - pageWidth) * scaleX);\n      startY = Math.round((rectTop - pageHeight) * scaleY);\n      break;\n    case Rotation.Degree270:\n      startX = -Math.round(rectBottom * scaleX);\n      startY = Math.round((rectRight - pageWidth) * scaleY);\n      break;\n    default:\n      startX = -Math.round(rectLeft * scaleX);\n      startY = -Math.round(rectBottom * scaleY);\n      break;\n  }\n\n  return { startX, startY, formsWidth, formsHeight, scaleX, scaleY };\n}\n","/**\n * Branded types for better type safety\n * @public\n */\n\ndeclare const PointerBrand: unique symbol;\n\nexport type WasmPointer = number & { [PointerBrand]: never };\n\n// Helper functions to create branded types\nexport const WasmPointer = (ptr: number): WasmPointer => ptr as WasmPointer;\n","import { WrappedPdfiumModule } from '@kopjra/embedpdf-pdfium';\nimport { MemoryManager } from './core/memory-manager';\nimport { WasmPointer } from './types/branded';\n\nexport interface CacheConfig {\n  /** Time-to-live for pages in milliseconds (default: 5000ms) */\n  pageTtl?: number;\n  /** Maximum number of pages to keep in cache per document (default: 50) */\n  maxPagesPerDocument?: number;\n}\n\nconst DEFAULT_CONFIG: Required<CacheConfig> = {\n  pageTtl: 5000, // 5 seconds\n  maxPagesPerDocument: 10,\n};\n\nexport class PdfCache {\n  private readonly docs = new Map<string, DocumentContext>();\n  private readonly config: Required<CacheConfig>;\n\n  constructor(\n    private readonly pdfium: WrappedPdfiumModule,\n    private readonly memoryManager: MemoryManager,\n    config: CacheConfig = {},\n  ) {\n    this.config = { ...DEFAULT_CONFIG, ...config };\n  }\n\n  /** Open (or re-use) a document */\n  setDocument(id: string, filePtr: number, docPtr: number) {\n    let ctx = this.docs.get(id);\n    if (!ctx) {\n      ctx = new DocumentContext(filePtr, docPtr, this.pdfium, this.memoryManager, this.config);\n      this.docs.set(id, ctx);\n    }\n  }\n\n  /** Retrieve the DocumentContext for a given PdfDocumentObject */\n  getContext(docId: string): DocumentContext | undefined {\n    return this.docs.get(docId);\n  }\n\n  /** Close & fully release a document and all its pages */\n  closeDocument(docId: string): boolean {\n    const ctx = this.docs.get(docId);\n    if (!ctx) return false;\n    ctx.dispose(); // tears down pages first, then FPDF_CloseDocument, free()\n    this.docs.delete(docId);\n    return true;\n  }\n\n  /** Close all documents */\n  closeAllDocuments(): void {\n    for (const ctx of this.docs.values()) {\n      ctx.dispose();\n    }\n    this.docs.clear();\n  }\n\n  /** Update cache configuration for all existing documents */\n  updateConfig(newConfig: CacheConfig): void {\n    Object.assign(this.config, newConfig);\n    // Update config for all existing document contexts\n    for (const ctx of this.docs.values()) {\n      ctx.updateConfig(this.config);\n    }\n  }\n\n  /** Get current cache statistics */\n  getCacheStats(): {\n    documents: number;\n    totalPages: number;\n    pagesByDocument: Record<string, number>;\n  } {\n    const pagesByDocument: Record<string, number> = {};\n    let totalPages = 0;\n\n    for (const [docId, ctx] of this.docs.entries()) {\n      const pageCount = ctx.getCacheSize();\n      pagesByDocument[docId] = pageCount;\n      totalPages += pageCount;\n    }\n\n    return {\n      documents: this.docs.size,\n      totalPages,\n      pagesByDocument,\n    };\n  }\n}\n\nexport class DocumentContext {\n  private readonly pageCache: PageCache;\n\n  constructor(\n    public readonly filePtr: number,\n    public readonly docPtr: number,\n    pdfium: WrappedPdfiumModule,\n    private readonly memoryManager: MemoryManager,\n    config: Required<CacheConfig>,\n  ) {\n    this.pageCache = new PageCache(pdfium, docPtr, config);\n  }\n\n  /** Main accessor for pages */\n  acquirePage(pageIdx: number): PageContext {\n    return this.pageCache.acquire(pageIdx);\n  }\n\n  /** Scoped accessor for one-off / bulk operations */\n  borrowPage<T>(pageIdx: number, fn: (ctx: PageContext) => T): T {\n    return this.pageCache.borrowPage(pageIdx, fn);\n  }\n\n  /** Update cache configuration */\n  updateConfig(config: Required<CacheConfig>): void {\n    this.pageCache.updateConfig(config);\n  }\n\n  /** Get number of pages currently in cache */\n  getCacheSize(): number {\n    return this.pageCache.size();\n  }\n\n  /** Tear down all pages + this document */\n  dispose(): void {\n    // 1️⃣ release all pages (with their TTL or immediate)\n    this.pageCache.forceReleaseAll();\n\n    // 2️⃣ close the PDFium document\n    this.pageCache.pdf.FPDF_CloseDocument(this.docPtr);\n\n    // 3️⃣ free the file handle through memory manager for proper tracking\n    this.memoryManager.free(WasmPointer(this.filePtr));\n  }\n}\n\nexport class PageCache {\n  private readonly cache = new Map<number, PageContext>();\n  private readonly accessOrder: number[] = []; // LRU tracking\n  private config: Required<CacheConfig>;\n\n  constructor(\n    public readonly pdf: WrappedPdfiumModule,\n    private readonly docPtr: number,\n    config: Required<CacheConfig>,\n  ) {\n    this.config = config;\n  }\n\n  acquire(pageIdx: number): PageContext {\n    let ctx = this.cache.get(pageIdx);\n\n    if (!ctx) {\n      // Ensure we don't exceed max cache size\n      this.evictIfNeeded();\n\n      const pagePtr = this.pdf.FPDF_LoadPage(this.docPtr, pageIdx);\n      ctx = new PageContext(this.pdf, this.docPtr, pageIdx, pagePtr, this.config.pageTtl, () => {\n        this.cache.delete(pageIdx);\n        this.removeFromAccessOrder(pageIdx);\n      });\n      this.cache.set(pageIdx, ctx);\n    }\n\n    // Update LRU order\n    this.updateAccessOrder(pageIdx);\n\n    ctx.clearExpiryTimer(); // cancel any pending teardown\n    ctx.bumpRefCount(); // bump ref‐count\n    return ctx;\n  }\n\n  /** Helper: run a function \"scoped\" to a page.\n   *    – if the page was already cached  → .release() (keeps TTL logic)\n   *    – if the page was loaded just now → .disposeImmediate() (free right away)\n   */\n  borrowPage<T>(pageIdx: number, fn: (ctx: PageContext) => T): T {\n    const existed = this.cache.has(pageIdx);\n    const ctx = this.acquire(pageIdx);\n    try {\n      return fn(ctx);\n    } finally {\n      existed ? ctx.release() : ctx.disposeImmediate();\n    }\n  }\n\n  forceReleaseAll(): void {\n    for (const ctx of this.cache.values()) {\n      ctx.disposeImmediate();\n    }\n    this.cache.clear();\n    this.accessOrder.length = 0;\n  }\n\n  /** Update cache configuration */\n  updateConfig(config: Required<CacheConfig>): void {\n    this.config = config;\n\n    // Update TTL for all existing pages\n    for (const ctx of this.cache.values()) {\n      ctx.updateTtl(config.pageTtl);\n    }\n\n    // Evict pages if new max size is smaller\n    this.evictIfNeeded();\n  }\n\n  /** Get current cache size */\n  size(): number {\n    return this.cache.size;\n  }\n\n  /** Evict least recently used pages if cache exceeds max size */\n  private evictIfNeeded(): void {\n    while (this.cache.size >= this.config.maxPagesPerDocument) {\n      const lruPageIdx = this.accessOrder[0];\n      if (lruPageIdx !== undefined) {\n        const ctx = this.cache.get(lruPageIdx);\n        if (ctx) {\n          // Only evict if not currently in use (refCount === 0)\n          if (ctx.getRefCount() === 0) {\n            ctx.disposeImmediate();\n            // onFinalDispose callback will remove from cache and accessOrder\n          } else {\n            // If the LRU page is in use, we can't evict it\n            // Move to a different strategy or break to avoid infinite loop\n            break;\n          }\n        } else {\n          // Page not in cache but in access order - clean up\n          this.removeFromAccessOrder(lruPageIdx);\n        }\n      } else {\n        break;\n      }\n    }\n  }\n\n  /** Update the access order for LRU tracking */\n  private updateAccessOrder(pageIdx: number): void {\n    // Remove from current position\n    this.removeFromAccessOrder(pageIdx);\n    // Add to end (most recently used)\n    this.accessOrder.push(pageIdx);\n  }\n\n  /** Remove a page from the access order array */\n  private removeFromAccessOrder(pageIdx: number): void {\n    const index = this.accessOrder.indexOf(pageIdx);\n    if (index > -1) {\n      this.accessOrder.splice(index, 1);\n    }\n  }\n}\n\nexport class PageContext {\n  private refCount = 0;\n  private expiryTimer?: ReturnType<typeof setTimeout>;\n  private disposed = false;\n  private ttl: number;\n\n  // lazy helpers\n  private textPagePtr?: number;\n  private formInfoPtr?: number;\n  private formHandle?: number;\n\n  constructor(\n    private readonly pdf: WrappedPdfiumModule,\n    public readonly docPtr: number,\n    public readonly pageIdx: number,\n    public readonly pagePtr: number,\n    ttl: number,\n    private readonly onFinalDispose: () => void,\n  ) {\n    this.ttl = ttl;\n  }\n\n  /** Called by PageCache.acquire() */\n  bumpRefCount() {\n    if (this.disposed) throw new Error('Context already disposed');\n    this.refCount++;\n  }\n\n  /** Get current reference count */\n  getRefCount(): number {\n    return this.refCount;\n  }\n\n  /** Called by PageCache.acquire() */\n  clearExpiryTimer() {\n    if (this.expiryTimer) {\n      clearTimeout(this.expiryTimer);\n      this.expiryTimer = undefined;\n    }\n  }\n\n  /** Update TTL configuration */\n  updateTtl(newTtl: number): void {\n    this.ttl = newTtl;\n    // If there's an active timer and ref count is 0, restart with new TTL\n    if (this.expiryTimer && this.refCount === 0) {\n      this.clearExpiryTimer();\n      this.expiryTimer = setTimeout(() => this.disposeImmediate(), this.ttl);\n    }\n  }\n\n  /** Called by PageCache.release() internally */\n  release() {\n    if (this.disposed) return;\n    this.refCount--;\n    if (this.refCount === 0) {\n      // schedule the one-and-only timer for the page\n      this.expiryTimer = setTimeout(() => this.disposeImmediate(), this.ttl);\n    }\n  }\n\n  /** Tear down _all_ sub-pointers & the page. */\n  disposeImmediate() {\n    if (this.disposed) return;\n    this.disposed = true;\n\n    // Clear any pending timer\n    this.clearExpiryTimer();\n\n    // 2️⃣ close text-page if opened\n    if (this.textPagePtr !== undefined) {\n      this.pdf.FPDFText_ClosePage(this.textPagePtr);\n    }\n\n    // 3️⃣ close form-fill if opened\n    if (this.formHandle !== undefined) {\n      this.pdf.FORM_OnBeforeClosePage(this.pagePtr, this.formHandle);\n      this.pdf.PDFiumExt_ExitFormFillEnvironment(this.formHandle);\n    }\n    if (this.formInfoPtr !== undefined) {\n      this.pdf.PDFiumExt_CloseFormFillInfo(this.formInfoPtr);\n    }\n\n    // 4️⃣ finally close the page itself\n    this.pdf.FPDF_ClosePage(this.pagePtr);\n\n    // 5️⃣ remove from the cache\n    this.onFinalDispose();\n  }\n\n  // ── public helpers ──\n\n  /** Always safe: opens (once) and returns the text-page ptr. */\n  getTextPage(): number {\n    this.ensureAlive();\n    if (this.textPagePtr === undefined) {\n      this.textPagePtr = this.pdf.FPDFText_LoadPage(this.pagePtr);\n    }\n    return this.textPagePtr;\n  }\n\n  /** Always safe: opens (once) and returns the form-fill handle. */\n  getFormHandle(): number {\n    this.ensureAlive();\n    if (this.formHandle === undefined) {\n      this.formInfoPtr = this.pdf.PDFiumExt_OpenFormFillInfo();\n      this.formHandle = this.pdf.PDFiumExt_InitFormFillEnvironment(this.docPtr, this.formInfoPtr);\n      this.pdf.FORM_OnAfterLoadPage(this.pagePtr, this.formHandle);\n    }\n    return this.formHandle;\n  }\n\n  /**\n   * Safely execute `fn` with an annotation pointer.\n   * Pointer is ALWAYS closed afterwards.\n   */\n  withAnnotation<T>(annotIdx: number, fn: (annotPtr: number) => T): T {\n    this.ensureAlive();\n    const annotPtr = this.pdf.FPDFPage_GetAnnot(this.pagePtr, annotIdx);\n    try {\n      return fn(annotPtr);\n    } finally {\n      this.pdf.FPDFPage_CloseAnnot(annotPtr);\n    }\n  }\n\n  private ensureAlive() {\n    if (this.disposed) throw new Error('PageContext already disposed');\n  }\n}\n","/**\n * System limits and safety thresholds for PDFium engine operations\n *\n * These limits are designed to prevent:\n * - Memory exhaustion\n * - Browser crashes\n * - DoS attacks\n * - WASM heap overflow\n * - Unreasonable resource usage\n *\n * @module constants/limits\n */\n\n/**\n * Memory allocation limits\n */\nexport const MEMORY_LIMITS = {\n  /** Maximum total memory that can be allocated (2GB) */\n  MAX_TOTAL_MEMORY: 2 * 1024 * 1024 * 1024,\n} as const;\n\n/**\n * All limits combined for easy access\n */\nexport const LIMITS = {\n  MEMORY: MEMORY_LIMITS,\n} as const;\n\nexport type Limits = typeof LIMITS;\n","import { WasmPointer } from '../types/branded';\nimport { LIMITS } from '../constants/limits';\nimport type { WrappedPdfiumModule } from '@kopjra/embedpdf-pdfium';\nimport { Logger } from '@kopjra/embedpdf-models';\n\nconst LOG_SOURCE = 'PDFiumEngine';\nconst LOG_CATEGORY = 'MemoryManager';\n\ninterface Allocation {\n  ptr: WasmPointer;\n  size: number;\n  timestamp: number;\n  stack?: string;\n}\n\nexport class MemoryManager {\n  private allocations = new Map<number, Allocation>();\n  private totalAllocated = 0;\n\n  constructor(\n    private pdfiumModule: WrappedPdfiumModule,\n    private logger: Logger,\n  ) {}\n\n  /**\n   * Allocate memory with tracking and validation\n   */\n  malloc(size: number): WasmPointer {\n    // Check total memory usage\n    if (this.totalAllocated + size > LIMITS.MEMORY.MAX_TOTAL_MEMORY) {\n      throw new Error(\n        `Total memory usage would exceed limit: ` +\n          `${this.totalAllocated + size} > ${LIMITS.MEMORY.MAX_TOTAL_MEMORY}`,\n      );\n    }\n\n    const ptr = this.pdfiumModule.pdfium.wasmExports.malloc(size);\n\n    if (!ptr) {\n      throw new Error(`Failed to allocate ${size} bytes`);\n    }\n\n    // Track allocation\n    const allocation: Allocation = {\n      ptr: WasmPointer(ptr),\n      size,\n      timestamp: Date.now(),\n      stack: this.logger.isEnabled('debug') ? new Error().stack : undefined,\n    };\n\n    this.allocations.set(ptr, allocation);\n    this.totalAllocated += size;\n\n    return WasmPointer(ptr);\n  }\n\n  /**\n   * Free memory with validation\n   */\n  free(ptr: WasmPointer): void {\n    const allocation = this.allocations.get(ptr);\n    if (!allocation) {\n      this.logger.warn(LOG_SOURCE, LOG_CATEGORY, `Freeing untracked pointer: ${ptr}`);\n    } else {\n      this.totalAllocated -= allocation.size;\n      this.allocations.delete(ptr);\n    }\n\n    this.pdfiumModule.pdfium.wasmExports.free(ptr);\n  }\n\n  /**\n   * Get memory statistics\n   */\n  getStats() {\n    return {\n      totalAllocated: this.totalAllocated,\n      allocationCount: this.allocations.size,\n      allocations: this.logger.isEnabled('debug') ? Array.from(this.allocations.values()) : [],\n    };\n  }\n\n  /**\n   * Check for memory leaks\n   */\n  checkLeaks(): void {\n    if (this.allocations.size > 0) {\n      this.logger.warn(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `Potential memory leak: ${this.allocations.size} unfreed allocations`,\n      );\n\n      for (const [ptr, alloc] of this.allocations) {\n        this.logger.warn(LOG_SOURCE, LOG_CATEGORY, `  - ${ptr}: ${alloc.size} bytes`, alloc.stack);\n      }\n    }\n  }\n}\n","import {\n  PdfActionObject,\n  PdfAnnotationObject,\n  PdfTextRectObject,\n  PdfAnnotationSubtype,\n  PdfLinkAnnoObject,\n  PdfWidgetAnnoObject,\n  PdfLinkTarget,\n  PdfZoomMode,\n  Logger,\n  NoopLogger,\n  SearchResult,\n  SearchTarget,\n  MatchFlag,\n  PdfDestinationObject,\n  PdfBookmarkObject,\n  PdfDocumentObject,\n  PdfEngine,\n  PdfPageObject,\n  PdfActionType,\n  Rotation,\n  PDF_FORM_FIELD_FLAG,\n  PDF_FORM_FIELD_TYPE,\n  PdfWidgetAnnoOption,\n  PdfFileAttachmentAnnoObject,\n  Rect,\n  Size,\n  PdfAttachmentObject,\n  PdfUnsupportedAnnoObject,\n  PdfTextAnnoObject,\n  PdfSignatureObject,\n  PdfInkAnnoObject,\n  PdfInkListObject,\n  Position,\n  PdfStampAnnoObject,\n  PdfCircleAnnoObject,\n  PdfSquareAnnoObject,\n  PdfFreeTextAnnoObject,\n  PdfCaretAnnoObject,\n  PdfSquigglyAnnoObject,\n  PdfStrikeOutAnnoObject,\n  PdfUnderlineAnnoObject,\n  PdfFile,\n  PdfSegmentObject,\n  AppearanceMode,\n  PdfImageObject,\n  PdfPageObjectType,\n  PdfPathObject,\n  PdfFormObject,\n  PdfPolygonAnnoObject,\n  PdfPolylineAnnoObject,\n  PdfLineAnnoObject,\n  PdfHighlightAnnoObject,\n  PdfStampAnnoObjectContents,\n  PdfWidgetAnnoField,\n  PdfTransformMatrix,\n  FormFieldValue,\n  PdfErrorCode,\n  PdfTaskHelper,\n  PdfPageFlattenFlag,\n  PdfPageFlattenResult,\n  PdfTask,\n  PdfFileLoader,\n  transformRect,\n  SearchAllPagesResult,\n  PdfOpenDocumentUrlOptions,\n  PdfOpenDocumentBufferOptions,\n  PdfFileUrl,\n  Task,\n  PdfErrorReason,\n  TextContext,\n  PdfGlyphObject,\n  PdfPageGeometry,\n  PdfRun,\n  toIntRect,\n  Quad,\n  PdfAnnotationState,\n  PdfAnnotationStateModel,\n  quadToRect,\n  ImageConversionTypes,\n  PageTextSlice,\n  stripPdfUnwantedMarkers,\n  rectToQuad,\n  dateToPdfDate,\n  pdfDateToDate,\n  PdfAnnotationColorType,\n  PdfAnnotationBorderStyle,\n  flagsToNames,\n  PdfAnnotationFlagName,\n  namesToFlags,\n  PdfAnnotationLineEnding,\n  LinePoints,\n  LineEndings,\n  WebColor,\n  webColorToPdfColor,\n  PdfColor,\n  pdfColorToWebColor,\n  pdfAlphaToWebOpacity,\n  webOpacityToPdfAlpha,\n  PdfStandardFont,\n  PdfTextAlignment,\n  PdfVerticalAlignment,\n  AnnotationCreateContext,\n  ignore,\n  isUuidV4,\n  uuidV4,\n  PdfAnnotationIcon,\n  PdfPageSearchProgress,\n  PdfSearchAllPagesOptions,\n  PdfRenderPageAnnotationOptions,\n  PdfRedactTextOptions,\n  PdfFlattenPageOptions,\n  PdfRenderThumbnailOptions,\n  PdfRenderPageOptions,\n  PdfAnnotationsProgress,\n  ConvertToBlobOptions,\n  buildUserToDeviceMatrix,\n  Matrix,\n  PdfMetadataObject,\n  PdfPrintOptions,\n  PdfTrappedStatus,\n  PdfStampFit,\n  PdfAddAttachmentParams,\n} from '@kopjra/embedpdf-models';\nimport { computeFormDrawParams, isValidCustomKey, readArrayBuffer, readString } from './helper';\nimport { WrappedPdfiumModule } from '@kopjra/embedpdf-pdfium';\nimport { DocumentContext, PageContext, PdfCache } from './cache';\nimport { ImageDataConverter, LazyImageData } from '../converters/types';\nimport { MemoryManager } from './core/memory-manager';\nimport { WasmPointer } from './types/branded';\n\n/**\n * Format of bitmap\n */\nexport enum BitmapFormat {\n  Bitmap_Gray = 1,\n  Bitmap_BGR = 2,\n  Bitmap_BGRx = 3,\n  Bitmap_BGRA = 4,\n}\n\n/**\n * Pdf rendering flag\n */\nexport enum RenderFlag {\n  ANNOT = 0x01, // Set if annotations are to be rendered.\n  LCD_TEXT = 0x02, // Set if using text rendering optimized for LCD display.\n  NO_NATIVETEXT = 0x04, // Don't use the native text output available on some platforms\n  GRAYSCALE = 0x08, // Grayscale output.\n  DEBUG_INFO = 0x80, // Set if you want to get some debug info. Please discuss with Foxit first if you need to collect debug info.\n  NO_CATCH = 0x100, // Set if you don't want to catch exception.\n  RENDER_LIMITEDIMAGECACHE = 0x200, // Limit image cache size.\n  RENDER_FORCEHALFTONE = 0x400, // Always use halftone for image stretching.\n  PRINTING = 0x800, // Render for printing.\n  REVERSE_BYTE_ORDER = 0x10, // Set whether render in a reverse Byte order, this flag only.\n}\n\nconst LOG_SOURCE = 'PDFiumEngine';\nconst LOG_CATEGORY = 'Engine';\n\n/**\n * Context used for searching\n */\nexport interface SearchContext {\n  /**\n   * search target\n   */\n  target: SearchTarget;\n  /**\n   * current page index\n   */\n  currPageIndex: number;\n  /**\n   * index of text in the current pdf page,  -1 means reach the end\n   */\n  startIndex: number;\n}\n\n/**\n * Error code of pdfium library\n */\nexport enum PdfiumErrorCode {\n  Success = 0,\n  Unknown = 1,\n  File = 2,\n  Format = 3,\n  Password = 4,\n  Security = 5,\n  Page = 6,\n  XFALoad = 7,\n  XFALayout = 8,\n}\n\ninterface PdfiumEngineOptions<T> {\n  logger?: Logger;\n  imageDataConverter?: ImageDataConverter<T>;\n}\n\nexport class OffscreenCanvasError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = 'OffscreenCanvasError';\n  }\n}\n\nexport const browserImageDataToBlobConverter: ImageDataConverter<Blob> = (\n  getImageData: LazyImageData,\n  imageType: ImageConversionTypes = 'image/webp',\n  quality?: number,\n): Promise<Blob> => {\n  // Check if we're in a browser environment\n  if (typeof OffscreenCanvas === 'undefined') {\n    return Promise.reject(\n      new OffscreenCanvasError(\n        'OffscreenCanvas is not available in this environment. ' +\n          'This converter is intended for browser use only. ' +\n          'Falling back to WASM-based image encoding.',\n      ),\n    );\n  }\n\n  const pdfImage = getImageData();\n  const imageData = new ImageData(pdfImage.data, pdfImage.width, pdfImage.height);\n  const off = new OffscreenCanvas(imageData.width, imageData.height);\n  off.getContext('2d')!.putImageData(imageData, 0, 0);\n  return off.convertToBlob({ type: imageType, quality });\n};\n\n/**\n * Pdf engine that based on pdfium wasm\n */\nexport class PdfiumEngine<T = Blob> implements PdfEngine<T> {\n  /**\n   * pdf documents that opened\n   */\n  private readonly cache: PdfCache;\n\n  /**\n   * memory manager instance\n   */\n  private readonly memoryManager: MemoryManager;\n\n  /**\n   * interval to check memory leaks\n   */\n  private memoryLeakCheckInterval: number | null = null;\n\n  /**\n   * logger instance\n   */\n  private logger: Logger;\n\n  /**\n   * function to convert ImageData to Blob\n   */\n  private readonly imageDataConverter: ImageDataConverter<T>;\n\n  /**\n   * Create an instance of PdfiumEngine\n   * @param wasmModule - pdfium wasm module\n   * @param logger - logger instance\n   * @param imageDataToBlobConverter - function to convert ImageData to Blob\n   */\n  constructor(\n    private pdfiumModule: WrappedPdfiumModule,\n    options: PdfiumEngineOptions<T> = {},\n  ) {\n    const {\n      logger = new NoopLogger(),\n      imageDataConverter = browserImageDataToBlobConverter as ImageDataConverter<T>,\n    } = options;\n\n    this.logger = logger;\n    this.imageDataConverter = imageDataConverter;\n    this.memoryManager = new MemoryManager(this.pdfiumModule, this.logger);\n    this.cache = new PdfCache(this.pdfiumModule, this.memoryManager);\n\n    if (this.logger.isEnabled('debug')) {\n      this.memoryLeakCheckInterval = setInterval(() => {\n        this.memoryManager.checkLeaks();\n      }, 10000) as unknown as number;\n    }\n  }\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.initialize}\n   *\n   * @public\n   */\n  initialize() {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'initialize');\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `Initialize`, 'Begin', 'General');\n    this.pdfiumModule.PDFiumExt_Init();\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `Initialize`, 'End', 'General');\n    return PdfTaskHelper.resolve(true);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.destroy}\n   *\n   * @public\n   */\n  destroy() {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'destroy');\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `Destroy`, 'Begin', 'General');\n    this.pdfiumModule.FPDF_DestroyLibrary();\n    if (this.memoryLeakCheckInterval) {\n      clearInterval(this.memoryLeakCheckInterval);\n      this.memoryLeakCheckInterval = null;\n    }\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `Destroy`, 'End', 'General');\n    return PdfTaskHelper.resolve(true);\n  }\n\n  /** Write a UTF-16LE (WIDESTRING) to wasm, call `fn(ptr)`, then free. */\n  private withWString<T>(value: string, fn: (ptr: number) => T): T {\n    // bytes = (len + 1) * 2\n    const length = (value.length + 1) * 2;\n    const ptr = this.memoryManager.malloc(length);\n    try {\n      // emscripten runtime exposes stringToUTF16\n      this.pdfiumModule.pdfium.stringToUTF16(value, ptr, length);\n      return fn(ptr);\n    } finally {\n      this.memoryManager.free(ptr);\n    }\n  }\n\n  /** Write a float[] to wasm, call `fn(ptr, count)`, then free. */\n  private withFloatArray<T>(\n    values: number[] | undefined,\n    fn: (ptr: number, count: number) => T,\n  ): T {\n    const arr = values ?? [];\n    const bytes = arr.length * 4;\n    const ptr = bytes ? this.memoryManager.malloc(bytes) : WasmPointer(0);\n    try {\n      if (bytes) {\n        for (let i = 0; i < arr.length; i++) {\n          this.pdfiumModule.pdfium.setValue(ptr + i * 4, arr[i], 'float');\n        }\n      }\n      return fn(ptr, arr.length);\n    } finally {\n      if (bytes) this.memoryManager.free(ptr);\n    }\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.openDocumentUrl}\n   *\n   * @public\n   */\n  public openDocumentUrl(file: PdfFileUrl, options?: PdfOpenDocumentUrlOptions) {\n    const mode = options?.mode ?? 'auto';\n    const password = options?.password ?? '';\n    const requestOptions = options?.requestOptions;\n\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'openDocumentUrl called', file.url, mode);\n\n    // We'll create a task to wrap asynchronous steps\n    const task = PdfTaskHelper.create<PdfDocumentObject>();\n\n    // Start an async procedure\n    (async () => {\n      try {\n        const fetchFullTask = await this.fetchFullAndOpen(file, password, requestOptions);\n        fetchFullTask.wait(\n          (doc) => task.resolve(doc),\n          (err) => task.reject(err.reason),\n        );\n      } catch (err) {\n        this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'openDocumentUrl error', err);\n        task.reject({\n          code: PdfErrorCode.Unknown,\n          message: String(err),\n        });\n      }\n    })();\n\n    return task;\n  }\n\n  /**\n   * Check if the server supports range requests:\n   * Sends a HEAD request and sees if 'Accept-Ranges: bytes'.\n   */\n  private async checkRangeSupport(\n    url: string,\n    requestOptions?: { headers?: Record<string, string>; credentials?: RequestCredentials },\n  ): Promise<{ supportsRanges: boolean; fileLength: number; content: ArrayBuffer | null }> {\n    try {\n      this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'checkRangeSupport', url);\n\n      // First try HEAD request\n      const headResponse = await fetch(url, {\n        method: 'HEAD',\n        headers: requestOptions?.headers,\n        credentials: requestOptions?.credentials,\n      });\n      const fileLength = headResponse.headers.get('Content-Length');\n      const acceptRanges = headResponse.headers.get('Accept-Ranges');\n\n      // If server explicitly supports ranges, we're done\n      if (acceptRanges === 'bytes') {\n        return {\n          supportsRanges: true,\n          fileLength: parseInt(fileLength ?? '0'),\n          content: null,\n        };\n      }\n\n      // Test actual range request support\n      const testResponse = await fetch(url, {\n        headers: { ...requestOptions?.headers, Range: 'bytes=0-1' },\n        credentials: requestOptions?.credentials,\n      });\n\n      // If we get 200 instead of 206, server doesn't support ranges\n      // Return the full content since we'll need it anyway\n      if (testResponse.status === 200) {\n        const content = await testResponse.arrayBuffer();\n        return {\n          supportsRanges: false,\n          fileLength: parseInt(fileLength ?? '0'),\n          content: content,\n        };\n      }\n\n      // 206 Partial Content indicates range support\n      return {\n        supportsRanges: testResponse.status === 206,\n        fileLength: parseInt(fileLength ?? '0'),\n        content: null,\n      };\n    } catch (e) {\n      this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'checkRangeSupport failed', e);\n      throw new Error('Failed to check range support: ' + e);\n    }\n  }\n\n  /**\n   * Fully fetch the file (using fetch) into an ArrayBuffer,\n   * then call openDocumentFromBuffer.\n   */\n  private async fetchFullAndOpen(\n    file: PdfFileUrl,\n    password: string,\n    requestOptions?: { headers?: Record<string, string>; credentials?: RequestCredentials },\n  ) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'fetchFullAndOpen', file.url);\n\n    // 1. fetch entire PDF as array buffer\n    const response = await fetch(file.url, {\n      headers: requestOptions?.headers,\n      credentials: requestOptions?.credentials,\n    });\n    if (!response.ok) {\n      throw new Error(`Could not fetch PDF: ${response.statusText}`);\n    }\n    const arrayBuf = await response.arrayBuffer();\n\n    // 2. create a PdfFile object\n    const pdfFile: PdfFile = {\n      id: file.id,\n      content: arrayBuf,\n    };\n\n    // 3. call openDocumentFromBuffer (the method you already have)\n    //    that returns a PdfTask, but let's wrap it in a Promise\n    return this.openDocumentBuffer(pdfFile, { password });\n  }\n\n  /**\n   * Use your synchronous partial-loading approach:\n   * - In your snippet, it's done via `openDocumentFromLoader`.\n   * - We'll do a synchronous XHR read callback that pulls\n   *   the desired byte ranges.\n   */\n  private async openDocumentWithRangeRequest(\n    file: PdfFileUrl,\n    password: string,\n    knownFileLength?: number,\n    requestOptions?: { headers?: Record<string, string>; credentials?: RequestCredentials },\n  ) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'openDocumentWithRangeRequest', file.url);\n\n    // We first do a HEAD or a partial fetch to get the fileLength:\n    const fileLength =\n      knownFileLength ?? (await this.retrieveFileLength(file.url, requestOptions)).fileLength;\n\n    // 2. define the callback function used by openDocumentFromLoader\n    const callback = (offset: number, length: number) => {\n      // Perform synchronous XHR:\n      const xhr = new XMLHttpRequest();\n      xhr.open('GET', file.url, false); // note: block in the Worker\n      xhr.overrideMimeType('text/plain; charset=x-user-defined');\n\n      // Set Range header\n      xhr.setRequestHeader('Range', `bytes=${offset}-${offset + length - 1}`);\n\n      // Set custom headers if provided\n      if (requestOptions?.headers) {\n        Object.entries(requestOptions.headers).forEach(([key, value]) => {\n          xhr.setRequestHeader(key, value);\n        });\n      }\n\n      // Set credentials for cookies\n      if (requestOptions?.credentials) {\n        xhr.withCredentials = requestOptions.credentials === 'include';\n      }\n\n      xhr.send(null);\n\n      if (xhr.status === 206 || xhr.status === 200) {\n        return this.convertResponseToUint8Array(xhr.responseText);\n      }\n      throw new Error(`Range request failed with status ${xhr.status}`);\n    };\n\n    // 3. call `openDocumentFromLoader`\n    return this.openDocumentFromLoader(\n      {\n        id: file.id,\n        fileLength,\n        callback,\n      },\n      password,\n    );\n  }\n\n  /**\n   * Helper to do a HEAD request or partial GET to find file length.\n   */\n  private async retrieveFileLength(\n    url: string,\n    requestOptions?: { headers?: Record<string, string>; credentials?: RequestCredentials },\n  ): Promise<{ fileLength: number }> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'retrieveFileLength', url);\n\n    // We'll do a HEAD request to get Content-Length\n    const resp = await fetch(url, {\n      method: 'HEAD',\n      headers: requestOptions?.headers,\n      credentials: requestOptions?.credentials,\n    });\n    if (!resp.ok) {\n      throw new Error(`Failed HEAD request for file length: ${resp.statusText}`);\n    }\n    const lenStr = resp.headers.get('Content-Length') || '0';\n    const fileLength = parseInt(lenStr, 10) || 0;\n    if (!fileLength) {\n      throw new Error(`Content-Length not found or zero.`);\n    }\n    return { fileLength };\n  }\n\n  /**\n   * Convert response text (x-user-defined) to a Uint8Array\n   * for partial data.\n   */\n  private convertResponseToUint8Array(text: string): Uint8Array {\n    const array = new Uint8Array(text.length);\n    for (let i = 0; i < text.length; i++) {\n      // & 0xff ensures we only get the lower 8 bits\n      array[i] = text.charCodeAt(i) & 0xff;\n    }\n    return array;\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.openDocument}\n   *\n   * @public\n   */\n  openDocumentBuffer(file: PdfFile, options?: PdfOpenDocumentBufferOptions) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'openDocumentBuffer', file, options);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `OpenDocumentBuffer`, 'Begin', file.id);\n    const array = new Uint8Array(file.content);\n    const length = array.length;\n    const filePtr = this.memoryManager.malloc(length);\n    this.pdfiumModule.pdfium.HEAPU8.set(array, filePtr);\n\n    const docPtr = this.pdfiumModule.FPDF_LoadMemDocument(filePtr, length, options?.password ?? '');\n\n    if (!docPtr) {\n      const lastError = this.pdfiumModule.FPDF_GetLastError();\n      this.logger.error(LOG_SOURCE, LOG_CATEGORY, `FPDF_LoadMemDocument failed with ${lastError}`);\n      this.memoryManager.free(filePtr);\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `OpenDocumentBuffer`, 'End', file.id);\n\n      return PdfTaskHelper.reject<PdfDocumentObject>({\n        code: lastError,\n        message: `FPDF_LoadMemDocument failed`,\n      });\n    }\n\n    const pageCount = this.pdfiumModule.FPDF_GetPageCount(docPtr);\n\n    const pages: PdfPageObject[] = [];\n    const sizePtr = this.memoryManager.malloc(8);\n    for (let index = 0; index < pageCount; index++) {\n      const result = this.pdfiumModule.FPDF_GetPageSizeByIndexF(docPtr, index, sizePtr);\n      if (!result) {\n        const lastError = this.pdfiumModule.FPDF_GetLastError();\n        this.logger.error(\n          LOG_SOURCE,\n          LOG_CATEGORY,\n          `FPDF_GetPageSizeByIndexF failed with ${lastError}`,\n        );\n        this.memoryManager.free(sizePtr);\n        this.pdfiumModule.FPDF_CloseDocument(docPtr);\n        this.memoryManager.free(filePtr);\n        this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `OpenDocumentBuffer`, 'End', file.id);\n        return PdfTaskHelper.reject<PdfDocumentObject>({\n          code: lastError,\n          message: `FPDF_GetPageSizeByIndexF failed`,\n        });\n      }\n\n      const rotation = this.pdfiumModule.EPDF_GetPageRotationByIndex(docPtr, index) as Rotation;\n\n      const page = {\n        index,\n        size: {\n          width: this.pdfiumModule.pdfium.getValue(sizePtr, 'float'),\n          height: this.pdfiumModule.pdfium.getValue(sizePtr + 4, 'float'),\n        },\n        rotation,\n      };\n\n      pages.push(page);\n    }\n    this.memoryManager.free(sizePtr);\n\n    const pdfDoc: PdfDocumentObject = {\n      id: file.id,\n      pageCount,\n      pages,\n    };\n\n    this.cache.setDocument(file.id, filePtr, docPtr);\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `OpenDocumentBuffer`, 'End', file.id);\n\n    return PdfTaskHelper.resolve(pdfDoc);\n  }\n\n  openDocumentFromLoader(fileLoader: PdfFileLoader, password: string = '') {\n    const { fileLength, callback, ...file } = fileLoader;\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'openDocumentFromLoader', file, password);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `OpenDocumentFromLoader`, 'Begin', file.id);\n\n    const readBlock = (\n      _pThis: number, // Pointer to the FPDF_FILEACCESS structure\n      offset: number, // Pointer to a buffer to receive the data\n      pBuf: number, // Offset position from the beginning of the file\n      length: number, // Number of bytes to read\n    ): number => {\n      try {\n        this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'readBlock', offset, length, pBuf);\n\n        if (offset < 0 || offset >= fileLength) {\n          this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'Offset out of bounds:', offset);\n          return 0;\n        }\n\n        // Get data chunk using the callback\n        const data = callback(offset, length);\n\n        // Copy the data to PDFium's buffer\n        const dest = new Uint8Array(this.pdfiumModule.pdfium.HEAPU8.buffer, pBuf, data.length);\n        dest.set(data);\n\n        return data.length;\n      } catch (error) {\n        this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'ReadBlock error:', error);\n        return 0;\n      }\n    };\n\n    const callbackPtr = this.pdfiumModule.pdfium.addFunction(readBlock, 'iiiii');\n\n    // Create FPDF_FILEACCESS struct\n    const structSize = 12;\n    const fileAccessPtr = this.memoryManager.malloc(structSize);\n\n    // Set up struct fields\n    this.pdfiumModule.pdfium.setValue(fileAccessPtr, fileLength, 'i32');\n    this.pdfiumModule.pdfium.setValue(fileAccessPtr + 4, callbackPtr, 'i32');\n    this.pdfiumModule.pdfium.setValue(fileAccessPtr + 8, 0, 'i32');\n\n    // Load document\n    const docPtr = this.pdfiumModule.FPDF_LoadCustomDocument(fileAccessPtr, password);\n\n    if (!docPtr) {\n      const lastError = this.pdfiumModule.FPDF_GetLastError();\n      this.logger.error(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `FPDF_LoadCustomDocument failed with ${lastError}`,\n      );\n      this.memoryManager.free(fileAccessPtr);\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `OpenDocumentFromLoader`, 'End', file.id);\n\n      return PdfTaskHelper.reject<PdfDocumentObject>({\n        code: lastError,\n        message: `FPDF_LoadCustomDocument failed`,\n      });\n    }\n\n    const pageCount = this.pdfiumModule.FPDF_GetPageCount(docPtr);\n\n    const pages: PdfPageObject[] = [];\n    const sizePtr = this.memoryManager.malloc(8);\n    for (let index = 0; index < pageCount; index++) {\n      const result = this.pdfiumModule.FPDF_GetPageSizeByIndexF(docPtr, index, sizePtr);\n      if (!result) {\n        const lastError = this.pdfiumModule.FPDF_GetLastError();\n        this.logger.error(\n          LOG_SOURCE,\n          LOG_CATEGORY,\n          `FPDF_GetPageSizeByIndexF failed with ${lastError}`,\n        );\n        this.memoryManager.free(sizePtr);\n        this.pdfiumModule.FPDF_CloseDocument(docPtr);\n        this.memoryManager.free(fileAccessPtr);\n        this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `OpenDocumentFromLoader`, 'End', file.id);\n        return PdfTaskHelper.reject<PdfDocumentObject>({\n          code: lastError,\n          message: `FPDF_GetPageSizeByIndexF failed`,\n        });\n      }\n\n      const rotation = this.pdfiumModule.EPDF_GetPageRotationByIndex(docPtr, index) as Rotation;\n\n      const page = {\n        index,\n        size: {\n          width: this.pdfiumModule.pdfium.getValue(sizePtr, 'float'),\n          height: this.pdfiumModule.pdfium.getValue(sizePtr + 4, 'float'),\n        },\n        rotation,\n      };\n\n      pages.push(page);\n    }\n    this.memoryManager.free(sizePtr);\n\n    const pdfDoc: PdfDocumentObject = {\n      id: file.id,\n      pageCount,\n      pages,\n    };\n    this.cache.setDocument(file.id, fileAccessPtr, docPtr);\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `OpenDocumentFromLoader`, 'End', file.id);\n\n    return PdfTaskHelper.resolve(pdfDoc);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getMetadata}\n   *\n   * @public\n   */\n  getMetadata(doc: PdfDocumentObject): PdfTask<PdfMetadataObject, PdfErrorReason> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getMetadata', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetMetadata`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetMetadata`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const creationRaw = this.readMetaText(ctx.docPtr, 'CreationDate');\n    const modRaw = this.readMetaText(ctx.docPtr, 'ModDate');\n\n    const metadata: PdfMetadataObject = {\n      title: this.readMetaText(ctx.docPtr, 'Title'),\n      author: this.readMetaText(ctx.docPtr, 'Author'),\n      subject: this.readMetaText(ctx.docPtr, 'Subject'),\n      keywords: this.readMetaText(ctx.docPtr, 'Keywords'),\n      producer: this.readMetaText(ctx.docPtr, 'Producer'),\n      creator: this.readMetaText(ctx.docPtr, 'Creator'),\n      creationDate: creationRaw ? (pdfDateToDate(creationRaw) ?? null) : null,\n      modificationDate: modRaw ? (pdfDateToDate(modRaw) ?? null) : null,\n      trapped: this.getMetaTrapped(ctx.docPtr),\n      custom: this.readAllMeta(ctx.docPtr, true),\n    };\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetMetadata`, 'End', doc.id);\n\n    return PdfTaskHelper.resolve(metadata);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.setMetadata}\n   *\n   * @public\n   */\n  setMetadata(doc: PdfDocumentObject, meta: Partial<PdfMetadataObject>) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'setMetadata', doc, meta);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'SetMetadata', 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'SetMetadata', 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    // Field -> PDF Info key\n    const strMap: Array<[keyof PdfMetadataObject, string]> = [\n      ['title', 'Title'],\n      ['author', 'Author'],\n      ['subject', 'Subject'],\n      ['keywords', 'Keywords'],\n      ['producer', 'Producer'],\n      ['creator', 'Creator'],\n    ];\n\n    let ok = true;\n\n    // Write string fields (string|null|undefined)\n    for (const [field, key] of strMap) {\n      const v = meta[field];\n      if (v === undefined) continue;\n      const s = v === null ? null : (v as string);\n      if (!this.setMetaText(ctx.docPtr, key, s)) ok = false;\n    }\n\n    // Write date fields (Date|null|undefined)\n    const writeDate = (\n      field: 'creationDate' | 'modificationDate',\n      key: 'CreationDate' | 'ModDate',\n    ) => {\n      const v = meta[field];\n      if (v === undefined) return;\n      if (v === null) {\n        if (!this.setMetaText(ctx.docPtr, key, null)) ok = false;\n        return;\n      }\n      const d = v as Date;\n      const raw = dateToPdfDate(d);\n      if (!this.setMetaText(ctx.docPtr, key, raw)) ok = false;\n    };\n\n    writeDate('creationDate', 'CreationDate');\n    writeDate('modificationDate', 'ModDate');\n\n    if (meta.trapped !== undefined) {\n      if (!this.setMetaTrapped(ctx.docPtr, meta.trapped ?? null)) ok = false;\n    }\n\n    if (meta.custom !== undefined) {\n      for (const [key, value] of Object.entries(meta.custom)) {\n        if (!isValidCustomKey(key)) {\n          this.logger.warn(LOG_SOURCE, LOG_CATEGORY, 'Invalid custom metadata key skipped', key);\n          continue;\n        }\n        if (!this.setMetaText(ctx.docPtr, key, value ?? null)) ok = false;\n      }\n    }\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'SetMetadata', 'End', doc.id);\n\n    return ok\n      ? PdfTaskHelper.resolve(true)\n      : PdfTaskHelper.reject({\n          code: PdfErrorCode.Unknown,\n          message: 'one or more metadata fields could not be written',\n        });\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getDocPermissions}\n   *\n   * @public\n   */\n  getDocPermissions(doc: PdfDocumentObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getDocPermissions', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `getDocPermissions`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `getDocPermissions`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const permissions = this.pdfiumModule.FPDF_GetDocPermissions(ctx.docPtr);\n\n    return PdfTaskHelper.resolve(permissions);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getDocUserPermissions}\n   *\n   * @public\n   */\n  getDocUserPermissions(doc: PdfDocumentObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getDocUserPermissions', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `getDocUserPermissions`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `getDocUserPermissions`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const permissions = this.pdfiumModule.FPDF_GetDocUserPermissions(ctx.docPtr);\n\n    return PdfTaskHelper.resolve(permissions);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getSignatures}\n   *\n   * @public\n   */\n  getSignatures(doc: PdfDocumentObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getSignatures', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetSignatures`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetSignatures`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const signatures: PdfSignatureObject[] = [];\n\n    const count = this.pdfiumModule.FPDF_GetSignatureCount(ctx.docPtr);\n    for (let i = 0; i < count; i++) {\n      const signatureObjPtr = this.pdfiumModule.FPDF_GetSignatureObject(ctx.docPtr, i);\n\n      const contents = readArrayBuffer(this.pdfiumModule.pdfium, (buffer, bufferSize) => {\n        return this.pdfiumModule.FPDFSignatureObj_GetContents(signatureObjPtr, buffer, bufferSize);\n      });\n\n      const byteRange = readArrayBuffer(this.pdfiumModule.pdfium, (buffer, bufferSize) => {\n        return (\n          this.pdfiumModule.FPDFSignatureObj_GetByteRange(signatureObjPtr, buffer, bufferSize) * 4\n        );\n      });\n\n      const subFilter = readArrayBuffer(this.pdfiumModule.pdfium, (buffer, bufferSize) => {\n        return this.pdfiumModule.FPDFSignatureObj_GetSubFilter(signatureObjPtr, buffer, bufferSize);\n      });\n\n      const reason = readString(\n        this.pdfiumModule.pdfium,\n        (buffer, bufferLength) => {\n          return this.pdfiumModule.FPDFSignatureObj_GetReason(\n            signatureObjPtr,\n            buffer,\n            bufferLength,\n          );\n        },\n        this.pdfiumModule.pdfium.UTF16ToString,\n      );\n\n      const time = readString(\n        this.pdfiumModule.pdfium,\n        (buffer, bufferLength) => {\n          return this.pdfiumModule.FPDFSignatureObj_GetTime(signatureObjPtr, buffer, bufferLength);\n        },\n        this.pdfiumModule.pdfium.UTF8ToString,\n      );\n\n      const docMDP = this.pdfiumModule.FPDFSignatureObj_GetDocMDPPermission(signatureObjPtr);\n\n      signatures.push({\n        contents,\n        byteRange,\n        subFilter,\n        reason,\n        time,\n        docMDP,\n      });\n    }\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetSignatures`, 'End', doc.id);\n\n    return PdfTaskHelper.resolve(signatures);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getBookmarks}\n   *\n   * @public\n   */\n  getBookmarks(doc: PdfDocumentObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getBookmarks', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetBookmarks`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `getBookmarks`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const bookmarks = this.readPdfBookmarks(ctx.docPtr, 0);\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetBookmarks`, 'End', doc.id);\n\n    return PdfTaskHelper.resolve({\n      bookmarks,\n    });\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.setBookmarks}\n   *\n   * @public\n   */\n  setBookmarks(doc: PdfDocumentObject, list: PdfBookmarkObject[]) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'setBookmarks', doc, list);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `SetBookmarks`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `SetBookmarks`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    // Clear any existing outlines\n    if (!this.pdfiumModule.EPDFBookmark_Clear(ctx.docPtr)) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `SetBookmarks`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.Unknown,\n        message: 'failed to clear existing bookmarks',\n      });\n    }\n\n    // Recursive builder\n    const build = (parentPtr: number, items: PdfBookmarkObject[]): boolean => {\n      let prevChild = 0;\n      for (const item of items) {\n        // Create\n        const bmPtr = this.withWString(item.title ?? '', (wptr) =>\n          this.pdfiumModule.EPDFBookmark_AppendChild(ctx.docPtr, parentPtr, wptr),\n        );\n        if (!bmPtr) return false;\n\n        // Target (optional)\n        if (item.target) {\n          const ok = this.applyBookmarkTarget(ctx.docPtr, bmPtr, item.target);\n          if (!ok) return false;\n        }\n\n        // Children\n        if (item.children?.length) {\n          const ok = build(bmPtr, item.children);\n          if (!ok) return false;\n        }\n\n        prevChild = bmPtr;\n      }\n      return true;\n    };\n\n    const ok = build(/*top-level*/ 0, list);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `SetBookmarks`, 'End', doc.id);\n\n    if (!ok) {\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.Unknown,\n        message: 'failed to build bookmark tree',\n      });\n    }\n    return PdfTaskHelper.resolve(true);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.deleteBookmarks}\n   *\n   * @public\n   */\n  deleteBookmarks(doc: PdfDocumentObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'deleteBookmarks', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `DeleteBookmarks`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `DeleteBookmarks`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const ok = this.pdfiumModule.EPDFBookmark_Clear(ctx.docPtr);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `DeleteBookmarks`, 'End', doc.id);\n\n    return ok\n      ? PdfTaskHelper.resolve(true)\n      : PdfTaskHelper.reject({\n          code: PdfErrorCode.Unknown,\n          message: 'failed to clear bookmarks',\n        });\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.renderPage}\n   *\n   * @public\n   */\n  renderPage(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    options?: PdfRenderPageOptions,\n  ): PdfTask<T> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'renderPage', doc, page, options);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `RenderPage`, 'Begin', `${doc.id}-${page.index}`);\n\n    const rect = { origin: { x: 0, y: 0 }, size: page.size };\n    const task = this.renderRectEncoded(doc, page, rect, options);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `RenderPage`, 'End', `${doc.id}-${page.index}`);\n\n    return task;\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.renderPageRect}\n   *\n   * @public\n   */\n  renderPageRect(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    rect: Rect,\n    options?: PdfRenderPageOptions,\n  ): PdfTask<T> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'renderPageRect', doc, page, rect, options);\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `RenderPageRect`,\n      'Begin',\n      `${doc.id}-${page.index}`,\n    );\n\n    const task = this.renderRectEncoded(doc, page, rect, options);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `RenderPageRect`, 'End', `${doc.id}-${page.index}`);\n\n    return task;\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getAllAnnotations}\n   *\n   * @public\n   */\n  getAllAnnotations(\n    doc: PdfDocumentObject,\n  ): PdfTask<Record<number, PdfAnnotationObject[]>, PdfAnnotationsProgress> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getAllAnnotations-with-progress', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'GetAllAnnotations', 'Begin', doc.id);\n\n    /* 1 ── create an async task wrapper ─────────────────────────────── */\n    const task = PdfTaskHelper.create<\n      Record<number, PdfAnnotationObject[]>,\n      PdfAnnotationsProgress\n    >();\n\n    let cancelled = false;\n    task.wait(ignore, (err) => {\n      if (err.type === 'abort') cancelled = true;\n    });\n\n    /* 2 ── sanity-check: document must be open ──────────────────────── */\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'GetAllAnnotations', 'End', doc.id);\n      task.reject({ code: PdfErrorCode.DocNotOpen, message: 'document does not open' });\n      return task;\n    }\n\n    /* 3 ── chunked walk so we yield less often, but still breathe ───── */\n    const CHUNK_SIZE = 100; // ← tweak here\n    const out: Record<number, PdfAnnotationObject[]> = {};\n\n    const processChunk = (startIdx: number): void => {\n      if (cancelled) return;\n\n      const endIdx = Math.min(startIdx + CHUNK_SIZE, doc.pageCount);\n      for (let pageIdx = startIdx; pageIdx < endIdx && !cancelled; ++pageIdx) {\n        this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'GetAllAnnotations', 'Begin', doc.id, pageIdx);\n\n        /* read this page’s annotations */\n        const annots = this.readPageAnnotationsRaw(ctx, doc.pages[pageIdx]);\n        out[pageIdx] = annots;\n\n        this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'GetAllAnnotations', 'End', doc.id, pageIdx);\n        task.progress({ page: pageIdx, annotations: annots });\n      }\n\n      /* all done? */\n      if (cancelled) return;\n      if (endIdx >= doc.pageCount) {\n        this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'GetAllAnnotations', 'End', doc.id);\n        task.resolve(out);\n        return;\n      }\n\n      /* let the browser breathe, then continue with next chunk */\n      setTimeout(() => processChunk(endIdx), 0);\n    };\n\n    /* kick-off */\n    processChunk(0);\n    return task;\n  }\n\n  private readAllAnnotations(\n    doc: PdfDocumentObject,\n    ctx: DocumentContext,\n  ): Record<number, PdfAnnotationObject[]> {\n    const annotationsByPage: Record<number, PdfAnnotationObject[]> = {};\n\n    for (let i = 0; i < doc.pageCount; i++) {\n      const pageAnnotations = this.readPageAnnotations(ctx, doc.pages[i]);\n      annotationsByPage[i] = pageAnnotations;\n    }\n\n    return annotationsByPage;\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getPageAnnotations}\n   *\n   * @public\n   */\n  getPageAnnotations(doc: PdfDocumentObject, page: PdfPageObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getPageAnnotations', doc, page);\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `GetPageAnnotations`,\n      'Begin',\n      `${doc.id}-${page.index}`,\n    );\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `GetPageAnnotations`,\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const annotations = this.readPageAnnotations(ctx, page);\n\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `GetPageAnnotations`,\n      'End',\n      `${doc.id}-${page.index}`,\n    );\n\n    this.logger.debug(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `GetPageAnnotations`,\n      `${doc.id}-${page.index}`,\n      annotations,\n    );\n\n    return PdfTaskHelper.resolve(annotations);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.createPageAnnotation}\n   *\n   * @public\n   */\n  createPageAnnotation<A extends PdfAnnotationObject>(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    annotation: A,\n    context?: AnnotationCreateContext<A>,\n  ): PdfTask<string> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'createPageAnnotation', doc, page, annotation);\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `CreatePageAnnotation`,\n      'Begin',\n      `${doc.id}-${page.index}`,\n    );\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `CreatePageAnnotation`,\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const pageCtx = ctx.acquirePage(page.index);\n    const annotationPtr = this.pdfiumModule.EPDFPage_CreateAnnot(pageCtx.pagePtr, annotation.type);\n    if (!annotationPtr) {\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `CreatePageAnnotation`,\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      pageCtx.release();\n\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantCreateAnnot,\n        message: 'can not create annotation with specified type',\n      });\n    }\n\n    if (!isUuidV4(annotation.id)) {\n      annotation.id = uuidV4();\n    }\n\n    if (!this.setAnnotString(annotationPtr, 'NM', annotation.id)) {\n      this.pdfiumModule.FPDFPage_CloseAnnot(annotationPtr);\n      pageCtx.release();\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantSetAnnotString,\n        message: 'can not set the name of the annotation',\n      });\n    }\n\n    if (!this.setPageAnnoRect(page, annotationPtr, annotation.rect)) {\n      this.pdfiumModule.FPDFPage_CloseAnnot(annotationPtr);\n      pageCtx.release();\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `CreatePageAnnotation`,\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantSetAnnotRect,\n        message: 'can not set the rect of the annotation',\n      });\n    }\n\n    let isSucceed = false;\n    switch (annotation.type) {\n      case PdfAnnotationSubtype.INK:\n        isSucceed = this.addInkStroke(page, pageCtx.pagePtr, annotationPtr, annotation);\n        break;\n      case PdfAnnotationSubtype.STAMP:\n        isSucceed = this.addStampContent(\n          ctx.docPtr,\n          page,\n          pageCtx.pagePtr,\n          annotationPtr,\n          annotation,\n          context?.imageData,\n        );\n        break;\n      case PdfAnnotationSubtype.TEXT:\n        isSucceed = this.addTextContent(page, pageCtx.pagePtr, annotationPtr, annotation);\n        break;\n      case PdfAnnotationSubtype.FREETEXT:\n        isSucceed = this.addFreeTextContent(page, pageCtx.pagePtr, annotationPtr, annotation);\n        break;\n      case PdfAnnotationSubtype.LINE:\n        isSucceed = this.addLineContent(page, pageCtx.pagePtr, annotationPtr, annotation);\n        break;\n      case PdfAnnotationSubtype.POLYLINE:\n      case PdfAnnotationSubtype.POLYGON:\n        isSucceed = this.addPolyContent(page, pageCtx.pagePtr, annotationPtr, annotation);\n        break;\n      case PdfAnnotationSubtype.CIRCLE:\n      case PdfAnnotationSubtype.SQUARE:\n        isSucceed = this.addShapeContent(page, pageCtx.pagePtr, annotationPtr, annotation);\n        break;\n      case PdfAnnotationSubtype.UNDERLINE:\n      case PdfAnnotationSubtype.STRIKEOUT:\n      case PdfAnnotationSubtype.SQUIGGLY:\n      case PdfAnnotationSubtype.HIGHLIGHT:\n        isSucceed = this.addTextMarkupContent(page, pageCtx.pagePtr, annotationPtr, annotation);\n        break;\n    }\n\n    if (!isSucceed) {\n      this.pdfiumModule.FPDFPage_RemoveAnnot(pageCtx.pagePtr, annotationPtr);\n      pageCtx.release();\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `CreatePageAnnotation`,\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantSetAnnotContent,\n        message: 'can not add content of the annotation',\n      });\n    }\n\n    if (annotation.blendMode !== undefined) {\n      this.pdfiumModule.EPDFAnnot_GenerateAppearanceWithBlend(annotationPtr, annotation.blendMode);\n    } else {\n      this.pdfiumModule.EPDFAnnot_GenerateAppearance(annotationPtr);\n    }\n\n    this.pdfiumModule.FPDFPage_GenerateContent(pageCtx.pagePtr);\n\n    this.pdfiumModule.FPDFPage_CloseAnnot(annotationPtr);\n    pageCtx.release();\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `CreatePageAnnotation`,\n      'End',\n      `${doc.id}-${page.index}`,\n    );\n\n    return PdfTaskHelper.resolve<string>(annotation.id);\n  }\n\n  /**\n   * Update an existing page annotation in-place\n   *\n   *  • Locates the annot by page-local index (`annotation.id`)\n   *  • Re-writes its /Rect and type-specific payload\n   *  • Calls FPDFPage_GenerateContent so the new appearance is rendered\n   *\n   * @returns PdfTask<boolean>  –  true on success\n   */\n  updatePageAnnotation(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    annotation: PdfAnnotationObject,\n  ): PdfTask<boolean> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'updatePageAnnotation', doc, page, annotation);\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      'UpdatePageAnnotation',\n      'Begin',\n      `${doc.id}-${page.index}`,\n    );\n\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        'UpdatePageAnnotation',\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const pageCtx = ctx.acquirePage(page.index);\n    const annotPtr = this.getAnnotationByName(pageCtx.pagePtr, annotation.id);\n    if (!annotPtr) {\n      pageCtx.release();\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        'UpdatePageAnnotation',\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({ code: PdfErrorCode.NotFound, message: 'annotation not found' });\n    }\n\n    /* 1 ── (re)set bounding-box ────────────────────────────────────────────── */\n    if (!this.setPageAnnoRect(page, annotPtr, annotation.rect)) {\n      this.pdfiumModule.FPDFPage_CloseAnnot(annotPtr);\n      pageCtx.release();\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        'UpdatePageAnnotation',\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantSetAnnotRect,\n        message: 'failed to move annotation',\n      });\n    }\n\n    /* 2 ── wipe previous payload and rebuild fresh one ─────────────────────── */\n    let ok = false;\n    switch (annotation.type) {\n      /* ── Ink ─────────────────────────────────────────────────────────────── */\n      case PdfAnnotationSubtype.INK: {\n        /* clear every existing stroke first */\n        if (!this.pdfiumModule.FPDFAnnot_RemoveInkList(annotPtr)) break;\n        ok = this.addInkStroke(page, pageCtx.pagePtr, annotPtr, annotation);\n        break;\n      }\n\n      /* ── Stamp ───────────────────────────────────────────────────────────── */\n      case PdfAnnotationSubtype.STAMP: {\n        ok = this.addStampContent(ctx.docPtr, page, pageCtx.pagePtr, annotPtr, annotation);\n        break;\n      }\n\n      case PdfAnnotationSubtype.TEXT: {\n        ok = this.addTextContent(page, pageCtx.pagePtr, annotPtr, annotation);\n        break;\n      }\n\n      /* ── Free text ────────────────────────────────────────────────────────── */\n      case PdfAnnotationSubtype.FREETEXT: {\n        ok = this.addFreeTextContent(page, pageCtx.pagePtr, annotPtr, annotation);\n        break;\n      }\n\n      /* ── Shape ───────────────────────────────────────────────────────────── */\n      case PdfAnnotationSubtype.CIRCLE:\n      case PdfAnnotationSubtype.SQUARE: {\n        ok = this.addShapeContent(page, pageCtx.pagePtr, annotPtr, annotation);\n        break;\n      }\n\n      /* ── Line ─────────────────────────────────────────────────────────────── */\n      case PdfAnnotationSubtype.LINE: {\n        ok = this.addLineContent(page, pageCtx.pagePtr, annotPtr, annotation);\n        break;\n      }\n\n      /* ── Polygon / Polyline ───────────────────────────────────────────────── */\n      case PdfAnnotationSubtype.POLYGON:\n      case PdfAnnotationSubtype.POLYLINE: {\n        ok = this.addPolyContent(page, pageCtx.pagePtr, annotPtr, annotation);\n        break;\n      }\n\n      /* ── Text-markup family ──────────────────────────────────────────────── */\n      case PdfAnnotationSubtype.HIGHLIGHT:\n      case PdfAnnotationSubtype.UNDERLINE:\n      case PdfAnnotationSubtype.STRIKEOUT:\n      case PdfAnnotationSubtype.SQUIGGLY: {\n        /* replace quad-points / colour / strings in one go */\n        ok = this.addTextMarkupContent(page, pageCtx.pagePtr, annotPtr, annotation);\n        break;\n      }\n\n      /* ── Unsupported edits – fall through to error ───────────────────────── */\n      default:\n        ok = false;\n    }\n\n    /* 3 ── regenerate appearance if payload was changed ───────────────────── */\n    if (ok) {\n      if (annotation.blendMode !== undefined) {\n        this.pdfiumModule.EPDFAnnot_GenerateAppearanceWithBlend(annotPtr, annotation.blendMode);\n      } else {\n        this.pdfiumModule.EPDFAnnot_GenerateAppearance(annotPtr);\n      }\n      this.pdfiumModule.FPDFPage_GenerateContent(pageCtx.pagePtr);\n    }\n\n    /* 4 ── tidy-up native handles ──────────────────────────────────────────── */\n    this.pdfiumModule.FPDFPage_CloseAnnot(annotPtr);\n    pageCtx.release();\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      'UpdatePageAnnotation',\n      'End',\n      `${doc.id}-${page.index}`,\n    );\n\n    return ok\n      ? PdfTaskHelper.resolve<boolean>(true)\n      : PdfTaskHelper.reject<boolean>({\n          code: PdfErrorCode.CantSetAnnotContent,\n          message: 'failed to update annotation',\n        });\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.removePageAnnotation}\n   *\n   * @public\n   */\n  removePageAnnotation(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    annotation: PdfAnnotationObject,\n  ) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'removePageAnnotation', doc, page, annotation);\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `RemovePageAnnotation`,\n      'Begin',\n      `${doc.id}-${page.index}`,\n    );\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `RemovePageAnnotation`,\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const pageCtx = ctx.acquirePage(page.index);\n    let result = false;\n    result = this.removeAnnotationByName(pageCtx.pagePtr, annotation.id);\n    if (!result) {\n      this.logger.error(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `FPDFPage_RemoveAnnot Failed`,\n        `${doc.id}-${page.index}`,\n      );\n    } else {\n      result = this.pdfiumModule.FPDFPage_GenerateContent(pageCtx.pagePtr);\n      if (!result) {\n        this.logger.error(\n          LOG_SOURCE,\n          LOG_CATEGORY,\n          `FPDFPage_GenerateContent Failed`,\n          `${doc.id}-${page.index}`,\n        );\n      }\n    }\n\n    pageCtx.release();\n\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `RemovePageAnnotation`,\n      'End',\n      `${doc.id}-${page.index}`,\n    );\n    return PdfTaskHelper.resolve(result);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getPageTextRects}\n   *\n   * @public\n   */\n  getPageTextRects(doc: PdfDocumentObject, page: PdfPageObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getPageTextRects', doc, page);\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `GetPageTextRects`,\n      'Begin',\n      `${doc.id}-${page.index}`,\n    );\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `GetPageTextRects`,\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const pageCtx = ctx.acquirePage(page.index);\n    const textPagePtr = this.pdfiumModule.FPDFText_LoadPage(pageCtx.pagePtr);\n\n    const textRects = this.readPageTextRects(page, pageCtx.docPtr, pageCtx.pagePtr, textPagePtr);\n\n    this.pdfiumModule.FPDFText_ClosePage(textPagePtr);\n    pageCtx.release();\n\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `GetPageTextRects`,\n      'End',\n      `${doc.id}-${page.index}`,\n    );\n    return PdfTaskHelper.resolve(textRects);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.renderThumbnail}\n   *\n   * @public\n   */\n  renderThumbnail(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    options?: PdfRenderThumbnailOptions,\n  ): PdfTask<T> {\n    const { scaleFactor = 1, ...rest } = options ?? {};\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'renderThumbnail', doc, page, options);\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `RenderThumbnail`,\n      'Begin',\n      `${doc.id}-${page.index}`,\n    );\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `RenderThumbnail`,\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const result = this.renderPage(doc, page, {\n      scaleFactor: Math.max(scaleFactor, 0.5),\n      ...rest,\n    });\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `RenderThumbnail`, 'End', `${doc.id}-${page.index}`);\n\n    return result;\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getAttachments}\n   *\n   * @public\n   */\n  getAttachments(doc: PdfDocumentObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getAttachments', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetAttachments`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetAttachments`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const attachments: PdfAttachmentObject[] = [];\n\n    const count = this.pdfiumModule.FPDFDoc_GetAttachmentCount(ctx.docPtr);\n    for (let i = 0; i < count; i++) {\n      const attachment = this.readPdfAttachment(ctx.docPtr, i);\n      attachments.push(attachment);\n    }\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `GetAttachments`, 'End', doc.id);\n    return PdfTaskHelper.resolve(attachments);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.addAttachment}\n   *\n   * @public\n   */\n  addAttachment(doc: PdfDocumentObject, params: PdfAddAttachmentParams): PdfTask<boolean> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'addAttachment', doc, params?.name);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `AddAttachment`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `AddAttachment`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const { name, description, mimeType, data } = params ?? {};\n    if (!name) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `AddAttachment`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.NotFound,\n        message: 'attachment name is required',\n      });\n    }\n    if (!data || (data instanceof Uint8Array ? data.byteLength === 0 : data.byteLength === 0)) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `AddAttachment`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.NotFound,\n        message: 'attachment data is empty',\n      });\n    }\n\n    // 1) Create the attachment handle (also inserts into the EmbeddedFiles name tree).\n    const attachmentPtr = this.withWString(name, (wNamePtr) =>\n      this.pdfiumModule.FPDFDoc_AddAttachment(ctx.docPtr, wNamePtr),\n    );\n\n    if (!attachmentPtr) {\n      // Most likely: duplicate name in the name tree.\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `AddAttachment`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.Unknown,\n        message: `An attachment named \"${name}\" already exists`,\n      });\n    }\n\n    this.withWString(description, (wDescriptionPtr) =>\n      this.pdfiumModule.EPDFAttachment_SetDescription(attachmentPtr, wDescriptionPtr),\n    );\n\n    this.pdfiumModule.EPDFAttachment_SetSubtype(attachmentPtr, mimeType);\n\n    // 3) Copy data into WASM memory and call SetFile (this stores bytes and fills Size/CreationDate/CheckSum)\n    const u8 = data instanceof Uint8Array ? data : new Uint8Array(data);\n    const len = u8.byteLength;\n\n    const contentPtr = this.memoryManager.malloc(len);\n    try {\n      this.pdfiumModule.pdfium.HEAPU8.set(u8, contentPtr);\n      const ok = this.pdfiumModule.FPDFAttachment_SetFile(\n        attachmentPtr,\n        ctx.docPtr,\n        contentPtr,\n        len,\n      );\n      if (!ok) {\n        this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `AddAttachment`, 'End', doc.id);\n        return PdfTaskHelper.reject({\n          code: PdfErrorCode.Unknown,\n          message: 'failed to write attachment bytes',\n        });\n      }\n    } finally {\n      this.memoryManager.free(contentPtr);\n    }\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `AddAttachment`, 'End', doc.id);\n    return PdfTaskHelper.resolve<boolean>(true);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.removeAttachment}\n   *\n   * @public\n   */\n  removeAttachment(doc: PdfDocumentObject, attachment: PdfAttachmentObject): PdfTask<boolean> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'deleteAttachment', doc, attachment);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `DeleteAttachment`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `DeleteAttachment`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const count = this.pdfiumModule.FPDFDoc_GetAttachmentCount(ctx.docPtr);\n    if (attachment.index < 0 || attachment.index >= count) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `DeleteAttachment`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.Unknown,\n        message: `attachment index ${attachment.index} out of range`,\n      });\n    }\n\n    const ok = this.pdfiumModule.FPDFDoc_DeleteAttachment(ctx.docPtr, attachment.index);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `DeleteAttachment`, 'End', doc.id);\n\n    if (!ok) {\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.Unknown,\n        message: 'failed to delete attachment',\n      });\n    }\n    return PdfTaskHelper.resolve<boolean>(true);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.readAttachmentContent}\n   *\n   * @public\n   */\n  readAttachmentContent(doc: PdfDocumentObject, attachment: PdfAttachmentObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'readAttachmentContent', doc, attachment);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ReadAttachmentContent`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ReadAttachmentContent`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const attachmentPtr = this.pdfiumModule.FPDFDoc_GetAttachment(ctx.docPtr, attachment.index);\n    const sizePtr = this.memoryManager.malloc(4);\n    if (!this.pdfiumModule.FPDFAttachment_GetFile(attachmentPtr, 0, 0, sizePtr)) {\n      this.memoryManager.free(sizePtr);\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ReadAttachmentContent`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantReadAttachmentSize,\n        message: 'can not read attachment size',\n      });\n    }\n    const size = this.pdfiumModule.pdfium.getValue(sizePtr, 'i32') >>> 0;\n\n    const contentPtr = this.memoryManager.malloc(size);\n    if (!this.pdfiumModule.FPDFAttachment_GetFile(attachmentPtr, contentPtr, size, sizePtr)) {\n      this.memoryManager.free(sizePtr);\n      this.memoryManager.free(contentPtr);\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ReadAttachmentContent`, 'End', doc.id);\n\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantReadAttachmentContent,\n        message: 'can not read attachment content',\n      });\n    }\n\n    const buffer = new ArrayBuffer(size);\n    const view = new DataView(buffer);\n    for (let i = 0; i < size; i++) {\n      view.setInt8(i, this.pdfiumModule.pdfium.getValue(contentPtr + i, 'i8'));\n    }\n\n    this.memoryManager.free(sizePtr);\n    this.memoryManager.free(contentPtr);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ReadAttachmentContent`, 'End', doc.id);\n\n    return PdfTaskHelper.resolve(buffer);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.setFormFieldValue}\n   *\n   * @public\n   */\n  setFormFieldValue(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    annotation: PdfWidgetAnnoObject,\n    value: FormFieldValue,\n  ) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'SetFormFieldValue', doc, annotation, value);\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `SetFormFieldValue`,\n      'Begin',\n      `${doc.id}-${annotation.id}`,\n    );\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'SetFormFieldValue', 'document is not opened');\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `SetFormFieldValue`,\n        'End',\n        `${doc.id}-${annotation.id}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const formFillInfoPtr = this.pdfiumModule.PDFiumExt_OpenFormFillInfo();\n    const formHandle = this.pdfiumModule.PDFiumExt_InitFormFillEnvironment(\n      ctx.docPtr,\n      formFillInfoPtr,\n    );\n\n    const pageCtx = ctx.acquirePage(page.index);\n\n    this.pdfiumModule.FORM_OnAfterLoadPage(pageCtx.pagePtr, formHandle);\n\n    const annotationPtr = this.getAnnotationByName(pageCtx.pagePtr, annotation.id);\n\n    if (!annotationPtr) {\n      pageCtx.release();\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        'SetFormFieldValue',\n        'End',\n        `${doc.id}-${page.index}`,\n      );\n      return PdfTaskHelper.reject({ code: PdfErrorCode.NotFound, message: 'annotation not found' });\n    }\n\n    if (!this.pdfiumModule.FORM_SetFocusedAnnot(formHandle, annotationPtr)) {\n      this.logger.debug(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        'SetFormFieldValue',\n        'failed to set focused annotation',\n      );\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `SetFormFieldValue`,\n        'End',\n        `${doc.id}-${annotation.id}`,\n      );\n      this.pdfiumModule.FPDFPage_CloseAnnot(annotationPtr);\n      this.pdfiumModule.FORM_OnBeforeClosePage(pageCtx.pagePtr, formHandle);\n      pageCtx.release();\n      this.pdfiumModule.PDFiumExt_ExitFormFillEnvironment(formHandle);\n      this.pdfiumModule.PDFiumExt_CloseFormFillInfo(formFillInfoPtr);\n\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantFocusAnnot,\n        message: 'failed to set focused annotation',\n      });\n    }\n\n    switch (value.kind) {\n      case 'text':\n        {\n          if (!this.pdfiumModule.FORM_SelectAllText(formHandle, pageCtx.pagePtr)) {\n            this.logger.debug(\n              LOG_SOURCE,\n              LOG_CATEGORY,\n              'SetFormFieldValue',\n              'failed to select all text',\n            );\n            this.logger.perf(\n              LOG_SOURCE,\n              LOG_CATEGORY,\n              `SetFormFieldValue`,\n              'End',\n              `${doc.id}-${annotation.id}`,\n            );\n            this.pdfiumModule.FORM_ForceToKillFocus(formHandle);\n            this.pdfiumModule.FPDFPage_CloseAnnot(annotationPtr);\n            this.pdfiumModule.FORM_OnBeforeClosePage(pageCtx.pagePtr, formHandle);\n            pageCtx.release();\n            this.pdfiumModule.PDFiumExt_ExitFormFillEnvironment(formHandle);\n            this.pdfiumModule.PDFiumExt_CloseFormFillInfo(formFillInfoPtr);\n\n            return PdfTaskHelper.reject({\n              code: PdfErrorCode.CantSelectText,\n              message: 'failed to select all text',\n            });\n          }\n          const length = 2 * (value.text.length + 1);\n          const textPtr = this.memoryManager.malloc(length);\n          this.pdfiumModule.pdfium.stringToUTF16(value.text, textPtr, length);\n          this.pdfiumModule.FORM_ReplaceSelection(formHandle, pageCtx.pagePtr, textPtr);\n          this.memoryManager.free(textPtr);\n        }\n        break;\n      case 'selection':\n        {\n          if (\n            !this.pdfiumModule.FORM_SetIndexSelected(\n              formHandle,\n              pageCtx.pagePtr,\n              value.index,\n              value.isSelected,\n            )\n          ) {\n            this.logger.debug(\n              LOG_SOURCE,\n              LOG_CATEGORY,\n              'SetFormFieldValue',\n              'failed to set index selected',\n            );\n            this.logger.perf(\n              LOG_SOURCE,\n              LOG_CATEGORY,\n              `SetFormFieldValue`,\n              'End',\n              `${doc.id}-${annotation.id}`,\n            );\n            this.pdfiumModule.FORM_ForceToKillFocus(formHandle);\n            this.pdfiumModule.FPDFPage_CloseAnnot(annotationPtr);\n            this.pdfiumModule.FORM_OnBeforeClosePage(pageCtx.pagePtr, formHandle);\n            pageCtx.release();\n            this.pdfiumModule.PDFiumExt_ExitFormFillEnvironment(formHandle);\n            this.pdfiumModule.PDFiumExt_CloseFormFillInfo(formFillInfoPtr);\n\n            return PdfTaskHelper.reject({\n              code: PdfErrorCode.CantSelectOption,\n              message: 'failed to set index selected',\n            });\n          }\n        }\n        break;\n      case 'checked':\n        {\n          const kReturn = 0x0d;\n          if (!this.pdfiumModule.FORM_OnChar(formHandle, pageCtx.pagePtr, kReturn, 0)) {\n            this.logger.debug(\n              LOG_SOURCE,\n              LOG_CATEGORY,\n              'SetFormFieldValue',\n              'failed to set field checked',\n            );\n            this.logger.perf(\n              LOG_SOURCE,\n              LOG_CATEGORY,\n              `SetFormFieldValue`,\n              'End',\n              `${doc.id}-${annotation.id}`,\n            );\n            this.pdfiumModule.FORM_ForceToKillFocus(formHandle);\n            this.pdfiumModule.FPDFPage_CloseAnnot(annotationPtr);\n            this.pdfiumModule.FORM_OnBeforeClosePage(pageCtx.pagePtr, formHandle);\n            pageCtx.release();\n            this.pdfiumModule.PDFiumExt_ExitFormFillEnvironment(formHandle);\n            this.pdfiumModule.PDFiumExt_CloseFormFillInfo(formFillInfoPtr);\n\n            return PdfTaskHelper.reject({\n              code: PdfErrorCode.CantCheckField,\n              message: 'failed to set field checked',\n            });\n          }\n        }\n        break;\n    }\n\n    this.pdfiumModule.FORM_ForceToKillFocus(formHandle);\n\n    this.pdfiumModule.FPDFPage_CloseAnnot(annotationPtr);\n    this.pdfiumModule.FORM_OnBeforeClosePage(pageCtx.pagePtr, formHandle);\n    pageCtx.release();\n\n    this.pdfiumModule.PDFiumExt_ExitFormFillEnvironment(formHandle);\n    this.pdfiumModule.PDFiumExt_CloseFormFillInfo(formFillInfoPtr);\n\n    return PdfTaskHelper.resolve<boolean>(true);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.flattenPage}\n   *\n   * @public\n   */\n  flattenPage(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    options?: PdfFlattenPageOptions,\n  ): PdfTask<PdfPageFlattenResult> {\n    const { flag = PdfPageFlattenFlag.Display } = options ?? {};\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'flattenPage', doc, page, flag);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `flattenPage`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `flattenPage`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const pageCtx = ctx.acquirePage(page.index);\n    const result = this.pdfiumModule.FPDFPage_Flatten(pageCtx.pagePtr, flag);\n    pageCtx.release();\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `flattenPage`, 'End', doc.id);\n\n    return PdfTaskHelper.resolve(result);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.extractPages}\n   *\n   * @public\n   */\n  extractPages(doc: PdfDocumentObject, pageIndexes: number[]) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'extractPages', doc, pageIndexes);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ExtractPages`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ExtractPages`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const newDocPtr = this.pdfiumModule.FPDF_CreateNewDocument();\n    if (!newDocPtr) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ExtractPages`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantCreateNewDoc,\n        message: 'can not create new document',\n      });\n    }\n\n    const pageIndexesPtr = this.memoryManager.malloc(pageIndexes.length * 4);\n    for (let i = 0; i < pageIndexes.length; i++) {\n      this.pdfiumModule.pdfium.setValue(pageIndexesPtr + i * 4, pageIndexes[i], 'i32');\n    }\n\n    if (\n      !this.pdfiumModule.FPDF_ImportPagesByIndex(\n        newDocPtr,\n        ctx.docPtr,\n        pageIndexesPtr,\n        pageIndexes.length,\n        0,\n      )\n    ) {\n      this.pdfiumModule.FPDF_CloseDocument(newDocPtr);\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ExtractPages`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantImportPages,\n        message: 'can not import pages to new document',\n      });\n    }\n\n    const buffer = this.saveDocument(newDocPtr);\n\n    this.pdfiumModule.FPDF_CloseDocument(newDocPtr);\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ExtractPages`, 'End', doc.id);\n    return PdfTaskHelper.resolve(buffer);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.extractText}\n   *\n   * @public\n   */\n  extractText(doc: PdfDocumentObject, pageIndexes: number[]) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'extractText', doc, pageIndexes);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ExtractText`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ExtractText`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const strings: string[] = [];\n    for (let i = 0; i < pageIndexes.length; i++) {\n      const pageCtx = ctx.acquirePage(pageIndexes[i]);\n      const textPagePtr = this.pdfiumModule.FPDFText_LoadPage(pageCtx.pagePtr);\n      const charCount = this.pdfiumModule.FPDFText_CountChars(textPagePtr);\n      const bufferPtr = this.memoryManager.malloc((charCount + 1) * 2);\n      this.pdfiumModule.FPDFText_GetText(textPagePtr, 0, charCount, bufferPtr);\n      const text = this.pdfiumModule.pdfium.UTF16ToString(bufferPtr);\n      this.memoryManager.free(bufferPtr);\n      strings.push(text);\n      this.pdfiumModule.FPDFText_ClosePage(textPagePtr);\n      pageCtx.release();\n    }\n\n    const text = strings.join('\\n\\n');\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `ExtractText`, 'End', doc.id);\n    return PdfTaskHelper.resolve(text);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.getTextSlices}\n   *\n   * @public\n   */\n  getTextSlices(doc: PdfDocumentObject, slices: PageTextSlice[]): PdfTask<string[]> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getTextSlices', doc, slices);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'GetTextSlices', 'Begin', doc.id);\n\n    /* ⚠︎ 1 — trivial case */\n    if (slices.length === 0) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'GetTextSlices', 'End', doc.id);\n      return PdfTaskHelper.resolve<string[]>([]);\n    }\n\n    /* ⚠︎ 2 — document must be open */\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'GetTextSlices', 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    try {\n      /* keep caller order */\n      const out = new Array<string>(slices.length);\n\n      /* group → open each page once */\n      const byPage = new Map<number, { slice: PageTextSlice; pos: number }[]>();\n      slices.forEach((s, i) => {\n        (byPage.get(s.pageIndex) ?? byPage.set(s.pageIndex, []).get(s.pageIndex))!.push({\n          slice: s,\n          pos: i,\n        });\n      });\n\n      for (const [pageIdx, list] of byPage) {\n        const pageCtx = ctx.acquirePage(pageIdx);\n        const textPagePtr = pageCtx.getTextPage();\n\n        for (const { slice, pos } of list) {\n          const bufPtr = this.memoryManager.malloc(2 * (slice.charCount + 1)); // UTF-16 + NIL\n          this.pdfiumModule.FPDFText_GetText(textPagePtr, slice.charIndex, slice.charCount, bufPtr);\n          out[pos] = stripPdfUnwantedMarkers(this.pdfiumModule.pdfium.UTF16ToString(bufPtr));\n          this.memoryManager.free(bufPtr);\n        }\n        pageCtx.release();\n      }\n\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'GetTextSlices', 'End', doc.id);\n      return PdfTaskHelper.resolve(out);\n    } catch (e) {\n      this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'getTextSlices error', e);\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'GetTextSlices', 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.Unknown,\n        message: String(e),\n      });\n    }\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.merge}\n   *\n   * @public\n   */\n  merge(files: PdfFile[]) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'merge', files);\n    const fileIds = files.map((file) => file.id).join('.');\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `Merge`, 'Begin', fileIds);\n\n    const newDocPtr = this.pdfiumModule.FPDF_CreateNewDocument();\n    if (!newDocPtr) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `Merge`, 'End', fileIds);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantCreateNewDoc,\n        message: 'can not create new document',\n      });\n    }\n\n    const ptrs: { docPtr: number; filePtr: WasmPointer }[] = [];\n    for (const file of files.reverse()) {\n      const array = new Uint8Array(file.content);\n      const length = array.length;\n      const filePtr = this.memoryManager.malloc(length);\n      this.pdfiumModule.pdfium.HEAPU8.set(array, filePtr);\n\n      const docPtr = this.pdfiumModule.FPDF_LoadMemDocument(filePtr, length, '');\n      if (!docPtr) {\n        const lastError = this.pdfiumModule.FPDF_GetLastError();\n        this.logger.error(\n          LOG_SOURCE,\n          LOG_CATEGORY,\n          `FPDF_LoadMemDocument failed with ${lastError}`,\n        );\n        this.memoryManager.free(filePtr);\n\n        for (const ptr of ptrs) {\n          this.pdfiumModule.FPDF_CloseDocument(ptr.docPtr);\n          this.memoryManager.free(ptr.filePtr);\n        }\n\n        this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `Merge`, 'End', fileIds);\n        return PdfTaskHelper.reject<PdfFile>({\n          code: lastError,\n          message: `FPDF_LoadMemDocument failed`,\n        });\n      }\n      ptrs.push({ filePtr, docPtr });\n\n      if (!this.pdfiumModule.FPDF_ImportPages(newDocPtr, docPtr, '', 0)) {\n        this.pdfiumModule.FPDF_CloseDocument(newDocPtr);\n\n        for (const ptr of ptrs) {\n          this.pdfiumModule.FPDF_CloseDocument(ptr.docPtr);\n          this.memoryManager.free(ptr.filePtr);\n        }\n\n        this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `Merge`, 'End', fileIds);\n        return PdfTaskHelper.reject({\n          code: PdfErrorCode.CantImportPages,\n          message: 'can not import pages to new document',\n        });\n      }\n    }\n    const buffer = this.saveDocument(newDocPtr);\n\n    this.pdfiumModule.FPDF_CloseDocument(newDocPtr);\n\n    for (const ptr of ptrs) {\n      this.pdfiumModule.FPDF_CloseDocument(ptr.docPtr);\n      this.memoryManager.free(ptr.filePtr);\n    }\n\n    const file: PdfFile = {\n      id: `${Math.random()}`,\n      content: buffer,\n    };\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `Merge`, 'End', fileIds);\n    return PdfTaskHelper.resolve(file);\n  }\n\n  /**\n   * Merges specific pages from multiple PDF documents in a custom order\n   *\n   * @param mergeConfigs Array of configurations specifying which pages to merge from which documents\n   * @returns A PdfTask that resolves with the merged PDF file\n   * @public\n   */\n  mergePages(mergeConfigs: Array<{ docId: string; pageIndices: number[] }>) {\n    const configIds = mergeConfigs\n      .map((config) => `${config.docId}:${config.pageIndices.join(',')}`)\n      .join('|');\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'mergePages', mergeConfigs);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `MergePages`, 'Begin', configIds);\n\n    // Create a new document to import pages into\n    const newDocPtr = this.pdfiumModule.FPDF_CreateNewDocument();\n    if (!newDocPtr) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `MergePages`, 'End', configIds);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantCreateNewDoc,\n        message: 'Cannot create new document',\n      });\n    }\n\n    try {\n      // Process each merge configuration in reverse order (since we're inserting at position 0)\n      // This ensures the final document has pages in the order specified by the user\n      for (const config of [...mergeConfigs].reverse()) {\n        // Check if the document is open\n        const ctx = this.cache.getContext(config.docId);\n\n        if (!ctx) {\n          this.logger.warn(\n            LOG_SOURCE,\n            LOG_CATEGORY,\n            `Document ${config.docId} is not open, skipping`,\n          );\n          continue;\n        }\n\n        // Get the page count for this document\n        const pageCount = this.pdfiumModule.FPDF_GetPageCount(ctx.docPtr);\n\n        // Filter out invalid page indices\n        const validPageIndices = config.pageIndices.filter(\n          (index) => index >= 0 && index < pageCount,\n        );\n\n        if (validPageIndices.length === 0) {\n          continue; // No valid pages to import\n        }\n\n        // Convert 0-based indices to 1-based for PDFium and join with commas\n        const pageString = validPageIndices.map((index) => index + 1).join(',');\n\n        try {\n          // Import all specified pages at once from this document\n          if (\n            !this.pdfiumModule.FPDF_ImportPages(\n              newDocPtr,\n              ctx.docPtr,\n              pageString,\n              0, // Insert at the beginning\n            )\n          ) {\n            throw new Error(`Failed to import pages ${pageString} from document ${config.docId}`);\n          }\n        } finally {\n        }\n      }\n\n      // Save the new document to buffer\n      const buffer = this.saveDocument(newDocPtr);\n\n      const file: PdfFile = {\n        id: `${Math.random()}`,\n        content: buffer,\n      };\n\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `MergePages`, 'End', configIds);\n      return PdfTaskHelper.resolve(file);\n    } catch (error) {\n      this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'mergePages failed', error);\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `MergePages`, 'End', configIds);\n\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantImportPages,\n        message: error instanceof Error ? error.message : 'Failed to merge pages',\n      });\n    } finally {\n      // Clean up the new document\n      if (newDocPtr) {\n        this.pdfiumModule.FPDF_CloseDocument(newDocPtr);\n      }\n    }\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.saveAsCopy}\n   *\n   * @public\n   */\n  saveAsCopy(doc: PdfDocumentObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'saveAsCopy', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `SaveAsCopy`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `SaveAsCopy`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    const buffer = this.saveDocument(ctx.docPtr);\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `SaveAsCopy`, 'End', doc.id);\n    return PdfTaskHelper.resolve(buffer);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.closeDocument}\n   *\n   * @public\n   */\n  closeDocument(doc: PdfDocumentObject) {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'closeDocument', doc);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `CloseDocument`, 'Begin', doc.id);\n\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) return PdfTaskHelper.resolve(true);\n\n    ctx.dispose();\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `CloseDocument`, 'End', doc.id);\n    return PdfTaskHelper.resolve(true);\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.closeAllDocuments}\n   *\n   * @public\n   */\n  closeAllDocuments() {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'closeAllDocuments');\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `CloseAllDocuments`, 'Begin');\n    this.cache.closeAllDocuments();\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `CloseAllDocuments`, 'End');\n    return PdfTaskHelper.resolve(true);\n  }\n\n  /**\n   * Add text content to annotation\n   * @param page - page info\n   * @param pagePtr - pointer to page object\n   * @param annotationPtr - pointer to text annotation\n   * @param annotation - text annotation\n   * @returns whether text content is added to annotation\n   *\n   * @private\n   */\n  private addTextContent(\n    page: PdfPageObject,\n    pagePtr: number,\n    annotationPtr: number,\n    annotation: PdfTextAnnoObject,\n  ) {\n    if (!this.setAnnotString(annotationPtr, 'Contents', annotation.contents ?? '')) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'T', annotation.author || '')) {\n      return false;\n    }\n    if (annotation.modified && !this.setAnnotationDate(annotationPtr, 'M', annotation.modified)) {\n      return false;\n    }\n    if (\n      annotation.created &&\n      !this.setAnnotationDate(annotationPtr, 'CreationDate', annotation.created)\n    ) {\n      return false;\n    }\n    if (\n      annotation.inReplyToId &&\n      !this.setInReplyToId(pagePtr, annotationPtr, annotation.inReplyToId)\n    ) {\n      return false;\n    }\n    if (!this.setAnnotationIcon(annotationPtr, annotation.icon || PdfAnnotationIcon.Comment)) {\n      return false;\n    }\n    if (\n      !this.setAnnotationFlags(annotationPtr, annotation.flags || ['print', 'noZoom', 'noRotate'])\n    ) {\n      return false;\n    }\n    if (annotation.state && !this.setAnnotString(annotationPtr, 'State', annotation.state)) {\n      return false;\n    }\n    if (\n      annotation.stateModel &&\n      !this.setAnnotString(annotationPtr, 'StateModel', annotation.stateModel)\n    ) {\n      return false;\n    }\n    return true;\n  }\n\n  /**\n   * Add free text content to annotation\n   * @param page - page info\n   * @param pagePtr - pointer to page object\n   * @param annotationPtr - pointer to free text annotation\n   * @param annotation - free text annotation\n   * @returns whether free text content is added to annotation\n   *\n   * @private\n   */\n  private addFreeTextContent(\n    page: PdfPageObject,\n    pagePtr: number,\n    annotationPtr: number,\n    annotation: PdfFreeTextAnnoObject,\n  ) {\n    if (\n      annotation.created &&\n      !this.setAnnotationDate(annotationPtr, 'CreationDate', annotation.created)\n    ) {\n      return false;\n    }\n    if (annotation.flags && !this.setAnnotationFlags(annotationPtr, annotation.flags)) {\n      return false;\n    }\n    if (annotation.modified && !this.setAnnotationDate(annotationPtr, 'M', annotation.modified)) {\n      return false;\n    }\n    if (!this.setBorderStyle(annotationPtr, PdfAnnotationBorderStyle.SOLID, 0)) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'Contents', annotation.contents ?? '')) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'T', annotation.author || '')) {\n      return false;\n    }\n    if (!this.setAnnotationOpacity(annotationPtr, annotation.opacity ?? 1)) {\n      return false;\n    }\n    if (!this.setAnnotationTextAlignment(annotationPtr, annotation.textAlign)) {\n      return false;\n    }\n    if (!this.setAnnotationVerticalAlignment(annotationPtr, annotation.verticalAlign)) {\n      return false;\n    }\n    if (\n      !this.setAnnotationDefaultAppearance(\n        annotationPtr,\n        annotation.fontFamily,\n        annotation.fontSize,\n        annotation.fontColor,\n      )\n    ) {\n      return false;\n    }\n    if (annotation.intent && !this.setAnnotIntent(annotationPtr, annotation.intent)) {\n      return false;\n    }\n    if (!annotation.backgroundColor || annotation.backgroundColor === 'transparent') {\n      if (!this.pdfiumModule.EPDFAnnot_ClearColor(annotationPtr, PdfAnnotationColorType.Color)) {\n        return false;\n      }\n    } else if (\n      !this.setAnnotationColor(\n        annotationPtr,\n        annotation.backgroundColor ?? '#FFFFFF',\n        PdfAnnotationColorType.Color,\n      )\n    ) {\n      return false;\n    }\n    return true;\n  }\n\n  /**\n   * Set the rect of specified annotation\n   * @param page - page info that the annotation is belonged to\n   * @param pagePtr - pointer of page object\n   * @param annotationPtr - pointer to annotation object\n   * @param inkList - ink lists that added to the annotation\n   * @returns whether the ink lists is setted\n   *\n   * @private\n   */\n  private addInkStroke(\n    page: PdfPageObject,\n    pagePtr: number,\n    annotationPtr: number,\n    annotation: PdfInkAnnoObject,\n  ) {\n    if (\n      annotation.created &&\n      !this.setAnnotationDate(annotationPtr, 'CreationDate', annotation.created)\n    ) {\n      return false;\n    }\n    if (annotation.flags && !this.setAnnotationFlags(annotationPtr, annotation.flags)) {\n      return false;\n    }\n    if (annotation.modified && !this.setAnnotationDate(annotationPtr, 'M', annotation.modified)) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'Contents', annotation.contents ?? '')) {\n      return false;\n    }\n    if (\n      !this.setBorderStyle(annotationPtr, PdfAnnotationBorderStyle.SOLID, annotation.strokeWidth)\n    ) {\n      return false;\n    }\n    if (!this.setInkList(page, annotationPtr, annotation.inkList)) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'T', annotation.author || '')) {\n      return false;\n    }\n    if (!this.setAnnotationOpacity(annotationPtr, annotation.opacity ?? 1)) {\n      return false;\n    }\n    if (\n      !this.setAnnotationColor(\n        annotationPtr,\n        annotation.color ?? '#FFFF00',\n        PdfAnnotationColorType.Color,\n      )\n    ) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Add line content to annotation\n   * @param page - page info\n   * @param pagePtr - pointer to page object\n   * @param annotationPtr - pointer to line annotation\n   * @param annotation - line annotation\n   * @returns whether line content is added to annotation\n   *\n   * @private\n   */\n  private addLineContent(\n    page: PdfPageObject,\n    pagePtr: number,\n    annotationPtr: number,\n    annotation: PdfLineAnnoObject,\n  ) {\n    if (\n      annotation.created &&\n      !this.setAnnotationDate(annotationPtr, 'CreationDate', annotation.created)\n    ) {\n      return false;\n    }\n    if (annotation.flags && !this.setAnnotationFlags(annotationPtr, annotation.flags)) {\n      return false;\n    }\n    if (annotation.modified && !this.setAnnotationDate(annotationPtr, 'M', annotation.modified)) {\n      return false;\n    }\n    if (\n      !this.setLinePoints(\n        page,\n        annotationPtr,\n        annotation.linePoints.start,\n        annotation.linePoints.end,\n      )\n    ) {\n      return false;\n    }\n    if (\n      !this.setLineEndings(\n        annotationPtr,\n        annotation.lineEndings?.start ?? PdfAnnotationLineEnding.None,\n        annotation.lineEndings?.end ?? PdfAnnotationLineEnding.None,\n      )\n    ) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'Contents', annotation.contents ?? '')) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'T', annotation.author || '')) {\n      return false;\n    }\n    if (!this.setBorderStyle(annotationPtr, annotation.strokeStyle, annotation.strokeWidth)) {\n      return false;\n    }\n    if (!this.setBorderDashPattern(annotationPtr, annotation.strokeDashArray ?? [])) {\n      return false;\n    }\n    if (annotation.intent && !this.setAnnotIntent(annotationPtr, annotation.intent)) {\n      return false;\n    }\n    if (!annotation.color || annotation.color === 'transparent') {\n      if (\n        !this.pdfiumModule.EPDFAnnot_ClearColor(annotationPtr, PdfAnnotationColorType.InteriorColor)\n      ) {\n        return false;\n      }\n    } else if (\n      !this.setAnnotationColor(\n        annotationPtr,\n        annotation.color ?? '#FFFF00',\n        PdfAnnotationColorType.InteriorColor,\n      )\n    ) {\n      return false;\n    }\n    if (!this.setAnnotationOpacity(annotationPtr, annotation.opacity ?? 1)) {\n      return false;\n    }\n    if (\n      !this.setAnnotationColor(\n        annotationPtr,\n        annotation.strokeColor ?? '#FFFF00',\n        PdfAnnotationColorType.Color,\n      )\n    ) {\n      return false;\n    }\n    return true;\n  }\n\n  /**\n   * Add polygon or polyline content to annotation\n   * @param page - page info\n   * @param pagePtr - pointer to page object\n   * @param annotationPtr - pointer to polygon or polyline annotation\n   * @param annotation - polygon or polyline annotation\n   * @returns whether polygon or polyline content is added to annotation\n   *\n   * @private\n   */\n  private addPolyContent(\n    page: PdfPageObject,\n    pagePtr: number,\n    annotationPtr: number,\n    annotation: PdfPolygonAnnoObject | PdfPolylineAnnoObject,\n  ) {\n    if (\n      annotation.created &&\n      !this.setAnnotationDate(annotationPtr, 'CreationDate', annotation.created)\n    ) {\n      return false;\n    }\n    if (annotation.modified && !this.setAnnotationDate(annotationPtr, 'M', annotation.modified)) {\n      return false;\n    }\n    if (annotation.flags && !this.setAnnotationFlags(annotationPtr, annotation.flags)) {\n      return false;\n    }\n    if (\n      annotation.type === PdfAnnotationSubtype.POLYLINE &&\n      !this.setLineEndings(\n        annotationPtr,\n        annotation.lineEndings?.start ?? PdfAnnotationLineEnding.None,\n        annotation.lineEndings?.end ?? PdfAnnotationLineEnding.None,\n      )\n    ) {\n      return false;\n    }\n    if (!this.setPdfAnnoVertices(page, annotationPtr, annotation.vertices)) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'Contents', annotation.contents ?? '')) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'T', annotation.author || '')) {\n      return false;\n    }\n    if (!this.setBorderStyle(annotationPtr, annotation.strokeStyle, annotation.strokeWidth)) {\n      return false;\n    }\n    if (!this.setBorderDashPattern(annotationPtr, annotation.strokeDashArray ?? [])) {\n      return false;\n    }\n    if (annotation.intent && !this.setAnnotIntent(annotationPtr, annotation.intent)) {\n      return false;\n    }\n    if (!annotation.color || annotation.color === 'transparent') {\n      if (\n        !this.pdfiumModule.EPDFAnnot_ClearColor(annotationPtr, PdfAnnotationColorType.InteriorColor)\n      ) {\n        return false;\n      }\n    } else if (\n      !this.setAnnotationColor(\n        annotationPtr,\n        annotation.color ?? '#FFFF00',\n        PdfAnnotationColorType.InteriorColor,\n      )\n    ) {\n      return false;\n    }\n    if (!this.setAnnotationOpacity(annotationPtr, annotation.opacity ?? 1)) {\n      return false;\n    }\n    if (\n      !this.setAnnotationColor(\n        annotationPtr,\n        annotation.strokeColor ?? '#FFFF00',\n        PdfAnnotationColorType.Color,\n      )\n    ) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Add shape content to annotation\n   * @param page - page info\n   * @param pagePtr - pointer to page object\n   * @param annotationPtr - pointer to shape annotation\n   * @param annotation - shape annotation\n   * @returns whether shape content is added to annotation\n   *\n   * @private\n   */\n  addShapeContent(\n    page: PdfPageObject,\n    pagePtr: number,\n    annotationPtr: number,\n    annotation: PdfCircleAnnoObject | PdfSquareAnnoObject,\n  ) {\n    if (\n      annotation.created &&\n      !this.setAnnotationDate(annotationPtr, 'CreationDate', annotation.created)\n    ) {\n      return false;\n    }\n    if (annotation.modified && !this.setAnnotationDate(annotationPtr, 'M', annotation.modified)) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'Contents', annotation.contents ?? '')) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'T', annotation.author || '')) {\n      return false;\n    }\n    if (!this.setBorderStyle(annotationPtr, annotation.strokeStyle, annotation.strokeWidth)) {\n      return false;\n    }\n    if (!this.setBorderDashPattern(annotationPtr, annotation.strokeDashArray ?? [])) {\n      return false;\n    }\n    if (!this.setAnnotationFlags(annotationPtr, annotation.flags)) {\n      return false;\n    }\n    if (!annotation.color || annotation.color === 'transparent') {\n      if (\n        !this.pdfiumModule.EPDFAnnot_ClearColor(annotationPtr, PdfAnnotationColorType.InteriorColor)\n      ) {\n        return false;\n      }\n    } else if (\n      !this.setAnnotationColor(\n        annotationPtr,\n        annotation.color ?? '#FFFF00',\n        PdfAnnotationColorType.InteriorColor,\n      )\n    ) {\n      return false;\n    }\n    if (!this.setAnnotationOpacity(annotationPtr, annotation.opacity ?? 1)) {\n      return false;\n    }\n    if (\n      !this.setAnnotationColor(\n        annotationPtr,\n        annotation.strokeColor ?? '#FFFF00',\n        PdfAnnotationColorType.Color,\n      )\n    ) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Add highlight content to annotation\n   * @param page - page info\n   * @param annotationPtr - pointer to highlight annotation\n   * @param annotation - highlight annotation\n   * @returns whether highlight content is added to annotation\n   *\n   * @private\n   */\n  addTextMarkupContent(\n    page: PdfPageObject,\n    pagePtr: number,\n    annotationPtr: number,\n    annotation:\n      | PdfHighlightAnnoObject\n      | PdfUnderlineAnnoObject\n      | PdfStrikeOutAnnoObject\n      | PdfSquigglyAnnoObject,\n  ) {\n    if (\n      annotation.created &&\n      !this.setAnnotationDate(annotationPtr, 'CreationDate', annotation.created)\n    ) {\n      return false;\n    }\n    if (annotation.custom && !this.setAnnotCustom(annotationPtr, annotation.custom)) {\n      return false;\n    }\n    if (annotation.flags && !this.setAnnotationFlags(annotationPtr, annotation.flags)) {\n      return false;\n    }\n    if (annotation.modified && !this.setAnnotationDate(annotationPtr, 'M', annotation.modified)) {\n      return false;\n    }\n    if (!this.syncQuadPointsAnno(page, annotationPtr, annotation.segmentRects)) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'Contents', annotation.contents ?? '')) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'T', annotation.author || '')) {\n      return false;\n    }\n    if (!this.setAnnotationOpacity(annotationPtr, annotation.opacity ?? 1)) {\n      return false;\n    }\n    if (\n      !this.setAnnotationColor(\n        annotationPtr,\n        annotation.color ?? '#FFFF00',\n        PdfAnnotationColorType.Color,\n      )\n    ) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Add contents to stamp annotation\n   * @param docPtr - pointer to pdf document object\n   * @param page - page info\n   * @param pagePtr - pointer to page object\n   * @param annotationPtr - pointer to stamp annotation\n   * @param rect - rect of stamp annotation\n   * @param contents - contents of stamp annotation\n   * @returns whether contents is added to annotation\n   *\n   * @private\n   */\n  addStampContent(\n    docPtr: number,\n    page: PdfPageObject,\n    pagePtr: number,\n    annotationPtr: number,\n    annotation: PdfStampAnnoObject,\n    imageData?: ImageData,\n  ) {\n    if (\n      annotation.created &&\n      !this.setAnnotationDate(annotationPtr, 'CreationDate', annotation.created)\n    ) {\n      return false;\n    }\n    if (annotation.flags && !this.setAnnotationFlags(annotationPtr, annotation.flags)) {\n      return false;\n    }\n    if (annotation.modified && !this.setAnnotationDate(annotationPtr, 'M', annotation.modified)) {\n      return false;\n    }\n    if (annotation.icon && !this.setAnnotationIcon(annotationPtr, annotation.icon)) {\n      return false;\n    }\n    if (annotation.subject && !this.setAnnotString(annotationPtr, 'Subj', annotation.subject)) {\n      return false;\n    }\n    if (!this.setAnnotString(annotationPtr, 'Contents', annotation.contents ?? '')) {\n      return false;\n    }\n    if (imageData) {\n      for (let i = this.pdfiumModule.FPDFAnnot_GetObjectCount(annotationPtr) - 1; i >= 0; i--) {\n        this.pdfiumModule.FPDFAnnot_RemoveObject(annotationPtr, i);\n      }\n\n      if (!this.addImageObject(docPtr, page, pagePtr, annotationPtr, annotation.rect, imageData)) {\n        return false;\n      }\n    }\n    if (!this.pdfiumModule.EPDFAnnot_UpdateAppearanceToRect(annotationPtr, PdfStampFit.Cover)) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Add image object to annotation\n   * @param docPtr - pointer to pdf document object\n   * @param page - page info\n   * @param pagePtr - pointer to page object\n   * @param annotationPtr - pointer to stamp annotation\n   * @param position - position of image\n   * @param imageData - data of image\n   * @returns whether image is added to annotation\n   *\n   * @private\n   */\n  addImageObject(\n    docPtr: number,\n    page: PdfPageObject,\n    pagePtr: number,\n    annotationPtr: number,\n    rect: Rect,\n    imageData: ImageData,\n  ) {\n    const bytesPerPixel = 4;\n    const pixelCount = imageData.width * imageData.height;\n\n    const bitmapBufferPtr = this.memoryManager.malloc(bytesPerPixel * pixelCount);\n    if (!bitmapBufferPtr) {\n      return false;\n    }\n\n    for (let i = 0; i < pixelCount; i++) {\n      const red = imageData.data[i * bytesPerPixel];\n      const green = imageData.data[i * bytesPerPixel + 1];\n      const blue = imageData.data[i * bytesPerPixel + 2];\n      const alpha = imageData.data[i * bytesPerPixel + 3];\n\n      this.pdfiumModule.pdfium.setValue(bitmapBufferPtr + i * bytesPerPixel, blue, 'i8');\n      this.pdfiumModule.pdfium.setValue(bitmapBufferPtr + i * bytesPerPixel + 1, green, 'i8');\n      this.pdfiumModule.pdfium.setValue(bitmapBufferPtr + i * bytesPerPixel + 2, red, 'i8');\n      this.pdfiumModule.pdfium.setValue(bitmapBufferPtr + i * bytesPerPixel + 3, alpha, 'i8');\n    }\n\n    const format = BitmapFormat.Bitmap_BGRA;\n    const bitmapPtr = this.pdfiumModule.FPDFBitmap_CreateEx(\n      imageData.width,\n      imageData.height,\n      format,\n      bitmapBufferPtr,\n      0,\n    );\n    if (!bitmapPtr) {\n      this.memoryManager.free(bitmapBufferPtr);\n      return false;\n    }\n\n    const imageObjectPtr = this.pdfiumModule.FPDFPageObj_NewImageObj(docPtr);\n    if (!imageObjectPtr) {\n      this.pdfiumModule.FPDFBitmap_Destroy(bitmapPtr);\n      this.memoryManager.free(bitmapBufferPtr);\n      return false;\n    }\n\n    if (!this.pdfiumModule.FPDFImageObj_SetBitmap(pagePtr, 0, imageObjectPtr, bitmapPtr)) {\n      this.pdfiumModule.FPDFBitmap_Destroy(bitmapPtr);\n      this.pdfiumModule.FPDFPageObj_Destroy(imageObjectPtr);\n      this.memoryManager.free(bitmapBufferPtr);\n      return false;\n    }\n\n    const matrixPtr = this.memoryManager.malloc(6 * 4);\n    this.pdfiumModule.pdfium.setValue(matrixPtr, imageData.width, 'float');\n    this.pdfiumModule.pdfium.setValue(matrixPtr + 4, 0, 'float');\n    this.pdfiumModule.pdfium.setValue(matrixPtr + 8, 0, 'float');\n    this.pdfiumModule.pdfium.setValue(matrixPtr + 12, imageData.height, 'float');\n    this.pdfiumModule.pdfium.setValue(matrixPtr + 16, 0, 'float');\n    this.pdfiumModule.pdfium.setValue(matrixPtr + 20, 0, 'float');\n    if (!this.pdfiumModule.FPDFPageObj_SetMatrix(imageObjectPtr, matrixPtr)) {\n      this.memoryManager.free(matrixPtr);\n      this.pdfiumModule.FPDFBitmap_Destroy(bitmapPtr);\n      this.pdfiumModule.FPDFPageObj_Destroy(imageObjectPtr);\n      this.memoryManager.free(bitmapBufferPtr);\n      return false;\n    }\n    this.memoryManager.free(matrixPtr);\n\n    const pagePos = this.convertDevicePointToPagePoint(page, {\n      x: rect.origin.x,\n      y: rect.origin.y + imageData.height, // shift down by the image height\n    });\n    this.pdfiumModule.FPDFPageObj_Transform(imageObjectPtr, 1, 0, 0, 1, pagePos.x, pagePos.y);\n\n    if (!this.pdfiumModule.FPDFAnnot_AppendObject(annotationPtr, imageObjectPtr)) {\n      this.pdfiumModule.FPDFBitmap_Destroy(bitmapPtr);\n      this.pdfiumModule.FPDFPageObj_Destroy(imageObjectPtr);\n      this.memoryManager.free(bitmapBufferPtr);\n      return false;\n    }\n\n    this.pdfiumModule.FPDFBitmap_Destroy(bitmapPtr);\n    this.memoryManager.free(bitmapBufferPtr);\n\n    return true;\n  }\n\n  /**\n   * Save document to array buffer\n   * @param docPtr - pointer to pdf document\n   * @returns array buffer contains the pdf content\n   *\n   * @private\n   */\n  saveDocument(docPtr: number) {\n    const writerPtr = this.pdfiumModule.PDFiumExt_OpenFileWriter();\n    this.pdfiumModule.PDFiumExt_SaveAsCopy(docPtr, writerPtr);\n    const size = this.pdfiumModule.PDFiumExt_GetFileWriterSize(writerPtr);\n    const dataPtr = this.memoryManager.malloc(size);\n    this.pdfiumModule.PDFiumExt_GetFileWriterData(writerPtr, dataPtr, size);\n    const buffer = new ArrayBuffer(size);\n    const view = new DataView(buffer);\n    for (let i = 0; i < size; i++) {\n      view.setInt8(i, this.pdfiumModule.pdfium.getValue(dataPtr + i, 'i8'));\n    }\n    this.memoryManager.free(dataPtr);\n    this.pdfiumModule.PDFiumExt_CloseFileWriter(writerPtr);\n\n    return buffer;\n  }\n\n  /**\n   * Read Catalog /Lang via EPDFCatalog_GetLanguage (UTF-16LE → JS string).\n   * Returns:\n   *   null  -> /Lang not present (getter returned 0) OR doc not open,\n   *   ''    -> /Lang exists but is explicitly empty,\n   *   'en', 'en-US', ... -> normal tag.\n   *\n   * Note: EPDFCatalog_GetLanguage lengths are BYTES (incl. trailing NUL).\n   *\n   * @private\n   */\n  private readCatalogLanguage(docPtr: number): string | null {\n    // Probe required length in BYTES (includes UTF-16LE trailing NUL).\n    const byteLen = this.pdfiumModule.EPDFCatalog_GetLanguage(docPtr, 0, 0) >>> 0;\n\n    // 0 => /Lang missing (or invalid doc/root) → expose as null\n    if (byteLen === 0) return null;\n\n    // 2 => empty UTF-16LE string (just the NUL) → explicitly empty\n    if (byteLen === 2) return '';\n\n    // Read exact buffer to avoid extra allocs.\n    return readString(\n      this.pdfiumModule.pdfium,\n      (buffer, bufferLength) =>\n        this.pdfiumModule.EPDFCatalog_GetLanguage(docPtr, buffer, bufferLength),\n      this.pdfiumModule.pdfium.UTF16ToString,\n      byteLen,\n    );\n  }\n\n  /**\n   * Read metadata from pdf document\n   * @param docPtr - pointer to pdf document\n   * @param key - key of metadata field\n   * @returns metadata value\n   *\n   * @private\n   */\n  private readMetaText(docPtr: number, key: string): string | null {\n    const exists = !!this.pdfiumModule.EPDF_HasMetaText(docPtr, key);\n    if (!exists) return null;\n\n    const len = this.pdfiumModule.FPDF_GetMetaText(docPtr, key, 0, 0);\n    if (len === 2) return '';\n\n    // Read with an exact buffer to avoid extra allocations.\n    return readString(\n      this.pdfiumModule.pdfium,\n      (buffer, bufferLength) =>\n        this.pdfiumModule.FPDF_GetMetaText(docPtr, key, buffer, bufferLength),\n      this.pdfiumModule.pdfium.UTF16ToString,\n      len,\n    );\n  }\n\n  /**\n   * Write metadata into the PDF's Info dictionary.\n   * If `value` is null or empty string, the key is removed.\n   * @param docPtr - pointer to pdf document\n   * @param key - key of metadata field\n   * @param value - value of metadata field\n   * @returns whether metadata is written to the pdf document\n   *\n   * @private\n   */\n  private setMetaText(docPtr: number, key: string, value: string | null | undefined): boolean {\n    // Remove key if value is null/undefined/empty\n    if (value == null || value.length === 0) {\n      // Pass nullptr for value → removal in our C++ implementation\n      const ok = this.pdfiumModule.EPDF_SetMetaText(docPtr, key, 0);\n      return !!ok;\n    }\n\n    // UTF-16LE buffer (+2 bytes for NUL)\n    const bytes = 2 * (value.length + 1);\n    const ptr = this.memoryManager.malloc(bytes);\n    try {\n      this.pdfiumModule.pdfium.stringToUTF16(value, ptr, bytes);\n      const ok = this.pdfiumModule.EPDF_SetMetaText(docPtr, key, ptr);\n      return !!ok;\n    } finally {\n      this.memoryManager.free(ptr);\n    }\n  }\n\n  /**\n   * Read the document's trapped status via PDFium.\n   * Falls back to `Unknown` on unexpected values.\n   *\n   * @private\n   */\n  private getMetaTrapped(docPtr: number): PdfTrappedStatus {\n    const raw = Number(this.pdfiumModule.EPDF_GetMetaTrapped(docPtr));\n    switch (raw) {\n      case PdfTrappedStatus.NotSet:\n      case PdfTrappedStatus.True:\n      case PdfTrappedStatus.False:\n      case PdfTrappedStatus.Unknown:\n        return raw;\n      default:\n        return PdfTrappedStatus.Unknown;\n    }\n  }\n\n  /**\n   * Write (or clear) the document's trapped status via PDFium.\n   * Pass `null`/`undefined` to remove the `/Trapped` key.\n   *\n   * @private\n   */\n  private setMetaTrapped(docPtr: number, status: PdfTrappedStatus | null | undefined): boolean {\n    // Treat null/undefined as “remove key” — the C++ side handles NotSet by\n    // deleting /Trapped from the Info dictionary.\n    const toSet = status == null || status === undefined ? PdfTrappedStatus.NotSet : status;\n\n    // Guard against unexpected values.\n    const valid =\n      toSet === PdfTrappedStatus.NotSet ||\n      toSet === PdfTrappedStatus.True ||\n      toSet === PdfTrappedStatus.False ||\n      toSet === PdfTrappedStatus.Unknown;\n\n    if (!valid) return false;\n\n    return !!this.pdfiumModule.EPDF_SetMetaTrapped(docPtr, toSet);\n  }\n\n  /**\n   * Get the number of keys in the document's Info dictionary.\n   * @param docPtr - pointer to pdf document\n   * @param customOnly - if true, only count non-reserved (custom) keys; if false, count all keys.\n   * @returns the number of keys (possibly 0). On error, returns 0.\n   *\n   * @private\n   */\n  private getMetaKeyCount(docPtr: number, customOnly: boolean): number {\n    return Number(this.pdfiumModule.EPDF_GetMetaKeyCount(docPtr, customOnly)) | 0;\n  }\n\n  /**\n   * Get the name of the Info dictionary key at |index|.\n   * @param docPtr - pointer to pdf document\n   * @param index - 0-based key index in the order returned by PDFium.\n   * @param customOnly - if true, indexes only over non-reserved (custom) keys; if false, indexes over all keys.\n   * @returns the name of the key, or null if the key is not found.\n   *\n   * @private\n   */\n  private getMetaKeyName(docPtr: number, index: number, customOnly: boolean): string | null {\n    const len = this.pdfiumModule.EPDF_GetMetaKeyName(docPtr, index, customOnly, 0, 0);\n    if (!len) return null;\n    return readString(\n      this.pdfiumModule.pdfium,\n      (buffer, buflen) =>\n        this.pdfiumModule.EPDF_GetMetaKeyName(docPtr, index, customOnly, buffer, buflen),\n      this.pdfiumModule.pdfium.UTF8ToString,\n      len,\n    );\n  }\n\n  /**\n   * Read all metadata from the document's Info dictionary.\n   * @param docPtr - pointer to pdf document\n   * @param customOnly - if true, only read non-reserved (custom) keys; if false, read all keys.\n   * @returns all metadata\n   *\n   * @private\n   */\n  private readAllMeta(docPtr: number, customOnly: boolean = true): Record<string, string | null> {\n    const n = this.getMetaKeyCount(docPtr, customOnly);\n    const out: Record<string, string | null> = {};\n    for (let i = 0; i < n; i++) {\n      const key = this.getMetaKeyName(docPtr, i, customOnly);\n      if (!key) continue;\n      out[key] = this.readMetaText(docPtr, key); // returns null if not present\n    }\n    return out;\n  }\n\n  /**\n   * Read bookmarks in the pdf document\n   * @param docPtr - pointer to pdf document\n   * @param rootBookmarkPtr - pointer to root bookmark\n   * @returns bookmarks in the pdf document\n   *\n   * @private\n   */\n  readPdfBookmarks(docPtr: number, rootBookmarkPtr = 0) {\n    let bookmarkPtr = this.pdfiumModule.FPDFBookmark_GetFirstChild(docPtr, rootBookmarkPtr);\n\n    const bookmarks: PdfBookmarkObject[] = [];\n    while (bookmarkPtr) {\n      const bookmark = this.readPdfBookmark(docPtr, bookmarkPtr);\n      bookmarks.push(bookmark);\n\n      const nextBookmarkPtr = this.pdfiumModule.FPDFBookmark_GetNextSibling(docPtr, bookmarkPtr);\n\n      bookmarkPtr = nextBookmarkPtr;\n    }\n\n    return bookmarks;\n  }\n\n  /**\n   * Read bookmark in the pdf document\n   * @param docPtr - pointer to pdf document\n   * @param bookmarkPtr - pointer to bookmark object\n   * @returns pdf bookmark object\n   *\n   * @private\n   */\n  private readPdfBookmark(docPtr: number, bookmarkPtr: number): PdfBookmarkObject {\n    const title = readString(\n      this.pdfiumModule.pdfium,\n      (buffer, bufferLength) => {\n        return this.pdfiumModule.FPDFBookmark_GetTitle(bookmarkPtr, buffer, bufferLength);\n      },\n      this.pdfiumModule.pdfium.UTF16ToString,\n    );\n\n    const bookmarks = this.readPdfBookmarks(docPtr, bookmarkPtr);\n\n    const target = this.readPdfBookmarkTarget(\n      docPtr,\n      () => {\n        return this.pdfiumModule.FPDFBookmark_GetAction(bookmarkPtr);\n      },\n      () => {\n        return this.pdfiumModule.FPDFBookmark_GetDest(docPtr, bookmarkPtr);\n      },\n    );\n\n    return {\n      title,\n      target,\n      children: bookmarks,\n    };\n  }\n\n  /**\n   * Read text rects in pdf page\n   * @param page - pdf page info\n   * @param docPtr - pointer to pdf document\n   * @param pagePtr - pointer to pdf page\n   * @param textPagePtr - pointer to pdf text page\n   * @returns text rects in the pdf page\n   *\n   * @public\n   */\n  private readPageTextRects(\n    page: PdfPageObject,\n    docPtr: number,\n    pagePtr: number,\n    textPagePtr: number,\n  ) {\n    const rectsCount = this.pdfiumModule.FPDFText_CountRects(textPagePtr, 0, -1);\n\n    const textRects: PdfTextRectObject[] = [];\n    for (let i = 0; i < rectsCount; i++) {\n      const topPtr = this.memoryManager.malloc(8);\n      const leftPtr = this.memoryManager.malloc(8);\n      const rightPtr = this.memoryManager.malloc(8);\n      const bottomPtr = this.memoryManager.malloc(8);\n      const isSucceed = this.pdfiumModule.FPDFText_GetRect(\n        textPagePtr,\n        i,\n        leftPtr,\n        topPtr,\n        rightPtr,\n        bottomPtr,\n      );\n      if (!isSucceed) {\n        this.memoryManager.free(leftPtr);\n        this.memoryManager.free(topPtr);\n        this.memoryManager.free(rightPtr);\n        this.memoryManager.free(bottomPtr);\n        continue;\n      }\n\n      const left = this.pdfiumModule.pdfium.getValue(leftPtr, 'double');\n      const top = this.pdfiumModule.pdfium.getValue(topPtr, 'double');\n      const right = this.pdfiumModule.pdfium.getValue(rightPtr, 'double');\n      const bottom = this.pdfiumModule.pdfium.getValue(bottomPtr, 'double');\n\n      this.memoryManager.free(leftPtr);\n      this.memoryManager.free(topPtr);\n      this.memoryManager.free(rightPtr);\n      this.memoryManager.free(bottomPtr);\n\n      const deviceXPtr = this.memoryManager.malloc(4);\n      const deviceYPtr = this.memoryManager.malloc(4);\n      this.pdfiumModule.FPDF_PageToDevice(\n        pagePtr,\n        0,\n        0,\n        page.size.width,\n        page.size.height,\n        0,\n        left,\n        top,\n        deviceXPtr,\n        deviceYPtr,\n      );\n      const x = this.pdfiumModule.pdfium.getValue(deviceXPtr, 'i32');\n      const y = this.pdfiumModule.pdfium.getValue(deviceYPtr, 'i32');\n      this.memoryManager.free(deviceXPtr);\n      this.memoryManager.free(deviceYPtr);\n\n      const rect = {\n        origin: {\n          x,\n          y,\n        },\n        size: {\n          width: Math.ceil(Math.abs(right - left)),\n          height: Math.ceil(Math.abs(top - bottom)),\n        },\n      };\n\n      const utf16Length = this.pdfiumModule.FPDFText_GetBoundedText(\n        textPagePtr,\n        left,\n        top,\n        right,\n        bottom,\n        0,\n        0,\n      );\n      const bytesCount = (utf16Length + 1) * 2; // include NIL\n      const textBuffer = this.memoryManager.malloc(bytesCount);\n      this.pdfiumModule.FPDFText_GetBoundedText(\n        textPagePtr,\n        left,\n        top,\n        right,\n        bottom,\n        textBuffer,\n        utf16Length,\n      );\n      const content = this.pdfiumModule.pdfium.UTF16ToString(textBuffer);\n      this.memoryManager.free(textBuffer);\n\n      const charIndex = this.pdfiumModule.FPDFText_GetCharIndexAtPos(textPagePtr, left, top, 2, 2);\n      let fontFamily = '';\n      let fontSize = rect.size.height;\n      if (charIndex >= 0) {\n        fontSize = this.pdfiumModule.FPDFText_GetFontSize(textPagePtr, charIndex);\n\n        const fontNameLength = this.pdfiumModule.FPDFText_GetFontInfo(\n          textPagePtr,\n          charIndex,\n          0,\n          0,\n          0,\n        );\n\n        const bytesCount = fontNameLength + 1; // include NIL\n        const textBufferPtr = this.memoryManager.malloc(bytesCount);\n        const flagsPtr = this.memoryManager.malloc(4);\n        this.pdfiumModule.FPDFText_GetFontInfo(\n          textPagePtr,\n          charIndex,\n          textBufferPtr,\n          bytesCount,\n          flagsPtr,\n        );\n        fontFamily = this.pdfiumModule.pdfium.UTF8ToString(textBufferPtr);\n        this.memoryManager.free(textBufferPtr);\n        this.memoryManager.free(flagsPtr);\n      }\n\n      const textRect: PdfTextRectObject = {\n        content,\n        rect,\n        font: {\n          family: fontFamily,\n          size: fontSize,\n        },\n      };\n\n      textRects.push(textRect);\n    }\n\n    return textRects;\n  }\n\n  /**\n   * Return geometric + logical text layout for one page\n   * (glyph-only implementation, no FPDFText_GetRect).\n   *\n   * @public\n   */\n  getPageGeometry(doc: PdfDocumentObject, page: PdfPageObject): PdfTask<PdfPageGeometry> {\n    const label = 'getPageGeometry';\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, label, 'Begin', doc.id);\n\n    /* ── guards ───────────────────────────────────────────── */\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, label, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    /* ── native handles ──────────────────────────────────── */\n    const pageCtx = ctx.acquirePage(page.index);\n    const textPagePtr = pageCtx.getTextPage();\n\n    /* ── 1. read ALL glyphs in logical order ─────────────── */\n    const glyphCount = this.pdfiumModule.FPDFText_CountChars(textPagePtr);\n    const glyphs: PdfGlyphObject[] = [];\n\n    for (let i = 0; i < glyphCount; i++) {\n      const g = this.readGlyphInfo(page, pageCtx.pagePtr, textPagePtr, i);\n      glyphs.push(g);\n    }\n\n    /* ── 2. build visual runs from glyph stream ───────────── */\n    const runs: PdfRun[] = this.buildRunsFromGlyphs(glyphs, textPagePtr);\n\n    /* ── 3. cleanup & resolve task ───────────────────────── */\n    pageCtx.release();\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, label, 'End', doc.id);\n    return PdfTaskHelper.resolve({ runs });\n  }\n\n  /**\n   * Group consecutive glyphs that belong to the same CPDF_TextObject\n   * using FPDFText_GetTextObject(), and calculate rotation from glyph positions.\n   */\n  private buildRunsFromGlyphs(glyphs: PdfGlyphObject[], textPagePtr: number): PdfRun[] {\n    const runs: PdfRun[] = [];\n    let current: PdfRun | null = null;\n    let curObjPtr: number | null = null;\n    let bounds: { minX: number; minY: number; maxX: number; maxY: number } | null = null;\n\n    /** ── main loop ──────────────────────────────────────────── */\n    for (let i = 0; i < glyphs.length; i++) {\n      const g = glyphs[i];\n\n      /* 1 — find the CPDF_TextObject this glyph belongs to */\n      const objPtr = this.pdfiumModule.FPDFText_GetTextObject(textPagePtr, i) as number;\n\n      /* 2 — start a new run when the text object changes */\n      if (objPtr !== curObjPtr) {\n        curObjPtr = objPtr;\n        current = {\n          rect: {\n            x: g.origin.x,\n            y: g.origin.y,\n            width: g.size.width,\n            height: g.size.height,\n          },\n          charStart: i,\n          glyphs: [],\n        };\n        bounds = {\n          minX: g.origin.x,\n          minY: g.origin.y,\n          maxX: g.origin.x + g.size.width,\n          maxY: g.origin.y + g.size.height,\n        };\n        runs.push(current);\n      }\n\n      /* 3 — append the slim glyph record */\n      current!.glyphs.push({\n        x: g.origin.x,\n        y: g.origin.y,\n        width: g.size.width,\n        height: g.size.height,\n        flags: g.isEmpty ? 2 : g.isSpace ? 1 : 0,\n      });\n\n      /* 4 — expand the run's bounding rect */\n      if (g.isEmpty) {\n        continue;\n      }\n\n      const right = g.origin.x + g.size.width;\n      const bottom = g.origin.y + g.size.height;\n\n      // Update bounds\n      bounds!.minX = Math.min(bounds!.minX, g.origin.x);\n      bounds!.minY = Math.min(bounds!.minY, g.origin.y);\n      bounds!.maxX = Math.max(bounds!.maxX, right);\n      bounds!.maxY = Math.max(bounds!.maxY, bottom);\n\n      // Calculate final rect from bounds\n      current!.rect.x = bounds!.minX;\n      current!.rect.y = bounds!.minY;\n      current!.rect.width = bounds!.maxX - bounds!.minX;\n      current!.rect.height = bounds!.maxY - bounds!.minY;\n    }\n\n    return runs;\n  }\n\n  /**\n   * Extract glyph geometry + metadata for `charIndex`\n   *\n   * Returns device–space coordinates:\n   *   x,y  → **top-left** corner (integer-pixels)\n   *   w,h  → width / height (integer-pixels, ≥ 1)\n   *\n   * And two flags:\n   *   isSpace → true if the glyph's Unicode code-point is U+0020\n   */\n  private readGlyphInfo(\n    page: PdfPageObject,\n    pagePtr: number,\n    textPagePtr: number,\n    charIndex: number,\n  ): PdfGlyphObject {\n    // ── native stack temp pointers ──────────────────────────────\n    const dx1Ptr = this.memoryManager.malloc(4);\n    const dy1Ptr = this.memoryManager.malloc(4);\n    const dx2Ptr = this.memoryManager.malloc(4);\n    const dy2Ptr = this.memoryManager.malloc(4);\n    const rectPtr = this.memoryManager.malloc(16); // 4 floats = 16 bytes\n\n    let x = 0,\n      y = 0,\n      width = 0,\n      height = 0,\n      isSpace = false;\n\n    // ── 1) raw glyph bbox in                      page-user-space\n    if (this.pdfiumModule.FPDFText_GetLooseCharBox(textPagePtr, charIndex, rectPtr)) {\n      const left = this.pdfiumModule.pdfium.getValue(rectPtr, 'float');\n      const top = this.pdfiumModule.pdfium.getValue(rectPtr + 4, 'float');\n      const right = this.pdfiumModule.pdfium.getValue(rectPtr + 8, 'float');\n      const bottom = this.pdfiumModule.pdfium.getValue(rectPtr + 12, 'float');\n\n      if (left === right || top === bottom) {\n        [rectPtr, dx1Ptr, dy1Ptr, dx2Ptr, dy2Ptr].forEach((p) => this.memoryManager.free(p));\n\n        return {\n          origin: { x: 0, y: 0 },\n          size: { width: 0, height: 0 },\n          isEmpty: true,\n        };\n      }\n\n      // ── 2) map 2 opposite corners to            device-space\n      this.pdfiumModule.FPDF_PageToDevice(\n        pagePtr,\n        0,\n        0,\n        page.size.width,\n        page.size.height,\n        /*rotate=*/ 0,\n        left,\n        top,\n        dx1Ptr,\n        dy1Ptr,\n      );\n      this.pdfiumModule.FPDF_PageToDevice(\n        pagePtr,\n        0,\n        0,\n        page.size.width,\n        page.size.height,\n        /*rotate=*/ 0,\n        right,\n        bottom,\n        dx2Ptr,\n        dy2Ptr,\n      );\n\n      const x1 = this.pdfiumModule.pdfium.getValue(dx1Ptr, 'i32');\n      const y1 = this.pdfiumModule.pdfium.getValue(dy1Ptr, 'i32');\n      const x2 = this.pdfiumModule.pdfium.getValue(dx2Ptr, 'i32');\n      const y2 = this.pdfiumModule.pdfium.getValue(dy2Ptr, 'i32');\n\n      x = Math.min(x1, x2);\n      y = Math.min(y1, y2);\n      width = Math.max(1, Math.abs(x2 - x1));\n      height = Math.max(1, Math.abs(y2 - y1));\n\n      // ── 3) extra flags ───────────────────────────────────────\n      const uc = this.pdfiumModule.FPDFText_GetUnicode(textPagePtr, charIndex);\n      isSpace = uc === 32;\n    }\n\n    // ── free tmps ───────────────────────────────────────────────\n    [rectPtr, dx1Ptr, dy1Ptr, dx2Ptr, dy2Ptr].forEach((p) => this.memoryManager.free(p));\n\n    return {\n      origin: { x, y },\n      size: { width, height },\n      ...(isSpace && { isSpace }),\n    };\n  }\n\n  /**\n   * Geometry-only text extraction\n   * ------------------------------------------\n   * Returns every glyph on the requested page\n   * in the logical order delivered by PDFium.\n   *\n   * The promise resolves to an array of objects:\n   *   {\n   *     idx:     number;            // glyph index on the page (0…n-1)\n   *     origin:  { x: number; y: number };\n   *     size:    { width: number;  height: number };\n   *     angle:   number;            // degrees, counter-clock-wise\n   *     isSpace: boolean;           // true  → U+0020\n   *   }\n   *\n   * No Unicode is included; front-end decides whether to hydrate it.\n   */\n  public getPageGlyphs(doc: PdfDocumentObject, page: PdfPageObject): PdfTask<PdfGlyphObject[]> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'getPageGlyphs', doc, page);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'getPageGlyphs', 'Begin', doc.id);\n\n    // ── 1) safety: document handle must be alive ───────────────\n    const ctx = this.cache.getContext(doc.id);\n\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'getPageGlyphs', 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    // ── 2) load page + text page handles ───────────────────────\n    const pageCtx = ctx.acquirePage(page.index);\n    const textPagePtr = pageCtx.getTextPage();\n\n    // ── 3) iterate all glyphs in logical order ─────────────────\n    const total = this.pdfiumModule.FPDFText_CountChars(textPagePtr);\n    const glyphs = new Array(total);\n\n    for (let i = 0; i < total; i++) {\n      const g = this.readGlyphInfo(page, pageCtx.pagePtr, textPagePtr, i);\n\n      if (g.isEmpty) {\n        continue;\n      }\n\n      glyphs[i] = { ...g };\n    }\n\n    // ── 4) clean-up native handles ─────────────────────────────\n    pageCtx.release();\n\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'getPageGlyphs', 'End', doc.id);\n\n    return PdfTaskHelper.resolve(glyphs);\n  }\n\n  private readCharBox(\n    page: PdfPageObject,\n    pagePtr: number,\n    textPagePtr: number,\n    charIndex: number,\n  ): Rect {\n    const topPtr = this.memoryManager.malloc(8);\n    const leftPtr = this.memoryManager.malloc(8);\n    const bottomPtr = this.memoryManager.malloc(8);\n    const rightPtr = this.memoryManager.malloc(8);\n    let x = 0;\n    let y = 0;\n    let width = 0;\n    let height = 0;\n    if (\n      this.pdfiumModule.FPDFText_GetCharBox(\n        textPagePtr,\n        charIndex,\n        leftPtr,\n        rightPtr,\n        bottomPtr,\n        topPtr,\n      )\n    ) {\n      const top = this.pdfiumModule.pdfium.getValue(topPtr, 'double');\n      const left = this.pdfiumModule.pdfium.getValue(leftPtr, 'double');\n      const bottom = this.pdfiumModule.pdfium.getValue(bottomPtr, 'double');\n      const right = this.pdfiumModule.pdfium.getValue(rightPtr, 'double');\n\n      const deviceXPtr = this.memoryManager.malloc(4);\n      const deviceYPtr = this.memoryManager.malloc(4);\n      this.pdfiumModule.FPDF_PageToDevice(\n        pagePtr,\n        0,\n        0,\n        page.size.width,\n        page.size.height,\n        0,\n        left,\n        top,\n        deviceXPtr,\n        deviceYPtr,\n      );\n      x = this.pdfiumModule.pdfium.getValue(deviceXPtr, 'i32');\n      y = this.pdfiumModule.pdfium.getValue(deviceYPtr, 'i32');\n      this.memoryManager.free(deviceXPtr);\n      this.memoryManager.free(deviceYPtr);\n\n      width = Math.ceil(Math.abs(right - left));\n      height = Math.ceil(Math.abs(top - bottom));\n    }\n    this.memoryManager.free(topPtr);\n    this.memoryManager.free(leftPtr);\n    this.memoryManager.free(bottomPtr);\n    this.memoryManager.free(rightPtr);\n\n    return {\n      origin: {\n        x,\n        y,\n      },\n      size: {\n        width,\n        height,\n      },\n    };\n  }\n\n  /**\n   * Read page annotations\n   *\n   * @param ctx - document context\n   * @param page - page info\n   * @returns annotations on the pdf page\n   *\n   * @private\n   */\n  private readPageAnnotations(ctx: DocumentContext, page: PdfPageObject) {\n    return ctx.borrowPage(page.index, (pageCtx) => {\n      const annotationCount = this.pdfiumModule.FPDFPage_GetAnnotCount(pageCtx.pagePtr);\n\n      const annotations: PdfAnnotationObject[] = [];\n      for (let i = 0; i < annotationCount; i++) {\n        pageCtx.withAnnotation(i, (annotPtr) => {\n          const anno = this.readPageAnnotation(ctx.docPtr, page, annotPtr, pageCtx);\n          if (anno) annotations.push(anno);\n        });\n      }\n      return annotations;\n    });\n  }\n\n  /**\n   * Read page annotations\n   *\n   * @param ctx - document context\n   * @param page - page info\n   * @returns annotations on the pdf page\n   *\n   * @private\n   */\n  private readPageAnnotationsRaw(ctx: DocumentContext, page: PdfPageObject): PdfAnnotationObject[] {\n    const count = this.pdfiumModule.EPDFPage_GetAnnotCountRaw(ctx.docPtr, page.index);\n    if (count <= 0) return [];\n\n    const out: PdfAnnotationObject[] = [];\n\n    const pageCtx = ctx.acquirePage(page.index);\n\n    for (let i = 0; i < count; ++i) {\n      const annotPtr = this.pdfiumModule.EPDFPage_GetAnnotRaw(ctx.docPtr, page.index, i);\n      if (!annotPtr) continue;\n\n      try {\n        const anno = this.readPageAnnotation(ctx.docPtr, page, annotPtr, pageCtx);\n        if (anno) out.push(anno);\n      } finally {\n        this.pdfiumModule.FPDFPage_CloseAnnot(annotPtr);\n      }\n    }\n    return out;\n  }\n\n  /**\n   * Read pdf annotation from pdf document\n   *\n   * @param docPtr - pointer to pdf document\n   * @param page - page info\n   * @param annotationPtr - pointer to pdf annotation\n   * @param pageCtx - page context\n   * @returns pdf annotation\n   *\n   * @private\n   */\n  private readPageAnnotation(\n    docPtr: number,\n    page: PdfPageObject,\n    annotationPtr: number,\n    pageCtx?: PageContext,\n  ) {\n    let index = this.getAnnotString(annotationPtr, 'NM');\n    if (!index || !isUuidV4(index)) {\n      index = uuidV4();\n      this.setAnnotString(annotationPtr, 'NM', index);\n    }\n    const subType = this.pdfiumModule.FPDFAnnot_GetSubtype(\n      annotationPtr,\n    ) as PdfAnnotationObject['type'];\n    let annotation: PdfAnnotationObject | undefined;\n    switch (subType) {\n      case PdfAnnotationSubtype.TEXT:\n        {\n          annotation = this.readPdfTextAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.FREETEXT:\n        {\n          annotation = this.readPdfFreeTextAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.LINK:\n        {\n          annotation = this.readPdfLinkAnno(page, docPtr, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.WIDGET:\n        if (pageCtx) {\n          return this.readPdfWidgetAnno(page, annotationPtr, pageCtx.getFormHandle(), index);\n        }\n      case PdfAnnotationSubtype.FILEATTACHMENT:\n        {\n          annotation = this.readPdfFileAttachmentAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.INK:\n        {\n          annotation = this.readPdfInkAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.POLYGON:\n        {\n          annotation = this.readPdfPolygonAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.POLYLINE:\n        {\n          annotation = this.readPdfPolylineAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.LINE:\n        {\n          annotation = this.readPdfLineAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.HIGHLIGHT:\n        annotation = this.readPdfHighlightAnno(page, annotationPtr, index);\n        break;\n      case PdfAnnotationSubtype.STAMP:\n        {\n          annotation = this.readPdfStampAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.SQUARE:\n        {\n          annotation = this.readPdfSquareAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.CIRCLE:\n        {\n          annotation = this.readPdfCircleAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.UNDERLINE:\n        {\n          annotation = this.readPdfUnderlineAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.SQUIGGLY:\n        {\n          annotation = this.readPdfSquigglyAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.STRIKEOUT:\n        {\n          annotation = this.readPdfStrikeOutAnno(page, annotationPtr, index);\n        }\n        break;\n      case PdfAnnotationSubtype.CARET:\n        {\n          annotation = this.readPdfCaretAnno(page, annotationPtr, index);\n        }\n        break;\n      default:\n        {\n          annotation = this.readPdfAnno(page, subType, annotationPtr, index);\n        }\n        break;\n    }\n\n    return annotation;\n  }\n\n  /**\n   * Return the colour stored directly in the annotation dictionary's `/C` entry.\n   *\n   * Most PDFs created by Acrobat, Microsoft Office, LaTeX, etc. include this entry.\n   * When the key is absent (common in macOS Preview, Chrome, Drawboard) the call\n   * fails and the function returns `undefined`.\n   *\n   * @param annotationPtr - pointer to an `FPDF_ANNOTATION`\n   * @returns An RGBA tuple (0-255 channels) or `undefined` if no `/C` entry exists\n   *\n   * @private\n   */\n  private readAnnotationColor(\n    annotationPtr: number,\n    colorType: PdfAnnotationColorType = PdfAnnotationColorType.Color,\n  ): PdfColor | undefined {\n    const rPtr = this.memoryManager.malloc(4);\n    const gPtr = this.memoryManager.malloc(4);\n    const bPtr = this.memoryManager.malloc(4);\n\n    // colourType 0 = \"colour\" (stroke/fill); other types are interior/border\n    const ok = this.pdfiumModule.EPDFAnnot_GetColor(annotationPtr, colorType, rPtr, gPtr, bPtr);\n\n    let colour: PdfColor | undefined;\n\n    if (ok) {\n      colour = {\n        red: this.pdfiumModule.pdfium.getValue(rPtr, 'i32') & 0xff,\n        green: this.pdfiumModule.pdfium.getValue(gPtr, 'i32') & 0xff,\n        blue: this.pdfiumModule.pdfium.getValue(bPtr, 'i32') & 0xff,\n      };\n    }\n\n    this.memoryManager.free(rPtr);\n    this.memoryManager.free(gPtr);\n    this.memoryManager.free(bPtr);\n\n    return colour;\n  }\n\n  /**\n   * Get the fill/stroke colour annotation.\n   *\n   * @param annotationPtr - pointer to the annotation whose colour is being set\n   * @param colorType - which colour to get (0 = fill, 1 = stroke)\n   * @returns WebColor with hex color\n   *\n   * @private\n   */\n  private getAnnotationColor(\n    annotationPtr: number,\n    colorType: PdfAnnotationColorType = PdfAnnotationColorType.Color,\n  ): WebColor | undefined {\n    const annotationColor = this.readAnnotationColor(annotationPtr, colorType);\n\n    return annotationColor ? pdfColorToWebColor(annotationColor) : undefined;\n  }\n\n  /**\n   * Set the fill/stroke colour for a **Highlight / Underline / StrikeOut / Squiggly** markup annotation.\n   *\n   * @param annotationPtr - pointer to the annotation whose colour is being set\n   * @param webAlphaColor - WebAlphaColor with hex color and opacity (0-1)\n   * @param shouldClearAP - whether to clear the /AP entry\n   * @param which - which colour to set (0 = fill, 1 = stroke)\n   * @returns `true` if the operation was successful\n   *\n   * @private\n   */\n  private setAnnotationColor(\n    annotationPtr: number,\n    webColor: WebColor,\n    colorType: PdfAnnotationColorType = PdfAnnotationColorType.Color,\n  ): boolean {\n    const pdfColor = webColorToPdfColor(webColor);\n\n    return this.pdfiumModule.EPDFAnnot_SetColor(\n      annotationPtr,\n      colorType,\n      pdfColor.red & 0xff,\n      pdfColor.green & 0xff,\n      pdfColor.blue & 0xff,\n    );\n  }\n\n  /**\n   * Get the opacity of the annotation.\n   *\n   * @param annotationPtr - pointer to the annotation whose opacity is being set\n   * @returns opacity (0-1)\n   *\n   * @private\n   */\n  private getAnnotationOpacity(annotationPtr: number): number {\n    const opacityPtr = this.memoryManager.malloc(4);\n    const ok = this.pdfiumModule.EPDFAnnot_GetOpacity(annotationPtr, opacityPtr);\n    const opacity = ok ? this.pdfiumModule.pdfium.getValue(opacityPtr, 'i32') : 255;\n    this.memoryManager.free(opacityPtr);\n    return pdfAlphaToWebOpacity(opacity);\n  }\n\n  /**\n   * Set the opacity of the annotation.\n   *\n   * @param annotationPtr - pointer to the annotation whose opacity is being set\n   * @param opacity - opacity (0-1)\n   * @returns true on success\n   *\n   * @private\n   */\n  private setAnnotationOpacity(annotationPtr: number, opacity: number): boolean {\n    const pdfOpacity = webOpacityToPdfAlpha(opacity);\n    return this.pdfiumModule.EPDFAnnot_SetOpacity(annotationPtr, pdfOpacity & 0xff);\n  }\n\n  /**\n   * Fetch the `/Q` text-alignment value from a **FreeText** annotation.\n   *\n   * @param annotationPtr pointer returned by `FPDFPage_GetAnnot`\n   * @returns `PdfTextAlignment`\n   */\n  private getAnnotationTextAlignment(annotationPtr: number): PdfTextAlignment {\n    return this.pdfiumModule.EPDFAnnot_GetTextAlignment(annotationPtr);\n  }\n\n  /**\n   * Write the `/Q` text-alignment value into a **FreeText** annotation\n   * and clear the existing appearance stream so it can be regenerated.\n   *\n   * @param annotationPtr pointer returned by `FPDFPage_GetAnnot`\n   * @param alignment     `PdfTextAlignment`\n   * @returns `true` on success\n   */\n  private setAnnotationTextAlignment(annotationPtr: number, alignment: PdfTextAlignment): boolean {\n    return !!this.pdfiumModule.EPDFAnnot_SetTextAlignment(annotationPtr, alignment);\n  }\n\n  /**\n   * Fetch the `/EPDF:VerticalAlignment` vertical-alignment value from a **FreeText** annotation.\n   *\n   * @param annotationPtr pointer returned by `FPDFPage_GetAnnot`\n   * @returns `PdfVerticalAlignment`\n   */\n  private getAnnotationVerticalAlignment(annotationPtr: number): PdfVerticalAlignment {\n    return this.pdfiumModule.EPDFAnnot_GetVerticalAlignment(annotationPtr);\n  }\n\n  /**\n   * Write the `/EPDF:VerticalAlignment` vertical-alignment value into a **FreeText** annotation\n   * and clear the existing appearance stream so it can be regenerated.\n   *\n   * @param annotationPtr pointer returned by `FPDFPage_GetAnnot`\n   * @param alignment     `PdfVerticalAlignment`\n   * @returns `true` on success\n   */\n  private setAnnotationVerticalAlignment(\n    annotationPtr: number,\n    alignment: PdfVerticalAlignment,\n  ): boolean {\n    return !!this.pdfiumModule.EPDFAnnot_SetVerticalAlignment(annotationPtr, alignment);\n  }\n\n  /**\n   * Return the **default appearance** (font, size, colour) declared in the\n   * `/DA` string of a **FreeText** annotation.\n   *\n   * @param annotationPtr  pointer to `FPDF_ANNOTATION`\n   * @returns `{ font, fontSize, color }` or `undefined` when PDFium returns false\n   *\n   * NOTE – `font` is the raw `FPDF_STANDARD_FONT` enum value that PDFium uses\n   *        (same range as the C API: 0 = Courier, 12 = ZapfDingbats, …).\n   */\n  private getAnnotationDefaultAppearance(\n    annotationPtr: number,\n  ): { fontFamily: PdfStandardFont; fontSize: number; fontColor: WebColor } | undefined {\n    const fontPtr = this.memoryManager.malloc(4);\n    const sizePtr = this.memoryManager.malloc(4);\n    const rPtr = this.memoryManager.malloc(4);\n    const gPtr = this.memoryManager.malloc(4);\n    const bPtr = this.memoryManager.malloc(4);\n\n    const ok = !!this.pdfiumModule.EPDFAnnot_GetDefaultAppearance(\n      annotationPtr,\n      fontPtr,\n      sizePtr,\n      rPtr,\n      gPtr,\n      bPtr,\n    );\n\n    if (!ok) {\n      [fontPtr, sizePtr, rPtr, gPtr, bPtr].forEach((p) => this.memoryManager.free(p));\n      return; // undefined – caller decides what to do\n    }\n\n    const pdf = this.pdfiumModule.pdfium;\n    const font = pdf.getValue(fontPtr, 'i32');\n    const fontSize = pdf.getValue(sizePtr, 'float');\n    const red = pdf.getValue(rPtr, 'i32') & 0xff;\n    const green = pdf.getValue(gPtr, 'i32') & 0xff;\n    const blue = pdf.getValue(bPtr, 'i32') & 0xff;\n\n    [fontPtr, sizePtr, rPtr, gPtr, bPtr].forEach((p) => this.memoryManager.free(p));\n\n    return {\n      fontFamily: font,\n      fontSize,\n      fontColor: pdfColorToWebColor({ red, green, blue }),\n    };\n  }\n\n  /**\n   * Write a **default appearance** (`/DA`) into a FreeText annotation.\n   *\n   * @param annotationPtr pointer to `FPDF_ANNOTATION`\n   * @param font          `FPDF_STANDARD_FONT` enum value\n   * @param fontSize      size in points (≥ 0)\n   * @param color         CSS-style `#rrggbb` string (alpha ignored)\n   * @returns `true` on success\n   */\n  private setAnnotationDefaultAppearance(\n    annotationPtr: number,\n    font: PdfStandardFont,\n    fontSize: number,\n    color: WebColor,\n  ): boolean {\n    const { red, green, blue } = webColorToPdfColor(color); // 0-255 ints\n\n    return !!this.pdfiumModule.EPDFAnnot_SetDefaultAppearance(\n      annotationPtr,\n      font,\n      fontSize,\n      red & 0xff,\n      green & 0xff,\n      blue & 0xff,\n    );\n  }\n\n  /**\n   * Border‐style + width helper\n   *\n   * Tries the new PDFium helper `EPDFAnnot_GetBorderStyle()` (patch series\n   * 9 July 2025).\n   *\n   * @param  annotationPtr  pointer to an `FPDF_ANNOTATION`\n   * @returns `{ ok, style, width }`\n   *          • `ok`     – `true` when the call succeeded\n   *          • `style`  – `PdfAnnotationBorderStyle` enum\n   *          • `width`  – stroke-width in points (defaults to 0 pt)\n   */\n  private getBorderStyle(annotationPtr: number): {\n    ok: boolean;\n    style: PdfAnnotationBorderStyle;\n    width: number;\n  } {\n    /* 1 ── allocate tmp storage for the returned width ─────────────── */\n    const widthPtr = this.memoryManager.malloc(4);\n    let width = 0;\n    let style: PdfAnnotationBorderStyle = PdfAnnotationBorderStyle.UNKNOWN;\n    let ok = false;\n\n    style = this.pdfiumModule.EPDFAnnot_GetBorderStyle(annotationPtr, widthPtr);\n    width = this.pdfiumModule.pdfium.getValue(widthPtr, 'float');\n    ok = style !== PdfAnnotationBorderStyle.UNKNOWN;\n    this.memoryManager.free(widthPtr);\n    return { ok, style, width };\n  }\n\n  private setBorderStyle(\n    annotationPtr: number,\n    style: PdfAnnotationBorderStyle,\n    width: number,\n  ): boolean {\n    return this.pdfiumModule.EPDFAnnot_SetBorderStyle(annotationPtr, style, width);\n  }\n\n  /**\n   * Get the icon of the annotation\n   *\n   * @param annotationPtr - pointer to an `FPDF_ANNOTATION`\n   * @returns `PdfAnnotationIcon`\n   */\n  private getAnnotationIcon(annotationPtr: number): PdfAnnotationIcon {\n    return this.pdfiumModule.EPDFAnnot_GetIcon(annotationPtr);\n  }\n\n  /**\n   * Set the icon of the annotation\n   *\n   * @param annotationPtr - pointer to an `FPDF_ANNOTATION`\n   * @param icon - `PdfAnnotationIcon`\n   * @returns `true` on success\n   */\n  private setAnnotationIcon(annotationPtr: number, icon: PdfAnnotationIcon): boolean {\n    return this.pdfiumModule.EPDFAnnot_SetIcon(annotationPtr, icon);\n  }\n\n  /**\n   * Border-effect (“cloudy”) helper\n   *\n   * Calls the new PDFium function `EPDFAnnot_GetBorderEffect()` (July 2025).\n   *\n   * @param  annotationPtr  pointer to an `FPDF_ANNOTATION`\n   * @returns `{ ok, intensity }`\n   *          • `ok`        – `true` when the annotation *does* have a\n   *                          valid cloudy-border effect\n   *          • `intensity` – radius/intensity value (0 when `ok` is false)\n   */\n  private getBorderEffect(annotationPtr: number): { ok: boolean; intensity: number } {\n    const intensityPtr = this.memoryManager.malloc(4);\n\n    const ok = !!this.pdfiumModule.EPDFAnnot_GetBorderEffect(annotationPtr, intensityPtr);\n\n    const intensity = ok ? this.pdfiumModule.pdfium.getValue(intensityPtr, 'float') : 0;\n\n    this.memoryManager.free(intensityPtr);\n    return { ok, intensity };\n  }\n\n  /**\n   * Rectangle-differences helper ( /RD array on Square / Circle annots )\n   *\n   * Calls `EPDFAnnot_GetRectangleDifferences()` introduced in July 2025.\n   *\n   * @param  annotationPtr  pointer to an `FPDF_ANNOTATION`\n   * @returns `{ ok, left, top, right, bottom }`\n   *          • `ok`     – `true` when the annotation *has* an /RD entry\n   *          • the four floats are 0 when `ok` is false\n   */\n  private getRectangleDifferences(annotationPtr: number): {\n    ok: boolean;\n    left: number;\n    top: number;\n    right: number;\n    bottom: number;\n  } {\n    /* tmp storage ─────────────────────────────────────────── */\n    const lPtr = this.memoryManager.malloc(4);\n    const tPtr = this.memoryManager.malloc(4);\n    const rPtr = this.memoryManager.malloc(4);\n    const bPtr = this.memoryManager.malloc(4);\n\n    const ok = !!this.pdfiumModule.EPDFAnnot_GetRectangleDifferences(\n      annotationPtr,\n      lPtr,\n      tPtr,\n      rPtr,\n      bPtr,\n    );\n\n    const pdf = this.pdfiumModule.pdfium;\n    const left = pdf.getValue(lPtr, 'float');\n    const top = pdf.getValue(tPtr, 'float');\n    const right = pdf.getValue(rPtr, 'float');\n    const bottom = pdf.getValue(bPtr, 'float');\n\n    /* cleanup ─────────────────────────────────────────────── */\n    this.memoryManager.free(lPtr);\n    this.memoryManager.free(tPtr);\n    this.memoryManager.free(rPtr);\n    this.memoryManager.free(bPtr);\n\n    return { ok, left, top, right, bottom };\n  }\n\n  /**\n   * Get the date of the annotation\n   *\n   * @param annotationPtr - pointer to an `FPDF_ANNOTATION`\n   * @param key - 'M' for modified date, 'CreationDate' for creation date\n   * @returns `Date` or `undefined` when PDFium can't read the date\n   */\n  private getAnnotationDate(annotationPtr: number, key: 'M' | 'CreationDate'): Date | undefined {\n    const raw = this.getAnnotString(annotationPtr, key);\n    return raw ? pdfDateToDate(raw) : undefined;\n  }\n\n  /**\n   * Set the date of the annotation\n   *\n   * @param annotationPtr - pointer to an `FPDF_ANNOTATION`\n   * @param key - 'M' for modified date, 'CreationDate' for creation date\n   * @param date - `Date` to set\n   * @returns `true` on success\n   */\n  private setAnnotationDate(annotationPtr: number, key: 'M' | 'CreationDate', date: Date): boolean {\n    const raw = dateToPdfDate(date);\n    return this.setAnnotString(annotationPtr, key, raw);\n  }\n\n  /**\n   * Get the date of the attachment\n   *\n   * @param attachmentPtr - pointer to an `FPDF_ATTACHMENT`\n   * @param key - 'ModDate' for modified date, 'CreationDate' for creation date\n   * @returns `Date` or `undefined` when PDFium can't read the date\n   */\n  private getAttachmentDate(\n    attachmentPtr: number,\n    key: 'ModDate' | 'CreationDate',\n  ): Date | undefined {\n    const raw = this.getAttachmentString(attachmentPtr, key);\n    return raw ? pdfDateToDate(raw) : undefined;\n  }\n\n  /**\n   * Set the date of the attachment\n   *\n   * @param attachmentPtr - pointer to an `FPDF_ATTACHMENT`\n   * @param key - 'ModDate' for modified date, 'CreationDate' for creation date\n   * @param date - `Date` to set\n   * @returns `true` on success\n   */\n  private setAttachmentDate(\n    attachmentPtr: number,\n    key: 'ModDate' | 'CreationDate',\n    date: Date,\n  ): boolean {\n    const raw = dateToPdfDate(date);\n    return this.setAttachmentString(attachmentPtr, key, raw);\n  }\n\n  /**\n   * Dash-pattern helper ( /BS → /D array, dashed borders only )\n   *\n   * Uses the two new PDFium helpers:\n   *   • `EPDFAnnot_GetBorderDashPatternCount`\n   *   • `EPDFAnnot_GetBorderDashPattern`\n   *\n   * @param  annotationPtr  pointer to an `FPDF_ANNOTATION`\n   * @returns `{ ok, pattern }`\n   *          • `ok`       – `true` when the annot is dashed *and* the array\n   *                          was retrieved successfully\n   *          • `pattern`  – numeric array of dash/space lengths (empty when `ok` is false)\n   */\n  private getBorderDashPattern(annotationPtr: number): { ok: boolean; pattern: number[] } {\n    const count = this.pdfiumModule.EPDFAnnot_GetBorderDashPatternCount(annotationPtr);\n    if (count === 0) {\n      return { ok: false, pattern: [] };\n    }\n\n    /* allocate `count` floats on the WASM heap */\n    const arrPtr = this.memoryManager.malloc(4 * count);\n    const okNative = !!this.pdfiumModule.EPDFAnnot_GetBorderDashPattern(\n      annotationPtr,\n      arrPtr,\n      count,\n    );\n\n    /* copy out */\n    const pattern: number[] = [];\n    if (okNative) {\n      const pdf = this.pdfiumModule.pdfium;\n      for (let i = 0; i < count; i++) {\n        pattern.push(pdf.getValue(arrPtr + 4 * i, 'float'));\n      }\n    }\n\n    this.memoryManager.free(arrPtr);\n    return { ok: okNative, pattern };\n  }\n\n  /**\n   * Write the /BS /D dash pattern array for an annotation border.\n   *\n   * @param annotationPtr Pointer to FPDF_ANNOTATION\n   * @param pattern       Array of dash/space lengths in *points* (e.g. [3, 2])\n   *                      Empty array clears the pattern (solid line).\n   * @returns true on success\n   *\n   * @private\n   */\n  private setBorderDashPattern(annotationPtr: number, pattern: number[]): boolean {\n    // Empty → clear the pattern (PDF spec: no /D = solid)\n    if (!pattern || pattern.length === 0) {\n      return this.pdfiumModule.EPDFAnnot_SetBorderDashPattern(annotationPtr, 0, 0);\n    }\n\n    // Validate and sanitize numbers (must be positive floats, spec allows 1–8 numbers typically)\n    const clean = pattern.map((n) => (Number.isFinite(n) && n > 0 ? n : 0)).filter((n) => n > 0);\n    if (clean.length === 0) {\n      // nothing valid → treat as clear\n      return this.pdfiumModule.EPDFAnnot_SetBorderDashPattern(annotationPtr, 0, 0);\n    }\n\n    const bytes = 4 * clean.length;\n    const bufPtr = this.memoryManager.malloc(bytes);\n    for (let i = 0; i < clean.length; i++) {\n      this.pdfiumModule.pdfium.setValue(bufPtr + 4 * i, clean[i], 'float');\n    }\n\n    const ok = !!this.pdfiumModule.EPDFAnnot_SetBorderDashPattern(\n      annotationPtr,\n      bufPtr,\n      clean.length,\n    );\n\n    this.memoryManager.free(bufPtr);\n    return ok;\n  }\n\n  /**\n   * Return the `/LE` array (start/end line-ending styles) for a LINE / POLYLINE annot.\n   *\n   * @param annotationPtr - pointer to an `FPDF_ANNOTATION`\n   * @returns `{ start, end }` or `undefined` when PDFium can't read them\n   *\n   * @private\n   */\n  private getLineEndings(annotationPtr: number): LineEndings | undefined {\n    const startPtr = this.memoryManager.malloc(4);\n    const endPtr = this.memoryManager.malloc(4);\n\n    const ok = !!this.pdfiumModule.EPDFAnnot_GetLineEndings(annotationPtr, startPtr, endPtr);\n    if (!ok) {\n      this.memoryManager.free(startPtr);\n      this.memoryManager.free(endPtr);\n      return undefined;\n    }\n\n    const start = this.pdfiumModule.pdfium.getValue(startPtr, 'i32');\n    const end = this.pdfiumModule.pdfium.getValue(endPtr, 'i32');\n\n    this.memoryManager.free(startPtr);\n    this.memoryManager.free(endPtr);\n\n    return { start, end };\n  }\n\n  /**\n   * Write the `/LE` array (start/end line-ending styles) for a LINE / POLYLINE annot.\n   * @param annotationPtr - pointer to an `FPDF_ANNOTATION`\n   * @param start - start line ending style\n   * @param end - end line ending style\n   * @returns `true` on success\n   */\n  private setLineEndings(\n    annotationPtr: number,\n    start: PdfAnnotationLineEnding,\n    end: PdfAnnotationLineEnding,\n  ): boolean {\n    return !!this.pdfiumModule.EPDFAnnot_SetLineEndings(annotationPtr, start, end);\n  }\n\n  /**\n   * Get the start and end points of a LINE / POLYLINE annot.\n   * @param annotationPtr - pointer to an `FPDF_ANNOTATION`\n   * @param page - logical page info object (`PdfPageObject`)\n   * @returns `{ start, end }` or `undefined` when PDFium can't read them\n   */\n  private getLinePoints(page: PdfPageObject, annotationPtr: number): LinePoints | undefined {\n    const startPtr = this.memoryManager.malloc(8); // FS_POINTF (x,y floats)\n    const endPtr = this.memoryManager.malloc(8);\n\n    const ok = this.pdfiumModule.FPDFAnnot_GetLine(annotationPtr, startPtr, endPtr);\n    if (!ok) {\n      this.memoryManager.free(startPtr);\n      this.memoryManager.free(endPtr);\n      return undefined;\n    }\n\n    const pdf = this.pdfiumModule.pdfium;\n\n    const sx = pdf.getValue(startPtr + 0, 'float');\n    const sy = pdf.getValue(startPtr + 4, 'float');\n    const ex = pdf.getValue(endPtr + 0, 'float');\n    const ey = pdf.getValue(endPtr + 4, 'float');\n\n    this.memoryManager.free(startPtr);\n    this.memoryManager.free(endPtr);\n\n    // page -> device using the new helper (handles rotation/scale consistently)\n    const start = this.convertPagePointToDevicePoint(page, { x: sx, y: sy });\n    const end = this.convertPagePointToDevicePoint(page, { x: ex, y: ey });\n\n    return { start, end };\n  }\n\n  /**\n   * Set the two end‑points of a **Line** annotation\n   * by writing a new /L array `[ x1 y1 x2 y2 ]`.\n   * @param page - logical page info object (`PdfPageObject`)\n   * @param annotPtr - pointer to the annotation whose line points are needed\n   * @param start - start point\n   * @param end - end point\n   * @returns true on success\n   */\n  private setLinePoints(\n    page: PdfPageObject,\n    annotPtr: number,\n    start: Position,\n    end: Position,\n  ): boolean {\n    const p1 = this.convertDevicePointToPagePoint(page, start);\n    const p2 = this.convertDevicePointToPagePoint(page, end);\n\n    if (!p1 || !p2) return false;\n\n    // pack as two FS_POINTF (x,y floats)\n    const buf = this.memoryManager.malloc(16);\n    const pdf = this.pdfiumModule.pdfium;\n    pdf.setValue(buf + 0, p1.x, 'float');\n    pdf.setValue(buf + 4, p1.y, 'float');\n    pdf.setValue(buf + 8, p2.x, 'float');\n    pdf.setValue(buf + 12, p2.y, 'float');\n\n    const ok = this.pdfiumModule.EPDFAnnot_SetLine(annotPtr, buf, buf + 8);\n    this.memoryManager.free(buf);\n    return !!ok;\n  }\n\n  /**\n   * Read `/QuadPoints` from any annotation and convert each quadrilateral to\n   * device-space coordinates.\n   *\n   * The four points are returned in natural reading order:\n   *   `p1 → p2` (top edge) and `p4 → p3` (bottom edge).\n   * This preserves the true shape for rotated / skewed text, whereas callers\n   * that only need axis-aligned boxes can collapse each quad themselves.\n   *\n   * @param page          - logical page info object (`PdfPageObject`)\n   * @param annotationPtr - pointer to the annotation whose quads are needed\n   * @returns Array of `Rect` objects (`[]` if the annotation has no quads)\n   *\n   * @private\n   */\n  private getQuadPointsAnno(page: PdfPageObject, annotationPtr: number): Rect[] {\n    const quadCount = this.pdfiumModule.FPDFAnnot_CountAttachmentPoints(annotationPtr);\n    if (quadCount === 0) return [];\n\n    const FS_QUADPOINTSF_SIZE = 8 * 4; // eight floats, 32 bytes\n    const quads: Quad[] = [];\n\n    for (let qi = 0; qi < quadCount; qi++) {\n      const quadPtr = this.memoryManager.malloc(FS_QUADPOINTSF_SIZE);\n\n      const ok = this.pdfiumModule.FPDFAnnot_GetAttachmentPoints(annotationPtr, qi, quadPtr);\n\n      if (ok) {\n        // read the eight floats\n        const xs: number[] = [];\n        const ys: number[] = [];\n        for (let i = 0; i < 4; i++) {\n          const base = quadPtr + i * 8; // 8 bytes per point (x+y)\n          xs.push(this.pdfiumModule.pdfium.getValue(base, 'float'));\n          ys.push(this.pdfiumModule.pdfium.getValue(base + 4, 'float'));\n        }\n\n        // convert to device-space\n        const p1 = this.convertPagePointToDevicePoint(page, { x: xs[0], y: ys[0] });\n        const p2 = this.convertPagePointToDevicePoint(page, { x: xs[1], y: ys[1] });\n        const p3 = this.convertPagePointToDevicePoint(page, { x: xs[2], y: ys[2] });\n        const p4 = this.convertPagePointToDevicePoint(page, { x: xs[3], y: ys[3] });\n\n        quads.push({ p1, p2, p3, p4 });\n      }\n\n      this.memoryManager.free(quadPtr);\n    }\n\n    return quads.map(quadToRect);\n  }\n\n  /**\n   * Set the quadrilaterals for a **Highlight / Underline / StrikeOut / Squiggly** markup annotation.\n   *\n   * @param page          - logical page info object (`PdfPageObject`)\n   * @param annotationPtr - pointer to the annotation whose quads are needed\n   * @param rects         - array of `Rect` objects (`[]` if the annotation has no quads)\n   * @returns `true` if the operation was successful\n   *\n   * @private\n   */\n  private syncQuadPointsAnno(page: PdfPageObject, annotPtr: number, rects: Rect[]): boolean {\n    const FS_QUADPOINTSF_SIZE = 8 * 4; // eight floats, 32 bytes\n    const pdf = this.pdfiumModule.pdfium;\n    const count = this.pdfiumModule.FPDFAnnot_CountAttachmentPoints(annotPtr);\n    const buf = this.memoryManager.malloc(FS_QUADPOINTSF_SIZE);\n\n    /** write one quad into `buf` in annotation space */\n    const writeQuad = (r: Rect) => {\n      const q = rectToQuad(r); // TL, TR, BR, BL\n      const p1 = this.convertDevicePointToPagePoint(page, q.p1);\n      const p2 = this.convertDevicePointToPagePoint(page, q.p2);\n      const p3 = this.convertDevicePointToPagePoint(page, q.p3); // BR\n      const p4 = this.convertDevicePointToPagePoint(page, q.p4); // BL\n\n      // PDF QuadPoints order: BL, BR, TL, TR (bottom-left, bottom-right, top-left, top-right)\n      pdf.setValue(buf + 0, p1.x, 'float'); // BL (bottom-left)\n      pdf.setValue(buf + 4, p1.y, 'float');\n\n      pdf.setValue(buf + 8, p2.x, 'float'); // BR (bottom-right)\n      pdf.setValue(buf + 12, p2.y, 'float');\n\n      pdf.setValue(buf + 16, p4.x, 'float'); // TL (top-left)\n      pdf.setValue(buf + 20, p4.y, 'float');\n\n      pdf.setValue(buf + 24, p3.x, 'float'); // TR (top-right)\n      pdf.setValue(buf + 28, p3.y, 'float');\n    };\n\n    /* ----------------------------------------------------------------------- */\n    /* 1. overwrite the quads that already exist                               */\n    const min = Math.min(count, rects.length);\n    for (let i = 0; i < min; i++) {\n      writeQuad(rects[i]);\n      if (!this.pdfiumModule.FPDFAnnot_SetAttachmentPoints(annotPtr, i, buf)) {\n        this.memoryManager.free(buf);\n        return false;\n      }\n    }\n\n    /* 2. append new quads if rects.length > count                             */\n    for (let i = count; i < rects.length; i++) {\n      writeQuad(rects[i]);\n      if (!this.pdfiumModule.FPDFAnnot_AppendAttachmentPoints(annotPtr, buf)) {\n        this.memoryManager.free(buf);\n        return false;\n      }\n    }\n\n    this.memoryManager.free(buf);\n    return true;\n  }\n\n  /**\n   * Redact text that intersects ANY of the provided **quads** (device-space).\n   * Returns `true` if the page changed. Always regenerates the page stream.\n   */\n  public redactTextInRects(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    rects: Rect[],\n    options?: PdfRedactTextOptions,\n  ): Task<boolean, PdfErrorReason> {\n    const { recurseForms = true, drawBlackBoxes = false } = options ?? {};\n\n    this.logger.debug(\n      'PDFiumEngine',\n      'Engine',\n      'redactTextInQuads',\n      doc.id,\n      page.index,\n      rects.length,\n    );\n    const label = 'RedactTextInQuads';\n    this.logger.perf('PDFiumEngine', 'Engine', label, 'Begin', `${doc.id}-${page.index}`);\n\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf('PDFiumEngine', 'Engine', label, 'End', `${doc.id}-${page.index}`);\n      return PdfTaskHelper.reject<boolean>({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    // sanitize inputs\n    const clean = (rects ?? []).filter(\n      (r) =>\n        r &&\n        Number.isFinite(r.origin?.x) &&\n        Number.isFinite(r.origin?.y) &&\n        Number.isFinite(r.size?.width) &&\n        Number.isFinite(r.size?.height) &&\n        r.size.width > 0 &&\n        r.size.height > 0,\n    );\n\n    if (clean.length === 0) {\n      this.logger.perf('PDFiumEngine', 'Engine', label, 'End', `${doc.id}-${page.index}`);\n      return PdfTaskHelper.resolve<boolean>(false);\n    }\n\n    const pageCtx = ctx.acquirePage(page.index);\n\n    // pack buffer → native call\n    const { ptr, count } = this.allocFSQuadsBufferFromRects(page, clean);\n    let ok = false;\n    try {\n      // If your wrapper exposes FPDFText_RedactInQuads, call that instead.\n      ok = !!this.pdfiumModule.EPDFText_RedactInQuads(\n        pageCtx.pagePtr,\n        ptr,\n        count,\n        recurseForms ? true : false,\n        drawBlackBoxes ? true : false,\n      );\n    } finally {\n      this.memoryManager.free(ptr);\n    }\n\n    if (ok) {\n      ok = !!this.pdfiumModule.FPDFPage_GenerateContent(pageCtx.pagePtr);\n    }\n\n    pageCtx.disposeImmediate();\n    this.logger.perf('PDFiumEngine', 'Engine', label, 'End', `${doc.id}-${page.index}`);\n\n    return PdfTaskHelper.resolve<boolean>(!!ok);\n  }\n\n  /** Pack device-space Rects into an FS_QUADPOINTSF[] buffer (page space). */\n  private allocFSQuadsBufferFromRects(page: PdfPageObject, rects: Rect[]) {\n    const STRIDE = 32; // 8 floats × 4 bytes\n    const count = rects.length;\n    const ptr = this.memoryManager.malloc(STRIDE * count);\n    const pdf = this.pdfiumModule.pdfium;\n\n    for (let i = 0; i < count; i++) {\n      const r = rects[i];\n      const q = rectToQuad(r); // TL, TR, BR, BL (device-space)\n\n      // Convert into PAGE USER SPACE (native expects page coords)\n      const p1 = this.convertDevicePointToPagePoint(page, q.p1); // TL\n      const p2 = this.convertDevicePointToPagePoint(page, q.p2); // TR\n      const p3 = this.convertDevicePointToPagePoint(page, q.p3); // BR\n      const p4 = this.convertDevicePointToPagePoint(page, q.p4); // BL\n\n      const base = ptr + i * STRIDE;\n\n      // Keep the exact mapping you used in syncQuadPointsAnno:\n      // PDF QuadPoints order comment says BL,BR,TL,TR – and you wrote:\n      pdf.setValue(base + 0, p1.x, 'float');\n      pdf.setValue(base + 4, p1.y, 'float');\n      pdf.setValue(base + 8, p2.x, 'float');\n      pdf.setValue(base + 12, p2.y, 'float');\n      pdf.setValue(base + 16, p4.x, 'float');\n      pdf.setValue(base + 20, p4.y, 'float');\n      pdf.setValue(base + 24, p3.x, 'float');\n      pdf.setValue(base + 28, p3.y, 'float');\n    }\n\n    return { ptr, count };\n  }\n\n  /**\n   * Read ink list from annotation\n   * @param page  - logical page info object (`PdfPageObject`)\n   * @param pagePtr - pointer to the page\n   * @param annotationPtr - pointer to the annotation whose ink list is needed\n   * @returns ink list\n   */\n  private getInkList(page: PdfPageObject, annotationPtr: number): PdfInkListObject[] {\n    const inkList: PdfInkListObject[] = [];\n    const pathCount = this.pdfiumModule.FPDFAnnot_GetInkListCount(annotationPtr);\n    if (pathCount <= 0) return inkList;\n\n    const pdf = this.pdfiumModule.pdfium;\n    const POINT_STRIDE = 8; // FS_POINTF: 2 floats (x,y) => 8 bytes\n\n    for (let i = 0; i < pathCount; i++) {\n      const points: Position[] = [];\n\n      const n = this.pdfiumModule.FPDFAnnot_GetInkListPath(annotationPtr, i, 0, 0);\n      if (n > 0) {\n        const buf = this.memoryManager.malloc(n * POINT_STRIDE);\n\n        // load FS_POINTF array (page-space)\n        this.pdfiumModule.FPDFAnnot_GetInkListPath(annotationPtr, i, buf, n);\n\n        // convert each point to device-space using your helper\n        for (let j = 0; j < n; j++) {\n          const base = buf + j * POINT_STRIDE;\n          const px = pdf.getValue(base + 0, 'float');\n          const py = pdf.getValue(base + 4, 'float');\n          const d = this.convertPagePointToDevicePoint(page, { x: px, y: py });\n          points.push({ x: d.x, y: d.y });\n        }\n\n        this.memoryManager.free(buf);\n      }\n\n      inkList.push({ points });\n    }\n\n    return inkList;\n  }\n\n  /**\n   * Add ink list to annotation\n   * @param page  - logical page info object (`PdfPageObject`)\n   * @param pagePtr - pointer to the page\n   * @param annotationPtr - pointer to the annotation whose ink list is needed\n   * @param inkList - ink list array of `PdfInkListObject`\n   * @returns `true` if the operation was successful\n   */\n  private setInkList(\n    page: PdfPageObject,\n    annotationPtr: number,\n    inkList: PdfInkListObject[],\n  ): boolean {\n    const pdf = this.pdfiumModule.pdfium;\n    const POINT_STRIDE = 8; // FS_POINTF: float x, float y\n\n    for (const stroke of inkList) {\n      const n = stroke.points.length;\n      if (n === 0) continue;\n\n      const buf = this.memoryManager.malloc(n * POINT_STRIDE);\n\n      // device -> page for each vertex\n      for (let i = 0; i < n; i++) {\n        const pDev = stroke.points[i];\n        const pPage = this.convertDevicePointToPagePoint(page, pDev);\n\n        pdf.setValue(buf + i * POINT_STRIDE + 0, pPage.x, 'float');\n        pdf.setValue(buf + i * POINT_STRIDE + 4, pPage.y, 'float');\n      }\n\n      const idx = this.pdfiumModule.FPDFAnnot_AddInkStroke(annotationPtr, buf, n);\n      this.memoryManager.free(buf);\n\n      if (idx === -1) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  /**\n   * Read pdf text annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf text annotation\n   *\n   * @private\n   */\n  private readPdfTextAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfTextAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const annoRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, annoRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const state = this.getAnnotString(annotationPtr, 'State') as PdfAnnotationState;\n    const stateModel = this.getAnnotString(annotationPtr, 'StateModel') as PdfAnnotationStateModel;\n    const color = this.getAnnotationColor(annotationPtr);\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    const inReplyToId = this.getInReplyToId(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n    const icon = this.getAnnotationIcon(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.TEXT,\n      flags,\n      contents,\n      color: color ?? '#FFFF00',\n      opacity,\n      rect,\n      inReplyToId,\n      author,\n      modified,\n      created,\n      state,\n      stateModel,\n      icon,\n    };\n  }\n\n  /**\n   * Read pdf freetext annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf freetext annotation\n   *\n   * @private\n   */\n  private readPdfFreeTextAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfFreeTextAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const annoRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, annoRect);\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const defaultStyle = this.getAnnotString(annotationPtr, 'DS');\n    const da = this.getAnnotationDefaultAppearance(annotationPtr);\n    const backgroundColor = this.getAnnotationColor(annotationPtr);\n    const textAlign = this.getAnnotationTextAlignment(annotationPtr);\n    const verticalAlign = this.getAnnotationVerticalAlignment(annotationPtr);\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    const richContent = this.getAnnotRichContent(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.FREETEXT,\n      fontFamily: da?.fontFamily ?? PdfStandardFont.Unknown,\n      fontSize: da?.fontSize ?? 12,\n      fontColor: da?.fontColor ?? '#000000',\n      verticalAlign,\n      backgroundColor,\n      flags,\n      opacity,\n      textAlign,\n      defaultStyle,\n      richContent,\n      contents,\n      author,\n      modified,\n      created,\n      rect,\n    };\n  }\n\n  /**\n   * Read pdf link annotation from pdf document\n   * @param page  - pdf page infor\n   * @param docPtr - pointer to pdf document object\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf link annotation\n   *\n   * @private\n   */\n  private readPdfLinkAnno(\n    page: PdfPageObject,\n    docPtr: number,\n    annotationPtr: number,\n    index: string,\n  ): PdfLinkAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const linkPtr = this.pdfiumModule.FPDFAnnot_GetLink(annotationPtr);\n    if (!linkPtr) {\n      return;\n    }\n\n    const annoRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, annoRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const flags = this.getAnnotationFlags(annotationPtr);\n\n    const target = this.readPdfLinkAnnoTarget(\n      docPtr,\n      () => {\n        return this.pdfiumModule.FPDFLink_GetAction(linkPtr);\n      },\n      () => {\n        return this.pdfiumModule.FPDFLink_GetDest(docPtr, linkPtr);\n      },\n    );\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.LINK,\n      flags,\n      target,\n      rect,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf widget annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param formHandle - form handle\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf widget annotation\n   *\n   * @private\n   */\n  private readPdfWidgetAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    formHandle: number,\n    index: string,\n  ): PdfWidgetAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const flags = this.getAnnotationFlags(annotationPtr);\n    const field = this.readPdfWidgetAnnoField(formHandle, annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.WIDGET,\n      flags,\n      rect,\n      field,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf file attachment annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf file attachment annotation\n   *\n   * @private\n   */\n  private readPdfFileAttachmentAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfFileAttachmentAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const flags = this.getAnnotationFlags(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.FILEATTACHMENT,\n      flags,\n      rect,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf ink annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf ink annotation\n   *\n   * @private\n   */\n  private readPdfInkAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfInkAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const color = this.getAnnotationColor(annotationPtr);\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    const { width: strokeWidth } = this.getBorderStyle(annotationPtr);\n    const inkList = this.getInkList(page, annotationPtr);\n    const blendMode = this.pdfiumModule.EPDFAnnot_GetBlendMode(annotationPtr);\n    const intent = this.getAnnotIntent(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.INK,\n      ...(intent && { intent }),\n      contents,\n      blendMode,\n      flags,\n      color: color ?? '#FF0000',\n      opacity,\n      strokeWidth: strokeWidth === 0 ? 1 : strokeWidth,\n      rect,\n      inkList,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf polygon annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf polygon annotation\n   *\n   * @private\n   */\n  private readPdfPolygonAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfPolygonAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const vertices = this.readPdfAnnoVertices(page, annotationPtr);\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const flags = this.getAnnotationFlags(annotationPtr);\n    const strokeColor = this.getAnnotationColor(annotationPtr);\n    const interiorColor = this.getAnnotationColor(\n      annotationPtr,\n      PdfAnnotationColorType.InteriorColor,\n    );\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    let { style: strokeStyle, width: strokeWidth } = this.getBorderStyle(annotationPtr);\n\n    let strokeDashArray: number[] | undefined;\n    if (strokeStyle === PdfAnnotationBorderStyle.DASHED) {\n      const { ok, pattern } = this.getBorderDashPattern(annotationPtr);\n      if (ok) {\n        strokeDashArray = pattern;\n      }\n    }\n\n    // ▼––– Remove redundant closing vertex for polygons ––––––––––––––––––––––\n    if (vertices.length > 1) {\n      const first = vertices[0];\n      const last = vertices[vertices.length - 1];\n      if (first.x === last.x && first.y === last.y) {\n        vertices.pop();\n      }\n    }\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.POLYGON,\n      contents,\n      flags,\n      strokeColor: strokeColor ?? '#FF0000',\n      color: interiorColor ?? 'transparent',\n      opacity,\n      strokeWidth: strokeWidth === 0 ? 1 : strokeWidth,\n      strokeStyle,\n      strokeDashArray,\n      rect,\n      vertices,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf polyline annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf polyline annotation\n   *\n   * @private\n   */\n  private readPdfPolylineAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfPolylineAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const vertices = this.readPdfAnnoVertices(page, annotationPtr);\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const strokeColor = this.getAnnotationColor(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n    const interiorColor = this.getAnnotationColor(\n      annotationPtr,\n      PdfAnnotationColorType.InteriorColor,\n    );\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    let { style: strokeStyle, width: strokeWidth } = this.getBorderStyle(annotationPtr);\n\n    let strokeDashArray: number[] | undefined;\n    if (strokeStyle === PdfAnnotationBorderStyle.DASHED) {\n      const { ok, pattern } = this.getBorderDashPattern(annotationPtr);\n      if (ok) {\n        strokeDashArray = pattern;\n      }\n    }\n    const lineEndings = this.getLineEndings(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.POLYLINE,\n      contents,\n      flags,\n      strokeColor: strokeColor ?? '#FF0000',\n      color: interiorColor ?? 'transparent',\n      opacity,\n      strokeWidth: strokeWidth === 0 ? 1 : strokeWidth,\n      strokeStyle,\n      strokeDashArray,\n      lineEndings,\n      rect,\n      vertices,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf line annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf line annotation\n   *\n   * @private\n   */\n  private readPdfLineAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfLineAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const linePoints = this.getLinePoints(page, annotationPtr);\n    const lineEndings = this.getLineEndings(annotationPtr);\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const strokeColor = this.getAnnotationColor(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n    const interiorColor = this.getAnnotationColor(\n      annotationPtr,\n      PdfAnnotationColorType.InteriorColor,\n    );\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    let { style: strokeStyle, width: strokeWidth } = this.getBorderStyle(annotationPtr);\n\n    let strokeDashArray: number[] | undefined;\n    if (strokeStyle === PdfAnnotationBorderStyle.DASHED) {\n      const { ok, pattern } = this.getBorderDashPattern(annotationPtr);\n      if (ok) {\n        strokeDashArray = pattern;\n      }\n    }\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.LINE,\n      flags,\n      rect,\n      contents,\n      strokeWidth: strokeWidth === 0 ? 1 : strokeWidth,\n      strokeStyle,\n      strokeDashArray,\n      strokeColor: strokeColor ?? '#FF0000',\n      color: interiorColor ?? 'transparent',\n      opacity,\n      linePoints: linePoints || { start: { x: 0, y: 0 }, end: { x: 0, y: 0 } },\n      lineEndings: lineEndings || {\n        start: PdfAnnotationLineEnding.None,\n        end: PdfAnnotationLineEnding.None,\n      },\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf highlight annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf highlight annotation\n   *\n   * @private\n   */\n  private readPdfHighlightAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfHighlightAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const segmentRects = this.getQuadPointsAnno(page, annotationPtr);\n    const color = this.getAnnotationColor(annotationPtr);\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    const blendMode = this.pdfiumModule.EPDFAnnot_GetBlendMode(annotationPtr);\n\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const flags = this.getAnnotationFlags(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      blendMode,\n      type: PdfAnnotationSubtype.HIGHLIGHT,\n      rect,\n      flags,\n      contents,\n      segmentRects,\n      color: color ?? '#FFFF00',\n      opacity,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf underline annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf underline annotation\n   *\n   * @private\n   */\n  private readPdfUnderlineAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfUnderlineAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const segmentRects = this.getQuadPointsAnno(page, annotationPtr);\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const color = this.getAnnotationColor(annotationPtr);\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    const blendMode = this.pdfiumModule.EPDFAnnot_GetBlendMode(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      blendMode,\n      type: PdfAnnotationSubtype.UNDERLINE,\n      rect,\n      flags,\n      contents,\n      segmentRects,\n      color: color ?? '#FF0000',\n      opacity,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read strikeout annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf strikeout annotation\n   *\n   * @private\n   */\n  private readPdfStrikeOutAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfStrikeOutAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const segmentRects = this.getQuadPointsAnno(page, annotationPtr);\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const color = this.getAnnotationColor(annotationPtr);\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    const blendMode = this.pdfiumModule.EPDFAnnot_GetBlendMode(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      blendMode,\n      type: PdfAnnotationSubtype.STRIKEOUT,\n      flags,\n      rect,\n      contents,\n      segmentRects,\n      color: color ?? '#FF0000',\n      opacity,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf squiggly annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf squiggly annotation\n   *\n   * @private\n   */\n  private readPdfSquigglyAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfSquigglyAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const segmentRects = this.getQuadPointsAnno(page, annotationPtr);\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const color = this.getAnnotationColor(annotationPtr);\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    const blendMode = this.pdfiumModule.EPDFAnnot_GetBlendMode(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      blendMode,\n      type: PdfAnnotationSubtype.SQUIGGLY,\n      rect,\n      flags,\n      contents,\n      segmentRects,\n      color: color ?? '#FF0000',\n      opacity,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf caret annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf caret annotation\n   *\n   * @private\n   */\n  private readPdfCaretAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfCaretAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const flags = this.getAnnotationFlags(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.CARET,\n      rect,\n      flags,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Read pdf stamp annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf stamp annotation\n   *\n   * @private\n   */\n  private readPdfStampAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfStampAnnoObject | undefined {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const flags = this.getAnnotationFlags(annotationPtr);\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.STAMP,\n      contents,\n      rect,\n      author,\n      modified,\n      created,\n      flags,\n    };\n  }\n\n  /**\n   * Read pdf object in pdf page\n   * @param pageObjectPtr  - pointer to pdf object in page\n   * @returns pdf object in page\n   *\n   * @private\n   */\n  private readPdfPageObject(pageObjectPtr: number) {\n    const type = this.pdfiumModule.FPDFPageObj_GetType(pageObjectPtr) as PdfPageObjectType;\n    switch (type) {\n      case PdfPageObjectType.PATH:\n        return this.readPathObject(pageObjectPtr);\n      case PdfPageObjectType.IMAGE:\n        return this.readImageObject(pageObjectPtr);\n      case PdfPageObjectType.FORM:\n        return this.readFormObject(pageObjectPtr);\n    }\n  }\n\n  /**\n   * Read pdf path object\n   * @param pathObjectPtr  - pointer to pdf path object in page\n   * @returns pdf path object\n   *\n   * @private\n   */\n  private readPathObject(pathObjectPtr: number): PdfPathObject {\n    const segmentCount = this.pdfiumModule.FPDFPath_CountSegments(pathObjectPtr);\n\n    const leftPtr = this.memoryManager.malloc(4);\n    const bottomPtr = this.memoryManager.malloc(4);\n    const rightPtr = this.memoryManager.malloc(4);\n    const topPtr = this.memoryManager.malloc(4);\n    this.pdfiumModule.FPDFPageObj_GetBounds(pathObjectPtr, leftPtr, bottomPtr, rightPtr, topPtr);\n    const left = this.pdfiumModule.pdfium.getValue(leftPtr, 'float');\n    const bottom = this.pdfiumModule.pdfium.getValue(bottomPtr, 'float');\n    const right = this.pdfiumModule.pdfium.getValue(rightPtr, 'float');\n    const top = this.pdfiumModule.pdfium.getValue(topPtr, 'float');\n    const bounds = { left, bottom, right, top };\n    this.memoryManager.free(leftPtr);\n    this.memoryManager.free(bottomPtr);\n    this.memoryManager.free(rightPtr);\n    this.memoryManager.free(topPtr);\n    const segments: PdfSegmentObject[] = [];\n    for (let i = 0; i < segmentCount; i++) {\n      const segment = this.readPdfSegment(pathObjectPtr, i);\n      segments.push(segment);\n    }\n\n    const matrix = this.readPdfPageObjectTransformMatrix(pathObjectPtr);\n\n    return {\n      type: PdfPageObjectType.PATH,\n      bounds,\n      segments,\n      matrix,\n    };\n  }\n\n  /**\n   * Read segment of pdf path object\n   * @param annotationObjectPtr - pointer to pdf path object\n   * @param segmentIndex - index of segment\n   * @returns pdf segment in pdf path\n   *\n   * @private\n   */\n  private readPdfSegment(annotationObjectPtr: number, segmentIndex: number): PdfSegmentObject {\n    const segmentPtr = this.pdfiumModule.FPDFPath_GetPathSegment(annotationObjectPtr, segmentIndex);\n    const segmentType = this.pdfiumModule.FPDFPathSegment_GetType(segmentPtr);\n    const isClosed = this.pdfiumModule.FPDFPathSegment_GetClose(segmentPtr);\n    const pointXPtr = this.memoryManager.malloc(4);\n    const pointYPtr = this.memoryManager.malloc(4);\n    this.pdfiumModule.FPDFPathSegment_GetPoint(segmentPtr, pointXPtr, pointYPtr);\n    const pointX = this.pdfiumModule.pdfium.getValue(pointXPtr, 'float');\n    const pointY = this.pdfiumModule.pdfium.getValue(pointYPtr, 'float');\n    this.memoryManager.free(pointXPtr);\n    this.memoryManager.free(pointYPtr);\n\n    return {\n      type: segmentType,\n      point: { x: pointX, y: pointY },\n      isClosed,\n    };\n  }\n\n  /**\n   * Read pdf image object from pdf document\n   * @param pageObjectPtr  - pointer to pdf image object in page\n   * @returns pdf image object\n   *\n   * @private\n   */\n  private readImageObject(imageObjectPtr: number): PdfImageObject {\n    const bitmapPtr = this.pdfiumModule.FPDFImageObj_GetBitmap(imageObjectPtr);\n    const bitmapBufferPtr = this.pdfiumModule.FPDFBitmap_GetBuffer(bitmapPtr);\n    const bitmapWidth = this.pdfiumModule.FPDFBitmap_GetWidth(bitmapPtr);\n    const bitmapHeight = this.pdfiumModule.FPDFBitmap_GetHeight(bitmapPtr);\n    const format = this.pdfiumModule.FPDFBitmap_GetFormat(bitmapPtr) as BitmapFormat;\n\n    const pixelCount = bitmapWidth * bitmapHeight;\n    const bytesPerPixel = 4;\n    const array = new Uint8ClampedArray(pixelCount * bytesPerPixel);\n    for (let i = 0; i < pixelCount; i++) {\n      switch (format) {\n        case BitmapFormat.Bitmap_BGR:\n          {\n            const blue = this.pdfiumModule.pdfium.getValue(bitmapBufferPtr + i * 3, 'i8');\n            const green = this.pdfiumModule.pdfium.getValue(bitmapBufferPtr + i * 3 + 1, 'i8');\n            const red = this.pdfiumModule.pdfium.getValue(bitmapBufferPtr + i * 3 + 2, 'i8');\n            array[i * bytesPerPixel] = red;\n            array[i * bytesPerPixel + 1] = green;\n            array[i * bytesPerPixel + 2] = blue;\n            array[i * bytesPerPixel + 3] = 100;\n          }\n          break;\n      }\n    }\n\n    const imageData = new ImageData(array, bitmapWidth, bitmapHeight);\n    const matrix = this.readPdfPageObjectTransformMatrix(imageObjectPtr);\n\n    return {\n      type: PdfPageObjectType.IMAGE,\n      imageData,\n      matrix,\n    };\n  }\n\n  /**\n   * Read form object from pdf document\n   * @param formObjectPtr  - pointer to pdf form object in page\n   * @returns pdf form object\n   *\n   * @private\n   */\n  private readFormObject(formObjectPtr: number): PdfFormObject {\n    const objectCount = this.pdfiumModule.FPDFFormObj_CountObjects(formObjectPtr);\n    const objects: (PdfFormObject | PdfImageObject | PdfPathObject)[] = [];\n    for (let i = 0; i < objectCount; i++) {\n      const pageObjectPtr = this.pdfiumModule.FPDFFormObj_GetObject(formObjectPtr, i);\n      const pageObj = this.readPdfPageObject(pageObjectPtr);\n      if (pageObj) {\n        objects.push(pageObj);\n      }\n    }\n    const matrix = this.readPdfPageObjectTransformMatrix(formObjectPtr);\n\n    return {\n      type: PdfPageObjectType.FORM,\n      objects,\n      matrix,\n    };\n  }\n\n  /**\n   * Read pdf object in pdf page\n   * @param pageObjectPtr  - pointer to pdf object in page\n   * @returns pdf object in page\n   *\n   * @private\n   */\n  private readPdfPageObjectTransformMatrix(pageObjectPtr: number): PdfTransformMatrix {\n    const matrixPtr = this.memoryManager.malloc(4 * 6);\n    if (this.pdfiumModule.FPDFPageObj_GetMatrix(pageObjectPtr, matrixPtr)) {\n      const a = this.pdfiumModule.pdfium.getValue(matrixPtr, 'float');\n      const b = this.pdfiumModule.pdfium.getValue(matrixPtr + 4, 'float');\n      const c = this.pdfiumModule.pdfium.getValue(matrixPtr + 8, 'float');\n      const d = this.pdfiumModule.pdfium.getValue(matrixPtr + 12, 'float');\n      const e = this.pdfiumModule.pdfium.getValue(matrixPtr + 16, 'float');\n      const f = this.pdfiumModule.pdfium.getValue(matrixPtr + 20, 'float');\n      this.memoryManager.free(matrixPtr);\n\n      return { a, b, c, d, e, f };\n    }\n\n    this.memoryManager.free(matrixPtr);\n\n    return { a: 1, b: 0, c: 0, d: 1, e: 0, f: 0 };\n  }\n\n  /**\n   * Read contents of a stamp annotation\n   * @param annotationPtr - pointer to pdf annotation\n   * @returns contents of the stamp annotation\n   *\n   * @private\n   */\n  private readStampAnnotationContents(annotationPtr: number): PdfStampAnnoObjectContents {\n    const contents: PdfStampAnnoObjectContents = [];\n\n    const objectCount = this.pdfiumModule.FPDFAnnot_GetObjectCount(annotationPtr);\n    for (let i = 0; i < objectCount; i++) {\n      const annotationObjectPtr = this.pdfiumModule.FPDFAnnot_GetObject(annotationPtr, i);\n\n      const pageObj = this.readPdfPageObject(annotationObjectPtr);\n      if (pageObj) {\n        contents.push(pageObj);\n      }\n    }\n\n    return contents;\n  }\n\n  /**\n   * Return the stroke-width declared in the annotation’s /Border or /BS entry.\n   * Falls back to 1 pt when nothing is defined.\n   *\n   * @param annotationPtr - pointer to pdf annotation\n   * @returns stroke-width\n   *\n   * @private\n   */\n  private getStrokeWidth(annotationPtr: number): number {\n    // FPDFAnnot_GetBorder(annot, &hRadius, &vRadius, &borderWidth)\n    const hPtr = this.memoryManager.malloc(4);\n    const vPtr = this.memoryManager.malloc(4);\n    const wPtr = this.memoryManager.malloc(4);\n\n    const ok = this.pdfiumModule.FPDFAnnot_GetBorder(annotationPtr, hPtr, vPtr, wPtr);\n    const width = ok ? this.pdfiumModule.pdfium.getValue(wPtr, 'float') : 1; // default 1 pt\n\n    this.memoryManager.free(hPtr);\n    this.memoryManager.free(vPtr);\n    this.memoryManager.free(wPtr);\n\n    return width;\n  }\n\n  /**\n   * Fetches the `/F` flag bit-field from an annotation.\n   *\n   * @param annotationPtr pointer to an `FPDF_ANNOTATION`\n   * @returns `{ raw, flags }`\n   *          • `raw`   – the 32-bit integer returned by PDFium\n   *          • `flags` – object with individual booleans\n   */\n  private getAnnotationFlags(annotationPtr: number): PdfAnnotationFlagName[] {\n    const rawFlags = this.pdfiumModule.FPDFAnnot_GetFlags(annotationPtr); // number\n\n    return flagsToNames(rawFlags);\n  }\n\n  private setAnnotationFlags(annotationPtr: number, flags: PdfAnnotationFlagName[]): boolean {\n    const rawFlags = namesToFlags(flags);\n    return this.pdfiumModule.FPDFAnnot_SetFlags(annotationPtr, rawFlags);\n  }\n\n  /**\n   * Read circle annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf circle annotation\n   *\n   * @private\n   */\n  private readPdfCircleAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfCircleAnnoObject {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const interiorColor = this.getAnnotationColor(\n      annotationPtr,\n      PdfAnnotationColorType.InteriorColor,\n    );\n    const strokeColor = this.getAnnotationColor(annotationPtr);\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    let { style: strokeStyle, width: strokeWidth } = this.getBorderStyle(annotationPtr);\n\n    let strokeDashArray: number[] | undefined;\n    if (strokeStyle === PdfAnnotationBorderStyle.DASHED) {\n      const { ok, pattern } = this.getBorderDashPattern(annotationPtr);\n      if (ok) {\n        strokeDashArray = pattern;\n      }\n    }\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.CIRCLE,\n      flags,\n      color: interiorColor ?? 'transparent',\n      opacity,\n      contents,\n      strokeWidth,\n      strokeColor: strokeColor ?? '#FF0000',\n      strokeStyle,\n      rect,\n      author,\n      modified,\n      created,\n      ...(strokeDashArray !== undefined && { strokeDashArray }),\n    };\n  }\n\n  /**\n   * Read square annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf square annotation\n   *\n   * @private\n   */\n  private readPdfSquareAnno(\n    page: PdfPageObject,\n    annotationPtr: number,\n    index: string,\n  ): PdfSquareAnnoObject {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const flags = this.getAnnotationFlags(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const contents = this.getAnnotString(annotationPtr, 'Contents') || '';\n    const interiorColor = this.getAnnotationColor(\n      annotationPtr,\n      PdfAnnotationColorType.InteriorColor,\n    );\n    const strokeColor = this.getAnnotationColor(annotationPtr);\n    const opacity = this.getAnnotationOpacity(annotationPtr);\n    let { style: strokeStyle, width: strokeWidth } = this.getBorderStyle(annotationPtr);\n\n    let strokeDashArray: number[] | undefined;\n    if (strokeStyle === PdfAnnotationBorderStyle.DASHED) {\n      const { ok, pattern } = this.getBorderDashPattern(annotationPtr);\n      if (ok) {\n        strokeDashArray = pattern;\n      }\n    }\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      type: PdfAnnotationSubtype.SQUARE,\n      flags,\n      color: interiorColor ?? 'transparent',\n      opacity,\n      contents,\n      strokeColor: strokeColor ?? '#FF0000',\n      strokeWidth,\n      strokeStyle,\n      rect,\n      author,\n      modified,\n      created,\n      ...(strokeDashArray !== undefined && { strokeDashArray }),\n    };\n  }\n\n  /**\n   * Read basic info of unsupported pdf annotation\n   * @param page  - pdf page infor\n   * @param type - type of annotation\n   * @param annotationPtr - pointer to pdf annotation\n   * @param index  - index of annotation in the pdf page\n   * @returns pdf annotation\n   *\n   * @private\n   */\n  private readPdfAnno(\n    page: PdfPageObject,\n    type: PdfUnsupportedAnnoObject['type'],\n    annotationPtr: number,\n    index: string,\n  ): PdfUnsupportedAnnoObject {\n    const custom = this.getAnnotCustom(annotationPtr);\n    const pageRect = this.readPageAnnoRect(annotationPtr);\n    const rect = this.convertPageRectToDeviceRect(page, pageRect);\n    const author = this.getAnnotString(annotationPtr, 'T');\n    const modified = this.getAnnotationDate(annotationPtr, 'M');\n    const created = this.getAnnotationDate(annotationPtr, 'CreationDate');\n    const flags = this.getAnnotationFlags(annotationPtr);\n\n    return {\n      pageIndex: page.index,\n      custom,\n      id: index,\n      flags,\n      type,\n      rect,\n      author,\n      modified,\n      created,\n    };\n  }\n\n  /**\n   * Resolve `/IRT` → parent-annotation index on the same page.\n   *\n   * @param pagePtr        - pointer to FPDF_PAGE\n   * @param annotationPtr  - pointer to FPDF_ANNOTATION\n   * @returns index (`0…count-1`) or `undefined` when the annotation is *not* a reply\n   *\n   * @private\n   */\n  private getInReplyToId(annotationPtr: number): string | undefined {\n    const parentPtr = this.pdfiumModule.FPDFAnnot_GetLinkedAnnot(annotationPtr, 'IRT');\n    if (!parentPtr) return;\n\n    return this.getAnnotString(parentPtr, 'NM');\n  }\n\n  /**\n   * Set the in reply to id of the annotation\n   *\n   * @param annotationPtr - pointer to an `FPDF_ANNOTATION`\n   * @param id - the id of the parent annotation\n   * @returns `true` on success\n   */\n  private setInReplyToId(pagePtr: number, annotationPtr: number, id: string): boolean {\n    const parentPtr = this.getAnnotationByName(pagePtr, id);\n    if (!parentPtr) return false;\n\n    return this.pdfiumModule.EPDFAnnot_SetLinkedAnnot(annotationPtr, 'IRT', parentPtr);\n  }\n\n  /**\n   * Fetch a string value (`/T`, `/M`, `/State`, …) from an annotation.\n   *\n   * @returns decoded UTF-8 string or `undefined` when the key is absent\n   *\n   * @private\n   */\n  private getAnnotString(annotationPtr: number, key: string): string | undefined {\n    const len = this.pdfiumModule.FPDFAnnot_GetStringValue(annotationPtr, key, 0, 0);\n    if (len === 0) return;\n\n    const bytes = (len + 1) * 2;\n    const ptr = this.memoryManager.malloc(bytes);\n\n    this.pdfiumModule.FPDFAnnot_GetStringValue(annotationPtr, key, ptr, bytes);\n    const value = this.pdfiumModule.pdfium.UTF16ToString(ptr);\n    this.memoryManager.free(ptr);\n\n    return value || undefined;\n  }\n\n  /**\n   * Get a string value (`/T`, `/M`, `/State`, …) from an attachment.\n   *\n   * @returns decoded UTF-8 string or `undefined` when the key is absent\n   *\n   * @private\n   */\n  private getAttachmentString(attachmentPtr: number, key: string): string | undefined {\n    const len = this.pdfiumModule.FPDFAttachment_GetStringValue(attachmentPtr, key, 0, 0);\n    if (len === 0) return;\n\n    const bytes = (len + 1) * 2;\n    const ptr = this.memoryManager.malloc(bytes);\n\n    this.pdfiumModule.FPDFAttachment_GetStringValue(attachmentPtr, key, ptr, bytes);\n    const value = this.pdfiumModule.pdfium.UTF16ToString(ptr);\n    this.memoryManager.free(ptr);\n\n    return value || undefined;\n  }\n\n  /**\n   * Get a number value (`/Size`) from an attachment.\n   *\n   * @returns number or `null` when the key is absent\n   *\n   * @private\n   */\n  private getAttachmentNumber(attachmentPtr: number, key: string): number | undefined {\n    const outPtr = this.memoryManager.malloc(4); // int32\n    try {\n      const ok = this.pdfiumModule.EPDFAttachment_GetIntegerValue(\n        attachmentPtr,\n        key, // FPDF_BYTESTRING → ASCII JS string is fine in your glue\n        outPtr,\n      );\n      if (!ok) return undefined;\n      // Treat as unsigned to avoid negative values if >2GB (rare on wasm, but harmless)\n      return this.pdfiumModule.pdfium.getValue(outPtr, 'i32') >>> 0;\n    } finally {\n      this.memoryManager.free(outPtr);\n    }\n  }\n\n  /**\n   * Get custom data of the annotation\n   * @param annotationPtr - pointer to pdf annotation\n   * @returns custom data of the annotation\n   *\n   * @private\n   */\n  private getAnnotCustom(annotationPtr: number): any {\n    const custom = this.getAnnotString(annotationPtr, 'EPDFCustom');\n    if (!custom) return;\n\n    try {\n      return JSON.parse(custom);\n    } catch (error) {\n      console.warn('Failed to parse annotation custom data as JSON:', error);\n      console.warn('Invalid JSON string:', custom);\n      return undefined;\n    }\n  }\n\n  /**\n   * Sets custom data for an annotation by safely stringifying and storing JSON\n   * @private\n   */\n  private setAnnotCustom(annotationPtr: number, data: any): boolean {\n    if (data === undefined || data === null) {\n      // Clear the custom data by setting empty string\n      return this.setAnnotString(annotationPtr, 'EPDFCustom', '');\n    }\n\n    try {\n      const jsonString = JSON.stringify(data);\n      return this.setAnnotString(annotationPtr, 'EPDFCustom', jsonString);\n    } catch (error) {\n      console.warn('Failed to stringify annotation custom data as JSON:', error);\n      console.warn('Invalid data object:', data);\n      return false;\n    }\n  }\n\n  /**\n   * Fetches the /IT (Intent) name from an annotation as a UTF-8 JS string.\n   *\n   * Mirrors getAnnotString(): calls EPDFAnnot_GetIntent twice (length probe + copy).\n   * Returns `undefined` if no intent present.\n   */\n  private getAnnotIntent(annotationPtr: number): string | undefined {\n    const len = this.pdfiumModule.EPDFAnnot_GetIntent(annotationPtr, 0, 0);\n    if (len === 0) return;\n\n    const codeUnits = len + 1;\n    const bytes = codeUnits * 2;\n    const ptr = this.memoryManager.malloc(bytes);\n\n    this.pdfiumModule.EPDFAnnot_GetIntent(annotationPtr, ptr, bytes);\n    const value = this.pdfiumModule.pdfium.UTF16ToString(ptr);\n\n    this.memoryManager.free(ptr);\n\n    return value && value !== 'undefined' ? value : undefined;\n  }\n\n  /**\n   * Write the `/IT` (Intent) name into an annotation dictionary.\n   *\n   * Mirrors EPDFAnnot_SetIntent in PDFium (expects a UTF‑8 FPDF_BYTESTRING).\n   *\n   * @param annotationPtr Pointer returned by FPDFPage_GetAnnot\n   * @param intent        Name without leading slash, e.g. `\"PolygonCloud\"`\n   *                      A leading “/” will be stripped for convenience.\n   * @returns             true on success, false otherwise\n   */\n  private setAnnotIntent(annotationPtr: number, intent: string): boolean {\n    return this.pdfiumModule.EPDFAnnot_SetIntent(annotationPtr, intent);\n  }\n\n  /**\n   * Returns the rich‑content string stored in the annotation’s `/RC` entry.\n   *\n   * Works like `getAnnotIntent()`: first probe for length, then copy.\n   * `undefined` when the annotation has no rich content.\n   */\n  private getAnnotRichContent(annotationPtr: number): string | undefined {\n    // First call → number of UTF‑16 code units (excluding NUL)\n    const len = this.pdfiumModule.EPDFAnnot_GetRichContent(annotationPtr, 0, 0);\n    if (len === 0) return;\n\n    // +1 for the implicit NUL added by PDFium → bytes = 2 × code units\n    const codeUnits = len + 1;\n    const bytes = codeUnits * 2;\n    const ptr = this.memoryManager.malloc(bytes);\n\n    this.pdfiumModule.EPDFAnnot_GetRichContent(annotationPtr, ptr, bytes);\n    const value = this.pdfiumModule.pdfium.UTF16ToString(ptr);\n\n    this.memoryManager.free(ptr);\n\n    return value || undefined;\n  }\n\n  /**\n   * Get annotation by name\n   * @param pagePtr - pointer to pdf page object\n   * @param name - name of annotation\n   * @returns pointer to pdf annotation\n   *\n   * @private\n   */\n  private getAnnotationByName(pagePtr: number, name: string): number | undefined {\n    return this.withWString(name, (wNamePtr) => {\n      return this.pdfiumModule.EPDFPage_GetAnnotByName(pagePtr, wNamePtr);\n    });\n  }\n\n  /**\n   * Remove annotation by name\n   * @param pagePtr - pointer to pdf page object\n   * @param name - name of annotation\n   * @returns true on success\n   *\n   * @private\n   */\n  private removeAnnotationByName(pagePtr: number, name: string): boolean {\n    return this.withWString(name, (wNamePtr) => {\n      return this.pdfiumModule.EPDFPage_RemoveAnnotByName(pagePtr, wNamePtr);\n    });\n  }\n\n  /**\n   * Set a string value (`/T`, `/M`, `/State`, …) to an annotation.\n   *\n   * @returns `true` if the operation was successful\n   *\n   * @private\n   */\n  private setAnnotString(annotationPtr: number, key: string, value: string): boolean {\n    return this.withWString(value, (wValPtr) => {\n      return this.pdfiumModule.FPDFAnnot_SetStringValue(annotationPtr, key, wValPtr);\n    });\n  }\n\n  /**\n   * Set a string value (`/T`, `/M`, `/State`, …) to an attachment.\n   *\n   * @returns `true` if the operation was successful\n   *\n   * @private\n   */\n  private setAttachmentString(attachmentPtr: number, key: string, value: string): boolean {\n    return this.withWString(value, (wValPtr) => {\n      // FPDFAttachment_SetStringValue writes into /Params dictionary\n      return this.pdfiumModule.FPDFAttachment_SetStringValue(attachmentPtr, key, wValPtr);\n    });\n  }\n\n  /**\n   * Read vertices of pdf annotation\n   * @param page  - pdf page infor\n   * @param annotationPtr - pointer to pdf annotation\n   * @returns vertices of pdf annotation\n   *\n   * @private\n   */\n  private readPdfAnnoVertices(page: PdfPageObject, annotationPtr: number): Position[] {\n    const vertices: Position[] = [];\n    const count = this.pdfiumModule.FPDFAnnot_GetVertices(annotationPtr, 0, 0);\n    const pointMemorySize = 8;\n    const pointsPtr = this.memoryManager.malloc(count * pointMemorySize);\n    this.pdfiumModule.FPDFAnnot_GetVertices(annotationPtr, pointsPtr, count);\n    for (let i = 0; i < count; i++) {\n      const pointX = this.pdfiumModule.pdfium.getValue(pointsPtr + i * pointMemorySize, 'float');\n      const pointY = this.pdfiumModule.pdfium.getValue(\n        pointsPtr + i * pointMemorySize + 4,\n        'float',\n      );\n\n      const { x, y } = this.convertPagePointToDevicePoint(page, {\n        x: pointX,\n        y: pointY,\n      });\n      const last = vertices[vertices.length - 1];\n      if (!last || last.x !== x || last.y !== y) {\n        vertices.push({ x, y });\n      }\n    }\n    this.memoryManager.free(pointsPtr);\n\n    return vertices;\n  }\n\n  /**\n   * Sync the vertices of a polygon or polyline annotation.\n   *\n   * @param page  - pdf page infor\n   * @param annotPtr - pointer to pdf annotation\n   * @param vertices - the vertices to be set\n   * @returns true on success\n   *\n   * @private\n   */\n  private setPdfAnnoVertices(page: PdfPageObject, annotPtr: number, vertices: Position[]): boolean {\n    const pdf = this.pdfiumModule.pdfium;\n    const FS_POINTF_SIZE = 8;\n\n    const buf = this.memoryManager.malloc(FS_POINTF_SIZE * vertices.length);\n    vertices.forEach((v, i) => {\n      const pagePt = this.convertDevicePointToPagePoint(page, v);\n      pdf.setValue(buf + i * FS_POINTF_SIZE + 0, pagePt.x, 'float');\n      pdf.setValue(buf + i * FS_POINTF_SIZE + 4, pagePt.y, 'float');\n    });\n\n    const ok = this.pdfiumModule.EPDFAnnot_SetVertices(annotPtr, buf, vertices.length);\n    this.memoryManager.free(buf);\n    return ok;\n  }\n\n  /**\n   * Read the target of pdf bookmark\n   * @param docPtr - pointer to pdf document object\n   * @param getActionPtr - callback function to retrive the pointer of action\n   * @param getDestinationPtr - callback function to retrive the pointer of destination\n   * @returns target of pdf bookmark\n   *\n   * @private\n   */\n  private readPdfBookmarkTarget(\n    docPtr: number,\n    getActionPtr: () => number,\n    getDestinationPtr: () => number,\n  ): PdfLinkTarget | undefined {\n    const actionPtr = getActionPtr();\n    if (actionPtr) {\n      const action = this.readPdfAction(docPtr, actionPtr);\n\n      return {\n        type: 'action',\n        action,\n      };\n    } else {\n      const destinationPtr = getDestinationPtr();\n      if (destinationPtr) {\n        const destination = this.readPdfDestination(docPtr, destinationPtr);\n\n        return {\n          type: 'destination',\n          destination,\n        };\n      }\n    }\n  }\n\n  /**\n   * Read field of pdf widget annotation\n   * @param formHandle - form handle\n   * @param annotationPtr - pointer to pdf annotation\n   * @returns field of pdf widget annotation\n   *\n   * @private\n   */\n  private readPdfWidgetAnnoField(formHandle: number, annotationPtr: number): PdfWidgetAnnoField {\n    const flag = this.pdfiumModule.FPDFAnnot_GetFormFieldFlags(\n      formHandle,\n      annotationPtr,\n    ) as PDF_FORM_FIELD_FLAG;\n\n    const type = this.pdfiumModule.FPDFAnnot_GetFormFieldType(\n      formHandle,\n      annotationPtr,\n    ) as PDF_FORM_FIELD_TYPE;\n\n    const name = readString(\n      this.pdfiumModule.pdfium,\n      (buffer: number, bufferLength) => {\n        return this.pdfiumModule.FPDFAnnot_GetFormFieldName(\n          formHandle,\n          annotationPtr,\n          buffer,\n          bufferLength,\n        );\n      },\n      this.pdfiumModule.pdfium.UTF16ToString,\n    );\n\n    const alternateName = readString(\n      this.pdfiumModule.pdfium,\n      (buffer: number, bufferLength) => {\n        return this.pdfiumModule.FPDFAnnot_GetFormFieldAlternateName(\n          formHandle,\n          annotationPtr,\n          buffer,\n          bufferLength,\n        );\n      },\n      this.pdfiumModule.pdfium.UTF16ToString,\n    );\n\n    const value = readString(\n      this.pdfiumModule.pdfium,\n      (buffer: number, bufferLength) => {\n        return this.pdfiumModule.FPDFAnnot_GetFormFieldValue(\n          formHandle,\n          annotationPtr,\n          buffer,\n          bufferLength,\n        );\n      },\n      this.pdfiumModule.pdfium.UTF16ToString,\n    );\n\n    const options: PdfWidgetAnnoOption[] = [];\n    if (type === PDF_FORM_FIELD_TYPE.COMBOBOX || type === PDF_FORM_FIELD_TYPE.LISTBOX) {\n      const count = this.pdfiumModule.FPDFAnnot_GetOptionCount(formHandle, annotationPtr);\n      for (let i = 0; i < count; i++) {\n        const label = readString(\n          this.pdfiumModule.pdfium,\n          (buffer: number, bufferLength) => {\n            return this.pdfiumModule.FPDFAnnot_GetOptionLabel(\n              formHandle,\n              annotationPtr,\n              i,\n              buffer,\n              bufferLength,\n            );\n          },\n          this.pdfiumModule.pdfium.UTF16ToString,\n        );\n        const isSelected = this.pdfiumModule.FPDFAnnot_IsOptionSelected(\n          formHandle,\n          annotationPtr,\n          i,\n        );\n        options.push({\n          label,\n          isSelected,\n        });\n      }\n    }\n\n    let isChecked = false;\n    let exportValue = \"\";\n    if (type === PDF_FORM_FIELD_TYPE.CHECKBOX || type === PDF_FORM_FIELD_TYPE.RADIOBUTTON) {\n      isChecked = this.pdfiumModule.FPDFAnnot_IsChecked(formHandle, annotationPtr);\n      exportValue = readString(\n          this.pdfiumModule.pdfium,\n          (buffer: number, bufferLength) => {\n            return this.pdfiumModule.FPDFAnnot_GetFormFieldExportValue(\n                formHandle,\n                annotationPtr,\n                buffer,\n                bufferLength,\n            );\n          },\n          this.pdfiumModule.pdfium.UTF16ToString,\n      );\n    }\n\n    return {\n      flag,\n      type,\n      name,\n      alternateName,\n      value,\n      isChecked,\n      options,\n      exportValue,\n    };\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.renderAnnotation}\n   *\n   * @public\n   */\n  renderPageAnnotation(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    annotation: PdfAnnotationObject,\n    options?: PdfRenderPageAnnotationOptions,\n  ): PdfTask<T> {\n    const {\n      scaleFactor = 1,\n      rotation = Rotation.Degree0,\n      dpr = 1,\n      mode = AppearanceMode.Normal,\n      imageType = 'image/webp',\n      imageQuality,\n    } = options ?? {};\n\n    this.logger.debug(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      'renderPageAnnotation',\n      doc,\n      page,\n      annotation,\n      options,\n    );\n    this.logger.perf(\n      LOG_SOURCE,\n      LOG_CATEGORY,\n      `RenderPageAnnotation`,\n      'Begin',\n      `${doc.id}-${page.index}-${annotation.id}`,\n    );\n\n    const task = new Task<T, PdfErrorReason>();\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `RenderPageAnnotation`,\n        'End',\n        `${doc.id}-${page.index}-${annotation.id}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    // 1) native handles\n    const pageCtx = ctx.acquirePage(page.index);\n    const annotPtr = this.getAnnotationByName(pageCtx.pagePtr, annotation.id);\n    if (!annotPtr) {\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `RenderPageAnnotation`,\n        'End',\n        `${doc.id}-${page.index}-${annotation.id}`,\n      );\n      pageCtx.release();\n      return PdfTaskHelper.reject({ code: PdfErrorCode.NotFound, message: 'annotation not found' });\n    }\n\n    // 2) device size (rotation-aware) → integer pixels\n    const finalScale = Math.max(0.01, scaleFactor * dpr);\n\n    const rect = toIntRect(annotation.rect);\n    const devRect = toIntRect(transformRect(page.size, rect, rotation, finalScale));\n\n    const wDev = Math.max(1, devRect.size.width);\n    const hDev = Math.max(1, devRect.size.height);\n    const stride = wDev * 4;\n    const bytes = stride * hDev;\n\n    // 3) bitmap backing store in WASM\n    const heapPtr = this.memoryManager.malloc(bytes);\n    const bitmapPtr = this.pdfiumModule.FPDFBitmap_CreateEx(\n      wDev,\n      hDev,\n      BitmapFormat.Bitmap_BGRA,\n      heapPtr,\n      stride,\n    );\n    this.pdfiumModule.FPDFBitmap_FillRect(bitmapPtr, 0, 0, wDev, hDev, 0x00000000);\n\n    // 4) user matrix (no Y-flip; includes -origin translate)\n    const M = buildUserToDeviceMatrix(\n      rect, // {origin:{L,B}, size:{W,H}}\n      rotation,\n      wDev,\n      hDev,\n    );\n    const mPtr = this.memoryManager.malloc(6 * 4);\n    const mView = new Float32Array(this.pdfiumModule.pdfium.HEAPF32.buffer, mPtr, 6);\n    mView.set([M.a, M.b, M.c, M.d, M.e, M.f]);\n\n    // 5) render (DisplayMatrix is applied inside EPDF_RenderAnnotBitmap)\n    const FLAGS = RenderFlag.REVERSE_BYTE_ORDER;\n    let ok = false;\n    try {\n      ok = !!this.pdfiumModule.EPDF_RenderAnnotBitmap(\n        bitmapPtr,\n        pageCtx.pagePtr,\n        annotPtr,\n        mode,\n        mPtr,\n        FLAGS,\n      );\n    } finally {\n      this.memoryManager.free(mPtr);\n      this.pdfiumModule.FPDFBitmap_Destroy(bitmapPtr); // frees wrapper, not our heapPtr\n      this.pdfiumModule.FPDFPage_CloseAnnot(annotPtr);\n      pageCtx.release();\n    }\n\n    if (!ok) {\n      this.memoryManager.free(heapPtr);\n      this.logger.perf(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `RenderPageAnnotation`,\n        'End',\n        `${doc.id}-${page.index}-${annotation.id}`,\n      );\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.Unknown,\n        message: 'EPDF_RenderAnnotBitmap failed',\n      });\n    }\n\n    // 6) encode\n    const dispose = () => this.memoryManager.free(heapPtr);\n\n    this.imageDataConverter(\n      () => {\n        const rgba = new Uint8ClampedArray(\n          this.pdfiumModule.pdfium.HEAPU8.subarray(heapPtr, heapPtr + bytes),\n        );\n        return {\n          width: wDev,\n          height: hDev,\n          data: rgba,\n        };\n      },\n      imageType,\n      imageQuality,\n    )\n      .then((out) => task.resolve(out))\n      .catch((e) => {\n        // Check if it's an OffscreenCanvas error and we haven't copied data yet\n        if (e instanceof OffscreenCanvasError) {\n          // Fallback to WASM encoding without wasting the copy\n          try {\n            const blob = this.encodeViaWasm(\n              { ptr: heapPtr, width: wDev, height: hDev, stride },\n              { type: imageType, quality: imageQuality },\n            );\n            task.resolve(blob as T);\n          } catch (wasmError) {\n            task.reject({ code: PdfErrorCode.Unknown, message: String(wasmError) });\n          }\n        } else {\n          task.reject({ code: PdfErrorCode.Unknown, message: String(e) });\n        }\n      })\n      .finally(dispose);\n\n    return task;\n  }\n\n  private encodeViaWasm(\n    buf: { ptr: number; width: number; height: number; stride: number },\n    opts: ConvertToBlobOptions,\n  ): Blob {\n    const pdf = this.pdfiumModule.pdfium;\n\n    // Helper to copy out and free a payload allocated in WASM\n    const blobFrom = (outPtr: WasmPointer, size: number, mime: string) => {\n      const view = pdf.HEAPU8.subarray(outPtr, outPtr + size);\n      const copy = new Uint8Array(view); // detach from WASM before free\n      this.memoryManager.free(outPtr);\n      return new Blob([copy], { type: mime });\n    };\n\n    // Map OffscreenCanvas \"quality 0..1\" to encoders:\n    //  • WebP: 0..100 (float), default ~0.82 → 82\n    //  • JPEG: 1..100 (int),   default ~0.92 → 92\n    //const q = opts.quality;\n    //const webpQ = q == null ? 82 : Math.round(q * 100);\n    //const jpegQ = q == null ? 92 : Math.max(1, Math.round(q * 100));\n    // PNG ignores quality (same as OffscreenCanvas). Use libpng default (6).\n    const pngLevel = 6;\n\n    const outPtrPtr = this.memoryManager.malloc(4);\n    try {\n      switch (opts.type) {\n        /*\n        case 'image/webp': {\n          const size = this.pdfiumModule.EPDF_WebP_EncodeRGBA(\n            buf.ptr,\n            buf.width,\n            buf.height,\n            buf.stride,\n            webpQ,\n            outPtrPtr,\n          );\n          const outPtr = pdf.getValue(outPtrPtr, 'i32');\n          return blobFrom(outPtr, size, 'image/webp');\n        }\n        case 'image/jpeg': {\n          const size = this.pdfiumModule.EPDF_JPEG_EncodeRGBA(\n            buf.ptr,\n            buf.width,\n            buf.height,\n            buf.stride,\n            jpegQ,\n            outPtrPtr,\n          );\n          const outPtr = pdf.getValue(outPtrPtr, 'i32');\n          return blobFrom(outPtr, size, 'image/jpeg');\n        }\n        */\n        case 'image/png':\n        default: {\n          const size = this.pdfiumModule.EPDF_PNG_EncodeRGBA(\n            buf.ptr,\n            buf.width,\n            buf.height,\n            buf.stride,\n            pngLevel,\n            outPtrPtr,\n          );\n          const outPtr = pdf.getValue(outPtrPtr, 'i32');\n          return blobFrom(WasmPointer(outPtr), size, 'image/png');\n        }\n      }\n    } finally {\n      this.memoryManager.free(outPtrPtr);\n    }\n  }\n\n  private renderRectEncoded(\n    doc: PdfDocumentObject,\n    page: PdfPageObject,\n    rect: Rect,\n    options?: PdfRenderPageOptions,\n  ): PdfTask<T> {\n    const task = new Task<T, PdfErrorReason>();\n\n    const imageType: ImageConversionTypes = options?.imageType ?? 'image/webp';\n    const quality = options?.imageQuality;\n    const rotation: Rotation = options?.rotation ?? Rotation.Degree0;\n\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'document does not open',\n      });\n    }\n\n    // ---- 1) decide device size (scale × dpr, swap for 90/270)\n    const scale = Math.max(0.01, options?.scaleFactor ?? 1);\n    const dpr = Math.max(1, options?.dpr ?? 1);\n    const finalScale = scale * dpr;\n\n    const baseW = rect.size.width;\n    const baseH = rect.size.height;\n    const swap = (rotation & 1) === 1; // 90 or 270\n\n    const wDev = Math.max(1, Math.round((swap ? baseH : baseW) * finalScale));\n    const hDev = Math.max(1, Math.round((swap ? baseW : baseH) * finalScale));\n    const stride = wDev * 4;\n    const bytes = stride * hDev;\n\n    const pageCtx = ctx.acquirePage(page.index);\n    const shouldRenderForms = options?.withForms ?? false;\n    const formHandle = shouldRenderForms ? pageCtx.getFormHandle() : undefined;\n\n    // ---- 2) allocate a BGRA bitmap in WASM\n    const heapPtr = this.memoryManager.malloc(bytes);\n    const bitmapPtr = this.pdfiumModule.FPDFBitmap_CreateEx(\n      wDev,\n      hDev,\n      BitmapFormat.Bitmap_BGRA,\n      heapPtr,\n      stride,\n    );\n    // white background like page renderers typically do\n    this.pdfiumModule.FPDFBitmap_FillRect(bitmapPtr, 0, 0, wDev, hDev, 0xffffffff);\n\n    const M = buildUserToDeviceMatrix(rect, rotation, wDev, hDev);\n\n    const mPtr = this.memoryManager.malloc(6 * 4); // FS_MATRIX\n    const mView = new Float32Array(this.pdfiumModule.pdfium.HEAPF32.buffer, mPtr, 6);\n    mView.set([M.a, M.b, M.c, M.d, M.e, M.f]);\n\n    // Clip to the whole bitmap (device space)\n    const clipPtr = this.memoryManager.malloc(4 * 4); // FS_RECTF {left,bottom,right,top}\n    const clipView = new Float32Array(this.pdfiumModule.pdfium.HEAPF32.buffer, clipPtr, 4);\n    clipView.set([0, 0, wDev, hDev]);\n\n    // Rendering flags: swap byte order to present RGBA to JS; include LCD_TEXT and ANNOT if asked\n    let flags = RenderFlag.REVERSE_BYTE_ORDER;\n    if (options?.withAnnotations ?? false) flags |= RenderFlag.ANNOT;\n\n    try {\n      this.pdfiumModule.FPDF_RenderPageBitmapWithMatrix(\n        bitmapPtr,\n        pageCtx.pagePtr,\n        mPtr,\n        clipPtr,\n        flags,\n      );\n\n      if (formHandle !== undefined) {\n        const formParams = computeFormDrawParams(M, rect, page.size, rotation);\n        const { startX, startY, formsWidth, formsHeight, scaleX, scaleY } = formParams;\n\n        // Draw form elements using the same effective transform as the page bitmap.\n        this.pdfiumModule.FPDF_FFLDraw(\n          formHandle,\n          bitmapPtr,\n          pageCtx.pagePtr,\n          startX,\n          startY,\n          formsWidth,\n          formsHeight,\n          rotation,\n          flags,\n        );\n      }\n    } finally {\n      pageCtx.release();\n      this.memoryManager.free(mPtr);\n      this.memoryManager.free(clipPtr);\n    }\n\n    const dispose = () => {\n      this.pdfiumModule.FPDFBitmap_Destroy(bitmapPtr);\n      this.memoryManager.free(heapPtr);\n    };\n\n    this.imageDataConverter(\n      () => {\n        const heapBuf = this.pdfiumModule.pdfium.HEAPU8.buffer as unknown as ArrayBuffer;\n        const data = new Uint8ClampedArray(heapBuf, heapPtr, bytes);\n        return {\n          width: wDev,\n          height: hDev,\n          data,\n        };\n      },\n      imageType,\n      quality,\n    )\n      .then((out) => task.resolve(out))\n      .catch((e) => {\n        this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'Error', e);\n        // Check if it's an OffscreenCanvas error and we haven't copied data yet\n        if (e instanceof OffscreenCanvasError) {\n          // Fallback to WASM encoding without wasting the copy\n          this.logger.info(LOG_SOURCE, LOG_CATEGORY, 'Fallback to WASM encoding');\n          try {\n            const blob = this.encodeViaWasm(\n              { ptr: heapPtr, width: wDev, height: hDev, stride },\n              { type: imageType, quality },\n            );\n            task.resolve(blob as T);\n          } catch (wasmError) {\n            task.reject({ code: PdfErrorCode.Unknown, message: String(wasmError) });\n          }\n        } else {\n          task.reject({ code: PdfErrorCode.Unknown, message: String(e) });\n        }\n      })\n      .finally(dispose);\n\n    return task;\n  }\n\n  /**\n   * Read the target of pdf link annotation\n   * @param docPtr - pointer to pdf document object\n   * @param getActionPtr - callback function to retrive the pointer of action\n   * @param getDestinationPtr - callback function to retrive the pointer of destination\n   * @returns target of link\n   *\n   * @private\n   */\n  private readPdfLinkAnnoTarget(\n    docPtr: number,\n    getActionPtr: () => number,\n    getDestinationPtr: () => number,\n  ): PdfLinkTarget | undefined {\n    const destinationPtr = getDestinationPtr();\n    if (destinationPtr) {\n      const destination = this.readPdfDestination(docPtr, destinationPtr);\n\n      return {\n        type: 'destination',\n        destination,\n      };\n    } else {\n      const actionPtr = getActionPtr();\n      if (actionPtr) {\n        const action = this.readPdfAction(docPtr, actionPtr);\n\n        return {\n          type: 'action',\n          action,\n        };\n      }\n    }\n  }\n\n  private createLocalDestPtr(docPtr: number, dest: PdfDestinationObject): number {\n    // Load page for local destinations.\n    const pagePtr = this.pdfiumModule.FPDF_LoadPage(docPtr, dest.pageIndex);\n    if (!pagePtr) return 0;\n\n    try {\n      if (dest.zoom.mode === PdfZoomMode.XYZ) {\n        const { x, y, zoom } = dest.zoom.params;\n        // We treat provided x/y/zoom as “specified”.\n        return this.pdfiumModule.EPDFDest_CreateXYZ(\n          pagePtr,\n          /*has_left*/ true,\n          x,\n          /*has_top*/ true,\n          y,\n          /*has_zoom*/ true,\n          zoom,\n        );\n      }\n\n      // Map non-XYZ “view modes” to PDFDEST_VIEW_* and params.\n      let viewEnum: PdfZoomMode;\n      let params: number[] = [];\n\n      switch (dest.zoom.mode) {\n        case PdfZoomMode.FitPage:\n          viewEnum = PdfZoomMode.FitPage; // no params\n          break;\n        case PdfZoomMode.FitHorizontal:\n          // FitH needs top; use view[0] if provided, else 0\n          viewEnum = PdfZoomMode.FitHorizontal;\n          params = [dest.view?.[0] ?? 0];\n          break;\n        case PdfZoomMode.FitVertical:\n          // FitV needs left; use view[0] if provided, else 0\n          viewEnum = PdfZoomMode.FitVertical;\n          params = [dest.view?.[0] ?? 0];\n          break;\n        case PdfZoomMode.FitRectangle:\n          // FitR needs left, bottom, right, top (pad with zeros).\n          {\n            const v = dest.view ?? [];\n            params = [v[0] ?? 0, v[1] ?? 0, v[2] ?? 0, v[3] ?? 0];\n            viewEnum = PdfZoomMode.FitRectangle;\n          }\n          break;\n        case PdfZoomMode.Unknown:\n        default:\n          // Unknown cannot be encoded as a valid explicit destination.\n          return 0;\n      }\n\n      return this.withFloatArray(params, (ptr, count) =>\n        this.pdfiumModule.EPDFDest_CreateView(pagePtr, viewEnum, ptr, count),\n      );\n    } finally {\n      this.pdfiumModule.FPDF_ClosePage(pagePtr);\n    }\n  }\n\n  private applyBookmarkTarget(docPtr: number, bmPtr: number, target: PdfLinkTarget): boolean {\n    if (target.type === 'destination') {\n      const destPtr = this.createLocalDestPtr(docPtr, target.destination);\n      if (!destPtr) return false;\n      const ok = this.pdfiumModule.EPDFBookmark_SetDest(docPtr, bmPtr, destPtr);\n      return !!ok;\n    }\n\n    // target.type === 'action'\n    const action = target.action;\n    switch (action.type) {\n      case PdfActionType.Goto: {\n        const destPtr = this.createLocalDestPtr(docPtr, action.destination);\n        if (!destPtr) return false;\n        const actPtr = this.pdfiumModule.EPDFAction_CreateGoTo(docPtr, destPtr);\n        if (!actPtr) return false;\n        return !!this.pdfiumModule.EPDFBookmark_SetAction(docPtr, bmPtr, actPtr);\n      }\n\n      case PdfActionType.URI: {\n        const actPtr = this.pdfiumModule.EPDFAction_CreateURI(docPtr, action.uri);\n        if (!actPtr) return false;\n        return !!this.pdfiumModule.EPDFBookmark_SetAction(docPtr, bmPtr, actPtr);\n      }\n\n      case PdfActionType.LaunchAppOrOpenFile: {\n        const actPtr = this.withWString(action.path, (wptr) =>\n          this.pdfiumModule.EPDFAction_CreateLaunch(docPtr, wptr),\n        );\n        if (!actPtr) return false;\n        return !!this.pdfiumModule.EPDFBookmark_SetAction(docPtr, bmPtr, actPtr);\n      }\n\n      case PdfActionType.RemoteGoto:\n        // We need a file path to build a GoToR action. Your Action shape\n        // doesn’t carry a path, so we’ll reject for now.\n        return false;\n\n      case PdfActionType.Unsupported:\n      default:\n        return false;\n    }\n  }\n\n  /**\n   * Read pdf action from pdf document\n   * @param docPtr - pointer to pdf document object\n   * @param actionPtr - pointer to pdf action object\n   * @returns pdf action object\n   *\n   * @private\n   */\n  private readPdfAction(docPtr: number, actionPtr: number): PdfActionObject {\n    const actionType = this.pdfiumModule.FPDFAction_GetType(actionPtr) as PdfActionType;\n    let action: PdfActionObject;\n    switch (actionType) {\n      case PdfActionType.Unsupported:\n        action = {\n          type: PdfActionType.Unsupported,\n        };\n        break;\n      case PdfActionType.Goto:\n        {\n          const destinationPtr = this.pdfiumModule.FPDFAction_GetDest(docPtr, actionPtr);\n          if (destinationPtr) {\n            const destination = this.readPdfDestination(docPtr, destinationPtr);\n\n            action = {\n              type: PdfActionType.Goto,\n              destination,\n            };\n          } else {\n            action = {\n              type: PdfActionType.Unsupported,\n            };\n          }\n        }\n        break;\n      case PdfActionType.RemoteGoto:\n        {\n          // In case of remote goto action,\n          // the application should first use FPDFAction_GetFilePath\n          // to get file path, then load that particular document,\n          // and use its document handle to call this\n          action = {\n            type: PdfActionType.Unsupported,\n          };\n        }\n        break;\n      case PdfActionType.URI:\n        {\n          const uri = readString(\n            this.pdfiumModule.pdfium,\n            (buffer, bufferLength) => {\n              return this.pdfiumModule.FPDFAction_GetURIPath(\n                docPtr,\n                actionPtr,\n                buffer,\n                bufferLength,\n              );\n            },\n            this.pdfiumModule.pdfium.UTF8ToString,\n          );\n\n          action = {\n            type: PdfActionType.URI,\n            uri,\n          };\n        }\n        break;\n      case PdfActionType.LaunchAppOrOpenFile:\n        {\n          const path = readString(\n            this.pdfiumModule.pdfium,\n            (buffer, bufferLength) => {\n              return this.pdfiumModule.FPDFAction_GetFilePath(actionPtr, buffer, bufferLength);\n            },\n            this.pdfiumModule.pdfium.UTF8ToString,\n          );\n          action = {\n            type: PdfActionType.LaunchAppOrOpenFile,\n            path,\n          };\n        }\n        break;\n    }\n\n    return action;\n  }\n\n  /**\n   * Read pdf destination object\n   * @param docPtr - pointer to pdf document object\n   * @param destinationPtr - pointer to pdf destination\n   * @returns pdf destination object\n   *\n   * @private\n   */\n  private readPdfDestination(docPtr: number, destinationPtr: number): PdfDestinationObject {\n    const pageIndex = this.pdfiumModule.FPDFDest_GetDestPageIndex(docPtr, destinationPtr);\n    // Every params is a float value\n    const maxParmamsCount = 4;\n    const paramsCountPtr = this.memoryManager.malloc(maxParmamsCount);\n    const paramsPtr = this.memoryManager.malloc(maxParmamsCount * 4);\n    const zoomMode = this.pdfiumModule.FPDFDest_GetView(\n      destinationPtr,\n      paramsCountPtr,\n      paramsPtr,\n    ) as PdfZoomMode;\n    const paramsCount = this.pdfiumModule.pdfium.getValue(paramsCountPtr, 'i32');\n    const view: number[] = [];\n    for (let i = 0; i < paramsCount; i++) {\n      const paramPtr = paramsPtr + i * 4;\n      view.push(this.pdfiumModule.pdfium.getValue(paramPtr, 'float'));\n    }\n    this.memoryManager.free(paramsCountPtr);\n    this.memoryManager.free(paramsPtr);\n\n    if (zoomMode === PdfZoomMode.XYZ) {\n      const hasXPtr = this.memoryManager.malloc(1);\n      const hasYPtr = this.memoryManager.malloc(1);\n      const hasZPtr = this.memoryManager.malloc(1);\n      const xPtr = this.memoryManager.malloc(4);\n      const yPtr = this.memoryManager.malloc(4);\n      const zPtr = this.memoryManager.malloc(4);\n\n      const isSucceed = this.pdfiumModule.FPDFDest_GetLocationInPage(\n        destinationPtr,\n        hasXPtr,\n        hasYPtr,\n        hasZPtr,\n        xPtr,\n        yPtr,\n        zPtr,\n      );\n      if (isSucceed) {\n        const hasX = this.pdfiumModule.pdfium.getValue(hasXPtr, 'i8');\n        const hasY = this.pdfiumModule.pdfium.getValue(hasYPtr, 'i8');\n        const hasZ = this.pdfiumModule.pdfium.getValue(hasZPtr, 'i8');\n\n        const x = hasX ? this.pdfiumModule.pdfium.getValue(xPtr, 'float') : 0;\n        const y = hasY ? this.pdfiumModule.pdfium.getValue(yPtr, 'float') : 0;\n        const zoom = hasZ ? this.pdfiumModule.pdfium.getValue(zPtr, 'float') : 0;\n\n        this.memoryManager.free(hasXPtr);\n        this.memoryManager.free(hasYPtr);\n        this.memoryManager.free(hasZPtr);\n        this.memoryManager.free(xPtr);\n        this.memoryManager.free(yPtr);\n        this.memoryManager.free(zPtr);\n\n        return {\n          pageIndex,\n          zoom: {\n            mode: zoomMode,\n            params: {\n              x,\n              y,\n              zoom,\n            },\n          },\n          view,\n        };\n      }\n\n      this.memoryManager.free(hasXPtr);\n      this.memoryManager.free(hasYPtr);\n      this.memoryManager.free(hasZPtr);\n      this.memoryManager.free(xPtr);\n      this.memoryManager.free(yPtr);\n      this.memoryManager.free(zPtr);\n\n      return {\n        pageIndex,\n        zoom: {\n          mode: zoomMode,\n          params: {\n            x: 0,\n            y: 0,\n            zoom: 0,\n          },\n        },\n        view,\n      };\n    }\n\n    return {\n      pageIndex,\n      zoom: {\n        mode: zoomMode,\n      },\n      view,\n    };\n  }\n\n  /**\n   * Read attachmet from pdf document\n   * @param docPtr - pointer to pdf document object\n   * @param index - index of attachment\n   * @returns attachment content\n   *\n   * @private\n   */\n  private readPdfAttachment(docPtr: number, index: number): PdfAttachmentObject {\n    const attachmentPtr = this.pdfiumModule.FPDFDoc_GetAttachment(docPtr, index);\n    const name = readString(\n      this.pdfiumModule.pdfium,\n      (buffer, bufferLength) => {\n        return this.pdfiumModule.FPDFAttachment_GetName(attachmentPtr, buffer, bufferLength);\n      },\n      this.pdfiumModule.pdfium.UTF16ToString,\n    );\n    const description = readString(\n      this.pdfiumModule.pdfium,\n      (buffer, bufferLength) => {\n        return this.pdfiumModule.EPDFAttachment_GetDescription(attachmentPtr, buffer, bufferLength);\n      },\n      this.pdfiumModule.pdfium.UTF16ToString,\n    );\n    const mimeType = readString(\n      this.pdfiumModule.pdfium,\n      (buffer, bufferLength) => {\n        return this.pdfiumModule.FPDFAttachment_GetSubtype(attachmentPtr, buffer, bufferLength);\n      },\n      this.pdfiumModule.pdfium.UTF16ToString,\n    );\n    const creationDate = this.getAttachmentDate(attachmentPtr, 'CreationDate');\n    const checksum = readString(\n      this.pdfiumModule.pdfium,\n      (buffer, bufferLength) => {\n        return this.pdfiumModule.FPDFAttachment_GetStringValue(\n          attachmentPtr,\n          'Checksum',\n          buffer,\n          bufferLength,\n        );\n      },\n      this.pdfiumModule.pdfium.UTF16ToString,\n    );\n    const size = this.getAttachmentNumber(attachmentPtr, 'Size');\n\n    return {\n      index,\n      name,\n      description,\n      mimeType,\n      size,\n      creationDate,\n      checksum,\n    };\n  }\n\n  /**\n   * Convert coordinate of point from device coordinate to page coordinate\n   * @param page  - pdf page infor\n   * @param position - position of point\n   * @returns converted position\n   *\n   * @private\n   */\n  private convertDevicePointToPagePoint(page: PdfPageObject, position: Position): Position {\n    const DW = page.size.width;\n    const DH = page.size.height;\n    const r = page.rotation & 3;\n\n    if (r === 0) {\n      // 0°\n      return { x: position.x, y: DH - position.y };\n    }\n    if (r === 1) {\n      // 90° CW\n      // x_d = sx*y, y_d = sy*x  =>  x = y_d/sy, y = x_d/sx\n      return { x: position.y, y: position.x };\n    }\n    if (r === 2) {\n      // 180°\n      return { x: DW - position.x, y: position.y };\n    }\n    {\n      // 270° CW\n      // x_d = DW - sx*y, y_d = DH - sy*x\n      return { x: DH - position.y, y: DW - position.x };\n    }\n  }\n\n  /**\n   * Convert coordinate of point from page coordinate to device coordinate\n   * @param page  - pdf page infor\n   * @param position - position of point\n   * @returns converted position\n   *\n   * @private\n   */\n  private convertPagePointToDevicePoint(page: PdfPageObject, position: Position): Position {\n    const DW = page.size.width;\n    const DH = page.size.height;\n    const r = page.rotation & 3;\n\n    if (r === 0) {\n      // 0°\n      return { x: position.x, y: DH - position.y };\n    }\n    if (r === 1) {\n      // 90° CW\n      return { x: position.y, y: position.x };\n    }\n    if (r === 2) {\n      // 180°\n      return { x: DW - position.x, y: position.y };\n    }\n    {\n      // 270° CW\n      return { x: DW - position.y, y: DH - position.x };\n    }\n  }\n\n  /**\n   * Convert coordinate of rectangle from page coordinate to device coordinate\n   * @param page  - pdf page infor\n   * @param pagePtr - pointer to pdf page object\n   * @param pageRect - rectangle that needs to be converted\n   * @returns converted rectangle\n   *\n   * @private\n   */\n  private convertPageRectToDeviceRect(\n    page: PdfPageObject,\n    pageRect: {\n      left: number;\n      top: number;\n      right: number;\n      bottom: number;\n    },\n  ): Rect {\n    const { x, y } = this.convertPagePointToDevicePoint(page, {\n      x: pageRect.left,\n      y: pageRect.top,\n    });\n    const rect = {\n      origin: {\n        x,\n        y,\n      },\n      size: {\n        width: Math.abs(pageRect.right - pageRect.left),\n        height: Math.abs(pageRect.top - pageRect.bottom),\n      },\n    };\n\n    return rect;\n  }\n\n  /**\n   * Read the appearance stream of annotation\n   * @param annotationPtr - pointer to pdf annotation\n   * @param mode - appearance mode\n   * @returns appearance stream\n   *\n   * @private\n   */\n  private readPageAnnoAppearanceStreams(annotationPtr: number) {\n    return {\n      normal: this.readPageAnnoAppearanceStream(annotationPtr, AppearanceMode.Normal),\n      rollover: this.readPageAnnoAppearanceStream(annotationPtr, AppearanceMode.Rollover),\n      down: this.readPageAnnoAppearanceStream(annotationPtr, AppearanceMode.Down),\n    };\n  }\n\n  /**\n   * Read the appearance stream of annotation\n   * @param annotationPtr - pointer to pdf annotation\n   * @param mode - appearance mode\n   * @returns appearance stream\n   *\n   * @private\n   */\n  private readPageAnnoAppearanceStream(annotationPtr: number, mode = AppearanceMode.Normal) {\n    const utf16Length = this.pdfiumModule.FPDFAnnot_GetAP(annotationPtr, mode, 0, 0);\n    const bytesCount = (utf16Length + 1) * 2; // include NIL\n    const bufferPtr = this.memoryManager.malloc(bytesCount);\n    this.pdfiumModule.FPDFAnnot_GetAP(annotationPtr, mode, bufferPtr, bytesCount);\n    const ap = this.pdfiumModule.pdfium.UTF16ToString(bufferPtr);\n    this.memoryManager.free(bufferPtr);\n\n    return ap;\n  }\n\n  /**\n   * Set the appearance stream of annotation\n   * @param annotationPtr - pointer to pdf annotation\n   * @param mode - appearance mode\n   * @param apContent - appearance stream content (null to remove)\n   * @returns whether the appearance stream was set successfully\n   *\n   * @private\n   */\n  private setPageAnnoAppearanceStream(\n    annotationPtr: number,\n    mode: AppearanceMode = AppearanceMode.Normal,\n    apContent: string,\n  ): boolean {\n    // UTF-16LE buffer (+2 bytes for NUL)\n    const bytes = 2 * (apContent.length + 1);\n    const ptr = this.memoryManager.malloc(bytes);\n    try {\n      this.pdfiumModule.pdfium.stringToUTF16(apContent, ptr, bytes);\n      const ok = this.pdfiumModule.FPDFAnnot_SetAP(annotationPtr, mode, ptr);\n      return !!ok;\n    } finally {\n      this.memoryManager.free(ptr);\n    }\n  }\n\n  /**\n   * Set the rect of specified annotation\n   * @param page - page info that the annotation is belonged to\n   * @param annotationPtr - pointer to annotation object\n   * @param rect - target rectangle\n   * @returns whether the rect is setted\n   *\n   * @private\n   */\n  private setPageAnnoRect(page: PdfPageObject, annotPtr: number, rect: Rect): boolean {\n    // Snap device edges the same way FPDF_DeviceToPage(int,int,...) did (truncate → floor for ≥0)\n    const x0d = Math.floor(rect.origin.x);\n    const y0d = Math.floor(rect.origin.y);\n    const x1d = Math.floor(rect.origin.x + rect.size.width);\n    const y1d = Math.floor(rect.origin.y + rect.size.height);\n\n    // Map all 4 integer corners to page space (handles any /Rotate)\n    const TL = this.convertDevicePointToPagePoint(page, { x: x0d, y: y0d });\n    const TR = this.convertDevicePointToPagePoint(page, { x: x1d, y: y0d });\n    const BR = this.convertDevicePointToPagePoint(page, { x: x1d, y: y1d });\n    const BL = this.convertDevicePointToPagePoint(page, { x: x0d, y: y1d });\n\n    // Page-space AABB\n    let left = Math.min(TL.x, TR.x, BR.x, BL.x);\n    let right = Math.max(TL.x, TR.x, BR.x, BL.x);\n    let bottom = Math.min(TL.y, TR.y, BR.y, BL.y);\n    let top = Math.max(TL.y, TR.y, BR.y, BL.y);\n    if (left > right) [left, right] = [right, left];\n    if (bottom > top) [bottom, top] = [top, bottom];\n\n    // Write FS_RECTF in memory order: L, T, R, B\n    const ptr = this.memoryManager.malloc(16);\n    const pdf = this.pdfiumModule.pdfium;\n    pdf.setValue(ptr + 0, left, 'float'); // L\n    pdf.setValue(ptr + 4, top, 'float'); // T\n    pdf.setValue(ptr + 8, right, 'float'); // R\n    pdf.setValue(ptr + 12, bottom, 'float'); // B\n\n    const ok = this.pdfiumModule.FPDFAnnot_SetRect(annotPtr, ptr);\n    this.memoryManager.free(ptr);\n    return !!ok;\n  }\n\n  /**\n   * Read the rectangle of annotation\n   * @param annotationPtr - pointer to pdf annotation\n   * @returns rectangle of annotation\n   *\n   * @private\n   */\n  private readPageAnnoRect(annotationPtr: number) {\n    const pageRectPtr = this.memoryManager.malloc(4 * 4);\n    const pageRect = {\n      left: 0,\n      top: 0,\n      right: 0,\n      bottom: 0,\n    };\n    if (this.pdfiumModule.FPDFAnnot_GetRect(annotationPtr, pageRectPtr)) {\n      pageRect.left = this.pdfiumModule.pdfium.getValue(pageRectPtr, 'float');\n      pageRect.top = this.pdfiumModule.pdfium.getValue(pageRectPtr + 4, 'float');\n      pageRect.right = this.pdfiumModule.pdfium.getValue(pageRectPtr + 8, 'float');\n      pageRect.bottom = this.pdfiumModule.pdfium.getValue(pageRectPtr + 12, 'float');\n    }\n    this.memoryManager.free(pageRectPtr);\n\n    return pageRect;\n  }\n\n  /**\n   * Get highlight rects for a specific character range (for search highlighting)\n   * @param page - pdf page info\n   * @param pagePtr - pointer to pdf page\n   * @param textPagePtr - pointer to pdf text page\n   * @param startIndex - starting character index\n   * @param charCount - number of characters in the range\n   * @returns array of rectangles for highlighting the specified character range\n   *\n   * @private\n   */\n  private getHighlightRects(\n    page: PdfPageObject,\n    textPagePtr: number,\n    startIndex: number,\n    charCount: number,\n  ): Rect[] {\n    const rectsCount = this.pdfiumModule.FPDFText_CountRects(textPagePtr, startIndex, charCount);\n    const highlightRects: Rect[] = [];\n\n    // scratch doubles for the page-space rect\n    const l = this.memoryManager.malloc(8);\n    const t = this.memoryManager.malloc(8);\n    const r = this.memoryManager.malloc(8);\n    const b = this.memoryManager.malloc(8);\n\n    for (let i = 0; i < rectsCount; i++) {\n      const ok = this.pdfiumModule.FPDFText_GetRect(textPagePtr, i, l, t, r, b);\n      if (!ok) continue;\n\n      const left = this.pdfiumModule.pdfium.getValue(l, 'double');\n      const top = this.pdfiumModule.pdfium.getValue(t, 'double');\n      const right = this.pdfiumModule.pdfium.getValue(r, 'double');\n      const bottom = this.pdfiumModule.pdfium.getValue(b, 'double');\n\n      // transform all four corners to device space\n      const p1 = this.convertPagePointToDevicePoint(page, { x: left, y: top });\n      const p2 = this.convertPagePointToDevicePoint(page, { x: right, y: top });\n      const p3 = this.convertPagePointToDevicePoint(page, { x: right, y: bottom });\n      const p4 = this.convertPagePointToDevicePoint(page, { x: left, y: bottom });\n\n      const xs = [p1.x, p2.x, p3.x, p4.x];\n      const ys = [p1.y, p2.y, p3.y, p4.y];\n\n      const x = Math.min(...xs);\n      const y = Math.min(...ys);\n      const width = Math.max(...xs) - x;\n      const height = Math.max(...ys) - y;\n\n      // ceil so highlights fully cover glyphs at integer pixels\n      highlightRects.push({\n        origin: { x, y },\n        size: { width: Math.ceil(width), height: Math.ceil(height) },\n      });\n    }\n\n    this.memoryManager.free(l);\n    this.memoryManager.free(t);\n    this.memoryManager.free(r);\n    this.memoryManager.free(b);\n\n    return highlightRects;\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.searchAllPages}\n   *\n   * Runs inside the worker.\n   * Emits per-page progress: { page, results }\n   *\n   * @public\n   */\n  searchAllPages(\n    doc: PdfDocumentObject,\n    keyword: string,\n    options?: PdfSearchAllPagesOptions,\n  ): PdfTask<SearchAllPagesResult, PdfPageSearchProgress> {\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'searchAllPages', doc, keyword, options);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'SearchAllPages', 'Begin', doc.id);\n\n    // Resolve early if doc not open\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'SearchAllPages', 'End', doc.id);\n      return PdfTaskHelper.resolve<SearchAllPagesResult, PdfPageSearchProgress>({\n        results: [],\n        total: 0,\n      });\n    }\n\n    // Build UTF-16 keyword buffer\n    const length = 2 * (keyword.length + 1);\n    const keywordPtr = this.memoryManager.malloc(length);\n    this.pdfiumModule.pdfium.stringToUTF16(keyword, keywordPtr, length);\n\n    // Fold flags\n    const flag =\n      options?.flags?.reduce((acc: MatchFlag, f: MatchFlag) => acc | f, MatchFlag.None) ??\n      MatchFlag.None;\n\n    // Create task with progress payload\n    const task = PdfTaskHelper.create<SearchAllPagesResult, PdfPageSearchProgress>();\n\n    let cancelled = false;\n    task.wait(\n      () => {},\n      (err) => {\n        if (err.type === 'abort') cancelled = true;\n      },\n    );\n\n    const CHUNK_SIZE = 100; // tune as needed\n    const allResults: SearchResult[] = [];\n\n    const processChunk = (startIdx: number): void => {\n      if (cancelled) return;\n\n      const endIdx = Math.min(startIdx + CHUNK_SIZE, doc.pageCount);\n\n      try {\n        for (let pageIndex = startIdx; pageIndex < endIdx && !cancelled; pageIndex++) {\n          // Search this page once\n          const pageResults = this.searchAllInPage(ctx, doc.pages[pageIndex], keywordPtr, flag);\n\n          // Accumulate and emit progress\n          allResults.push(...pageResults);\n          task.progress({ page: pageIndex, results: pageResults });\n        }\n      } catch (e) {\n        if (!cancelled) {\n          this.memoryManager.free(keywordPtr);\n          this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'SearchAllPages', 'End', doc.id);\n          task.reject({\n            code: PdfErrorCode.Unknown,\n            message: `Error searching document: ${e}`,\n          });\n        }\n        return;\n      }\n\n      if (cancelled) return;\n\n      if (endIdx >= doc.pageCount) {\n        this.memoryManager.free(keywordPtr);\n        this.logger.perf(LOG_SOURCE, LOG_CATEGORY, 'SearchAllPages', 'End', doc.id);\n        task.resolve({ results: allResults, total: allResults.length });\n        return;\n      }\n\n      // yield to event loop\n      setTimeout(() => processChunk(endIdx), 0);\n    };\n\n    // kick off\n    setTimeout(() => processChunk(0), 0);\n\n    // Ensure buffer is freed if caller aborts mid-flight\n    task.wait(\n      () => {},\n      (err) => {\n        if (err.type === 'abort') {\n          try {\n            this.memoryManager.free(keywordPtr);\n          } catch {}\n        }\n      },\n    );\n\n    return task;\n  }\n\n  /**\n   * Extract word-aligned context for a search hit.\n   *\n   * @param fullText      full UTF-16 page text (fetch this once per page!)\n   * @param start         index of 1st char that matched\n   * @param count         number of chars in the match\n   * @param windowChars   minimum context chars to keep left & right\n   */\n  private buildContext(\n    fullText: string,\n    start: number,\n    count: number,\n    windowChars = 30,\n  ): TextContext {\n    const WORD_BREAK = /[\\s\\u00A0.,;:!?()\\[\\]{}<>/\\\\\\-\"'`\"”\\u2013\\u2014]/;\n\n    // Find the start of a word moving left\n    const findWordStart = (index: number): number => {\n      while (index > 0 && !WORD_BREAK.test(fullText[index - 1])) index--;\n      return index;\n    };\n\n    // Find the end of a word moving right\n    const findWordEnd = (index: number): number => {\n      while (index < fullText.length && !WORD_BREAK.test(fullText[index])) index++;\n      return index;\n    };\n\n    // Move left to build context\n    let left = start;\n    while (left > 0 && WORD_BREAK.test(fullText[left - 1])) left--; // Skip blanks\n    let collected = 0;\n    while (left > 0 && collected < windowChars) {\n      left--;\n      if (!WORD_BREAK.test(fullText[left])) collected++;\n    }\n    left = findWordStart(left);\n\n    // Move right to build context\n    let right = start + count;\n    while (right < fullText.length && WORD_BREAK.test(fullText[right])) right++; // Skip blanks\n    collected = 0;\n    while (right < fullText.length && collected < windowChars) {\n      if (!WORD_BREAK.test(fullText[right])) collected++;\n      right++;\n    }\n    right = findWordEnd(right);\n\n    // Compose the context\n    const before = fullText.slice(left, start).replace(/\\s+/g, ' ').trimStart();\n    const match = fullText.slice(start, start + count);\n    const after = fullText\n      .slice(start + count, right)\n      .replace(/\\s+/g, ' ')\n      .trimEnd();\n\n    return {\n      before: this.tidy(before),\n      match: this.tidy(match),\n      after: this.tidy(after),\n      truncatedLeft: left > 0,\n      truncatedRight: right < fullText.length,\n    };\n  }\n\n  /**\n   * Tidy the text to remove any non-printable characters and whitespace\n   * @param s - text to tidy\n   * @returns tidied text\n   *\n   * @private\n   */\n  private tidy(s: string): string {\n    return (\n      s\n        /* 1️⃣  join words split by hyphen + U+FFFE + whitespace */\n        .replace(/-\\uFFFE\\s*/g, '')\n\n        /* 2️⃣  drop any remaining U+FFFE, soft-hyphen, zero-width chars */\n        .replace(/[\\uFFFE\\u00AD\\u200B\\u2060\\uFEFF]/g, '')\n\n        /* 3️⃣  collapse whitespace so we stay on one line */\n        .replace(/\\s+/g, ' ')\n    );\n  }\n\n  /**\n   * Search for all occurrences of a keyword on a single page\n   * This method efficiently loads the page only once and finds all matches\n   *\n   * @param docPtr - pointer to pdf document\n   * @param page - pdf page object\n   * @param pageIndex - index of the page\n   * @param keywordPtr - pointer to the search keyword\n   * @param flag - search flags\n   * @returns array of search results on this page\n   *\n   * @private\n   */\n  private searchAllInPage(\n    ctx: DocumentContext,\n    page: PdfPageObject,\n    keywordPtr: number,\n    flag: number,\n  ): SearchResult[] {\n    return ctx.borrowPage(page.index, (pageCtx) => {\n      const textPagePtr = pageCtx.getTextPage();\n\n      // Load the full text of the page once\n      const total = this.pdfiumModule.FPDFText_CountChars(textPagePtr);\n      const bufPtr = this.memoryManager.malloc(2 * (total + 1));\n      this.pdfiumModule.FPDFText_GetText(textPagePtr, 0, total, bufPtr);\n      const fullText = this.pdfiumModule.pdfium.UTF16ToString(bufPtr);\n      this.memoryManager.free(bufPtr);\n\n      const pageResults: SearchResult[] = [];\n\n      // Initialize search handle once for the page\n      const searchHandle = this.pdfiumModule.FPDFText_FindStart(\n        textPagePtr,\n        keywordPtr,\n        flag,\n        0, // Start from the beginning of the page\n      );\n\n      // Call FindNext repeatedly to get all matches on the page\n      while (this.pdfiumModule.FPDFText_FindNext(searchHandle)) {\n        const charIndex = this.pdfiumModule.FPDFText_GetSchResultIndex(searchHandle);\n        const charCount = this.pdfiumModule.FPDFText_GetSchCount(searchHandle);\n\n        const rects = this.getHighlightRects(page, textPagePtr, charIndex, charCount);\n\n        const context = this.buildContext(fullText, charIndex, charCount);\n\n        pageResults.push({\n          pageIndex: page.index,\n          charIndex,\n          charCount,\n          rects,\n          context,\n        });\n      }\n\n      // Close the search handle only once after finding all results\n      this.pdfiumModule.FPDFText_FindClose(searchHandle);\n      return pageResults;\n    });\n  }\n\n  /**\n   * {@inheritDoc @kopjra/embedpdf-models!PdfEngine.preparePrintDocument}\n   *\n   * Prepares a PDF document for printing with specified options.\n   * Creates a new document with selected pages and optionally removes annotations\n   * for optimal printing performance.\n   *\n   * @public\n   */\n  preparePrintDocument(doc: PdfDocumentObject, options?: PdfPrintOptions): PdfTask<ArrayBuffer> {\n    const { includeAnnotations = true, pageRange = null } = options ?? {};\n\n    this.logger.debug(LOG_SOURCE, LOG_CATEGORY, 'preparePrintDocument', doc, options);\n    this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `PreparePrintDocument`, 'Begin', doc.id);\n\n    // Verify document is open\n    const ctx = this.cache.getContext(doc.id);\n    if (!ctx) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `PreparePrintDocument`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.DocNotOpen,\n        message: 'Document is not open',\n      });\n    }\n\n    // Create new document for printing\n    const printDocPtr = this.pdfiumModule.FPDF_CreateNewDocument();\n    if (!printDocPtr) {\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `PreparePrintDocument`, 'End', doc.id);\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.CantCreateNewDoc,\n        message: 'Cannot create print document',\n      });\n    }\n\n    try {\n      // Validate and sanitize page range\n      const sanitizedPageRange = this.sanitizePageRange(pageRange, doc.pageCount);\n\n      // Import pages from source document\n      // pageRange null means import all pages\n      if (\n        !this.pdfiumModule.FPDF_ImportPages(\n          printDocPtr,\n          ctx.docPtr,\n          sanitizedPageRange ?? '',\n          0, // Insert at beginning\n        )\n      ) {\n        this.pdfiumModule.FPDF_CloseDocument(printDocPtr);\n        this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'Failed to import pages for printing');\n        this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `PreparePrintDocument`, 'End', doc.id);\n\n        return PdfTaskHelper.reject({\n          code: PdfErrorCode.CantImportPages,\n          message: 'Failed to import pages for printing',\n        });\n      }\n\n      // Remove annotations if requested\n      if (!includeAnnotations) {\n        const removalResult = this.removeAnnotationsFromPrintDocument(printDocPtr);\n\n        if (!removalResult.success) {\n          this.pdfiumModule.FPDF_CloseDocument(printDocPtr);\n          this.logger.error(\n            LOG_SOURCE,\n            LOG_CATEGORY,\n            `Failed to remove annotations: ${removalResult.error}`,\n          );\n          this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `PreparePrintDocument`, 'End', doc.id);\n\n          return PdfTaskHelper.reject({\n            code: PdfErrorCode.Unknown,\n            message: `Failed to prepare print document: ${removalResult.error}`,\n          });\n        }\n\n        this.logger.debug(\n          LOG_SOURCE,\n          LOG_CATEGORY,\n          `Removed ${removalResult.annotationsRemoved} annotations from ${removalResult.pagesProcessed} pages`,\n        );\n      }\n\n      // Save the prepared document to buffer\n      const buffer = this.saveDocument(printDocPtr);\n\n      // Clean up\n      this.pdfiumModule.FPDF_CloseDocument(printDocPtr);\n\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `PreparePrintDocument`, 'End', doc.id);\n      return PdfTaskHelper.resolve(buffer);\n    } catch (error) {\n      // Ensure cleanup on any error\n      if (printDocPtr) {\n        this.pdfiumModule.FPDF_CloseDocument(printDocPtr);\n      }\n\n      this.logger.error(LOG_SOURCE, LOG_CATEGORY, 'preparePrintDocument failed', error);\n      this.logger.perf(LOG_SOURCE, LOG_CATEGORY, `PreparePrintDocument`, 'End', doc.id);\n\n      return PdfTaskHelper.reject({\n        code: PdfErrorCode.Unknown,\n        message: error instanceof Error ? error.message : 'Failed to prepare print document',\n      });\n    }\n  }\n\n  /**\n   * Removes all annotations from a print document using fast raw annotation functions.\n   * This method is optimized for performance by avoiding full page loading.\n   *\n   * @param printDocPtr - Pointer to the print document\n   * @returns Result object with success status and statistics\n   *\n   * @private\n   */\n  private removeAnnotationsFromPrintDocument(printDocPtr: number): {\n    success: boolean;\n    annotationsRemoved: number;\n    pagesProcessed: number;\n    error?: string;\n  } {\n    let totalAnnotationsRemoved = 0;\n    let pagesProcessed = 0;\n\n    try {\n      const pageCount = this.pdfiumModule.FPDF_GetPageCount(printDocPtr);\n\n      // Process each page\n      for (let pageIndex = 0; pageIndex < pageCount; pageIndex++) {\n        // Get annotation count using the fast raw function\n        const annotCount = this.pdfiumModule.EPDFPage_GetAnnotCountRaw(printDocPtr, pageIndex);\n\n        if (annotCount <= 0) {\n          pagesProcessed++;\n          continue;\n        }\n\n        // Remove annotations in reverse order to maintain indices\n        // This is important because removing an annotation shifts the indices of subsequent ones\n        let annotationsRemovedFromPage = 0;\n\n        for (let annotIndex = annotCount - 1; annotIndex >= 0; annotIndex--) {\n          // Use the fast raw removal function\n          const removed = this.pdfiumModule.EPDFPage_RemoveAnnotRaw(\n            printDocPtr,\n            pageIndex,\n            annotIndex,\n          );\n\n          if (removed) {\n            annotationsRemovedFromPage++;\n            totalAnnotationsRemoved++;\n          } else {\n            this.logger.warn(\n              LOG_SOURCE,\n              LOG_CATEGORY,\n              `Failed to remove annotation ${annotIndex} from page ${pageIndex}`,\n            );\n          }\n        }\n\n        // Generate content for the page if annotations were removed\n        if (annotationsRemovedFromPage > 0) {\n          // We need to regenerate the page content after removing annotations\n          const pagePtr = this.pdfiumModule.FPDF_LoadPage(printDocPtr, pageIndex);\n          if (pagePtr) {\n            this.pdfiumModule.FPDFPage_GenerateContent(pagePtr);\n            this.pdfiumModule.FPDF_ClosePage(pagePtr);\n          }\n        }\n\n        pagesProcessed++;\n      }\n\n      return {\n        success: true,\n        annotationsRemoved: totalAnnotationsRemoved,\n        pagesProcessed: pagesProcessed,\n      };\n    } catch (error) {\n      return {\n        success: false,\n        annotationsRemoved: totalAnnotationsRemoved,\n        pagesProcessed: pagesProcessed,\n        error: error instanceof Error ? error.message : 'Unknown error during annotation removal',\n      };\n    }\n  }\n\n  /**\n   * Sanitizes and validates a page range string.\n   * Ensures page numbers are within valid bounds and properly formatted.\n   *\n   * @param pageRange - Page range string (e.g., \"1,3,5-7\") or null for all pages\n   * @param totalPages - Total number of pages in the document\n   * @returns Sanitized page range string or null for all pages\n   *\n   * @private\n   */\n  private sanitizePageRange(\n    pageRange: string | null | undefined,\n    totalPages: number,\n  ): string | null {\n    // Null or empty means all pages\n    if (!pageRange || pageRange.trim() === '') {\n      return null;\n    }\n\n    try {\n      const sanitized: number[] = [];\n      const parts = pageRange.split(',');\n\n      for (const part of parts) {\n        const trimmed = part.trim();\n\n        if (trimmed.includes('-')) {\n          // Handle range (e.g., \"5-7\")\n          const [startStr, endStr] = trimmed.split('-').map((s) => s.trim());\n          const start = parseInt(startStr, 10);\n          const end = parseInt(endStr, 10);\n\n          if (isNaN(start) || isNaN(end)) {\n            this.logger.warn(LOG_SOURCE, LOG_CATEGORY, `Invalid range: ${trimmed}`);\n            continue;\n          }\n\n          // Clamp to valid bounds (1-based page numbers)\n          const validStart = Math.max(1, Math.min(start, totalPages));\n          const validEnd = Math.max(1, Math.min(end, totalPages));\n\n          // Add all pages in range\n          for (let i = validStart; i <= validEnd; i++) {\n            if (!sanitized.includes(i)) {\n              sanitized.push(i);\n            }\n          }\n        } else {\n          // Handle single page number\n          const pageNum = parseInt(trimmed, 10);\n\n          if (isNaN(pageNum)) {\n            this.logger.warn(LOG_SOURCE, LOG_CATEGORY, `Invalid page number: ${trimmed}`);\n            continue;\n          }\n\n          // Clamp to valid bounds\n          const validPageNum = Math.max(1, Math.min(pageNum, totalPages));\n\n          if (!sanitized.includes(validPageNum)) {\n            sanitized.push(validPageNum);\n          }\n        }\n      }\n\n      // If no valid pages found, return null (all pages)\n      if (sanitized.length === 0) {\n        this.logger.warn(LOG_SOURCE, LOG_CATEGORY, 'No valid pages in range, using all pages');\n        return null;\n      }\n\n      // Sort and convert back to range string\n      sanitized.sort((a, b) => a - b);\n\n      // Optimize consecutive pages into ranges\n      const optimized: string[] = [];\n      let rangeStart = sanitized[0];\n      let rangeEnd = sanitized[0];\n\n      for (let i = 1; i < sanitized.length; i++) {\n        if (sanitized[i] === rangeEnd + 1) {\n          rangeEnd = sanitized[i];\n        } else {\n          // End current range\n          if (rangeStart === rangeEnd) {\n            optimized.push(rangeStart.toString());\n          } else if (rangeEnd - rangeStart === 1) {\n            optimized.push(rangeStart.toString());\n            optimized.push(rangeEnd.toString());\n          } else {\n            optimized.push(`${rangeStart}-${rangeEnd}`);\n          }\n\n          // Start new range\n          rangeStart = sanitized[i];\n          rangeEnd = sanitized[i];\n        }\n      }\n\n      // Add final range\n      if (rangeStart === rangeEnd) {\n        optimized.push(rangeStart.toString());\n      } else if (rangeEnd - rangeStart === 1) {\n        optimized.push(rangeStart.toString());\n        optimized.push(rangeEnd.toString());\n      } else {\n        optimized.push(`${rangeStart}-${rangeEnd}`);\n      }\n\n      const result = optimized.join(',');\n\n      this.logger.debug(\n        LOG_SOURCE,\n        LOG_CATEGORY,\n        `Sanitized page range: \"${pageRange}\" -> \"${result}\"`,\n      );\n\n      return result;\n    } catch (error) {\n      this.logger.error(LOG_SOURCE, LOG_CATEGORY, `Error sanitizing page range: ${error}`);\n      return null; // Fallback to all pages\n    }\n  }\n}\n","var createPdfium = (() => {\n  var _scriptName = import.meta.url;\n\n  return async function (moduleArg = {}) {\n    var moduleRtn;\n\n    // include: shell.js\n    // The Module object: Our interface to the outside world. We import\n    // and export values on it. There are various ways Module can be used:\n    // 1. Not defined. We create it here\n    // 2. A function parameter, function(moduleArg) => Promise<Module>\n    // 3. pre-run appended it, var Module = {}; ..generated code..\n    // 4. External script tag defines var Module.\n    // We need to check if Module already exists (e.g. case 3 above).\n    // Substitution will be replaced with actual code on later stage of the build,\n    // this way Closure Compiler will not mangle it (e.g. case 4. above).\n    // Note that if you want to run closure, and also to use Module\n    // after the generated code, you will need to define   var Module = {};\n    // before the code. Then that object will be used in the code, and you\n    // can continue to use Module afterwards as well.\n    var Module = moduleArg;\n\n    // Set up the promise that indicates the Module is initialized\n    var readyPromiseResolve, readyPromiseReject;\n    var readyPromise = new Promise((resolve, reject) => {\n      readyPromiseResolve = resolve;\n      readyPromiseReject = reject;\n    });\n    [\n      '_EPDF_GetMetaKeyCount',\n      '_EPDF_GetMetaKeyName',\n      '_EPDF_GetMetaTrapped',\n      '_EPDF_GetPageRotationByIndex',\n      '_EPDF_HasMetaText',\n      '_EPDF_PNG_EncodeRGBA',\n      '_EPDF_RenderAnnotBitmap',\n      '_EPDF_SetMetaText',\n      '_EPDF_SetMetaTrapped',\n      '_EPDFAction_CreateGoTo',\n      '_EPDFAction_CreateGoToNamed',\n      '_EPDFAction_CreateLaunch',\n      '_EPDFAction_CreateRemoteGoToByName',\n      '_EPDFAction_CreateRemoteGoToDest',\n      '_EPDFAction_CreateURI',\n      '_EPDFAnnot_ClearColor',\n      '_EPDFAnnot_GenerateAppearance',\n      '_EPDFAnnot_GenerateAppearanceWithBlend',\n      '_EPDFAnnot_GetBlendMode',\n      '_EPDFAnnot_GetBorderDashPattern',\n      '_EPDFAnnot_GetBorderDashPatternCount',\n      '_EPDFAnnot_GetBorderEffect',\n      '_EPDFAnnot_GetBorderStyle',\n      '_EPDFAnnot_GetColor',\n      '_EPDFAnnot_GetDefaultAppearance',\n      '_EPDFAnnot_GetIcon',\n      '_EPDFAnnot_GetIntent',\n      '_EPDFAnnot_GetLineEndings',\n      '_EPDFAnnot_GetOpacity',\n      '_EPDFAnnot_GetRectangleDifferences',\n      '_EPDFAnnot_GetRichContent',\n      '_EPDFAnnot_GetTextAlignment',\n      '_EPDFAnnot_GetVerticalAlignment',\n      '_EPDFAnnot_SetBorderDashPattern',\n      '_EPDFAnnot_SetBorderStyle',\n      '_EPDFAnnot_SetColor',\n      '_EPDFAnnot_SetDefaultAppearance',\n      '_EPDFAnnot_SetIcon',\n      '_EPDFAnnot_SetIntent',\n      '_EPDFAnnot_SetLine',\n      '_EPDFAnnot_SetLineEndings',\n      '_EPDFAnnot_SetLinkedAnnot',\n      '_EPDFAnnot_SetOpacity',\n      '_EPDFAnnot_SetTextAlignment',\n      '_EPDFAnnot_SetVerticalAlignment',\n      '_EPDFAnnot_SetVertices',\n      '_EPDFAnnot_UpdateAppearanceToRect',\n      '_EPDFAttachment_GetDescription',\n      '_EPDFAttachment_GetIntegerValue',\n      '_EPDFAttachment_SetDescription',\n      '_EPDFAttachment_SetSubtype',\n      '_EPDFBookmark_AppendChild',\n      '_EPDFBookmark_Clear',\n      '_EPDFBookmark_ClearTarget',\n      '_EPDFBookmark_Create',\n      '_EPDFBookmark_Delete',\n      '_EPDFBookmark_InsertAfter',\n      '_EPDFBookmark_SetAction',\n      '_EPDFBookmark_SetDest',\n      '_EPDFBookmark_SetTitle',\n      '_EPDFCatalog_GetLanguage',\n      '_EPDFDest_CreateRemoteView',\n      '_EPDFDest_CreateRemoteXYZ',\n      '_EPDFDest_CreateView',\n      '_EPDFDest_CreateXYZ',\n      '_EPDFNamedDest_Remove',\n      '_EPDFNamedDest_SetDest',\n      '_EPDFPage_CreateAnnot',\n      '_EPDFPage_GetAnnotByName',\n      '_EPDFPage_GetAnnotCountRaw',\n      '_EPDFPage_GetAnnotRaw',\n      '_EPDFPage_RemoveAnnotByName',\n      '_EPDFPage_RemoveAnnotRaw',\n      '_EPDFText_RedactInQuads',\n      '_EPDFText_RedactInRect',\n      '_FORM_CanRedo',\n      '_FORM_CanUndo',\n      '_FORM_DoDocumentAAction',\n      '_FORM_DoDocumentJSAction',\n      '_FORM_DoDocumentOpenAction',\n      '_FORM_DoPageAAction',\n      '_FORM_ForceToKillFocus',\n      '_FORM_GetFocusedAnnot',\n      '_FORM_GetFocusedText',\n      '_FORM_GetSelectedText',\n      '_FORM_IsIndexSelected',\n      '_FORM_OnAfterLoadPage',\n      '_FORM_OnBeforeClosePage',\n      '_FORM_OnChar',\n      '_FORM_OnFocus',\n      '_FORM_OnKeyDown',\n      '_FORM_OnKeyUp',\n      '_FORM_OnLButtonDoubleClick',\n      '_FORM_OnLButtonDown',\n      '_FORM_OnLButtonUp',\n      '_FORM_OnMouseMove',\n      '_FORM_OnMouseWheel',\n      '_FORM_OnRButtonDown',\n      '_FORM_OnRButtonUp',\n      '_FORM_Redo',\n      '_FORM_ReplaceAndKeepSelection',\n      '_FORM_ReplaceSelection',\n      '_FORM_SelectAllText',\n      '_FORM_SetFocusedAnnot',\n      '_FORM_SetIndexSelected',\n      '_FORM_Undo',\n      '_FPDF_AddInstalledFont',\n      '_FPDF_CloseDocument',\n      '_FPDF_ClosePage',\n      '_FPDF_CloseXObject',\n      '_FPDF_CopyViewerPreferences',\n      '_FPDF_CountNamedDests',\n      '_FPDF_CreateClipPath',\n      '_FPDF_CreateNewDocument',\n      '_FPDF_DestroyClipPath',\n      '_FPDF_DestroyLibrary',\n      '_FPDF_DeviceToPage',\n      '_FPDF_DocumentHasValidCrossReferenceTable',\n      '_FPDF_FFLDraw',\n      '_FPDF_FreeDefaultSystemFontInfo',\n      '_FPDF_GetDefaultSystemFontInfo',\n      '_FPDF_GetDefaultTTFMap',\n      '_FPDF_GetDefaultTTFMapCount',\n      '_FPDF_GetDefaultTTFMapEntry',\n      '_FPDF_GetDocPermissions',\n      '_FPDF_GetDocUserPermissions',\n      '_FPDF_GetFileIdentifier',\n      '_FPDF_GetFileVersion',\n      '_FPDF_GetFormType',\n      '_FPDF_GetLastError',\n      '_FPDF_GetMetaText',\n      '_FPDF_GetNamedDest',\n      '_FPDF_GetNamedDestByName',\n      '_FPDF_GetPageAAction',\n      '_FPDF_GetPageBoundingBox',\n      '_FPDF_GetPageCount',\n      '_FPDF_GetPageHeight',\n      '_FPDF_GetPageHeightF',\n      '_FPDF_GetPageLabel',\n      '_FPDF_GetPageSizeByIndex',\n      '_FPDF_GetPageSizeByIndexF',\n      '_FPDF_GetPageWidth',\n      '_FPDF_GetPageWidthF',\n      '_FPDF_GetSecurityHandlerRevision',\n      '_FPDF_GetSignatureCount',\n      '_FPDF_GetSignatureObject',\n      '_FPDF_GetTrailerEnds',\n      '_FPDF_GetXFAPacketContent',\n      '_FPDF_GetXFAPacketCount',\n      '_FPDF_GetXFAPacketName',\n      '_FPDF_ImportNPagesToOne',\n      '_FPDF_ImportPages',\n      '_FPDF_ImportPagesByIndex',\n      '_FPDF_InitLibrary',\n      '_FPDF_InitLibraryWithConfig',\n      '_FPDF_LoadCustomDocument',\n      '_FPDF_LoadDocument',\n      '_FPDF_LoadMemDocument',\n      '_FPDF_LoadMemDocument64',\n      '_FPDF_LoadPage',\n      '_FPDF_LoadXFA',\n      '_FPDF_MovePages',\n      '_FPDF_NewFormObjectFromXObject',\n      '_FPDF_NewXObjectFromPage',\n      '_FPDF_PageToDevice',\n      '_FPDF_RemoveFormFieldHighlight',\n      '_FPDF_RenderPage_Close',\n      '_FPDF_RenderPage_Continue',\n      '_FPDF_RenderPageBitmap',\n      '_FPDF_RenderPageBitmap_Start',\n      '_FPDF_RenderPageBitmapWithColorScheme_Start',\n      '_FPDF_RenderPageBitmapWithMatrix',\n      '_FPDF_SaveAsCopy',\n      '_FPDF_SaveWithVersion',\n      '_FPDF_SetFormFieldHighlightAlpha',\n      '_FPDF_SetFormFieldHighlightColor',\n      '_FPDF_SetSandBoxPolicy',\n      '_FPDF_SetSystemFontInfo',\n      '_FPDF_StructElement_Attr_CountChildren',\n      '_FPDF_StructElement_Attr_GetBlobValue',\n      '_FPDF_StructElement_Attr_GetBooleanValue',\n      '_FPDF_StructElement_Attr_GetChildAtIndex',\n      '_FPDF_StructElement_Attr_GetCount',\n      '_FPDF_StructElement_Attr_GetName',\n      '_FPDF_StructElement_Attr_GetNumberValue',\n      '_FPDF_StructElement_Attr_GetStringValue',\n      '_FPDF_StructElement_Attr_GetType',\n      '_FPDF_StructElement_Attr_GetValue',\n      '_FPDF_StructElement_CountChildren',\n      '_FPDF_StructElement_GetActualText',\n      '_FPDF_StructElement_GetAltText',\n      '_FPDF_StructElement_GetAttributeAtIndex',\n      '_FPDF_StructElement_GetAttributeCount',\n      '_FPDF_StructElement_GetChildAtIndex',\n      '_FPDF_StructElement_GetChildMarkedContentID',\n      '_FPDF_StructElement_GetID',\n      '_FPDF_StructElement_GetLang',\n      '_FPDF_StructElement_GetMarkedContentID',\n      '_FPDF_StructElement_GetMarkedContentIdAtIndex',\n      '_FPDF_StructElement_GetMarkedContentIdCount',\n      '_FPDF_StructElement_GetObjType',\n      '_FPDF_StructElement_GetParent',\n      '_FPDF_StructElement_GetStringAttribute',\n      '_FPDF_StructElement_GetTitle',\n      '_FPDF_StructElement_GetType',\n      '_FPDF_StructTree_Close',\n      '_FPDF_StructTree_CountChildren',\n      '_FPDF_StructTree_GetChildAtIndex',\n      '_FPDF_StructTree_GetForPage',\n      '_FPDF_VIEWERREF_GetDuplex',\n      '_FPDF_VIEWERREF_GetName',\n      '_FPDF_VIEWERREF_GetNumCopies',\n      '_FPDF_VIEWERREF_GetPrintPageRange',\n      '_FPDF_VIEWERREF_GetPrintPageRangeCount',\n      '_FPDF_VIEWERREF_GetPrintPageRangeElement',\n      '_FPDF_VIEWERREF_GetPrintScaling',\n      '_FPDFAction_GetDest',\n      '_FPDFAction_GetFilePath',\n      '_FPDFAction_GetType',\n      '_FPDFAction_GetURIPath',\n      '_FPDFAnnot_AddFileAttachment',\n      '_FPDFAnnot_AddInkStroke',\n      '_FPDFAnnot_AppendAttachmentPoints',\n      '_FPDFAnnot_AppendObject',\n      '_FPDFAnnot_CountAttachmentPoints',\n      '_FPDFAnnot_GetAP',\n      '_FPDFAnnot_GetAttachmentPoints',\n      '_FPDFAnnot_GetBorder',\n      '_FPDFAnnot_GetColor',\n      '_FPDFAnnot_GetFileAttachment',\n      '_FPDFAnnot_GetFlags',\n      '_FPDFAnnot_GetFocusableSubtypes',\n      '_FPDFAnnot_GetFocusableSubtypesCount',\n      '_FPDFAnnot_GetFontColor',\n      '_FPDFAnnot_GetFontSize',\n      '_FPDFAnnot_GetFormAdditionalActionJavaScript',\n      '_FPDFAnnot_GetFormControlCount',\n      '_FPDFAnnot_GetFormControlIndex',\n      '_FPDFAnnot_GetFormFieldAlternateName',\n      '_FPDFAnnot_GetFormFieldAtPoint',\n      '_FPDFAnnot_GetFormFieldExportValue',\n      '_FPDFAnnot_GetFormFieldFlags',\n      '_FPDFAnnot_GetFormFieldName',\n      '_FPDFAnnot_GetFormFieldType',\n      '_FPDFAnnot_GetFormFieldValue',\n      '_FPDFAnnot_GetInkListCount',\n      '_FPDFAnnot_GetInkListPath',\n      '_FPDFAnnot_GetLine',\n      '_FPDFAnnot_GetLink',\n      '_FPDFAnnot_GetLinkedAnnot',\n      '_FPDFAnnot_GetNumberValue',\n      '_FPDFAnnot_GetObject',\n      '_FPDFAnnot_GetObjectCount',\n      '_FPDFAnnot_GetOptionCount',\n      '_FPDFAnnot_GetOptionLabel',\n      '_FPDFAnnot_GetRect',\n      '_FPDFAnnot_GetStringValue',\n      '_FPDFAnnot_GetSubtype',\n      '_FPDFAnnot_GetValueType',\n      '_FPDFAnnot_GetVertices',\n      '_FPDFAnnot_HasAttachmentPoints',\n      '_FPDFAnnot_HasKey',\n      '_FPDFAnnot_IsChecked',\n      '_FPDFAnnot_IsObjectSupportedSubtype',\n      '_FPDFAnnot_IsOptionSelected',\n      '_FPDFAnnot_IsSupportedSubtype',\n      '_FPDFAnnot_RemoveInkList',\n      '_FPDFAnnot_RemoveObject',\n      '_FPDFAnnot_SetAP',\n      '_FPDFAnnot_SetAttachmentPoints',\n      '_FPDFAnnot_SetBorder',\n      '_FPDFAnnot_SetColor',\n      '_FPDFAnnot_SetFlags',\n      '_FPDFAnnot_SetFocusableSubtypes',\n      '_FPDFAnnot_SetFontColor',\n      '_FPDFAnnot_SetFormFieldFlags',\n      '_FPDFAnnot_SetRect',\n      '_FPDFAnnot_SetStringValue',\n      '_FPDFAnnot_SetURI',\n      '_FPDFAnnot_UpdateObject',\n      '_FPDFAttachment_GetFile',\n      '_FPDFAttachment_GetName',\n      '_FPDFAttachment_GetStringValue',\n      '_FPDFAttachment_GetSubtype',\n      '_FPDFAttachment_GetValueType',\n      '_FPDFAttachment_HasKey',\n      '_FPDFAttachment_SetFile',\n      '_FPDFAttachment_SetStringValue',\n      '_FPDFAvail_Create',\n      '_FPDFAvail_Destroy',\n      '_FPDFAvail_GetDocument',\n      '_FPDFAvail_GetFirstPageNum',\n      '_FPDFAvail_IsDocAvail',\n      '_FPDFAvail_IsFormAvail',\n      '_FPDFAvail_IsLinearized',\n      '_FPDFAvail_IsPageAvail',\n      '_FPDFBitmap_Create',\n      '_FPDFBitmap_CreateEx',\n      '_FPDFBitmap_Destroy',\n      '_FPDFBitmap_FillRect',\n      '_FPDFBitmap_GetBuffer',\n      '_FPDFBitmap_GetFormat',\n      '_FPDFBitmap_GetHeight',\n      '_FPDFBitmap_GetStride',\n      '_FPDFBitmap_GetWidth',\n      '_FPDFBookmark_Find',\n      '_FPDFBookmark_GetAction',\n      '_FPDFBookmark_GetCount',\n      '_FPDFBookmark_GetDest',\n      '_FPDFBookmark_GetFirstChild',\n      '_FPDFBookmark_GetNextSibling',\n      '_FPDFBookmark_GetTitle',\n      '_FPDFCatalog_IsTagged',\n      '_FPDFCatalog_SetLanguage',\n      '_FPDFClipPath_CountPaths',\n      '_FPDFClipPath_CountPathSegments',\n      '_FPDFClipPath_GetPathSegment',\n      '_FPDFDest_GetDestPageIndex',\n      '_FPDFDest_GetLocationInPage',\n      '_FPDFDest_GetView',\n      '_FPDFDoc_AddAttachment',\n      '_FPDFDoc_CloseJavaScriptAction',\n      '_FPDFDoc_DeleteAttachment',\n      '_FPDFDOC_ExitFormFillEnvironment',\n      '_FPDFDoc_GetAttachment',\n      '_FPDFDoc_GetAttachmentCount',\n      '_FPDFDoc_GetJavaScriptAction',\n      '_FPDFDoc_GetJavaScriptActionCount',\n      '_FPDFDoc_GetPageMode',\n      '_FPDFDOC_InitFormFillEnvironment',\n      '_FPDFFont_Close',\n      '_FPDFFont_GetAscent',\n      '_FPDFFont_GetBaseFontName',\n      '_FPDFFont_GetDescent',\n      '_FPDFFont_GetFamilyName',\n      '_FPDFFont_GetFlags',\n      '_FPDFFont_GetFontData',\n      '_FPDFFont_GetGlyphPath',\n      '_FPDFFont_GetGlyphWidth',\n      '_FPDFFont_GetIsEmbedded',\n      '_FPDFFont_GetItalicAngle',\n      '_FPDFFont_GetWeight',\n      '_FPDFFormObj_CountObjects',\n      '_FPDFFormObj_GetObject',\n      '_FPDFFormObj_RemoveObject',\n      '_FPDFGlyphPath_CountGlyphSegments',\n      '_FPDFGlyphPath_GetGlyphPathSegment',\n      '_FPDFImageObj_GetBitmap',\n      '_FPDFImageObj_GetIccProfileDataDecoded',\n      '_FPDFImageObj_GetImageDataDecoded',\n      '_FPDFImageObj_GetImageDataRaw',\n      '_FPDFImageObj_GetImageFilter',\n      '_FPDFImageObj_GetImageFilterCount',\n      '_FPDFImageObj_GetImageMetadata',\n      '_FPDFImageObj_GetImagePixelSize',\n      '_FPDFImageObj_GetRenderedBitmap',\n      '_FPDFImageObj_LoadJpegFile',\n      '_FPDFImageObj_LoadJpegFileInline',\n      '_FPDFImageObj_SetBitmap',\n      '_FPDFImageObj_SetMatrix',\n      '_FPDFJavaScriptAction_GetName',\n      '_FPDFJavaScriptAction_GetScript',\n      '_FPDFLink_CloseWebLinks',\n      '_FPDFLink_CountQuadPoints',\n      '_FPDFLink_CountRects',\n      '_FPDFLink_CountWebLinks',\n      '_FPDFLink_Enumerate',\n      '_FPDFLink_GetAction',\n      '_FPDFLink_GetAnnot',\n      '_FPDFLink_GetAnnotRect',\n      '_FPDFLink_GetDest',\n      '_FPDFLink_GetLinkAtPoint',\n      '_FPDFLink_GetLinkZOrderAtPoint',\n      '_FPDFLink_GetQuadPoints',\n      '_FPDFLink_GetRect',\n      '_FPDFLink_GetTextRange',\n      '_FPDFLink_GetURL',\n      '_FPDFLink_LoadWebLinks',\n      '_FPDFPage_CloseAnnot',\n      '_FPDFPage_CountObjects',\n      '_FPDFPage_CreateAnnot',\n      '_FPDFPage_Delete',\n      '_FPDFPage_Flatten',\n      '_FPDFPage_FormFieldZOrderAtPoint',\n      '_FPDFPage_GenerateContent',\n      '_FPDFPage_GetAnnot',\n      '_FPDFPage_GetAnnotCount',\n      '_FPDFPage_GetAnnotIndex',\n      '_FPDFPage_GetArtBox',\n      '_FPDFPage_GetBleedBox',\n      '_FPDFPage_GetCropBox',\n      '_FPDFPage_GetDecodedThumbnailData',\n      '_FPDFPage_GetMediaBox',\n      '_FPDFPage_GetObject',\n      '_FPDFPage_GetRawThumbnailData',\n      '_FPDFPage_GetRotation',\n      '_FPDFPage_GetThumbnailAsBitmap',\n      '_FPDFPage_GetTrimBox',\n      '_FPDFPage_HasFormFieldAtPoint',\n      '_FPDFPage_HasTransparency',\n      '_FPDFPage_InsertClipPath',\n      '_FPDFPage_InsertObject',\n      '_FPDFPage_InsertObjectAtIndex',\n      '_FPDFPage_New',\n      '_FPDFPage_RemoveAnnot',\n      '_FPDFPage_RemoveObject',\n      '_FPDFPage_SetArtBox',\n      '_FPDFPage_SetBleedBox',\n      '_FPDFPage_SetCropBox',\n      '_FPDFPage_SetMediaBox',\n      '_FPDFPage_SetRotation',\n      '_FPDFPage_SetTrimBox',\n      '_FPDFPage_TransformAnnots',\n      '_FPDFPage_TransFormWithClip',\n      '_FPDFPageObj_AddMark',\n      '_FPDFPageObj_CountMarks',\n      '_FPDFPageObj_CreateNewPath',\n      '_FPDFPageObj_CreateNewRect',\n      '_FPDFPageObj_CreateTextObj',\n      '_FPDFPageObj_Destroy',\n      '_FPDFPageObj_GetBounds',\n      '_FPDFPageObj_GetClipPath',\n      '_FPDFPageObj_GetDashArray',\n      '_FPDFPageObj_GetDashCount',\n      '_FPDFPageObj_GetDashPhase',\n      '_FPDFPageObj_GetFillColor',\n      '_FPDFPageObj_GetIsActive',\n      '_FPDFPageObj_GetLineCap',\n      '_FPDFPageObj_GetLineJoin',\n      '_FPDFPageObj_GetMark',\n      '_FPDFPageObj_GetMarkedContentID',\n      '_FPDFPageObj_GetMatrix',\n      '_FPDFPageObj_GetRotatedBounds',\n      '_FPDFPageObj_GetStrokeColor',\n      '_FPDFPageObj_GetStrokeWidth',\n      '_FPDFPageObj_GetType',\n      '_FPDFPageObj_HasTransparency',\n      '_FPDFPageObj_NewImageObj',\n      '_FPDFPageObj_NewTextObj',\n      '_FPDFPageObj_RemoveMark',\n      '_FPDFPageObj_SetBlendMode',\n      '_FPDFPageObj_SetDashArray',\n      '_FPDFPageObj_SetDashPhase',\n      '_FPDFPageObj_SetFillColor',\n      '_FPDFPageObj_SetIsActive',\n      '_FPDFPageObj_SetLineCap',\n      '_FPDFPageObj_SetLineJoin',\n      '_FPDFPageObj_SetMatrix',\n      '_FPDFPageObj_SetStrokeColor',\n      '_FPDFPageObj_SetStrokeWidth',\n      '_FPDFPageObj_Transform',\n      '_FPDFPageObj_TransformClipPath',\n      '_FPDFPageObj_TransformF',\n      '_FPDFPageObjMark_CountParams',\n      '_FPDFPageObjMark_GetName',\n      '_FPDFPageObjMark_GetParamBlobValue',\n      '_FPDFPageObjMark_GetParamIntValue',\n      '_FPDFPageObjMark_GetParamKey',\n      '_FPDFPageObjMark_GetParamStringValue',\n      '_FPDFPageObjMark_GetParamValueType',\n      '_FPDFPageObjMark_RemoveParam',\n      '_FPDFPageObjMark_SetBlobParam',\n      '_FPDFPageObjMark_SetIntParam',\n      '_FPDFPageObjMark_SetStringParam',\n      '_FPDFPath_BezierTo',\n      '_FPDFPath_Close',\n      '_FPDFPath_CountSegments',\n      '_FPDFPath_GetDrawMode',\n      '_FPDFPath_GetPathSegment',\n      '_FPDFPath_LineTo',\n      '_FPDFPath_MoveTo',\n      '_FPDFPath_SetDrawMode',\n      '_FPDFPathSegment_GetClose',\n      '_FPDFPathSegment_GetPoint',\n      '_FPDFPathSegment_GetType',\n      '_FPDFSignatureObj_GetByteRange',\n      '_FPDFSignatureObj_GetContents',\n      '_FPDFSignatureObj_GetDocMDPPermission',\n      '_FPDFSignatureObj_GetReason',\n      '_FPDFSignatureObj_GetSubFilter',\n      '_FPDFSignatureObj_GetTime',\n      '_FPDFText_ClosePage',\n      '_FPDFText_CountChars',\n      '_FPDFText_CountRects',\n      '_FPDFText_FindClose',\n      '_FPDFText_FindNext',\n      '_FPDFText_FindPrev',\n      '_FPDFText_FindStart',\n      '_FPDFText_GetBoundedText',\n      '_FPDFText_GetCharAngle',\n      '_FPDFText_GetCharBox',\n      '_FPDFText_GetCharIndexAtPos',\n      '_FPDFText_GetCharIndexFromTextIndex',\n      '_FPDFText_GetCharOrigin',\n      '_FPDFText_GetFillColor',\n      '_FPDFText_GetFontInfo',\n      '_FPDFText_GetFontSize',\n      '_FPDFText_GetFontWeight',\n      '_FPDFText_GetLooseCharBox',\n      '_FPDFText_GetMatrix',\n      '_FPDFText_GetRect',\n      '_FPDFText_GetSchCount',\n      '_FPDFText_GetSchResultIndex',\n      '_FPDFText_GetStrokeColor',\n      '_FPDFText_GetText',\n      '_FPDFText_GetTextIndexFromCharIndex',\n      '_FPDFText_GetTextObject',\n      '_FPDFText_GetUnicode',\n      '_FPDFText_HasUnicodeMapError',\n      '_FPDFText_IsGenerated',\n      '_FPDFText_IsHyphen',\n      '_FPDFText_LoadCidType2Font',\n      '_FPDFText_LoadFont',\n      '_FPDFText_LoadPage',\n      '_FPDFText_LoadStandardFont',\n      '_FPDFText_SetCharcodes',\n      '_FPDFText_SetText',\n      '_FPDFTextObj_GetFont',\n      '_FPDFTextObj_GetFontSize',\n      '_FPDFTextObj_GetRenderedBitmap',\n      '_FPDFTextObj_GetText',\n      '_FPDFTextObj_GetTextRenderMode',\n      '_FPDFTextObj_SetTextRenderMode',\n      '_PDFiumExt_CloseFileWriter',\n      '_PDFiumExt_CloseFormFillInfo',\n      '_PDFiumExt_ExitFormFillEnvironment',\n      '_PDFiumExt_GetFileWriterData',\n      '_PDFiumExt_GetFileWriterSize',\n      '_PDFiumExt_Init',\n      '_PDFiumExt_InitFormFillEnvironment',\n      '_PDFiumExt_OpenFileWriter',\n      '_PDFiumExt_OpenFormFillInfo',\n      '_PDFiumExt_SaveAsCopy',\n      '_malloc',\n      '_free',\n      '_memory',\n      '___indirect_function_table',\n      'onRuntimeInitialized',\n    ].forEach((prop) => {\n      if (!Object.getOwnPropertyDescriptor(readyPromise, prop)) {\n        Object.defineProperty(readyPromise, prop, {\n          get: () =>\n            abort(\n              'You are getting ' +\n                prop +\n                ' on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js',\n            ),\n          set: () =>\n            abort(\n              'You are setting ' +\n                prop +\n                ' on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js',\n            ),\n        });\n      }\n    });\n\n    // Determine the runtime environment we are in. You can customize this by\n    // setting the ENVIRONMENT setting at compile time (see settings.js).\n\n    // Attempt to auto-detect the environment\n    var ENVIRONMENT_IS_WEB = typeof window == 'object';\n    var ENVIRONMENT_IS_WORKER = typeof importScripts == 'function';\n    // N.b. Electron.js environment is simultaneously a NODE-environment, but\n    // also a web environment.\n    typeof process == 'object' &&\n      typeof process.versions == 'object' &&\n      typeof process.versions.node == 'string' &&\n      process.type != 'renderer';\n    var ENVIRONMENT_IS_SHELL =\n      !ENVIRONMENT_IS_WEB && !false && !ENVIRONMENT_IS_WORKER;\n\n    var require; \n\n    // --pre-jses are emitted after the Module integration code, so that they can\n    // refer to Module (if they choose; they can also define Module)\n\n    // Sometimes an existing Module object exists with properties\n    // meant to overwrite the default module functionality. Here\n    // we collect those properties and reapply _after_ we configure\n    // the current environment's defaults to avoid having to be so\n    // defensive during initialization.\n    var moduleOverrides = Object.assign({}, Module);\n    var thisProgram = './this.program';\n\n    // `/` should be present at the end if `scriptDirectory` is not empty\n    var scriptDirectory = '';\n    function locateFile(path) {\n      if (Module['locateFile']) {\n        return Module['locateFile'](path, scriptDirectory);\n      }\n      return scriptDirectory + path;\n    }\n\n    // Hooks that are implemented differently in different runtime environments.\n    var readAsync, readBinary;\n\n    if (ENVIRONMENT_IS_SHELL) {\n      if (\n        (typeof process == 'object' && typeof require === 'function') ||\n        typeof window == 'object' ||\n        typeof importScripts == 'function'\n      )\n        throw new Error(\n          'not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)',\n        );\n\n      readBinary = (f) => {\n        if (typeof readbuffer == 'function') {\n          return new Uint8Array(readbuffer(f));\n        }\n        let data = read(f, 'binary');\n        assert(typeof data == 'object');\n        return data;\n      };\n\n      readAsync = (f) => {\n        return new Promise((resolve, reject) => {\n          setTimeout(() => resolve(readBinary(f)));\n        });\n      };\n\n      globalThis.clearTimeout ??= (id) => {};\n\n      // spidermonkey lacks setTimeout but we use it above in readAsync.\n      globalThis.setTimeout ??= (f) => (typeof f == 'function' ? f() : abort());\n\n      if (typeof print != 'undefined') {\n        // Prefer to use print/printErr where they exist, as they usually work better.\n        globalThis.console ??= /** @type{!Console} */ ({});\n        console.log = /** @type{!function(this:Console, ...*): undefined} */ (print);\n        console.warn = console.error = /** @type{!function(this:Console, ...*): undefined} */ (\n          globalThis.printErr ?? print\n        );\n      }\n    } else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\n      // Note that this includes Node.js workers when relevant (pthreads is enabled).\n      // Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and\n      // ENVIRONMENT_IS_NODE.\n      if (ENVIRONMENT_IS_WORKER) {\n        // Check worker, not web, since window could be polyfilled\n        scriptDirectory = self.location.href;\n      } else if (typeof document != 'undefined' && document.currentScript) {\n        // web\n        scriptDirectory = document.currentScript.src;\n      }\n      // When MODULARIZE, this JS may be executed later, after document.currentScript\n      // is gone, so we saved it, and we use it here instead of any other info.\n      if (_scriptName) {\n        scriptDirectory = _scriptName;\n      }\n      // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them.\n      // otherwise, slice off the final part of the url to find the script directory.\n      // if scriptDirectory does not contain a slash, lastIndexOf will return -1,\n      // and scriptDirectory will correctly be replaced with an empty string.\n      // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #),\n      // they are removed because they could contain a slash.\n      if (scriptDirectory.startsWith('blob:')) {\n        scriptDirectory = '';\n      } else {\n        scriptDirectory = scriptDirectory.substr(\n          0,\n          scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/') + 1,\n        );\n      }\n\n      if (!(typeof window == 'object' || typeof importScripts == 'function'))\n        throw new Error(\n          'not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)',\n        );\n\n      {\n        // include: web_or_worker_shell_read.js\n        if (ENVIRONMENT_IS_WORKER) {\n          readBinary = (url) => {\n            var xhr = new XMLHttpRequest();\n            xhr.open('GET', url, false);\n            xhr.responseType = 'arraybuffer';\n            xhr.send(null);\n            return new Uint8Array(/** @type{!ArrayBuffer} */ (xhr.response));\n          };\n        }\n\n        readAsync = (url) => {\n          assert(!isFileURI(url), 'readAsync does not work with file:// URLs');\n          return fetch(url, { credentials: 'same-origin' }).then((response) => {\n            if (response.ok) {\n              return response.arrayBuffer();\n            }\n            return Promise.reject(new Error(response.status + ' : ' + response.url));\n          });\n        };\n        // end include: web_or_worker_shell_read.js\n      }\n    } else {\n      throw new Error('environment detection error');\n    }\n\n    var out = Module['print'] || console.log.bind(console);\n    var err = Module['printErr'] || console.error.bind(console);\n\n    // Merge back in the overrides\n    Object.assign(Module, moduleOverrides);\n    // Free the object hierarchy contained in the overrides, this lets the GC\n    // reclaim data used.\n    moduleOverrides = null;\n    checkIncomingModuleAPI();\n\n    // Emit code to handle expected values on the Module object. This applies Module.x\n    // to the proper local x. This has two benefits: first, we only emit it if it is\n    // expected to arrive, and second, by using a local everywhere else that can be\n    // minified.\n\n    if (Module['arguments']) Module['arguments'];\n    legacyModuleProp('arguments', 'arguments_');\n\n    if (Module['thisProgram']) thisProgram = Module['thisProgram'];\n    legacyModuleProp('thisProgram', 'thisProgram');\n\n    // perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message\n    // Assertions on removed incoming Module JS APIs.\n    assert(\n      typeof Module['memoryInitializerPrefixURL'] == 'undefined',\n      'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead',\n    );\n    assert(\n      typeof Module['pthreadMainPrefixURL'] == 'undefined',\n      'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead',\n    );\n    assert(\n      typeof Module['cdInitializerPrefixURL'] == 'undefined',\n      'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead',\n    );\n    assert(\n      typeof Module['filePackagePrefixURL'] == 'undefined',\n      'Module.filePackagePrefixURL option was removed, use Module.locateFile instead',\n    );\n    assert(typeof Module['read'] == 'undefined', 'Module.read option was removed');\n    assert(\n      typeof Module['readAsync'] == 'undefined',\n      'Module.readAsync option was removed (modify readAsync in JS)',\n    );\n    assert(\n      typeof Module['readBinary'] == 'undefined',\n      'Module.readBinary option was removed (modify readBinary in JS)',\n    );\n    assert(\n      typeof Module['setWindowTitle'] == 'undefined',\n      'Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)',\n    );\n    assert(\n      typeof Module['TOTAL_MEMORY'] == 'undefined',\n      'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY',\n    );\n    legacyModuleProp('asm', 'wasmExports');\n    legacyModuleProp('readAsync', 'readAsync');\n    legacyModuleProp('readBinary', 'readBinary');\n    legacyModuleProp('setWindowTitle', 'setWindowTitle');\n\n    // end include: shell.js\n\n    // include: preamble.js\n    // === Preamble library stuff ===\n\n    // Documentation for the public APIs defined in this file must be updated in:\n    //    site/source/docs/api_reference/preamble.js.rst\n    // A prebuilt local version of the documentation is available at:\n    //    site/build/text/docs/api_reference/preamble.js.txt\n    // You can also build docs locally as HTML or other formats in site/\n    // An online HTML version (which may be of a different version of Emscripten)\n    //    is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html\n\n    var wasmBinary = Module['wasmBinary'];\n    legacyModuleProp('wasmBinary', 'wasmBinary');\n\n    if (typeof WebAssembly != 'object') {\n      err('no native wasm support detected');\n    }\n\n    // Wasm globals\n\n    var wasmMemory;\n\n    //========================================\n    // Runtime essentials\n    //========================================\n\n    // whether we are quitting the application. no code should run after this.\n    // set in exit() and abort()\n    var ABORT = false;\n\n    // In STRICT mode, we only define assert() when ASSERTIONS is set.  i.e. we\n    // don't define it at all in release modes.  This matches the behaviour of\n    // MINIMAL_RUNTIME.\n    // TODO(sbc): Make this the default even without STRICT enabled.\n    /** @type {function(*, string=)} */\n    function assert(condition, text) {\n      if (!condition) {\n        abort('Assertion failed' + (text ? ': ' + text : ''));\n      }\n    }\n\n    // We used to include malloc/free by default in the past. Show a helpful error in\n    // builds with assertions.\n\n    // Memory management\n\n    var /** @type {!Int8Array} */\n      HEAP8,\n      /** @type {!Uint8Array} */\n      HEAPU8,\n      /** @type {!Int16Array} */\n      HEAP16,\n      /** @type {!Uint16Array} */\n      HEAPU16,\n      /** @type {!Int32Array} */\n      HEAP32,\n      /** @type {!Uint32Array} */\n      HEAPU32,\n      /** @type {!Float32Array} */\n      HEAPF32,\n      /** @type {!Float64Array} */\n      HEAPF64;\n\n    // include: runtime_shared.js\n    function updateMemoryViews() {\n      var b = wasmMemory.buffer;\n      Module['HEAP8'] = HEAP8 = new Int8Array(b);\n      Module['HEAP16'] = HEAP16 = new Int16Array(b);\n      Module['HEAPU8'] = HEAPU8 = new Uint8Array(b);\n      Module['HEAPU16'] = HEAPU16 = new Uint16Array(b);\n      Module['HEAP32'] = HEAP32 = new Int32Array(b);\n      Module['HEAPU32'] = HEAPU32 = new Uint32Array(b);\n      Module['HEAPF32'] = HEAPF32 = new Float32Array(b);\n      Module['HEAPF64'] = HEAPF64 = new Float64Array(b);\n    }\n\n    // end include: runtime_shared.js\n    assert(\n      !Module['STACK_SIZE'],\n      'STACK_SIZE can no longer be set at runtime.  Use -sSTACK_SIZE at link time',\n    );\n\n    assert(\n      typeof Int32Array != 'undefined' &&\n        typeof Float64Array !== 'undefined' &&\n        Int32Array.prototype.subarray != undefined &&\n        Int32Array.prototype.set != undefined,\n      'JS engine does not provide full typed array support',\n    );\n\n    // If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY\n    assert(\n      !Module['wasmMemory'],\n      'Use of `wasmMemory` detected.  Use -sIMPORTED_MEMORY to define wasmMemory externally',\n    );\n    assert(\n      !Module['INITIAL_MEMORY'],\n      'Detected runtime INITIAL_MEMORY setting.  Use -sIMPORTED_MEMORY to define wasmMemory dynamically',\n    );\n\n    // include: runtime_stack_check.js\n    // Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode.\n    function writeStackCookie() {\n      var max = _emscripten_stack_get_end();\n      assert((max & 3) == 0);\n      // If the stack ends at address zero we write our cookies 4 bytes into the\n      // stack.  This prevents interference with SAFE_HEAP and ASAN which also\n      // monitor writes to address zero.\n      if (max == 0) {\n        max += 4;\n      }\n      // The stack grow downwards towards _emscripten_stack_get_end.\n      // We write cookies to the final two words in the stack and detect if they are\n      // ever overwritten.\n      HEAPU32[max >> 2] = 0x02135467;\n      HEAPU32[(max + 4) >> 2] = 0x89bacdfe;\n      // Also test the global address 0 for integrity.\n      HEAPU32[0 >> 2] = 1668509029;\n    }\n\n    function checkStackCookie() {\n      if (ABORT) return;\n      var max = _emscripten_stack_get_end();\n      // See writeStackCookie().\n      if (max == 0) {\n        max += 4;\n      }\n      var cookie1 = HEAPU32[max >> 2];\n      var cookie2 = HEAPU32[(max + 4) >> 2];\n      if (cookie1 != 0x02135467 || cookie2 != 0x89bacdfe) {\n        abort(\n          `Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`,\n        );\n      }\n      // Also test the global address 0 for integrity.\n      if (HEAPU32[0 >> 2] != 0x63736d65 /* 'emsc' */) {\n        abort('Runtime error: The application has corrupted its heap memory area (address zero)!');\n      }\n    }\n    // end include: runtime_stack_check.js\n    var __ATPRERUN__ = []; // functions called before the runtime is initialized\n    var __ATINIT__ = []; // functions called during startup\n    var __ATPOSTRUN__ = []; // functions called after the main() is called\n\n    var runtimeInitialized = false;\n\n    function preRun() {\n      var preRuns = Module['preRun'];\n      if (preRuns) {\n        if (typeof preRuns == 'function') preRuns = [preRuns];\n        preRuns.forEach(addOnPreRun);\n      }\n      callRuntimeCallbacks(__ATPRERUN__);\n    }\n\n    function initRuntime() {\n      assert(!runtimeInitialized);\n      runtimeInitialized = true;\n\n      checkStackCookie();\n\n      if (!Module['noFSInit'] && !FS.initialized) FS.init();\n      FS.ignorePermissions = false;\n      callRuntimeCallbacks(__ATINIT__);\n    }\n\n    function postRun() {\n      checkStackCookie();\n\n      var postRuns = Module['postRun'];\n      if (postRuns) {\n        if (typeof postRuns == 'function') postRuns = [postRuns];\n        postRuns.forEach(addOnPostRun);\n      }\n\n      callRuntimeCallbacks(__ATPOSTRUN__);\n    }\n\n    function addOnPreRun(cb) {\n      __ATPRERUN__.unshift(cb);\n    }\n\n    function addOnInit(cb) {\n      __ATINIT__.unshift(cb);\n    }\n\n    function addOnPostRun(cb) {\n      __ATPOSTRUN__.unshift(cb);\n    }\n\n    // include: runtime_math.js\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul\n\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround\n\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32\n\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc\n\n    assert(\n      Math.imul,\n      'This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill',\n    );\n    assert(\n      Math.fround,\n      'This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill',\n    );\n    assert(\n      Math.clz32,\n      'This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill',\n    );\n    assert(\n      Math.trunc,\n      'This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill',\n    );\n    // end include: runtime_math.js\n    // A counter of dependencies for calling run(). If we need to\n    // do asynchronous work before running, increment this and\n    // decrement it. Incrementing must happen in a place like\n    // Module.preRun (used by emcc to add file preloading).\n    // Note that you can add dependencies in preRun, even though\n    // it happens right before run - run will be postponed until\n    // the dependencies are met.\n    var runDependencies = 0;\n    var runDependencyWatcher = null;\n    var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled\n    var runDependencyTracking = {};\n\n    function getUniqueRunDependency(id) {\n      var orig = id;\n      while (1) {\n        if (!runDependencyTracking[id]) return id;\n        id = orig + Math.random();\n      }\n    }\n\n    function addRunDependency(id) {\n      runDependencies++;\n\n      Module['monitorRunDependencies']?.(runDependencies);\n\n      if (id) {\n        assert(!runDependencyTracking[id]);\n        runDependencyTracking[id] = 1;\n        if (runDependencyWatcher === null && typeof setInterval != 'undefined') {\n          // Check for missing dependencies every few seconds\n          runDependencyWatcher = setInterval(() => {\n            if (ABORT) {\n              clearInterval(runDependencyWatcher);\n              runDependencyWatcher = null;\n              return;\n            }\n            var shown = false;\n            for (var dep in runDependencyTracking) {\n              if (!shown) {\n                shown = true;\n                err('still waiting on run dependencies:');\n              }\n              err(`dependency: ${dep}`);\n            }\n            if (shown) {\n              err('(end of list)');\n            }\n          }, 10000);\n        }\n      } else {\n        err('warning: run dependency added without ID');\n      }\n    }\n\n    function removeRunDependency(id) {\n      runDependencies--;\n\n      Module['monitorRunDependencies']?.(runDependencies);\n\n      if (id) {\n        assert(runDependencyTracking[id]);\n        delete runDependencyTracking[id];\n      } else {\n        err('warning: run dependency removed without ID');\n      }\n      if (runDependencies == 0) {\n        if (runDependencyWatcher !== null) {\n          clearInterval(runDependencyWatcher);\n          runDependencyWatcher = null;\n        }\n        if (dependenciesFulfilled) {\n          var callback = dependenciesFulfilled;\n          dependenciesFulfilled = null;\n          callback(); // can add another dependenciesFulfilled\n        }\n      }\n    }\n\n    /** @param {string|number=} what */\n    function abort(what) {\n      Module['onAbort']?.(what);\n\n      what = 'Aborted(' + what + ')';\n      // TODO(sbc): Should we remove printing and leave it up to whoever\n      // catches the exception?\n      err(what);\n\n      ABORT = true;\n\n      // Use a wasm runtime error, because a JS error might be seen as a foreign\n      // exception, which means we'd run destructors on it. We need the error to\n      // simply make the program stop.\n      // FIXME This approach does not work in Wasm EH because it currently does not assume\n      // all RuntimeErrors are from traps; it decides whether a RuntimeError is from\n      // a trap or not based on a hidden field within the object. So at the moment\n      // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that\n      // allows this in the wasm spec.\n\n      // Suppress closure compiler warning here. Closure compiler's builtin extern\n      // definition for WebAssembly.RuntimeError claims it takes no arguments even\n      // though it can.\n      // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed.\n      /** @suppress {checkTypes} */\n      var e = new WebAssembly.RuntimeError(what);\n\n      readyPromiseReject(e);\n      // Throw the error whether or not MODULARIZE is set because abort is used\n      // in code paths apart from instantiation where an exception is expected\n      // to be thrown when abort is called.\n      throw e;\n    }\n\n    // include: memoryprofiler.js\n    // end include: memoryprofiler.js\n    // include: URIUtils.js\n    // Prefix of data URIs emitted by SINGLE_FILE and related options.\n    var dataURIPrefix = 'data:application/octet-stream;base64,';\n\n    /**\n     * Indicates whether filename is a base64 data URI.\n     * @noinline\n     */\n    var isDataURI = (filename) => filename.startsWith(dataURIPrefix);\n\n    /**\n     * Indicates whether filename is delivered via file protocol (as opposed to http/https)\n     * @noinline\n     */\n    var isFileURI = (filename) => filename.startsWith('file://');\n    // end include: URIUtils.js\n    function createExportWrapper(name, nargs) {\n      return (...args) => {\n        assert(\n          runtimeInitialized,\n          `native function \\`${name}\\` called before runtime initialization`,\n        );\n        var f = wasmExports[name];\n        assert(f, `exported native function \\`${name}\\` not found`);\n        // Only assert for too many arguments. Too few can be valid since the missing arguments will be zero filled.\n        assert(\n          args.length <= nargs,\n          `native function \\`${name}\\` called with ${args.length} args but expects ${nargs}`,\n        );\n        return f(...args);\n      };\n    }\n\n    // include: runtime_exceptions.js\n    // end include: runtime_exceptions.js\n    function findWasmBinary() {\n      if (Module['locateFile']) {\n        var f = 'pdfium.wasm';\n        if (!isDataURI(f)) {\n          return locateFile(f);\n        }\n        return f;\n      }\n      if (ENVIRONMENT_IS_SHELL) return 'pdfium.wasm';\n      // Use bundler-friendly `new URL(..., import.meta.url)` pattern; works in browsers too.\n      return new URL('pdfium.wasm', import.meta.url).href;\n    }\n\n    var wasmBinaryFile;\n\n    function getBinarySync(file) {\n      if (file == wasmBinaryFile && wasmBinary) {\n        return new Uint8Array(wasmBinary);\n      }\n      if (readBinary) {\n        return readBinary(file);\n      }\n      throw 'both async and sync fetching of the wasm failed';\n    }\n\n    function getBinaryPromise(binaryFile) {\n      // If we don't have the binary yet, load it asynchronously using readAsync.\n      if (!wasmBinary) {\n        // Fetch the binary using readAsync\n        return readAsync(binaryFile).then(\n          (response) => new Uint8Array(/** @type{!ArrayBuffer} */ (response)),\n          // Fall back to getBinarySync if readAsync fails\n          () => getBinarySync(binaryFile),\n        );\n      }\n\n      // Otherwise, getBinarySync should be able to get it synchronously\n      return Promise.resolve().then(() => getBinarySync(binaryFile));\n    }\n\n    function instantiateArrayBuffer(binaryFile, imports, receiver) {\n      return getBinaryPromise(binaryFile)\n        .then((binary) => {\n          return WebAssembly.instantiate(binary, imports);\n        })\n        .then(receiver, (reason) => {\n          err(`failed to asynchronously prepare wasm: ${reason}`);\n\n          // Warn on some common problems.\n          if (isFileURI(wasmBinaryFile)) {\n            err(\n              `warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`,\n            );\n          }\n          abort(reason);\n        });\n    }\n\n    function instantiateAsync(binary, binaryFile, imports, callback) {\n      if (\n        !binary &&\n        typeof WebAssembly.instantiateStreaming == 'function' &&\n        !isDataURI(binaryFile) &&\n        // Avoid instantiateStreaming() on Node.js environment for now, as while\n        // Node.js v18.1.0 implements it, it does not have a full fetch()\n        // implementation yet.\n        //\n        // Reference:\n        //   https://github.com/emscripten-core/emscripten/pull/16917\n        !false &&\n        typeof fetch == 'function'\n      ) {\n        return fetch(binaryFile, { credentials: 'same-origin' }).then((response) => {\n          // Suppress closure warning here since the upstream definition for\n          // instantiateStreaming only allows Promise<Repsponse> rather than\n          // an actual Response.\n          // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure is fixed.\n          /** @suppress {checkTypes} */\n          var result = WebAssembly.instantiateStreaming(response, imports);\n\n          return result.then(callback, function (reason) {\n            // We expect the most common failure cause to be a bad MIME type for the binary,\n            // in which case falling back to ArrayBuffer instantiation should work.\n            err(`wasm streaming compile failed: ${reason}`);\n            err('falling back to ArrayBuffer instantiation');\n            return instantiateArrayBuffer(binaryFile, imports, callback);\n          });\n        });\n      }\n      return instantiateArrayBuffer(binaryFile, imports, callback);\n    }\n\n    function getWasmImports() {\n      // prepare imports\n      return {\n        env: wasmImports,\n        wasi_snapshot_preview1: wasmImports,\n      };\n    }\n\n    // Create the wasm instance.\n    // Receives the wasm imports, returns the exports.\n    function createWasm() {\n      var info = getWasmImports();\n      // Load the wasm module and create an instance of using native support in the JS engine.\n      // handle a generated wasm instance, receiving its exports and\n      // performing other necessary setup\n      /** @param {WebAssembly.Module=} module*/\n      function receiveInstance(instance, module) {\n        wasmExports = instance.exports;\n\n        Module['wasmExports'] = wasmExports;\n\n        wasmMemory = wasmExports['memory'];\n\n        assert(wasmMemory, 'memory not found in wasm exports');\n        updateMemoryViews();\n\n        wasmTable = wasmExports['__indirect_function_table'];\n\n        assert(wasmTable, 'table not found in wasm exports');\n\n        addOnInit(wasmExports['__wasm_call_ctors']);\n\n        removeRunDependency('wasm-instantiate');\n        return wasmExports;\n      }\n      // wait for the pthread pool (if any)\n      addRunDependency('wasm-instantiate');\n\n      // Prefer streaming instantiation if available.\n      // Async compilation can be confusing when an error on the page overwrites Module\n      // (for example, if the order of elements is wrong, and the one defining Module is\n      // later), so we save Module and check it later.\n      var trueModule = Module;\n      function receiveInstantiationResult(result) {\n        // 'result' is a ResultObject object which has both the module and instance.\n        // receiveInstance() will swap in the exports (to Module.asm) so they can be called\n        assert(\n          Module === trueModule,\n          'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?',\n        );\n        trueModule = null;\n        // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line.\n        // When the regression is fixed, can restore the above PTHREADS-enabled path.\n        receiveInstance(result['instance']);\n      }\n\n      // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback\n      // to manually instantiate the Wasm module themselves. This allows pages to\n      // run the instantiation parallel to any other async startup actions they are\n      // performing.\n      // Also pthreads and wasm workers initialize the wasm instance through this\n      // path.\n      if (Module['instantiateWasm']) {\n        try {\n          return Module['instantiateWasm'](info, receiveInstance);\n        } catch (e) {\n          err(`Module.instantiateWasm callback failed with error: ${e}`);\n          // If instantiation fails, reject the module ready promise.\n          readyPromiseReject(e);\n        }\n      }\n\n      wasmBinaryFile ??= findWasmBinary();\n\n      // If instantiation fails, reject the module ready promise.\n      instantiateAsync(wasmBinary, wasmBinaryFile, info, receiveInstantiationResult).catch(\n        readyPromiseReject,\n      );\n      return {}; // no exports yet; we'll fill them in later\n    }\n\n    // Globals used by JS i64 conversions (see makeSetValue)\n    var tempDouble;\n    var tempI64;\n\n    // include: runtime_debug.js\n    // Endianness check\n    (() => {\n      var h16 = new Int16Array(1);\n      var h8 = new Int8Array(h16.buffer);\n      h16[0] = 0x6373;\n      if (h8[0] !== 0x73 || h8[1] !== 0x63)\n        throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)';\n    })();\n\n    if (Module['ENVIRONMENT']) {\n      throw new Error(\n        'Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)',\n      );\n    }\n\n    function legacyModuleProp(prop, newName, incoming = true) {\n      if (!Object.getOwnPropertyDescriptor(Module, prop)) {\n        Object.defineProperty(Module, prop, {\n          configurable: true,\n          get() {\n            let extra = incoming\n              ? ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)'\n              : '';\n            abort(`\\`Module.${prop}\\` has been replaced by \\`${newName}\\`` + extra);\n          },\n        });\n      }\n    }\n\n    function ignoredModuleProp(prop) {\n      if (Object.getOwnPropertyDescriptor(Module, prop)) {\n        abort(\n          `\\`Module.${prop}\\` was supplied but \\`${prop}\\` not included in INCOMING_MODULE_JS_API`,\n        );\n      }\n    }\n\n    // forcing the filesystem exports a few things by default\n    function isExportedByForceFilesystem(name) {\n      return (\n        name === 'FS_createPath' ||\n        name === 'FS_createDataFile' ||\n        name === 'FS_createPreloadedFile' ||\n        name === 'FS_unlink' ||\n        name === 'addRunDependency' ||\n        // The old FS has some functionality that WasmFS lacks.\n        name === 'FS_createLazyFile' ||\n        name === 'FS_createDevice' ||\n        name === 'removeRunDependency'\n      );\n    }\n\n    /**\n     * Intercept access to a global symbol.  This enables us to give informative\n     * warnings/errors when folks attempt to use symbols they did not include in\n     * their build, or no symbols that no longer exist.\n     */\n    function hookGlobalSymbolAccess(sym, func) {\n      if (typeof globalThis != 'undefined' && !Object.getOwnPropertyDescriptor(globalThis, sym)) {\n        Object.defineProperty(globalThis, sym, {\n          configurable: true,\n          get() {\n            func();\n            return undefined;\n          },\n        });\n      }\n    }\n\n    function missingGlobal(sym, msg) {\n      hookGlobalSymbolAccess(sym, () => {\n        warnOnce(`\\`${sym}\\` is not longer defined by emscripten. ${msg}`);\n      });\n    }\n\n    missingGlobal('buffer', 'Please use HEAP8.buffer or wasmMemory.buffer');\n    missingGlobal('asm', 'Please use wasmExports instead');\n\n    function missingLibrarySymbol(sym) {\n      hookGlobalSymbolAccess(sym, () => {\n        // Can't `abort()` here because it would break code that does runtime\n        // checks.  e.g. `if (typeof SDL === 'undefined')`.\n        var msg = `\\`${sym}\\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`;\n        // DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in\n        // library.js, which means $name for a JS name with no prefix, or name\n        // for a JS name like _name.\n        var librarySymbol = sym;\n        if (!librarySymbol.startsWith('_')) {\n          librarySymbol = '$' + sym;\n        }\n        msg += ` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`;\n        if (isExportedByForceFilesystem(sym)) {\n          msg +=\n            '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you';\n        }\n        warnOnce(msg);\n      });\n\n      // Any symbol that is not included from the JS library is also (by definition)\n      // not exported on the Module object.\n      unexportedRuntimeSymbol(sym);\n    }\n\n    function unexportedRuntimeSymbol(sym) {\n      if (!Object.getOwnPropertyDescriptor(Module, sym)) {\n        Object.defineProperty(Module, sym, {\n          configurable: true,\n          get() {\n            var msg = `'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;\n            if (isExportedByForceFilesystem(sym)) {\n              msg +=\n                '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you';\n            }\n            abort(msg);\n          },\n        });\n      }\n    }\n\n    var callRuntimeCallbacks = (callbacks) => {\n      // Pass the module as the first argument.\n      callbacks.forEach((f) => f(Module));\n    };\n\n    /**\n     * @param {number} ptr\n     * @param {string} type\n     */\n    function getValue(ptr, type = 'i8') {\n      if (type.endsWith('*')) type = '*';\n      switch (type) {\n        case 'i1':\n          return HEAP8[ptr];\n        case 'i8':\n          return HEAP8[ptr];\n        case 'i16':\n          return HEAP16[ptr >> 1];\n        case 'i32':\n          return HEAP32[ptr >> 2];\n        case 'i64':\n          abort('to do getValue(i64) use WASM_BIGINT');\n        case 'float':\n          return HEAPF32[ptr >> 2];\n        case 'double':\n          return HEAPF64[ptr >> 3];\n        case '*':\n          return HEAPU32[ptr >> 2];\n        default:\n          abort(`invalid type for getValue: ${type}`);\n      }\n    }\n\n    Module['noExitRuntime'] || true;\n\n    var ptrToString = (ptr) => {\n      assert(typeof ptr === 'number');\n      // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned.\n      ptr >>>= 0;\n      return '0x' + ptr.toString(16).padStart(8, '0');\n    };\n\n    /**\n     * @param {number} ptr\n     * @param {number} value\n     * @param {string} type\n     */\n    function setValue(ptr, value, type = 'i8') {\n      if (type.endsWith('*')) type = '*';\n      switch (type) {\n        case 'i1':\n          HEAP8[ptr] = value;\n          break;\n        case 'i8':\n          HEAP8[ptr] = value;\n          break;\n        case 'i16':\n          HEAP16[ptr >> 1] = value;\n          break;\n        case 'i32':\n          HEAP32[ptr >> 2] = value;\n          break;\n        case 'i64':\n          abort('to do setValue(i64) use WASM_BIGINT');\n        case 'float':\n          HEAPF32[ptr >> 2] = value;\n          break;\n        case 'double':\n          HEAPF64[ptr >> 3] = value;\n          break;\n        case '*':\n          HEAPU32[ptr >> 2] = value;\n          break;\n        default:\n          abort(`invalid type for setValue: ${type}`);\n      }\n    }\n\n    var stackRestore = (val) => __emscripten_stack_restore(val);\n\n    var stackSave = () => _emscripten_stack_get_current();\n\n    var warnOnce = (text) => {\n      warnOnce.shown ||= {};\n      if (!warnOnce.shown[text]) {\n        warnOnce.shown[text] = 1;\n        err(text);\n      }\n    };\n\n    var UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder() : undefined;\n\n    /**\n     * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given\n     * array that contains uint8 values, returns a copy of that string as a\n     * Javascript String object.\n     * heapOrArray is either a regular array, or a JavaScript typed array view.\n     * @param {number=} idx\n     * @param {number=} maxBytesToRead\n     * @return {string}\n     */\n    var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead = NaN) => {\n      var endIdx = idx + maxBytesToRead;\n      var endPtr = idx;\n      // TextDecoder needs to know the byte length in advance, it doesn't stop on\n      // null terminator by itself.  Also, use the length info to avoid running tiny\n      // strings through TextDecoder, since .subarray() allocates garbage.\n      // (As a tiny code save trick, compare endPtr against endIdx using a negation,\n      // so that undefined/NaN means Infinity)\n      while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr;\n\n      if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {\n        return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));\n      }\n      var str = '';\n      // If building with TextDecoder, we have already computed the string length\n      // above, so test loop end condition against that\n      while (idx < endPtr) {\n        // For UTF8 byte structure, see:\n        // http://en.wikipedia.org/wiki/UTF-8#Description\n        // https://www.ietf.org/rfc/rfc2279.txt\n        // https://tools.ietf.org/html/rfc3629\n        var u0 = heapOrArray[idx++];\n        if (!(u0 & 0x80)) {\n          str += String.fromCharCode(u0);\n          continue;\n        }\n        var u1 = heapOrArray[idx++] & 63;\n        if ((u0 & 0xe0) == 0xc0) {\n          str += String.fromCharCode(((u0 & 31) << 6) | u1);\n          continue;\n        }\n        var u2 = heapOrArray[idx++] & 63;\n        if ((u0 & 0xf0) == 0xe0) {\n          u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;\n        } else {\n          if ((u0 & 0xf8) != 0xf0)\n            warnOnce(\n              'Invalid UTF-8 leading byte ' +\n                ptrToString(u0) +\n                ' encountered when deserializing a UTF-8 string in wasm memory to a JS string!',\n            );\n          u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63);\n        }\n\n        if (u0 < 0x10000) {\n          str += String.fromCharCode(u0);\n        } else {\n          var ch = u0 - 0x10000;\n          str += String.fromCharCode(0xd800 | (ch >> 10), 0xdc00 | (ch & 0x3ff));\n        }\n      }\n      return str;\n    };\n\n    /**\n     * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the\n     * emscripten HEAP, returns a copy of that string as a Javascript String object.\n     *\n     * @param {number} ptr\n     * @param {number=} maxBytesToRead - An optional length that specifies the\n     *   maximum number of bytes to read. You can omit this parameter to scan the\n     *   string until the first 0 byte. If maxBytesToRead is passed, and the string\n     *   at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the\n     *   string will cut short at that byte index (i.e. maxBytesToRead will not\n     *   produce a string of exact length [ptr, ptr+maxBytesToRead[) N.B. mixing\n     *   frequent uses of UTF8ToString() with and without maxBytesToRead may throw\n     *   JS JIT optimizations off, so it is worth to consider consistently using one\n     * @return {string}\n     */\n    var UTF8ToString = (ptr, maxBytesToRead) => {\n      assert(typeof ptr == 'number', `UTF8ToString expects a number (got ${typeof ptr})`);\n      return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : '';\n    };\n    var ___assert_fail = (condition, filename, line, func) => {\n      abort(\n        `Assertion failed: ${UTF8ToString(condition)}, at: ` +\n          [\n            filename ? UTF8ToString(filename) : 'unknown filename',\n            line,\n            func ? UTF8ToString(func) : 'unknown function',\n          ],\n      );\n    };\n\n    /** @suppress {duplicate } */\n    function syscallGetVarargI() {\n      assert(SYSCALLS.varargs != undefined);\n      // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number.\n      var ret = HEAP32[+SYSCALLS.varargs >> 2];\n      SYSCALLS.varargs += 4;\n      return ret;\n    }\n    var syscallGetVarargP = syscallGetVarargI;\n\n    var PATH = {\n      isAbs: (path) => path.charAt(0) === '/',\n      splitPath: (filename) => {\n        var splitPathRe = /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\n        return splitPathRe.exec(filename).slice(1);\n      },\n      normalizeArray: (parts, allowAboveRoot) => {\n        // if the path tries to go above the root, `up` ends up > 0\n        var up = 0;\n        for (var i = parts.length - 1; i >= 0; i--) {\n          var last = parts[i];\n          if (last === '.') {\n            parts.splice(i, 1);\n          } else if (last === '..') {\n            parts.splice(i, 1);\n            up++;\n          } else if (up) {\n            parts.splice(i, 1);\n            up--;\n          }\n        }\n        // if the path is allowed to go above the root, restore leading ..s\n        if (allowAboveRoot) {\n          for (; up; up--) {\n            parts.unshift('..');\n          }\n        }\n        return parts;\n      },\n      normalize: (path) => {\n        var isAbsolute = PATH.isAbs(path),\n          trailingSlash = path.substr(-1) === '/';\n        // Normalize the path\n        path = PATH.normalizeArray(\n          path.split('/').filter((p) => !!p),\n          !isAbsolute,\n        ).join('/');\n        if (!path && !isAbsolute) {\n          path = '.';\n        }\n        if (path && trailingSlash) {\n          path += '/';\n        }\n        return (isAbsolute ? '/' : '') + path;\n      },\n      dirname: (path) => {\n        var result = PATH.splitPath(path),\n          root = result[0],\n          dir = result[1];\n        if (!root && !dir) {\n          // No dirname whatsoever\n          return '.';\n        }\n        if (dir) {\n          // It has a dirname, strip trailing slash\n          dir = dir.substr(0, dir.length - 1);\n        }\n        return root + dir;\n      },\n      basename: (path) => {\n        // EMSCRIPTEN return '/'' for '/', not an empty string\n        if (path === '/') return '/';\n        path = PATH.normalize(path);\n        path = path.replace(/\\/$/, '');\n        var lastSlash = path.lastIndexOf('/');\n        if (lastSlash === -1) return path;\n        return path.substr(lastSlash + 1);\n      },\n      join: (...paths) => PATH.normalize(paths.join('/')),\n      join2: (l, r) => PATH.normalize(l + '/' + r),\n    };\n\n    var initRandomFill = () => {\n      if (typeof crypto == 'object' && typeof crypto['getRandomValues'] == 'function') {\n        // for modern web browsers\n        return (view) => crypto.getRandomValues(view);\n      }\n      // we couldn't find a proper implementation, as Math.random() is not suitable for /dev/random, see emscripten-core/emscripten/pull/7096\n      abort(\n        'no cryptographic support found for randomDevice. consider polyfilling it if you want to use something insecure like Math.random(), e.g. put this in a --pre-js: var crypto = { getRandomValues: (array) => { for (var i = 0; i < array.length; i++) array[i] = (Math.random()*256)|0 } };',\n      );\n    };\n    var randomFill = (view) => {\n      // Lazily init on the first invocation.\n      return (randomFill = initRandomFill())(view);\n    };\n\n    var PATH_FS = {\n      resolve: (...args) => {\n        var resolvedPath = '',\n          resolvedAbsolute = false;\n        for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n          var path = i >= 0 ? args[i] : FS.cwd();\n          // Skip empty and invalid entries\n          if (typeof path != 'string') {\n            throw new TypeError('Arguments to path.resolve must be strings');\n          } else if (!path) {\n            return ''; // an invalid portion invalidates the whole thing\n          }\n          resolvedPath = path + '/' + resolvedPath;\n          resolvedAbsolute = PATH.isAbs(path);\n        }\n        // At this point the path should be resolved to a full absolute path, but\n        // handle relative paths to be safe (might happen when process.cwd() fails)\n        resolvedPath = PATH.normalizeArray(\n          resolvedPath.split('/').filter((p) => !!p),\n          !resolvedAbsolute,\n        ).join('/');\n        return (resolvedAbsolute ? '/' : '') + resolvedPath || '.';\n      },\n      relative: (from, to) => {\n        from = PATH_FS.resolve(from).substr(1);\n        to = PATH_FS.resolve(to).substr(1);\n        function trim(arr) {\n          var start = 0;\n          for (; start < arr.length; start++) {\n            if (arr[start] !== '') break;\n          }\n          var end = arr.length - 1;\n          for (; end >= 0; end--) {\n            if (arr[end] !== '') break;\n          }\n          if (start > end) return [];\n          return arr.slice(start, end - start + 1);\n        }\n        var fromParts = trim(from.split('/'));\n        var toParts = trim(to.split('/'));\n        var length = Math.min(fromParts.length, toParts.length);\n        var samePartsLength = length;\n        for (var i = 0; i < length; i++) {\n          if (fromParts[i] !== toParts[i]) {\n            samePartsLength = i;\n            break;\n          }\n        }\n        var outputParts = [];\n        for (var i = samePartsLength; i < fromParts.length; i++) {\n          outputParts.push('..');\n        }\n        outputParts = outputParts.concat(toParts.slice(samePartsLength));\n        return outputParts.join('/');\n      },\n    };\n\n    var FS_stdin_getChar_buffer = [];\n\n    var lengthBytesUTF8 = (str) => {\n      var len = 0;\n      for (var i = 0; i < str.length; ++i) {\n        // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code\n        // unit, not a Unicode code point of the character! So decode\n        // UTF16->UTF32->UTF8.\n        // See http://unicode.org/faq/utf_bom.html#utf16-3\n        var c = str.charCodeAt(i); // possibly a lead surrogate\n        if (c <= 0x7f) {\n          len++;\n        } else if (c <= 0x7ff) {\n          len += 2;\n        } else if (c >= 0xd800 && c <= 0xdfff) {\n          len += 4;\n          ++i;\n        } else {\n          len += 3;\n        }\n      }\n      return len;\n    };\n\n    var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {\n      assert(typeof str === 'string', `stringToUTF8Array expects a string (got ${typeof str})`);\n      // Parameter maxBytesToWrite is not optional. Negative values, 0, null,\n      // undefined and false each don't write out any bytes.\n      if (!(maxBytesToWrite > 0)) return 0;\n\n      var startIdx = outIdx;\n      var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator.\n      for (var i = 0; i < str.length; ++i) {\n        // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code\n        // unit, not a Unicode code point of the character! So decode\n        // UTF16->UTF32->UTF8.\n        // See http://unicode.org/faq/utf_bom.html#utf16-3\n        // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description\n        // and https://www.ietf.org/rfc/rfc2279.txt\n        // and https://tools.ietf.org/html/rfc3629\n        var u = str.charCodeAt(i); // possibly a lead surrogate\n        if (u >= 0xd800 && u <= 0xdfff) {\n          var u1 = str.charCodeAt(++i);\n          u = (0x10000 + ((u & 0x3ff) << 10)) | (u1 & 0x3ff);\n        }\n        if (u <= 0x7f) {\n          if (outIdx >= endIdx) break;\n          heap[outIdx++] = u;\n        } else if (u <= 0x7ff) {\n          if (outIdx + 1 >= endIdx) break;\n          heap[outIdx++] = 0xc0 | (u >> 6);\n          heap[outIdx++] = 0x80 | (u & 63);\n        } else if (u <= 0xffff) {\n          if (outIdx + 2 >= endIdx) break;\n          heap[outIdx++] = 0xe0 | (u >> 12);\n          heap[outIdx++] = 0x80 | ((u >> 6) & 63);\n          heap[outIdx++] = 0x80 | (u & 63);\n        } else {\n          if (outIdx + 3 >= endIdx) break;\n          if (u > 0x10ffff)\n            warnOnce(\n              'Invalid Unicode code point ' +\n                ptrToString(u) +\n                ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).',\n            );\n          heap[outIdx++] = 0xf0 | (u >> 18);\n          heap[outIdx++] = 0x80 | ((u >> 12) & 63);\n          heap[outIdx++] = 0x80 | ((u >> 6) & 63);\n          heap[outIdx++] = 0x80 | (u & 63);\n        }\n      }\n      // Null-terminate the pointer to the buffer.\n      heap[outIdx] = 0;\n      return outIdx - startIdx;\n    };\n    /** @type {function(string, boolean=, number=)} */\n    function intArrayFromString(stringy, dontAddNull, length) {\n      var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1;\n      var u8array = new Array(len);\n      var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);\n      if (dontAddNull) u8array.length = numBytesWritten;\n      return u8array;\n    }\n    var FS_stdin_getChar = () => {\n      if (!FS_stdin_getChar_buffer.length) {\n        var result = null;\n        if (typeof window != 'undefined' && typeof window.prompt == 'function') {\n          // Browser.\n          result = window.prompt('Input: '); // returns null on cancel\n          if (result !== null) {\n            result += '\\n';\n          }\n        } else if (typeof readline == 'function') {\n          // Command line.\n          result = readline();\n          if (result) {\n            result += '\\n';\n          }\n        } else ;\n        if (!result) {\n          return null;\n        }\n        FS_stdin_getChar_buffer = intArrayFromString(result, true);\n      }\n      return FS_stdin_getChar_buffer.shift();\n    };\n    var TTY = {\n      ttys: [],\n      init() {\n        // https://github.com/emscripten-core/emscripten/pull/1555\n        // if (false) {\n        //   // currently, FS.init does not distinguish if process.stdin is a file or TTY\n        //   // device, it always assumes it's a TTY device. because of this, we're forcing\n        //   // process.stdin to UTF8 encoding to at least make stdin reading compatible\n        //   // with text files until FS.init can be refactored.\n        //   process.stdin.setEncoding('utf8');\n        // }\n      },\n      shutdown() {\n        // https://github.com/emscripten-core/emscripten/pull/1555\n        // if (false) {\n        //   // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)?\n        //   // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation\n        //   // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists?\n        //   // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle\n        //   // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call\n        //   process.stdin.pause();\n        // }\n      },\n      register(dev, ops) {\n        TTY.ttys[dev] = { input: [], output: [], ops: ops };\n        FS.registerDevice(dev, TTY.stream_ops);\n      },\n      stream_ops: {\n        open(stream) {\n          var tty = TTY.ttys[stream.node.rdev];\n          if (!tty) {\n            throw new FS.ErrnoError(43);\n          }\n          stream.tty = tty;\n          stream.seekable = false;\n        },\n        close(stream) {\n          // flush any pending line data\n          stream.tty.ops.fsync(stream.tty);\n        },\n        fsync(stream) {\n          stream.tty.ops.fsync(stream.tty);\n        },\n        read(stream, buffer, offset, length, pos /* ignored */) {\n          if (!stream.tty || !stream.tty.ops.get_char) {\n            throw new FS.ErrnoError(60);\n          }\n          var bytesRead = 0;\n          for (var i = 0; i < length; i++) {\n            var result;\n            try {\n              result = stream.tty.ops.get_char(stream.tty);\n            } catch (e) {\n              throw new FS.ErrnoError(29);\n            }\n            if (result === undefined && bytesRead === 0) {\n              throw new FS.ErrnoError(6);\n            }\n            if (result === null || result === undefined) break;\n            bytesRead++;\n            buffer[offset + i] = result;\n          }\n          if (bytesRead) {\n            stream.node.timestamp = Date.now();\n          }\n          return bytesRead;\n        },\n        write(stream, buffer, offset, length, pos) {\n          if (!stream.tty || !stream.tty.ops.put_char) {\n            throw new FS.ErrnoError(60);\n          }\n          try {\n            for (var i = 0; i < length; i++) {\n              stream.tty.ops.put_char(stream.tty, buffer[offset + i]);\n            }\n          } catch (e) {\n            throw new FS.ErrnoError(29);\n          }\n          if (length) {\n            stream.node.timestamp = Date.now();\n          }\n          return i;\n        },\n      },\n      default_tty_ops: {\n        get_char(tty) {\n          return FS_stdin_getChar();\n        },\n        put_char(tty, val) {\n          if (val === null || val === 10) {\n            out(UTF8ArrayToString(tty.output));\n            tty.output = [];\n          } else {\n            if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle.\n          }\n        },\n        fsync(tty) {\n          if (tty.output && tty.output.length > 0) {\n            out(UTF8ArrayToString(tty.output));\n            tty.output = [];\n          }\n        },\n        ioctl_tcgets(tty) {\n          // typical setting\n          return {\n            c_iflag: 25856,\n            c_oflag: 5,\n            c_cflag: 191,\n            c_lflag: 35387,\n            c_cc: [\n              0x03, 0x1c, 0x7f, 0x15, 0x04, 0x00, 0x01, 0x00, 0x11, 0x13, 0x1a, 0x00, 0x12, 0x0f,\n              0x17, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n              0x00, 0x00, 0x00, 0x00,\n            ],\n          };\n        },\n        ioctl_tcsets(tty, optional_actions, data) {\n          // currently just ignore\n          return 0;\n        },\n        ioctl_tiocgwinsz(tty) {\n          return [24, 80];\n        },\n      },\n      default_tty1_ops: {\n        put_char(tty, val) {\n          if (val === null || val === 10) {\n            err(UTF8ArrayToString(tty.output));\n            tty.output = [];\n          } else {\n            if (val != 0) tty.output.push(val);\n          }\n        },\n        fsync(tty) {\n          if (tty.output && tty.output.length > 0) {\n            err(UTF8ArrayToString(tty.output));\n            tty.output = [];\n          }\n        },\n      },\n    };\n\n    var zeroMemory = (address, size) => {\n      HEAPU8.fill(0, address, address + size);\n    };\n\n    var alignMemory = (size, alignment) => {\n      assert(alignment, 'alignment argument is required');\n      return Math.ceil(size / alignment) * alignment;\n    };\n    var mmapAlloc = (size) => {\n      size = alignMemory(size, 65536);\n      var ptr = _emscripten_builtin_memalign(65536, size);\n      if (ptr) zeroMemory(ptr, size);\n      return ptr;\n    };\n    var MEMFS = {\n      ops_table: null,\n      mount(mount) {\n        return MEMFS.createNode(null, '/', 16384 | 511 /* 0777 */, 0);\n      },\n      createNode(parent, name, mode, dev) {\n        if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {\n          // no supported\n          throw new FS.ErrnoError(63);\n        }\n        MEMFS.ops_table ||= {\n          dir: {\n            node: {\n              getattr: MEMFS.node_ops.getattr,\n              setattr: MEMFS.node_ops.setattr,\n              lookup: MEMFS.node_ops.lookup,\n              mknod: MEMFS.node_ops.mknod,\n              rename: MEMFS.node_ops.rename,\n              unlink: MEMFS.node_ops.unlink,\n              rmdir: MEMFS.node_ops.rmdir,\n              readdir: MEMFS.node_ops.readdir,\n              symlink: MEMFS.node_ops.symlink,\n            },\n            stream: {\n              llseek: MEMFS.stream_ops.llseek,\n            },\n          },\n          file: {\n            node: {\n              getattr: MEMFS.node_ops.getattr,\n              setattr: MEMFS.node_ops.setattr,\n            },\n            stream: {\n              llseek: MEMFS.stream_ops.llseek,\n              read: MEMFS.stream_ops.read,\n              write: MEMFS.stream_ops.write,\n              allocate: MEMFS.stream_ops.allocate,\n              mmap: MEMFS.stream_ops.mmap,\n              msync: MEMFS.stream_ops.msync,\n            },\n          },\n          link: {\n            node: {\n              getattr: MEMFS.node_ops.getattr,\n              setattr: MEMFS.node_ops.setattr,\n              readlink: MEMFS.node_ops.readlink,\n            },\n            stream: {},\n          },\n          chrdev: {\n            node: {\n              getattr: MEMFS.node_ops.getattr,\n              setattr: MEMFS.node_ops.setattr,\n            },\n            stream: FS.chrdev_stream_ops,\n          },\n        };\n        var node = FS.createNode(parent, name, mode, dev);\n        if (FS.isDir(node.mode)) {\n          node.node_ops = MEMFS.ops_table.dir.node;\n          node.stream_ops = MEMFS.ops_table.dir.stream;\n          node.contents = {};\n        } else if (FS.isFile(node.mode)) {\n          node.node_ops = MEMFS.ops_table.file.node;\n          node.stream_ops = MEMFS.ops_table.file.stream;\n          node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.length which gives the whole capacity.\n          // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred\n          // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size\n          // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme.\n          node.contents = null;\n        } else if (FS.isLink(node.mode)) {\n          node.node_ops = MEMFS.ops_table.link.node;\n          node.stream_ops = MEMFS.ops_table.link.stream;\n        } else if (FS.isChrdev(node.mode)) {\n          node.node_ops = MEMFS.ops_table.chrdev.node;\n          node.stream_ops = MEMFS.ops_table.chrdev.stream;\n        }\n        node.timestamp = Date.now();\n        // add the new node to the parent\n        if (parent) {\n          parent.contents[name] = node;\n          parent.timestamp = node.timestamp;\n        }\n        return node;\n      },\n      getFileDataAsTypedArray(node) {\n        if (!node.contents) return new Uint8Array(0);\n        if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes.\n        return new Uint8Array(node.contents);\n      },\n      expandFileStorage(node, newCapacity) {\n        var prevCapacity = node.contents ? node.contents.length : 0;\n        if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough.\n        // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity.\n        // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to\n        // avoid overshooting the allocation cap by a very large margin.\n        var CAPACITY_DOUBLING_MAX = 1024 * 1024;\n        newCapacity = Math.max(\n          newCapacity,\n          (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0,\n        );\n        if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding.\n        var oldContents = node.contents;\n        node.contents = new Uint8Array(newCapacity); // Allocate new storage.\n        if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage.\n      },\n      resizeFileStorage(node, newSize) {\n        if (node.usedBytes == newSize) return;\n        if (newSize == 0) {\n          node.contents = null; // Fully decommit when requesting a resize to zero.\n          node.usedBytes = 0;\n        } else {\n          var oldContents = node.contents;\n          node.contents = new Uint8Array(newSize); // Allocate new storage.\n          if (oldContents) {\n            node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage.\n          }\n          node.usedBytes = newSize;\n        }\n      },\n      node_ops: {\n        getattr(node) {\n          var attr = {};\n          // device numbers reuse inode numbers.\n          attr.dev = FS.isChrdev(node.mode) ? node.id : 1;\n          attr.ino = node.id;\n          attr.mode = node.mode;\n          attr.nlink = 1;\n          attr.uid = 0;\n          attr.gid = 0;\n          attr.rdev = node.rdev;\n          if (FS.isDir(node.mode)) {\n            attr.size = 4096;\n          } else if (FS.isFile(node.mode)) {\n            attr.size = node.usedBytes;\n          } else if (FS.isLink(node.mode)) {\n            attr.size = node.link.length;\n          } else {\n            attr.size = 0;\n          }\n          attr.atime = new Date(node.timestamp);\n          attr.mtime = new Date(node.timestamp);\n          attr.ctime = new Date(node.timestamp);\n          // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize),\n          //       but this is not required by the standard.\n          attr.blksize = 4096;\n          attr.blocks = Math.ceil(attr.size / attr.blksize);\n          return attr;\n        },\n        setattr(node, attr) {\n          if (attr.mode !== undefined) {\n            node.mode = attr.mode;\n          }\n          if (attr.timestamp !== undefined) {\n            node.timestamp = attr.timestamp;\n          }\n          if (attr.size !== undefined) {\n            MEMFS.resizeFileStorage(node, attr.size);\n          }\n        },\n        lookup(parent, name) {\n          throw FS.genericErrors[44];\n        },\n        mknod(parent, name, mode, dev) {\n          return MEMFS.createNode(parent, name, mode, dev);\n        },\n        rename(old_node, new_dir, new_name) {\n          // if we're overwriting a directory at new_name, make sure it's empty.\n          if (FS.isDir(old_node.mode)) {\n            var new_node;\n            try {\n              new_node = FS.lookupNode(new_dir, new_name);\n            } catch (e) {}\n            if (new_node) {\n              for (var i in new_node.contents) {\n                throw new FS.ErrnoError(55);\n              }\n            }\n          }\n          // do the internal rewiring\n          delete old_node.parent.contents[old_node.name];\n          old_node.parent.timestamp = Date.now();\n          old_node.name = new_name;\n          new_dir.contents[new_name] = old_node;\n          new_dir.timestamp = old_node.parent.timestamp;\n        },\n        unlink(parent, name) {\n          delete parent.contents[name];\n          parent.timestamp = Date.now();\n        },\n        rmdir(parent, name) {\n          var node = FS.lookupNode(parent, name);\n          for (var i in node.contents) {\n            throw new FS.ErrnoError(55);\n          }\n          delete parent.contents[name];\n          parent.timestamp = Date.now();\n        },\n        readdir(node) {\n          var entries = ['.', '..'];\n          for (var key of Object.keys(node.contents)) {\n            entries.push(key);\n          }\n          return entries;\n        },\n        symlink(parent, newname, oldpath) {\n          var node = MEMFS.createNode(parent, newname, 511 /* 0777 */ | 40960, 0);\n          node.link = oldpath;\n          return node;\n        },\n        readlink(node) {\n          if (!FS.isLink(node.mode)) {\n            throw new FS.ErrnoError(28);\n          }\n          return node.link;\n        },\n      },\n      stream_ops: {\n        read(stream, buffer, offset, length, position) {\n          var contents = stream.node.contents;\n          if (position >= stream.node.usedBytes) return 0;\n          var size = Math.min(stream.node.usedBytes - position, length);\n          assert(size >= 0);\n          if (size > 8 && contents.subarray) {\n            // non-trivial, and typed array\n            buffer.set(contents.subarray(position, position + size), offset);\n          } else {\n            for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i];\n          }\n          return size;\n        },\n        write(stream, buffer, offset, length, position, canOwn) {\n          // The data buffer should be a typed array view\n          assert(!(buffer instanceof ArrayBuffer));\n          // If the buffer is located in main memory (HEAP), and if\n          // memory can grow, we can't hold on to references of the\n          // memory buffer, as they may get invalidated. That means we\n          // need to do copy its contents.\n          if (buffer.buffer === HEAP8.buffer) {\n            canOwn = false;\n          }\n\n          if (!length) return 0;\n          var node = stream.node;\n          node.timestamp = Date.now();\n\n          if (buffer.subarray && (!node.contents || node.contents.subarray)) {\n            // This write is from a typed array to a typed array?\n            if (canOwn) {\n              assert(position === 0, 'canOwn must imply no weird position inside the file');\n              node.contents = buffer.subarray(offset, offset + length);\n              node.usedBytes = length;\n              return length;\n            } else if (node.usedBytes === 0 && position === 0) {\n              // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data.\n              node.contents = buffer.slice(offset, offset + length);\n              node.usedBytes = length;\n              return length;\n            } else if (position + length <= node.usedBytes) {\n              // Writing to an already allocated and used subrange of the file?\n              node.contents.set(buffer.subarray(offset, offset + length), position);\n              return length;\n            }\n          }\n\n          // Appending to an existing file and we need to reallocate, or source data did not come as a typed array.\n          MEMFS.expandFileStorage(node, position + length);\n          if (node.contents.subarray && buffer.subarray) {\n            // Use typed array write which is available.\n            node.contents.set(buffer.subarray(offset, offset + length), position);\n          } else {\n            for (var i = 0; i < length; i++) {\n              node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not.\n            }\n          }\n          node.usedBytes = Math.max(node.usedBytes, position + length);\n          return length;\n        },\n        llseek(stream, offset, whence) {\n          var position = offset;\n          if (whence === 1) {\n            position += stream.position;\n          } else if (whence === 2) {\n            if (FS.isFile(stream.node.mode)) {\n              position += stream.node.usedBytes;\n            }\n          }\n          if (position < 0) {\n            throw new FS.ErrnoError(28);\n          }\n          return position;\n        },\n        allocate(stream, offset, length) {\n          MEMFS.expandFileStorage(stream.node, offset + length);\n          stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length);\n        },\n        mmap(stream, length, position, prot, flags) {\n          if (!FS.isFile(stream.node.mode)) {\n            throw new FS.ErrnoError(43);\n          }\n          var ptr;\n          var allocated;\n          var contents = stream.node.contents;\n          // Only make a new copy when MAP_PRIVATE is specified.\n          if (!(flags & 2) && contents && contents.buffer === HEAP8.buffer) {\n            // We can't emulate MAP_SHARED when the file is not backed by the\n            // buffer we're mapping to (e.g. the HEAP buffer).\n            allocated = false;\n            ptr = contents.byteOffset;\n          } else {\n            allocated = true;\n            ptr = mmapAlloc(length);\n            if (!ptr) {\n              throw new FS.ErrnoError(48);\n            }\n            if (contents) {\n              // Try to avoid unnecessary slices.\n              if (position > 0 || position + length < contents.length) {\n                if (contents.subarray) {\n                  contents = contents.subarray(position, position + length);\n                } else {\n                  contents = Array.prototype.slice.call(contents, position, position + length);\n                }\n              }\n              HEAP8.set(contents, ptr);\n            }\n          }\n          return { ptr, allocated };\n        },\n        msync(stream, buffer, offset, length, mmapFlags) {\n          MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false);\n          // should we check if bytesWritten and length are the same?\n          return 0;\n        },\n      },\n    };\n\n    /** @param {boolean=} noRunDep */\n    var asyncLoad = (url, onload, onerror, noRunDep) => {\n      var dep = !noRunDep ? getUniqueRunDependency(`al ${url}`) : '';\n      readAsync(url).then(\n        (arrayBuffer) => {\n          assert(arrayBuffer, `Loading data file \"${url}\" failed (no arrayBuffer).`);\n          onload(new Uint8Array(arrayBuffer));\n          if (dep) removeRunDependency(dep);\n        },\n        (err) => {\n          if (onerror) {\n            onerror();\n          } else {\n            throw `Loading data file \"${url}\" failed.`;\n          }\n        },\n      );\n      if (dep) addRunDependency(dep);\n    };\n\n    var FS_createDataFile = (parent, name, fileData, canRead, canWrite, canOwn) => {\n      FS.createDataFile(parent, name, fileData, canRead, canWrite, canOwn);\n    };\n\n    var preloadPlugins = Module['preloadPlugins'] || [];\n    var FS_handledByPreloadPlugin = (byteArray, fullname, finish, onerror) => {\n      // Ensure plugins are ready.\n      if (typeof Browser != 'undefined') Browser.init();\n\n      var handled = false;\n      preloadPlugins.forEach((plugin) => {\n        if (handled) return;\n        if (plugin['canHandle'](fullname)) {\n          plugin['handle'](byteArray, fullname, finish, onerror);\n          handled = true;\n        }\n      });\n      return handled;\n    };\n    var FS_createPreloadedFile = (\n      parent,\n      name,\n      url,\n      canRead,\n      canWrite,\n      onload,\n      onerror,\n      dontCreateFile,\n      canOwn,\n      preFinish,\n    ) => {\n      // TODO we should allow people to just pass in a complete filename instead\n      // of parent and name being that we just join them anyways\n      var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent;\n      var dep = getUniqueRunDependency(`cp ${fullname}`); // might have several active requests for the same fullname\n      function processData(byteArray) {\n        function finish(byteArray) {\n          preFinish?.();\n          if (!dontCreateFile) {\n            FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);\n          }\n          onload?.();\n          removeRunDependency(dep);\n        }\n        if (\n          FS_handledByPreloadPlugin(byteArray, fullname, finish, () => {\n            onerror?.();\n            removeRunDependency(dep);\n          })\n        ) {\n          return;\n        }\n        finish(byteArray);\n      }\n      addRunDependency(dep);\n      if (typeof url == 'string') {\n        asyncLoad(url, processData, onerror);\n      } else {\n        processData(url);\n      }\n    };\n\n    var FS_modeStringToFlags = (str) => {\n      var flagModes = {\n        r: 0,\n        'r+': 2,\n        w: 512 | 64 | 1,\n        'w+': 512 | 64 | 2,\n        a: 1024 | 64 | 1,\n        'a+': 1024 | 64 | 2,\n      };\n      var flags = flagModes[str];\n      if (typeof flags == 'undefined') {\n        throw new Error(`Unknown file open mode: ${str}`);\n      }\n      return flags;\n    };\n\n    var FS_getMode = (canRead, canWrite) => {\n      var mode = 0;\n      if (canRead) mode |= 292 | 73;\n      if (canWrite) mode |= 146;\n      return mode;\n    };\n\n    var strError = (errno) => {\n      return UTF8ToString(_strerror(errno));\n    };\n\n    var ERRNO_CODES = {\n      EPERM: 63,\n      ENOENT: 44,\n      ESRCH: 71,\n      EINTR: 27,\n      EIO: 29,\n      ENXIO: 60,\n      E2BIG: 1,\n      ENOEXEC: 45,\n      EBADF: 8,\n      ECHILD: 12,\n      EAGAIN: 6,\n      EWOULDBLOCK: 6,\n      ENOMEM: 48,\n      EACCES: 2,\n      EFAULT: 21,\n      ENOTBLK: 105,\n      EBUSY: 10,\n      EEXIST: 20,\n      EXDEV: 75,\n      ENODEV: 43,\n      ENOTDIR: 54,\n      EISDIR: 31,\n      EINVAL: 28,\n      ENFILE: 41,\n      EMFILE: 33,\n      ENOTTY: 59,\n      ETXTBSY: 74,\n      EFBIG: 22,\n      ENOSPC: 51,\n      ESPIPE: 70,\n      EROFS: 69,\n      EMLINK: 34,\n      EPIPE: 64,\n      EDOM: 18,\n      ERANGE: 68,\n      ENOMSG: 49,\n      EIDRM: 24,\n      ECHRNG: 106,\n      EL2NSYNC: 156,\n      EL3HLT: 107,\n      EL3RST: 108,\n      ELNRNG: 109,\n      EUNATCH: 110,\n      ENOCSI: 111,\n      EL2HLT: 112,\n      EDEADLK: 16,\n      ENOLCK: 46,\n      EBADE: 113,\n      EBADR: 114,\n      EXFULL: 115,\n      ENOANO: 104,\n      EBADRQC: 103,\n      EBADSLT: 102,\n      EDEADLOCK: 16,\n      EBFONT: 101,\n      ENOSTR: 100,\n      ENODATA: 116,\n      ETIME: 117,\n      ENOSR: 118,\n      ENONET: 119,\n      ENOPKG: 120,\n      EREMOTE: 121,\n      ENOLINK: 47,\n      EADV: 122,\n      ESRMNT: 123,\n      ECOMM: 124,\n      EPROTO: 65,\n      EMULTIHOP: 36,\n      EDOTDOT: 125,\n      EBADMSG: 9,\n      ENOTUNIQ: 126,\n      EBADFD: 127,\n      EREMCHG: 128,\n      ELIBACC: 129,\n      ELIBBAD: 130,\n      ELIBSCN: 131,\n      ELIBMAX: 132,\n      ELIBEXEC: 133,\n      ENOSYS: 52,\n      ENOTEMPTY: 55,\n      ENAMETOOLONG: 37,\n      ELOOP: 32,\n      EOPNOTSUPP: 138,\n      EPFNOSUPPORT: 139,\n      ECONNRESET: 15,\n      ENOBUFS: 42,\n      EAFNOSUPPORT: 5,\n      EPROTOTYPE: 67,\n      ENOTSOCK: 57,\n      ENOPROTOOPT: 50,\n      ESHUTDOWN: 140,\n      ECONNREFUSED: 14,\n      EADDRINUSE: 3,\n      ECONNABORTED: 13,\n      ENETUNREACH: 40,\n      ENETDOWN: 38,\n      ETIMEDOUT: 73,\n      EHOSTDOWN: 142,\n      EHOSTUNREACH: 23,\n      EINPROGRESS: 26,\n      EALREADY: 7,\n      EDESTADDRREQ: 17,\n      EMSGSIZE: 35,\n      EPROTONOSUPPORT: 66,\n      ESOCKTNOSUPPORT: 137,\n      EADDRNOTAVAIL: 4,\n      ENETRESET: 39,\n      EISCONN: 30,\n      ENOTCONN: 53,\n      ETOOMANYREFS: 141,\n      EUSERS: 136,\n      EDQUOT: 19,\n      ESTALE: 72,\n      ENOTSUP: 138,\n      ENOMEDIUM: 148,\n      EILSEQ: 25,\n      EOVERFLOW: 61,\n      ECANCELED: 11,\n      ENOTRECOVERABLE: 56,\n      EOWNERDEAD: 62,\n      ESTRPIPE: 135,\n    };\n    var FS = {\n      root: null,\n      mounts: [],\n      devices: {},\n      streams: [],\n      nextInode: 1,\n      nameTable: null,\n      currentPath: '/',\n      initialized: false,\n      ignorePermissions: true,\n      ErrnoError: class extends Error {\n        // We set the `name` property to be able to identify `FS.ErrnoError`\n        // - the `name` is a standard ECMA-262 property of error objects. Kind of good to have it anyway.\n        // - when using PROXYFS, an error can come from an underlying FS\n        // as different FS objects have their own FS.ErrnoError each,\n        // the test `err instanceof FS.ErrnoError` won't detect an error coming from another filesystem, causing bugs.\n        // we'll use the reliable test `err.name == \"ErrnoError\"` instead\n        constructor(errno) {\n          super(runtimeInitialized ? strError(errno) : '');\n          // TODO(sbc): Use the inline member declaration syntax once we\n          // support it in acorn and closure.\n          this.name = 'ErrnoError';\n          this.errno = errno;\n          for (var key in ERRNO_CODES) {\n            if (ERRNO_CODES[key] === errno) {\n              this.code = key;\n              break;\n            }\n          }\n        }\n      },\n      genericErrors: {},\n      filesystems: null,\n      syncFSRequests: 0,\n      readFiles: {},\n      FSStream: class {\n        constructor() {\n          // TODO(https://github.com/emscripten-core/emscripten/issues/21414):\n          // Use inline field declarations.\n          this.shared = {};\n        }\n        get object() {\n          return this.node;\n        }\n        set object(val) {\n          this.node = val;\n        }\n        get isRead() {\n          return (this.flags & 2097155) !== 1;\n        }\n        get isWrite() {\n          return (this.flags & 2097155) !== 0;\n        }\n        get isAppend() {\n          return this.flags & 1024;\n        }\n        get flags() {\n          return this.shared.flags;\n        }\n        set flags(val) {\n          this.shared.flags = val;\n        }\n        get position() {\n          return this.shared.position;\n        }\n        set position(val) {\n          this.shared.position = val;\n        }\n      },\n      FSNode: class {\n        constructor(parent, name, mode, rdev) {\n          if (!parent) {\n            parent = this; // root node sets parent to itself\n          }\n          this.parent = parent;\n          this.mount = parent.mount;\n          this.mounted = null;\n          this.id = FS.nextInode++;\n          this.name = name;\n          this.mode = mode;\n          this.node_ops = {};\n          this.stream_ops = {};\n          this.rdev = rdev;\n          this.readMode = 292 | 73;\n          this.writeMode = 146;\n        }\n        get read() {\n          return (this.mode & this.readMode) === this.readMode;\n        }\n        set read(val) {\n          val ? (this.mode |= this.readMode) : (this.mode &= ~this.readMode);\n        }\n        get write() {\n          return (this.mode & this.writeMode) === this.writeMode;\n        }\n        set write(val) {\n          val ? (this.mode |= this.writeMode) : (this.mode &= ~this.writeMode);\n        }\n        get isFolder() {\n          return FS.isDir(this.mode);\n        }\n        get isDevice() {\n          return FS.isChrdev(this.mode);\n        }\n      },\n      lookupPath(path, opts = {}) {\n        path = PATH_FS.resolve(path);\n\n        if (!path) return { path: '', node: null };\n\n        var defaults = {\n          follow_mount: true,\n          recurse_count: 0,\n        };\n        opts = Object.assign(defaults, opts);\n\n        if (opts.recurse_count > 8) {\n          // max recursive lookup of 8\n          throw new FS.ErrnoError(32);\n        }\n\n        // split the absolute path\n        var parts = path.split('/').filter((p) => !!p);\n\n        // start at the root\n        var current = FS.root;\n        var current_path = '/';\n\n        for (var i = 0; i < parts.length; i++) {\n          var islast = i === parts.length - 1;\n          if (islast && opts.parent) {\n            // stop resolving\n            break;\n          }\n\n          current = FS.lookupNode(current, parts[i]);\n          current_path = PATH.join2(current_path, parts[i]);\n\n          // jump to the mount's root node if this is a mountpoint\n          if (FS.isMountpoint(current)) {\n            if (!islast || (islast && opts.follow_mount)) {\n              current = current.mounted.root;\n            }\n          }\n\n          // by default, lookupPath will not follow a symlink if it is the final path component.\n          // setting opts.follow = true will override this behavior.\n          if (!islast || opts.follow) {\n            var count = 0;\n            while (FS.isLink(current.mode)) {\n              var link = FS.readlink(current_path);\n              current_path = PATH_FS.resolve(PATH.dirname(current_path), link);\n\n              var lookup = FS.lookupPath(current_path, { recurse_count: opts.recurse_count + 1 });\n              current = lookup.node;\n\n              if (count++ > 40) {\n                // limit max consecutive symlinks to 40 (SYMLOOP_MAX).\n                throw new FS.ErrnoError(32);\n              }\n            }\n          }\n        }\n\n        return { path: current_path, node: current };\n      },\n      getPath(node) {\n        var path;\n        while (true) {\n          if (FS.isRoot(node)) {\n            var mount = node.mount.mountpoint;\n            if (!path) return mount;\n            return mount[mount.length - 1] !== '/' ? `${mount}/${path}` : mount + path;\n          }\n          path = path ? `${node.name}/${path}` : node.name;\n          node = node.parent;\n        }\n      },\n      hashName(parentid, name) {\n        var hash = 0;\n\n        for (var i = 0; i < name.length; i++) {\n          hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;\n        }\n        return ((parentid + hash) >>> 0) % FS.nameTable.length;\n      },\n      hashAddNode(node) {\n        var hash = FS.hashName(node.parent.id, node.name);\n        node.name_next = FS.nameTable[hash];\n        FS.nameTable[hash] = node;\n      },\n      hashRemoveNode(node) {\n        var hash = FS.hashName(node.parent.id, node.name);\n        if (FS.nameTable[hash] === node) {\n          FS.nameTable[hash] = node.name_next;\n        } else {\n          var current = FS.nameTable[hash];\n          while (current) {\n            if (current.name_next === node) {\n              current.name_next = node.name_next;\n              break;\n            }\n            current = current.name_next;\n          }\n        }\n      },\n      lookupNode(parent, name) {\n        var errCode = FS.mayLookup(parent);\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        var hash = FS.hashName(parent.id, name);\n        for (var node = FS.nameTable[hash]; node; node = node.name_next) {\n          var nodeName = node.name;\n          if (node.parent.id === parent.id && nodeName === name) {\n            return node;\n          }\n        }\n        // if we failed to find it in the cache, call into the VFS\n        return FS.lookup(parent, name);\n      },\n      createNode(parent, name, mode, rdev) {\n        assert(typeof parent == 'object');\n        var node = new FS.FSNode(parent, name, mode, rdev);\n\n        FS.hashAddNode(node);\n\n        return node;\n      },\n      destroyNode(node) {\n        FS.hashRemoveNode(node);\n      },\n      isRoot(node) {\n        return node === node.parent;\n      },\n      isMountpoint(node) {\n        return !!node.mounted;\n      },\n      isFile(mode) {\n        return (mode & 61440) === 32768;\n      },\n      isDir(mode) {\n        return (mode & 61440) === 16384;\n      },\n      isLink(mode) {\n        return (mode & 61440) === 40960;\n      },\n      isChrdev(mode) {\n        return (mode & 61440) === 8192;\n      },\n      isBlkdev(mode) {\n        return (mode & 61440) === 24576;\n      },\n      isFIFO(mode) {\n        return (mode & 61440) === 4096;\n      },\n      isSocket(mode) {\n        return (mode & 49152) === 49152;\n      },\n      flagsToPermissionString(flag) {\n        var perms = ['r', 'w', 'rw'][flag & 3];\n        if (flag & 512) {\n          perms += 'w';\n        }\n        return perms;\n      },\n      nodePermissions(node, perms) {\n        if (FS.ignorePermissions) {\n          return 0;\n        }\n        // return 0 if any user, group or owner bits are set.\n        if (perms.includes('r') && !(node.mode & 292)) {\n          return 2;\n        } else if (perms.includes('w') && !(node.mode & 146)) {\n          return 2;\n        } else if (perms.includes('x') && !(node.mode & 73)) {\n          return 2;\n        }\n        return 0;\n      },\n      mayLookup(dir) {\n        if (!FS.isDir(dir.mode)) return 54;\n        var errCode = FS.nodePermissions(dir, 'x');\n        if (errCode) return errCode;\n        if (!dir.node_ops.lookup) return 2;\n        return 0;\n      },\n      mayCreate(dir, name) {\n        try {\n          var node = FS.lookupNode(dir, name);\n          return 20;\n        } catch (e) {}\n        return FS.nodePermissions(dir, 'wx');\n      },\n      mayDelete(dir, name, isdir) {\n        var node;\n        try {\n          node = FS.lookupNode(dir, name);\n        } catch (e) {\n          return e.errno;\n        }\n        var errCode = FS.nodePermissions(dir, 'wx');\n        if (errCode) {\n          return errCode;\n        }\n        if (isdir) {\n          if (!FS.isDir(node.mode)) {\n            return 54;\n          }\n          if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {\n            return 10;\n          }\n        } else {\n          if (FS.isDir(node.mode)) {\n            return 31;\n          }\n        }\n        return 0;\n      },\n      mayOpen(node, flags) {\n        if (!node) {\n          return 44;\n        }\n        if (FS.isLink(node.mode)) {\n          return 32;\n        } else if (FS.isDir(node.mode)) {\n          if (\n            FS.flagsToPermissionString(flags) !== 'r' || // opening for write\n            flags & 512\n          ) {\n            // TODO: check for O_SEARCH? (== search for dir only)\n            return 31;\n          }\n        }\n        return FS.nodePermissions(node, FS.flagsToPermissionString(flags));\n      },\n      MAX_OPEN_FDS: 4096,\n      nextfd() {\n        for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) {\n          if (!FS.streams[fd]) {\n            return fd;\n          }\n        }\n        throw new FS.ErrnoError(33);\n      },\n      getStreamChecked(fd) {\n        var stream = FS.getStream(fd);\n        if (!stream) {\n          throw new FS.ErrnoError(8);\n        }\n        return stream;\n      },\n      getStream: (fd) => FS.streams[fd],\n      createStream(stream, fd = -1) {\n        assert(fd >= -1);\n\n        // clone it, so we can return an instance of FSStream\n        stream = Object.assign(new FS.FSStream(), stream);\n        if (fd == -1) {\n          fd = FS.nextfd();\n        }\n        stream.fd = fd;\n        FS.streams[fd] = stream;\n        return stream;\n      },\n      closeStream(fd) {\n        FS.streams[fd] = null;\n      },\n      dupStream(origStream, fd = -1) {\n        var stream = FS.createStream(origStream, fd);\n        stream.stream_ops?.dup?.(stream);\n        return stream;\n      },\n      chrdev_stream_ops: {\n        open(stream) {\n          var device = FS.getDevice(stream.node.rdev);\n          // override node's stream ops with the device's\n          stream.stream_ops = device.stream_ops;\n          // forward the open call\n          stream.stream_ops.open?.(stream);\n        },\n        llseek() {\n          throw new FS.ErrnoError(70);\n        },\n      },\n      major: (dev) => dev >> 8,\n      minor: (dev) => dev & 0xff,\n      makedev: (ma, mi) => (ma << 8) | mi,\n      registerDevice(dev, ops) {\n        FS.devices[dev] = { stream_ops: ops };\n      },\n      getDevice: (dev) => FS.devices[dev],\n      getMounts(mount) {\n        var mounts = [];\n        var check = [mount];\n\n        while (check.length) {\n          var m = check.pop();\n\n          mounts.push(m);\n\n          check.push(...m.mounts);\n        }\n\n        return mounts;\n      },\n      syncfs(populate, callback) {\n        if (typeof populate == 'function') {\n          callback = populate;\n          populate = false;\n        }\n\n        FS.syncFSRequests++;\n\n        if (FS.syncFSRequests > 1) {\n          err(\n            `warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`,\n          );\n        }\n\n        var mounts = FS.getMounts(FS.root.mount);\n        var completed = 0;\n\n        function doCallback(errCode) {\n          assert(FS.syncFSRequests > 0);\n          FS.syncFSRequests--;\n          return callback(errCode);\n        }\n\n        function done(errCode) {\n          if (errCode) {\n            if (!done.errored) {\n              done.errored = true;\n              return doCallback(errCode);\n            }\n            return;\n          }\n          if (++completed >= mounts.length) {\n            doCallback(null);\n          }\n        }\n\n        // sync all mounts\n        mounts.forEach((mount) => {\n          if (!mount.type.syncfs) {\n            return done(null);\n          }\n          mount.type.syncfs(mount, populate, done);\n        });\n      },\n      mount(type, opts, mountpoint) {\n        if (typeof type == 'string') {\n          // The filesystem was not included, and instead we have an error\n          // message stored in the variable.\n          throw type;\n        }\n        var root = mountpoint === '/';\n        var pseudo = !mountpoint;\n        var node;\n\n        if (root && FS.root) {\n          throw new FS.ErrnoError(10);\n        } else if (!root && !pseudo) {\n          var lookup = FS.lookupPath(mountpoint, { follow_mount: false });\n\n          mountpoint = lookup.path; // use the absolute path\n          node = lookup.node;\n\n          if (FS.isMountpoint(node)) {\n            throw new FS.ErrnoError(10);\n          }\n\n          if (!FS.isDir(node.mode)) {\n            throw new FS.ErrnoError(54);\n          }\n        }\n\n        var mount = {\n          type,\n          opts,\n          mountpoint,\n          mounts: [],\n        };\n\n        // create a root node for the fs\n        var mountRoot = type.mount(mount);\n        mountRoot.mount = mount;\n        mount.root = mountRoot;\n\n        if (root) {\n          FS.root = mountRoot;\n        } else if (node) {\n          // set as a mountpoint\n          node.mounted = mount;\n\n          // add the new mount to the current mount's children\n          if (node.mount) {\n            node.mount.mounts.push(mount);\n          }\n        }\n\n        return mountRoot;\n      },\n      unmount(mountpoint) {\n        var lookup = FS.lookupPath(mountpoint, { follow_mount: false });\n\n        if (!FS.isMountpoint(lookup.node)) {\n          throw new FS.ErrnoError(28);\n        }\n\n        // destroy the nodes for this mount, and all its child mounts\n        var node = lookup.node;\n        var mount = node.mounted;\n        var mounts = FS.getMounts(mount);\n\n        Object.keys(FS.nameTable).forEach((hash) => {\n          var current = FS.nameTable[hash];\n\n          while (current) {\n            var next = current.name_next;\n\n            if (mounts.includes(current.mount)) {\n              FS.destroyNode(current);\n            }\n\n            current = next;\n          }\n        });\n\n        // no longer a mountpoint\n        node.mounted = null;\n\n        // remove this mount from the child mounts\n        var idx = node.mount.mounts.indexOf(mount);\n        assert(idx !== -1);\n        node.mount.mounts.splice(idx, 1);\n      },\n      lookup(parent, name) {\n        return parent.node_ops.lookup(parent, name);\n      },\n      mknod(path, mode, dev) {\n        var lookup = FS.lookupPath(path, { parent: true });\n        var parent = lookup.node;\n        var name = PATH.basename(path);\n        if (!name || name === '.' || name === '..') {\n          throw new FS.ErrnoError(28);\n        }\n        var errCode = FS.mayCreate(parent, name);\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        if (!parent.node_ops.mknod) {\n          throw new FS.ErrnoError(63);\n        }\n        return parent.node_ops.mknod(parent, name, mode, dev);\n      },\n      create(path, mode) {\n        mode = mode !== undefined ? mode : 438 /* 0666 */;\n        mode &= 4095;\n        mode |= 32768;\n        return FS.mknod(path, mode, 0);\n      },\n      mkdir(path, mode) {\n        mode = mode !== undefined ? mode : 511 /* 0777 */;\n        mode &= 511 | 512;\n        mode |= 16384;\n        return FS.mknod(path, mode, 0);\n      },\n      mkdirTree(path, mode) {\n        var dirs = path.split('/');\n        var d = '';\n        for (var i = 0; i < dirs.length; ++i) {\n          if (!dirs[i]) continue;\n          d += '/' + dirs[i];\n          try {\n            FS.mkdir(d, mode);\n          } catch (e) {\n            if (e.errno != 20) throw e;\n          }\n        }\n      },\n      mkdev(path, mode, dev) {\n        if (typeof dev == 'undefined') {\n          dev = mode;\n          mode = 438 /* 0666 */;\n        }\n        mode |= 8192;\n        return FS.mknod(path, mode, dev);\n      },\n      symlink(oldpath, newpath) {\n        if (!PATH_FS.resolve(oldpath)) {\n          throw new FS.ErrnoError(44);\n        }\n        var lookup = FS.lookupPath(newpath, { parent: true });\n        var parent = lookup.node;\n        if (!parent) {\n          throw new FS.ErrnoError(44);\n        }\n        var newname = PATH.basename(newpath);\n        var errCode = FS.mayCreate(parent, newname);\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        if (!parent.node_ops.symlink) {\n          throw new FS.ErrnoError(63);\n        }\n        return parent.node_ops.symlink(parent, newname, oldpath);\n      },\n      rename(old_path, new_path) {\n        var old_dirname = PATH.dirname(old_path);\n        var new_dirname = PATH.dirname(new_path);\n        var old_name = PATH.basename(old_path);\n        var new_name = PATH.basename(new_path);\n        // parents must exist\n        var lookup, old_dir, new_dir;\n\n        // let the errors from non existent directories percolate up\n        lookup = FS.lookupPath(old_path, { parent: true });\n        old_dir = lookup.node;\n        lookup = FS.lookupPath(new_path, { parent: true });\n        new_dir = lookup.node;\n\n        if (!old_dir || !new_dir) throw new FS.ErrnoError(44);\n        // need to be part of the same mount\n        if (old_dir.mount !== new_dir.mount) {\n          throw new FS.ErrnoError(75);\n        }\n        // source must exist\n        var old_node = FS.lookupNode(old_dir, old_name);\n        // old path should not be an ancestor of the new path\n        var relative = PATH_FS.relative(old_path, new_dirname);\n        if (relative.charAt(0) !== '.') {\n          throw new FS.ErrnoError(28);\n        }\n        // new path should not be an ancestor of the old path\n        relative = PATH_FS.relative(new_path, old_dirname);\n        if (relative.charAt(0) !== '.') {\n          throw new FS.ErrnoError(55);\n        }\n        // see if the new path already exists\n        var new_node;\n        try {\n          new_node = FS.lookupNode(new_dir, new_name);\n        } catch (e) {\n          // not fatal\n        }\n        // early out if nothing needs to change\n        if (old_node === new_node) {\n          return;\n        }\n        // we'll need to delete the old entry\n        var isdir = FS.isDir(old_node.mode);\n        var errCode = FS.mayDelete(old_dir, old_name, isdir);\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        // need delete permissions if we'll be overwriting.\n        // need create permissions if new doesn't already exist.\n        errCode = new_node\n          ? FS.mayDelete(new_dir, new_name, isdir)\n          : FS.mayCreate(new_dir, new_name);\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        if (!old_dir.node_ops.rename) {\n          throw new FS.ErrnoError(63);\n        }\n        if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) {\n          throw new FS.ErrnoError(10);\n        }\n        // if we are going to change the parent, check write permissions\n        if (new_dir !== old_dir) {\n          errCode = FS.nodePermissions(old_dir, 'w');\n          if (errCode) {\n            throw new FS.ErrnoError(errCode);\n          }\n        }\n        // remove the node from the lookup hash\n        FS.hashRemoveNode(old_node);\n        // do the underlying fs rename\n        try {\n          old_dir.node_ops.rename(old_node, new_dir, new_name);\n          // update old node (we do this here to avoid each backend\n          // needing to)\n          old_node.parent = new_dir;\n        } catch (e) {\n          throw e;\n        } finally {\n          // add the node back to the hash (in case node_ops.rename\n          // changed its name)\n          FS.hashAddNode(old_node);\n        }\n      },\n      rmdir(path) {\n        var lookup = FS.lookupPath(path, { parent: true });\n        var parent = lookup.node;\n        var name = PATH.basename(path);\n        var node = FS.lookupNode(parent, name);\n        var errCode = FS.mayDelete(parent, name, true);\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        if (!parent.node_ops.rmdir) {\n          throw new FS.ErrnoError(63);\n        }\n        if (FS.isMountpoint(node)) {\n          throw new FS.ErrnoError(10);\n        }\n        parent.node_ops.rmdir(parent, name);\n        FS.destroyNode(node);\n      },\n      readdir(path) {\n        var lookup = FS.lookupPath(path, { follow: true });\n        var node = lookup.node;\n        if (!node.node_ops.readdir) {\n          throw new FS.ErrnoError(54);\n        }\n        return node.node_ops.readdir(node);\n      },\n      unlink(path) {\n        var lookup = FS.lookupPath(path, { parent: true });\n        var parent = lookup.node;\n        if (!parent) {\n          throw new FS.ErrnoError(44);\n        }\n        var name = PATH.basename(path);\n        var node = FS.lookupNode(parent, name);\n        var errCode = FS.mayDelete(parent, name, false);\n        if (errCode) {\n          // According to POSIX, we should map EISDIR to EPERM, but\n          // we instead do what Linux does (and we must, as we use\n          // the musl linux libc).\n          throw new FS.ErrnoError(errCode);\n        }\n        if (!parent.node_ops.unlink) {\n          throw new FS.ErrnoError(63);\n        }\n        if (FS.isMountpoint(node)) {\n          throw new FS.ErrnoError(10);\n        }\n        parent.node_ops.unlink(parent, name);\n        FS.destroyNode(node);\n      },\n      readlink(path) {\n        var lookup = FS.lookupPath(path);\n        var link = lookup.node;\n        if (!link) {\n          throw new FS.ErrnoError(44);\n        }\n        if (!link.node_ops.readlink) {\n          throw new FS.ErrnoError(28);\n        }\n        return PATH_FS.resolve(FS.getPath(link.parent), link.node_ops.readlink(link));\n      },\n      stat(path, dontFollow) {\n        var lookup = FS.lookupPath(path, { follow: !dontFollow });\n        var node = lookup.node;\n        if (!node) {\n          throw new FS.ErrnoError(44);\n        }\n        if (!node.node_ops.getattr) {\n          throw new FS.ErrnoError(63);\n        }\n        return node.node_ops.getattr(node);\n      },\n      lstat(path) {\n        return FS.stat(path, true);\n      },\n      chmod(path, mode, dontFollow) {\n        var node;\n        if (typeof path == 'string') {\n          var lookup = FS.lookupPath(path, { follow: !dontFollow });\n          node = lookup.node;\n        } else {\n          node = path;\n        }\n        if (!node.node_ops.setattr) {\n          throw new FS.ErrnoError(63);\n        }\n        node.node_ops.setattr(node, {\n          mode: (mode & 4095) | (node.mode & ~4095),\n          timestamp: Date.now(),\n        });\n      },\n      lchmod(path, mode) {\n        FS.chmod(path, mode, true);\n      },\n      fchmod(fd, mode) {\n        var stream = FS.getStreamChecked(fd);\n        FS.chmod(stream.node, mode);\n      },\n      chown(path, uid, gid, dontFollow) {\n        var node;\n        if (typeof path == 'string') {\n          var lookup = FS.lookupPath(path, { follow: !dontFollow });\n          node = lookup.node;\n        } else {\n          node = path;\n        }\n        if (!node.node_ops.setattr) {\n          throw new FS.ErrnoError(63);\n        }\n        node.node_ops.setattr(node, {\n          timestamp: Date.now(),\n          // we ignore the uid / gid for now\n        });\n      },\n      lchown(path, uid, gid) {\n        FS.chown(path, uid, gid, true);\n      },\n      fchown(fd, uid, gid) {\n        var stream = FS.getStreamChecked(fd);\n        FS.chown(stream.node, uid, gid);\n      },\n      truncate(path, len) {\n        if (len < 0) {\n          throw new FS.ErrnoError(28);\n        }\n        var node;\n        if (typeof path == 'string') {\n          var lookup = FS.lookupPath(path, { follow: true });\n          node = lookup.node;\n        } else {\n          node = path;\n        }\n        if (!node.node_ops.setattr) {\n          throw new FS.ErrnoError(63);\n        }\n        if (FS.isDir(node.mode)) {\n          throw new FS.ErrnoError(31);\n        }\n        if (!FS.isFile(node.mode)) {\n          throw new FS.ErrnoError(28);\n        }\n        var errCode = FS.nodePermissions(node, 'w');\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        node.node_ops.setattr(node, {\n          size: len,\n          timestamp: Date.now(),\n        });\n      },\n      ftruncate(fd, len) {\n        var stream = FS.getStreamChecked(fd);\n        if ((stream.flags & 2097155) === 0) {\n          throw new FS.ErrnoError(28);\n        }\n        FS.truncate(stream.node, len);\n      },\n      utime(path, atime, mtime) {\n        var lookup = FS.lookupPath(path, { follow: true });\n        var node = lookup.node;\n        node.node_ops.setattr(node, {\n          timestamp: Math.max(atime, mtime),\n        });\n      },\n      open(path, flags, mode) {\n        if (path === '') {\n          throw new FS.ErrnoError(44);\n        }\n        flags = typeof flags == 'string' ? FS_modeStringToFlags(flags) : flags;\n        if (flags & 64) {\n          mode = typeof mode == 'undefined' ? 438 /* 0666 */ : mode;\n          mode = (mode & 4095) | 32768;\n        } else {\n          mode = 0;\n        }\n        var node;\n        if (typeof path == 'object') {\n          node = path;\n        } else {\n          path = PATH.normalize(path);\n          try {\n            var lookup = FS.lookupPath(path, {\n              follow: !(flags & 131072),\n            });\n            node = lookup.node;\n          } catch (e) {\n            // ignore\n          }\n        }\n        // perhaps we need to create the node\n        var created = false;\n        if (flags & 64) {\n          if (node) {\n            // if O_CREAT and O_EXCL are set, error out if the node already exists\n            if (flags & 128) {\n              throw new FS.ErrnoError(20);\n            }\n          } else {\n            // node doesn't exist, try to create it\n            node = FS.mknod(path, mode, 0);\n            created = true;\n          }\n        }\n        if (!node) {\n          throw new FS.ErrnoError(44);\n        }\n        // can't truncate a device\n        if (FS.isChrdev(node.mode)) {\n          flags &= ~512;\n        }\n        // if asked only for a directory, then this must be one\n        if (flags & 65536 && !FS.isDir(node.mode)) {\n          throw new FS.ErrnoError(54);\n        }\n        // check permissions, if this is not a file we just created now (it is ok to\n        // create and write to a file with read-only permissions; it is read-only\n        // for later use)\n        if (!created) {\n          var errCode = FS.mayOpen(node, flags);\n          if (errCode) {\n            throw new FS.ErrnoError(errCode);\n          }\n        }\n        // do truncation if necessary\n        if (flags & 512 && !created) {\n          FS.truncate(node, 0);\n        }\n        // we've already handled these, don't pass down to the underlying vfs\n        flags &= ~(128 | 512 | 131072);\n\n        // register the stream with the filesystem\n        var stream = FS.createStream({\n          node,\n          path: FS.getPath(node), // we want the absolute path to the node\n          flags,\n          seekable: true,\n          position: 0,\n          stream_ops: node.stream_ops,\n          // used by the file family libc calls (fopen, fwrite, ferror, etc.)\n          ungotten: [],\n          error: false,\n        });\n        // call the new stream's open function\n        if (stream.stream_ops.open) {\n          stream.stream_ops.open(stream);\n        }\n        if (Module['logReadFiles'] && !(flags & 1)) {\n          if (!(path in FS.readFiles)) {\n            FS.readFiles[path] = 1;\n          }\n        }\n        return stream;\n      },\n      close(stream) {\n        if (FS.isClosed(stream)) {\n          throw new FS.ErrnoError(8);\n        }\n        if (stream.getdents) stream.getdents = null; // free readdir state\n        try {\n          if (stream.stream_ops.close) {\n            stream.stream_ops.close(stream);\n          }\n        } catch (e) {\n          throw e;\n        } finally {\n          FS.closeStream(stream.fd);\n        }\n        stream.fd = null;\n      },\n      isClosed(stream) {\n        return stream.fd === null;\n      },\n      llseek(stream, offset, whence) {\n        if (FS.isClosed(stream)) {\n          throw new FS.ErrnoError(8);\n        }\n        if (!stream.seekable || !stream.stream_ops.llseek) {\n          throw new FS.ErrnoError(70);\n        }\n        if (whence != 0 && whence != 1 && whence != 2) {\n          throw new FS.ErrnoError(28);\n        }\n        stream.position = stream.stream_ops.llseek(stream, offset, whence);\n        stream.ungotten = [];\n        return stream.position;\n      },\n      read(stream, buffer, offset, length, position) {\n        assert(offset >= 0);\n        if (length < 0 || position < 0) {\n          throw new FS.ErrnoError(28);\n        }\n        if (FS.isClosed(stream)) {\n          throw new FS.ErrnoError(8);\n        }\n        if ((stream.flags & 2097155) === 1) {\n          throw new FS.ErrnoError(8);\n        }\n        if (FS.isDir(stream.node.mode)) {\n          throw new FS.ErrnoError(31);\n        }\n        if (!stream.stream_ops.read) {\n          throw new FS.ErrnoError(28);\n        }\n        var seeking = typeof position != 'undefined';\n        if (!seeking) {\n          position = stream.position;\n        } else if (!stream.seekable) {\n          throw new FS.ErrnoError(70);\n        }\n        var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position);\n        if (!seeking) stream.position += bytesRead;\n        return bytesRead;\n      },\n      write(stream, buffer, offset, length, position, canOwn) {\n        assert(offset >= 0);\n        if (length < 0 || position < 0) {\n          throw new FS.ErrnoError(28);\n        }\n        if (FS.isClosed(stream)) {\n          throw new FS.ErrnoError(8);\n        }\n        if ((stream.flags & 2097155) === 0) {\n          throw new FS.ErrnoError(8);\n        }\n        if (FS.isDir(stream.node.mode)) {\n          throw new FS.ErrnoError(31);\n        }\n        if (!stream.stream_ops.write) {\n          throw new FS.ErrnoError(28);\n        }\n        if (stream.seekable && stream.flags & 1024) {\n          // seek to the end before writing in append mode\n          FS.llseek(stream, 0, 2);\n        }\n        var seeking = typeof position != 'undefined';\n        if (!seeking) {\n          position = stream.position;\n        } else if (!stream.seekable) {\n          throw new FS.ErrnoError(70);\n        }\n        var bytesWritten = stream.stream_ops.write(\n          stream,\n          buffer,\n          offset,\n          length,\n          position,\n          canOwn,\n        );\n        if (!seeking) stream.position += bytesWritten;\n        return bytesWritten;\n      },\n      allocate(stream, offset, length) {\n        if (FS.isClosed(stream)) {\n          throw new FS.ErrnoError(8);\n        }\n        if (offset < 0 || length <= 0) {\n          throw new FS.ErrnoError(28);\n        }\n        if ((stream.flags & 2097155) === 0) {\n          throw new FS.ErrnoError(8);\n        }\n        if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) {\n          throw new FS.ErrnoError(43);\n        }\n        if (!stream.stream_ops.allocate) {\n          throw new FS.ErrnoError(138);\n        }\n        stream.stream_ops.allocate(stream, offset, length);\n      },\n      mmap(stream, length, position, prot, flags) {\n        // User requests writing to file (prot & PROT_WRITE != 0).\n        // Checking if we have permissions to write to the file unless\n        // MAP_PRIVATE flag is set. According to POSIX spec it is possible\n        // to write to file opened in read-only mode with MAP_PRIVATE flag,\n        // as all modifications will be visible only in the memory of\n        // the current process.\n        if ((prot & 2) !== 0 && (flags & 2) === 0 && (stream.flags & 2097155) !== 2) {\n          throw new FS.ErrnoError(2);\n        }\n        if ((stream.flags & 2097155) === 1) {\n          throw new FS.ErrnoError(2);\n        }\n        if (!stream.stream_ops.mmap) {\n          throw new FS.ErrnoError(43);\n        }\n        if (!length) {\n          throw new FS.ErrnoError(28);\n        }\n        return stream.stream_ops.mmap(stream, length, position, prot, flags);\n      },\n      msync(stream, buffer, offset, length, mmapFlags) {\n        assert(offset >= 0);\n        if (!stream.stream_ops.msync) {\n          return 0;\n        }\n        return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags);\n      },\n      ioctl(stream, cmd, arg) {\n        if (!stream.stream_ops.ioctl) {\n          throw new FS.ErrnoError(59);\n        }\n        return stream.stream_ops.ioctl(stream, cmd, arg);\n      },\n      readFile(path, opts = {}) {\n        opts.flags = opts.flags || 0;\n        opts.encoding = opts.encoding || 'binary';\n        if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {\n          throw new Error(`Invalid encoding type \"${opts.encoding}\"`);\n        }\n        var ret;\n        var stream = FS.open(path, opts.flags);\n        var stat = FS.stat(path);\n        var length = stat.size;\n        var buf = new Uint8Array(length);\n        FS.read(stream, buf, 0, length, 0);\n        if (opts.encoding === 'utf8') {\n          ret = UTF8ArrayToString(buf);\n        } else if (opts.encoding === 'binary') {\n          ret = buf;\n        }\n        FS.close(stream);\n        return ret;\n      },\n      writeFile(path, data, opts = {}) {\n        opts.flags = opts.flags || 577;\n        var stream = FS.open(path, opts.flags, opts.mode);\n        if (typeof data == 'string') {\n          var buf = new Uint8Array(lengthBytesUTF8(data) + 1);\n          var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length);\n          FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn);\n        } else if (ArrayBuffer.isView(data)) {\n          FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn);\n        } else {\n          throw new Error('Unsupported data type');\n        }\n        FS.close(stream);\n      },\n      cwd: () => FS.currentPath,\n      chdir(path) {\n        var lookup = FS.lookupPath(path, { follow: true });\n        if (lookup.node === null) {\n          throw new FS.ErrnoError(44);\n        }\n        if (!FS.isDir(lookup.node.mode)) {\n          throw new FS.ErrnoError(54);\n        }\n        var errCode = FS.nodePermissions(lookup.node, 'x');\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        FS.currentPath = lookup.path;\n      },\n      createDefaultDirectories() {\n        FS.mkdir('/tmp');\n        FS.mkdir('/home');\n        FS.mkdir('/home/web_user');\n      },\n      createDefaultDevices() {\n        // create /dev\n        FS.mkdir('/dev');\n        // setup /dev/null\n        FS.registerDevice(FS.makedev(1, 3), {\n          read: () => 0,\n          write: (stream, buffer, offset, length, pos) => length,\n        });\n        FS.mkdev('/dev/null', FS.makedev(1, 3));\n        // setup /dev/tty and /dev/tty1\n        // stderr needs to print output using err() rather than out()\n        // so we register a second tty just for it.\n        TTY.register(FS.makedev(5, 0), TTY.default_tty_ops);\n        TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);\n        FS.mkdev('/dev/tty', FS.makedev(5, 0));\n        FS.mkdev('/dev/tty1', FS.makedev(6, 0));\n        // setup /dev/[u]random\n        // use a buffer to avoid overhead of individual crypto calls per byte\n        var randomBuffer = new Uint8Array(1024),\n          randomLeft = 0;\n        var randomByte = () => {\n          if (randomLeft === 0) {\n            randomLeft = randomFill(randomBuffer).byteLength;\n          }\n          return randomBuffer[--randomLeft];\n        };\n        FS.createDevice('/dev', 'random', randomByte);\n        FS.createDevice('/dev', 'urandom', randomByte);\n        // we're not going to emulate the actual shm device,\n        // just create the tmp dirs that reside in it commonly\n        FS.mkdir('/dev/shm');\n        FS.mkdir('/dev/shm/tmp');\n      },\n      createSpecialDirectories() {\n        // create /proc/self/fd which allows /proc/self/fd/6 => readlink gives the\n        // name of the stream for fd 6 (see test_unistd_ttyname)\n        FS.mkdir('/proc');\n        var proc_self = FS.mkdir('/proc/self');\n        FS.mkdir('/proc/self/fd');\n        FS.mount(\n          {\n            mount() {\n              var node = FS.createNode(proc_self, 'fd', 16384 | 511 /* 0777 */, 73);\n              node.node_ops = {\n                lookup(parent, name) {\n                  var fd = +name;\n                  var stream = FS.getStreamChecked(fd);\n                  var ret = {\n                    parent: null,\n                    mount: { mountpoint: 'fake' },\n                    node_ops: { readlink: () => stream.path },\n                  };\n                  ret.parent = ret; // make it look like a simple root node\n                  return ret;\n                },\n              };\n              return node;\n            },\n          },\n          {},\n          '/proc/self/fd',\n        );\n      },\n      createStandardStreams(input, output, error) {\n        // TODO deprecate the old functionality of a single\n        // input / output callback and that utilizes FS.createDevice\n        // and instead require a unique set of stream ops\n\n        // by default, we symlink the standard streams to the\n        // default tty devices. however, if the standard streams\n        // have been overwritten we create a unique device for\n        // them instead.\n        if (input) {\n          FS.createDevice('/dev', 'stdin', input);\n        } else {\n          FS.symlink('/dev/tty', '/dev/stdin');\n        }\n        if (output) {\n          FS.createDevice('/dev', 'stdout', null, output);\n        } else {\n          FS.symlink('/dev/tty', '/dev/stdout');\n        }\n        if (error) {\n          FS.createDevice('/dev', 'stderr', null, error);\n        } else {\n          FS.symlink('/dev/tty1', '/dev/stderr');\n        }\n\n        // open default streams for the stdin, stdout and stderr devices\n        var stdin = FS.open('/dev/stdin', 0);\n        var stdout = FS.open('/dev/stdout', 1);\n        var stderr = FS.open('/dev/stderr', 1);\n        assert(stdin.fd === 0, `invalid handle for stdin (${stdin.fd})`);\n        assert(stdout.fd === 1, `invalid handle for stdout (${stdout.fd})`);\n        assert(stderr.fd === 2, `invalid handle for stderr (${stderr.fd})`);\n      },\n      staticInit() {\n        // Some errors may happen quite a bit, to avoid overhead we reuse them (and suffer a lack of stack info)\n        [44].forEach((code) => {\n          FS.genericErrors[code] = new FS.ErrnoError(code);\n          FS.genericErrors[code].stack = '<generic error, no stack>';\n        });\n\n        FS.nameTable = new Array(4096);\n\n        FS.mount(MEMFS, {}, '/');\n\n        FS.createDefaultDirectories();\n        FS.createDefaultDevices();\n        FS.createSpecialDirectories();\n\n        FS.filesystems = {\n          MEMFS: MEMFS,\n        };\n      },\n      init(input, output, error) {\n        assert(\n          !FS.initialized,\n          'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)',\n        );\n        FS.initialized = true;\n\n        // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here\n        input ??= Module['stdin'];\n        output ??= Module['stdout'];\n        error ??= Module['stderr'];\n\n        FS.createStandardStreams(input, output, error);\n      },\n      quit() {\n        FS.initialized = false;\n        // force-flush all streams, so we get musl std streams printed out\n        _fflush(0);\n        // close all of our streams\n        for (var i = 0; i < FS.streams.length; i++) {\n          var stream = FS.streams[i];\n          if (!stream) {\n            continue;\n          }\n          FS.close(stream);\n        }\n      },\n      findObject(path, dontResolveLastLink) {\n        var ret = FS.analyzePath(path, dontResolveLastLink);\n        if (!ret.exists) {\n          return null;\n        }\n        return ret.object;\n      },\n      analyzePath(path, dontResolveLastLink) {\n        // operate from within the context of the symlink's target\n        try {\n          var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });\n          path = lookup.path;\n        } catch (e) {}\n        var ret = {\n          isRoot: false,\n          exists: false,\n          error: 0,\n          name: null,\n          path: null,\n          object: null,\n          parentExists: false,\n          parentPath: null,\n          parentObject: null,\n        };\n        try {\n          var lookup = FS.lookupPath(path, { parent: true });\n          ret.parentExists = true;\n          ret.parentPath = lookup.path;\n          ret.parentObject = lookup.node;\n          ret.name = PATH.basename(path);\n          lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });\n          ret.exists = true;\n          ret.path = lookup.path;\n          ret.object = lookup.node;\n          ret.name = lookup.node.name;\n          ret.isRoot = lookup.path === '/';\n        } catch (e) {\n          ret.error = e.errno;\n        }\n        return ret;\n      },\n      createPath(parent, path, canRead, canWrite) {\n        parent = typeof parent == 'string' ? parent : FS.getPath(parent);\n        var parts = path.split('/').reverse();\n        while (parts.length) {\n          var part = parts.pop();\n          if (!part) continue;\n          var current = PATH.join2(parent, part);\n          try {\n            FS.mkdir(current);\n          } catch (e) {\n            // ignore EEXIST\n          }\n          parent = current;\n        }\n        return current;\n      },\n      createFile(parent, name, properties, canRead, canWrite) {\n        var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name);\n        var mode = FS_getMode(canRead, canWrite);\n        return FS.create(path, mode);\n      },\n      createDataFile(parent, name, data, canRead, canWrite, canOwn) {\n        var path = name;\n        if (parent) {\n          parent = typeof parent == 'string' ? parent : FS.getPath(parent);\n          path = name ? PATH.join2(parent, name) : parent;\n        }\n        var mode = FS_getMode(canRead, canWrite);\n        var node = FS.create(path, mode);\n        if (data) {\n          if (typeof data == 'string') {\n            var arr = new Array(data.length);\n            for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i);\n            data = arr;\n          }\n          // make sure we can write to the file\n          FS.chmod(node, mode | 146);\n          var stream = FS.open(node, 577);\n          FS.write(stream, data, 0, data.length, 0, canOwn);\n          FS.close(stream);\n          FS.chmod(node, mode);\n        }\n      },\n      createDevice(parent, name, input, output) {\n        var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name);\n        var mode = FS_getMode(!!input, !!output);\n        FS.createDevice.major ??= 64;\n        var dev = FS.makedev(FS.createDevice.major++, 0);\n        // Create a fake device that a set of stream ops to emulate\n        // the old behavior.\n        FS.registerDevice(dev, {\n          open(stream) {\n            stream.seekable = false;\n          },\n          close(stream) {\n            // flush any pending line data\n            if (output?.buffer?.length) {\n              output(10);\n            }\n          },\n          read(stream, buffer, offset, length, pos /* ignored */) {\n            var bytesRead = 0;\n            for (var i = 0; i < length; i++) {\n              var result;\n              try {\n                result = input();\n              } catch (e) {\n                throw new FS.ErrnoError(29);\n              }\n              if (result === undefined && bytesRead === 0) {\n                throw new FS.ErrnoError(6);\n              }\n              if (result === null || result === undefined) break;\n              bytesRead++;\n              buffer[offset + i] = result;\n            }\n            if (bytesRead) {\n              stream.node.timestamp = Date.now();\n            }\n            return bytesRead;\n          },\n          write(stream, buffer, offset, length, pos) {\n            for (var i = 0; i < length; i++) {\n              try {\n                output(buffer[offset + i]);\n              } catch (e) {\n                throw new FS.ErrnoError(29);\n              }\n            }\n            if (length) {\n              stream.node.timestamp = Date.now();\n            }\n            return i;\n          },\n        });\n        return FS.mkdev(path, mode, dev);\n      },\n      forceLoadFile(obj) {\n        if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;\n        if (typeof XMLHttpRequest != 'undefined') {\n          throw new Error(\n            'Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.',\n          );\n        } else {\n          // Command-line.\n          try {\n            obj.contents = readBinary(obj.url);\n            obj.usedBytes = obj.contents.length;\n          } catch (e) {\n            throw new FS.ErrnoError(29);\n          }\n        }\n      },\n      createLazyFile(parent, name, url, canRead, canWrite) {\n        // Lazy chunked Uint8Array (implements get and length from Uint8Array).\n        // Actual getting is abstracted away for eventual reuse.\n        class LazyUint8Array {\n          constructor() {\n            this.lengthKnown = false;\n            this.chunks = []; // Loaded chunks. Index is the chunk number\n          }\n          get(idx) {\n            if (idx > this.length - 1 || idx < 0) {\n              return undefined;\n            }\n            var chunkOffset = idx % this.chunkSize;\n            var chunkNum = (idx / this.chunkSize) | 0;\n            return this.getter(chunkNum)[chunkOffset];\n          }\n          setDataGetter(getter) {\n            this.getter = getter;\n          }\n          cacheLength() {\n            // Find length\n            var xhr = new XMLHttpRequest();\n            xhr.open('HEAD', url, false);\n            xhr.send(null);\n            if (!((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304))\n              throw new Error(\"Couldn't load \" + url + '. Status: ' + xhr.status);\n            var datalength = Number(xhr.getResponseHeader('Content-length'));\n            var header;\n            var hasByteServing =\n              (header = xhr.getResponseHeader('Accept-Ranges')) && header === 'bytes';\n            var usesGzip =\n              (header = xhr.getResponseHeader('Content-Encoding')) && header === 'gzip';\n\n            var chunkSize = 1024 * 1024; // Chunk size in bytes\n\n            if (!hasByteServing) chunkSize = datalength;\n\n            // Function to get a range from the remote URL.\n            var doXHR = (from, to) => {\n              if (from > to)\n                throw new Error('invalid range (' + from + ', ' + to + ') or no bytes requested!');\n              if (to > datalength - 1)\n                throw new Error('only ' + datalength + ' bytes available! programmer error!');\n\n              // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available.\n              var xhr = new XMLHttpRequest();\n              xhr.open('GET', url, false);\n              if (datalength !== chunkSize)\n                xhr.setRequestHeader('Range', 'bytes=' + from + '-' + to);\n\n              // Some hints to the browser that we want binary data.\n              xhr.responseType = 'arraybuffer';\n              if (xhr.overrideMimeType) {\n                xhr.overrideMimeType('text/plain; charset=x-user-defined');\n              }\n\n              xhr.send(null);\n              if (!((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304))\n                throw new Error(\"Couldn't load \" + url + '. Status: ' + xhr.status);\n              if (xhr.response !== undefined) {\n                return new Uint8Array(/** @type{Array<number>} */ (xhr.response || []));\n              }\n              return intArrayFromString(xhr.responseText || '', true);\n            };\n            var lazyArray = this;\n            lazyArray.setDataGetter((chunkNum) => {\n              var start = chunkNum * chunkSize;\n              var end = (chunkNum + 1) * chunkSize - 1; // including this byte\n              end = Math.min(end, datalength - 1); // if datalength-1 is selected, this is the last block\n              if (typeof lazyArray.chunks[chunkNum] == 'undefined') {\n                lazyArray.chunks[chunkNum] = doXHR(start, end);\n              }\n              if (typeof lazyArray.chunks[chunkNum] == 'undefined')\n                throw new Error('doXHR failed!');\n              return lazyArray.chunks[chunkNum];\n            });\n\n            if (usesGzip || !datalength) {\n              // if the server uses gzip or doesn't supply the length, we have to download the whole file to get the (uncompressed) length\n              chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file\n              datalength = this.getter(0).length;\n              chunkSize = datalength;\n              out('LazyFiles on gzip forces download of the whole file when length is accessed');\n            }\n\n            this._length = datalength;\n            this._chunkSize = chunkSize;\n            this.lengthKnown = true;\n          }\n          get length() {\n            if (!this.lengthKnown) {\n              this.cacheLength();\n            }\n            return this._length;\n          }\n          get chunkSize() {\n            if (!this.lengthKnown) {\n              this.cacheLength();\n            }\n            return this._chunkSize;\n          }\n        }\n\n        if (typeof XMLHttpRequest != 'undefined') {\n          if (!ENVIRONMENT_IS_WORKER)\n            throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc';\n          var lazyArray = new LazyUint8Array();\n          var properties = { isDevice: false, contents: lazyArray };\n        } else {\n          var properties = { isDevice: false, url: url };\n        }\n\n        var node = FS.createFile(parent, name, properties, canRead, canWrite);\n        // This is a total hack, but I want to get this lazy file code out of the\n        // core of MEMFS. If we want to keep this lazy file concept I feel it should\n        // be its own thin LAZYFS proxying calls to MEMFS.\n        if (properties.contents) {\n          node.contents = properties.contents;\n        } else if (properties.url) {\n          node.contents = null;\n          node.url = properties.url;\n        }\n        // Add a function that defers querying the file size until it is asked the first time.\n        Object.defineProperties(node, {\n          usedBytes: {\n            get: function () {\n              return this.contents.length;\n            },\n          },\n        });\n        // override each stream op with one that tries to force load the lazy file first\n        var stream_ops = {};\n        var keys = Object.keys(node.stream_ops);\n        keys.forEach((key) => {\n          var fn = node.stream_ops[key];\n          stream_ops[key] = (...args) => {\n            FS.forceLoadFile(node);\n            return fn(...args);\n          };\n        });\n        function writeChunks(stream, buffer, offset, length, position) {\n          var contents = stream.node.contents;\n          if (position >= contents.length) return 0;\n          var size = Math.min(contents.length - position, length);\n          assert(size >= 0);\n          if (contents.slice) {\n            // normal array\n            for (var i = 0; i < size; i++) {\n              buffer[offset + i] = contents[position + i];\n            }\n          } else {\n            for (var i = 0; i < size; i++) {\n              // LazyUint8Array from sync binary XHR\n              buffer[offset + i] = contents.get(position + i);\n            }\n          }\n          return size;\n        }\n        // use a custom read function\n        stream_ops.read = (stream, buffer, offset, length, position) => {\n          FS.forceLoadFile(node);\n          return writeChunks(stream, buffer, offset, length, position);\n        };\n        // use a custom mmap function\n        stream_ops.mmap = (stream, length, position, prot, flags) => {\n          FS.forceLoadFile(node);\n          var ptr = mmapAlloc(length);\n          if (!ptr) {\n            throw new FS.ErrnoError(48);\n          }\n          writeChunks(stream, HEAP8, ptr, length, position);\n          return { ptr, allocated: true };\n        };\n        node.stream_ops = stream_ops;\n        return node;\n      },\n      absolutePath() {\n        abort('FS.absolutePath has been removed; use PATH_FS.resolve instead');\n      },\n      createFolder() {\n        abort('FS.createFolder has been removed; use FS.mkdir instead');\n      },\n      createLink() {\n        abort('FS.createLink has been removed; use FS.symlink instead');\n      },\n      joinPath() {\n        abort('FS.joinPath has been removed; use PATH.join instead');\n      },\n      mmapAlloc() {\n        abort('FS.mmapAlloc has been replaced by the top level function mmapAlloc');\n      },\n      standardizePath() {\n        abort('FS.standardizePath has been removed; use PATH.normalize instead');\n      },\n    };\n\n    var SYSCALLS = {\n      DEFAULT_POLLMASK: 5,\n      calculateAt(dirfd, path, allowEmpty) {\n        if (PATH.isAbs(path)) {\n          return path;\n        }\n        // relative path\n        var dir;\n        if (dirfd === -100) {\n          dir = FS.cwd();\n        } else {\n          var dirstream = SYSCALLS.getStreamFromFD(dirfd);\n          dir = dirstream.path;\n        }\n        if (path.length == 0) {\n          if (!allowEmpty) {\n            throw new FS.ErrnoError(44);\n          }\n          return dir;\n        }\n        return PATH.join2(dir, path);\n      },\n      doStat(func, path, buf) {\n        var stat = func(path);\n        HEAP32[buf >> 2] = stat.dev;\n        HEAP32[(buf + 4) >> 2] = stat.mode;\n        HEAPU32[(buf + 8) >> 2] = stat.nlink;\n        HEAP32[(buf + 12) >> 2] = stat.uid;\n        HEAP32[(buf + 16) >> 2] = stat.gid;\n        HEAP32[(buf + 20) >> 2] = stat.rdev;\n        (tempI64 = [\n          stat.size >>> 0,\n          ((tempDouble = stat.size),\n          +Math.abs(tempDouble) >= 1.0\n            ? tempDouble > 0.0\n              ? +Math.floor(tempDouble / 4294967296.0) >>> 0\n              : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0) >>> 0\n            : 0),\n        ]),\n          (HEAP32[(buf + 24) >> 2] = tempI64[0]),\n          (HEAP32[(buf + 28) >> 2] = tempI64[1]);\n        HEAP32[(buf + 32) >> 2] = 4096;\n        HEAP32[(buf + 36) >> 2] = stat.blocks;\n        var atime = stat.atime.getTime();\n        var mtime = stat.mtime.getTime();\n        var ctime = stat.ctime.getTime();\n        (tempI64 = [\n          Math.floor(atime / 1000) >>> 0,\n          ((tempDouble = Math.floor(atime / 1000)),\n          +Math.abs(tempDouble) >= 1.0\n            ? tempDouble > 0.0\n              ? +Math.floor(tempDouble / 4294967296.0) >>> 0\n              : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0) >>> 0\n            : 0),\n        ]),\n          (HEAP32[(buf + 40) >> 2] = tempI64[0]),\n          (HEAP32[(buf + 44) >> 2] = tempI64[1]);\n        HEAPU32[(buf + 48) >> 2] = (atime % 1000) * 1000 * 1000;\n        (tempI64 = [\n          Math.floor(mtime / 1000) >>> 0,\n          ((tempDouble = Math.floor(mtime / 1000)),\n          +Math.abs(tempDouble) >= 1.0\n            ? tempDouble > 0.0\n              ? +Math.floor(tempDouble / 4294967296.0) >>> 0\n              : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0) >>> 0\n            : 0),\n        ]),\n          (HEAP32[(buf + 56) >> 2] = tempI64[0]),\n          (HEAP32[(buf + 60) >> 2] = tempI64[1]);\n        HEAPU32[(buf + 64) >> 2] = (mtime % 1000) * 1000 * 1000;\n        (tempI64 = [\n          Math.floor(ctime / 1000) >>> 0,\n          ((tempDouble = Math.floor(ctime / 1000)),\n          +Math.abs(tempDouble) >= 1.0\n            ? tempDouble > 0.0\n              ? +Math.floor(tempDouble / 4294967296.0) >>> 0\n              : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0) >>> 0\n            : 0),\n        ]),\n          (HEAP32[(buf + 72) >> 2] = tempI64[0]),\n          (HEAP32[(buf + 76) >> 2] = tempI64[1]);\n        HEAPU32[(buf + 80) >> 2] = (ctime % 1000) * 1000 * 1000;\n        (tempI64 = [\n          stat.ino >>> 0,\n          ((tempDouble = stat.ino),\n          +Math.abs(tempDouble) >= 1.0\n            ? tempDouble > 0.0\n              ? +Math.floor(tempDouble / 4294967296.0) >>> 0\n              : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0) >>> 0\n            : 0),\n        ]),\n          (HEAP32[(buf + 88) >> 2] = tempI64[0]),\n          (HEAP32[(buf + 92) >> 2] = tempI64[1]);\n        return 0;\n      },\n      doMsync(addr, stream, len, flags, offset) {\n        if (!FS.isFile(stream.node.mode)) {\n          throw new FS.ErrnoError(43);\n        }\n        if (flags & 2) {\n          // MAP_PRIVATE calls need not to be synced back to underlying fs\n          return 0;\n        }\n        var buffer = HEAPU8.slice(addr, addr + len);\n        FS.msync(stream, buffer, offset, len, flags);\n      },\n      getStreamFromFD(fd) {\n        var stream = FS.getStreamChecked(fd);\n        return stream;\n      },\n      varargs: undefined,\n      getStr(ptr) {\n        var ret = UTF8ToString(ptr);\n        return ret;\n      },\n    };\n    function ___syscall_fcntl64(fd, cmd, varargs) {\n      SYSCALLS.varargs = varargs;\n      try {\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        switch (cmd) {\n          case 0: {\n            var arg = syscallGetVarargI();\n            if (arg < 0) {\n              return -28;\n            }\n            while (FS.streams[arg]) {\n              arg++;\n            }\n            var newStream;\n            newStream = FS.dupStream(stream, arg);\n            return newStream.fd;\n          }\n          case 1:\n          case 2:\n            return 0; // FD_CLOEXEC makes no sense for a single process.\n          case 3:\n            return stream.flags;\n          case 4: {\n            var arg = syscallGetVarargI();\n            stream.flags |= arg;\n            return 0;\n          }\n          case 12: {\n            var arg = syscallGetVarargP();\n            var offset = 0;\n            // We're always unlocked.\n            HEAP16[(arg + offset) >> 1] = 2;\n            return 0;\n          }\n          case 13:\n          case 14:\n            return 0; // Pretend that the locking is successful.\n        }\n        return -28;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    function ___syscall_fstat64(fd, buf) {\n      try {\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        return SYSCALLS.doStat(FS.stat, stream.path, buf);\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    var convertI32PairToI53Checked = (lo, hi) => {\n      assert(lo == lo >>> 0 || lo == (lo | 0)); // lo should either be a i32 or a u32\n      assert(hi === (hi | 0)); // hi should be a i32\n      return (hi + 0x200000) >>> 0 < 0x400001 - !!lo ? (lo >>> 0) + hi * 4294967296 : NaN;\n    };\n    function ___syscall_ftruncate64(fd, length_low, length_high) {\n      var length = convertI32PairToI53Checked(length_low, length_high);\n\n      try {\n        if (isNaN(length)) return 61;\n        FS.ftruncate(fd, length);\n        return 0;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    var stringToUTF8 = (str, outPtr, maxBytesToWrite) => {\n      assert(\n        typeof maxBytesToWrite == 'number',\n        'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!',\n      );\n      return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);\n    };\n\n    function ___syscall_getdents64(fd, dirp, count) {\n      try {\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        stream.getdents ||= FS.readdir(stream.path);\n\n        var struct_size = 280;\n        var pos = 0;\n        var off = FS.llseek(stream, 0, 1);\n\n        var idx = Math.floor(off / struct_size);\n\n        while (idx < stream.getdents.length && pos + struct_size <= count) {\n          var id;\n          var type;\n          var name = stream.getdents[idx];\n          if (name === '.') {\n            id = stream.node.id;\n            type = 4; // DT_DIR\n          } else if (name === '..') {\n            var lookup = FS.lookupPath(stream.path, { parent: true });\n            id = lookup.node.id;\n            type = 4; // DT_DIR\n          } else {\n            var child = FS.lookupNode(stream.node, name);\n            id = child.id;\n            type = FS.isChrdev(child.mode)\n              ? 2 // DT_CHR, character device.\n              : FS.isDir(child.mode)\n                ? 4 // DT_DIR, directory.\n                : FS.isLink(child.mode)\n                  ? 10 // DT_LNK, symbolic link.\n                  : 8; // DT_REG, regular file.\n          }\n          assert(id);\n          (tempI64 = [\n            id >>> 0,\n            ((tempDouble = id),\n            +Math.abs(tempDouble) >= 1.0\n              ? tempDouble > 0.0\n                ? +Math.floor(tempDouble / 4294967296.0) >>> 0\n                : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0) >>> 0\n              : 0),\n          ]),\n            (HEAP32[(dirp + pos) >> 2] = tempI64[0]),\n            (HEAP32[(dirp + pos + 4) >> 2] = tempI64[1]);\n          (tempI64 = [\n            ((idx + 1) * struct_size) >>> 0,\n            ((tempDouble = (idx + 1) * struct_size),\n            +Math.abs(tempDouble) >= 1.0\n              ? tempDouble > 0.0\n                ? +Math.floor(tempDouble / 4294967296.0) >>> 0\n                : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0) >>> 0\n              : 0),\n          ]),\n            (HEAP32[(dirp + pos + 8) >> 2] = tempI64[0]),\n            (HEAP32[(dirp + pos + 12) >> 2] = tempI64[1]);\n          HEAP16[(dirp + pos + 16) >> 1] = 280;\n          HEAP8[dirp + pos + 18] = type;\n          stringToUTF8(name, dirp + pos + 19, 256);\n          pos += struct_size;\n          idx += 1;\n        }\n        FS.llseek(stream, idx * struct_size, 0);\n        return pos;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    function ___syscall_ioctl(fd, op, varargs) {\n      SYSCALLS.varargs = varargs;\n      try {\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        switch (op) {\n          case 21509: {\n            if (!stream.tty) return -59;\n            return 0;\n          }\n          case 21505: {\n            if (!stream.tty) return -59;\n            if (stream.tty.ops.ioctl_tcgets) {\n              var termios = stream.tty.ops.ioctl_tcgets(stream);\n              var argp = syscallGetVarargP();\n              HEAP32[argp >> 2] = termios.c_iflag || 0;\n              HEAP32[(argp + 4) >> 2] = termios.c_oflag || 0;\n              HEAP32[(argp + 8) >> 2] = termios.c_cflag || 0;\n              HEAP32[(argp + 12) >> 2] = termios.c_lflag || 0;\n              for (var i = 0; i < 32; i++) {\n                HEAP8[argp + i + 17] = termios.c_cc[i] || 0;\n              }\n              return 0;\n            }\n            return 0;\n          }\n          case 21510:\n          case 21511:\n          case 21512: {\n            if (!stream.tty) return -59;\n            return 0; // no-op, not actually adjusting terminal settings\n          }\n          case 21506:\n          case 21507:\n          case 21508: {\n            if (!stream.tty) return -59;\n            if (stream.tty.ops.ioctl_tcsets) {\n              var argp = syscallGetVarargP();\n              var c_iflag = HEAP32[argp >> 2];\n              var c_oflag = HEAP32[(argp + 4) >> 2];\n              var c_cflag = HEAP32[(argp + 8) >> 2];\n              var c_lflag = HEAP32[(argp + 12) >> 2];\n              var c_cc = [];\n              for (var i = 0; i < 32; i++) {\n                c_cc.push(HEAP8[argp + i + 17]);\n              }\n              return stream.tty.ops.ioctl_tcsets(stream.tty, op, {\n                c_iflag,\n                c_oflag,\n                c_cflag,\n                c_lflag,\n                c_cc,\n              });\n            }\n            return 0; // no-op, not actually adjusting terminal settings\n          }\n          case 21519: {\n            if (!stream.tty) return -59;\n            var argp = syscallGetVarargP();\n            HEAP32[argp >> 2] = 0;\n            return 0;\n          }\n          case 21520: {\n            if (!stream.tty) return -59;\n            return -28; // not supported\n          }\n          case 21531: {\n            var argp = syscallGetVarargP();\n            return FS.ioctl(stream, op, argp);\n          }\n          case 21523: {\n            // TODO: in theory we should write to the winsize struct that gets\n            // passed in, but for now musl doesn't read anything on it\n            if (!stream.tty) return -59;\n            if (stream.tty.ops.ioctl_tiocgwinsz) {\n              var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty);\n              var argp = syscallGetVarargP();\n              HEAP16[argp >> 1] = winsize[0];\n              HEAP16[(argp + 2) >> 1] = winsize[1];\n            }\n            return 0;\n          }\n          case 21524: {\n            // TODO: technically, this ioctl call should change the window size.\n            // but, since emscripten doesn't have any concept of a terminal window\n            // yet, we'll just silently throw it away as we do TIOCGWINSZ\n            if (!stream.tty) return -59;\n            return 0;\n          }\n          case 21515: {\n            if (!stream.tty) return -59;\n            return 0;\n          }\n          default:\n            return -28; // not supported\n        }\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    function ___syscall_lstat64(path, buf) {\n      try {\n        path = SYSCALLS.getStr(path);\n        return SYSCALLS.doStat(FS.lstat, path, buf);\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    function ___syscall_newfstatat(dirfd, path, buf, flags) {\n      try {\n        path = SYSCALLS.getStr(path);\n        var nofollow = flags & 256;\n        var allowEmpty = flags & 4096;\n        flags = flags & ~6400;\n        assert(!flags, `unknown flags in __syscall_newfstatat: ${flags}`);\n        path = SYSCALLS.calculateAt(dirfd, path, allowEmpty);\n        return SYSCALLS.doStat(nofollow ? FS.lstat : FS.stat, path, buf);\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    function ___syscall_openat(dirfd, path, flags, varargs) {\n      SYSCALLS.varargs = varargs;\n      try {\n        path = SYSCALLS.getStr(path);\n        path = SYSCALLS.calculateAt(dirfd, path);\n        var mode = varargs ? syscallGetVarargI() : 0;\n        return FS.open(path, flags, mode).fd;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    function ___syscall_rmdir(path) {\n      try {\n        path = SYSCALLS.getStr(path);\n        FS.rmdir(path);\n        return 0;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    function ___syscall_stat64(path, buf) {\n      try {\n        path = SYSCALLS.getStr(path);\n        return SYSCALLS.doStat(FS.stat, path, buf);\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    function ___syscall_unlinkat(dirfd, path, flags) {\n      try {\n        path = SYSCALLS.getStr(path);\n        path = SYSCALLS.calculateAt(dirfd, path);\n        if (flags === 0) {\n          FS.unlink(path);\n        } else if (flags === 512) {\n          FS.rmdir(path);\n        } else {\n          abort('Invalid flags passed to unlinkat');\n        }\n        return 0;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return -e.errno;\n      }\n    }\n\n    var __abort_js = () => {\n      abort('native code called abort()');\n    };\n\n    var __emscripten_memcpy_js = (dest, src, num) => HEAPU8.copyWithin(dest, src, src + num);\n\n    var __emscripten_throw_longjmp = () => {\n      throw Infinity;\n    };\n\n    function __gmtime_js(time_low, time_high, tmPtr) {\n      var time = convertI32PairToI53Checked(time_low, time_high);\n\n      var date = new Date(time * 1000);\n      HEAP32[tmPtr >> 2] = date.getUTCSeconds();\n      HEAP32[(tmPtr + 4) >> 2] = date.getUTCMinutes();\n      HEAP32[(tmPtr + 8) >> 2] = date.getUTCHours();\n      HEAP32[(tmPtr + 12) >> 2] = date.getUTCDate();\n      HEAP32[(tmPtr + 16) >> 2] = date.getUTCMonth();\n      HEAP32[(tmPtr + 20) >> 2] = date.getUTCFullYear() - 1900;\n      HEAP32[(tmPtr + 24) >> 2] = date.getUTCDay();\n      var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0);\n      var yday = ((date.getTime() - start) / (1000 * 60 * 60 * 24)) | 0;\n      HEAP32[(tmPtr + 28) >> 2] = yday;\n    }\n\n    var isLeapYear = (year) => year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n\n    var MONTH_DAYS_LEAP_CUMULATIVE = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\n    var MONTH_DAYS_REGULAR_CUMULATIVE = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n    var ydayFromDate = (date) => {\n      var leap = isLeapYear(date.getFullYear());\n      var monthDaysCumulative = leap ? MONTH_DAYS_LEAP_CUMULATIVE : MONTH_DAYS_REGULAR_CUMULATIVE;\n      var yday = monthDaysCumulative[date.getMonth()] + date.getDate() - 1; // -1 since it's days since Jan 1\n\n      return yday;\n    };\n\n    function __localtime_js(time_low, time_high, tmPtr) {\n      var time = convertI32PairToI53Checked(time_low, time_high);\n\n      var date = new Date(time * 1000);\n      HEAP32[tmPtr >> 2] = date.getSeconds();\n      HEAP32[(tmPtr + 4) >> 2] = date.getMinutes();\n      HEAP32[(tmPtr + 8) >> 2] = date.getHours();\n      HEAP32[(tmPtr + 12) >> 2] = date.getDate();\n      HEAP32[(tmPtr + 16) >> 2] = date.getMonth();\n      HEAP32[(tmPtr + 20) >> 2] = date.getFullYear() - 1900;\n      HEAP32[(tmPtr + 24) >> 2] = date.getDay();\n\n      var yday = ydayFromDate(date) | 0;\n      HEAP32[(tmPtr + 28) >> 2] = yday;\n      HEAP32[(tmPtr + 36) >> 2] = -(date.getTimezoneOffset() * 60);\n\n      // Attention: DST is in December in South, and some regions don't have DST at all.\n      var start = new Date(date.getFullYear(), 0, 1);\n      var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset();\n      var winterOffset = start.getTimezoneOffset();\n      var dst =\n        (summerOffset != winterOffset &&\n          date.getTimezoneOffset() == Math.min(winterOffset, summerOffset)) | 0;\n      HEAP32[(tmPtr + 32) >> 2] = dst;\n    }\n\n    var __tzset_js = (timezone, daylight, std_name, dst_name) => {\n      // TODO: Use (malleable) environment variables instead of system settings.\n      var currentYear = new Date().getFullYear();\n      var winter = new Date(currentYear, 0, 1);\n      var summer = new Date(currentYear, 6, 1);\n      var winterOffset = winter.getTimezoneOffset();\n      var summerOffset = summer.getTimezoneOffset();\n\n      // Local standard timezone offset. Local standard time is not adjusted for\n      // daylight savings.  This code uses the fact that getTimezoneOffset returns\n      // a greater value during Standard Time versus Daylight Saving Time (DST).\n      // Thus it determines the expected output during Standard Time, and it\n      // compares whether the output of the given date the same (Standard) or less\n      // (DST).\n      var stdTimezoneOffset = Math.max(winterOffset, summerOffset);\n\n      // timezone is specified as seconds west of UTC (\"The external variable\n      // `timezone` shall be set to the difference, in seconds, between\n      // Coordinated Universal Time (UTC) and local standard time.\"), the same\n      // as returned by stdTimezoneOffset.\n      // See http://pubs.opengroup.org/onlinepubs/009695399/functions/tzset.html\n      HEAPU32[timezone >> 2] = stdTimezoneOffset * 60;\n\n      HEAP32[daylight >> 2] = Number(winterOffset != summerOffset);\n\n      var extractZone = (timezoneOffset) => {\n        // Why inverse sign?\n        // Read here https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset\n        var sign = timezoneOffset >= 0 ? '-' : '+';\n\n        var absOffset = Math.abs(timezoneOffset);\n        var hours = String(Math.floor(absOffset / 60)).padStart(2, '0');\n        var minutes = String(absOffset % 60).padStart(2, '0');\n\n        return `UTC${sign}${hours}${minutes}`;\n      };\n\n      var winterName = extractZone(winterOffset);\n      var summerName = extractZone(summerOffset);\n      assert(winterName);\n      assert(summerName);\n      assert(\n        lengthBytesUTF8(winterName) <= 16,\n        `timezone name truncated to fit in TZNAME_MAX (${winterName})`,\n      );\n      assert(\n        lengthBytesUTF8(summerName) <= 16,\n        `timezone name truncated to fit in TZNAME_MAX (${summerName})`,\n      );\n      if (summerOffset < winterOffset) {\n        // Northern hemisphere\n        stringToUTF8(winterName, std_name, 17);\n        stringToUTF8(summerName, dst_name, 17);\n      } else {\n        stringToUTF8(winterName, dst_name, 17);\n        stringToUTF8(summerName, std_name, 17);\n      }\n    };\n\n    var _emscripten_date_now = () => Date.now();\n\n    var getHeapMax = () =>\n      // Stay one Wasm page short of 4GB: while e.g. Chrome is able to allocate\n      // full 4GB Wasm memories, the size will wrap back to 0 bytes in Wasm side\n      // for any code that deals with heap sizes, which would require special\n      // casing all heap size related code to treat 0 specially.\n      2147483648;\n\n    var growMemory = (size) => {\n      var b = wasmMemory.buffer;\n      var pages = ((size - b.byteLength + 65535) / 65536) | 0;\n      try {\n        // round size grow request up to wasm page size (fixed 64KB per spec)\n        wasmMemory.grow(pages); // .grow() takes a delta compared to the previous size\n        updateMemoryViews();\n        return 1 /*success*/;\n      } catch (e) {\n        err(\n          `growMemory: Attempted to grow heap from ${b.byteLength} bytes to ${size} bytes, but got error: ${e}`,\n        );\n      }\n      // implicit 0 return to save code size (caller will cast \"undefined\" into 0\n      // anyhow)\n    };\n    var _emscripten_resize_heap = (requestedSize) => {\n      var oldSize = HEAPU8.length;\n      // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned.\n      requestedSize >>>= 0;\n      // With multithreaded builds, races can happen (another thread might increase the size\n      // in between), so return a failure, and let the caller retry.\n      assert(requestedSize > oldSize);\n\n      // Memory resize rules:\n      // 1.  Always increase heap size to at least the requested size, rounded up\n      //     to next page multiple.\n      // 2a. If MEMORY_GROWTH_LINEAR_STEP == -1, excessively resize the heap\n      //     geometrically: increase the heap size according to\n      //     MEMORY_GROWTH_GEOMETRIC_STEP factor (default +20%), At most\n      //     overreserve by MEMORY_GROWTH_GEOMETRIC_CAP bytes (default 96MB).\n      // 2b. If MEMORY_GROWTH_LINEAR_STEP != -1, excessively resize the heap\n      //     linearly: increase the heap size by at least\n      //     MEMORY_GROWTH_LINEAR_STEP bytes.\n      // 3.  Max size for the heap is capped at 2048MB-WASM_PAGE_SIZE, or by\n      //     MAXIMUM_MEMORY, or by ASAN limit, depending on which is smallest\n      // 4.  If we were unable to allocate as much memory, it may be due to\n      //     over-eager decision to excessively reserve due to (3) above.\n      //     Hence if an allocation fails, cut down on the amount of excess\n      //     growth, in an attempt to succeed to perform a smaller allocation.\n\n      // A limit is set for how much we can grow. We should not exceed that\n      // (the wasm binary specifies it, so if we tried, we'd fail anyhow).\n      var maxHeapSize = getHeapMax();\n      if (requestedSize > maxHeapSize) {\n        err(\n          `Cannot enlarge memory, requested ${requestedSize} bytes, but the limit is ${maxHeapSize} bytes!`,\n        );\n        return false;\n      }\n\n      // Loop through potential heap size increases. If we attempt a too eager\n      // reservation that fails, cut down on the attempted size and reserve a\n      // smaller bump instead. (max 3 times, chosen somewhat arbitrarily)\n      for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {\n        var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); // ensure geometric growth\n        // but limit overreserving (default to capping at +96MB overgrowth at most)\n        overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296);\n\n        var newSize = Math.min(\n          maxHeapSize,\n          alignMemory(Math.max(requestedSize, overGrownHeapSize), 65536),\n        );\n\n        var replacement = growMemory(newSize);\n        if (replacement) {\n          return true;\n        }\n      }\n      err(`Failed to grow the heap from ${oldSize} bytes to ${newSize} bytes, not enough memory!`);\n      return false;\n    };\n\n    var ENV = {};\n\n    var getExecutableName = () => {\n      return thisProgram || './this.program';\n    };\n    var getEnvStrings = () => {\n      if (!getEnvStrings.strings) {\n        // Default values.\n        // Browser language detection #8751\n        var lang =\n          (\n            (typeof navigator == 'object' && navigator.languages && navigator.languages[0]) ||\n            'C'\n          ).replace('-', '_') + '.UTF-8';\n        var env = {\n          USER: 'web_user',\n          LOGNAME: 'web_user',\n          PATH: '/',\n          PWD: '/',\n          HOME: '/home/web_user',\n          LANG: lang,\n          _: getExecutableName(),\n        };\n        // Apply the user-provided values, if any.\n        for (var x in ENV) {\n          // x is a key in ENV; if ENV[x] is undefined, that means it was\n          // explicitly set to be so. We allow user code to do that to\n          // force variables with default values to remain unset.\n          if (ENV[x] === undefined) delete env[x];\n          else env[x] = ENV[x];\n        }\n        var strings = [];\n        for (var x in env) {\n          strings.push(`${x}=${env[x]}`);\n        }\n        getEnvStrings.strings = strings;\n      }\n      return getEnvStrings.strings;\n    };\n\n    var stringToAscii = (str, buffer) => {\n      for (var i = 0; i < str.length; ++i) {\n        assert(str.charCodeAt(i) === (str.charCodeAt(i) & 0xff));\n        HEAP8[buffer++] = str.charCodeAt(i);\n      }\n      // Null-terminate the string\n      HEAP8[buffer] = 0;\n    };\n    var _environ_get = (__environ, environ_buf) => {\n      var bufSize = 0;\n      getEnvStrings().forEach((string, i) => {\n        var ptr = environ_buf + bufSize;\n        HEAPU32[(__environ + i * 4) >> 2] = ptr;\n        stringToAscii(string, ptr);\n        bufSize += string.length + 1;\n      });\n      return 0;\n    };\n\n    var _environ_sizes_get = (penviron_count, penviron_buf_size) => {\n      var strings = getEnvStrings();\n      HEAPU32[penviron_count >> 2] = strings.length;\n      var bufSize = 0;\n      strings.forEach((string) => (bufSize += string.length + 1));\n      HEAPU32[penviron_buf_size >> 2] = bufSize;\n      return 0;\n    };\n\n    function _fd_close(fd) {\n      try {\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        FS.close(stream);\n        return 0;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return e.errno;\n      }\n    }\n\n    /** @param {number=} offset */\n    var doReadv = (stream, iov, iovcnt, offset) => {\n      var ret = 0;\n      for (var i = 0; i < iovcnt; i++) {\n        var ptr = HEAPU32[iov >> 2];\n        var len = HEAPU32[(iov + 4) >> 2];\n        iov += 8;\n        var curr = FS.read(stream, HEAP8, ptr, len, offset);\n        if (curr < 0) return -1;\n        ret += curr;\n        if (curr < len) break; // nothing more to read\n        if (typeof offset != 'undefined') {\n          offset += curr;\n        }\n      }\n      return ret;\n    };\n\n    function _fd_read(fd, iov, iovcnt, pnum) {\n      try {\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        var num = doReadv(stream, iov, iovcnt);\n        HEAPU32[pnum >> 2] = num;\n        return 0;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return e.errno;\n      }\n    }\n\n    function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {\n      var offset = convertI32PairToI53Checked(offset_low, offset_high);\n\n      try {\n        if (isNaN(offset)) return 61;\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        FS.llseek(stream, offset, whence);\n        (tempI64 = [\n          stream.position >>> 0,\n          ((tempDouble = stream.position),\n          +Math.abs(tempDouble) >= 1.0\n            ? tempDouble > 0.0\n              ? +Math.floor(tempDouble / 4294967296.0) >>> 0\n              : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0) >>> 0\n            : 0),\n        ]),\n          (HEAP32[newOffset >> 2] = tempI64[0]),\n          (HEAP32[(newOffset + 4) >> 2] = tempI64[1]);\n        if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state\n        return 0;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return e.errno;\n      }\n    }\n\n    function _fd_sync(fd) {\n      try {\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        if (stream.stream_ops?.fsync) {\n          return stream.stream_ops.fsync(stream);\n        }\n        return 0; // we can't do anything synchronously; the in-memory FS is already synced to\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return e.errno;\n      }\n    }\n\n    /** @param {number=} offset */\n    var doWritev = (stream, iov, iovcnt, offset) => {\n      var ret = 0;\n      for (var i = 0; i < iovcnt; i++) {\n        var ptr = HEAPU32[iov >> 2];\n        var len = HEAPU32[(iov + 4) >> 2];\n        iov += 8;\n        var curr = FS.write(stream, HEAP8, ptr, len, offset);\n        if (curr < 0) return -1;\n        ret += curr;\n        if (curr < len) {\n          // No more space to write.\n          break;\n        }\n        if (typeof offset != 'undefined') {\n          offset += curr;\n        }\n      }\n      return ret;\n    };\n\n    function _fd_write(fd, iov, iovcnt, pnum) {\n      try {\n        var stream = SYSCALLS.getStreamFromFD(fd);\n        var num = doWritev(stream, iov, iovcnt);\n        HEAPU32[pnum >> 2] = num;\n        return 0;\n      } catch (e) {\n        if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n        return e.errno;\n      }\n    }\n\n    var wasmTableMirror = [];\n\n    /** @type {WebAssembly.Table} */\n    var wasmTable;\n    var getWasmTableEntry = (funcPtr) => {\n      var func = wasmTableMirror[funcPtr];\n      if (!func) {\n        if (funcPtr >= wasmTableMirror.length) wasmTableMirror.length = funcPtr + 1;\n        wasmTableMirror[funcPtr] = func = wasmTable.get(funcPtr);\n      }\n      assert(\n        wasmTable.get(funcPtr) == func,\n        'JavaScript-side Wasm function table mirror is out of date!',\n      );\n      return func;\n    };\n\n    var UTF16Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder('utf-16le') : undefined;\n    var UTF16ToString = (ptr, maxBytesToRead) => {\n      assert(ptr % 2 == 0, 'Pointer passed to UTF16ToString must be aligned to two bytes!');\n      var endPtr = ptr;\n      // TextDecoder needs to know the byte length in advance, it doesn't stop on\n      // null terminator by itself.\n      // Also, use the length info to avoid running tiny strings through\n      // TextDecoder, since .subarray() allocates garbage.\n      var idx = endPtr >> 1;\n      var maxIdx = idx + maxBytesToRead / 2;\n      // If maxBytesToRead is not passed explicitly, it will be undefined, and this\n      // will always evaluate to true. This saves on code size.\n      while (!(idx >= maxIdx) && HEAPU16[idx]) ++idx;\n      endPtr = idx << 1;\n\n      if (endPtr - ptr > 32 && UTF16Decoder)\n        return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr));\n\n      // Fallback: decode without UTF16Decoder\n      var str = '';\n\n      // If maxBytesToRead is not passed explicitly, it will be undefined, and the\n      // for-loop's condition will always evaluate to true. The loop is then\n      // terminated on the first null char.\n      for (var i = 0; !(i >= maxBytesToRead / 2); ++i) {\n        var codeUnit = HEAP16[(ptr + i * 2) >> 1];\n        if (codeUnit == 0) break;\n        // fromCharCode constructs a character from a UTF-16 code unit, so we can\n        // pass the UTF16 string right through.\n        str += String.fromCharCode(codeUnit);\n      }\n\n      return str;\n    };\n\n    var uleb128Encode = (n, target) => {\n      assert(n < 16384);\n      if (n < 128) {\n        target.push(n);\n      } else {\n        target.push(n % 128 | 128, n >> 7);\n      }\n    };\n\n    var sigToWasmTypes = (sig) => {\n      assert(\n        !sig.includes('j'),\n        'i64 not permitted in function signatures when WASM_BIGINT is disabled',\n      );\n      var typeNames = {\n        i: 'i32',\n        j: 'i64',\n        f: 'f32',\n        d: 'f64',\n        e: 'externref',\n        p: 'i32',\n      };\n      var type = {\n        parameters: [],\n        results: sig[0] == 'v' ? [] : [typeNames[sig[0]]],\n      };\n      for (var i = 1; i < sig.length; ++i) {\n        assert(sig[i] in typeNames, 'invalid signature char: ' + sig[i]);\n        type.parameters.push(typeNames[sig[i]]);\n      }\n      return type;\n    };\n\n    var generateFuncType = (sig, target) => {\n      var sigRet = sig.slice(0, 1);\n      var sigParam = sig.slice(1);\n      var typeCodes = {\n        i: 0x7f, // i32\n        p: 0x7f, // i32\n        j: 0x7e, // i64\n        f: 0x7d, // f32\n        d: 0x7c, // f64\n        e: 0x6f, // externref\n      };\n\n      // Parameters, length + signatures\n      target.push(0x60 /* form: func */);\n      uleb128Encode(sigParam.length, target);\n      for (var i = 0; i < sigParam.length; ++i) {\n        assert(sigParam[i] in typeCodes, 'invalid signature char: ' + sigParam[i]);\n        target.push(typeCodes[sigParam[i]]);\n      }\n\n      // Return values, length + signatures\n      // With no multi-return in MVP, either 0 (void) or 1 (anything else)\n      if (sigRet == 'v') {\n        target.push(0x00);\n      } else {\n        target.push(0x01, typeCodes[sigRet]);\n      }\n    };\n    var convertJsFunctionToWasm = (func, sig) => {\n      assert(\n        !sig.includes('j'),\n        'i64 not permitted in function signatures when WASM_BIGINT is disabled',\n      );\n\n      // If the type reflection proposal is available, use the new\n      // \"WebAssembly.Function\" constructor.\n      // Otherwise, construct a minimal wasm module importing the JS function and\n      // re-exporting it.\n      if (typeof WebAssembly.Function == 'function') {\n        return new WebAssembly.Function(sigToWasmTypes(sig), func);\n      }\n\n      // The module is static, with the exception of the type section, which is\n      // generated based on the signature passed in.\n      var typeSectionBody = [\n        0x01, // count: 1\n      ];\n      generateFuncType(sig, typeSectionBody);\n\n      // Rest of the module is static\n      var bytes = [\n        0x00,\n        0x61,\n        0x73,\n        0x6d, // magic (\"\\0asm\")\n        0x01,\n        0x00,\n        0x00,\n        0x00, // version: 1\n        0x01, // Type section code\n      ];\n      // Write the overall length of the type section followed by the body\n      uleb128Encode(typeSectionBody.length, bytes);\n      bytes.push(...typeSectionBody);\n\n      // The rest of the module is static\n      bytes.push(\n        0x02,\n        0x07, // import section\n        // (import \"e\" \"f\" (func 0 (type 0)))\n        0x01,\n        0x01,\n        0x65,\n        0x01,\n        0x66,\n        0x00,\n        0x00,\n        0x07,\n        0x05, // export section\n        // (export \"f\" (func 0 (type 0)))\n        0x01,\n        0x01,\n        0x66,\n        0x00,\n        0x00,\n      );\n\n      // We can compile this wasm module synchronously because it is very small.\n      // This accepts an import (at \"e.f\"), that it reroutes to an export (at \"f\")\n      var module = new WebAssembly.Module(new Uint8Array(bytes));\n      var instance = new WebAssembly.Instance(module, { e: { f: func } });\n      var wrappedFunc = instance.exports['f'];\n      return wrappedFunc;\n    };\n\n    var updateTableMap = (offset, count) => {\n      if (functionsInTableMap) {\n        for (var i = offset; i < offset + count; i++) {\n          var item = getWasmTableEntry(i);\n          // Ignore null values.\n          if (item) {\n            functionsInTableMap.set(item, i);\n          }\n        }\n      }\n    };\n\n    var functionsInTableMap;\n\n    var getFunctionAddress = (func) => {\n      // First, create the map if this is the first use.\n      if (!functionsInTableMap) {\n        functionsInTableMap = new WeakMap();\n        updateTableMap(0, wasmTable.length);\n      }\n      return functionsInTableMap.get(func) || 0;\n    };\n\n    var freeTableIndexes = [];\n\n    var getEmptyTableSlot = () => {\n      // Reuse a free index if there is one, otherwise grow.\n      if (freeTableIndexes.length) {\n        return freeTableIndexes.pop();\n      }\n      // Grow the table\n      try {\n        wasmTable.grow(1);\n      } catch (err) {\n        if (!(err instanceof RangeError)) {\n          throw err;\n        }\n        throw 'Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.';\n      }\n      return wasmTable.length - 1;\n    };\n\n    var setWasmTableEntry = (idx, func) => {\n      wasmTable.set(idx, func);\n      // With ABORT_ON_WASM_EXCEPTIONS wasmTable.get is overridden to return wrapped\n      // functions so we need to call it here to retrieve the potential wrapper correctly\n      // instead of just storing 'func' directly into wasmTableMirror\n      wasmTableMirror[idx] = wasmTable.get(idx);\n    };\n\n    /** @param {string=} sig */\n    var addFunction = (func, sig) => {\n      assert(typeof func != 'undefined');\n      // Check if the function is already in the table, to ensure each function\n      // gets a unique index.\n      var rtn = getFunctionAddress(func);\n      if (rtn) {\n        return rtn;\n      }\n\n      // It's not in the table, add it now.\n\n      var ret = getEmptyTableSlot();\n\n      // Set the new value.\n      try {\n        // Attempting to call this with JS function will cause of table.set() to fail\n        setWasmTableEntry(ret, func);\n      } catch (err) {\n        if (!(err instanceof TypeError)) {\n          throw err;\n        }\n        assert(typeof sig != 'undefined', 'Missing signature argument to addFunction: ' + func);\n        var wrapped = convertJsFunctionToWasm(func, sig);\n        setWasmTableEntry(ret, wrapped);\n      }\n\n      functionsInTableMap.set(func, ret);\n\n      return ret;\n    };\n\n    var getCFunc = (ident) => {\n      var func = Module['_' + ident]; // closure exported function\n      assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported');\n      return func;\n    };\n\n    var writeArrayToMemory = (array, buffer) => {\n      assert(\n        array.length >= 0,\n        'writeArrayToMemory array must have a length (should be an array or typed array)',\n      );\n      HEAP8.set(array, buffer);\n    };\n\n    var stackAlloc = (sz) => __emscripten_stack_alloc(sz);\n    var stringToUTF8OnStack = (str) => {\n      var size = lengthBytesUTF8(str) + 1;\n      var ret = stackAlloc(size);\n      stringToUTF8(str, ret, size);\n      return ret;\n    };\n\n    /**\n     * @param {string|null=} returnType\n     * @param {Array=} argTypes\n     * @param {Arguments|Array=} args\n     * @param {Object=} opts\n     */\n    var ccall = (ident, returnType, argTypes, args, opts) => {\n      // For fast lookup of conversion functions\n      var toC = {\n        string: (str) => {\n          var ret = 0;\n          if (str !== null && str !== undefined && str !== 0) {\n            // null string\n            ret = stringToUTF8OnStack(str);\n          }\n          return ret;\n        },\n        array: (arr) => {\n          var ret = stackAlloc(arr.length);\n          writeArrayToMemory(arr, ret);\n          return ret;\n        },\n      };\n\n      function convertReturnValue(ret) {\n        if (returnType === 'string') {\n          return UTF8ToString(ret);\n        }\n        if (returnType === 'boolean') return Boolean(ret);\n        return ret;\n      }\n\n      var func = getCFunc(ident);\n      var cArgs = [];\n      var stack = 0;\n      assert(returnType !== 'array', 'Return type should not be \"array\".');\n      if (args) {\n        for (var i = 0; i < args.length; i++) {\n          var converter = toC[argTypes[i]];\n          if (converter) {\n            if (stack === 0) stack = stackSave();\n            cArgs[i] = converter(args[i]);\n          } else {\n            cArgs[i] = args[i];\n          }\n        }\n      }\n      var ret = func(...cArgs);\n      function onDone(ret) {\n        if (stack !== 0) stackRestore(stack);\n        return convertReturnValue(ret);\n      }\n\n      ret = onDone(ret);\n      return ret;\n    };\n\n    /**\n     * @param {string=} returnType\n     * @param {Array=} argTypes\n     * @param {Object=} opts\n     */\n    var cwrap = (ident, returnType, argTypes, opts) => {\n      return (...args) => ccall(ident, returnType, argTypes, args);\n    };\n\n    var removeFunction = (index) => {\n      functionsInTableMap.delete(getWasmTableEntry(index));\n      setWasmTableEntry(index, null);\n      freeTableIndexes.push(index);\n    };\n\n    var stringToUTF16 = (str, outPtr, maxBytesToWrite) => {\n      assert(outPtr % 2 == 0, 'Pointer passed to stringToUTF16 must be aligned to two bytes!');\n      assert(\n        typeof maxBytesToWrite == 'number',\n        'stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!',\n      );\n      // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\n      maxBytesToWrite ??= 0x7fffffff;\n      if (maxBytesToWrite < 2) return 0;\n      maxBytesToWrite -= 2; // Null terminator.\n      var startPtr = outPtr;\n      var numCharsToWrite = maxBytesToWrite < str.length * 2 ? maxBytesToWrite / 2 : str.length;\n      for (var i = 0; i < numCharsToWrite; ++i) {\n        // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.\n        var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\n        HEAP16[outPtr >> 1] = codeUnit;\n        outPtr += 2;\n      }\n      // Null-terminate the pointer to the HEAP.\n      HEAP16[outPtr >> 1] = 0;\n      return outPtr - startPtr;\n    };\n\n    FS.createPreloadedFile = FS_createPreloadedFile;\n    FS.staticInit();\n    // Set module methods based on EXPORTED_RUNTIME_METHODS\n    function checkIncomingModuleAPI() {\n      ignoredModuleProp('fetchSettings');\n    }\n    var wasmImports = {\n      /** @export */\n      __assert_fail: ___assert_fail,\n      /** @export */\n      __syscall_fcntl64: ___syscall_fcntl64,\n      /** @export */\n      __syscall_fstat64: ___syscall_fstat64,\n      /** @export */\n      __syscall_ftruncate64: ___syscall_ftruncate64,\n      /** @export */\n      __syscall_getdents64: ___syscall_getdents64,\n      /** @export */\n      __syscall_ioctl: ___syscall_ioctl,\n      /** @export */\n      __syscall_lstat64: ___syscall_lstat64,\n      /** @export */\n      __syscall_newfstatat: ___syscall_newfstatat,\n      /** @export */\n      __syscall_openat: ___syscall_openat,\n      /** @export */\n      __syscall_rmdir: ___syscall_rmdir,\n      /** @export */\n      __syscall_stat64: ___syscall_stat64,\n      /** @export */\n      __syscall_unlinkat: ___syscall_unlinkat,\n      /** @export */\n      _abort_js: __abort_js,\n      /** @export */\n      _emscripten_memcpy_js: __emscripten_memcpy_js,\n      /** @export */\n      _emscripten_throw_longjmp: __emscripten_throw_longjmp,\n      /** @export */\n      _gmtime_js: __gmtime_js,\n      /** @export */\n      _localtime_js: __localtime_js,\n      /** @export */\n      _tzset_js: __tzset_js,\n      /** @export */\n      emscripten_date_now: _emscripten_date_now,\n      /** @export */\n      emscripten_resize_heap: _emscripten_resize_heap,\n      /** @export */\n      environ_get: _environ_get,\n      /** @export */\n      environ_sizes_get: _environ_sizes_get,\n      /** @export */\n      fd_close: _fd_close,\n      /** @export */\n      fd_read: _fd_read,\n      /** @export */\n      fd_seek: _fd_seek,\n      /** @export */\n      fd_sync: _fd_sync,\n      /** @export */\n      fd_write: _fd_write,\n      /** @export */\n      invoke_ii,\n      /** @export */\n      invoke_iii,\n      /** @export */\n      invoke_iiii,\n      /** @export */\n      invoke_iiiii,\n      /** @export */\n      invoke_v,\n      /** @export */\n      invoke_vii,\n      /** @export */\n      invoke_viii,\n      /** @export */\n      invoke_viiii,\n      /** @export */\n      invoke_viiiiiiiii,\n    };\n    var wasmExports = createWasm();\n    (Module['_PDFiumExt_Init'] = createExportWrapper('PDFiumExt_Init', 0));\n    (Module['_FPDF_InitLibraryWithConfig'] = createExportWrapper(\n      'FPDF_InitLibraryWithConfig',\n      1,\n    ));\n    (Module['_PDFiumExt_OpenFileWriter'] = createExportWrapper(\n      'PDFiumExt_OpenFileWriter',\n      0,\n    ));\n    (Module['_PDFiumExt_GetFileWriterSize'] =\n      createExportWrapper('PDFiumExt_GetFileWriterSize', 1));\n    (Module['_PDFiumExt_GetFileWriterData'] =\n      createExportWrapper('PDFiumExt_GetFileWriterData', 3));\n    (Module['_PDFiumExt_CloseFileWriter'] = createExportWrapper(\n      'PDFiumExt_CloseFileWriter',\n      1,\n    ));\n    (Module['_PDFiumExt_SaveAsCopy'] = createExportWrapper(\n      'PDFiumExt_SaveAsCopy',\n      2,\n    ));\n    (Module['_FPDF_SaveAsCopy'] = createExportWrapper('FPDF_SaveAsCopy', 3));\n    (Module['_PDFiumExt_OpenFormFillInfo'] = createExportWrapper(\n      'PDFiumExt_OpenFormFillInfo',\n      0,\n    ));\n    (Module['_PDFiumExt_CloseFormFillInfo'] =\n      createExportWrapper('PDFiumExt_CloseFormFillInfo', 1));\n    (Module['_PDFiumExt_InitFormFillEnvironment'] =\n      createExportWrapper('PDFiumExt_InitFormFillEnvironment', 2));\n    (Module['_FPDFDOC_InitFormFillEnvironment'] =\n      createExportWrapper('FPDFDOC_InitFormFillEnvironment', 2));\n    (Module['_PDFiumExt_ExitFormFillEnvironment'] =\n      createExportWrapper('PDFiumExt_ExitFormFillEnvironment', 1));\n    (Module['_FPDFDOC_ExitFormFillEnvironment'] =\n      createExportWrapper('FPDFDOC_ExitFormFillEnvironment', 1));\n    (Module['_EPDFNamedDest_SetDest'] = createExportWrapper(\n      'EPDFNamedDest_SetDest',\n      3,\n    ));\n    (Module['_EPDFNamedDest_Remove'] = createExportWrapper(\n      'EPDFNamedDest_Remove',\n      2,\n    ));\n    (Module['_EPDFDest_CreateView'] = createExportWrapper(\n      'EPDFDest_CreateView',\n      4,\n    ));\n    (Module['_EPDFDest_CreateXYZ'] = createExportWrapper(\n      'EPDFDest_CreateXYZ',\n      7,\n    ));\n    (Module['_EPDFDest_CreateRemoteView'] = createExportWrapper(\n      'EPDFDest_CreateRemoteView',\n      5,\n    ));\n    (Module['_EPDFDest_CreateRemoteXYZ'] = createExportWrapper(\n      'EPDFDest_CreateRemoteXYZ',\n      8,\n    ));\n    (Module['_EPDFAction_CreateGoTo'] = createExportWrapper(\n      'EPDFAction_CreateGoTo',\n      2,\n    ));\n    (Module['_EPDFAction_CreateGoToNamed'] = createExportWrapper(\n      'EPDFAction_CreateGoToNamed',\n      2,\n    ));\n    (Module['_EPDFAction_CreateLaunch'] = createExportWrapper(\n      'EPDFAction_CreateLaunch',\n      2,\n    ));\n    (Module['_EPDFAction_CreateRemoteGoToByName'] =\n      createExportWrapper('EPDFAction_CreateRemoteGoToByName', 3));\n    (Module['_EPDFAction_CreateRemoteGoToDest'] =\n      createExportWrapper('EPDFAction_CreateRemoteGoToDest', 3));\n    (Module['_EPDFAction_CreateURI'] = createExportWrapper(\n      'EPDFAction_CreateURI',\n      2,\n    ));\n    (Module['_EPDFBookmark_Create'] = createExportWrapper(\n      'EPDFBookmark_Create',\n      2,\n    ));\n    (Module['_EPDFBookmark_Delete'] = createExportWrapper(\n      'EPDFBookmark_Delete',\n      2,\n    ));\n    (Module['_EPDFBookmark_AppendChild'] = createExportWrapper(\n      'EPDFBookmark_AppendChild',\n      3,\n    ));\n    (Module['_EPDFBookmark_InsertAfter'] = createExportWrapper(\n      'EPDFBookmark_InsertAfter',\n      4,\n    ));\n    (Module['_EPDFBookmark_Clear'] = createExportWrapper(\n      'EPDFBookmark_Clear',\n      1,\n    ));\n    (Module['_EPDFBookmark_SetTitle'] = createExportWrapper(\n      'EPDFBookmark_SetTitle',\n      2,\n    ));\n    (Module['_EPDFBookmark_SetDest'] = createExportWrapper(\n      'EPDFBookmark_SetDest',\n      3,\n    ));\n    (Module['_EPDFBookmark_SetAction'] = createExportWrapper(\n      'EPDFBookmark_SetAction',\n      3,\n    ));\n    (Module['_EPDFBookmark_ClearTarget'] = createExportWrapper(\n      'EPDFBookmark_ClearTarget',\n      1,\n    ));\n    (Module['_EPDF_PNG_EncodeRGBA'] = createExportWrapper(\n      'EPDF_PNG_EncodeRGBA',\n      6,\n    ));\n    (Module['_FPDFAnnot_IsSupportedSubtype'] =\n      createExportWrapper('FPDFAnnot_IsSupportedSubtype', 1));\n    (Module['_FPDFPage_CreateAnnot'] = createExportWrapper(\n      'FPDFPage_CreateAnnot',\n      2,\n    ));\n    (Module['_FPDFPage_GetAnnotCount'] = createExportWrapper(\n      'FPDFPage_GetAnnotCount',\n      1,\n    ));\n    (Module['_FPDFPage_GetAnnot'] = createExportWrapper(\n      'FPDFPage_GetAnnot',\n      2,\n    ));\n    (Module['_FPDFPage_GetAnnotIndex'] = createExportWrapper(\n      'FPDFPage_GetAnnotIndex',\n      2,\n    ));\n    (Module['_FPDFPage_CloseAnnot'] = createExportWrapper(\n      'FPDFPage_CloseAnnot',\n      1,\n    ));\n    (Module['_FPDFPage_RemoveAnnot'] = createExportWrapper(\n      'FPDFPage_RemoveAnnot',\n      2,\n    ));\n    (Module['_FPDFAnnot_GetSubtype'] = createExportWrapper(\n      'FPDFAnnot_GetSubtype',\n      1,\n    ));\n    (Module['_FPDFAnnot_IsObjectSupportedSubtype'] =\n      createExportWrapper('FPDFAnnot_IsObjectSupportedSubtype', 1));\n    (Module['_FPDFAnnot_UpdateObject'] = createExportWrapper(\n      'FPDFAnnot_UpdateObject',\n      2,\n    ));\n    (Module['_FPDFAnnot_AddInkStroke'] = createExportWrapper(\n      'FPDFAnnot_AddInkStroke',\n      3,\n    ));\n    (Module['_FPDFAnnot_RemoveInkList'] = createExportWrapper(\n      'FPDFAnnot_RemoveInkList',\n      1,\n    ));\n    (Module['_FPDFAnnot_AppendObject'] = createExportWrapper(\n      'FPDFAnnot_AppendObject',\n      2,\n    ));\n    (Module['_FPDFAnnot_GetObjectCount'] = createExportWrapper(\n      'FPDFAnnot_GetObjectCount',\n      1,\n    ));\n    (Module['_FPDFAnnot_GetObject'] = createExportWrapper(\n      'FPDFAnnot_GetObject',\n      2,\n    ));\n    (Module['_FPDFAnnot_RemoveObject'] = createExportWrapper(\n      'FPDFAnnot_RemoveObject',\n      2,\n    ));\n    (Module['_FPDFAnnot_SetColor'] = createExportWrapper(\n      'FPDFAnnot_SetColor',\n      6,\n    ));\n    (Module['_FPDFAnnot_GetColor'] = createExportWrapper(\n      'FPDFAnnot_GetColor',\n      6,\n    ));\n    (Module['_FPDFAnnot_HasAttachmentPoints'] =\n      createExportWrapper('FPDFAnnot_HasAttachmentPoints', 1));\n    (Module['_FPDFAnnot_SetAttachmentPoints'] =\n      createExportWrapper('FPDFAnnot_SetAttachmentPoints', 3));\n    (Module['_FPDFAnnot_AppendAttachmentPoints'] =\n      createExportWrapper('FPDFAnnot_AppendAttachmentPoints', 2));\n    (Module['_FPDFAnnot_CountAttachmentPoints'] =\n      createExportWrapper('FPDFAnnot_CountAttachmentPoints', 1));\n    (Module['_FPDFAnnot_GetAttachmentPoints'] =\n      createExportWrapper('FPDFAnnot_GetAttachmentPoints', 3));\n    (Module['_FPDFAnnot_SetRect'] = createExportWrapper(\n      'FPDFAnnot_SetRect',\n      2,\n    ));\n    (Module['_FPDFAnnot_GetRect'] = createExportWrapper(\n      'FPDFAnnot_GetRect',\n      2,\n    ));\n    (Module['_FPDFAnnot_GetVertices'] = createExportWrapper(\n      'FPDFAnnot_GetVertices',\n      3,\n    ));\n    (Module['_FPDFAnnot_GetInkListCount'] = createExportWrapper(\n      'FPDFAnnot_GetInkListCount',\n      1,\n    ));\n    (Module['_FPDFAnnot_GetInkListPath'] = createExportWrapper(\n      'FPDFAnnot_GetInkListPath',\n      4,\n    ));\n    (Module['_FPDFAnnot_GetLine'] = createExportWrapper(\n      'FPDFAnnot_GetLine',\n      3,\n    ));\n    (Module['_FPDFAnnot_SetBorder'] = createExportWrapper(\n      'FPDFAnnot_SetBorder',\n      4,\n    ));\n    (Module['_FPDFAnnot_GetBorder'] = createExportWrapper(\n      'FPDFAnnot_GetBorder',\n      4,\n    ));\n    (Module['_FPDFAnnot_HasKey'] = createExportWrapper(\n      'FPDFAnnot_HasKey',\n      2,\n    ));\n    (Module['_FPDFAnnot_GetValueType'] = createExportWrapper(\n      'FPDFAnnot_GetValueType',\n      2,\n    ));\n    (Module['_FPDFAnnot_SetStringValue'] = createExportWrapper(\n      'FPDFAnnot_SetStringValue',\n      3,\n    ));\n    (Module['_FPDFAnnot_GetStringValue'] = createExportWrapper(\n      'FPDFAnnot_GetStringValue',\n      4,\n    ));\n    (Module['_FPDFAnnot_GetNumberValue'] = createExportWrapper(\n      'FPDFAnnot_GetNumberValue',\n      3,\n    ));\n    (Module['_FPDFAnnot_SetAP'] = createExportWrapper('FPDFAnnot_SetAP', 3));\n    (Module['_FPDFAnnot_GetAP'] = createExportWrapper('FPDFAnnot_GetAP', 4));\n    (Module['_FPDFAnnot_GetLinkedAnnot'] = createExportWrapper(\n      'FPDFAnnot_GetLinkedAnnot',\n      2,\n    ));\n    (Module['_FPDFAnnot_GetFlags'] = createExportWrapper(\n      'FPDFAnnot_GetFlags',\n      1,\n    ));\n    (Module['_FPDFAnnot_SetFlags'] = createExportWrapper(\n      'FPDFAnnot_SetFlags',\n      2,\n    ));\n    (Module['_FPDFAnnot_GetFormFieldFlags'] =\n      createExportWrapper('FPDFAnnot_GetFormFieldFlags', 2));\n    (Module['_FPDFAnnot_SetFormFieldFlags'] =\n      createExportWrapper('FPDFAnnot_SetFormFieldFlags', 3));\n    (Module['_FPDFAnnot_GetFormFieldAtPoint'] =\n      createExportWrapper('FPDFAnnot_GetFormFieldAtPoint', 3));\n    (Module['_FPDFAnnot_GetFormFieldName'] = createExportWrapper(\n      'FPDFAnnot_GetFormFieldName',\n      4,\n    ));\n    (Module['_FPDFAnnot_GetFormFieldType'] = createExportWrapper(\n      'FPDFAnnot_GetFormFieldType',\n      2,\n    ));\n    (Module[\n      '_FPDFAnnot_GetFormAdditionalActionJavaScript'\n    ] = createExportWrapper('FPDFAnnot_GetFormAdditionalActionJavaScript', 5));\n    (Module['_FPDFAnnot_GetFormFieldAlternateName'] =\n      createExportWrapper('FPDFAnnot_GetFormFieldAlternateName', 4));\n    (Module['_FPDFAnnot_GetFormFieldValue'] =\n      createExportWrapper('FPDFAnnot_GetFormFieldValue', 4));\n    (Module['_FPDFAnnot_GetOptionCount'] = createExportWrapper(\n      'FPDFAnnot_GetOptionCount',\n      2,\n    ));\n    (Module['_FPDFAnnot_GetOptionLabel'] = createExportWrapper(\n      'FPDFAnnot_GetOptionLabel',\n      5,\n    ));\n    (Module['_FPDFAnnot_IsOptionSelected'] = createExportWrapper(\n      'FPDFAnnot_IsOptionSelected',\n      3,\n    ));\n    (Module['_FPDFAnnot_GetFontSize'] = createExportWrapper(\n      'FPDFAnnot_GetFontSize',\n      3,\n    ));\n    (Module['_FPDFAnnot_SetFontColor'] = createExportWrapper(\n      'FPDFAnnot_SetFontColor',\n      5,\n    ));\n    (Module['_FPDFAnnot_GetFontColor'] = createExportWrapper(\n      'FPDFAnnot_GetFontColor',\n      5,\n    ));\n    (Module['_FPDFAnnot_IsChecked'] = createExportWrapper(\n      'FPDFAnnot_IsChecked',\n      2,\n    ));\n    (Module['_FPDFAnnot_SetFocusableSubtypes'] =\n      createExportWrapper('FPDFAnnot_SetFocusableSubtypes', 3));\n    (Module['_FPDFAnnot_GetFocusableSubtypesCount'] =\n      createExportWrapper('FPDFAnnot_GetFocusableSubtypesCount', 1));\n    (Module['_FPDFAnnot_GetFocusableSubtypes'] =\n      createExportWrapper('FPDFAnnot_GetFocusableSubtypes', 3));\n    (Module['_FPDFAnnot_GetLink'] = createExportWrapper(\n      'FPDFAnnot_GetLink',\n      1,\n    ));\n    (Module['_FPDFAnnot_GetFormControlCount'] =\n      createExportWrapper('FPDFAnnot_GetFormControlCount', 2));\n    (Module['_FPDFAnnot_GetFormControlIndex'] =\n      createExportWrapper('FPDFAnnot_GetFormControlIndex', 2));\n    (Module['_FPDFAnnot_GetFormFieldExportValue'] =\n      createExportWrapper('FPDFAnnot_GetFormFieldExportValue', 4));\n    (Module['_FPDFAnnot_SetURI'] = createExportWrapper(\n      'FPDFAnnot_SetURI',\n      2,\n    ));\n    (Module['_FPDFAnnot_GetFileAttachment'] =\n      createExportWrapper('FPDFAnnot_GetFileAttachment', 1));\n    (Module['_FPDFAnnot_AddFileAttachment'] =\n      createExportWrapper('FPDFAnnot_AddFileAttachment', 2));\n    (Module['_EPDFAnnot_SetColor'] = createExportWrapper(\n      'EPDFAnnot_SetColor',\n      5,\n    ));\n    (Module['_EPDFAnnot_GetColor'] = createExportWrapper(\n      'EPDFAnnot_GetColor',\n      5,\n    ));\n    (Module['_EPDFAnnot_ClearColor'] = createExportWrapper(\n      'EPDFAnnot_ClearColor',\n      2,\n    ));\n    (Module['_EPDFAnnot_SetOpacity'] = createExportWrapper(\n      'EPDFAnnot_SetOpacity',\n      2,\n    ));\n    (Module['_EPDFAnnot_GetOpacity'] = createExportWrapper(\n      'EPDFAnnot_GetOpacity',\n      2,\n    ));\n    (Module['_EPDFAnnot_GetBorderEffect'] = createExportWrapper(\n      'EPDFAnnot_GetBorderEffect',\n      2,\n    ));\n    (Module['_EPDFAnnot_GetRectangleDifferences'] =\n      createExportWrapper('EPDFAnnot_GetRectangleDifferences', 5));\n    (Module['_EPDFAnnot_GetBorderDashPatternCount'] =\n      createExportWrapper('EPDFAnnot_GetBorderDashPatternCount', 1));\n    (Module['_EPDFAnnot_GetBorderDashPattern'] =\n      createExportWrapper('EPDFAnnot_GetBorderDashPattern', 3));\n    (Module['_EPDFAnnot_SetBorderDashPattern'] =\n      createExportWrapper('EPDFAnnot_SetBorderDashPattern', 3));\n    (Module['_EPDFAnnot_GetBorderStyle'] = createExportWrapper(\n      'EPDFAnnot_GetBorderStyle',\n      2,\n    ));\n    (Module['_EPDFAnnot_SetBorderStyle'] = createExportWrapper(\n      'EPDFAnnot_SetBorderStyle',\n      3,\n    ));\n    (Module['_EPDFAnnot_GenerateAppearance'] =\n      createExportWrapper('EPDFAnnot_GenerateAppearance', 1));\n    (Module['_EPDFAnnot_GenerateAppearanceWithBlend'] =\n      createExportWrapper('EPDFAnnot_GenerateAppearanceWithBlend', 2));\n    (Module['_EPDFAnnot_GetBlendMode'] = createExportWrapper(\n      'EPDFAnnot_GetBlendMode',\n      1,\n    ));\n    (Module['_EPDFAnnot_SetIntent'] = createExportWrapper(\n      'EPDFAnnot_SetIntent',\n      2,\n    ));\n    (Module['_EPDFAnnot_GetIntent'] = createExportWrapper(\n      'EPDFAnnot_GetIntent',\n      3,\n    ));\n    (Module['_EPDFAnnot_GetRichContent'] = createExportWrapper(\n      'EPDFAnnot_GetRichContent',\n      3,\n    ));\n    (Module['_EPDFAnnot_SetLineEndings'] = createExportWrapper(\n      'EPDFAnnot_SetLineEndings',\n      3,\n    ));\n    (Module['_EPDFAnnot_GetLineEndings'] = createExportWrapper(\n      'EPDFAnnot_GetLineEndings',\n      3,\n    ));\n    (Module['_EPDFAnnot_SetVertices'] = createExportWrapper(\n      'EPDFAnnot_SetVertices',\n      3,\n    ));\n    (Module['_EPDFAnnot_SetLine'] = createExportWrapper(\n      'EPDFAnnot_SetLine',\n      3,\n    ));\n    (Module['_EPDFAnnot_SetDefaultAppearance'] =\n      createExportWrapper('EPDFAnnot_SetDefaultAppearance', 6));\n    (Module['_EPDFAnnot_GetDefaultAppearance'] =\n      createExportWrapper('EPDFAnnot_GetDefaultAppearance', 6));\n    (Module['_EPDFAnnot_SetTextAlignment'] = createExportWrapper(\n      'EPDFAnnot_SetTextAlignment',\n      2,\n    ));\n    (Module['_EPDFAnnot_GetTextAlignment'] = createExportWrapper(\n      'EPDFAnnot_GetTextAlignment',\n      1,\n    ));\n    (Module['_EPDFAnnot_SetVerticalAlignment'] =\n      createExportWrapper('EPDFAnnot_SetVerticalAlignment', 2));\n    (Module['_EPDFAnnot_GetVerticalAlignment'] =\n      createExportWrapper('EPDFAnnot_GetVerticalAlignment', 1));\n    (Module['_EPDFPage_GetAnnotByName'] = createExportWrapper(\n      'EPDFPage_GetAnnotByName',\n      2,\n    ));\n    (Module['_EPDFPage_RemoveAnnotByName'] = createExportWrapper(\n      'EPDFPage_RemoveAnnotByName',\n      2,\n    ));\n    (Module['_EPDFAnnot_SetLinkedAnnot'] = createExportWrapper(\n      'EPDFAnnot_SetLinkedAnnot',\n      3,\n    ));\n    (Module['_EPDFPage_GetAnnotCountRaw'] = createExportWrapper(\n      'EPDFPage_GetAnnotCountRaw',\n      2,\n    ));\n    (Module['_EPDFPage_GetAnnotRaw'] = createExportWrapper(\n      'EPDFPage_GetAnnotRaw',\n      3,\n    ));\n    (Module['_EPDFPage_RemoveAnnotRaw'] = createExportWrapper(\n      'EPDFPage_RemoveAnnotRaw',\n      3,\n    ));\n    (Module['_EPDFAnnot_SetIcon'] = createExportWrapper(\n      'EPDFAnnot_SetIcon',\n      2,\n    ));\n    (Module['_EPDFAnnot_GetIcon'] = createExportWrapper(\n      'EPDFAnnot_GetIcon',\n      1,\n    ));\n    (Module['_EPDFAnnot_UpdateAppearanceToRect'] =\n      createExportWrapper('EPDFAnnot_UpdateAppearanceToRect', 2));\n    (Module['_EPDFPage_CreateAnnot'] = createExportWrapper(\n      'EPDFPage_CreateAnnot',\n      2,\n    ));\n    (Module['_FPDFDoc_GetAttachmentCount'] = createExportWrapper(\n      'FPDFDoc_GetAttachmentCount',\n      1,\n    ));\n    (Module['_FPDFDoc_AddAttachment'] = createExportWrapper(\n      'FPDFDoc_AddAttachment',\n      2,\n    ));\n    (Module['_FPDFDoc_GetAttachment'] = createExportWrapper(\n      'FPDFDoc_GetAttachment',\n      2,\n    ));\n    (Module['_FPDFDoc_DeleteAttachment'] = createExportWrapper(\n      'FPDFDoc_DeleteAttachment',\n      2,\n    ));\n    (Module['_FPDFAttachment_GetName'] = createExportWrapper(\n      'FPDFAttachment_GetName',\n      3,\n    ));\n    (Module['_FPDFAttachment_HasKey'] = createExportWrapper(\n      'FPDFAttachment_HasKey',\n      2,\n    ));\n    (Module['_FPDFAttachment_GetValueType'] =\n      createExportWrapper('FPDFAttachment_GetValueType', 2));\n    (Module['_FPDFAttachment_SetStringValue'] =\n      createExportWrapper('FPDFAttachment_SetStringValue', 3));\n    (Module['_FPDFAttachment_GetStringValue'] =\n      createExportWrapper('FPDFAttachment_GetStringValue', 4));\n    (Module['_FPDFAttachment_SetFile'] = createExportWrapper(\n      'FPDFAttachment_SetFile',\n      4,\n    ));\n    (Module['_FPDFAttachment_GetFile'] = createExportWrapper(\n      'FPDFAttachment_GetFile',\n      4,\n    ));\n    (Module['_FPDFAttachment_GetSubtype'] = createExportWrapper(\n      'FPDFAttachment_GetSubtype',\n      3,\n    ));\n    (Module['_EPDFAttachment_SetSubtype'] = createExportWrapper(\n      'EPDFAttachment_SetSubtype',\n      2,\n    ));\n    (Module['_EPDFAttachment_SetDescription'] =\n      createExportWrapper('EPDFAttachment_SetDescription', 2));\n    (Module['_EPDFAttachment_GetDescription'] =\n      createExportWrapper('EPDFAttachment_GetDescription', 3));\n    (Module['_EPDFAttachment_GetIntegerValue'] =\n      createExportWrapper('EPDFAttachment_GetIntegerValue', 3));\n    (Module['_FPDFCatalog_IsTagged'] = createExportWrapper(\n      'FPDFCatalog_IsTagged',\n      1,\n    ));\n    (Module['_FPDFCatalog_SetLanguage'] = createExportWrapper(\n      'FPDFCatalog_SetLanguage',\n      2,\n    ));\n    (Module['_EPDFCatalog_GetLanguage'] = createExportWrapper(\n      'EPDFCatalog_GetLanguage',\n      3,\n    ));\n    (Module['_FPDFAvail_Create'] = createExportWrapper(\n      'FPDFAvail_Create',\n      2,\n    ));\n    (Module['_FPDFAvail_Destroy'] = createExportWrapper(\n      'FPDFAvail_Destroy',\n      1,\n    ));\n    (Module['_FPDFAvail_IsDocAvail'] = createExportWrapper(\n      'FPDFAvail_IsDocAvail',\n      2,\n    ));\n    (Module['_FPDFAvail_GetDocument'] = createExportWrapper(\n      'FPDFAvail_GetDocument',\n      2,\n    ));\n    (Module['_FPDFAvail_GetFirstPageNum'] = createExportWrapper(\n      'FPDFAvail_GetFirstPageNum',\n      1,\n    ));\n    (Module['_FPDFAvail_IsPageAvail'] = createExportWrapper(\n      'FPDFAvail_IsPageAvail',\n      3,\n    ));\n    (Module['_FPDFAvail_IsFormAvail'] = createExportWrapper(\n      'FPDFAvail_IsFormAvail',\n      2,\n    ));\n    (Module['_FPDFAvail_IsLinearized'] = createExportWrapper(\n      'FPDFAvail_IsLinearized',\n      1,\n    ));\n    (Module['_FPDFBookmark_GetFirstChild'] = createExportWrapper(\n      'FPDFBookmark_GetFirstChild',\n      2,\n    ));\n    (Module['_FPDFBookmark_GetNextSibling'] =\n      createExportWrapper('FPDFBookmark_GetNextSibling', 2));\n    (Module['_FPDFBookmark_GetTitle'] = createExportWrapper(\n      'FPDFBookmark_GetTitle',\n      3,\n    ));\n    (Module['_FPDFBookmark_GetCount'] = createExportWrapper(\n      'FPDFBookmark_GetCount',\n      1,\n    ));\n    (Module['_FPDFBookmark_Find'] = createExportWrapper(\n      'FPDFBookmark_Find',\n      2,\n    ));\n    (Module['_FPDFBookmark_GetDest'] = createExportWrapper(\n      'FPDFBookmark_GetDest',\n      2,\n    ));\n    (Module['_FPDFBookmark_GetAction'] = createExportWrapper(\n      'FPDFBookmark_GetAction',\n      1,\n    ));\n    (Module['_FPDFAction_GetType'] = createExportWrapper(\n      'FPDFAction_GetType',\n      1,\n    ));\n    (Module['_FPDFAction_GetDest'] = createExportWrapper(\n      'FPDFAction_GetDest',\n      2,\n    ));\n    (Module['_FPDFAction_GetFilePath'] = createExportWrapper(\n      'FPDFAction_GetFilePath',\n      3,\n    ));\n    (Module['_FPDFAction_GetURIPath'] = createExportWrapper(\n      'FPDFAction_GetURIPath',\n      4,\n    ));\n    (Module['_FPDFDest_GetDestPageIndex'] = createExportWrapper(\n      'FPDFDest_GetDestPageIndex',\n      2,\n    ));\n    (Module['_FPDFDest_GetView'] = createExportWrapper(\n      'FPDFDest_GetView',\n      3,\n    ));\n    (Module['_FPDFDest_GetLocationInPage'] = createExportWrapper(\n      'FPDFDest_GetLocationInPage',\n      7,\n    ));\n    (Module['_FPDFLink_GetLinkAtPoint'] = createExportWrapper(\n      'FPDFLink_GetLinkAtPoint',\n      3,\n    ));\n    (Module['_FPDFLink_GetLinkZOrderAtPoint'] =\n      createExportWrapper('FPDFLink_GetLinkZOrderAtPoint', 3));\n    (Module['_FPDFLink_GetDest'] = createExportWrapper(\n      'FPDFLink_GetDest',\n      2,\n    ));\n    (Module['_FPDFLink_GetAction'] = createExportWrapper(\n      'FPDFLink_GetAction',\n      1,\n    ));\n    (Module['_FPDFLink_Enumerate'] = createExportWrapper(\n      'FPDFLink_Enumerate',\n      3,\n    ));\n    (Module['_FPDFLink_GetAnnot'] = createExportWrapper(\n      'FPDFLink_GetAnnot',\n      2,\n    ));\n    (Module['_FPDFLink_GetAnnotRect'] = createExportWrapper(\n      'FPDFLink_GetAnnotRect',\n      2,\n    ));\n    (Module['_FPDFLink_CountQuadPoints'] = createExportWrapper(\n      'FPDFLink_CountQuadPoints',\n      1,\n    ));\n    (Module['_FPDFLink_GetQuadPoints'] = createExportWrapper(\n      'FPDFLink_GetQuadPoints',\n      3,\n    ));\n    (Module['_FPDF_GetPageAAction'] = createExportWrapper(\n      'FPDF_GetPageAAction',\n      2,\n    ));\n    (Module['_FPDF_GetFileIdentifier'] = createExportWrapper(\n      'FPDF_GetFileIdentifier',\n      4,\n    ));\n    (Module['_FPDF_GetMetaText'] = createExportWrapper(\n      'FPDF_GetMetaText',\n      4,\n    ));\n    (Module['_FPDF_GetPageLabel'] = createExportWrapper(\n      'FPDF_GetPageLabel',\n      4,\n    ));\n    (Module['_EPDF_SetMetaText'] = createExportWrapper(\n      'EPDF_SetMetaText',\n      3,\n    ));\n    (Module['_EPDF_HasMetaText'] = createExportWrapper(\n      'EPDF_HasMetaText',\n      2,\n    ));\n    (Module['_EPDF_GetMetaTrapped'] = createExportWrapper(\n      'EPDF_GetMetaTrapped',\n      1,\n    ));\n    (Module['_EPDF_SetMetaTrapped'] = createExportWrapper(\n      'EPDF_SetMetaTrapped',\n      2,\n    ));\n    (Module['_EPDF_GetMetaKeyCount'] = createExportWrapper(\n      'EPDF_GetMetaKeyCount',\n      2,\n    ));\n    (Module['_EPDF_GetMetaKeyName'] = createExportWrapper(\n      'EPDF_GetMetaKeyName',\n      5,\n    ));\n    (Module['_FPDFPageObj_NewImageObj'] = createExportWrapper(\n      'FPDFPageObj_NewImageObj',\n      1,\n    ));\n    (Module['_FPDFImageObj_LoadJpegFile'] = createExportWrapper(\n      'FPDFImageObj_LoadJpegFile',\n      4,\n    ));\n    (Module['_FPDFImageObj_LoadJpegFileInline'] =\n      createExportWrapper('FPDFImageObj_LoadJpegFileInline', 4));\n    (Module['_FPDFImageObj_SetMatrix'] = createExportWrapper(\n      'FPDFImageObj_SetMatrix',\n      7,\n    ));\n    (Module['_FPDFImageObj_SetBitmap'] = createExportWrapper(\n      'FPDFImageObj_SetBitmap',\n      4,\n    ));\n    (Module['_FPDFImageObj_GetBitmap'] = createExportWrapper(\n      'FPDFImageObj_GetBitmap',\n      1,\n    ));\n    (Module['_FPDFImageObj_GetRenderedBitmap'] =\n      createExportWrapper('FPDFImageObj_GetRenderedBitmap', 3));\n    (Module['_FPDFImageObj_GetImageDataDecoded'] =\n      createExportWrapper('FPDFImageObj_GetImageDataDecoded', 3));\n    (Module['_FPDFImageObj_GetImageDataRaw'] =\n      createExportWrapper('FPDFImageObj_GetImageDataRaw', 3));\n    (Module['_FPDFImageObj_GetImageFilterCount'] =\n      createExportWrapper('FPDFImageObj_GetImageFilterCount', 1));\n    (Module['_FPDFImageObj_GetImageFilter'] =\n      createExportWrapper('FPDFImageObj_GetImageFilter', 4));\n    (Module['_FPDFImageObj_GetImageMetadata'] =\n      createExportWrapper('FPDFImageObj_GetImageMetadata', 3));\n    (Module['_FPDFImageObj_GetImagePixelSize'] =\n      createExportWrapper('FPDFImageObj_GetImagePixelSize', 3));\n    (Module['_FPDFImageObj_GetIccProfileDataDecoded'] =\n      createExportWrapper('FPDFImageObj_GetIccProfileDataDecoded', 5));\n    (Module['_FPDF_CreateNewDocument'] = createExportWrapper(\n      'FPDF_CreateNewDocument',\n      0,\n    ));\n    (Module['_FPDFPage_Delete'] = createExportWrapper('FPDFPage_Delete', 2));\n    (Module['_FPDF_MovePages'] = createExportWrapper('FPDF_MovePages', 4));\n    (Module['_FPDFPage_New'] = createExportWrapper('FPDFPage_New', 4));\n    (Module['_FPDFPage_GetRotation'] = createExportWrapper(\n      'FPDFPage_GetRotation',\n      1,\n    ));\n    (Module['_FPDFPage_InsertObject'] = createExportWrapper(\n      'FPDFPage_InsertObject',\n      2,\n    ));\n    (Module['_FPDFPage_InsertObjectAtIndex'] =\n      createExportWrapper('FPDFPage_InsertObjectAtIndex', 3));\n    (Module['_FPDFPage_RemoveObject'] = createExportWrapper(\n      'FPDFPage_RemoveObject',\n      2,\n    ));\n    (Module['_FPDFPage_CountObjects'] = createExportWrapper(\n      'FPDFPage_CountObjects',\n      1,\n    ));\n    (Module['_FPDFPage_GetObject'] = createExportWrapper(\n      'FPDFPage_GetObject',\n      2,\n    ));\n    (Module['_FPDFPage_HasTransparency'] = createExportWrapper(\n      'FPDFPage_HasTransparency',\n      1,\n    ));\n    (Module['_FPDFPageObj_Destroy'] = createExportWrapper(\n      'FPDFPageObj_Destroy',\n      1,\n    ));\n    (Module['_FPDFPageObj_GetMarkedContentID'] =\n      createExportWrapper('FPDFPageObj_GetMarkedContentID', 1));\n    (Module['_FPDFPageObj_CountMarks'] = createExportWrapper(\n      'FPDFPageObj_CountMarks',\n      1,\n    ));\n    (Module['_FPDFPageObj_GetMark'] = createExportWrapper(\n      'FPDFPageObj_GetMark',\n      2,\n    ));\n    (Module['_FPDFPageObj_AddMark'] = createExportWrapper(\n      'FPDFPageObj_AddMark',\n      2,\n    ));\n    (Module['_FPDFPageObj_RemoveMark'] = createExportWrapper(\n      'FPDFPageObj_RemoveMark',\n      2,\n    ));\n    (Module['_FPDFPageObjMark_GetName'] = createExportWrapper(\n      'FPDFPageObjMark_GetName',\n      4,\n    ));\n    (Module['_FPDFPageObjMark_CountParams'] =\n      createExportWrapper('FPDFPageObjMark_CountParams', 1));\n    (Module['_FPDFPageObjMark_GetParamKey'] =\n      createExportWrapper('FPDFPageObjMark_GetParamKey', 5));\n    (Module['_FPDFPageObjMark_GetParamValueType'] =\n      createExportWrapper('FPDFPageObjMark_GetParamValueType', 2));\n    (Module['_FPDFPageObjMark_GetParamIntValue'] =\n      createExportWrapper('FPDFPageObjMark_GetParamIntValue', 3));\n    (Module['_FPDFPageObjMark_GetParamStringValue'] =\n      createExportWrapper('FPDFPageObjMark_GetParamStringValue', 5));\n    (Module['_FPDFPageObjMark_GetParamBlobValue'] =\n      createExportWrapper('FPDFPageObjMark_GetParamBlobValue', 5));\n    (Module['_FPDFPageObj_HasTransparency'] =\n      createExportWrapper('FPDFPageObj_HasTransparency', 1));\n    (Module['_FPDFPageObjMark_SetIntParam'] =\n      createExportWrapper('FPDFPageObjMark_SetIntParam', 5));\n    (Module['_FPDFPageObjMark_SetStringParam'] =\n      createExportWrapper('FPDFPageObjMark_SetStringParam', 5));\n    (Module['_FPDFPageObjMark_SetBlobParam'] =\n      createExportWrapper('FPDFPageObjMark_SetBlobParam', 6));\n    (Module['_FPDFPageObjMark_RemoveParam'] =\n      createExportWrapper('FPDFPageObjMark_RemoveParam', 3));\n    (Module['_FPDFPageObj_GetType'] = createExportWrapper(\n      'FPDFPageObj_GetType',\n      1,\n    ));\n    (Module['_FPDFPageObj_GetIsActive'] = createExportWrapper(\n      'FPDFPageObj_GetIsActive',\n      2,\n    ));\n    (Module['_FPDFPageObj_SetIsActive'] = createExportWrapper(\n      'FPDFPageObj_SetIsActive',\n      2,\n    ));\n    (Module['_FPDFPage_GenerateContent'] = createExportWrapper(\n      'FPDFPage_GenerateContent',\n      1,\n    ));\n    (Module['_FPDFPageObj_Transform'] = createExportWrapper(\n      'FPDFPageObj_Transform',\n      7,\n    ));\n    (Module['_FPDFPageObj_TransformF'] = createExportWrapper(\n      'FPDFPageObj_TransformF',\n      2,\n    ));\n    (Module['_FPDFPageObj_GetMatrix'] = createExportWrapper(\n      'FPDFPageObj_GetMatrix',\n      2,\n    ));\n    (Module['_FPDFPageObj_SetMatrix'] = createExportWrapper(\n      'FPDFPageObj_SetMatrix',\n      2,\n    ));\n    (Module['_FPDFPageObj_SetBlendMode'] = createExportWrapper(\n      'FPDFPageObj_SetBlendMode',\n      2,\n    ));\n    (Module['_FPDFPage_TransformAnnots'] = createExportWrapper(\n      'FPDFPage_TransformAnnots',\n      7,\n    ));\n    (Module['_FPDFPage_SetRotation'] = createExportWrapper(\n      'FPDFPage_SetRotation',\n      2,\n    ));\n    (Module['_FPDFPageObj_SetFillColor'] = createExportWrapper(\n      'FPDFPageObj_SetFillColor',\n      5,\n    ));\n    (Module['_FPDFPageObj_GetFillColor'] = createExportWrapper(\n      'FPDFPageObj_GetFillColor',\n      5,\n    ));\n    (Module['_FPDFPageObj_GetBounds'] = createExportWrapper(\n      'FPDFPageObj_GetBounds',\n      5,\n    ));\n    (Module['_FPDFPageObj_GetRotatedBounds'] =\n      createExportWrapper('FPDFPageObj_GetRotatedBounds', 2));\n    (Module['_FPDFPageObj_SetStrokeColor'] = createExportWrapper(\n      'FPDFPageObj_SetStrokeColor',\n      5,\n    ));\n    (Module['_FPDFPageObj_GetStrokeColor'] = createExportWrapper(\n      'FPDFPageObj_GetStrokeColor',\n      5,\n    ));\n    (Module['_FPDFPageObj_SetStrokeWidth'] = createExportWrapper(\n      'FPDFPageObj_SetStrokeWidth',\n      2,\n    ));\n    (Module['_FPDFPageObj_GetStrokeWidth'] = createExportWrapper(\n      'FPDFPageObj_GetStrokeWidth',\n      2,\n    ));\n    (Module['_FPDFPageObj_GetLineJoin'] = createExportWrapper(\n      'FPDFPageObj_GetLineJoin',\n      1,\n    ));\n    (Module['_FPDFPageObj_SetLineJoin'] = createExportWrapper(\n      'FPDFPageObj_SetLineJoin',\n      2,\n    ));\n    (Module['_FPDFPageObj_GetLineCap'] = createExportWrapper(\n      'FPDFPageObj_GetLineCap',\n      1,\n    ));\n    (Module['_FPDFPageObj_SetLineCap'] = createExportWrapper(\n      'FPDFPageObj_SetLineCap',\n      2,\n    ));\n    (Module['_FPDFPageObj_GetDashPhase'] = createExportWrapper(\n      'FPDFPageObj_GetDashPhase',\n      2,\n    ));\n    (Module['_FPDFPageObj_SetDashPhase'] = createExportWrapper(\n      'FPDFPageObj_SetDashPhase',\n      2,\n    ));\n    (Module['_FPDFPageObj_GetDashCount'] = createExportWrapper(\n      'FPDFPageObj_GetDashCount',\n      1,\n    ));\n    (Module['_FPDFPageObj_GetDashArray'] = createExportWrapper(\n      'FPDFPageObj_GetDashArray',\n      3,\n    ));\n    (Module['_FPDFPageObj_SetDashArray'] = createExportWrapper(\n      'FPDFPageObj_SetDashArray',\n      4,\n    ));\n    (Module['_FPDFFormObj_CountObjects'] = createExportWrapper(\n      'FPDFFormObj_CountObjects',\n      1,\n    ));\n    (Module['_FPDFFormObj_GetObject'] = createExportWrapper(\n      'FPDFFormObj_GetObject',\n      2,\n    ));\n    (Module['_FPDFFormObj_RemoveObject'] = createExportWrapper(\n      'FPDFFormObj_RemoveObject',\n      2,\n    ));\n    (Module['_FPDFPageObj_CreateNewPath'] = createExportWrapper(\n      'FPDFPageObj_CreateNewPath',\n      2,\n    ));\n    (Module['_FPDFPageObj_CreateNewRect'] = createExportWrapper(\n      'FPDFPageObj_CreateNewRect',\n      4,\n    ));\n    (Module['_FPDFPath_CountSegments'] = createExportWrapper(\n      'FPDFPath_CountSegments',\n      1,\n    ));\n    (Module['_FPDFPath_GetPathSegment'] = createExportWrapper(\n      'FPDFPath_GetPathSegment',\n      2,\n    ));\n    (Module['_FPDFPath_MoveTo'] = createExportWrapper('FPDFPath_MoveTo', 3));\n    (Module['_FPDFPath_LineTo'] = createExportWrapper('FPDFPath_LineTo', 3));\n    (Module['_FPDFPath_BezierTo'] = createExportWrapper(\n      'FPDFPath_BezierTo',\n      7,\n    ));\n    (Module['_FPDFPath_Close'] = createExportWrapper('FPDFPath_Close', 1));\n    (Module['_FPDFPath_SetDrawMode'] = createExportWrapper(\n      'FPDFPath_SetDrawMode',\n      3,\n    ));\n    (Module['_FPDFPath_GetDrawMode'] = createExportWrapper(\n      'FPDFPath_GetDrawMode',\n      3,\n    ));\n    (Module['_FPDFPathSegment_GetPoint'] = createExportWrapper(\n      'FPDFPathSegment_GetPoint',\n      3,\n    ));\n    (Module['_FPDFPathSegment_GetType'] = createExportWrapper(\n      'FPDFPathSegment_GetType',\n      1,\n    ));\n    (Module['_FPDFPathSegment_GetClose'] = createExportWrapper(\n      'FPDFPathSegment_GetClose',\n      1,\n    ));\n    (Module['_FPDFPageObj_NewTextObj'] = createExportWrapper(\n      'FPDFPageObj_NewTextObj',\n      3,\n    ));\n    (Module['_FPDFText_SetText'] = createExportWrapper(\n      'FPDFText_SetText',\n      2,\n    ));\n    (Module['_FPDFText_SetCharcodes'] = createExportWrapper(\n      'FPDFText_SetCharcodes',\n      3,\n    ));\n    (Module['_FPDFText_LoadFont'] = createExportWrapper(\n      'FPDFText_LoadFont',\n      5,\n    ));\n    (Module['_FPDFText_LoadStandardFont'] = createExportWrapper(\n      'FPDFText_LoadStandardFont',\n      2,\n    ));\n    (Module['_FPDFText_LoadCidType2Font'] = createExportWrapper(\n      'FPDFText_LoadCidType2Font',\n      6,\n    ));\n    (Module['_FPDFTextObj_GetFontSize'] = createExportWrapper(\n      'FPDFTextObj_GetFontSize',\n      2,\n    ));\n    (Module['_FPDFTextObj_GetText'] = createExportWrapper(\n      'FPDFTextObj_GetText',\n      4,\n    ));\n    (Module['_FPDFTextObj_GetRenderedBitmap'] =\n      createExportWrapper('FPDFTextObj_GetRenderedBitmap', 4));\n    (Module['_FPDFFont_Close'] = createExportWrapper('FPDFFont_Close', 1));\n    (Module['_FPDFPageObj_CreateTextObj'] = createExportWrapper(\n      'FPDFPageObj_CreateTextObj',\n      3,\n    ));\n    (Module['_FPDFTextObj_GetTextRenderMode'] =\n      createExportWrapper('FPDFTextObj_GetTextRenderMode', 1));\n    (Module['_FPDFTextObj_SetTextRenderMode'] =\n      createExportWrapper('FPDFTextObj_SetTextRenderMode', 2));\n    (Module['_FPDFTextObj_GetFont'] = createExportWrapper(\n      'FPDFTextObj_GetFont',\n      1,\n    ));\n    (Module['_FPDFFont_GetBaseFontName'] = createExportWrapper(\n      'FPDFFont_GetBaseFontName',\n      3,\n    ));\n    (Module['_FPDFFont_GetFamilyName'] = createExportWrapper(\n      'FPDFFont_GetFamilyName',\n      3,\n    ));\n    (Module['_FPDFFont_GetFontData'] = createExportWrapper(\n      'FPDFFont_GetFontData',\n      4,\n    ));\n    (Module['_FPDFFont_GetIsEmbedded'] = createExportWrapper(\n      'FPDFFont_GetIsEmbedded',\n      1,\n    ));\n    (Module['_FPDFFont_GetFlags'] = createExportWrapper(\n      'FPDFFont_GetFlags',\n      1,\n    ));\n    (Module['_FPDFFont_GetWeight'] = createExportWrapper(\n      'FPDFFont_GetWeight',\n      1,\n    ));\n    (Module['_FPDFFont_GetItalicAngle'] = createExportWrapper(\n      'FPDFFont_GetItalicAngle',\n      2,\n    ));\n    (Module['_FPDFFont_GetAscent'] = createExportWrapper(\n      'FPDFFont_GetAscent',\n      3,\n    ));\n    (Module['_FPDFFont_GetDescent'] = createExportWrapper(\n      'FPDFFont_GetDescent',\n      3,\n    ));\n    (Module['_FPDFFont_GetGlyphWidth'] = createExportWrapper(\n      'FPDFFont_GetGlyphWidth',\n      4,\n    ));\n    (Module['_FPDFFont_GetGlyphPath'] = createExportWrapper(\n      'FPDFFont_GetGlyphPath',\n      3,\n    ));\n    (Module['_FPDFGlyphPath_CountGlyphSegments'] =\n      createExportWrapper('FPDFGlyphPath_CountGlyphSegments', 1));\n    (Module['_FPDFGlyphPath_GetGlyphPathSegment'] =\n      createExportWrapper('FPDFGlyphPath_GetGlyphPathSegment', 2));\n    (Module['_EPDFText_RedactInRect'] = createExportWrapper(\n      'EPDFText_RedactInRect',\n      4,\n    ));\n    (Module['_EPDFText_RedactInQuads'] = createExportWrapper(\n      'EPDFText_RedactInQuads',\n      5,\n    ));\n    (Module['_FPDFDoc_GetPageMode'] = createExportWrapper(\n      'FPDFDoc_GetPageMode',\n      1,\n    ));\n    (Module['_FPDFPage_Flatten'] = createExportWrapper(\n      'FPDFPage_Flatten',\n      2,\n    ));\n    (Module['_FPDFPage_HasFormFieldAtPoint'] =\n      createExportWrapper('FPDFPage_HasFormFieldAtPoint', 4));\n    (Module['_FPDFPage_FormFieldZOrderAtPoint'] =\n      createExportWrapper('FPDFPage_FormFieldZOrderAtPoint', 4));\n    (Module['_malloc'] = createExportWrapper('malloc', 1));\n    (Module['_free'] = createExportWrapper('free', 1));\n    (Module['_FORM_OnMouseMove'] = createExportWrapper(\n      'FORM_OnMouseMove',\n      5,\n    ));\n    (Module['_FORM_OnMouseWheel'] = createExportWrapper(\n      'FORM_OnMouseWheel',\n      6,\n    ));\n    (Module['_FORM_OnFocus'] = createExportWrapper('FORM_OnFocus', 5));\n    (Module['_FORM_OnLButtonDown'] = createExportWrapper(\n      'FORM_OnLButtonDown',\n      5,\n    ));\n    (Module['_FORM_OnLButtonUp'] = createExportWrapper(\n      'FORM_OnLButtonUp',\n      5,\n    ));\n    (Module['_FORM_OnLButtonDoubleClick'] = createExportWrapper(\n      'FORM_OnLButtonDoubleClick',\n      5,\n    ));\n    (Module['_FORM_OnRButtonDown'] = createExportWrapper(\n      'FORM_OnRButtonDown',\n      5,\n    ));\n    (Module['_FORM_OnRButtonUp'] = createExportWrapper(\n      'FORM_OnRButtonUp',\n      5,\n    ));\n    (Module['_FORM_OnKeyDown'] = createExportWrapper('FORM_OnKeyDown', 4));\n    (Module['_FORM_OnKeyUp'] = createExportWrapper('FORM_OnKeyUp', 4));\n    (Module['_FORM_OnChar'] = createExportWrapper('FORM_OnChar', 4));\n    (Module['_FORM_GetFocusedText'] = createExportWrapper(\n      'FORM_GetFocusedText',\n      4,\n    ));\n    (Module['_FORM_GetSelectedText'] = createExportWrapper(\n      'FORM_GetSelectedText',\n      4,\n    ));\n    (Module['_FORM_ReplaceAndKeepSelection'] =\n      createExportWrapper('FORM_ReplaceAndKeepSelection', 3));\n    (Module['_FORM_ReplaceSelection'] = createExportWrapper(\n      'FORM_ReplaceSelection',\n      3,\n    ));\n    (Module['_FORM_SelectAllText'] = createExportWrapper(\n      'FORM_SelectAllText',\n      2,\n    ));\n    (Module['_FORM_CanUndo'] = createExportWrapper('FORM_CanUndo', 2));\n    (Module['_FORM_CanRedo'] = createExportWrapper('FORM_CanRedo', 2));\n    (Module['_FORM_Undo'] = createExportWrapper('FORM_Undo', 2));\n    (Module['_FORM_Redo'] = createExportWrapper('FORM_Redo', 2));\n    (Module['_FORM_ForceToKillFocus'] = createExportWrapper(\n      'FORM_ForceToKillFocus',\n      1,\n    ));\n    (Module['_FORM_GetFocusedAnnot'] = createExportWrapper(\n      'FORM_GetFocusedAnnot',\n      3,\n    ));\n    (Module['_FORM_SetFocusedAnnot'] = createExportWrapper(\n      'FORM_SetFocusedAnnot',\n      2,\n    ));\n    (Module['_FPDF_FFLDraw'] = createExportWrapper('FPDF_FFLDraw', 9));\n    (Module['_FPDF_SetFormFieldHighlightColor'] =\n      createExportWrapper('FPDF_SetFormFieldHighlightColor', 3));\n    (Module['_FPDF_SetFormFieldHighlightAlpha'] =\n      createExportWrapper('FPDF_SetFormFieldHighlightAlpha', 2));\n    (Module['_FPDF_RemoveFormFieldHighlight'] =\n      createExportWrapper('FPDF_RemoveFormFieldHighlight', 1));\n    (Module['_FORM_OnAfterLoadPage'] = createExportWrapper(\n      'FORM_OnAfterLoadPage',\n      2,\n    ));\n    (Module['_FORM_OnBeforeClosePage'] = createExportWrapper(\n      'FORM_OnBeforeClosePage',\n      2,\n    ));\n    (Module['_FORM_DoDocumentJSAction'] = createExportWrapper(\n      'FORM_DoDocumentJSAction',\n      1,\n    ));\n    (Module['_FORM_DoDocumentOpenAction'] = createExportWrapper(\n      'FORM_DoDocumentOpenAction',\n      1,\n    ));\n    (Module['_FORM_DoDocumentAAction'] = createExportWrapper(\n      'FORM_DoDocumentAAction',\n      2,\n    ));\n    (Module['_FORM_DoPageAAction'] = createExportWrapper(\n      'FORM_DoPageAAction',\n      3,\n    ));\n    (Module['_FORM_SetIndexSelected'] = createExportWrapper(\n      'FORM_SetIndexSelected',\n      4,\n    ));\n    (Module['_FORM_IsIndexSelected'] = createExportWrapper(\n      'FORM_IsIndexSelected',\n      3,\n    ));\n    (Module['_FPDFDoc_GetJavaScriptActionCount'] =\n      createExportWrapper('FPDFDoc_GetJavaScriptActionCount', 1));\n    (Module['_FPDFDoc_GetJavaScriptAction'] =\n      createExportWrapper('FPDFDoc_GetJavaScriptAction', 2));\n    (Module['_FPDFDoc_CloseJavaScriptAction'] =\n      createExportWrapper('FPDFDoc_CloseJavaScriptAction', 1));\n    (Module['_FPDFJavaScriptAction_GetName'] =\n      createExportWrapper('FPDFJavaScriptAction_GetName', 3));\n    (Module['_FPDFJavaScriptAction_GetScript'] =\n      createExportWrapper('FPDFJavaScriptAction_GetScript', 3));\n    (Module['_FPDF_ImportPagesByIndex'] = createExportWrapper(\n      'FPDF_ImportPagesByIndex',\n      5,\n    ));\n    (Module['_FPDF_ImportPages'] = createExportWrapper(\n      'FPDF_ImportPages',\n      4,\n    ));\n    (Module['_FPDF_ImportNPagesToOne'] = createExportWrapper(\n      'FPDF_ImportNPagesToOne',\n      5,\n    ));\n    (Module['_FPDF_NewXObjectFromPage'] = createExportWrapper(\n      'FPDF_NewXObjectFromPage',\n      3,\n    ));\n    (Module['_FPDF_CloseXObject'] = createExportWrapper(\n      'FPDF_CloseXObject',\n      1,\n    ));\n    (Module['_FPDF_NewFormObjectFromXObject'] =\n      createExportWrapper('FPDF_NewFormObjectFromXObject', 1));\n    (Module['_FPDF_CopyViewerPreferences'] = createExportWrapper(\n      'FPDF_CopyViewerPreferences',\n      2,\n    ));\n    (Module[\n      '_FPDF_RenderPageBitmapWithColorScheme_Start'\n    ] = createExportWrapper('FPDF_RenderPageBitmapWithColorScheme_Start', 10));\n    (Module['_FPDF_RenderPageBitmap_Start'] =\n      createExportWrapper('FPDF_RenderPageBitmap_Start', 9));\n    (Module['_FPDF_RenderPage_Continue'] = createExportWrapper(\n      'FPDF_RenderPage_Continue',\n      2,\n    ));\n    (Module['_FPDF_RenderPage_Close'] = createExportWrapper(\n      'FPDF_RenderPage_Close',\n      1,\n    ));\n    (Module['_FPDF_SaveWithVersion'] = createExportWrapper(\n      'FPDF_SaveWithVersion',\n      4,\n    ));\n    (Module['_FPDFText_GetCharIndexFromTextIndex'] =\n      createExportWrapper('FPDFText_GetCharIndexFromTextIndex', 2));\n    (Module['_FPDFText_GetTextIndexFromCharIndex'] =\n      createExportWrapper('FPDFText_GetTextIndexFromCharIndex', 2));\n    (Module['_FPDF_GetSignatureCount'] = createExportWrapper(\n      'FPDF_GetSignatureCount',\n      1,\n    ));\n    (Module['_FPDF_GetSignatureObject'] = createExportWrapper(\n      'FPDF_GetSignatureObject',\n      2,\n    ));\n    (Module['_FPDFSignatureObj_GetContents'] =\n      createExportWrapper('FPDFSignatureObj_GetContents', 3));\n    (Module['_FPDFSignatureObj_GetByteRange'] =\n      createExportWrapper('FPDFSignatureObj_GetByteRange', 3));\n    (Module['_FPDFSignatureObj_GetSubFilter'] =\n      createExportWrapper('FPDFSignatureObj_GetSubFilter', 3));\n    (Module['_FPDFSignatureObj_GetReason'] = createExportWrapper(\n      'FPDFSignatureObj_GetReason',\n      3,\n    ));\n    (Module['_FPDFSignatureObj_GetTime'] = createExportWrapper(\n      'FPDFSignatureObj_GetTime',\n      3,\n    ));\n    (Module['_FPDFSignatureObj_GetDocMDPPermission'] =\n      createExportWrapper('FPDFSignatureObj_GetDocMDPPermission', 1));\n    (Module['_FPDF_StructTree_GetForPage'] = createExportWrapper(\n      'FPDF_StructTree_GetForPage',\n      1,\n    ));\n    (Module['_FPDF_StructTree_Close'] = createExportWrapper(\n      'FPDF_StructTree_Close',\n      1,\n    ));\n    (Module['_FPDF_StructTree_CountChildren'] =\n      createExportWrapper('FPDF_StructTree_CountChildren', 1));\n    (Module['_FPDF_StructTree_GetChildAtIndex'] =\n      createExportWrapper('FPDF_StructTree_GetChildAtIndex', 2));\n    (Module['_FPDF_StructElement_GetAltText'] =\n      createExportWrapper('FPDF_StructElement_GetAltText', 3));\n    (Module['_FPDF_StructElement_GetActualText'] =\n      createExportWrapper('FPDF_StructElement_GetActualText', 3));\n    (Module['_FPDF_StructElement_GetID'] = createExportWrapper(\n      'FPDF_StructElement_GetID',\n      3,\n    ));\n    (Module['_FPDF_StructElement_GetLang'] = createExportWrapper(\n      'FPDF_StructElement_GetLang',\n      3,\n    ));\n    (Module['_FPDF_StructElement_GetAttributeCount'] =\n      createExportWrapper('FPDF_StructElement_GetAttributeCount', 1));\n    (Module[\n      '_FPDF_StructElement_GetAttributeAtIndex'\n    ] = createExportWrapper('FPDF_StructElement_GetAttributeAtIndex', 2));\n    (Module['_FPDF_StructElement_GetStringAttribute'] =\n      createExportWrapper('FPDF_StructElement_GetStringAttribute', 4));\n    (Module['_FPDF_StructElement_GetMarkedContentID'] =\n      createExportWrapper('FPDF_StructElement_GetMarkedContentID', 1));\n    (Module['_FPDF_StructElement_GetType'] = createExportWrapper(\n      'FPDF_StructElement_GetType',\n      3,\n    ));\n    (Module['_FPDF_StructElement_GetObjType'] =\n      createExportWrapper('FPDF_StructElement_GetObjType', 3));\n    (Module['_FPDF_StructElement_GetTitle'] =\n      createExportWrapper('FPDF_StructElement_GetTitle', 3));\n    (Module['_FPDF_StructElement_CountChildren'] =\n      createExportWrapper('FPDF_StructElement_CountChildren', 1));\n    (Module['_FPDF_StructElement_GetChildAtIndex'] =\n      createExportWrapper('FPDF_StructElement_GetChildAtIndex', 2));\n    (Module[\n      '_FPDF_StructElement_GetChildMarkedContentID'\n    ] = createExportWrapper('FPDF_StructElement_GetChildMarkedContentID', 2));\n    (Module['_FPDF_StructElement_GetParent'] =\n      createExportWrapper('FPDF_StructElement_GetParent', 1));\n    (Module['_FPDF_StructElement_Attr_GetCount'] =\n      createExportWrapper('FPDF_StructElement_Attr_GetCount', 1));\n    (Module['_FPDF_StructElement_Attr_GetName'] =\n      createExportWrapper('FPDF_StructElement_Attr_GetName', 5));\n    (Module['_FPDF_StructElement_Attr_GetValue'] =\n      createExportWrapper('FPDF_StructElement_Attr_GetValue', 2));\n    (Module['_FPDF_StructElement_Attr_GetType'] =\n      createExportWrapper('FPDF_StructElement_Attr_GetType', 1));\n    (Module[\n      '_FPDF_StructElement_Attr_GetBooleanValue'\n    ] = createExportWrapper('FPDF_StructElement_Attr_GetBooleanValue', 2));\n    (Module[\n      '_FPDF_StructElement_Attr_GetNumberValue'\n    ] = createExportWrapper('FPDF_StructElement_Attr_GetNumberValue', 2));\n    (Module[\n      '_FPDF_StructElement_Attr_GetStringValue'\n    ] = createExportWrapper('FPDF_StructElement_Attr_GetStringValue', 4));\n    (Module['_FPDF_StructElement_Attr_GetBlobValue'] =\n      createExportWrapper('FPDF_StructElement_Attr_GetBlobValue', 4));\n    (Module['_FPDF_StructElement_Attr_CountChildren'] =\n      createExportWrapper('FPDF_StructElement_Attr_CountChildren', 1));\n    (Module[\n      '_FPDF_StructElement_Attr_GetChildAtIndex'\n    ] = createExportWrapper('FPDF_StructElement_Attr_GetChildAtIndex', 2));\n    (Module[\n      '_FPDF_StructElement_GetMarkedContentIdCount'\n    ] = createExportWrapper('FPDF_StructElement_GetMarkedContentIdCount', 1));\n    (Module[\n      '_FPDF_StructElement_GetMarkedContentIdAtIndex'\n    ] = createExportWrapper('FPDF_StructElement_GetMarkedContentIdAtIndex', 2));\n    (Module['_FPDF_AddInstalledFont'] = createExportWrapper(\n      'FPDF_AddInstalledFont',\n      3,\n    ));\n    (Module['_FPDF_SetSystemFontInfo'] = createExportWrapper(\n      'FPDF_SetSystemFontInfo',\n      1,\n    ));\n    (Module['_FPDF_GetDefaultTTFMap'] = createExportWrapper(\n      'FPDF_GetDefaultTTFMap',\n      0,\n    ));\n    (Module['_FPDF_GetDefaultTTFMapCount'] = createExportWrapper(\n      'FPDF_GetDefaultTTFMapCount',\n      0,\n    ));\n    (Module['_FPDF_GetDefaultTTFMapEntry'] = createExportWrapper(\n      'FPDF_GetDefaultTTFMapEntry',\n      1,\n    ));\n    (Module['_FPDF_GetDefaultSystemFontInfo'] =\n      createExportWrapper('FPDF_GetDefaultSystemFontInfo', 0));\n    (Module['_FPDF_FreeDefaultSystemFontInfo'] =\n      createExportWrapper('FPDF_FreeDefaultSystemFontInfo', 1));\n    (Module['_FPDFText_LoadPage'] = createExportWrapper(\n      'FPDFText_LoadPage',\n      1,\n    ));\n    (Module['_FPDFText_ClosePage'] = createExportWrapper(\n      'FPDFText_ClosePage',\n      1,\n    ));\n    (Module['_FPDFText_CountChars'] = createExportWrapper(\n      'FPDFText_CountChars',\n      1,\n    ));\n    (Module['_FPDFText_GetUnicode'] = createExportWrapper(\n      'FPDFText_GetUnicode',\n      2,\n    ));\n    (Module['_FPDFText_GetTextObject'] = createExportWrapper(\n      'FPDFText_GetTextObject',\n      2,\n    ));\n    (Module['_FPDFText_IsGenerated'] = createExportWrapper(\n      'FPDFText_IsGenerated',\n      2,\n    ));\n    (Module['_FPDFText_IsHyphen'] = createExportWrapper(\n      'FPDFText_IsHyphen',\n      2,\n    ));\n    (Module['_FPDFText_HasUnicodeMapError'] =\n      createExportWrapper('FPDFText_HasUnicodeMapError', 2));\n    (Module['_FPDFText_GetFontSize'] = createExportWrapper(\n      'FPDFText_GetFontSize',\n      2,\n    ));\n    (Module['_FPDFText_GetFontInfo'] = createExportWrapper(\n      'FPDFText_GetFontInfo',\n      5,\n    ));\n    (Module['_FPDFText_GetFontWeight'] = createExportWrapper(\n      'FPDFText_GetFontWeight',\n      2,\n    ));\n    (Module['_FPDFText_GetFillColor'] = createExportWrapper(\n      'FPDFText_GetFillColor',\n      6,\n    ));\n    (Module['_FPDFText_GetStrokeColor'] = createExportWrapper(\n      'FPDFText_GetStrokeColor',\n      6,\n    ));\n    (Module['_FPDFText_GetCharAngle'] = createExportWrapper(\n      'FPDFText_GetCharAngle',\n      2,\n    ));\n    (Module['_FPDFText_GetCharBox'] = createExportWrapper(\n      'FPDFText_GetCharBox',\n      6,\n    ));\n    (Module['_FPDFText_GetLooseCharBox'] = createExportWrapper(\n      'FPDFText_GetLooseCharBox',\n      3,\n    ));\n    (Module['_FPDFText_GetMatrix'] = createExportWrapper(\n      'FPDFText_GetMatrix',\n      3,\n    ));\n    (Module['_FPDFText_GetCharOrigin'] = createExportWrapper(\n      'FPDFText_GetCharOrigin',\n      4,\n    ));\n    (Module['_FPDFText_GetCharIndexAtPos'] = createExportWrapper(\n      'FPDFText_GetCharIndexAtPos',\n      5,\n    ));\n    (Module['_FPDFText_GetText'] = createExportWrapper(\n      'FPDFText_GetText',\n      4,\n    ));\n    (Module['_FPDFText_CountRects'] = createExportWrapper(\n      'FPDFText_CountRects',\n      3,\n    ));\n    (Module['_FPDFText_GetRect'] = createExportWrapper(\n      'FPDFText_GetRect',\n      6,\n    ));\n    (Module['_FPDFText_GetBoundedText'] = createExportWrapper(\n      'FPDFText_GetBoundedText',\n      7,\n    ));\n    (Module['_FPDFText_FindStart'] = createExportWrapper(\n      'FPDFText_FindStart',\n      4,\n    ));\n    (Module['_FPDFText_FindNext'] = createExportWrapper(\n      'FPDFText_FindNext',\n      1,\n    ));\n    (Module['_FPDFText_FindPrev'] = createExportWrapper(\n      'FPDFText_FindPrev',\n      1,\n    ));\n    (Module['_FPDFText_GetSchResultIndex'] = createExportWrapper(\n      'FPDFText_GetSchResultIndex',\n      1,\n    ));\n    (Module['_FPDFText_GetSchCount'] = createExportWrapper(\n      'FPDFText_GetSchCount',\n      1,\n    ));\n    (Module['_FPDFText_FindClose'] = createExportWrapper(\n      'FPDFText_FindClose',\n      1,\n    ));\n    (Module['_FPDFLink_LoadWebLinks'] = createExportWrapper(\n      'FPDFLink_LoadWebLinks',\n      1,\n    ));\n    (Module['_FPDFLink_CountWebLinks'] = createExportWrapper(\n      'FPDFLink_CountWebLinks',\n      1,\n    ));\n    (Module['_FPDFLink_GetURL'] = createExportWrapper('FPDFLink_GetURL', 4));\n    (Module['_FPDFLink_CountRects'] = createExportWrapper(\n      'FPDFLink_CountRects',\n      2,\n    ));\n    (Module['_FPDFLink_GetRect'] = createExportWrapper(\n      'FPDFLink_GetRect',\n      7,\n    ));\n    (Module['_FPDFLink_GetTextRange'] = createExportWrapper(\n      'FPDFLink_GetTextRange',\n      4,\n    ));\n    (Module['_FPDFLink_CloseWebLinks'] = createExportWrapper(\n      'FPDFLink_CloseWebLinks',\n      1,\n    ));\n    (Module['_FPDFPage_GetDecodedThumbnailData'] =\n      createExportWrapper('FPDFPage_GetDecodedThumbnailData', 3));\n    (Module['_FPDFPage_GetRawThumbnailData'] =\n      createExportWrapper('FPDFPage_GetRawThumbnailData', 3));\n    (Module['_FPDFPage_GetThumbnailAsBitmap'] =\n      createExportWrapper('FPDFPage_GetThumbnailAsBitmap', 1));\n    (Module['_FPDFPage_SetMediaBox'] = createExportWrapper(\n      'FPDFPage_SetMediaBox',\n      5,\n    ));\n    (Module['_FPDFPage_SetCropBox'] = createExportWrapper(\n      'FPDFPage_SetCropBox',\n      5,\n    ));\n    (Module['_FPDFPage_SetBleedBox'] = createExportWrapper(\n      'FPDFPage_SetBleedBox',\n      5,\n    ));\n    (Module['_FPDFPage_SetTrimBox'] = createExportWrapper(\n      'FPDFPage_SetTrimBox',\n      5,\n    ));\n    (Module['_FPDFPage_SetArtBox'] = createExportWrapper(\n      'FPDFPage_SetArtBox',\n      5,\n    ));\n    (Module['_FPDFPage_GetMediaBox'] = createExportWrapper(\n      'FPDFPage_GetMediaBox',\n      5,\n    ));\n    (Module['_FPDFPage_GetCropBox'] = createExportWrapper(\n      'FPDFPage_GetCropBox',\n      5,\n    ));\n    (Module['_FPDFPage_GetBleedBox'] = createExportWrapper(\n      'FPDFPage_GetBleedBox',\n      5,\n    ));\n    (Module['_FPDFPage_GetTrimBox'] = createExportWrapper(\n      'FPDFPage_GetTrimBox',\n      5,\n    ));\n    (Module['_FPDFPage_GetArtBox'] = createExportWrapper(\n      'FPDFPage_GetArtBox',\n      5,\n    ));\n    (Module['_FPDFPage_TransFormWithClip'] = createExportWrapper(\n      'FPDFPage_TransFormWithClip',\n      3,\n    ));\n    (Module['_FPDFPageObj_TransformClipPath'] =\n      createExportWrapper('FPDFPageObj_TransformClipPath', 7));\n    (Module['_FPDFPageObj_GetClipPath'] = createExportWrapper(\n      'FPDFPageObj_GetClipPath',\n      1,\n    ));\n    (Module['_FPDFClipPath_CountPaths'] = createExportWrapper(\n      'FPDFClipPath_CountPaths',\n      1,\n    ));\n    (Module['_FPDFClipPath_CountPathSegments'] =\n      createExportWrapper('FPDFClipPath_CountPathSegments', 2));\n    (Module['_FPDFClipPath_GetPathSegment'] =\n      createExportWrapper('FPDFClipPath_GetPathSegment', 3));\n    (Module['_FPDF_CreateClipPath'] = createExportWrapper(\n      'FPDF_CreateClipPath',\n      4,\n    ));\n    (Module['_FPDF_DestroyClipPath'] = createExportWrapper(\n      'FPDF_DestroyClipPath',\n      1,\n    ));\n    (Module['_FPDFPage_InsertClipPath'] = createExportWrapper(\n      'FPDFPage_InsertClipPath',\n      2,\n    ));\n    (Module['_FPDF_InitLibrary'] = createExportWrapper(\n      'FPDF_InitLibrary',\n      0,\n    ));\n    (Module['_FPDF_DestroyLibrary'] = createExportWrapper(\n      'FPDF_DestroyLibrary',\n      0,\n    ));\n    (Module['_FPDF_SetSandBoxPolicy'] = createExportWrapper(\n      'FPDF_SetSandBoxPolicy',\n      2,\n    ));\n    (Module['_FPDF_LoadDocument'] = createExportWrapper(\n      'FPDF_LoadDocument',\n      2,\n    ));\n    (Module['_FPDF_GetFormType'] = createExportWrapper(\n      'FPDF_GetFormType',\n      1,\n    ));\n    (Module['_FPDF_LoadXFA'] = createExportWrapper('FPDF_LoadXFA', 1));\n    (Module['_FPDF_LoadMemDocument'] = createExportWrapper(\n      'FPDF_LoadMemDocument',\n      3,\n    ));\n    (Module['_FPDF_LoadMemDocument64'] = createExportWrapper(\n      'FPDF_LoadMemDocument64',\n      3,\n    ));\n    (Module['_FPDF_LoadCustomDocument'] = createExportWrapper(\n      'FPDF_LoadCustomDocument',\n      2,\n    ));\n    (Module['_FPDF_GetFileVersion'] = createExportWrapper(\n      'FPDF_GetFileVersion',\n      2,\n    ));\n    (Module[\n      '_FPDF_DocumentHasValidCrossReferenceTable'\n    ] = createExportWrapper('FPDF_DocumentHasValidCrossReferenceTable', 1));\n    (Module['_FPDF_GetDocPermissions'] = createExportWrapper(\n      'FPDF_GetDocPermissions',\n      1,\n    ));\n    (Module['_FPDF_GetDocUserPermissions'] = createExportWrapper(\n      'FPDF_GetDocUserPermissions',\n      1,\n    ));\n    (Module['_FPDF_GetSecurityHandlerRevision'] =\n      createExportWrapper('FPDF_GetSecurityHandlerRevision', 1));\n    (Module['_FPDF_GetPageCount'] = createExportWrapper(\n      'FPDF_GetPageCount',\n      1,\n    ));\n    (Module['_FPDF_LoadPage'] = createExportWrapper('FPDF_LoadPage', 2));\n    (Module['_FPDF_GetPageWidthF'] = createExportWrapper(\n      'FPDF_GetPageWidthF',\n      1,\n    ));\n    (Module['_FPDF_GetPageWidth'] = createExportWrapper(\n      'FPDF_GetPageWidth',\n      1,\n    ));\n    (Module['_FPDF_GetPageHeightF'] = createExportWrapper(\n      'FPDF_GetPageHeightF',\n      1,\n    ));\n    (Module['_FPDF_GetPageHeight'] = createExportWrapper(\n      'FPDF_GetPageHeight',\n      1,\n    ));\n    (Module['_FPDF_GetPageBoundingBox'] = createExportWrapper(\n      'FPDF_GetPageBoundingBox',\n      2,\n    ));\n    (Module['_FPDF_RenderPageBitmap'] = createExportWrapper(\n      'FPDF_RenderPageBitmap',\n      8,\n    ));\n    (Module['_FPDF_RenderPageBitmapWithMatrix'] =\n      createExportWrapper('FPDF_RenderPageBitmapWithMatrix', 5));\n    (Module['_EPDF_RenderAnnotBitmap'] = createExportWrapper(\n      'EPDF_RenderAnnotBitmap',\n      6,\n    ));\n    (Module['_FPDF_ClosePage'] = createExportWrapper('FPDF_ClosePage', 1));\n    (Module['_FPDF_CloseDocument'] = createExportWrapper(\n      'FPDF_CloseDocument',\n      1,\n    ));\n    (Module['_FPDF_GetLastError'] = createExportWrapper(\n      'FPDF_GetLastError',\n      0,\n    ));\n    (Module['_FPDF_DeviceToPage'] = createExportWrapper(\n      'FPDF_DeviceToPage',\n      10,\n    ));\n    (Module['_FPDF_PageToDevice'] = createExportWrapper(\n      'FPDF_PageToDevice',\n      10,\n    ));\n    (Module['_FPDFBitmap_Create'] = createExportWrapper(\n      'FPDFBitmap_Create',\n      3,\n    ));\n    (Module['_FPDFBitmap_CreateEx'] = createExportWrapper(\n      'FPDFBitmap_CreateEx',\n      5,\n    ));\n    (Module['_FPDFBitmap_GetFormat'] = createExportWrapper(\n      'FPDFBitmap_GetFormat',\n      1,\n    ));\n    (Module['_FPDFBitmap_FillRect'] = createExportWrapper(\n      'FPDFBitmap_FillRect',\n      6,\n    ));\n    (Module['_FPDFBitmap_GetBuffer'] = createExportWrapper(\n      'FPDFBitmap_GetBuffer',\n      1,\n    ));\n    (Module['_FPDFBitmap_GetWidth'] = createExportWrapper(\n      'FPDFBitmap_GetWidth',\n      1,\n    ));\n    (Module['_FPDFBitmap_GetHeight'] = createExportWrapper(\n      'FPDFBitmap_GetHeight',\n      1,\n    ));\n    (Module['_FPDFBitmap_GetStride'] = createExportWrapper(\n      'FPDFBitmap_GetStride',\n      1,\n    ));\n    (Module['_FPDFBitmap_Destroy'] = createExportWrapper(\n      'FPDFBitmap_Destroy',\n      1,\n    ));\n    (Module['_FPDF_GetPageSizeByIndexF'] = createExportWrapper(\n      'FPDF_GetPageSizeByIndexF',\n      3,\n    ));\n    (Module['_EPDF_GetPageRotationByIndex'] =\n      createExportWrapper('EPDF_GetPageRotationByIndex', 2));\n    (Module['_FPDF_GetPageSizeByIndex'] = createExportWrapper(\n      'FPDF_GetPageSizeByIndex',\n      4,\n    ));\n    (Module['_FPDF_VIEWERREF_GetPrintScaling'] =\n      createExportWrapper('FPDF_VIEWERREF_GetPrintScaling', 1));\n    (Module['_FPDF_VIEWERREF_GetNumCopies'] =\n      createExportWrapper('FPDF_VIEWERREF_GetNumCopies', 1));\n    (Module['_FPDF_VIEWERREF_GetPrintPageRange'] =\n      createExportWrapper('FPDF_VIEWERREF_GetPrintPageRange', 1));\n    (Module['_FPDF_VIEWERREF_GetPrintPageRangeCount'] =\n      createExportWrapper('FPDF_VIEWERREF_GetPrintPageRangeCount', 1));\n    (Module[\n      '_FPDF_VIEWERREF_GetPrintPageRangeElement'\n    ] = createExportWrapper('FPDF_VIEWERREF_GetPrintPageRangeElement', 2));\n    (Module['_FPDF_VIEWERREF_GetDuplex'] = createExportWrapper(\n      'FPDF_VIEWERREF_GetDuplex',\n      1,\n    ));\n    (Module['_FPDF_VIEWERREF_GetName'] = createExportWrapper(\n      'FPDF_VIEWERREF_GetName',\n      4,\n    ));\n    (Module['_FPDF_CountNamedDests'] = createExportWrapper(\n      'FPDF_CountNamedDests',\n      1,\n    ));\n    (Module['_FPDF_GetNamedDestByName'] = createExportWrapper(\n      'FPDF_GetNamedDestByName',\n      2,\n    ));\n    (Module['_FPDF_GetNamedDest'] = createExportWrapper(\n      'FPDF_GetNamedDest',\n      4,\n    ));\n    (Module['_FPDF_GetXFAPacketCount'] = createExportWrapper(\n      'FPDF_GetXFAPacketCount',\n      1,\n    ));\n    (Module['_FPDF_GetXFAPacketName'] = createExportWrapper(\n      'FPDF_GetXFAPacketName',\n      4,\n    ));\n    (Module['_FPDF_GetXFAPacketContent'] = createExportWrapper(\n      'FPDF_GetXFAPacketContent',\n      5,\n    ));\n    (Module['_FPDF_GetTrailerEnds'] = createExportWrapper(\n      'FPDF_GetTrailerEnds',\n      3,\n    ));\n    var _fflush = createExportWrapper('fflush', 1);\n    var _emscripten_builtin_memalign = createExportWrapper('emscripten_builtin_memalign', 2);\n    var _strerror = createExportWrapper('strerror', 1);\n    var _setThrew = createExportWrapper('setThrew', 2);\n    var _emscripten_stack_init = () =>\n      (_emscripten_stack_init = wasmExports['emscripten_stack_init'])();\n    var _emscripten_stack_get_end = () =>\n      (_emscripten_stack_get_end = wasmExports['emscripten_stack_get_end'])();\n    var __emscripten_stack_restore = (a0) =>\n      (__emscripten_stack_restore = wasmExports['_emscripten_stack_restore'])(a0);\n    var __emscripten_stack_alloc = (a0) =>\n      (__emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'])(a0);\n    var _emscripten_stack_get_current = () =>\n      (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])();\n    (Module['dynCall_ji'] = createExportWrapper('dynCall_ji', 2));\n    (Module['dynCall_jij'] = createExportWrapper('dynCall_jij', 4));\n    (Module['dynCall_iiij'] = createExportWrapper('dynCall_iiij', 5));\n    (Module['dynCall_iij'] = createExportWrapper('dynCall_iij', 4));\n    (Module['dynCall_j'] = createExportWrapper('dynCall_j', 1));\n    (Module['dynCall_jji'] = createExportWrapper('dynCall_jji', 4));\n    (Module['dynCall_iji'] = createExportWrapper('dynCall_iji', 4));\n    (Module['dynCall_viijii'] = createExportWrapper('dynCall_viijii', 7));\n    (Module['dynCall_iiji'] = createExportWrapper('dynCall_iiji', 5));\n    (Module['dynCall_jiji'] = createExportWrapper('dynCall_jiji', 5));\n    (Module['dynCall_iiiiij'] = createExportWrapper('dynCall_iiiiij', 7));\n    (Module['dynCall_iiiiijj'] = createExportWrapper('dynCall_iiiiijj', 9));\n    (Module['dynCall_iiiiiijj'] = createExportWrapper(\n      'dynCall_iiiiiijj',\n      10,\n    ));\n    (Module['dynCall_viji'] = createExportWrapper('dynCall_viji', 5));\n\n    function invoke_viii(index, a1, a2, a3) {\n      var sp = stackSave();\n      try {\n        getWasmTableEntry(index)(a1, a2, a3);\n      } catch (e) {\n        stackRestore(sp);\n        if (e !== e + 0) throw e;\n        _setThrew(1, 0);\n      }\n    }\n\n    function invoke_ii(index, a1) {\n      var sp = stackSave();\n      try {\n        return getWasmTableEntry(index)(a1);\n      } catch (e) {\n        stackRestore(sp);\n        if (e !== e + 0) throw e;\n        _setThrew(1, 0);\n      }\n    }\n\n    function invoke_iii(index, a1, a2) {\n      var sp = stackSave();\n      try {\n        return getWasmTableEntry(index)(a1, a2);\n      } catch (e) {\n        stackRestore(sp);\n        if (e !== e + 0) throw e;\n        _setThrew(1, 0);\n      }\n    }\n\n    function invoke_iiii(index, a1, a2, a3) {\n      var sp = stackSave();\n      try {\n        return getWasmTableEntry(index)(a1, a2, a3);\n      } catch (e) {\n        stackRestore(sp);\n        if (e !== e + 0) throw e;\n        _setThrew(1, 0);\n      }\n    }\n\n    function invoke_viiii(index, a1, a2, a3, a4) {\n      var sp = stackSave();\n      try {\n        getWasmTableEntry(index)(a1, a2, a3, a4);\n      } catch (e) {\n        stackRestore(sp);\n        if (e !== e + 0) throw e;\n        _setThrew(1, 0);\n      }\n    }\n\n    function invoke_iiiii(index, a1, a2, a3, a4) {\n      var sp = stackSave();\n      try {\n        return getWasmTableEntry(index)(a1, a2, a3, a4);\n      } catch (e) {\n        stackRestore(sp);\n        if (e !== e + 0) throw e;\n        _setThrew(1, 0);\n      }\n    }\n\n    function invoke_v(index) {\n      var sp = stackSave();\n      try {\n        getWasmTableEntry(index)();\n      } catch (e) {\n        stackRestore(sp);\n        if (e !== e + 0) throw e;\n        _setThrew(1, 0);\n      }\n    }\n\n    function invoke_vii(index, a1, a2) {\n      var sp = stackSave();\n      try {\n        getWasmTableEntry(index)(a1, a2);\n      } catch (e) {\n        stackRestore(sp);\n        if (e !== e + 0) throw e;\n        _setThrew(1, 0);\n      }\n    }\n\n    function invoke_viiiiiiiii(index, a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n      var sp = stackSave();\n      try {\n        getWasmTableEntry(index)(a1, a2, a3, a4, a5, a6, a7, a8, a9);\n      } catch (e) {\n        stackRestore(sp);\n        if (e !== e + 0) throw e;\n        _setThrew(1, 0);\n      }\n    }\n\n    // include: postamble.js\n    // === Auto-generated postamble setup entry stuff ===\n\n    Module['wasmExports'] = wasmExports;\n    Module['ccall'] = ccall;\n    Module['cwrap'] = cwrap;\n    Module['addFunction'] = addFunction;\n    Module['removeFunction'] = removeFunction;\n    Module['setValue'] = setValue;\n    Module['getValue'] = getValue;\n    Module['UTF8ToString'] = UTF8ToString;\n    Module['stringToUTF8'] = stringToUTF8;\n    Module['UTF16ToString'] = UTF16ToString;\n    Module['stringToUTF16'] = stringToUTF16;\n    var missingLibrarySymbols = [\n      'writeI53ToI64',\n      'writeI53ToI64Clamped',\n      'writeI53ToI64Signaling',\n      'writeI53ToU64Clamped',\n      'writeI53ToU64Signaling',\n      'readI53FromI64',\n      'readI53FromU64',\n      'convertI32PairToI53',\n      'convertU32PairToI53',\n      'getTempRet0',\n      'setTempRet0',\n      'exitJS',\n      'inetPton4',\n      'inetNtop4',\n      'inetPton6',\n      'inetNtop6',\n      'readSockaddr',\n      'writeSockaddr',\n      'emscriptenLog',\n      'readEmAsmArgs',\n      'jstoi_q',\n      'listenOnce',\n      'autoResumeAudioContext',\n      'dynCallLegacy',\n      'getDynCaller',\n      'dynCall',\n      'handleException',\n      'keepRuntimeAlive',\n      'runtimeKeepalivePush',\n      'runtimeKeepalivePop',\n      'callUserCallback',\n      'maybeExit',\n      'asmjsMangle',\n      'HandleAllocator',\n      'getNativeTypeSize',\n      'STACK_SIZE',\n      'STACK_ALIGN',\n      'POINTER_SIZE',\n      'ASSERTIONS',\n      'reallyNegative',\n      'unSign',\n      'strLen',\n      'reSign',\n      'formatString',\n      'intArrayToString',\n      'AsciiToString',\n      'lengthBytesUTF16',\n      'UTF32ToString',\n      'stringToUTF32',\n      'lengthBytesUTF32',\n      'stringToNewUTF8',\n      'registerKeyEventCallback',\n      'maybeCStringToJsString',\n      'findEventTarget',\n      'getBoundingClientRect',\n      'fillMouseEventData',\n      'registerMouseEventCallback',\n      'registerWheelEventCallback',\n      'registerUiEventCallback',\n      'registerFocusEventCallback',\n      'fillDeviceOrientationEventData',\n      'registerDeviceOrientationEventCallback',\n      'fillDeviceMotionEventData',\n      'registerDeviceMotionEventCallback',\n      'screenOrientation',\n      'fillOrientationChangeEventData',\n      'registerOrientationChangeEventCallback',\n      'fillFullscreenChangeEventData',\n      'registerFullscreenChangeEventCallback',\n      'JSEvents_requestFullscreen',\n      'JSEvents_resizeCanvasForFullscreen',\n      'registerRestoreOldStyle',\n      'hideEverythingExceptGivenElement',\n      'restoreHiddenElements',\n      'setLetterbox',\n      'softFullscreenResizeWebGLRenderTarget',\n      'doRequestFullscreen',\n      'fillPointerlockChangeEventData',\n      'registerPointerlockChangeEventCallback',\n      'registerPointerlockErrorEventCallback',\n      'requestPointerLock',\n      'fillVisibilityChangeEventData',\n      'registerVisibilityChangeEventCallback',\n      'registerTouchEventCallback',\n      'fillGamepadEventData',\n      'registerGamepadEventCallback',\n      'registerBeforeUnloadEventCallback',\n      'fillBatteryEventData',\n      'battery',\n      'registerBatteryEventCallback',\n      'setCanvasElementSize',\n      'getCanvasElementSize',\n      'jsStackTrace',\n      'getCallstack',\n      'convertPCtoSourceLocation',\n      'checkWasiClock',\n      'wasiRightsToMuslOFlags',\n      'wasiOFlagsToMuslOFlags',\n      'createDyncallWrapper',\n      'safeSetTimeout',\n      'setImmediateWrapped',\n      'clearImmediateWrapped',\n      'polyfillSetImmediate',\n      'registerPostMainLoop',\n      'registerPreMainLoop',\n      'getPromise',\n      'makePromise',\n      'idsToPromises',\n      'makePromiseCallback',\n      'ExceptionInfo',\n      'findMatchingCatch',\n      'Browser_asyncPrepareDataCounter',\n      'safeRequestAnimationFrame',\n      'arraySum',\n      'addDays',\n      'getSocketFromFD',\n      'getSocketAddress',\n      'FS_unlink',\n      'FS_mkdirTree',\n      '_setNetworkCallback',\n      'heapObjectForWebGLType',\n      'toTypedArrayIndex',\n      'webgl_enable_ANGLE_instanced_arrays',\n      'webgl_enable_OES_vertex_array_object',\n      'webgl_enable_WEBGL_draw_buffers',\n      'webgl_enable_WEBGL_multi_draw',\n      'webgl_enable_EXT_polygon_offset_clamp',\n      'webgl_enable_EXT_clip_control',\n      'webgl_enable_WEBGL_polygon_mode',\n      'emscriptenWebGLGet',\n      'computeUnpackAlignedImageSize',\n      'colorChannelsInGlTextureFormat',\n      'emscriptenWebGLGetTexPixelData',\n      'emscriptenWebGLGetUniform',\n      'webglGetUniformLocation',\n      'webglPrepareUniformLocationsBeforeFirstUse',\n      'webglGetLeftBracePos',\n      'emscriptenWebGLGetVertexAttrib',\n      '__glGetActiveAttribOrUniform',\n      'writeGLArray',\n      'registerWebGlEventCallback',\n      'runAndAbortIfError',\n      'ALLOC_NORMAL',\n      'ALLOC_STACK',\n      'allocate',\n      'writeStringToMemory',\n      'writeAsciiToMemory',\n      'setErrNo',\n      'demangle',\n      'stackTrace',\n    ];\n    missingLibrarySymbols.forEach(missingLibrarySymbol);\n\n    var unexportedSymbols = [\n      'run',\n      'addOnPreRun',\n      'addOnInit',\n      'addOnPreMain',\n      'addOnExit',\n      'addOnPostRun',\n      'addRunDependency',\n      'removeRunDependency',\n      'out',\n      'err',\n      'callMain',\n      'abort',\n      'wasmMemory',\n      'writeStackCookie',\n      'checkStackCookie',\n      'convertI32PairToI53Checked',\n      'stackSave',\n      'stackRestore',\n      'stackAlloc',\n      'ptrToString',\n      'zeroMemory',\n      'getHeapMax',\n      'growMemory',\n      'ENV',\n      'ERRNO_CODES',\n      'strError',\n      'DNS',\n      'Protocols',\n      'Sockets',\n      'initRandomFill',\n      'randomFill',\n      'timers',\n      'warnOnce',\n      'readEmAsmArgsArray',\n      'jstoi_s',\n      'getExecutableName',\n      'asyncLoad',\n      'alignMemory',\n      'mmapAlloc',\n      'wasmTable',\n      'noExitRuntime',\n      'getCFunc',\n      'uleb128Encode',\n      'sigToWasmTypes',\n      'generateFuncType',\n      'convertJsFunctionToWasm',\n      'freeTableIndexes',\n      'functionsInTableMap',\n      'getEmptyTableSlot',\n      'updateTableMap',\n      'getFunctionAddress',\n      'PATH',\n      'PATH_FS',\n      'UTF8Decoder',\n      'UTF8ArrayToString',\n      'stringToUTF8Array',\n      'lengthBytesUTF8',\n      'intArrayFromString',\n      'stringToAscii',\n      'UTF16Decoder',\n      'stringToUTF8OnStack',\n      'writeArrayToMemory',\n      'JSEvents',\n      'specialHTMLTargets',\n      'findCanvasEventTarget',\n      'currentFullscreenStrategy',\n      'restoreOldWindowedStyle',\n      'UNWIND_CACHE',\n      'ExitStatus',\n      'getEnvStrings',\n      'doReadv',\n      'doWritev',\n      'promiseMap',\n      'uncaughtExceptionCount',\n      'exceptionLast',\n      'exceptionCaught',\n      'Browser',\n      'getPreloadedImageData__data',\n      'wget',\n      'MONTH_DAYS_REGULAR',\n      'MONTH_DAYS_LEAP',\n      'MONTH_DAYS_REGULAR_CUMULATIVE',\n      'MONTH_DAYS_LEAP_CUMULATIVE',\n      'isLeapYear',\n      'ydayFromDate',\n      'SYSCALLS',\n      'preloadPlugins',\n      'FS_createPreloadedFile',\n      'FS_modeStringToFlags',\n      'FS_getMode',\n      'FS_stdin_getChar_buffer',\n      'FS_stdin_getChar',\n      'FS_createPath',\n      'FS_createDevice',\n      'FS_readFile',\n      'FS',\n      'FS_createDataFile',\n      'FS_createLazyFile',\n      'MEMFS',\n      'TTY',\n      'PIPEFS',\n      'SOCKFS',\n      'tempFixedLengthArray',\n      'miniTempWebGLFloatBuffers',\n      'miniTempWebGLIntBuffers',\n      'GL',\n      'AL',\n      'GLUT',\n      'EGL',\n      'GLEW',\n      'IDBStore',\n      'SDL',\n      'SDL_gfx',\n      'allocateUTF8',\n      'allocateUTF8OnStack',\n      'print',\n      'printErr',\n    ];\n    unexportedSymbols.forEach(unexportedRuntimeSymbol);\n\n    var calledRun;\n    var calledPrerun;\n\n    dependenciesFulfilled = function runCaller() {\n      // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)\n      if (!calledRun) run();\n      if (!calledRun) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled\n    };\n\n    function stackCheckInit() {\n      // This is normally called automatically during __wasm_call_ctors but need to\n      // get these values before even running any of the ctors so we call it redundantly\n      // here.\n      _emscripten_stack_init();\n      // TODO(sbc): Move writeStackCookie to native to to avoid this.\n      writeStackCookie();\n    }\n\n    function run() {\n      if (runDependencies > 0) {\n        return;\n      }\n\n      stackCheckInit();\n\n      if (!calledPrerun) {\n        calledPrerun = 1;\n        preRun();\n\n        // a preRun added a dependency, run will be called later\n        if (runDependencies > 0) {\n          return;\n        }\n      }\n\n      function doRun() {\n        // run may have just been called through dependencies being fulfilled just in this very frame,\n        // or while the async setStatus time below was happening\n        if (calledRun) return;\n        calledRun = 1;\n        Module['calledRun'] = 1;\n\n        if (ABORT) return;\n\n        initRuntime();\n\n        readyPromiseResolve(Module);\n        Module['onRuntimeInitialized']?.();\n\n        assert(\n          !Module['_main'],\n          'compiled without a main, but one is present. if you added it from JS, use Module[\"onRuntimeInitialized\"]',\n        );\n\n        postRun();\n      }\n\n      if (Module['setStatus']) {\n        Module['setStatus']('Running...');\n        setTimeout(() => {\n          setTimeout(() => Module['setStatus'](''), 1);\n          doRun();\n        }, 1);\n      } else {\n        doRun();\n      }\n      checkStackCookie();\n    }\n\n    if (Module['preInit']) {\n      if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];\n      while (Module['preInit'].length > 0) {\n        Module['preInit'].pop()();\n      }\n    }\n\n    run();\n\n    // end include: postamble.js\n\n    // include: postamble_modularize.js\n    // In MODULARIZE mode we wrap the generated code in a factory function\n    // and return either the Module itself, or a promise of the module.\n    //\n    // We assign to the `moduleRtn` global here and configure closure to see\n    // this as and extern so it won't get minified.\n\n    moduleRtn = readyPromise;\n\n    // Assertion for attempting to access module properties on the incoming\n    // moduleArg.  In the past we used this object as the prototype of the module\n    // and assigned properties to it, but now we return a distinct object.  This\n    // keeps the instance private until it is ready (i.e the promise has been\n    // resolved).\n    for (const prop of Object.keys(Module)) {\n      if (!(prop in moduleArg)) {\n        Object.defineProperty(moduleArg, prop, {\n          configurable: true,\n          get() {\n            abort(\n              `Access to module property ('${prop}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`,\n            );\n          },\n        });\n      }\n    }\n    // end include: postamble_modularize.js\n\n    return moduleRtn;\n  };\n})();\n\n/* AUTO-GENERATED — DO NOT EDIT BY HAND */\nconst functions = {\n    EPDF_GetMetaKeyCount: [['number', 'boolean'], 'number'],\n    EPDF_GetMetaKeyName: [\n        ['number', 'number', 'boolean', 'number', 'number'],\n        'number',\n    ],\n    EPDF_GetMetaTrapped: [['number'], 'number'],\n    EPDF_GetPageRotationByIndex: [['number', 'number'], 'number'],\n    EPDF_HasMetaText: [['number', 'string'], 'boolean'],\n    EPDF_PNG_EncodeRGBA: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'number',\n    ],\n    EPDF_RenderAnnotBitmap: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    EPDF_SetMetaText: [['number', 'string', 'number'], 'boolean'],\n    EPDF_SetMetaTrapped: [['number', 'number'], 'boolean'],\n    EPDFAction_CreateGoTo: [['number', 'number'], 'number'],\n    EPDFAction_CreateGoToNamed: [['number', 'string'], 'number'],\n    EPDFAction_CreateLaunch: [['number', 'number'], 'number'],\n    EPDFAction_CreateRemoteGoToByName: [['number', 'number', 'number'], 'number'],\n    EPDFAction_CreateRemoteGoToDest: [['number', 'number', 'number'], 'number'],\n    EPDFAction_CreateURI: [['number', 'string'], 'number'],\n    EPDFAnnot_ClearColor: [['number', 'number'], 'boolean'],\n    EPDFAnnot_GenerateAppearance: [['number'], 'boolean'],\n    EPDFAnnot_GenerateAppearanceWithBlend: [['number', 'number'], 'boolean'],\n    EPDFAnnot_GetBlendMode: [['number'], 'number'],\n    EPDFAnnot_GetBorderDashPattern: [['number', 'number', 'number'], 'boolean'],\n    EPDFAnnot_GetBorderDashPatternCount: [['number'], 'number'],\n    EPDFAnnot_GetBorderEffect: [['number', 'number'], 'boolean'],\n    EPDFAnnot_GetBorderStyle: [['number', 'number'], 'number'],\n    EPDFAnnot_GetColor: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    EPDFAnnot_GetDefaultAppearance: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    EPDFAnnot_GetIcon: [['number'], 'number'],\n    EPDFAnnot_GetIntent: [['number', 'number', 'number'], 'number'],\n    EPDFAnnot_GetLineEndings: [['number', 'number', 'number'], 'boolean'],\n    EPDFAnnot_GetOpacity: [['number', 'number'], 'boolean'],\n    EPDFAnnot_GetRectangleDifferences: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    EPDFAnnot_GetRichContent: [['number', 'number', 'number'], 'number'],\n    EPDFAnnot_GetTextAlignment: [['number'], 'number'],\n    EPDFAnnot_GetVerticalAlignment: [['number'], 'number'],\n    EPDFAnnot_SetBorderDashPattern: [['number', 'number', 'number'], 'boolean'],\n    EPDFAnnot_SetBorderStyle: [['number', 'number', 'number'], 'boolean'],\n    EPDFAnnot_SetColor: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    EPDFAnnot_SetDefaultAppearance: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    EPDFAnnot_SetIcon: [['number', 'number'], 'boolean'],\n    EPDFAnnot_SetIntent: [['number', 'string'], 'boolean'],\n    EPDFAnnot_SetLine: [['number', 'number', 'number'], 'boolean'],\n    EPDFAnnot_SetLineEndings: [['number', 'number', 'number'], 'boolean'],\n    EPDFAnnot_SetLinkedAnnot: [['number', 'string', 'number'], 'boolean'],\n    EPDFAnnot_SetOpacity: [['number', 'number'], 'boolean'],\n    EPDFAnnot_SetTextAlignment: [['number', 'number'], 'boolean'],\n    EPDFAnnot_SetVerticalAlignment: [['number', 'number'], 'boolean'],\n    EPDFAnnot_SetVertices: [['number', 'number', 'number'], 'boolean'],\n    EPDFAnnot_UpdateAppearanceToRect: [['number', 'number'], 'boolean'],\n    EPDFAttachment_GetDescription: [['number', 'number', 'number'], 'number'],\n    EPDFAttachment_GetIntegerValue: [['number', 'string', 'number'], 'boolean'],\n    EPDFAttachment_SetDescription: [['number', 'number'], 'boolean'],\n    EPDFAttachment_SetSubtype: [['number', 'string'], 'boolean'],\n    EPDFBookmark_AppendChild: [['number', 'number', 'number'], 'number'],\n    EPDFBookmark_Clear: [['number'], 'boolean'],\n    EPDFBookmark_ClearTarget: [['number'], 'boolean'],\n    EPDFBookmark_Create: [['number', 'number'], 'number'],\n    EPDFBookmark_Delete: [['number', 'number'], 'boolean'],\n    EPDFBookmark_InsertAfter: [['number', 'number', 'number', 'number'], 'number'],\n    EPDFBookmark_SetAction: [['number', 'number', 'number'], 'boolean'],\n    EPDFBookmark_SetDest: [['number', 'number', 'number'], 'boolean'],\n    EPDFBookmark_SetTitle: [['number', 'number'], 'boolean'],\n    EPDFCatalog_GetLanguage: [['number', 'number', 'number'], 'number'],\n    EPDFDest_CreateRemoteView: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'number',\n    ],\n    EPDFDest_CreateRemoteXYZ: [\n        ['number', 'number', 'boolean', 'number', 'boolean', 'number', 'boolean', 'number'],\n        'number',\n    ],\n    EPDFDest_CreateView: [['number', 'number', 'number', 'number'], 'number'],\n    EPDFDest_CreateXYZ: [\n        ['number', 'boolean', 'number', 'boolean', 'number', 'boolean', 'number'],\n        'number',\n    ],\n    EPDFNamedDest_Remove: [['number', 'string'], 'boolean'],\n    EPDFNamedDest_SetDest: [['number', 'string', 'number'], 'boolean'],\n    EPDFPage_CreateAnnot: [['number', 'number'], 'number'],\n    EPDFPage_GetAnnotByName: [['number', 'number'], 'number'],\n    EPDFPage_GetAnnotCountRaw: [['number', 'number'], 'number'],\n    EPDFPage_GetAnnotRaw: [['number', 'number', 'number'], 'number'],\n    EPDFPage_RemoveAnnotByName: [['number', 'number'], 'boolean'],\n    EPDFPage_RemoveAnnotRaw: [['number', 'number', 'number'], 'boolean'],\n    EPDFText_RedactInQuads: [\n        ['number', 'number', 'number', 'boolean', 'boolean'],\n        'boolean',\n    ],\n    EPDFText_RedactInRect: [['number', 'number', 'boolean', 'boolean'], 'boolean'],\n    FORM_CanRedo: [['number', 'number'], 'boolean'],\n    FORM_CanUndo: [['number', 'number'], 'boolean'],\n    FORM_DoDocumentAAction: [['number', 'number'], null],\n    FORM_DoDocumentJSAction: [['number'], null],\n    FORM_DoDocumentOpenAction: [['number'], null],\n    FORM_DoPageAAction: [['number', 'number', 'number'], null],\n    FORM_ForceToKillFocus: [['number'], 'boolean'],\n    FORM_GetFocusedAnnot: [['number', 'number', 'number'], 'boolean'],\n    FORM_GetFocusedText: [['number', 'number', 'number', 'number'], 'number'],\n    FORM_GetSelectedText: [['number', 'number', 'number', 'number'], 'number'],\n    FORM_IsIndexSelected: [['number', 'number', 'number'], 'boolean'],\n    FORM_OnAfterLoadPage: [['number', 'number'], null],\n    FORM_OnBeforeClosePage: [['number', 'number'], null],\n    FORM_OnChar: [['number', 'number', 'number', 'number'], 'boolean'],\n    FORM_OnFocus: [['number', 'number', 'number', 'number', 'number'], 'boolean'],\n    FORM_OnKeyDown: [['number', 'number', 'number', 'number'], 'boolean'],\n    FORM_OnKeyUp: [['number', 'number', 'number', 'number'], 'boolean'],\n    FORM_OnLButtonDoubleClick: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FORM_OnLButtonDown: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FORM_OnLButtonUp: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FORM_OnMouseMove: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FORM_OnMouseWheel: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FORM_OnRButtonDown: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FORM_OnRButtonUp: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FORM_Redo: [['number', 'number'], 'boolean'],\n    FORM_ReplaceAndKeepSelection: [['number', 'number', 'number'], null],\n    FORM_ReplaceSelection: [['number', 'number', 'number'], null],\n    FORM_SelectAllText: [['number', 'number'], 'boolean'],\n    FORM_SetFocusedAnnot: [['number', 'number'], 'boolean'],\n    FORM_SetIndexSelected: [['number', 'number', 'number', 'boolean'], 'boolean'],\n    FORM_Undo: [['number', 'number'], 'boolean'],\n    FPDF_AddInstalledFont: [['number', 'number', 'number'], null],\n    FPDF_CloseDocument: [['number'], null],\n    FPDF_ClosePage: [['number'], null],\n    FPDF_CloseXObject: [['number'], null],\n    FPDF_CopyViewerPreferences: [['number', 'number'], 'boolean'],\n    FPDF_CountNamedDests: [['number'], 'number'],\n    FPDF_CreateClipPath: [['number', 'number', 'number', 'number'], 'number'],\n    FPDF_CreateNewDocument: [[], 'number'],\n    FPDF_DestroyClipPath: [['number'], null],\n    FPDF_DestroyLibrary: [[], null],\n    FPDF_DeviceToPage: [\n        [\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n        ],\n        'boolean',\n    ],\n    FPDF_DocumentHasValidCrossReferenceTable: [['number'], 'boolean'],\n    FPDF_FFLDraw: [\n        [\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n        ],\n        null,\n    ],\n    FPDF_FreeDefaultSystemFontInfo: [['number'], null],\n    FPDF_GetDefaultSystemFontInfo: [[], 'number'],\n    FPDF_GetDefaultTTFMap: [[], 'number'],\n    FPDF_GetDefaultTTFMapCount: [[], 'number'],\n    FPDF_GetDefaultTTFMapEntry: [['number'], 'number'],\n    FPDF_GetDocPermissions: [['number'], 'number'],\n    FPDF_GetDocUserPermissions: [['number'], 'number'],\n    FPDF_GetFileIdentifier: [['number', 'number', 'number', 'number'], 'number'],\n    FPDF_GetFileVersion: [['number', 'number'], 'boolean'],\n    FPDF_GetFormType: [['number'], 'number'],\n    FPDF_GetLastError: [[], 'number'],\n    FPDF_GetMetaText: [['number', 'string', 'number', 'number'], 'number'],\n    FPDF_GetNamedDest: [['number', 'number', 'number', 'number'], 'number'],\n    FPDF_GetNamedDestByName: [['number', 'string'], 'number'],\n    FPDF_GetPageAAction: [['number', 'number'], 'number'],\n    FPDF_GetPageBoundingBox: [['number', 'number'], 'boolean'],\n    FPDF_GetPageCount: [['number'], 'number'],\n    FPDF_GetPageHeight: [['number'], 'number'],\n    FPDF_GetPageHeightF: [['number'], 'number'],\n    FPDF_GetPageLabel: [['number', 'number', 'number', 'number'], 'number'],\n    FPDF_GetPageSizeByIndex: [['number', 'number', 'number', 'number'], 'number'],\n    FPDF_GetPageSizeByIndexF: [['number', 'number', 'number'], 'boolean'],\n    FPDF_GetPageWidth: [['number'], 'number'],\n    FPDF_GetPageWidthF: [['number'], 'number'],\n    FPDF_GetSecurityHandlerRevision: [['number'], 'number'],\n    FPDF_GetSignatureCount: [['number'], 'number'],\n    FPDF_GetSignatureObject: [['number', 'number'], 'number'],\n    FPDF_GetTrailerEnds: [['number', 'number', 'number'], 'number'],\n    FPDF_GetXFAPacketContent: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDF_GetXFAPacketCount: [['number'], 'number'],\n    FPDF_GetXFAPacketName: [['number', 'number', 'number', 'number'], 'number'],\n    FPDF_ImportNPagesToOne: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDF_ImportPages: [['number', 'number', 'string', 'number'], 'boolean'],\n    FPDF_ImportPagesByIndex: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDF_InitLibrary: [[], null],\n    FPDF_InitLibraryWithConfig: [['number'], null],\n    FPDF_LoadCustomDocument: [['number', 'string'], 'number'],\n    FPDF_LoadDocument: [['number', 'string'], 'number'],\n    FPDF_LoadMemDocument: [['number', 'number', 'string'], 'number'],\n    FPDF_LoadMemDocument64: [['number', 'number', 'string'], 'number'],\n    FPDF_LoadPage: [['number', 'number'], 'number'],\n    FPDF_LoadXFA: [['number'], 'boolean'],\n    FPDF_MovePages: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDF_NewFormObjectFromXObject: [['number'], 'number'],\n    FPDF_NewXObjectFromPage: [['number', 'number', 'number'], 'number'],\n    FPDF_PageToDevice: [\n        [\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n        ],\n        'boolean',\n    ],\n    FPDF_RemoveFormFieldHighlight: [['number'], null],\n    FPDF_RenderPage_Close: [['number'], null],\n    FPDF_RenderPage_Continue: [['number', 'number'], 'number'],\n    FPDF_RenderPageBitmap: [\n        ['number', 'number', 'number', 'number', 'number', 'number', 'number', 'number'],\n        null,\n    ],\n    FPDF_RenderPageBitmap_Start: [\n        [\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n        ],\n        'number',\n    ],\n    FPDF_RenderPageBitmapWithColorScheme_Start: [\n        [\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n            'number',\n        ],\n        'number',\n    ],\n    FPDF_RenderPageBitmapWithMatrix: [\n        ['number', 'number', 'number', 'number', 'number'],\n        null,\n    ],\n    FPDF_SaveAsCopy: [['number', 'number', 'number'], 'boolean'],\n    FPDF_SaveWithVersion: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDF_SetFormFieldHighlightAlpha: [['number', 'number'], null],\n    FPDF_SetFormFieldHighlightColor: [['number', 'number', 'number'], null],\n    FPDF_SetSandBoxPolicy: [['number', 'boolean'], null],\n    FPDF_SetSystemFontInfo: [['number'], null],\n    FPDF_StructElement_Attr_CountChildren: [['number'], 'number'],\n    FPDF_StructElement_Attr_GetBlobValue: [\n        ['number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDF_StructElement_Attr_GetBooleanValue: [['number', 'number'], 'boolean'],\n    FPDF_StructElement_Attr_GetChildAtIndex: [['number', 'number'], 'number'],\n    FPDF_StructElement_Attr_GetCount: [['number'], 'number'],\n    FPDF_StructElement_Attr_GetName: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDF_StructElement_Attr_GetNumberValue: [['number', 'number'], 'boolean'],\n    FPDF_StructElement_Attr_GetStringValue: [\n        ['number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDF_StructElement_Attr_GetType: [['number'], 'number'],\n    FPDF_StructElement_Attr_GetValue: [['number', 'string'], 'number'],\n    FPDF_StructElement_CountChildren: [['number'], 'number'],\n    FPDF_StructElement_GetActualText: [['number', 'number', 'number'], 'number'],\n    FPDF_StructElement_GetAltText: [['number', 'number', 'number'], 'number'],\n    FPDF_StructElement_GetAttributeAtIndex: [['number', 'number'], 'number'],\n    FPDF_StructElement_GetAttributeCount: [['number'], 'number'],\n    FPDF_StructElement_GetChildAtIndex: [['number', 'number'], 'number'],\n    FPDF_StructElement_GetChildMarkedContentID: [['number', 'number'], 'number'],\n    FPDF_StructElement_GetID: [['number', 'number', 'number'], 'number'],\n    FPDF_StructElement_GetLang: [['number', 'number', 'number'], 'number'],\n    FPDF_StructElement_GetMarkedContentID: [['number'], 'number'],\n    FPDF_StructElement_GetMarkedContentIdAtIndex: [['number', 'number'], 'number'],\n    FPDF_StructElement_GetMarkedContentIdCount: [['number'], 'number'],\n    FPDF_StructElement_GetObjType: [['number', 'number', 'number'], 'number'],\n    FPDF_StructElement_GetParent: [['number'], 'number'],\n    FPDF_StructElement_GetStringAttribute: [\n        ['number', 'string', 'number', 'number'],\n        'number',\n    ],\n    FPDF_StructElement_GetTitle: [['number', 'number', 'number'], 'number'],\n    FPDF_StructElement_GetType: [['number', 'number', 'number'], 'number'],\n    FPDF_StructTree_Close: [['number'], null],\n    FPDF_StructTree_CountChildren: [['number'], 'number'],\n    FPDF_StructTree_GetChildAtIndex: [['number', 'number'], 'number'],\n    FPDF_StructTree_GetForPage: [['number'], 'number'],\n    FPDF_VIEWERREF_GetDuplex: [['number'], 'number'],\n    FPDF_VIEWERREF_GetName: [['number', 'string', 'number', 'number'], 'number'],\n    FPDF_VIEWERREF_GetNumCopies: [['number'], 'number'],\n    FPDF_VIEWERREF_GetPrintPageRange: [['number'], 'number'],\n    FPDF_VIEWERREF_GetPrintPageRangeCount: [['number'], 'number'],\n    FPDF_VIEWERREF_GetPrintPageRangeElement: [['number', 'number'], 'number'],\n    FPDF_VIEWERREF_GetPrintScaling: [['number'], 'boolean'],\n    FPDFAction_GetDest: [['number', 'number'], 'number'],\n    FPDFAction_GetFilePath: [['number', 'number', 'number'], 'number'],\n    FPDFAction_GetType: [['number'], 'number'],\n    FPDFAction_GetURIPath: [['number', 'number', 'number', 'number'], 'number'],\n    FPDFAnnot_AddFileAttachment: [['number', 'number'], 'number'],\n    FPDFAnnot_AddInkStroke: [['number', 'number', 'number'], 'number'],\n    FPDFAnnot_AppendAttachmentPoints: [['number', 'number'], 'boolean'],\n    FPDFAnnot_AppendObject: [['number', 'number'], 'boolean'],\n    FPDFAnnot_CountAttachmentPoints: [['number'], 'number'],\n    FPDFAnnot_GetAP: [['number', 'number', 'number', 'number'], 'number'],\n    FPDFAnnot_GetAttachmentPoints: [['number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_GetBorder: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_GetColor: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFAnnot_GetFileAttachment: [['number'], 'number'],\n    FPDFAnnot_GetFlags: [['number'], 'number'],\n    FPDFAnnot_GetFocusableSubtypes: [['number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_GetFocusableSubtypesCount: [['number'], 'number'],\n    FPDFAnnot_GetFontColor: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFAnnot_GetFontSize: [['number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_GetFormAdditionalActionJavaScript: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFAnnot_GetFormControlCount: [['number', 'number'], 'number'],\n    FPDFAnnot_GetFormControlIndex: [['number', 'number'], 'number'],\n    FPDFAnnot_GetFormFieldAlternateName: [\n        ['number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFAnnot_GetFormFieldAtPoint: [['number', 'number', 'number'], 'number'],\n    FPDFAnnot_GetFormFieldExportValue: [\n        ['number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFAnnot_GetFormFieldFlags: [['number', 'number'], 'number'],\n    FPDFAnnot_GetFormFieldName: [\n        ['number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFAnnot_GetFormFieldType: [['number', 'number'], 'number'],\n    FPDFAnnot_GetFormFieldValue: [\n        ['number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFAnnot_GetInkListCount: [['number'], 'number'],\n    FPDFAnnot_GetInkListPath: [['number', 'number', 'number', 'number'], 'number'],\n    FPDFAnnot_GetLine: [['number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_GetLink: [['number'], 'number'],\n    FPDFAnnot_GetLinkedAnnot: [['number', 'string'], 'number'],\n    FPDFAnnot_GetNumberValue: [['number', 'string', 'number'], 'boolean'],\n    FPDFAnnot_GetObject: [['number', 'number'], 'number'],\n    FPDFAnnot_GetObjectCount: [['number'], 'number'],\n    FPDFAnnot_GetOptionCount: [['number', 'number'], 'number'],\n    FPDFAnnot_GetOptionLabel: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFAnnot_GetRect: [['number', 'number'], 'boolean'],\n    FPDFAnnot_GetStringValue: [['number', 'string', 'number', 'number'], 'number'],\n    FPDFAnnot_GetSubtype: [['number'], 'number'],\n    FPDFAnnot_GetValueType: [['number', 'string'], 'number'],\n    FPDFAnnot_GetVertices: [['number', 'number', 'number'], 'number'],\n    FPDFAnnot_HasAttachmentPoints: [['number'], 'boolean'],\n    FPDFAnnot_HasKey: [['number', 'string'], 'boolean'],\n    FPDFAnnot_IsChecked: [['number', 'number'], 'boolean'],\n    FPDFAnnot_IsObjectSupportedSubtype: [['number'], 'boolean'],\n    FPDFAnnot_IsOptionSelected: [['number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_IsSupportedSubtype: [['number'], 'boolean'],\n    FPDFAnnot_RemoveInkList: [['number'], 'boolean'],\n    FPDFAnnot_RemoveObject: [['number', 'number'], 'boolean'],\n    FPDFAnnot_SetAP: [['number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_SetAttachmentPoints: [['number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_SetBorder: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_SetColor: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFAnnot_SetFlags: [['number', 'number'], 'boolean'],\n    FPDFAnnot_SetFocusableSubtypes: [['number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_SetFontColor: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFAnnot_SetFormFieldFlags: [['number', 'number', 'number'], 'boolean'],\n    FPDFAnnot_SetRect: [['number', 'number'], 'boolean'],\n    FPDFAnnot_SetStringValue: [['number', 'string', 'number'], 'boolean'],\n    FPDFAnnot_SetURI: [['number', 'number'], 'boolean'],\n    FPDFAnnot_UpdateObject: [['number', 'number'], 'boolean'],\n    FPDFAttachment_GetFile: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFAttachment_GetName: [['number', 'number', 'number'], 'number'],\n    FPDFAttachment_GetStringValue: [\n        ['number', 'string', 'number', 'number'],\n        'number',\n    ],\n    FPDFAttachment_GetSubtype: [['number', 'number', 'number'], 'number'],\n    FPDFAttachment_GetValueType: [['number', 'string'], 'number'],\n    FPDFAttachment_HasKey: [['number', 'string'], 'boolean'],\n    FPDFAttachment_SetFile: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFAttachment_SetStringValue: [['number', 'string', 'number'], 'boolean'],\n    FPDFAvail_Create: [['number', 'number'], 'number'],\n    FPDFAvail_Destroy: [['number'], null],\n    FPDFAvail_GetDocument: [['number', 'string'], 'number'],\n    FPDFAvail_GetFirstPageNum: [['number'], 'number'],\n    FPDFAvail_IsDocAvail: [['number', 'number'], 'number'],\n    FPDFAvail_IsFormAvail: [['number', 'number'], 'number'],\n    FPDFAvail_IsLinearized: [['number'], 'number'],\n    FPDFAvail_IsPageAvail: [['number', 'number', 'number'], 'number'],\n    FPDFBitmap_Create: [['number', 'number', 'number'], 'number'],\n    FPDFBitmap_CreateEx: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFBitmap_Destroy: [['number'], null],\n    FPDFBitmap_FillRect: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFBitmap_GetBuffer: [['number'], 'number'],\n    FPDFBitmap_GetFormat: [['number'], 'number'],\n    FPDFBitmap_GetHeight: [['number'], 'number'],\n    FPDFBitmap_GetStride: [['number'], 'number'],\n    FPDFBitmap_GetWidth: [['number'], 'number'],\n    FPDFBookmark_Find: [['number', 'number'], 'number'],\n    FPDFBookmark_GetAction: [['number'], 'number'],\n    FPDFBookmark_GetCount: [['number'], 'number'],\n    FPDFBookmark_GetDest: [['number', 'number'], 'number'],\n    FPDFBookmark_GetFirstChild: [['number', 'number'], 'number'],\n    FPDFBookmark_GetNextSibling: [['number', 'number'], 'number'],\n    FPDFBookmark_GetTitle: [['number', 'number', 'number'], 'number'],\n    FPDFCatalog_IsTagged: [['number'], 'boolean'],\n    FPDFCatalog_SetLanguage: [['number', 'string'], 'boolean'],\n    FPDFClipPath_CountPaths: [['number'], 'number'],\n    FPDFClipPath_CountPathSegments: [['number', 'number'], 'number'],\n    FPDFClipPath_GetPathSegment: [['number', 'number', 'number'], 'number'],\n    FPDFDest_GetDestPageIndex: [['number', 'number'], 'number'],\n    FPDFDest_GetLocationInPage: [\n        ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFDest_GetView: [['number', 'number', 'number'], 'number'],\n    FPDFDoc_AddAttachment: [['number', 'number'], 'number'],\n    FPDFDoc_CloseJavaScriptAction: [['number'], null],\n    FPDFDoc_DeleteAttachment: [['number', 'number'], 'boolean'],\n    FPDFDOC_ExitFormFillEnvironment: [['number'], null],\n    FPDFDoc_GetAttachment: [['number', 'number'], 'number'],\n    FPDFDoc_GetAttachmentCount: [['number'], 'number'],\n    FPDFDoc_GetJavaScriptAction: [['number', 'number'], 'number'],\n    FPDFDoc_GetJavaScriptActionCount: [['number'], 'number'],\n    FPDFDoc_GetPageMode: [['number'], 'number'],\n    FPDFDOC_InitFormFillEnvironment: [['number', 'number'], 'number'],\n    FPDFFont_Close: [['number'], null],\n    FPDFFont_GetAscent: [['number', 'number', 'number'], 'boolean'],\n    FPDFFont_GetBaseFontName: [['number', 'number', 'number'], 'number'],\n    FPDFFont_GetDescent: [['number', 'number', 'number'], 'boolean'],\n    FPDFFont_GetFamilyName: [['number', 'number', 'number'], 'number'],\n    FPDFFont_GetFlags: [['number'], 'number'],\n    FPDFFont_GetFontData: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFFont_GetGlyphPath: [['number', 'number', 'number'], 'number'],\n    FPDFFont_GetGlyphWidth: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFFont_GetIsEmbedded: [['number'], 'number'],\n    FPDFFont_GetItalicAngle: [['number', 'number'], 'boolean'],\n    FPDFFont_GetWeight: [['number'], 'number'],\n    FPDFFormObj_CountObjects: [['number'], 'number'],\n    FPDFFormObj_GetObject: [['number', 'number'], 'number'],\n    FPDFFormObj_RemoveObject: [['number', 'number'], 'boolean'],\n    FPDFGlyphPath_CountGlyphSegments: [['number'], 'number'],\n    FPDFGlyphPath_GetGlyphPathSegment: [['number', 'number'], 'number'],\n    FPDFImageObj_GetBitmap: [['number'], 'number'],\n    FPDFImageObj_GetIccProfileDataDecoded: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFImageObj_GetImageDataDecoded: [['number', 'number', 'number'], 'number'],\n    FPDFImageObj_GetImageDataRaw: [['number', 'number', 'number'], 'number'],\n    FPDFImageObj_GetImageFilter: [\n        ['number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFImageObj_GetImageFilterCount: [['number'], 'number'],\n    FPDFImageObj_GetImageMetadata: [['number', 'number', 'number'], 'boolean'],\n    FPDFImageObj_GetImagePixelSize: [['number', 'number', 'number'], 'boolean'],\n    FPDFImageObj_GetRenderedBitmap: [['number', 'number', 'number'], 'number'],\n    FPDFImageObj_LoadJpegFile: [\n        ['number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFImageObj_LoadJpegFileInline: [\n        ['number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFImageObj_SetBitmap: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFImageObj_SetMatrix: [\n        ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFJavaScriptAction_GetName: [['number', 'number', 'number'], 'number'],\n    FPDFJavaScriptAction_GetScript: [['number', 'number', 'number'], 'number'],\n    FPDFLink_CloseWebLinks: [['number'], null],\n    FPDFLink_CountQuadPoints: [['number'], 'number'],\n    FPDFLink_CountRects: [['number', 'number'], 'number'],\n    FPDFLink_CountWebLinks: [['number'], 'number'],\n    FPDFLink_Enumerate: [['number', 'number', 'number'], 'boolean'],\n    FPDFLink_GetAction: [['number'], 'number'],\n    FPDFLink_GetAnnot: [['number', 'number'], 'number'],\n    FPDFLink_GetAnnotRect: [['number', 'number'], 'boolean'],\n    FPDFLink_GetDest: [['number', 'number'], 'number'],\n    FPDFLink_GetLinkAtPoint: [['number', 'number', 'number'], 'number'],\n    FPDFLink_GetLinkZOrderAtPoint: [['number', 'number', 'number'], 'number'],\n    FPDFLink_GetQuadPoints: [['number', 'number', 'number'], 'boolean'],\n    FPDFLink_GetRect: [\n        ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFLink_GetTextRange: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFLink_GetURL: [['number', 'number', 'number', 'number'], 'number'],\n    FPDFLink_LoadWebLinks: [['number'], 'number'],\n    FPDFPage_CloseAnnot: [['number'], null],\n    FPDFPage_CountObjects: [['number'], 'number'],\n    FPDFPage_CreateAnnot: [['number', 'number'], 'number'],\n    FPDFPage_Delete: [['number', 'number'], null],\n    FPDFPage_Flatten: [['number', 'number'], 'number'],\n    FPDFPage_FormFieldZOrderAtPoint: [\n        ['number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFPage_GenerateContent: [['number'], 'boolean'],\n    FPDFPage_GetAnnot: [['number', 'number'], 'number'],\n    FPDFPage_GetAnnotCount: [['number'], 'number'],\n    FPDFPage_GetAnnotIndex: [['number', 'number'], 'number'],\n    FPDFPage_GetArtBox: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPage_GetBleedBox: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPage_GetCropBox: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPage_GetDecodedThumbnailData: [['number', 'number', 'number'], 'number'],\n    FPDFPage_GetMediaBox: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPage_GetObject: [['number', 'number'], 'number'],\n    FPDFPage_GetRawThumbnailData: [['number', 'number', 'number'], 'number'],\n    FPDFPage_GetRotation: [['number'], 'number'],\n    FPDFPage_GetThumbnailAsBitmap: [['number'], 'number'],\n    FPDFPage_GetTrimBox: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPage_HasFormFieldAtPoint: [\n        ['number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFPage_HasTransparency: [['number'], 'boolean'],\n    FPDFPage_InsertClipPath: [['number', 'number'], null],\n    FPDFPage_InsertObject: [['number', 'number'], null],\n    FPDFPage_InsertObjectAtIndex: [['number', 'number', 'number'], 'boolean'],\n    FPDFPage_New: [['number', 'number', 'number', 'number'], 'number'],\n    FPDFPage_RemoveAnnot: [['number', 'number'], 'boolean'],\n    FPDFPage_RemoveObject: [['number', 'number'], 'boolean'],\n    FPDFPage_SetArtBox: [['number', 'number', 'number', 'number', 'number'], null],\n    FPDFPage_SetBleedBox: [\n        ['number', 'number', 'number', 'number', 'number'],\n        null,\n    ],\n    FPDFPage_SetCropBox: [['number', 'number', 'number', 'number', 'number'], null],\n    FPDFPage_SetMediaBox: [\n        ['number', 'number', 'number', 'number', 'number'],\n        null,\n    ],\n    FPDFPage_SetRotation: [['number', 'number'], null],\n    FPDFPage_SetTrimBox: [['number', 'number', 'number', 'number', 'number'], null],\n    FPDFPage_TransformAnnots: [\n        ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n        null,\n    ],\n    FPDFPage_TransFormWithClip: [['number', 'number', 'number'], 'boolean'],\n    FPDFPageObj_AddMark: [['number', 'string'], 'number'],\n    FPDFPageObj_CountMarks: [['number'], 'number'],\n    FPDFPageObj_CreateNewPath: [['number', 'number'], 'number'],\n    FPDFPageObj_CreateNewRect: [['number', 'number', 'number', 'number'], 'number'],\n    FPDFPageObj_CreateTextObj: [['number', 'number', 'number'], 'number'],\n    FPDFPageObj_Destroy: [['number'], null],\n    FPDFPageObj_GetBounds: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPageObj_GetClipPath: [['number'], 'number'],\n    FPDFPageObj_GetDashArray: [['number', 'number', 'number'], 'boolean'],\n    FPDFPageObj_GetDashCount: [['number'], 'number'],\n    FPDFPageObj_GetDashPhase: [['number', 'number'], 'boolean'],\n    FPDFPageObj_GetFillColor: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPageObj_GetIsActive: [['number', 'number'], 'boolean'],\n    FPDFPageObj_GetLineCap: [['number'], 'number'],\n    FPDFPageObj_GetLineJoin: [['number'], 'number'],\n    FPDFPageObj_GetMark: [['number', 'number'], 'number'],\n    FPDFPageObj_GetMarkedContentID: [['number'], 'number'],\n    FPDFPageObj_GetMatrix: [['number', 'number'], 'boolean'],\n    FPDFPageObj_GetRotatedBounds: [['number', 'number'], 'boolean'],\n    FPDFPageObj_GetStrokeColor: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPageObj_GetStrokeWidth: [['number', 'number'], 'boolean'],\n    FPDFPageObj_GetType: [['number'], 'number'],\n    FPDFPageObj_HasTransparency: [['number'], 'boolean'],\n    FPDFPageObj_NewImageObj: [['number'], 'number'],\n    FPDFPageObj_NewTextObj: [['number', 'string', 'number'], 'number'],\n    FPDFPageObj_RemoveMark: [['number', 'number'], 'boolean'],\n    FPDFPageObj_SetBlendMode: [['number', 'string'], null],\n    FPDFPageObj_SetDashArray: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFPageObj_SetDashPhase: [['number', 'number'], 'boolean'],\n    FPDFPageObj_SetFillColor: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPageObj_SetIsActive: [['number', 'boolean'], 'boolean'],\n    FPDFPageObj_SetLineCap: [['number', 'number'], 'boolean'],\n    FPDFPageObj_SetLineJoin: [['number', 'number'], 'boolean'],\n    FPDFPageObj_SetMatrix: [['number', 'number'], 'boolean'],\n    FPDFPageObj_SetStrokeColor: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPageObj_SetStrokeWidth: [['number', 'number'], 'boolean'],\n    FPDFPageObj_Transform: [\n        ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n        null,\n    ],\n    FPDFPageObj_TransformClipPath: [\n        ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n        null,\n    ],\n    FPDFPageObj_TransformF: [['number', 'number'], 'boolean'],\n    FPDFPageObjMark_CountParams: [['number'], 'number'],\n    FPDFPageObjMark_GetName: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFPageObjMark_GetParamBlobValue: [\n        ['number', 'string', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPageObjMark_GetParamIntValue: [['number', 'string', 'number'], 'boolean'],\n    FPDFPageObjMark_GetParamKey: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPageObjMark_GetParamStringValue: [\n        ['number', 'string', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPageObjMark_GetParamValueType: [['number', 'string'], 'number'],\n    FPDFPageObjMark_RemoveParam: [['number', 'number', 'string'], 'boolean'],\n    FPDFPageObjMark_SetBlobParam: [\n        ['number', 'number', 'number', 'string', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPageObjMark_SetIntParam: [\n        ['number', 'number', 'number', 'string', 'number'],\n        'boolean',\n    ],\n    FPDFPageObjMark_SetStringParam: [\n        ['number', 'number', 'number', 'string', 'string'],\n        'boolean',\n    ],\n    FPDFPath_BezierTo: [\n        ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFPath_Close: [['number'], 'boolean'],\n    FPDFPath_CountSegments: [['number'], 'number'],\n    FPDFPath_GetDrawMode: [['number', 'number', 'number'], 'boolean'],\n    FPDFPath_GetPathSegment: [['number', 'number'], 'number'],\n    FPDFPath_LineTo: [['number', 'number', 'number'], 'boolean'],\n    FPDFPath_MoveTo: [['number', 'number', 'number'], 'boolean'],\n    FPDFPath_SetDrawMode: [['number', 'number', 'boolean'], 'boolean'],\n    FPDFPathSegment_GetClose: [['number'], 'boolean'],\n    FPDFPathSegment_GetPoint: [['number', 'number', 'number'], 'boolean'],\n    FPDFPathSegment_GetType: [['number'], 'number'],\n    FPDFSignatureObj_GetByteRange: [['number', 'number', 'number'], 'number'],\n    FPDFSignatureObj_GetContents: [['number', 'number', 'number'], 'number'],\n    FPDFSignatureObj_GetDocMDPPermission: [['number'], 'number'],\n    FPDFSignatureObj_GetReason: [['number', 'number', 'number'], 'number'],\n    FPDFSignatureObj_GetSubFilter: [['number', 'number', 'number'], 'number'],\n    FPDFSignatureObj_GetTime: [['number', 'number', 'number'], 'number'],\n    FPDFText_ClosePage: [['number'], null],\n    FPDFText_CountChars: [['number'], 'number'],\n    FPDFText_CountRects: [['number', 'number', 'number'], 'number'],\n    FPDFText_FindClose: [['number'], null],\n    FPDFText_FindNext: [['number'], 'boolean'],\n    FPDFText_FindPrev: [['number'], 'boolean'],\n    FPDFText_FindStart: [['number', 'number', 'number', 'number'], 'number'],\n    FPDFText_GetBoundedText: [\n        ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFText_GetCharAngle: [['number', 'number'], 'number'],\n    FPDFText_GetCharBox: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFText_GetCharIndexAtPos: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFText_GetCharIndexFromTextIndex: [['number', 'number'], 'number'],\n    FPDFText_GetCharOrigin: [['number', 'number', 'number', 'number'], 'boolean'],\n    FPDFText_GetFillColor: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFText_GetFontInfo: [\n        ['number', 'number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFText_GetFontSize: [['number', 'number'], 'number'],\n    FPDFText_GetFontWeight: [['number', 'number'], 'number'],\n    FPDFText_GetLooseCharBox: [['number', 'number', 'number'], 'boolean'],\n    FPDFText_GetMatrix: [['number', 'number', 'number'], 'boolean'],\n    FPDFText_GetRect: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFText_GetSchCount: [['number'], 'number'],\n    FPDFText_GetSchResultIndex: [['number'], 'number'],\n    FPDFText_GetStrokeColor: [\n        ['number', 'number', 'number', 'number', 'number', 'number'],\n        'boolean',\n    ],\n    FPDFText_GetText: [['number', 'number', 'number', 'number'], 'number'],\n    FPDFText_GetTextIndexFromCharIndex: [['number', 'number'], 'number'],\n    FPDFText_GetTextObject: [['number', 'number'], 'number'],\n    FPDFText_GetUnicode: [['number', 'number'], 'number'],\n    FPDFText_HasUnicodeMapError: [['number', 'number'], 'number'],\n    FPDFText_IsGenerated: [['number', 'number'], 'number'],\n    FPDFText_IsHyphen: [['number', 'number'], 'number'],\n    FPDFText_LoadCidType2Font: [\n        ['number', 'number', 'number', 'string', 'number', 'number'],\n        'number',\n    ],\n    FPDFText_LoadFont: [\n        ['number', 'number', 'number', 'number', 'boolean'],\n        'number',\n    ],\n    FPDFText_LoadPage: [['number'], 'number'],\n    FPDFText_LoadStandardFont: [['number', 'string'], 'number'],\n    FPDFText_SetCharcodes: [['number', 'number', 'number'], 'boolean'],\n    FPDFText_SetText: [['number', 'number'], 'boolean'],\n    FPDFTextObj_GetFont: [['number'], 'number'],\n    FPDFTextObj_GetFontSize: [['number', 'number'], 'boolean'],\n    FPDFTextObj_GetRenderedBitmap: [\n        ['number', 'number', 'number', 'number'],\n        'number',\n    ],\n    FPDFTextObj_GetText: [['number', 'number', 'number', 'number'], 'number'],\n    FPDFTextObj_GetTextRenderMode: [['number'], 'number'],\n    FPDFTextObj_SetTextRenderMode: [['number', 'number'], 'boolean'],\n    PDFiumExt_CloseFileWriter: [['number'], null],\n    PDFiumExt_CloseFormFillInfo: [['number'], null],\n    PDFiumExt_ExitFormFillEnvironment: [['number'], null],\n    PDFiumExt_GetFileWriterData: [['number', 'number', 'number'], 'number'],\n    PDFiumExt_GetFileWriterSize: [['number'], 'number'],\n    PDFiumExt_Init: [[], null],\n    PDFiumExt_InitFormFillEnvironment: [['number', 'number'], 'number'],\n    PDFiumExt_OpenFileWriter: [[], 'number'],\n    PDFiumExt_OpenFormFillInfo: [[], 'number'],\n    PDFiumExt_SaveAsCopy: [['number', 'number'], 'number'],\n};\n\nconst DEFAULT_PDFIUM_WASM_URL = 'https://cdn.jsdelivr.net/npm/@kopjra/embedpdf-pdfium@2.0.0-next.1/dist/pdfium.wasm';\nasync function createWrappedModule(pdfium) {\n    const module = {\n        pdfium,\n    };\n    for (const key in functions) {\n        const ident = key;\n        const args = functions[ident][0];\n        const ret = functions[ident][1];\n        // @ts-ignore\n        module[ident] = pdfium.cwrap(key, ret, args);\n    }\n    return module;\n}\n\nasync function init(moduleOverrides) {\n    const pdfium = await createPdfium(moduleOverrides);\n    return createWrappedModule(pdfium);\n}\n\nexport { DEFAULT_PDFIUM_WASM_URL, init };\n//# sourceMappingURL=index.browser.js.map\n"],"names":["readString","wasmModule","readChars","parseChars","defaultLength","buffer","wasmExports","malloc","i","HEAP8","actualLength","str","free","readArrayBuffer","bufferSize","bufferPtr","arrayBuffer","ArrayBuffer","view","DataView","setInt8","getValue","RESERVED_INFO_KEYS","Set","isValidCustomKey","key","length","has","c","charCodeAt","computeFormDrawParams","matrix","rect","pageSize","rotation","rectLeft","origin","x","rectBottom","y","rectRight","size","width","rectTop","height","pageWidth","pageHeight","scaleX","Math","hypot","a","b","scaleY","d","swap","formsWidth","max","round","formsHeight","startX","startY","Rotation","Degree0","Degree90","Degree180","Degree270","DEFAULT_CONFIG","pageTtl","maxPagesPerDocument","PdfCache","constructor","pdfium","memoryManager","config","this","docs","Map","setDocument","id","filePtr","docPtr","ctx","get","DocumentContext","set","getContext","docId","closeDocument","dispose","delete","closeAllDocuments","values","clear","updateConfig","newConfig","Object","assign","getCacheStats","pagesByDocument","totalPages","entries","pageCount","getCacheSize","documents","pageCache","PageCache","acquirePage","pageIdx","acquire","borrowPage","fn","forceReleaseAll","pdf","FPDF_CloseDocument","cache","accessOrder","evictIfNeeded","pagePtr","FPDF_LoadPage","PageContext","removeFromAccessOrder","updateAccessOrder","clearExpiryTimer","bumpRefCount","existed","release","disposeImmediate","updateTtl","lruPageIdx","getRefCount","push","index","indexOf","splice","ttl","onFinalDispose","refCount","disposed","Error","expiryTimer","clearTimeout","newTtl","setTimeout","textPagePtr","FPDFText_ClosePage","formHandle","FORM_OnBeforeClosePage","PDFiumExt_ExitFormFillEnvironment","formInfoPtr","PDFiumExt_CloseFormFillInfo","FPDF_ClosePage","getTextPage","ensureAlive","FPDFText_LoadPage","getFormHandle","PDFiumExt_OpenFormFillInfo","PDFiumExt_InitFormFillEnvironment","FORM_OnAfterLoadPage","withAnnotation","annotIdx","annotPtr","FPDFPage_GetAnnot","FPDFPage_CloseAnnot","LIMITS","MAX_TOTAL_MEMORY","LOG_SOURCE","LOG_CATEGORY","MemoryManager","pdfiumModule","logger","allocations","totalAllocated","ptr","allocation","timestamp","Date","now","stack","isEnabled","warn","getStats","allocationCount","Array","from","checkLeaks","alloc","BitmapFormat","RenderFlag","PdfiumErrorCode","OffscreenCanvasError","message","super","name","browserImageDataToBlobConverter","getImageData","imageType","quality","OffscreenCanvas","Promise","reject","pdfImage","imageData","ImageData","data","off","putImageData","convertToBlob","type","_scriptName","createPdfium","document","require","pathToFileURL","__filename","href","_documentCurrentScript","tagName","toUpperCase","src","URL","baseURI","async","moduleArg","moduleRtn","readyPromiseResolve","readyPromiseReject","Module","readyPromise","resolve","forEach","prop","getOwnPropertyDescriptor","defineProperty","abort","ENVIRONMENT_IS_WEB","window","ENVIRONMENT_IS_WORKER","importScripts","process","versions","node","readAsync","readBinary","ENVIRONMENT_IS_SHELL","moduleOverrides","thisProgram","scriptDirectory","f","readbuffer","Uint8Array","read","assert","globalThis","print","console","log","error","printErr","self","location","currentScript","startsWith","substr","replace","lastIndexOf","url","xhr","XMLHttpRequest","open","responseType","send","response","isFileURI","fetch","credentials","then","ok","status","out","bind","err","legacyModuleProp","wasmMemory","wasmBinary","WebAssembly","HEAPU8","HEAP16","HEAPU16","HEAP32","HEAPU32","HEAPF32","HEAPF64","ABORT","condition","text","updateMemoryViews","Int8Array","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","checkStackCookie","_emscripten_stack_get_end","cookie1","cookie2","ptrToString","prototype","subarray","__ATPRERUN__","__ATINIT__","__ATPOSTRUN__","runtimeInitialized","addOnPreRun","cb","unshift","addOnPostRun","imul","fround","clz32","trunc","runDependencies","runDependencyWatcher","dependenciesFulfilled","runDependencyTracking","getUniqueRunDependency","orig","random","addRunDependency","_a","call","setInterval","clearInterval","shown","dep","removeRunDependency","callback","what","e","RuntimeError","wasmBinaryFile","tempDouble","tempI64","isDataURI","filename","createExportWrapper","nargs","args","findWasmBinary","path","getBinarySync","file","instantiateArrayBuffer","binaryFile","imports","receiver","getBinaryPromise","binary","instantiate","reason","h16","h8","newName","incoming","configurable","isExportedByForceFilesystem","hookGlobalSymbolAccess","sym","func","missingGlobal","msg","warnOnce","unexportedRuntimeSymbol","callRuntimeCallbacks","callbacks","toString","padStart","stackRestore","val","__emscripten_stack_restore","stackSave","_emscripten_stack_get_current","UTF8Decoder","TextDecoder","UTF8ArrayToString","heapOrArray","idx","maxBytesToRead","NaN","endIdx","endPtr","decode","u0","u1","u2","String","fromCharCode","ch","UTF8ToString","syscallGetVarargI","SYSCALLS","varargs","ret","syscallGetVarargP","PATH","isAbs","charAt","splitPath","exec","slice","normalizeArray","parts","allowAboveRoot","up","last","normalize","isAbsolute","trailingSlash","split","filter","p","join","dirname","result","root","dir","basename","lastSlash","paths","join2","l","r","randomFill","crypto","getRandomValues","initRandomFill","PATH_FS","resolvedPath","resolvedAbsolute","FS","cwd","TypeError","relative","to","trim","arr","start","end","fromParts","toParts","min","samePartsLength","outputParts","concat","FS_stdin_getChar_buffer","lengthBytesUTF8","len","stringToUTF8Array","heap","outIdx","maxBytesToWrite","startIdx","u","intArrayFromString","stringy","dontAddNull","u8array","numBytesWritten","wasmTable","functionsInTableMap","TTY","ttys","init","shutdown","register","dev","ops","input","output","registerDevice","stream_ops","stream","tty","rdev","ErrnoError","seekable","close","fsync","offset","pos","get_char","bytesRead","write","put_char","default_tty_ops","prompt","readline","shift","FS_stdin_getChar","ioctl_tcgets","c_iflag","c_oflag","c_cflag","c_lflag","c_cc","ioctl_tcsets","optional_actions","ioctl_tiocgwinsz","default_tty1_ops","alignMemory","alignment","ceil","mmapAlloc","_emscripten_builtin_memalign","address","fill","zeroMemory","MEMFS","ops_table","mount","createNode","parent","mode","isBlkdev","isFIFO","getattr","node_ops","setattr","lookup","mknod","rename","unlink","rmdir","readdir","symlink","llseek","allocate","mmap","msync","link","readlink","chrdev","chrdev_stream_ops","isDir","contents","isFile","usedBytes","isLink","isChrdev","getFileDataAsTypedArray","expandFileStorage","newCapacity","prevCapacity","oldContents","resizeFileStorage","newSize","attr","ino","nlink","uid","gid","atime","mtime","ctime","blksize","blocks","genericErrors","old_node","new_dir","new_name","new_node","lookupNode","keys","newname","oldpath","position","canOwn","whence","prot","flags","allocated","byteOffset","mmapFlags","preloadPlugins","FS_getMode","canRead","canWrite","ERRNO_CODES","EPERM","ENOENT","ESRCH","EINTR","EIO","ENXIO","E2BIG","ENOEXEC","EBADF","ECHILD","EAGAIN","EWOULDBLOCK","ENOMEM","EACCES","EFAULT","ENOTBLK","EBUSY","EEXIST","EXDEV","ENODEV","ENOTDIR","EISDIR","EINVAL","ENFILE","EMFILE","ENOTTY","ETXTBSY","EFBIG","ENOSPC","ESPIPE","EROFS","EMLINK","EPIPE","EDOM","ERANGE","ENOMSG","EIDRM","ECHRNG","EL2NSYNC","EL3HLT","EL3RST","ELNRNG","EUNATCH","ENOCSI","EL2HLT","EDEADLK","ENOLCK","EBADE","EBADR","EXFULL","ENOANO","EBADRQC","EBADSLT","EDEADLOCK","EBFONT","ENOSTR","ENODATA","ETIME","ENOSR","ENONET","ENOPKG","EREMOTE","ENOLINK","EADV","ESRMNT","ECOMM","EPROTO","EMULTIHOP","EDOTDOT","EBADMSG","ENOTUNIQ","EBADFD","EREMCHG","ELIBACC","ELIBBAD","ELIBSCN","ELIBMAX","ELIBEXEC","ENOSYS","ENOTEMPTY","ENAMETOOLONG","ELOOP","EOPNOTSUPP","EPFNOSUPPORT","ECONNRESET","ENOBUFS","EAFNOSUPPORT","EPROTOTYPE","ENOTSOCK","ENOPROTOOPT","ESHUTDOWN","ECONNREFUSED","EADDRINUSE","ECONNABORTED","ENETUNREACH","ENETDOWN","ETIMEDOUT","EHOSTDOWN","EHOSTUNREACH","EINPROGRESS","EALREADY","EDESTADDRREQ","EMSGSIZE","EPROTONOSUPPORT","ESOCKTNOSUPPORT","EADDRNOTAVAIL","ENETRESET","EISCONN","ENOTCONN","ETOOMANYREFS","EUSERS","EDQUOT","ESTALE","ENOTSUP","ENOMEDIUM","EILSEQ","EOVERFLOW","ECANCELED","ENOTRECOVERABLE","EOWNERDEAD","ESTRPIPE","mounts","devices","streams","nextInode","nameTable","currentPath","initialized","ignorePermissions","errno","_strerror","strError","code","filesystems","syncFSRequests","readFiles","FSStream","shared","object","isRead","isWrite","isAppend","FSNode","mounted","readMode","writeMode","isFolder","isDevice","lookupPath","opts","follow_mount","recurse_count","current","current_path","islast","isMountpoint","follow","count","getPath","isRoot","mountpoint","hashName","parentid","hash","hashAddNode","name_next","hashRemoveNode","errCode","mayLookup","nodeName","destroyNode","isSocket","flagsToPermissionString","flag","perms","nodePermissions","includes","mayCreate","mayDelete","isdir","mayOpen","MAX_OPEN_FDS","nextfd","fd","getStreamChecked","getStream","createStream","closeStream","dupStream","origStream","_b","dup","device","getDevice","major","minor","makedev","ma","mi","getMounts","check","m","pop","syncfs","populate","completed","doCallback","done","errored","pseudo","mountRoot","unmount","next","create","mkdir","mkdirTree","dirs","mkdev","newpath","old_path","new_path","old_dir","old_dirname","new_dirname","old_name","stat","dontFollow","lstat","chmod","lchmod","fchmod","chown","lchown","fchown","truncate","ftruncate","utime","w","FS_modeStringToFlags","created","ungotten","isClosed","getdents","seeking","bytesWritten","ioctl","cmd","arg","readFile","encoding","buf","writeFile","actualNumBytes","isView","byteLength","chdir","createDefaultDirectories","createDefaultDevices","randomBuffer","randomLeft","randomByte","createDevice","createSpecialDirectories","proc_self","createStandardStreams","stdin","stdout","stderr","staticInit","quit","_fflush","findObject","dontResolveLastLink","analyzePath","exists","parentExists","parentPath","parentObject","createPath","reverse","part","createFile","properties","createDataFile","forceLoadFile","obj","createLazyFile","LazyUint8Array","lengthKnown","chunks","chunkOffset","chunkSize","chunkNum","getter","setDataGetter","cacheLength","header","datalength","Number","getResponseHeader","hasByteServing","usesGzip","lazyArray","setRequestHeader","overrideMimeType","responseText","doXHR","_length","_chunkSize","defineProperties","writeChunks","absolutePath","createFolder","createLink","joinPath","standardizePath","DEFAULT_POLLMASK","calculateAt","dirfd","allowEmpty","getStreamFromFD","doStat","abs","floor","getTime","doMsync","addr","getStr","convertI32PairToI53Checked","lo","hi","stringToUTF8","outPtr","MONTH_DAYS_LEAP_CUMULATIVE","MONTH_DAYS_REGULAR_CUMULATIVE","growMemory","pages","grow","ENV","getEnvStrings","strings","env","USER","LOGNAME","PWD","HOME","LANG","navigator","languages","_","wasmTableMirror","getWasmTableEntry","funcPtr","UTF16Decoder","uleb128Encode","n","target","convertJsFunctionToWasm","sig","Function","typeNames","j","parameters","results","sigToWasmTypes","typeSectionBody","sigRet","sigParam","typeCodes","generateFuncType","bytes","module","Instance","exports","getFunctionAddress","WeakMap","item","updateTableMap","freeTableIndexes","setWasmTableEntry","stackAlloc","sz","__emscripten_stack_alloc","ccall","ident","returnType","argTypes","toC","string","stringToUTF8OnStack","array","getCFunc","cArgs","converter","Boolean","convertReturnValue","createPreloadedFile","onload","onerror","dontCreateFile","preFinish","fullname","processData","byteArray","finish","fileData","FS_createDataFile","Browser","handled","plugin","FS_handledByPreloadPlugin","asyncLoad","wasmImports","__assert_fail","line","__syscall_fcntl64","__syscall_fstat64","__syscall_ftruncate64","length_low","length_high","isNaN","__syscall_getdents64","dirp","struct_size","child","__syscall_ioctl","op","termios","argp","winsize","__syscall_lstat64","__syscall_newfstatat","nofollow","__syscall_openat","__syscall_rmdir","__syscall_stat64","__syscall_unlinkat","_abort_js","_emscripten_memcpy_js","dest","num","copyWithin","_emscripten_throw_longjmp","Infinity","_gmtime_js","time_low","time_high","tmPtr","time","date","getUTCSeconds","getUTCMinutes","getUTCHours","getUTCDate","getUTCMonth","getUTCFullYear","getUTCDay","UTC","yday","_localtime_js","getSeconds","getMinutes","getHours","getDate","getMonth","getFullYear","getDay","year","ydayFromDate","getTimezoneOffset","summerOffset","winterOffset","dst","_tzset_js","timezone","daylight","std_name","dst_name","currentYear","winter","summer","stdTimezoneOffset","extractZone","timezoneOffset","sign","absOffset","winterName","summerName","emscripten_date_now","emscripten_resize_heap","requestedSize","oldSize","maxHeapSize","cutDown","overGrownHeapSize","environ_get","__environ","environ_buf","bufSize","stringToAscii","environ_sizes_get","penviron_count","penviron_buf_size","fd_close","fd_read","iov","iovcnt","pnum","curr","doReadv","fd_seek","offset_low","offset_high","newOffset","fd_sync","fd_write","doWritev","invoke_ii","a1","sp","_setThrew","invoke_iii","a2","invoke_iiii","a3","invoke_iiiii","a4","invoke_v","invoke_vii","invoke_viii","invoke_viiii","invoke_viiiiiiiii","a5","a6","a7","a8","a9","info","wasi_snapshot_preview1","receiveInstance","instance","trueModule","instantiateStreaming","catch","createWasm","calledRun","calledPrerun","_emscripten_stack_init","a0","stackCheckInit","run","preRuns","doRun","postRuns","postRun","rtn","RangeError","getEmptyTableSlot","wrapped","value","endsWith","maxIdx","codeUnit","startPtr","numCharsToWrite","librarySymbol","runCaller","functions","EPDF_GetMetaKeyCount","EPDF_GetMetaKeyName","EPDF_GetMetaTrapped","EPDF_GetPageRotationByIndex","EPDF_HasMetaText","EPDF_PNG_EncodeRGBA","EPDF_RenderAnnotBitmap","EPDF_SetMetaText","EPDF_SetMetaTrapped","EPDFAction_CreateGoTo","EPDFAction_CreateGoToNamed","EPDFAction_CreateLaunch","EPDFAction_CreateRemoteGoToByName","EPDFAction_CreateRemoteGoToDest","EPDFAction_CreateURI","EPDFAnnot_ClearColor","EPDFAnnot_GenerateAppearance","EPDFAnnot_GenerateAppearanceWithBlend","EPDFAnnot_GetBlendMode","EPDFAnnot_GetBorderDashPattern","EPDFAnnot_GetBorderDashPatternCount","EPDFAnnot_GetBorderEffect","EPDFAnnot_GetBorderStyle","EPDFAnnot_GetColor","EPDFAnnot_GetDefaultAppearance","EPDFAnnot_GetIcon","EPDFAnnot_GetIntent","EPDFAnnot_GetLineEndings","EPDFAnnot_GetOpacity","EPDFAnnot_GetRectangleDifferences","EPDFAnnot_GetRichContent","EPDFAnnot_GetTextAlignment","EPDFAnnot_GetVerticalAlignment","EPDFAnnot_SetBorderDashPattern","EPDFAnnot_SetBorderStyle","EPDFAnnot_SetColor","EPDFAnnot_SetDefaultAppearance","EPDFAnnot_SetIcon","EPDFAnnot_SetIntent","EPDFAnnot_SetLine","EPDFAnnot_SetLineEndings","EPDFAnnot_SetLinkedAnnot","EPDFAnnot_SetOpacity","EPDFAnnot_SetTextAlignment","EPDFAnnot_SetVerticalAlignment","EPDFAnnot_SetVertices","EPDFAnnot_UpdateAppearanceToRect","EPDFAttachment_GetDescription","EPDFAttachment_GetIntegerValue","EPDFAttachment_SetDescription","EPDFAttachment_SetSubtype","EPDFBookmark_AppendChild","EPDFBookmark_Clear","EPDFBookmark_ClearTarget","EPDFBookmark_Create","EPDFBookmark_Delete","EPDFBookmark_InsertAfter","EPDFBookmark_SetAction","EPDFBookmark_SetDest","EPDFBookmark_SetTitle","EPDFCatalog_GetLanguage","EPDFDest_CreateRemoteView","EPDFDest_CreateRemoteXYZ","EPDFDest_CreateView","EPDFDest_CreateXYZ","EPDFNamedDest_Remove","EPDFNamedDest_SetDest","EPDFPage_CreateAnnot","EPDFPage_GetAnnotByName","EPDFPage_GetAnnotCountRaw","EPDFPage_GetAnnotRaw","EPDFPage_RemoveAnnotByName","EPDFPage_RemoveAnnotRaw","EPDFText_RedactInQuads","EPDFText_RedactInRect","FORM_CanRedo","FORM_CanUndo","FORM_DoDocumentAAction","FORM_DoDocumentJSAction","FORM_DoDocumentOpenAction","FORM_DoPageAAction","FORM_ForceToKillFocus","FORM_GetFocusedAnnot","FORM_GetFocusedText","FORM_GetSelectedText","FORM_IsIndexSelected","FORM_OnChar","FORM_OnFocus","FORM_OnKeyDown","FORM_OnKeyUp","FORM_OnLButtonDoubleClick","FORM_OnLButtonDown","FORM_OnLButtonUp","FORM_OnMouseMove","FORM_OnMouseWheel","FORM_OnRButtonDown","FORM_OnRButtonUp","FORM_Redo","FORM_ReplaceAndKeepSelection","FORM_ReplaceSelection","FORM_SelectAllText","FORM_SetFocusedAnnot","FORM_SetIndexSelected","FORM_Undo","FPDF_AddInstalledFont","FPDF_CloseXObject","FPDF_CopyViewerPreferences","FPDF_CountNamedDests","FPDF_CreateClipPath","FPDF_CreateNewDocument","FPDF_DestroyClipPath","FPDF_DestroyLibrary","FPDF_DeviceToPage","FPDF_DocumentHasValidCrossReferenceTable","FPDF_FFLDraw","FPDF_FreeDefaultSystemFontInfo","FPDF_GetDefaultSystemFontInfo","FPDF_GetDefaultTTFMap","FPDF_GetDefaultTTFMapCount","FPDF_GetDefaultTTFMapEntry","FPDF_GetDocPermissions","FPDF_GetDocUserPermissions","FPDF_GetFileIdentifier","FPDF_GetFileVersion","FPDF_GetFormType","FPDF_GetLastError","FPDF_GetMetaText","FPDF_GetNamedDest","FPDF_GetNamedDestByName","FPDF_GetPageAAction","FPDF_GetPageBoundingBox","FPDF_GetPageCount","FPDF_GetPageHeight","FPDF_GetPageHeightF","FPDF_GetPageLabel","FPDF_GetPageSizeByIndex","FPDF_GetPageSizeByIndexF","FPDF_GetPageWidth","FPDF_GetPageWidthF","FPDF_GetSecurityHandlerRevision","FPDF_GetSignatureCount","FPDF_GetSignatureObject","FPDF_GetTrailerEnds","FPDF_GetXFAPacketContent","FPDF_GetXFAPacketCount","FPDF_GetXFAPacketName","FPDF_ImportNPagesToOne","FPDF_ImportPages","FPDF_ImportPagesByIndex","FPDF_InitLibrary","FPDF_InitLibraryWithConfig","FPDF_LoadCustomDocument","FPDF_LoadDocument","FPDF_LoadMemDocument","FPDF_LoadMemDocument64","FPDF_LoadXFA","FPDF_MovePages","FPDF_NewFormObjectFromXObject","FPDF_NewXObjectFromPage","FPDF_PageToDevice","FPDF_RemoveFormFieldHighlight","FPDF_RenderPage_Close","FPDF_RenderPage_Continue","FPDF_RenderPageBitmap","FPDF_RenderPageBitmap_Start","FPDF_RenderPageBitmapWithColorScheme_Start","FPDF_RenderPageBitmapWithMatrix","FPDF_SaveAsCopy","FPDF_SaveWithVersion","FPDF_SetFormFieldHighlightAlpha","FPDF_SetFormFieldHighlightColor","FPDF_SetSandBoxPolicy","FPDF_SetSystemFontInfo","FPDF_StructElement_Attr_CountChildren","FPDF_StructElement_Attr_GetBlobValue","FPDF_StructElement_Attr_GetBooleanValue","FPDF_StructElement_Attr_GetChildAtIndex","FPDF_StructElement_Attr_GetCount","FPDF_StructElement_Attr_GetName","FPDF_StructElement_Attr_GetNumberValue","FPDF_StructElement_Attr_GetStringValue","FPDF_StructElement_Attr_GetType","FPDF_StructElement_Attr_GetValue","FPDF_StructElement_CountChildren","FPDF_StructElement_GetActualText","FPDF_StructElement_GetAltText","FPDF_StructElement_GetAttributeAtIndex","FPDF_StructElement_GetAttributeCount","FPDF_StructElement_GetChildAtIndex","FPDF_StructElement_GetChildMarkedContentID","FPDF_StructElement_GetID","FPDF_StructElement_GetLang","FPDF_StructElement_GetMarkedContentID","FPDF_StructElement_GetMarkedContentIdAtIndex","FPDF_StructElement_GetMarkedContentIdCount","FPDF_StructElement_GetObjType","FPDF_StructElement_GetParent","FPDF_StructElement_GetStringAttribute","FPDF_StructElement_GetTitle","FPDF_StructElement_GetType","FPDF_StructTree_Close","FPDF_StructTree_CountChildren","FPDF_StructTree_GetChildAtIndex","FPDF_StructTree_GetForPage","FPDF_VIEWERREF_GetDuplex","FPDF_VIEWERREF_GetName","FPDF_VIEWERREF_GetNumCopies","FPDF_VIEWERREF_GetPrintPageRange","FPDF_VIEWERREF_GetPrintPageRangeCount","FPDF_VIEWERREF_GetPrintPageRangeElement","FPDF_VIEWERREF_GetPrintScaling","FPDFAction_GetDest","FPDFAction_GetFilePath","FPDFAction_GetType","FPDFAction_GetURIPath","FPDFAnnot_AddFileAttachment","FPDFAnnot_AddInkStroke","FPDFAnnot_AppendAttachmentPoints","FPDFAnnot_AppendObject","FPDFAnnot_CountAttachmentPoints","FPDFAnnot_GetAP","FPDFAnnot_GetAttachmentPoints","FPDFAnnot_GetBorder","FPDFAnnot_GetColor","FPDFAnnot_GetFileAttachment","FPDFAnnot_GetFlags","FPDFAnnot_GetFocusableSubtypes","FPDFAnnot_GetFocusableSubtypesCount","FPDFAnnot_GetFontColor","FPDFAnnot_GetFontSize","FPDFAnnot_GetFormAdditionalActionJavaScript","FPDFAnnot_GetFormControlCount","FPDFAnnot_GetFormControlIndex","FPDFAnnot_GetFormFieldAlternateName","FPDFAnnot_GetFormFieldAtPoint","FPDFAnnot_GetFormFieldExportValue","FPDFAnnot_GetFormFieldFlags","FPDFAnnot_GetFormFieldName","FPDFAnnot_GetFormFieldType","FPDFAnnot_GetFormFieldValue","FPDFAnnot_GetInkListCount","FPDFAnnot_GetInkListPath","FPDFAnnot_GetLine","FPDFAnnot_GetLink","FPDFAnnot_GetLinkedAnnot","FPDFAnnot_GetNumberValue","FPDFAnnot_GetObject","FPDFAnnot_GetObjectCount","FPDFAnnot_GetOptionCount","FPDFAnnot_GetOptionLabel","FPDFAnnot_GetRect","FPDFAnnot_GetStringValue","FPDFAnnot_GetSubtype","FPDFAnnot_GetValueType","FPDFAnnot_GetVertices","FPDFAnnot_HasAttachmentPoints","FPDFAnnot_HasKey","FPDFAnnot_IsChecked","FPDFAnnot_IsObjectSupportedSubtype","FPDFAnnot_IsOptionSelected","FPDFAnnot_IsSupportedSubtype","FPDFAnnot_RemoveInkList","FPDFAnnot_RemoveObject","FPDFAnnot_SetAP","FPDFAnnot_SetAttachmentPoints","FPDFAnnot_SetBorder","FPDFAnnot_SetColor","FPDFAnnot_SetFlags","FPDFAnnot_SetFocusableSubtypes","FPDFAnnot_SetFontColor","FPDFAnnot_SetFormFieldFlags","FPDFAnnot_SetRect","FPDFAnnot_SetStringValue","FPDFAnnot_SetURI","FPDFAnnot_UpdateObject","FPDFAttachment_GetFile","FPDFAttachment_GetName","FPDFAttachment_GetStringValue","FPDFAttachment_GetSubtype","FPDFAttachment_GetValueType","FPDFAttachment_HasKey","FPDFAttachment_SetFile","FPDFAttachment_SetStringValue","FPDFAvail_Create","FPDFAvail_Destroy","FPDFAvail_GetDocument","FPDFAvail_GetFirstPageNum","FPDFAvail_IsDocAvail","FPDFAvail_IsFormAvail","FPDFAvail_IsLinearized","FPDFAvail_IsPageAvail","FPDFBitmap_Create","FPDFBitmap_CreateEx","FPDFBitmap_Destroy","FPDFBitmap_FillRect","FPDFBitmap_GetBuffer","FPDFBitmap_GetFormat","FPDFBitmap_GetHeight","FPDFBitmap_GetStride","FPDFBitmap_GetWidth","FPDFBookmark_Find","FPDFBookmark_GetAction","FPDFBookmark_GetCount","FPDFBookmark_GetDest","FPDFBookmark_GetFirstChild","FPDFBookmark_GetNextSibling","FPDFBookmark_GetTitle","FPDFCatalog_IsTagged","FPDFCatalog_SetLanguage","FPDFClipPath_CountPaths","FPDFClipPath_CountPathSegments","FPDFClipPath_GetPathSegment","FPDFDest_GetDestPageIndex","FPDFDest_GetLocationInPage","FPDFDest_GetView","FPDFDoc_AddAttachment","FPDFDoc_CloseJavaScriptAction","FPDFDoc_DeleteAttachment","FPDFDOC_ExitFormFillEnvironment","FPDFDoc_GetAttachment","FPDFDoc_GetAttachmentCount","FPDFDoc_GetJavaScriptAction","FPDFDoc_GetJavaScriptActionCount","FPDFDoc_GetPageMode","FPDFDOC_InitFormFillEnvironment","FPDFFont_Close","FPDFFont_GetAscent","FPDFFont_GetBaseFontName","FPDFFont_GetDescent","FPDFFont_GetFamilyName","FPDFFont_GetFlags","FPDFFont_GetFontData","FPDFFont_GetGlyphPath","FPDFFont_GetGlyphWidth","FPDFFont_GetIsEmbedded","FPDFFont_GetItalicAngle","FPDFFont_GetWeight","FPDFFormObj_CountObjects","FPDFFormObj_GetObject","FPDFFormObj_RemoveObject","FPDFGlyphPath_CountGlyphSegments","FPDFGlyphPath_GetGlyphPathSegment","FPDFImageObj_GetBitmap","FPDFImageObj_GetIccProfileDataDecoded","FPDFImageObj_GetImageDataDecoded","FPDFImageObj_GetImageDataRaw","FPDFImageObj_GetImageFilter","FPDFImageObj_GetImageFilterCount","FPDFImageObj_GetImageMetadata","FPDFImageObj_GetImagePixelSize","FPDFImageObj_GetRenderedBitmap","FPDFImageObj_LoadJpegFile","FPDFImageObj_LoadJpegFileInline","FPDFImageObj_SetBitmap","FPDFImageObj_SetMatrix","FPDFJavaScriptAction_GetName","FPDFJavaScriptAction_GetScript","FPDFLink_CloseWebLinks","FPDFLink_CountQuadPoints","FPDFLink_CountRects","FPDFLink_CountWebLinks","FPDFLink_Enumerate","FPDFLink_GetAction","FPDFLink_GetAnnot","FPDFLink_GetAnnotRect","FPDFLink_GetDest","FPDFLink_GetLinkAtPoint","FPDFLink_GetLinkZOrderAtPoint","FPDFLink_GetQuadPoints","FPDFLink_GetRect","FPDFLink_GetTextRange","FPDFLink_GetURL","FPDFLink_LoadWebLinks","FPDFPage_CountObjects","FPDFPage_CreateAnnot","FPDFPage_Delete","FPDFPage_Flatten","FPDFPage_FormFieldZOrderAtPoint","FPDFPage_GenerateContent","FPDFPage_GetAnnotCount","FPDFPage_GetAnnotIndex","FPDFPage_GetArtBox","FPDFPage_GetBleedBox","FPDFPage_GetCropBox","FPDFPage_GetDecodedThumbnailData","FPDFPage_GetMediaBox","FPDFPage_GetObject","FPDFPage_GetRawThumbnailData","FPDFPage_GetRotation","FPDFPage_GetThumbnailAsBitmap","FPDFPage_GetTrimBox","FPDFPage_HasFormFieldAtPoint","FPDFPage_HasTransparency","FPDFPage_InsertClipPath","FPDFPage_InsertObject","FPDFPage_InsertObjectAtIndex","FPDFPage_New","FPDFPage_RemoveAnnot","FPDFPage_RemoveObject","FPDFPage_SetArtBox","FPDFPage_SetBleedBox","FPDFPage_SetCropBox","FPDFPage_SetMediaBox","FPDFPage_SetRotation","FPDFPage_SetTrimBox","FPDFPage_TransformAnnots","FPDFPage_TransFormWithClip","FPDFPageObj_AddMark","FPDFPageObj_CountMarks","FPDFPageObj_CreateNewPath","FPDFPageObj_CreateNewRect","FPDFPageObj_CreateTextObj","FPDFPageObj_Destroy","FPDFPageObj_GetBounds","FPDFPageObj_GetClipPath","FPDFPageObj_GetDashArray","FPDFPageObj_GetDashCount","FPDFPageObj_GetDashPhase","FPDFPageObj_GetFillColor","FPDFPageObj_GetIsActive","FPDFPageObj_GetLineCap","FPDFPageObj_GetLineJoin","FPDFPageObj_GetMark","FPDFPageObj_GetMarkedContentID","FPDFPageObj_GetMatrix","FPDFPageObj_GetRotatedBounds","FPDFPageObj_GetStrokeColor","FPDFPageObj_GetStrokeWidth","FPDFPageObj_GetType","FPDFPageObj_HasTransparency","FPDFPageObj_NewImageObj","FPDFPageObj_NewTextObj","FPDFPageObj_RemoveMark","FPDFPageObj_SetBlendMode","FPDFPageObj_SetDashArray","FPDFPageObj_SetDashPhase","FPDFPageObj_SetFillColor","FPDFPageObj_SetIsActive","FPDFPageObj_SetLineCap","FPDFPageObj_SetLineJoin","FPDFPageObj_SetMatrix","FPDFPageObj_SetStrokeColor","FPDFPageObj_SetStrokeWidth","FPDFPageObj_Transform","FPDFPageObj_TransformClipPath","FPDFPageObj_TransformF","FPDFPageObjMark_CountParams","FPDFPageObjMark_GetName","FPDFPageObjMark_GetParamBlobValue","FPDFPageObjMark_GetParamIntValue","FPDFPageObjMark_GetParamKey","FPDFPageObjMark_GetParamStringValue","FPDFPageObjMark_GetParamValueType","FPDFPageObjMark_RemoveParam","FPDFPageObjMark_SetBlobParam","FPDFPageObjMark_SetIntParam","FPDFPageObjMark_SetStringParam","FPDFPath_BezierTo","FPDFPath_Close","FPDFPath_CountSegments","FPDFPath_GetDrawMode","FPDFPath_GetPathSegment","FPDFPath_LineTo","FPDFPath_MoveTo","FPDFPath_SetDrawMode","FPDFPathSegment_GetClose","FPDFPathSegment_GetPoint","FPDFPathSegment_GetType","FPDFSignatureObj_GetByteRange","FPDFSignatureObj_GetContents","FPDFSignatureObj_GetDocMDPPermission","FPDFSignatureObj_GetReason","FPDFSignatureObj_GetSubFilter","FPDFSignatureObj_GetTime","FPDFText_CountChars","FPDFText_CountRects","FPDFText_FindClose","FPDFText_FindNext","FPDFText_FindPrev","FPDFText_FindStart","FPDFText_GetBoundedText","FPDFText_GetCharAngle","FPDFText_GetCharBox","FPDFText_GetCharIndexAtPos","FPDFText_GetCharIndexFromTextIndex","FPDFText_GetCharOrigin","FPDFText_GetFillColor","FPDFText_GetFontInfo","FPDFText_GetFontSize","FPDFText_GetFontWeight","FPDFText_GetLooseCharBox","FPDFText_GetMatrix","FPDFText_GetRect","FPDFText_GetSchCount","FPDFText_GetSchResultIndex","FPDFText_GetStrokeColor","FPDFText_GetText","FPDFText_GetTextIndexFromCharIndex","FPDFText_GetTextObject","FPDFText_GetUnicode","FPDFText_HasUnicodeMapError","FPDFText_IsGenerated","FPDFText_IsHyphen","FPDFText_LoadCidType2Font","FPDFText_LoadFont","FPDFText_LoadStandardFont","FPDFText_SetCharcodes","FPDFText_SetText","FPDFTextObj_GetFont","FPDFTextObj_GetFontSize","FPDFTextObj_GetRenderedBitmap","FPDFTextObj_GetText","FPDFTextObj_GetTextRenderMode","FPDFTextObj_SetTextRenderMode","PDFiumExt_CloseFileWriter","PDFiumExt_GetFileWriterData","PDFiumExt_GetFileWriterSize","PDFiumExt_Init","PDFiumExt_OpenFileWriter","PDFiumExt_SaveAsCopy","options","memoryLeakCheckInterval","NoopLogger","imageDataConverter","initialize","debug","perf","PdfTaskHelper","destroy","withWString","stringToUTF16","withFloatArray","setValue","openDocumentUrl","password","requestOptions","task","fetchFullAndOpen","wait","doc","PdfErrorCode","Unknown","checkRangeSupport","headResponse","method","headers","fileLength","supportsRanges","parseInt","content","testResponse","Range","statusText","arrayBuf","pdfFile","openDocumentBuffer","openDocumentWithRangeRequest","knownFileLength","retrieveFileLength","openDocumentFromLoader","withCredentials","convertResponseToUint8Array","resp","lenStr","lastError","sizePtr","page","pdfDoc","fileLoader","callbackPtr","addFunction","_pThis","pBuf","fileAccessPtr","getMetadata","DocNotOpen","creationRaw","readMetaText","modRaw","metadata","title","author","subject","keywords","producer","creator","creationDate","pdfDateToDate","modificationDate","trapped","getMetaTrapped","custom","readAllMeta","setMetadata","meta","strMap","field","v","s","setMetaText","writeDate","raw","dateToPdfDate","setMetaTrapped","getDocPermissions","permissions","getDocUserPermissions","getSignatures","signatures","signatureObjPtr","byteRange","subFilter","bufferLength","UTF16ToString","docMDP","getBookmarks","bookmarks","readPdfBookmarks","setBookmarks","list","build","parentPtr","items","bmPtr","wptr","applyBookmarkTarget","children","deleteBookmarks","renderPage","renderRectEncoded","renderPageRect","getAllAnnotations","cancelled","ignore","processChunk","annots","readPageAnnotationsRaw","progress","annotations","readAllAnnotations","annotationsByPage","pageAnnotations","readPageAnnotations","getPageAnnotations","createPageAnnotation","annotation","context","pageCtx","annotationPtr","CantCreateAnnot","isUuidV4","uuidV4","setAnnotString","CantSetAnnotString","setPageAnnoRect","CantSetAnnotRect","isSucceed","PdfAnnotationSubtype","INK","addInkStroke","STAMP","addStampContent","TEXT","addTextContent","FREETEXT","addFreeTextContent","LINE","addLineContent","POLYLINE","POLYGON","addPolyContent","CIRCLE","SQUARE","addShapeContent","UNDERLINE","STRIKEOUT","SQUIGGLY","HIGHLIGHT","addTextMarkupContent","blendMode","CantSetAnnotContent","updatePageAnnotation","getAnnotationByName","NotFound","removePageAnnotation","removeAnnotationByName","getPageTextRects","textRects","readPageTextRects","renderThumbnail","scaleFactor","rest","getAttachments","attachments","attachment","readPdfAttachment","addAttachment","params","description","mimeType","attachmentPtr","wNamePtr","wDescriptionPtr","u8","contentPtr","removeAttachment","readAttachmentContent","CantReadAttachmentSize","CantReadAttachmentContent","setFormFieldValue","formFillInfoPtr","CantFocusAnnot","kind","CantSelectText","textPtr","isSelected","CantSelectOption","kReturn","CantCheckField","flattenPage","PdfPageFlattenFlag","Display","extractPages","pageIndexes","newDocPtr","CantCreateNewDoc","pageIndexesPtr","CantImportPages","saveDocument","extractText","charCount","getTextSlices","slices","byPage","pageIndex","bufPtr","charIndex","stripPdfUnwantedMarkers","merge","files","fileIds","map","ptrs","mergePages","mergeConfigs","configIds","pageIndices","validPageIndices","pageString","saveAsCopy","modified","setAnnotationDate","inReplyToId","setInReplyToId","setAnnotationIcon","icon","PdfAnnotationIcon","Comment","setAnnotationFlags","state","stateModel","setBorderStyle","PdfAnnotationBorderStyle","SOLID","setAnnotationOpacity","opacity","setAnnotationTextAlignment","textAlign","setAnnotationVerticalAlignment","verticalAlign","setAnnotationDefaultAppearance","fontFamily","fontSize","fontColor","intent","setAnnotIntent","backgroundColor","setAnnotationColor","PdfAnnotationColorType","Color","strokeWidth","setInkList","inkList","color","setLinePoints","linePoints","setLineEndings","lineEndings","PdfAnnotationLineEnding","None","strokeStyle","setBorderDashPattern","strokeDashArray","InteriorColor","strokeColor","setPdfAnnoVertices","vertices","setAnnotCustom","syncQuadPointsAnno","segmentRects","addImageObject","PdfStampFit","Cover","pixelCount","bitmapBufferPtr","red","green","blue","alpha","bitmapPtr","imageObjectPtr","matrixPtr","pagePos","convertDevicePointToPagePoint","writerPtr","dataPtr","readCatalogLanguage","byteLen","PdfTrappedStatus","NotSet","True","False","toSet","getMetaKeyCount","customOnly","getMetaKeyName","buflen","rootBookmarkPtr","bookmarkPtr","bookmark","readPdfBookmark","readPdfBookmarkTarget","rectsCount","topPtr","leftPtr","rightPtr","bottomPtr","left","top","right","bottom","deviceXPtr","deviceYPtr","utf16Length","bytesCount","textBuffer","textBufferPtr","flagsPtr","textRect","font","family","getPageGeometry","label","glyphCount","glyphs","g","readGlyphInfo","runs","buildRunsFromGlyphs","curObjPtr","bounds","objPtr","charStart","minX","minY","maxX","maxY","isEmpty","isSpace","dx1Ptr","dy1Ptr","dx2Ptr","dy2Ptr","rectPtr","x1","y1","x2","y2","getPageGlyphs","total","readCharBox","annotationCount","anno","readPageAnnotation","getAnnotString","subType","readPdfTextAnno","readPdfFreeTextAnno","LINK","readPdfLinkAnno","WIDGET","readPdfWidgetAnno","FILEATTACHMENT","readPdfFileAttachmentAnno","readPdfInkAnno","readPdfPolygonAnno","readPdfPolylineAnno","readPdfLineAnno","readPdfHighlightAnno","readPdfStampAnno","readPdfSquareAnno","readPdfCircleAnno","readPdfUnderlineAnno","readPdfSquigglyAnno","readPdfStrikeOutAnno","CARET","readPdfCaretAnno","readPdfAnno","readAnnotationColor","colorType","rPtr","gPtr","bPtr","colour","getAnnotationColor","annotationColor","pdfColorToWebColor","webColor","pdfColor","webColorToPdfColor","getAnnotationOpacity","opacityPtr","pdfAlphaToWebOpacity","pdfOpacity","webOpacityToPdfAlpha","getAnnotationTextAlignment","getAnnotationVerticalAlignment","getAnnotationDefaultAppearance","fontPtr","getBorderStyle","widthPtr","style","UNKNOWN","getAnnotationIcon","getBorderEffect","intensityPtr","intensity","getRectangleDifferences","lPtr","tPtr","getAnnotationDate","getAttachmentDate","getAttachmentString","setAttachmentDate","setAttachmentString","getBorderDashPattern","pattern","arrPtr","okNative","clean","isFinite","getLineEndings","getLinePoints","sx","sy","ex","ey","convertPagePointToDevicePoint","p1","p2","getQuadPointsAnno","quadCount","quads","qi","quadPtr","xs","ys","base","p3","p4","quadToRect","rects","writeQuad","q","rectToQuad","redactTextInRects","recurseForms","drawBlackBoxes","_c","_d","allocFSQuadsBufferFromRects","getInkList","pathCount","points","px","py","stroke","pDev","pPage","getAnnotCustom","annoRect","readPageAnnoRect","convertPageRectToDeviceRect","getInReplyToId","getAnnotationFlags","defaultStyle","da","richContent","getAnnotRichContent","PdfStandardFont","linkPtr","readPdfLinkAnnoTarget","pageRect","readPdfWidgetAnnoField","getAnnotIntent","readPdfAnnoVertices","interiorColor","DASHED","first","readPdfPageObject","pageObjectPtr","PdfPageObjectType","readPathObject","IMAGE","readImageObject","FORM","readFormObject","pathObjectPtr","segmentCount","segments","segment","readPdfSegment","readPdfPageObjectTransformMatrix","annotationObjectPtr","segmentIndex","segmentPtr","segmentType","pointXPtr","pointYPtr","pointX","pointY","point","bitmapWidth","bitmapHeight","format","Uint8ClampedArray","formObjectPtr","objectCount","objects","pageObj","readStampAnnotationContents","getStrokeWidth","hPtr","vPtr","wPtr","rawFlags","flagsToNames","namesToFlags","getAttachmentNumber","JSON","parse","jsonString","stringify","wValPtr","pointsPtr","pagePt","getActionPtr","getDestinationPtr","actionPtr","action","readPdfAction","destinationPtr","destination","readPdfDestination","alternateName","PDF_FORM_FIELD_TYPE","COMBOBOX","LISTBOX","isChecked","exportValue","CHECKBOX","RADIOBUTTON","renderPageAnnotation","dpr","AppearanceMode","Normal","imageQuality","Task","finalScale","toIntRect","devRect","transformRect","wDev","hDev","stride","heapPtr","M","buildUserToDeviceMatrix","mPtr","rgba","blob","encodeViaWasm","wasmError","finally","blobFrom","mime","copy","Blob","outPtrPtr","baseW","baseH","withForms","clipPtr","withAnnotations","formParams","heapBuf","createLocalDestPtr","zoom","PdfZoomMode","XYZ","viewEnum","FitPage","FitHorizontal","FitVertical","FitRectangle","destPtr","PdfActionType","Goto","actPtr","URI","uri","LaunchAppOrOpenFile","RemoteGoto","Unsupported","paramsCountPtr","paramsPtr","maxParmamsCount","zoomMode","paramsCount","paramPtr","hasXPtr","hasYPtr","hasZPtr","xPtr","yPtr","zPtr","hasX","hasY","hasZ","checksum","DW","DH","readPageAnnoAppearanceStreams","normal","readPageAnnoAppearanceStream","rollover","Rollover","down","Down","ap","setPageAnnoAppearanceStream","apContent","x0d","y0d","x1d","y1d","TL","TR","BR","BL","pageRectPtr","getHighlightRects","startIndex","highlightRects","t","searchAllPages","keyword","keywordPtr","reduce","acc","MatchFlag","allResults","pageResults","searchAllInPage","buildContext","fullText","windowChars","WORD_BREAK","test","collected","findWordStart","findWordEnd","before","trimStart","match","after","trimEnd","tidy","truncatedLeft","truncatedRight","searchHandle","preparePrintDocument","includeAnnotations","pageRange","printDocPtr","sanitizedPageRange","sanitizePageRange","removalResult","removeAnnotationsFromPrintDocument","success","annotationsRemoved","pagesProcessed","totalAnnotationsRemoved","annotCount","annotationsRemovedFromPage","annotIndex","sanitized","trimmed","startStr","endStr","validStart","validEnd","pageNum","validPageNum","sort","optimized","rangeStart","rangeEnd","cwrap","createWrappedModule"],"mappings":"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CA,uBACA,wBACA,wBACA,wBACA,0BACA,eACA,gBACA,kBACA,gBACA,6BACA,sBACA,oBACA,oBACA,qBACA,sBACA,oBACA,aACA,gCACA,yBACA,sBACA,wBACA,yBACA,aACA,yBACA,sBACA,kBACA,qBACA,8BACA,wBACA,uBACA,0BACA,wBACA,uBACA,qBACA,4CACA,gBACA,kCACA,iCACA,yBACA,8BACA,8BACA,0BACA,8BACA,0BACA,uBACA,oBACA,qBACA,oBACA,qBACA,2BACA,uBACA,2BACA,qBACA,sBACA,uBACA,qBACA,2BACA,4BACA,qBACA,sBACA,mCACA,0BACA,2BACA,uBACA,4BACA,0BACA,yBACA,0BACA,oBACA,2BACA,oBACA,8BACA,2BACA,qBACA,wBACA,0BACA,iBACA,gBACA,kBACA,iCACA,2BACA,qBACA,iCACA,yBACA,4BACA,yBACA,+BACA,8CACA,mCACA,mBACA,wBACA,mCACA,mCACA,yBACA,0BACA,yCACA,wCACA,2CACA,2CACA,oCACA,mCACA,0CACA,0CACA,mCACA,oCACA,oCACA,oCACA,iCACA,0CACA,wCACA,sCACA,8CACA,4BACA,8BACA,yCACA,gDACA,8CACA,iCACA,gCACA,yCACA,+BACA,8BACA,yBACA,iCACA,mCACA,8BACA,4BACA,0BACA,+BACA,oCACA,yCACA,2CACA,kCACA,sBACA,0BACA,sBACA,yBACA,+BACA,0BACA,oCACA,0BACA,mCACA,mBACA,iCACA,uBACA,sBACA,+BACA,sBACA,kCACA,uCACA,0BACA,yBACA,+CACA,iCACA,iCACA,uCACA,iCACA,qCACA,+BACA,8BACA,8BACA,+BACA,6BACA,4BACA,qBACA,qBACA,4BACA,4BACA,uBACA,4BACA,4BACA,4BACA,qBACA,4BACA,wBACA,0BACA,yBACA,iCACA,oBACA,uBACA,sCACA,8BACA,gCACA,2BACA,0BACA,mBACA,iCACA,uBACA,sBACA,sBACA,kCACA,0BACA,+BACA,qBACA,4BACA,oBACA,0BACA,0BACA,0BACA,iCACA,6BACA,+BACA,yBACA,0BACA,iCACA,oBACA,qBACA,yBACA,6BACA,wBACA,yBACA,0BACA,yBACA,qBACA,uBACA,sBACA,uBACA,wBACA,wBACA,wBACA,wBACA,uBACA,qBACA,0BACA,yBACA,wBACA,8BACA,+BACA,yBACA,wBACA,2BACA,2BACA,kCACA,+BACA,6BACA,8BACA,oBACA,yBACA,iCACA,4BACA,mCACA,yBACA,8BACA,+BACA,oCACA,uBACA,mCACA,kBACA,sBACA,4BACA,uBACA,0BACA,qBACA,wBACA,yBACA,0BACA,0BACA,2BACA,sBACA,4BACA,yBACA,4BACA,oCACA,qCACA,0BACA,yCACA,oCACA,gCACA,+BACA,oCACA,iCACA,kCACA,kCACA,6BACA,mCACA,0BACA,0BACA,gCACA,kCACA,0BACA,4BACA,uBACA,0BACA,sBACA,sBACA,qBACA,yBACA,oBACA,2BACA,iCACA,0BACA,oBACA,yBACA,mBACA,yBACA,uBACA,yBACA,wBACA,mBACA,oBACA,mCACA,4BACA,qBACA,0BACA,0BACA,sBACA,wBACA,uBACA,oCACA,wBACA,sBACA,gCACA,wBACA,iCACA,uBACA,gCACA,4BACA,2BACA,yBACA,gCACA,gBACA,wBACA,yBACA,sBACA,wBACA,uBACA,wBACA,wBACA,uBACA,4BACA,8BACA,uBACA,0BACA,6BACA,6BACA,6BACA,uBACA,yBACA,2BACA,4BACA,4BACA,4BACA,4BACA,2BACA,0BACA,2BACA,uBACA,kCACA,yBACA,gCACA,8BACA,8BACA,uBACA,+BACA,2BACA,0BACA,0BACA,4BACA,4BACA,4BACA,4BACA,2BACA,0BACA,2BACA,yBACA,8BACA,8BACA,yBACA,iCACA,0BACA,+BACA,2BACA,qCACA,oCACA,+BACA,uCACA,qCACA,+BACA,gCACA,+BACA,kCACA,qBACA,kBACA,0BACA,wBACA,2BACA,mBACA,mBACA,wBACA,4BACA,4BACA,2BACA,iCACA,gCACA,wCACA,8BACA,iCACA,4BACA,sBACA,uBACA,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CA,oCACA,oBACA,iCACA,yCACA,gCACA,wCACA,6BACA,qCACA,0BACA,mCACA,wBACA,eACA,wCACA,sBACA,iCACA,yCACA,wCACA,qBACA,gCACA,wCACA,6BACA,uBACA,+BACA,oCACA,uBACA,UACA,+BACA,uBACA,uBACA,eACA,eACA,4BACA,iBACA,yBACA,yBACA,uBACA,iBACA,sBACA,wBACA,uBACA,uBACA,sBACA,aACA,cACA,gBACA,sBACA,gBACA,oBACA,kCACA,4BACA,WACA,UACA,kBACA,mBACA,YACA,eACA,sBACA,yBACA,oBACA,sCACA,uCACA,kCACA,gCACA,wCACA,gCACA,kCACA,qBACA,gCACA,iCACA,iCACA,4BACA,0BACA,6CACA,uBACA,iCACA,+BACA,eACA,6BACA,qBACA,eACA,cACA,WACA,sBACA,qBACA,WACA,WACA,cAEoB35B,QA1lMtB,SAA8B2I,GAC5BD,GAAuBC,EAAK,KAG1B,IAAIG,EAAM,KAAKH,mJAIXkxB,EAAgBlxB,EACfkxB,EAAc73B,WAAW,OAC5B63B,EAAgB,IAAMlxB,GAExBG,GAAO,8CAA8C+wB,MACjDpxB,GAA4BE,KAC9BG,GACE,4FAEJC,GAASD,KAKXE,GAAwBL,EAC1B,GAqkMwB,CACtB,MACA,cACA,YACA,eACA,YACA,eACA,mBACA,sBACA,MACA,MACA,WACA,QACA,aACA,mBACA,mBACA,6BACA,YACA,eACA,aACA,cACA,aACA,aACA,aACA,MACA,cACA,WACA,MACA,YACA,UACA,iBACA,aACA,SACA,WACA,qBACA,UACA,oBACA,YACA,cACA,YACA,YACA,gBACA,WACA,gBACA,iBACA,mBACA,0BACA,mBACA,sBACA,oBACA,iBACA,qBACA,OACA,UACA,cACA,oBACA,oBACA,kBACA,qBACA,gBACA,eACA,sBACA,qBACA,WACA,qBACA,wBACA,4BACA,0BACA,eACA,aACA,gBACA,UACA,WACA,aACA,yBACA,gBACA,kBACA,UACA,8BACA,OACA,qBACA,kBACA,gCACA,6BACA,aACA,eACA,WACA,iBAC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"}