{"version":3,"sources":["../../../node_modules/nanoid/url-alphabet/index.js","../../../node_modules/nanoid/index.js","../src/api/response-utils.ts","../src/array/array-utils.ts","../src/async/async-utils.ts","../src/crypto/index.ts","../../../node_modules/@noble/hashes/src/_u64.ts","../../../node_modules/@noble/hashes/src/utils.ts","../../../node_modules/@noble/hashes/src/sha3.ts","../../../node_modules/bignumber.js/bignumber.mjs","../../../node_modules/@paralleldrive/cuid2/src/index.js","../src/crypto/id-utils.ts","../src/crypto/workers-safe.ts","../src/database/index.ts","../src/date/date-utils.ts","../src/debug/debug-utils.ts","../src/debug/error-formatter.ts","../src/debug/structured-logger.ts","../src/env/env-utils.ts","../src/http/index.ts","../src/math/math-utils.ts","../src/object/object-utils.ts","../src/string/string-utils.ts","../src/types/types-utils.ts","../src/validation/core.ts","../src/validation/validation-utils.ts","../src/validation/web-validation.ts","../src/validation/web.ts","../src/web/errors.ts","../src/web/http-exceptions.ts","../src/web/web-utils.ts"],"names":["urlAlphabet","init_url_alphabet","__esmMin","nanoid_exports","__export","customAlphabet","customRandom","nanoid","random","fillPool","bytes","pool","POOL_SIZE_MULTIPLIER","crypto","poolOffset","alphabet","defaultSize","getRandom","mask","step","size","id","i","init_nanoid","createApiResponse","data","status","message","requestId","response","createErrorResponse","error","code","details","createPaginatedResponse","page","limit","total","totalPages","pagination","HTTP_STATUS","ERROR_CODES","CommonErrors","resource","isErrorResponse","isPaginatedResponse","unique","array","groupBy","keyFn","groups","item","key","chunk","chunks","shuffle","result","j","delay","ms","resolve","debounce","func","wait","timeout","args","throttle","inThrottle","retry","fn","maxAttempts","baseDelay","attempt","delayTime","U32_MASK64","_32n","fromBig","n","le","split","lst","len","Ah","Al","h","l","rotlSH","s","rotlSL","rotlBH","rotlBL","isBytes","a","anumber","title","prefix","abytes","value","length","needsLen","ofLen","got","aexists","instance","checkFinished","aoutput","out","min","u32","arr","clean","arrays","isLE","byteSwap","word","byteSwap32","swap32IfBE","u","createHasher","hashCons","info","hashC","msg","opts","tmp","oidNist","suffix","_0n","_1n","_2n","_7n","_256n","_0x71n","SHA3_PI","SHA3_ROTL","_SHA3_IOTA","round","R","x","y","t","IOTAS","SHA3_IOTA_H","SHA3_IOTA_L","rotlH","rotlL","keccakP","rounds","B","idx1","idx0","B0","B1","Th","Tl","curH","curL","shift","PI","Keccak","_Keccak","blockLen","outputLen","enableXOF","state","pos","take","bufferOut","to","genKeccak","sha3_512","isNumeric","mathceil","mathfloor","bignumberError","tooManyDigits","BASE","LOG_BASE","MAX_SAFE_INTEGER","POWS_TEN","SQRT_BASE","MAX","clone","configObject","div","convertBase","parseNumeric","P","BigNumber","ONE","DECIMAL_PLACES","ROUNDING_MODE","TO_EXP_NEG","TO_EXP_POS","MIN_EXP","MAX_EXP","CRYPTO","MODULO_MODE","POW_PRECISION","FORMAT","ALPHABET","alphabetHasNormalDecimalDigits","v","b","c","caseChanged","e","isNum","str","intCheck","obj","p","maxOrMin","pow2_53","random53bitInt","dp","k","rand","sum","decimal","toBaseOut","baseIn","baseOut","arrL","sign","callerIsToString","d","r","xc","rm","toFixedPoint","coeffToString","multiply","base","m","temp","xlo","xhi","carry","klo","khi","compare","aL","bL","cmp","subtract","more","prod","prodL","q","qc","rem","remL","rem0","xi","xL","yc0","yL","yz","yc","bitFloor","format","c0","ne","toExponential","normalise","basePrefix","dotAfter","dotBefore","isInfinityOrNaN","whitespaceOrPlus","p1","p2","sd","ni","rd","pows10","valueOf","half","isModExp","nIsBig","nIsNeg","nIsOdd","isOdd","xLTy","xe","ye","xcL","ycL","ylo","yhi","zc","sqrtBase","rep","g1","g2","groupSeparator","intPart","fractionPart","isNeg","intDigits","md","d0","d1","d2","exp","n0","n1","z","max","name","zs","bignumber_default","defaultLength","bigLength","createRandom","buffer","createEntropy","entropy","bufToBigInt","buf","hash","input","encoder","randomLetter","createFingerprint","globalObj","globals","sourceString","createCounter","count","initialCountMax","init","counter","fingerprint","firstLetter","time","salt","hashInput","createId","generateDatabaseId","generatePrefixedId","generateMultipleIds","generateShortId","generateIdWithLength","isValidCuid2","isValidPrefixedCuid2","cuid2Part","extractCuid2FromPrefixed","prefixedId","generateSortableId","timestamp","parseSortableId","sortableId","parts","timestampStr","generateBatchIds","ids","BASE36_ALPHABET","HEX_ALPHABET","URL_SAFE_ALPHABET","getSecureRandomBytes","randomStringWithAlphabet","byte","getTimestampComponent","createWorkerSafeCuid2","generateWorkerSafeId","generateWorkerSafePrefixedId","generateWorkerSafeMultipleIds","generateWorkerSafeHexId","generateWorkerSafeUrlSafeId","generateWorkerSafeNumericId","generateWorkerSafeIdWith","generateWorkerSafeSortableId","isValidWorkerSafeCuid2","isValidWorkerSafePrefixedCuid2","WORKERS_SAFE_ALPHABETS","nanoIdCache","DEFAULT_ALPHABET","DEFAULT_LENGTH","defaultGenerator","generateId","cacheKey","generator","generateIdWith","ALPHABETS","generateNumericId","generateHexId","generateUrlSafeId","clearCache","getCacheStats","DatabaseQueryError","QueryNotFoundError","takeFirst","values","takeFirstOrThrow","errorMessage","takeLast","takeLastOrThrow","takeExactlyOne","isEmptyArray","isExactlyOne","hasMultiple","paginate","pageSize","offset","formatDate","date","formats","daysBetween","date1","date2","diffTime","isToday","today","isThisWeek","startOfWeek","endOfWeek","addDays","days","addMonths","months","startOfDay","endOfDay","getRelativeTime","baseDate","diffMs","diffSecs","diffMins","diffHours","diffDays","diffMonths","diffYears","createTimer","label","start","duration","logWithTime","prettyPrint","indent","measureTime","noColor","ch","Chalk","chalk","ErrorFormatter","type","formattedMessage","icon","stepTitle","formattedError","suggestions","border","output","suggestion","logs","line","LogLevel","COLORS","StructuredLogger","_StructuredLogger","config","metadata","formatted","properties","event","err","source","child","originalLog","level","childMetadata","entry","_error","levelStr","colorFn","metaStr","headers","events","ExitCode","formatError","exitCode","createLogger","setupErrorHandlers","logger","reason","promise","isDev","getEnv","isProd","isTest","defaultValue","requireEnv","getEnvNumber","num","getEnvBoolean","lower","getEnvJson","validateEnv","requiredVars","missing","varName","loadEnvConfig","errors","options","CommonEnvVars","origins","detectRuntime","detectDatabaseProvider","__require","getRuntimeCapabilities","getEnvironmentInfo","setupTestEnvironment","isTestEnvironment","isCIEnvironment","DevUtils","HTTP_STATUS_CODES","HTTP_STATUS_PHRASES","OK","CREATED","NO_CONTENT","BAD_REQUEST","UNAUTHORIZED","FORBIDDEN","NOT_FOUND","CONFLICT","UNPROCESSABLE_ENTITY","TOO_MANY_REQUESTS","INTERNAL_SERVER_ERROR","isSuccess","statusCode","isClientError","isServerError","getStatusPhrase","clamp","randomBetween","roundTo","decimals","factor","percentage","degToRad","degrees","radToDeg","radians","deepClone","cloned","omit","keys","pick","isEmpty","toCamelCase","_","char","WORD_BOUNDARY_REGEX","toKebabCase","toSnakeCase","toPascalCase","truncate","capitalize","generateRandomString","charset","removeWhitespace","slugify","isNotNull","isString","isNumber","isBoolean","isArray","isObject","isFunction","isValidEmail","email","isValidPhone","phone","cleanPhone","pattern","isValidUUID","uuid","isValidHexColor","color","isValidIP","ip","ipv4Regex","ipv6Regex","isValidCreditCard","cardNumber","cleanNumber","isEven","digit","isValidUrl","url","validateRequired","requiredFields","field","validateAndNormalizeEmail","normalizedEmail","normalizeEmail","validatePagination","maxLimit","validatedPage","validatedLimit","validateLength","minLength","maxLength","validateRange","validateEnum","allowedValues","validateFields","validations","validate","createValidator","validators","validator","isValidDomain","domain","isValidSlug","slug","isValidJSON","jsonString","isValidBase64","base64String","isValidSemver","version","AppError","_AppError","isOperational","ValidationError","DatabaseError","originalError","NotFoundError","identifier","ConflictError","AuthenticationError","AuthorizationError","RateLimitError","ExternalServiceError","service","isOperationalError","getErrorMessage","getErrorCode","getErrorStatusCode","createHttpError","createBadRequest","createUnauthorized","createForbidden","createNotFound","createConflict","createTooManyRequests","createInternalError","createErrorFromStatus","defaultMessage","getQueryParams","params","searchParams","formatBytes","dm","sizes","copyToClipboard","text","textArea"],"mappings":"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","file":"index.cjs","sourcesContent":["export const urlAlphabet =\n  'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n","import { webcrypto as crypto } from 'node:crypto'\nimport { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js'\nexport { urlAlphabet } from './url-alphabet/index.js'\nconst POOL_SIZE_MULTIPLIER = 128\nlet pool, poolOffset\nfunction fillPool(bytes) {\n  if (!pool || pool.length < bytes) {\n    pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER)\n    crypto.getRandomValues(pool)\n    poolOffset = 0\n  } else if (poolOffset + bytes > pool.length) {\n    crypto.getRandomValues(pool)\n    poolOffset = 0\n  }\n  poolOffset += bytes\n}\nexport function random(bytes) {\n  fillPool((bytes |= 0))\n  return pool.subarray(poolOffset - bytes, poolOffset)\n}\nexport function customRandom(alphabet, defaultSize, getRandom) {\n  let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1\n  let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length)\n  return (size = defaultSize) => {\n    if (!size) return ''\n    let id = ''\n    while (true) {\n      let bytes = getRandom(step)\n      let i = step\n      while (i--) {\n        id += alphabet[bytes[i] & mask] || ''\n        if (id.length >= size) return id\n      }\n    }\n  }\n}\nexport function customAlphabet(alphabet, size = 21) {\n  return customRandom(alphabet, size, random)\n}\nexport function nanoid(size = 21) {\n  fillPool((size |= 0))\n  let id = ''\n  for (let i = poolOffset - size; i < poolOffset; i++) {\n    id += scopedUrlAlphabet[pool[i] & 63]\n  }\n  return id\n}\n","/**\n * Standardized API response utilities for Go Corp projects\n * Provides consistent response formats across all APIs and services\n */\n\n/**\n * Standard API response structure\n */\nexport interface ApiResponse<T = any> {\n  data: T\n  status: number\n  message?: string\n  timestamp: string\n  requestId?: string\n}\n\n/**\n * Standard API error response structure\n */\nexport interface ApiErrorResponse {\n  error: string | Record<string, any>\n  status: number\n  code?: string\n  details?: any\n  timestamp: string\n  requestId?: string\n}\n\n/**\n * Pagination metadata for list responses\n */\nexport interface PaginationMeta {\n  page: number\n  limit: number\n  total: number\n  totalPages: number\n  hasNext: boolean\n  hasPrev: boolean\n}\n\n/**\n * Paginated API response structure\n */\nexport interface PaginatedResponse<T = any> extends ApiResponse<T[]> {\n  pagination: PaginationMeta\n}\n\n/**\n * Creates a standardized success API response\n * @param data - The response data\n * @param status - HTTP status code (default: 200)\n * @param message - Optional success message\n * @param requestId - Optional request identifier\n * @returns Formatted API response\n */\nexport function createApiResponse<T>(\n  data: T,\n  status: number = 200,\n  message?: string,\n  requestId?: string,\n): ApiResponse<T> {\n  const response: ApiResponse<T> = {\n    data,\n    status,\n    timestamp: new Date().toISOString(),\n  }\n\n  if (message !== undefined) {\n    response.message = message\n  }\n\n  if (requestId !== undefined) {\n    response.requestId = requestId\n  }\n\n  return response\n}\n\n/**\n * Creates a standardized error API response\n * @param error - Error message or object\n * @param status - HTTP status code (default: 400)\n * @param code - Optional error code\n * @param details - Optional error details\n * @param requestId - Optional request identifier\n * @returns Formatted API error response\n */\nexport function createErrorResponse(\n  error: string | Record<string, any>,\n  status: number = 400,\n  code?: string,\n  details?: any,\n  requestId?: string,\n): ApiErrorResponse {\n  const response: ApiErrorResponse = {\n    error,\n    status,\n    timestamp: new Date().toISOString(),\n  }\n\n  if (code !== undefined) {\n    response.code = code\n  }\n\n  if (details !== undefined) {\n    response.details = details\n  }\n\n  if (requestId !== undefined) {\n    response.requestId = requestId\n  }\n\n  return response\n}\n\n/**\n * Creates a paginated API response with metadata\n * @param data - Array of items\n * @param page - Current page number\n * @param limit - Items per page\n * @param total - Total number of items\n * @param message - Optional message\n * @param requestId - Optional request identifier\n * @returns Formatted paginated response\n */\nexport function createPaginatedResponse<T>(\n  data: T[],\n  page: number,\n  limit: number,\n  total: number,\n  message?: string,\n  requestId?: string,\n): PaginatedResponse<T> {\n  const totalPages = Math.ceil(total / limit)\n\n  const pagination: PaginationMeta = {\n    page,\n    limit,\n    total,\n    totalPages,\n    hasNext: page < totalPages,\n    hasPrev: page > 1,\n  }\n\n  const response: PaginatedResponse<T> = {\n    data,\n    status: 200,\n    timestamp: new Date().toISOString(),\n    pagination,\n  }\n\n  if (message !== undefined) {\n    response.message = message\n  }\n\n  if (requestId !== undefined) {\n    response.requestId = requestId\n  }\n\n  return response\n}\n\n/**\n * Common HTTP status codes for API responses\n */\nexport const HTTP_STATUS = {\n  // Success\n  OK: 200,\n  CREATED: 201,\n  ACCEPTED: 202,\n  NO_CONTENT: 204,\n\n  // Client Errors\n  BAD_REQUEST: 400,\n  UNAUTHORIZED: 401,\n  FORBIDDEN: 403,\n  NOT_FOUND: 404,\n  METHOD_NOT_ALLOWED: 405,\n  CONFLICT: 409,\n  UNPROCESSABLE_ENTITY: 422,\n  RATE_LIMITED: 429,\n\n  // Server Errors\n  INTERNAL_SERVER_ERROR: 500,\n  BAD_GATEWAY: 502,\n  SERVICE_UNAVAILABLE: 503,\n  GATEWAY_TIMEOUT: 504,\n} as const\n\n/**\n * Common error codes for Go Corp APIs\n */\nexport const ERROR_CODES = {\n  VALIDATION_ERROR: 'VALIDATION_ERROR',\n  AUTHENTICATION_FAILED: 'AUTHENTICATION_FAILED',\n  AUTHORIZATION_FAILED: 'AUTHORIZATION_FAILED',\n  RESOURCE_NOT_FOUND: 'RESOURCE_NOT_FOUND',\n  RESOURCE_CONFLICT: 'RESOURCE_CONFLICT',\n  RATE_LIMIT_EXCEEDED: 'RATE_LIMIT_EXCEEDED',\n  INTERNAL_ERROR: 'INTERNAL_ERROR',\n  SERVICE_UNAVAILABLE: 'SERVICE_UNAVAILABLE',\n  INVALID_REQUEST_FORMAT: 'INVALID_REQUEST_FORMAT',\n  OPERATION_FAILED: 'OPERATION_FAILED',\n} as const\n\n/**\n * Creates common error responses with standard codes\n */\nexport const CommonErrors = {\n  badRequest: (message: string, details?: any, requestId?: string) =>\n    createErrorResponse(message, HTTP_STATUS.BAD_REQUEST, ERROR_CODES.VALIDATION_ERROR, details, requestId),\n\n  unauthorized: (message: string = 'Authentication required', requestId?: string) =>\n    createErrorResponse(message, HTTP_STATUS.UNAUTHORIZED, ERROR_CODES.AUTHENTICATION_FAILED, undefined, requestId),\n\n  forbidden: (message: string = 'Access denied', requestId?: string) =>\n    createErrorResponse(message, HTTP_STATUS.FORBIDDEN, ERROR_CODES.AUTHORIZATION_FAILED, undefined, requestId),\n\n  notFound: (resource: string = 'Resource', requestId?: string) =>\n    createErrorResponse(`${resource} not found`, HTTP_STATUS.NOT_FOUND, ERROR_CODES.RESOURCE_NOT_FOUND, undefined, requestId),\n\n  conflict: (message: string, requestId?: string) =>\n    createErrorResponse(message, HTTP_STATUS.CONFLICT, ERROR_CODES.RESOURCE_CONFLICT, undefined, requestId),\n\n  rateLimited: (message: string = 'Rate limit exceeded', requestId?: string) =>\n    createErrorResponse(message, HTTP_STATUS.RATE_LIMITED, ERROR_CODES.RATE_LIMIT_EXCEEDED, undefined, requestId),\n\n  internalError: (message: string = 'Internal server error', details?: any, requestId?: string) =>\n    createErrorResponse(message, HTTP_STATUS.INTERNAL_SERVER_ERROR, ERROR_CODES.INTERNAL_ERROR, details, requestId),\n}\n\n/**\n * Type guard to check if response is an error response\n * @param response - The response to check\n * @returns true if the response is an error response\n */\nexport function isErrorResponse(response: any): response is ApiErrorResponse {\n  return Boolean(response && typeof response === 'object' && 'error' in response)\n}\n\n/**\n * Type guard to check if response is a paginated response\n * @param response - The response to check\n * @returns true if the response is a paginated response\n */\nexport function isPaginatedResponse(response: any): response is PaginatedResponse {\n  return Boolean(response && typeof response === 'object' && 'pagination' in response)\n}\n","/**\n * Removes duplicate values from an array, preserving the first occurrence of each value.\n * Uses strict equality (===) for comparison.\n *\n * @param array - The input array to deduplicate\n * @returns A new array with unique values in order of first appearance\n *\n * @example\n * ```typescript\n * unique([1, 2, 2, 3, 1]) // [1, 2, 3]\n * unique(['a', 'b', 'a', 'c']) // ['a', 'b', 'c']\n * unique([{id: 1}, {id: 2}, {id: 1}]) // [{id: 1}, {id: 2}, {id: 1}] (objects compared by reference)\n * ```\n */\nexport function unique<T>(array: T[]): T[] {\n  return [...new Set(array)]\n}\n\n/**\n * Groups array items by a key function, creating an object with keys as group identifiers\n * and values as arrays of items belonging to each group.\n *\n * @param array - The input array to group\n * @param keyFn - Function that returns the grouping key for each item\n * @returns An object with grouped items\n *\n * @example\n * ```typescript\n * const users = [{name: 'Alice', role: 'admin'}, {name: 'Bob', role: 'user'}, {name: 'Charlie', role: 'admin'}]\n * groupBy(users, u => u.role)\n * // { admin: [{name: 'Alice', role: 'admin'}, {name: 'Charlie', role: 'admin'}], user: [{name: 'Bob', role: 'user'}] }\n *\n * groupBy([1, 2, 3, 4, 5], n => n % 2 === 0 ? 'even' : 'odd')\n * // { odd: [1, 3, 5], even: [2, 4] }\n * ```\n */\nexport function groupBy<T, K extends string | number>(\n  array: T[],\n  keyFn: (item: T) => K,\n): Record<K, T[]> {\n  return array.reduce((groups, item) => {\n    const key = keyFn(item)\n    if (!groups[key])\n      groups[key] = []\n    groups[key]!.push(item)\n    return groups\n  }, {} as Record<K, T[]>)\n}\n\n/**\n * Chunks an array into smaller arrays of specified size\n */\nexport function chunk<T>(array: T[], size: number): T[][] {\n  if (size <= 0)\n    return []\n  const chunks: T[][] = []\n  for (let i = 0; i < array.length; i += size) {\n    chunks.push(array.slice(i, i + size))\n  }\n  return chunks\n}\n\n/**\n * Shuffles an array randomly using the Fisher-Yates shuffle algorithm.\n * Returns a new array without modifying the original.\n *\n * @param array - The input array to shuffle\n * @returns A new array with elements in random order\n *\n * @example\n * ```typescript\n * shuffle([1, 2, 3, 4, 5]) // [3, 1, 5, 2, 4] (random order)\n * shuffle(['a', 'b', 'c']) // ['c', 'a', 'b'] (random order)\n * ```\n */\nexport function shuffle<T>(array: T[]): T[] {\n  const result = [...array]\n  for (let i = result.length - 1; i > 0; i--) {\n    const j = Math.floor(Math.random() * (i + 1))\n    ;[result[i], result[j]] = [result[j]!, result[i]!]\n  }\n  return result\n}\n","/**\n * Creates a delay/sleep function\n */\nexport function delay(ms: number): Promise<void> {\n  return new Promise(resolve => setTimeout(resolve, ms))\n}\n\n/**\n * Debounces a function - compatible with all JavaScript environments\n */\nexport function debounce<T extends (...args: any[]) => any>(\n  func: T,\n  wait: number,\n): (...args: Parameters<T>) => void {\n  let timeout: ReturnType<typeof setTimeout> | undefined\n  return function (...args: Parameters<T>) {\n    clearTimeout(timeout)\n    timeout = setTimeout(() => func(...args), wait)\n  }\n}\n\n/**\n * Throttles a function\n */\nexport function throttle<T extends (...args: any[]) => any>(\n  func: T,\n  wait: number,\n): (...args: Parameters<T>) => void {\n  let inThrottle: boolean\n  return function (...args: Parameters<T>) {\n    if (!inThrottle) {\n      func(...args)\n      inThrottle = true\n      setTimeout(() => inThrottle = false, wait)\n    }\n  }\n}\n\n/**\n * Retries an async function with exponential backoff\n */\nexport async function retry<T>(\n  fn: () => Promise<T>,\n  maxAttempts: number = 3,\n  baseDelay: number = 1000,\n): Promise<T> {\n  for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n    try {\n      return await fn()\n    }\n    catch (error) {\n      if (attempt === maxAttempts)\n        throw error\n\n      const delayTime = baseDelay * 2 ** (attempt - 1)\n      await delay(delayTime)\n    }\n  }\n  throw new Error('Max attempts reached')\n}\n","/**\n * Crypto Utilities\n *\n * Provides optimized ID generation utilities with caching for better performance.\n * Uses nanoid under the hood for cryptographically secure random ID generation.\n *\n * @example\n * ```typescript\n * import { generateId, generateIdWith } from '@go-corp/utils/crypto';\n *\n * // Generate default ID (16 chars, alphanumeric)\n * const id = generateId(); // \"Uakgb_J5m9g-0JDM\"\n *\n * // Generate custom length ID\n * const shortId = generateId(8); // \"B2n4K7w1\"\n *\n * // Generate with custom alphabet\n * const numericId = generateIdWith('0123456789', 10); // \"8461039271\"\n * ```\n */\n\nimport { customAlphabet } from 'nanoid'\n\n// Cache for commonly used alphabet/length combinations\nconst nanoIdCache = new Map<string, () => string>()\n\n// Default configuration\nconst DEFAULT_ALPHABET = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'\nconst DEFAULT_LENGTH = 16\n\n// Pre-create the most common generator to avoid cache lookup overhead\nconst defaultGenerator = customAlphabet(DEFAULT_ALPHABET, DEFAULT_LENGTH)\n\n/**\n * Generate a random ID with default settings (16 chars, alphanumeric)\n *\n * This function is optimized with caching for better performance.\n * Multiple calls with the same parameters will reuse the same generator.\n *\n * @param length - Length of the generated ID (default: 16)\n * @param alphabet - Characters to use for ID generation (default: alphanumeric)\n * @returns A randomly generated ID string\n */\nexport function generateId(\n  length: number = DEFAULT_LENGTH,\n  alphabet: string = DEFAULT_ALPHABET,\n): string {\n  // Fast path for default parameters\n  if (length === DEFAULT_LENGTH && alphabet === DEFAULT_ALPHABET) {\n    return defaultGenerator()\n  }\n\n  // Cache key for custom parameters\n  const cacheKey = `${alphabet}:${length}`\n  let generator = nanoIdCache.get(cacheKey)\n\n  if (!generator) {\n    generator = customAlphabet(alphabet, length)\n    nanoIdCache.set(cacheKey, generator)\n  }\n\n  return generator()\n}\n\n/**\n * Generate a random ID with custom alphabet and length\n *\n * This is a more explicit version of generateId for better readability\n * when using custom parameters.\n *\n * @param alphabet - Characters to use for ID generation\n * @param length - Length of the generated ID\n * @returns A randomly generated ID string\n */\nexport function generateIdWith(alphabet: string, length: number): string {\n  return generateId(length, alphabet)\n}\n\n/**\n * Common alphabet presets for convenience\n */\nexport const ALPHABETS = {\n  /** Alphanumeric: 0-9, A-Z, a-z */\n  ALPHANUMERIC: DEFAULT_ALPHABET,\n  /** Numeric only: 0-9 */\n  NUMERIC: '0123456789',\n  /** Uppercase alphanumeric: 0-9, A-Z */\n  UPPERCASE: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',\n  /** Lowercase alphanumeric: 0-9, a-z */\n  LOWERCASE: '0123456789abcdefghijklmnopqrstuvwxyz',\n  /** URL-safe: 0-9, A-Z, a-z, -, _ */\n  URL_SAFE: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_',\n  /** Hexadecimal: 0-9, a-f */\n  HEX: '0123456789abcdef',\n} as const\n\n/**\n * Generate a numeric-only ID\n *\n * @param length - Length of the generated ID (default: 16)\n * @returns A numeric ID string\n */\nexport function generateNumericId(length: number = DEFAULT_LENGTH): string {\n  return generateId(length, ALPHABETS.NUMERIC)\n}\n\n/**\n * Generate a hexadecimal ID\n *\n * @param length - Length of the generated ID (default: 16)\n * @returns A hexadecimal ID string\n */\nexport function generateHexId(length: number = DEFAULT_LENGTH): string {\n  return generateId(length, ALPHABETS.HEX)\n}\n\n/**\n * Generate a URL-safe ID (includes hyphens and underscores)\n *\n * @param length - Length of the generated ID (default: 16)\n * @returns A URL-safe ID string\n */\nexport function generateUrlSafeId(length: number = DEFAULT_LENGTH): string {\n  return generateId(length, ALPHABETS.URL_SAFE)\n}\n\n/**\n * Clear the internal cache\n *\n * Useful for memory management in long-running processes or tests.\n */\nexport function clearCache(): void {\n  nanoIdCache.clear()\n}\n\n/**\n * Get cache statistics for debugging\n *\n * @returns Object with cache size information\n */\nexport function getCacheStats(): { size: number, keys: string[] } {\n  return {\n    size: nanoIdCache.size,\n    keys: Array.from(nanoIdCache.keys()),\n  }\n}\n\n// Export CUID2-based ID utilities\nexport * from './id-utils.js'\n\n// Export Workers-safe crypto utilities\nexport * from './workers-safe.js'\n","/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n\nfunction fromBig(\n  n: bigint,\n  le = false\n): {\n  h: number;\n  l: number;\n} {\n  if (le) return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n  return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n\nfunction split(lst: bigint[], le = false): Uint32Array[] {\n  const len = lst.length;\n  let Ah = new Uint32Array(len);\n  let Al = new Uint32Array(len);\n  for (let i = 0; i < len; i++) {\n    const { h, l } = fromBig(lst[i], le);\n    [Ah[i], Al[i]] = [h, l];\n  }\n  return [Ah, Al];\n}\n\nconst toBig = (h: number, l: number): bigint => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, _l: number, s: number): number => h >>> s;\nconst shrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number): number => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h: number, l: number, s: number): number => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number): number => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h: number, l: number): number => l;\nconst rotr32L = (h: number, _l: number): number => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number): number => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: number): number => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h: number, l: number, s: number): number => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: number): number => (h << (s - 32)) | (l >>> (64 - s));\n\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(\n  Ah: number,\n  Al: number,\n  Bh: number,\n  Bl: number\n): {\n  h: number;\n  l: number;\n} {\n  const l = (Al >>> 0) + (Bl >>> 0);\n  return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al: number, Bl: number, Cl: number): number => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number): number =>\n  (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number): number =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number): number =>\n  (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: number): number =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number): number =>\n  (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nexport {\n  add, add3H, add3L, add4H, add4L, add5H, add5L, fromBig, rotlBH, rotlBL, rotlSH, rotlSL, rotr32H, rotr32L, rotrBH, rotrBL, rotrSH, rotrSL, shrSH, shrSL, split, toBig\n};\n// prettier-ignore\nconst u64: { fromBig: typeof fromBig; split: typeof split; toBig: (h: number, l: number) => bigint; shrSH: (h: number, _l: number, s: number) => number; shrSL: (h: number, l: number, s: number) => number; rotrSH: (h: number, l: number, s: number) => number; rotrSL: (h: number, l: number, s: number) => number; rotrBH: (h: number, l: number, s: number) => number; rotrBL: (h: number, l: number, s: number) => number; rotr32H: (_h: number, l: number) => number; rotr32L: (h: number, _l: number) => number; rotlSH: (h: number, l: number, s: number) => number; rotlSL: (h: number, l: number, s: number) => number; rotlBH: (h: number, l: number, s: number) => number; rotlBL: (h: number, l: number, s: number) => number; add: typeof add; add3L: (Al: number, Bl: number, Cl: number) => number; add3H: (low: number, Ah: number, Bh: number, Ch: number) => number; add4L: (Al: number, Bl: number, Cl: number, Dl: number) => number; add4H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number) => number; add5H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) => number; add5L: (Al: number, Bl: number, Cl: number, Dl: number, El: number) => number; } = {\n  fromBig, split, toBig,\n  shrSH, shrSL,\n  rotrSH, rotrSL, rotrBH, rotrBL,\n  rotr32H, rotr32L,\n  rotlSH, rotlSL, rotlBH, rotlBL,\n  add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n","/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a: unknown): a is Uint8Array {\n  return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\n/** Asserts something is positive integer. */\nexport function anumber(n: number, title: string = ''): void {\n  if (!Number.isSafeInteger(n) || n < 0) {\n    const prefix = title && `\"${title}\" `;\n    throw new Error(`${prefix}expected integer >= 0, got ${n}`);\n  }\n}\n\n/** Asserts something is Uint8Array. */\nexport function abytes(value: Uint8Array, length?: number, title: string = ''): Uint8Array {\n  const bytes = isBytes(value);\n  const len = value?.length;\n  const needsLen = length !== undefined;\n  if (!bytes || (needsLen && len !== length)) {\n    const prefix = title && `\"${title}\" `;\n    const ofLen = needsLen ? ` of length ${length}` : '';\n    const got = bytes ? `length=${len}` : `type=${typeof value}`;\n    throw new Error(prefix + 'expected Uint8Array' + ofLen + ', got ' + got);\n  }\n  return value;\n}\n\n/** Asserts something is hash */\nexport function ahash(h: CHash): void {\n  if (typeof h !== 'function' || typeof h.create !== 'function')\n    throw new Error('Hash must wrapped by utils.createHasher');\n  anumber(h.outputLen);\n  anumber(h.blockLen);\n}\n\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance: any, checkFinished = true): void {\n  if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n  if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out: any, instance: any): void {\n  abytes(out, undefined, 'digestInto() output');\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new Error('\"digestInto() output\" expected to be of length >=' + min);\n  }\n}\n\n/** Generic type encompassing 8/16/32-byte arrays - but not 64-byte. */\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr: TypedArray): Uint8Array {\n  return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr: TypedArray): Uint32Array {\n  return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays: TypedArray[]): void {\n  for (let i = 0; i < arrays.length; i++) {\n    arrays[i].fill(0);\n  }\n}\n\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr: TypedArray): DataView {\n  return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word: number, shift: number): number {\n  return (word << (32 - shift)) | (word >>> shift);\n}\n\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word: number, shift: number): number {\n  return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE: boolean = /* @__PURE__ */ (() =>\n  new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n\n/** The byte swap operation for uint32 */\nexport function byteSwap(word: number): number {\n  return (\n    ((word << 24) & 0xff000000) |\n    ((word << 8) & 0xff0000) |\n    ((word >>> 8) & 0xff00) |\n    ((word >>> 24) & 0xff)\n  );\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE: (n: number) => number = isLE\n  ? (n: number) => n\n  : (n: number) => byteSwap(n);\n\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr: Uint32Array): Uint32Array {\n  for (let i = 0; i < arr.length; i++) {\n    arr[i] = byteSwap(arr[i]);\n  }\n  return arr;\n}\n\nexport const swap32IfBE: (u: Uint32Array) => Uint32Array = isLE\n  ? (u: Uint32Array) => u\n  : byteSwap32;\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin: boolean = /* @__PURE__ */ (() =>\n  // @ts-ignore\n  typeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  abytes(bytes);\n  // @ts-ignore\n  if (hasHexBuiltin) return bytes.toHex();\n  // pre-caching improves the speed 6x\n  let hex = '';\n  for (let i = 0; i < bytes.length; i++) {\n    hex += hexes[bytes[i]];\n  }\n  return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 } as const;\nfunction asciiToBase16(ch: number): number | undefined {\n  if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n  if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n  if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n  return;\n}\n\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  // @ts-ignore\n  if (hasHexBuiltin) return Uint8Array.fromHex(hex);\n  const hl = hex.length;\n  const al = hl / 2;\n  if (hl % 2) throw new Error('hex string expected, got unpadded hex of length ' + hl);\n  const array = new Uint8Array(al);\n  for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n    const n1 = asciiToBase16(hex.charCodeAt(hi));\n    const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n    if (n1 === undefined || n2 === undefined) {\n      const char = hex[hi] + hex[hi + 1];\n      throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n    }\n    array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n  }\n  return array;\n}\n\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async (): Promise<void> => {};\n\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(\n  iters: number,\n  tick: number,\n  cb: (i: number) => void\n): Promise<void> {\n  let ts = Date.now();\n  for (let i = 0; i < iters; i++) {\n    cb(i);\n    // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n    const diff = Date.now() - ts;\n    if (diff >= 0 && diff < tick) continue;\n    await nextTick();\n    ts += diff;\n  }\n}\n\n// Global symbols, but ts doesn't see them: https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * Converts string to bytes using UTF8 encoding.\n * Built-in doesn't validate input to be string: we do the check.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error('string expected');\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n/** KDFs can accept string or Uint8Array for user convenience. */\nexport type KDFInput = string | Uint8Array;\n\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data: KDFInput, errorTitle = ''): Uint8Array {\n  if (typeof data === 'string') return utf8ToBytes(data);\n  return abytes(data, undefined, errorTitle);\n}\n\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  let sum = 0;\n  for (let i = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    abytes(a);\n    sum += a.length;\n  }\n  const res = new Uint8Array(sum);\n  for (let i = 0, pad = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    res.set(a, pad);\n    pad += a.length;\n  }\n  return res;\n}\n\ntype EmptyObj = {};\n/** Merges default options and passed options. */\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n    throw new Error('options must be object or undefined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\n/** Common interface for all hashes. */\nexport interface Hash<T> {\n  blockLen: number; // Bytes per block\n  outputLen: number; // Bytes in output\n  update(buf: Uint8Array): this;\n  digestInto(buf: Uint8Array): void;\n  digest(): Uint8Array;\n  destroy(): void;\n  _cloneInto(to?: T): T;\n  clone(): T;\n}\n\n/** PseudoRandom (number) Generator */\nexport interface PRG {\n  addEntropy(seed: Uint8Array): void;\n  randomBytes(length: number): Uint8Array;\n  clean(): void;\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n  xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n  xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\n/** Hash constructor */\nexport type HasherCons<T, Opts = undefined> = Opts extends undefined ? () => T : (opts?: Opts) => T;\n/** Optional hash params. */\nexport type HashInfo = {\n  oid?: Uint8Array; // DER encoded OID in bytes\n};\n/** Hash function */\nexport type CHash<T extends Hash<T> = Hash<any>, Opts = undefined> = {\n  outputLen: number;\n  blockLen: number;\n} & HashInfo &\n  (Opts extends undefined\n    ? {\n        (msg: Uint8Array): Uint8Array;\n        create(): T;\n      }\n    : {\n        (msg: Uint8Array, opts?: Opts): Uint8Array;\n        create(opts?: Opts): T;\n      });\n/** XOF with output */\nexport type CHashXOF<T extends HashXOF<T> = HashXOF<any>, Opts = undefined> = CHash<T, Opts>;\n\n/** Creates function with outputLen, blockLen, create properties from a class constructor. */\nexport function createHasher<T extends Hash<T>, Opts = undefined>(\n  hashCons: HasherCons<T, Opts>,\n  info: HashInfo = {}\n): CHash<T, Opts> {\n  const hashC: any = (msg: Uint8Array, opts?: Opts) => hashCons(opts).update(msg).digest();\n  const tmp = hashCons(undefined);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts?: Opts) => hashCons(opts);\n  Object.assign(hashC, info);\n  return Object.freeze(hashC);\n}\n\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n  const cr = typeof globalThis === 'object' ? (globalThis as any).crypto : null;\n  if (typeof cr?.getRandomValues !== 'function')\n    throw new Error('crypto.getRandomValues must be defined');\n  return cr.getRandomValues(new Uint8Array(bytesLength));\n}\n\n/** Creates OID opts for NIST hashes, with prefix 06 09 60 86 48 01 65 03 04 02. */\nexport const oidNist = (suffix: number): Required<HashInfo> => ({\n  oid: Uint8Array.from([0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, suffix]),\n});\n","/**\n * SHA3 (keccak) hash function, based on a new \"Sponge function\" design.\n * Different from older hashes, the internal state is bigger than output size.\n *\n * Check out [FIPS-202](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf),\n * [Website](https://keccak.team/keccak.html),\n * [the differences between SHA-3 and Keccak](https://crypto.stackexchange.com/questions/15727/what-are-the-key-differences-between-the-draft-sha-3-standard-and-the-keccak-sub).\n *\n * Check out `sha3-addons` module for cSHAKE, k12, and others.\n * @module\n */\nimport { rotlBH, rotlBL, rotlSH, rotlSL, split } from './_u64.ts';\n// prettier-ignore\nimport {\n  abytes, aexists, anumber, aoutput,\n  clean, createHasher,\n  oidNist,\n  swap32IfBE,\n  u32,\n  type CHash, type CHashXOF,\n  type Hash,\n  type HashInfo,\n  type HashXOF\n} from './utils.ts';\n\n// No __PURE__ annotations in sha3 header:\n// EVERYTHING is in fact used on every export.\n// Various per round constants calculations\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _7n = BigInt(7);\nconst _256n = BigInt(256);\nconst _0x71n = BigInt(0x71);\nconst SHA3_PI: number[] = [];\nconst SHA3_ROTL: number[] = [];\nconst _SHA3_IOTA: bigint[] = []; // no pure annotation: var is always used\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n  // Pi\n  [x, y] = [y, (2 * x + 3 * y) % 5];\n  SHA3_PI.push(2 * (5 * y + x));\n  // Rotational\n  SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n  // Iota\n  let t = _0n;\n  for (let j = 0; j < 7; j++) {\n    R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n    if (R & _2n) t ^= _1n << ((_1n << BigInt(j)) - _1n);\n  }\n  _SHA3_IOTA.push(t);\n}\nconst IOTAS = split(_SHA3_IOTA, true);\nconst SHA3_IOTA_H = IOTAS[0];\nconst SHA3_IOTA_L = IOTAS[1];\n\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h: number, l: number, s: number) => (s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s));\nconst rotlL = (h: number, l: number, s: number) => (s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s));\n\n/** `keccakf1600` internal function, additionally allows to adjust round count. */\nexport function keccakP(s: Uint32Array, rounds: number = 24): void {\n  const B = new Uint32Array(5 * 2);\n  // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n  for (let round = 24 - rounds; round < 24; round++) {\n    // Theta θ\n    for (let x = 0; x < 10; x++) B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n    for (let x = 0; x < 10; x += 2) {\n      const idx1 = (x + 8) % 10;\n      const idx0 = (x + 2) % 10;\n      const B0 = B[idx0];\n      const B1 = B[idx0 + 1];\n      const Th = rotlH(B0, B1, 1) ^ B[idx1];\n      const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n      for (let y = 0; y < 50; y += 10) {\n        s[x + y] ^= Th;\n        s[x + y + 1] ^= Tl;\n      }\n    }\n    // Rho (ρ) and Pi (π)\n    let curH = s[2];\n    let curL = s[3];\n    for (let t = 0; t < 24; t++) {\n      const shift = SHA3_ROTL[t];\n      const Th = rotlH(curH, curL, shift);\n      const Tl = rotlL(curH, curL, shift);\n      const PI = SHA3_PI[t];\n      curH = s[PI];\n      curL = s[PI + 1];\n      s[PI] = Th;\n      s[PI + 1] = Tl;\n    }\n    // Chi (χ)\n    for (let y = 0; y < 50; y += 10) {\n      for (let x = 0; x < 10; x++) B[x] = s[y + x];\n      for (let x = 0; x < 10; x++) s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n    }\n    // Iota (ι)\n    s[0] ^= SHA3_IOTA_H[round];\n    s[1] ^= SHA3_IOTA_L[round];\n  }\n  clean(B);\n}\n\n/** Keccak sponge function. */\nexport class Keccak implements Hash<Keccak>, HashXOF<Keccak> {\n  protected state: Uint8Array;\n  protected pos = 0;\n  protected posOut = 0;\n  protected finished = false;\n  protected state32: Uint32Array;\n  protected destroyed = false;\n\n  public blockLen: number;\n  public suffix: number;\n  public outputLen: number;\n  protected enableXOF = false;\n  protected rounds: number;\n\n  // NOTE: we accept arguments in bytes instead of bits here.\n  constructor(\n    blockLen: number,\n    suffix: number,\n    outputLen: number,\n    enableXOF = false,\n    rounds: number = 24\n  ) {\n    this.blockLen = blockLen;\n    this.suffix = suffix;\n    this.outputLen = outputLen;\n    this.enableXOF = enableXOF;\n    this.rounds = rounds;\n    // Can be passed from user as dkLen\n    anumber(outputLen, 'outputLen');\n    // 1600 = 5x5 matrix of 64bit.  1600 bits === 200 bytes\n    // 0 < blockLen < 200\n    if (!(0 < blockLen && blockLen < 200))\n      throw new Error('only keccak-f1600 function is supported');\n    this.state = new Uint8Array(200);\n    this.state32 = u32(this.state);\n  }\n  clone(): Keccak {\n    return this._cloneInto();\n  }\n  protected keccak(): void {\n    swap32IfBE(this.state32);\n    keccakP(this.state32, this.rounds);\n    swap32IfBE(this.state32);\n    this.posOut = 0;\n    this.pos = 0;\n  }\n  update(data: Uint8Array): this {\n    aexists(this);\n    abytes(data);\n    const { blockLen, state } = this;\n    const len = data.length;\n    for (let pos = 0; pos < len; ) {\n      const take = Math.min(blockLen - this.pos, len - pos);\n      for (let i = 0; i < take; i++) state[this.pos++] ^= data[pos++];\n      if (this.pos === blockLen) this.keccak();\n    }\n    return this;\n  }\n  protected finish(): void {\n    if (this.finished) return;\n    this.finished = true;\n    const { state, suffix, pos, blockLen } = this;\n    // Do the padding\n    state[pos] ^= suffix;\n    if ((suffix & 0x80) !== 0 && pos === blockLen - 1) this.keccak();\n    state[blockLen - 1] ^= 0x80;\n    this.keccak();\n  }\n  protected writeInto(out: Uint8Array): Uint8Array {\n    aexists(this, false);\n    abytes(out);\n    this.finish();\n    const bufferOut = this.state;\n    const { blockLen } = this;\n    for (let pos = 0, len = out.length; pos < len; ) {\n      if (this.posOut >= blockLen) this.keccak();\n      const take = Math.min(blockLen - this.posOut, len - pos);\n      out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n      this.posOut += take;\n      pos += take;\n    }\n    return out;\n  }\n  xofInto(out: Uint8Array): Uint8Array {\n    // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n    if (!this.enableXOF) throw new Error('XOF is not possible for this instance');\n    return this.writeInto(out);\n  }\n  xof(bytes: number): Uint8Array {\n    anumber(bytes);\n    return this.xofInto(new Uint8Array(bytes));\n  }\n  digestInto(out: Uint8Array): Uint8Array {\n    aoutput(out, this);\n    if (this.finished) throw new Error('digest() was already called');\n    this.writeInto(out);\n    this.destroy();\n    return out;\n  }\n  digest(): Uint8Array {\n    return this.digestInto(new Uint8Array(this.outputLen));\n  }\n  destroy(): void {\n    this.destroyed = true;\n    clean(this.state);\n  }\n  _cloneInto(to?: Keccak): Keccak {\n    const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n    to ||= new Keccak(blockLen, suffix, outputLen, enableXOF, rounds);\n    to.state32.set(this.state32);\n    to.pos = this.pos;\n    to.posOut = this.posOut;\n    to.finished = this.finished;\n    to.rounds = rounds;\n    // Suffix can change in cSHAKE\n    to.suffix = suffix;\n    to.outputLen = outputLen;\n    to.enableXOF = enableXOF;\n    to.destroyed = this.destroyed;\n    return to;\n  }\n}\n\nconst genKeccak = (suffix: number, blockLen: number, outputLen: number, info: HashInfo = {}) =>\n  createHasher(() => new Keccak(blockLen, suffix, outputLen), info);\n\n/** SHA3-224 hash function. */\nexport const sha3_224: CHash = /* @__PURE__ */ genKeccak(\n  0x06,\n  144,\n  28,\n  /* @__PURE__ */ oidNist(0x07)\n);\n/** SHA3-256 hash function. Different from keccak-256. */\nexport const sha3_256: CHash = /* @__PURE__ */ genKeccak(\n  0x06,\n  136,\n  32,\n  /* @__PURE__ */ oidNist(0x08)\n);\n/** SHA3-384 hash function. */\nexport const sha3_384: CHash = /* @__PURE__ */ genKeccak(\n  0x06,\n  104,\n  48,\n  /* @__PURE__ */ oidNist(0x09)\n);\n/** SHA3-512 hash function. */\nexport const sha3_512: CHash = /* @__PURE__ */ genKeccak(\n  0x06,\n  72,\n  64,\n  /* @__PURE__ */ oidNist(0x0a)\n);\n\n/** keccak-224 hash function. */\nexport const keccak_224: CHash = /* @__PURE__ */ genKeccak(0x01, 144, 28);\n/** keccak-256 hash function. Different from SHA3-256. */\nexport const keccak_256: CHash = /* @__PURE__ */ genKeccak(0x01, 136, 32);\n/** keccak-384 hash function. */\nexport const keccak_384: CHash = /* @__PURE__ */ genKeccak(0x01, 104, 48);\n/** keccak-512 hash function. */\nexport const keccak_512: CHash = /* @__PURE__ */ genKeccak(0x01, 72, 64);\n\n/** Options for SHAKE XOF. */\nexport type ShakeOpts = { dkLen?: number };\n\nconst genShake = (suffix: number, blockLen: number, outputLen: number, info: HashInfo = {}) =>\n  createHasher<Keccak, ShakeOpts>(\n    (opts: ShakeOpts = {}) =>\n      new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true),\n    info\n  );\n\n/** SHAKE128 XOF with 128-bit security. */\nexport const shake128: CHashXOF<Keccak, ShakeOpts> =\n  /* @__PURE__ */\n  genShake(0x1f, 168, 16, /* @__PURE__ */ oidNist(0x0b));\n/** SHAKE256 XOF with 256-bit security. */\nexport const shake256: CHashXOF<Keccak, ShakeOpts> =\n  /* @__PURE__ */\n  genShake(0x1f, 136, 32, /* @__PURE__ */ oidNist(0x0c));\n\n/** SHAKE128 XOF with 256-bit output (NIST version). */\nexport const shake128_32: CHashXOF<Keccak, ShakeOpts> =\n  /* @__PURE__ */\n  genShake(0x1f, 168, 32, /* @__PURE__ */ oidNist(0x0b));\n/** SHAKE256 XOF with 512-bit output (NIST version). */\nexport const shake256_64: CHashXOF<Keccak, ShakeOpts> =\n  /* @__PURE__ */\n  genShake(0x1f, 136, 64, /* @__PURE__ */ oidNist(0x0c));\n","/*\r\n *      bignumber.js v9.3.1\r\n *      A JavaScript library for arbitrary-precision arithmetic.\r\n *      https://github.com/MikeMcl/bignumber.js\r\n *      Copyright (c) 2025 Michael Mclaughlin <M8ch88l@gmail.com>\r\n *      MIT Licensed.\r\n *\r\n *      BigNumber.prototype methods     |  BigNumber methods\r\n *                                      |\r\n *      absoluteValue            abs    |  clone\r\n *      comparedTo                      |  config               set\r\n *      decimalPlaces            dp     |      DECIMAL_PLACES\r\n *      dividedBy                div    |      ROUNDING_MODE\r\n *      dividedToIntegerBy       idiv   |      EXPONENTIAL_AT\r\n *      exponentiatedBy          pow    |      RANGE\r\n *      integerValue                    |      CRYPTO\r\n *      isEqualTo                eq     |      MODULO_MODE\r\n *      isFinite                        |      POW_PRECISION\r\n *      isGreaterThan            gt     |      FORMAT\r\n *      isGreaterThanOrEqualTo   gte    |      ALPHABET\r\n *      isInteger                       |  isBigNumber\r\n *      isLessThan               lt     |  maximum              max\r\n *      isLessThanOrEqualTo      lte    |  minimum              min\r\n *      isNaN                           |  random\r\n *      isNegative                      |  sum\r\n *      isPositive                      |\r\n *      isZero                          |\r\n *      minus                           |\r\n *      modulo                   mod    |\r\n *      multipliedBy             times  |\r\n *      negated                         |\r\n *      plus                            |\r\n *      precision                sd     |\r\n *      shiftedBy                       |\r\n *      squareRoot               sqrt   |\r\n *      toExponential                   |\r\n *      toFixed                         |\r\n *      toFormat                        |\r\n *      toFraction                      |\r\n *      toJSON                          |\r\n *      toNumber                        |\r\n *      toPrecision                     |\r\n *      toString                        |\r\n *      valueOf                         |\r\n *\r\n */\r\n\r\n\r\nvar\r\n  isNumeric = /^-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i,\r\n  mathceil = Math.ceil,\r\n  mathfloor = Math.floor,\r\n\r\n  bignumberError = '[BigNumber Error] ',\r\n  tooManyDigits = bignumberError + 'Number primitive has more than 15 significant digits: ',\r\n\r\n  BASE = 1e14,\r\n  LOG_BASE = 14,\r\n  MAX_SAFE_INTEGER = 0x1fffffffffffff,         // 2^53 - 1\r\n  // MAX_INT32 = 0x7fffffff,                   // 2^31 - 1\r\n  POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13],\r\n  SQRT_BASE = 1e7,\r\n\r\n  // EDITABLE\r\n  // The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and\r\n  // the arguments to toExponential, toFixed, toFormat, and toPrecision.\r\n  MAX = 1E9;                                   // 0 to MAX_INT32\r\n\r\n\r\n/*\r\n * Create and return a BigNumber constructor.\r\n */\r\nfunction clone(configObject) {\r\n  var div, convertBase, parseNumeric,\r\n    P = BigNumber.prototype = { constructor: BigNumber, toString: null, valueOf: null },\r\n    ONE = new BigNumber(1),\r\n\r\n\r\n    //----------------------------- EDITABLE CONFIG DEFAULTS -------------------------------\r\n\r\n\r\n    // The default values below must be integers within the inclusive ranges stated.\r\n    // The values can also be changed at run-time using BigNumber.set.\r\n\r\n    // The maximum number of decimal places for operations involving division.\r\n    DECIMAL_PLACES = 20,                     // 0 to MAX\r\n\r\n    // The rounding mode used when rounding to the above decimal places, and when using\r\n    // toExponential, toFixed, toFormat and toPrecision, and round (default value).\r\n    // UP         0 Away from zero.\r\n    // DOWN       1 Towards zero.\r\n    // CEIL       2 Towards +Infinity.\r\n    // FLOOR      3 Towards -Infinity.\r\n    // HALF_UP    4 Towards nearest neighbour. If equidistant, up.\r\n    // HALF_DOWN  5 Towards nearest neighbour. If equidistant, down.\r\n    // HALF_EVEN  6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n    // HALF_CEIL  7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n    // HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n    ROUNDING_MODE = 4,                       // 0 to 8\r\n\r\n    // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS]\r\n\r\n    // The exponent value at and beneath which toString returns exponential notation.\r\n    // Number type: -7\r\n    TO_EXP_NEG = -7,                         // 0 to -MAX\r\n\r\n    // The exponent value at and above which toString returns exponential notation.\r\n    // Number type: 21\r\n    TO_EXP_POS = 21,                         // 0 to MAX\r\n\r\n    // RANGE : [MIN_EXP, MAX_EXP]\r\n\r\n    // The minimum exponent value, beneath which underflow to zero occurs.\r\n    // Number type: -324  (5e-324)\r\n    MIN_EXP = -1e7,                          // -1 to -MAX\r\n\r\n    // The maximum exponent value, above which overflow to Infinity occurs.\r\n    // Number type:  308  (1.7976931348623157e+308)\r\n    // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow.\r\n    MAX_EXP = 1e7,                           // 1 to MAX\r\n\r\n    // Whether to use cryptographically-secure random number generation, if available.\r\n    CRYPTO = false,                          // true or false\r\n\r\n    // The modulo mode used when calculating the modulus: a mod n.\r\n    // The quotient (q = a / n) is calculated according to the corresponding rounding mode.\r\n    // The remainder (r) is calculated as: r = a - n * q.\r\n    //\r\n    // UP        0 The remainder is positive if the dividend is negative, else is negative.\r\n    // DOWN      1 The remainder has the same sign as the dividend.\r\n    //             This modulo mode is commonly known as 'truncated division' and is\r\n    //             equivalent to (a % n) in JavaScript.\r\n    // FLOOR     3 The remainder has the same sign as the divisor (Python %).\r\n    // HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function.\r\n    // EUCLID    9 Euclidian division. q = sign(n) * floor(a / abs(n)).\r\n    //             The remainder is always positive.\r\n    //\r\n    // The truncated division, floored division, Euclidian division and IEEE 754 remainder\r\n    // modes are commonly used for the modulus operation.\r\n    // Although the other rounding modes can also be used, they may not give useful results.\r\n    MODULO_MODE = 1,                         // 0 to 9\r\n\r\n    // The maximum number of significant digits of the result of the exponentiatedBy operation.\r\n    // If POW_PRECISION is 0, there will be unlimited significant digits.\r\n    POW_PRECISION = 0,                       // 0 to MAX\r\n\r\n    // The format specification used by the BigNumber.prototype.toFormat method.\r\n    FORMAT = {\r\n      prefix: '',\r\n      groupSize: 3,\r\n      secondaryGroupSize: 0,\r\n      groupSeparator: ',',\r\n      decimalSeparator: '.',\r\n      fractionGroupSize: 0,\r\n      fractionGroupSeparator: '\\xA0',        // non-breaking space\r\n      suffix: ''\r\n    },\r\n\r\n    // The alphabet used for base conversion. It must be at least 2 characters long, with no '+',\r\n    // '-', '.', whitespace, or repeated character.\r\n    // '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_'\r\n    ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz',\r\n    alphabetHasNormalDecimalDigits = true;\r\n\r\n\r\n  //------------------------------------------------------------------------------------------\r\n\r\n\r\n  // CONSTRUCTOR\r\n\r\n\r\n  /*\r\n   * The BigNumber constructor and exported function.\r\n   * Create and return a new instance of a BigNumber object.\r\n   *\r\n   * v {number|string|BigNumber} A numeric value.\r\n   * [b] {number} The base of v. Integer, 2 to ALPHABET.length inclusive.\r\n   */\r\n  function BigNumber(v, b) {\r\n    var alphabet, c, caseChanged, e, i, isNum, len, str,\r\n      x = this;\r\n\r\n    // Enable constructor call without `new`.\r\n    if (!(x instanceof BigNumber)) return new BigNumber(v, b);\r\n\r\n    if (b == null) {\r\n\r\n      if (v && v._isBigNumber === true) {\r\n        x.s = v.s;\r\n\r\n        if (!v.c || v.e > MAX_EXP) {\r\n          x.c = x.e = null;\r\n        } else if (v.e < MIN_EXP) {\r\n          x.c = [x.e = 0];\r\n        } else {\r\n          x.e = v.e;\r\n          x.c = v.c.slice();\r\n        }\r\n\r\n        return;\r\n      }\r\n\r\n      if ((isNum = typeof v == 'number') && v * 0 == 0) {\r\n\r\n        // Use `1 / n` to handle minus zero also.\r\n        x.s = 1 / v < 0 ? (v = -v, -1) : 1;\r\n\r\n        // Fast path for integers, where n < 2147483648 (2**31).\r\n        if (v === ~~v) {\r\n          for (e = 0, i = v; i >= 10; i /= 10, e++);\r\n\r\n          if (e > MAX_EXP) {\r\n            x.c = x.e = null;\r\n          } else {\r\n            x.e = e;\r\n            x.c = [v];\r\n          }\r\n\r\n          return;\r\n        }\r\n\r\n        str = String(v);\r\n      } else {\r\n\r\n        if (!isNumeric.test(str = String(v))) return parseNumeric(x, str, isNum);\r\n\r\n        x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1;\r\n      }\r\n\r\n      // Decimal point?\r\n      if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n      // Exponential form?\r\n      if ((i = str.search(/e/i)) > 0) {\r\n\r\n        // Determine exponent.\r\n        if (e < 0) e = i;\r\n        e += +str.slice(i + 1);\r\n        str = str.substring(0, i);\r\n      } else if (e < 0) {\r\n\r\n        // Integer.\r\n        e = str.length;\r\n      }\r\n\r\n    } else {\r\n\r\n      // '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n      intCheck(b, 2, ALPHABET.length, 'Base');\r\n\r\n      // Allow exponential notation to be used with base 10 argument, while\r\n      // also rounding to DECIMAL_PLACES as with other bases.\r\n      if (b == 10 && alphabetHasNormalDecimalDigits) {\r\n        x = new BigNumber(v);\r\n        return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE);\r\n      }\r\n\r\n      str = String(v);\r\n\r\n      if (isNum = typeof v == 'number') {\r\n\r\n        // Avoid potential interpretation of Infinity and NaN as base 44+ values.\r\n        if (v * 0 != 0) return parseNumeric(x, str, isNum, b);\r\n\r\n        x.s = 1 / v < 0 ? (str = str.slice(1), -1) : 1;\r\n\r\n        // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n        if (BigNumber.DEBUG && str.replace(/^0\\.0*|\\./, '').length > 15) {\r\n          throw Error\r\n           (tooManyDigits + v);\r\n        }\r\n      } else {\r\n        x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1;\r\n      }\r\n\r\n      alphabet = ALPHABET.slice(0, b);\r\n      e = i = 0;\r\n\r\n      // Check that str is a valid base b number.\r\n      // Don't use RegExp, so alphabet can contain special characters.\r\n      for (len = str.length; i < len; i++) {\r\n        if (alphabet.indexOf(c = str.charAt(i)) < 0) {\r\n          if (c == '.') {\r\n\r\n            // If '.' is not the first character and it has not be found before.\r\n            if (i > e) {\r\n              e = len;\r\n              continue;\r\n            }\r\n          } else if (!caseChanged) {\r\n\r\n            // Allow e.g. hexadecimal 'FF' as well as 'ff'.\r\n            if (str == str.toUpperCase() && (str = str.toLowerCase()) ||\r\n                str == str.toLowerCase() && (str = str.toUpperCase())) {\r\n              caseChanged = true;\r\n              i = -1;\r\n              e = 0;\r\n              continue;\r\n            }\r\n          }\r\n\r\n          return parseNumeric(x, String(v), isNum, b);\r\n        }\r\n      }\r\n\r\n      // Prevent later check for length on converted number.\r\n      isNum = false;\r\n      str = convertBase(str, b, 10, x.s);\r\n\r\n      // Decimal point?\r\n      if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n      else e = str.length;\r\n    }\r\n\r\n    // Determine leading zeros.\r\n    for (i = 0; str.charCodeAt(i) === 48; i++);\r\n\r\n    // Determine trailing zeros.\r\n    for (len = str.length; str.charCodeAt(--len) === 48;);\r\n\r\n    if (str = str.slice(i, ++len)) {\r\n      len -= i;\r\n\r\n      // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n      if (isNum && BigNumber.DEBUG &&\r\n        len > 15 && (v > MAX_SAFE_INTEGER || v !== mathfloor(v))) {\r\n          throw Error\r\n           (tooManyDigits + (x.s * v));\r\n      }\r\n\r\n       // Overflow?\r\n      if ((e = e - i - 1) > MAX_EXP) {\r\n\r\n        // Infinity.\r\n        x.c = x.e = null;\r\n\r\n      // Underflow?\r\n      } else if (e < MIN_EXP) {\r\n\r\n        // Zero.\r\n        x.c = [x.e = 0];\r\n      } else {\r\n        x.e = e;\r\n        x.c = [];\r\n\r\n        // Transform base\r\n\r\n        // e is the base 10 exponent.\r\n        // i is where to slice str to get the first element of the coefficient array.\r\n        i = (e + 1) % LOG_BASE;\r\n        if (e < 0) i += LOG_BASE;  // i < 1\r\n\r\n        if (i < len) {\r\n          if (i) x.c.push(+str.slice(0, i));\r\n\r\n          for (len -= LOG_BASE; i < len;) {\r\n            x.c.push(+str.slice(i, i += LOG_BASE));\r\n          }\r\n\r\n          i = LOG_BASE - (str = str.slice(i)).length;\r\n        } else {\r\n          i -= len;\r\n        }\r\n\r\n        for (; i--; str += '0');\r\n        x.c.push(+str);\r\n      }\r\n    } else {\r\n\r\n      // Zero.\r\n      x.c = [x.e = 0];\r\n    }\r\n  }\r\n\r\n\r\n  // CONSTRUCTOR PROPERTIES\r\n\r\n\r\n  BigNumber.clone = clone;\r\n\r\n  BigNumber.ROUND_UP = 0;\r\n  BigNumber.ROUND_DOWN = 1;\r\n  BigNumber.ROUND_CEIL = 2;\r\n  BigNumber.ROUND_FLOOR = 3;\r\n  BigNumber.ROUND_HALF_UP = 4;\r\n  BigNumber.ROUND_HALF_DOWN = 5;\r\n  BigNumber.ROUND_HALF_EVEN = 6;\r\n  BigNumber.ROUND_HALF_CEIL = 7;\r\n  BigNumber.ROUND_HALF_FLOOR = 8;\r\n  BigNumber.EUCLID = 9;\r\n\r\n\r\n  /*\r\n   * Configure infrequently-changing library-wide settings.\r\n   *\r\n   * Accept an object with the following optional properties (if the value of a property is\r\n   * a number, it must be an integer within the inclusive range stated):\r\n   *\r\n   *   DECIMAL_PLACES   {number}           0 to MAX\r\n   *   ROUNDING_MODE    {number}           0 to 8\r\n   *   EXPONENTIAL_AT   {number|number[]}  -MAX to MAX  or  [-MAX to 0, 0 to MAX]\r\n   *   RANGE            {number|number[]}  -MAX to MAX (not zero)  or  [-MAX to -1, 1 to MAX]\r\n   *   CRYPTO           {boolean}          true or false\r\n   *   MODULO_MODE      {number}           0 to 9\r\n   *   POW_PRECISION       {number}           0 to MAX\r\n   *   ALPHABET         {string}           A string of two or more unique characters which does\r\n   *                                       not contain '.'.\r\n   *   FORMAT           {object}           An object with some of the following properties:\r\n   *     prefix                 {string}\r\n   *     groupSize              {number}\r\n   *     secondaryGroupSize     {number}\r\n   *     groupSeparator         {string}\r\n   *     decimalSeparator       {string}\r\n   *     fractionGroupSize      {number}\r\n   *     fractionGroupSeparator {string}\r\n   *     suffix                 {string}\r\n   *\r\n   * (The values assigned to the above FORMAT object properties are not checked for validity.)\r\n   *\r\n   * E.g.\r\n   * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 })\r\n   *\r\n   * Ignore properties/parameters set to null or undefined, except for ALPHABET.\r\n   *\r\n   * Return an object with the properties current values.\r\n   */\r\n  BigNumber.config = BigNumber.set = function (obj) {\r\n    var p, v;\r\n\r\n    if (obj != null) {\r\n\r\n      if (typeof obj == 'object') {\r\n\r\n        // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive.\r\n        // '[BigNumber Error] DECIMAL_PLACES {not a primitive number|not an integer|out of range}: {v}'\r\n        if (obj.hasOwnProperty(p = 'DECIMAL_PLACES')) {\r\n          v = obj[p];\r\n          intCheck(v, 0, MAX, p);\r\n          DECIMAL_PLACES = v;\r\n        }\r\n\r\n        // ROUNDING_MODE {number} Integer, 0 to 8 inclusive.\r\n        // '[BigNumber Error] ROUNDING_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n        if (obj.hasOwnProperty(p = 'ROUNDING_MODE')) {\r\n          v = obj[p];\r\n          intCheck(v, 0, 8, p);\r\n          ROUNDING_MODE = v;\r\n        }\r\n\r\n        // EXPONENTIAL_AT {number|number[]}\r\n        // Integer, -MAX to MAX inclusive or\r\n        // [integer -MAX to 0 inclusive, 0 to MAX inclusive].\r\n        // '[BigNumber Error] EXPONENTIAL_AT {not a primitive number|not an integer|out of range}: {v}'\r\n        if (obj.hasOwnProperty(p = 'EXPONENTIAL_AT')) {\r\n          v = obj[p];\r\n          if (v && v.pop) {\r\n            intCheck(v[0], -MAX, 0, p);\r\n            intCheck(v[1], 0, MAX, p);\r\n            TO_EXP_NEG = v[0];\r\n            TO_EXP_POS = v[1];\r\n          } else {\r\n            intCheck(v, -MAX, MAX, p);\r\n            TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v);\r\n          }\r\n        }\r\n\r\n        // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or\r\n        // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive].\r\n        // '[BigNumber Error] RANGE {not a primitive number|not an integer|out of range|cannot be zero}: {v}'\r\n        if (obj.hasOwnProperty(p = 'RANGE')) {\r\n          v = obj[p];\r\n          if (v && v.pop) {\r\n            intCheck(v[0], -MAX, -1, p);\r\n            intCheck(v[1], 1, MAX, p);\r\n            MIN_EXP = v[0];\r\n            MAX_EXP = v[1];\r\n          } else {\r\n            intCheck(v, -MAX, MAX, p);\r\n            if (v) {\r\n              MIN_EXP = -(MAX_EXP = v < 0 ? -v : v);\r\n            } else {\r\n              throw Error\r\n               (bignumberError + p + ' cannot be zero: ' + v);\r\n            }\r\n          }\r\n        }\r\n\r\n        // CRYPTO {boolean} true or false.\r\n        // '[BigNumber Error] CRYPTO not true or false: {v}'\r\n        // '[BigNumber Error] crypto unavailable'\r\n        if (obj.hasOwnProperty(p = 'CRYPTO')) {\r\n          v = obj[p];\r\n          if (v === !!v) {\r\n            if (v) {\r\n              if (typeof crypto != 'undefined' && crypto &&\r\n               (crypto.getRandomValues || crypto.randomBytes)) {\r\n                CRYPTO = v;\r\n              } else {\r\n                CRYPTO = !v;\r\n                throw Error\r\n                 (bignumberError + 'crypto unavailable');\r\n              }\r\n            } else {\r\n              CRYPTO = v;\r\n            }\r\n          } else {\r\n            throw Error\r\n             (bignumberError + p + ' not true or false: ' + v);\r\n          }\r\n        }\r\n\r\n        // MODULO_MODE {number} Integer, 0 to 9 inclusive.\r\n        // '[BigNumber Error] MODULO_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n        if (obj.hasOwnProperty(p = 'MODULO_MODE')) {\r\n          v = obj[p];\r\n          intCheck(v, 0, 9, p);\r\n          MODULO_MODE = v;\r\n        }\r\n\r\n        // POW_PRECISION {number} Integer, 0 to MAX inclusive.\r\n        // '[BigNumber Error] POW_PRECISION {not a primitive number|not an integer|out of range}: {v}'\r\n        if (obj.hasOwnProperty(p = 'POW_PRECISION')) {\r\n          v = obj[p];\r\n          intCheck(v, 0, MAX, p);\r\n          POW_PRECISION = v;\r\n        }\r\n\r\n        // FORMAT {object}\r\n        // '[BigNumber Error] FORMAT not an object: {v}'\r\n        if (obj.hasOwnProperty(p = 'FORMAT')) {\r\n          v = obj[p];\r\n          if (typeof v == 'object') FORMAT = v;\r\n          else throw Error\r\n           (bignumberError + p + ' not an object: ' + v);\r\n        }\r\n\r\n        // ALPHABET {string}\r\n        // '[BigNumber Error] ALPHABET invalid: {v}'\r\n        if (obj.hasOwnProperty(p = 'ALPHABET')) {\r\n          v = obj[p];\r\n\r\n          // Disallow if less than two characters,\r\n          // or if it contains '+', '-', '.', whitespace, or a repeated character.\r\n          if (typeof v == 'string' && !/^.?$|[+\\-.\\s]|(.).*\\1/.test(v)) {\r\n            alphabetHasNormalDecimalDigits = v.slice(0, 10) == '0123456789';\r\n            ALPHABET = v;\r\n          } else {\r\n            throw Error\r\n             (bignumberError + p + ' invalid: ' + v);\r\n          }\r\n        }\r\n\r\n      } else {\r\n\r\n        // '[BigNumber Error] Object expected: {v}'\r\n        throw Error\r\n         (bignumberError + 'Object expected: ' + obj);\r\n      }\r\n    }\r\n\r\n    return {\r\n      DECIMAL_PLACES: DECIMAL_PLACES,\r\n      ROUNDING_MODE: ROUNDING_MODE,\r\n      EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS],\r\n      RANGE: [MIN_EXP, MAX_EXP],\r\n      CRYPTO: CRYPTO,\r\n      MODULO_MODE: MODULO_MODE,\r\n      POW_PRECISION: POW_PRECISION,\r\n      FORMAT: FORMAT,\r\n      ALPHABET: ALPHABET\r\n    };\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if v is a BigNumber instance, otherwise return false.\r\n   *\r\n   * If BigNumber.DEBUG is true, throw if a BigNumber instance is not well-formed.\r\n   *\r\n   * v {any}\r\n   *\r\n   * '[BigNumber Error] Invalid BigNumber: {v}'\r\n   */\r\n  BigNumber.isBigNumber = function (v) {\r\n    if (!v || v._isBigNumber !== true) return false;\r\n    if (!BigNumber.DEBUG) return true;\r\n\r\n    var i, n,\r\n      c = v.c,\r\n      e = v.e,\r\n      s = v.s;\r\n\r\n    out: if ({}.toString.call(c) == '[object Array]') {\r\n\r\n      if ((s === 1 || s === -1) && e >= -MAX && e <= MAX && e === mathfloor(e)) {\r\n\r\n        // If the first element is zero, the BigNumber value must be zero.\r\n        if (c[0] === 0) {\r\n          if (e === 0 && c.length === 1) return true;\r\n          break out;\r\n        }\r\n\r\n        // Calculate number of digits that c[0] should have, based on the exponent.\r\n        i = (e + 1) % LOG_BASE;\r\n        if (i < 1) i += LOG_BASE;\r\n\r\n        // Calculate number of digits of c[0].\r\n        //if (Math.ceil(Math.log(c[0] + 1) / Math.LN10) == i) {\r\n        if (String(c[0]).length == i) {\r\n\r\n          for (i = 0; i < c.length; i++) {\r\n            n = c[i];\r\n            if (n < 0 || n >= BASE || n !== mathfloor(n)) break out;\r\n          }\r\n\r\n          // Last element cannot be zero, unless it is the only element.\r\n          if (n !== 0) return true;\r\n        }\r\n      }\r\n\r\n    // Infinity/NaN\r\n    } else if (c === null && e === null && (s === null || s === 1 || s === -1)) {\r\n      return true;\r\n    }\r\n\r\n    throw Error\r\n      (bignumberError + 'Invalid BigNumber: ' + v);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber whose value is the maximum of the arguments.\r\n   *\r\n   * arguments {number|string|BigNumber}\r\n   */\r\n  BigNumber.maximum = BigNumber.max = function () {\r\n    return maxOrMin(arguments, -1);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber whose value is the minimum of the arguments.\r\n   *\r\n   * arguments {number|string|BigNumber}\r\n   */\r\n  BigNumber.minimum = BigNumber.min = function () {\r\n    return maxOrMin(arguments, 1);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber with a random value equal to or greater than 0 and less than 1,\r\n   * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing\r\n   * zeros are produced).\r\n   *\r\n   * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp}'\r\n   * '[BigNumber Error] crypto unavailable'\r\n   */\r\n  BigNumber.random = (function () {\r\n    var pow2_53 = 0x20000000000000;\r\n\r\n    // Return a 53 bit integer n, where 0 <= n < 9007199254740992.\r\n    // Check if Math.random() produces more than 32 bits of randomness.\r\n    // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits.\r\n    // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1.\r\n    var random53bitInt = (Math.random() * pow2_53) & 0x1fffff\r\n     ? function () { return mathfloor(Math.random() * pow2_53); }\r\n     : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) +\r\n       (Math.random() * 0x800000 | 0); };\r\n\r\n    return function (dp) {\r\n      var a, b, e, k, v,\r\n        i = 0,\r\n        c = [],\r\n        rand = new BigNumber(ONE);\r\n\r\n      if (dp == null) dp = DECIMAL_PLACES;\r\n      else intCheck(dp, 0, MAX);\r\n\r\n      k = mathceil(dp / LOG_BASE);\r\n\r\n      if (CRYPTO) {\r\n\r\n        // Browsers supporting crypto.getRandomValues.\r\n        if (crypto.getRandomValues) {\r\n\r\n          a = crypto.getRandomValues(new Uint32Array(k *= 2));\r\n\r\n          for (; i < k;) {\r\n\r\n            // 53 bits:\r\n            // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2)\r\n            // 11111 11111111 11111111 11111111 11100000 00000000 00000000\r\n            // ((Math.pow(2, 32) - 1) >>> 11).toString(2)\r\n            //                                     11111 11111111 11111111\r\n            // 0x20000 is 2^21.\r\n            v = a[i] * 0x20000 + (a[i + 1] >>> 11);\r\n\r\n            // Rejection sampling:\r\n            // 0 <= v < 9007199254740992\r\n            // Probability that v >= 9e15, is\r\n            // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251\r\n            if (v >= 9e15) {\r\n              b = crypto.getRandomValues(new Uint32Array(2));\r\n              a[i] = b[0];\r\n              a[i + 1] = b[1];\r\n            } else {\r\n\r\n              // 0 <= v <= 8999999999999999\r\n              // 0 <= (v % 1e14) <= 99999999999999\r\n              c.push(v % 1e14);\r\n              i += 2;\r\n            }\r\n          }\r\n          i = k / 2;\r\n\r\n        // Node.js supporting crypto.randomBytes.\r\n        } else if (crypto.randomBytes) {\r\n\r\n          // buffer\r\n          a = crypto.randomBytes(k *= 7);\r\n\r\n          for (; i < k;) {\r\n\r\n            // 0x1000000000000 is 2^48, 0x10000000000 is 2^40\r\n            // 0x100000000 is 2^32, 0x1000000 is 2^24\r\n            // 11111 11111111 11111111 11111111 11111111 11111111 11111111\r\n            // 0 <= v < 9007199254740992\r\n            v = ((a[i] & 31) * 0x1000000000000) + (a[i + 1] * 0x10000000000) +\r\n               (a[i + 2] * 0x100000000) + (a[i + 3] * 0x1000000) +\r\n               (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6];\r\n\r\n            if (v >= 9e15) {\r\n              crypto.randomBytes(7).copy(a, i);\r\n            } else {\r\n\r\n              // 0 <= (v % 1e14) <= 99999999999999\r\n              c.push(v % 1e14);\r\n              i += 7;\r\n            }\r\n          }\r\n          i = k / 7;\r\n        } else {\r\n          CRYPTO = false;\r\n          throw Error\r\n           (bignumberError + 'crypto unavailable');\r\n        }\r\n      }\r\n\r\n      // Use Math.random.\r\n      if (!CRYPTO) {\r\n\r\n        for (; i < k;) {\r\n          v = random53bitInt();\r\n          if (v < 9e15) c[i++] = v % 1e14;\r\n        }\r\n      }\r\n\r\n      k = c[--i];\r\n      dp %= LOG_BASE;\r\n\r\n      // Convert trailing digits to zeros according to dp.\r\n      if (k && dp) {\r\n        v = POWS_TEN[LOG_BASE - dp];\r\n        c[i] = mathfloor(k / v) * v;\r\n      }\r\n\r\n      // Remove trailing elements which are zero.\r\n      for (; c[i] === 0; c.pop(), i--);\r\n\r\n      // Zero?\r\n      if (i < 0) {\r\n        c = [e = 0];\r\n      } else {\r\n\r\n        // Remove leading elements which are zero and adjust exponent accordingly.\r\n        for (e = -1 ; c[0] === 0; c.splice(0, 1), e -= LOG_BASE);\r\n\r\n        // Count the digits of the first element of c to determine leading zeros, and...\r\n        for (i = 1, v = c[0]; v >= 10; v /= 10, i++);\r\n\r\n        // adjust the exponent accordingly.\r\n        if (i < LOG_BASE) e -= LOG_BASE - i;\r\n      }\r\n\r\n      rand.e = e;\r\n      rand.c = c;\r\n      return rand;\r\n    };\r\n  })();\r\n\r\n\r\n   /*\r\n   * Return a BigNumber whose value is the sum of the arguments.\r\n   *\r\n   * arguments {number|string|BigNumber}\r\n   */\r\n  BigNumber.sum = function () {\r\n    var i = 1,\r\n      args = arguments,\r\n      sum = new BigNumber(args[0]);\r\n    for (; i < args.length;) sum = sum.plus(args[i++]);\r\n    return sum;\r\n  };\r\n\r\n\r\n  // PRIVATE FUNCTIONS\r\n\r\n\r\n  // Called by BigNumber and BigNumber.prototype.toString.\r\n  convertBase = (function () {\r\n    var decimal = '0123456789';\r\n\r\n    /*\r\n     * Convert string of baseIn to an array of numbers of baseOut.\r\n     * Eg. toBaseOut('255', 10, 16) returns [15, 15].\r\n     * Eg. toBaseOut('ff', 16, 10) returns [2, 5, 5].\r\n     */\r\n    function toBaseOut(str, baseIn, baseOut, alphabet) {\r\n      var j,\r\n        arr = [0],\r\n        arrL,\r\n        i = 0,\r\n        len = str.length;\r\n\r\n      for (; i < len;) {\r\n        for (arrL = arr.length; arrL--; arr[arrL] *= baseIn);\r\n\r\n        arr[0] += alphabet.indexOf(str.charAt(i++));\r\n\r\n        for (j = 0; j < arr.length; j++) {\r\n\r\n          if (arr[j] > baseOut - 1) {\r\n            if (arr[j + 1] == null) arr[j + 1] = 0;\r\n            arr[j + 1] += arr[j] / baseOut | 0;\r\n            arr[j] %= baseOut;\r\n          }\r\n        }\r\n      }\r\n\r\n      return arr.reverse();\r\n    }\r\n\r\n    // Convert a numeric string of baseIn to a numeric string of baseOut.\r\n    // If the caller is toString, we are converting from base 10 to baseOut.\r\n    // If the caller is BigNumber, we are converting from baseIn to base 10.\r\n    return function (str, baseIn, baseOut, sign, callerIsToString) {\r\n      var alphabet, d, e, k, r, x, xc, y,\r\n        i = str.indexOf('.'),\r\n        dp = DECIMAL_PLACES,\r\n        rm = ROUNDING_MODE;\r\n\r\n      // Non-integer.\r\n      if (i >= 0) {\r\n        k = POW_PRECISION;\r\n\r\n        // Unlimited precision.\r\n        POW_PRECISION = 0;\r\n        str = str.replace('.', '');\r\n        y = new BigNumber(baseIn);\r\n        x = y.pow(str.length - i);\r\n        POW_PRECISION = k;\r\n\r\n        // Convert str as if an integer, then restore the fraction part by dividing the\r\n        // result by its base raised to a power.\r\n\r\n        y.c = toBaseOut(toFixedPoint(coeffToString(x.c), x.e, '0'),\r\n         10, baseOut, decimal);\r\n        y.e = y.c.length;\r\n      }\r\n\r\n      // Convert the number as integer.\r\n\r\n      xc = toBaseOut(str, baseIn, baseOut, callerIsToString\r\n       ? (alphabet = ALPHABET, decimal)\r\n       : (alphabet = decimal, ALPHABET));\r\n\r\n      // xc now represents str as an integer and converted to baseOut. e is the exponent.\r\n      e = k = xc.length;\r\n\r\n      // Remove trailing zeros.\r\n      for (; xc[--k] == 0; xc.pop());\r\n\r\n      // Zero?\r\n      if (!xc[0]) return alphabet.charAt(0);\r\n\r\n      // Does str represent an integer? If so, no need for the division.\r\n      if (i < 0) {\r\n        --e;\r\n      } else {\r\n        x.c = xc;\r\n        x.e = e;\r\n\r\n        // The sign is needed for correct rounding.\r\n        x.s = sign;\r\n        x = div(x, y, dp, rm, baseOut);\r\n        xc = x.c;\r\n        r = x.r;\r\n        e = x.e;\r\n      }\r\n\r\n      // xc now represents str converted to baseOut.\r\n\r\n      // The index of the rounding digit.\r\n      d = e + dp + 1;\r\n\r\n      // The rounding digit: the digit to the right of the digit that may be rounded up.\r\n      i = xc[d];\r\n\r\n      // Look at the rounding digits and mode to determine whether to round up.\r\n\r\n      k = baseOut / 2;\r\n      r = r || d < 0 || xc[d + 1] != null;\r\n\r\n      r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n            : i > k || i == k &&(rm == 4 || r || rm == 6 && xc[d - 1] & 1 ||\r\n             rm == (x.s < 0 ? 8 : 7));\r\n\r\n      // If the index of the rounding digit is not greater than zero, or xc represents\r\n      // zero, then the result of the base conversion is zero or, if rounding up, a value\r\n      // such as 0.00001.\r\n      if (d < 1 || !xc[0]) {\r\n\r\n        // 1^-dp or 0\r\n        str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0);\r\n      } else {\r\n\r\n        // Truncate xc to the required number of decimal places.\r\n        xc.length = d;\r\n\r\n        // Round up?\r\n        if (r) {\r\n\r\n          // Rounding up may mean the previous digit has to be rounded up and so on.\r\n          for (--baseOut; ++xc[--d] > baseOut;) {\r\n            xc[d] = 0;\r\n\r\n            if (!d) {\r\n              ++e;\r\n              xc = [1].concat(xc);\r\n            }\r\n          }\r\n        }\r\n\r\n        // Determine trailing zeros.\r\n        for (k = xc.length; !xc[--k];);\r\n\r\n        // E.g. [4, 11, 15] becomes 4bf.\r\n        for (i = 0, str = ''; i <= k; str += alphabet.charAt(xc[i++]));\r\n\r\n        // Add leading zeros, decimal point and trailing zeros as required.\r\n        str = toFixedPoint(str, e, alphabet.charAt(0));\r\n      }\r\n\r\n      // The caller will add the sign.\r\n      return str;\r\n    };\r\n  })();\r\n\r\n\r\n  // Perform division in the specified base. Called by div and convertBase.\r\n  div = (function () {\r\n\r\n    // Assume non-zero x and k.\r\n    function multiply(x, k, base) {\r\n      var m, temp, xlo, xhi,\r\n        carry = 0,\r\n        i = x.length,\r\n        klo = k % SQRT_BASE,\r\n        khi = k / SQRT_BASE | 0;\r\n\r\n      for (x = x.slice(); i--;) {\r\n        xlo = x[i] % SQRT_BASE;\r\n        xhi = x[i] / SQRT_BASE | 0;\r\n        m = khi * xlo + xhi * klo;\r\n        temp = klo * xlo + ((m % SQRT_BASE) * SQRT_BASE) + carry;\r\n        carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi;\r\n        x[i] = temp % base;\r\n      }\r\n\r\n      if (carry) x = [carry].concat(x);\r\n\r\n      return x;\r\n    }\r\n\r\n    function compare(a, b, aL, bL) {\r\n      var i, cmp;\r\n\r\n      if (aL != bL) {\r\n        cmp = aL > bL ? 1 : -1;\r\n      } else {\r\n\r\n        for (i = cmp = 0; i < aL; i++) {\r\n\r\n          if (a[i] != b[i]) {\r\n            cmp = a[i] > b[i] ? 1 : -1;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n\r\n      return cmp;\r\n    }\r\n\r\n    function subtract(a, b, aL, base) {\r\n      var i = 0;\r\n\r\n      // Subtract b from a.\r\n      for (; aL--;) {\r\n        a[aL] -= i;\r\n        i = a[aL] < b[aL] ? 1 : 0;\r\n        a[aL] = i * base + a[aL] - b[aL];\r\n      }\r\n\r\n      // Remove leading zeros.\r\n      for (; !a[0] && a.length > 1; a.splice(0, 1));\r\n    }\r\n\r\n    // x: dividend, y: divisor.\r\n    return function (x, y, dp, rm, base) {\r\n      var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0,\r\n        yL, yz,\r\n        s = x.s == y.s ? 1 : -1,\r\n        xc = x.c,\r\n        yc = y.c;\r\n\r\n      // Either NaN, Infinity or 0?\r\n      if (!xc || !xc[0] || !yc || !yc[0]) {\r\n\r\n        return new BigNumber(\r\n\r\n         // Return NaN if either NaN, or both Infinity or 0.\r\n         !x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN :\r\n\r\n          // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0.\r\n          xc && xc[0] == 0 || !yc ? s * 0 : s / 0\r\n       );\r\n      }\r\n\r\n      q = new BigNumber(s);\r\n      qc = q.c = [];\r\n      e = x.e - y.e;\r\n      s = dp + e + 1;\r\n\r\n      if (!base) {\r\n        base = BASE;\r\n        e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE);\r\n        s = s / LOG_BASE | 0;\r\n      }\r\n\r\n      // Result exponent may be one less then the current value of e.\r\n      // The coefficients of the BigNumbers from convertBase may have trailing zeros.\r\n      for (i = 0; yc[i] == (xc[i] || 0); i++);\r\n\r\n      if (yc[i] > (xc[i] || 0)) e--;\r\n\r\n      if (s < 0) {\r\n        qc.push(1);\r\n        more = true;\r\n      } else {\r\n        xL = xc.length;\r\n        yL = yc.length;\r\n        i = 0;\r\n        s += 2;\r\n\r\n        // Normalise xc and yc so highest order digit of yc is >= base / 2.\r\n\r\n        n = mathfloor(base / (yc[0] + 1));\r\n\r\n        // Not necessary, but to handle odd bases where yc[0] == (base / 2) - 1.\r\n        // if (n > 1 || n++ == 1 && yc[0] < base / 2) {\r\n        if (n > 1) {\r\n          yc = multiply(yc, n, base);\r\n          xc = multiply(xc, n, base);\r\n          yL = yc.length;\r\n          xL = xc.length;\r\n        }\r\n\r\n        xi = yL;\r\n        rem = xc.slice(0, yL);\r\n        remL = rem.length;\r\n\r\n        // Add zeros to make remainder as long as divisor.\r\n        for (; remL < yL; rem[remL++] = 0);\r\n        yz = yc.slice();\r\n        yz = [0].concat(yz);\r\n        yc0 = yc[0];\r\n        if (yc[1] >= base / 2) yc0++;\r\n        // Not necessary, but to prevent trial digit n > base, when using base 3.\r\n        // else if (base == 3 && yc0 == 1) yc0 = 1 + 1e-15;\r\n\r\n        do {\r\n          n = 0;\r\n\r\n          // Compare divisor and remainder.\r\n          cmp = compare(yc, rem, yL, remL);\r\n\r\n          // If divisor < remainder.\r\n          if (cmp < 0) {\r\n\r\n            // Calculate trial digit, n.\r\n\r\n            rem0 = rem[0];\r\n            if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);\r\n\r\n            // n is how many times the divisor goes into the current remainder.\r\n            n = mathfloor(rem0 / yc0);\r\n\r\n            //  Algorithm:\r\n            //  product = divisor multiplied by trial digit (n).\r\n            //  Compare product and remainder.\r\n            //  If product is greater than remainder:\r\n            //    Subtract divisor from product, decrement trial digit.\r\n            //  Subtract product from remainder.\r\n            //  If product was less than remainder at the last compare:\r\n            //    Compare new remainder and divisor.\r\n            //    If remainder is greater than divisor:\r\n            //      Subtract divisor from remainder, increment trial digit.\r\n\r\n            if (n > 1) {\r\n\r\n              // n may be > base only when base is 3.\r\n              if (n >= base) n = base - 1;\r\n\r\n              // product = divisor * trial digit.\r\n              prod = multiply(yc, n, base);\r\n              prodL = prod.length;\r\n              remL = rem.length;\r\n\r\n              // Compare product and remainder.\r\n              // If product > remainder then trial digit n too high.\r\n              // n is 1 too high about 5% of the time, and is not known to have\r\n              // ever been more than 1 too high.\r\n              while (compare(prod, rem, prodL, remL) == 1) {\r\n                n--;\r\n\r\n                // Subtract divisor from product.\r\n                subtract(prod, yL < prodL ? yz : yc, prodL, base);\r\n                prodL = prod.length;\r\n                cmp = 1;\r\n              }\r\n            } else {\r\n\r\n              // n is 0 or 1, cmp is -1.\r\n              // If n is 0, there is no need to compare yc and rem again below,\r\n              // so change cmp to 1 to avoid it.\r\n              // If n is 1, leave cmp as -1, so yc and rem are compared again.\r\n              if (n == 0) {\r\n\r\n                // divisor < remainder, so n must be at least 1.\r\n                cmp = n = 1;\r\n              }\r\n\r\n              // product = divisor\r\n              prod = yc.slice();\r\n              prodL = prod.length;\r\n            }\r\n\r\n            if (prodL < remL) prod = [0].concat(prod);\r\n\r\n            // Subtract product from remainder.\r\n            subtract(rem, prod, remL, base);\r\n            remL = rem.length;\r\n\r\n             // If product was < remainder.\r\n            if (cmp == -1) {\r\n\r\n              // Compare divisor and new remainder.\r\n              // If divisor < new remainder, subtract divisor from remainder.\r\n              // Trial digit n too low.\r\n              // n is 1 too low about 5% of the time, and very rarely 2 too low.\r\n              while (compare(yc, rem, yL, remL) < 1) {\r\n                n++;\r\n\r\n                // Subtract divisor from remainder.\r\n                subtract(rem, yL < remL ? yz : yc, remL, base);\r\n                remL = rem.length;\r\n              }\r\n            }\r\n          } else if (cmp === 0) {\r\n            n++;\r\n            rem = [0];\r\n          } // else cmp === 1 and n will be 0\r\n\r\n          // Add the next digit, n, to the result array.\r\n          qc[i++] = n;\r\n\r\n          // Update the remainder.\r\n          if (rem[0]) {\r\n            rem[remL++] = xc[xi] || 0;\r\n          } else {\r\n            rem = [xc[xi]];\r\n            remL = 1;\r\n          }\r\n        } while ((xi++ < xL || rem[0] != null) && s--);\r\n\r\n        more = rem[0] != null;\r\n\r\n        // Leading zero?\r\n        if (!qc[0]) qc.splice(0, 1);\r\n      }\r\n\r\n      if (base == BASE) {\r\n\r\n        // To calculate q.e, first get the number of digits of qc[0].\r\n        for (i = 1, s = qc[0]; s >= 10; s /= 10, i++);\r\n\r\n        round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more);\r\n\r\n      // Caller is convertBase.\r\n      } else {\r\n        q.e = e;\r\n        q.r = +more;\r\n      }\r\n\r\n      return q;\r\n    };\r\n  })();\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of BigNumber n in fixed-point or exponential\r\n   * notation rounded to the specified decimal places or significant digits.\r\n   *\r\n   * n: a BigNumber.\r\n   * i: the index of the last digit required (i.e. the digit that may be rounded up).\r\n   * rm: the rounding mode.\r\n   * id: 1 (toExponential) or 2 (toPrecision).\r\n   */\r\n  function format(n, i, rm, id) {\r\n    var c0, e, ne, len, str;\r\n\r\n    if (rm == null) rm = ROUNDING_MODE;\r\n    else intCheck(rm, 0, 8);\r\n\r\n    if (!n.c) return n.toString();\r\n\r\n    c0 = n.c[0];\r\n    ne = n.e;\r\n\r\n    if (i == null) {\r\n      str = coeffToString(n.c);\r\n      str = id == 1 || id == 2 && (ne <= TO_EXP_NEG || ne >= TO_EXP_POS)\r\n       ? toExponential(str, ne)\r\n       : toFixedPoint(str, ne, '0');\r\n    } else {\r\n      n = round(new BigNumber(n), i, rm);\r\n\r\n      // n.e may have changed if the value was rounded up.\r\n      e = n.e;\r\n\r\n      str = coeffToString(n.c);\r\n      len = str.length;\r\n\r\n      // toPrecision returns exponential notation if the number of significant digits\r\n      // specified is less than the number of digits necessary to represent the integer\r\n      // part of the value in fixed-point notation.\r\n\r\n      // Exponential notation.\r\n      if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) {\r\n\r\n        // Append zeros?\r\n        for (; len < i; str += '0', len++);\r\n        str = toExponential(str, e);\r\n\r\n      // Fixed-point notation.\r\n      } else {\r\n        i -= ne + (id === 2 && e > ne);\r\n        str = toFixedPoint(str, e, '0');\r\n\r\n        // Append zeros?\r\n        if (e + 1 > len) {\r\n          if (--i > 0) for (str += '.'; i--; str += '0');\r\n        } else {\r\n          i += e - len;\r\n          if (i > 0) {\r\n            if (e + 1 == len) str += '.';\r\n            for (; i--; str += '0');\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return n.s < 0 && c0 ? '-' + str : str;\r\n  }\r\n\r\n\r\n  // Handle BigNumber.max and BigNumber.min.\r\n  // If any number is NaN, return NaN.\r\n  function maxOrMin(args, n) {\r\n    var k, y,\r\n      i = 1,\r\n      x = new BigNumber(args[0]);\r\n\r\n    for (; i < args.length; i++) {\r\n      y = new BigNumber(args[i]);\r\n      if (!y.s || (k = compare(x, y)) === n || k === 0 && x.s === n) {\r\n        x = y;\r\n      }\r\n    }\r\n\r\n    return x;\r\n  }\r\n\r\n\r\n  /*\r\n   * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP.\r\n   * Called by minus, plus and times.\r\n   */\r\n  function normalise(n, c, e) {\r\n    var i = 1,\r\n      j = c.length;\r\n\r\n     // Remove trailing zeros.\r\n    for (; !c[--j]; c.pop());\r\n\r\n    // Calculate the base 10 exponent. First get the number of digits of c[0].\r\n    for (j = c[0]; j >= 10; j /= 10, i++);\r\n\r\n    // Overflow?\r\n    if ((e = i + e * LOG_BASE - 1) > MAX_EXP) {\r\n\r\n      // Infinity.\r\n      n.c = n.e = null;\r\n\r\n    // Underflow?\r\n    } else if (e < MIN_EXP) {\r\n\r\n      // Zero.\r\n      n.c = [n.e = 0];\r\n    } else {\r\n      n.e = e;\r\n      n.c = c;\r\n    }\r\n\r\n    return n;\r\n  }\r\n\r\n\r\n  // Handle values that fail the validity test in BigNumber.\r\n  parseNumeric = (function () {\r\n    var basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i,\r\n      dotAfter = /^([^.]+)\\.$/,\r\n      dotBefore = /^\\.([^.]+)$/,\r\n      isInfinityOrNaN = /^-?(Infinity|NaN)$/,\r\n      whitespaceOrPlus = /^\\s*\\+(?=[\\w.])|^\\s+|\\s+$/g;\r\n\r\n    return function (x, str, isNum, b) {\r\n      var base,\r\n        s = isNum ? str : str.replace(whitespaceOrPlus, '');\r\n\r\n      // No exception on ±Infinity or NaN.\r\n      if (isInfinityOrNaN.test(s)) {\r\n        x.s = isNaN(s) ? null : s < 0 ? -1 : 1;\r\n      } else {\r\n        if (!isNum) {\r\n\r\n          // basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i\r\n          s = s.replace(basePrefix, function (m, p1, p2) {\r\n            base = (p2 = p2.toLowerCase()) == 'x' ? 16 : p2 == 'b' ? 2 : 8;\r\n            return !b || b == base ? p1 : m;\r\n          });\r\n\r\n          if (b) {\r\n            base = b;\r\n\r\n            // E.g. '1.' to '1', '.1' to '0.1'\r\n            s = s.replace(dotAfter, '$1').replace(dotBefore, '0.$1');\r\n          }\r\n\r\n          if (str != s) return new BigNumber(s, base);\r\n        }\r\n\r\n        // '[BigNumber Error] Not a number: {n}'\r\n        // '[BigNumber Error] Not a base {b} number: {n}'\r\n        if (BigNumber.DEBUG) {\r\n          throw Error\r\n            (bignumberError + 'Not a' + (b ? ' base ' + b : '') + ' number: ' + str);\r\n        }\r\n\r\n        // NaN\r\n        x.s = null;\r\n      }\r\n\r\n      x.c = x.e = null;\r\n    }\r\n  })();\r\n\r\n\r\n  /*\r\n   * Round x to sd significant digits using rounding mode rm. Check for over/under-flow.\r\n   * If r is truthy, it is known that there are more digits after the rounding digit.\r\n   */\r\n  function round(x, sd, rm, r) {\r\n    var d, i, j, k, n, ni, rd,\r\n      xc = x.c,\r\n      pows10 = POWS_TEN;\r\n\r\n    // if x is not Infinity or NaN...\r\n    if (xc) {\r\n\r\n      // rd is the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n      // n is a base 1e14 number, the value of the element of array x.c containing rd.\r\n      // ni is the index of n within x.c.\r\n      // d is the number of digits of n.\r\n      // i is the index of rd within n including leading zeros.\r\n      // j is the actual index of rd within n (if < 0, rd is a leading zero).\r\n      out: {\r\n\r\n        // Get the number of digits of the first element of xc.\r\n        for (d = 1, k = xc[0]; k >= 10; k /= 10, d++);\r\n        i = sd - d;\r\n\r\n        // If the rounding digit is in the first element of xc...\r\n        if (i < 0) {\r\n          i += LOG_BASE;\r\n          j = sd;\r\n          n = xc[ni = 0];\r\n\r\n          // Get the rounding digit at index j of n.\r\n          rd = mathfloor(n / pows10[d - j - 1] % 10);\r\n        } else {\r\n          ni = mathceil((i + 1) / LOG_BASE);\r\n\r\n          if (ni >= xc.length) {\r\n\r\n            if (r) {\r\n\r\n              // Needed by sqrt.\r\n              for (; xc.length <= ni; xc.push(0));\r\n              n = rd = 0;\r\n              d = 1;\r\n              i %= LOG_BASE;\r\n              j = i - LOG_BASE + 1;\r\n            } else {\r\n              break out;\r\n            }\r\n          } else {\r\n            n = k = xc[ni];\r\n\r\n            // Get the number of digits of n.\r\n            for (d = 1; k >= 10; k /= 10, d++);\r\n\r\n            // Get the index of rd within n.\r\n            i %= LOG_BASE;\r\n\r\n            // Get the index of rd within n, adjusted for leading zeros.\r\n            // The number of leading zeros of n is given by LOG_BASE - d.\r\n            j = i - LOG_BASE + d;\r\n\r\n            // Get the rounding digit at index j of n.\r\n            rd = j < 0 ? 0 : mathfloor(n / pows10[d - j - 1] % 10);\r\n          }\r\n        }\r\n\r\n        r = r || sd < 0 ||\r\n\r\n        // Are there any non-zero digits after the rounding digit?\r\n        // The expression  n % pows10[d - j - 1]  returns all digits of n to the right\r\n        // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.\r\n         xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]);\r\n\r\n        r = rm < 4\r\n         ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n         : rd > 5 || rd == 5 && (rm == 4 || r || rm == 6 &&\r\n\r\n          // Check whether the digit to the left of the rounding digit is odd.\r\n          ((i > 0 ? j > 0 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10) & 1 ||\r\n           rm == (x.s < 0 ? 8 : 7));\r\n\r\n        if (sd < 1 || !xc[0]) {\r\n          xc.length = 0;\r\n\r\n          if (r) {\r\n\r\n            // Convert sd to decimal places.\r\n            sd -= x.e + 1;\r\n\r\n            // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n            xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE];\r\n            x.e = -sd || 0;\r\n          } else {\r\n\r\n            // Zero.\r\n            xc[0] = x.e = 0;\r\n          }\r\n\r\n          return x;\r\n        }\r\n\r\n        // Remove excess digits.\r\n        if (i == 0) {\r\n          xc.length = ni;\r\n          k = 1;\r\n          ni--;\r\n        } else {\r\n          xc.length = ni + 1;\r\n          k = pows10[LOG_BASE - i];\r\n\r\n          // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n          // j > 0 means i > number of leading zeros of n.\r\n          xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0;\r\n        }\r\n\r\n        // Round up?\r\n        if (r) {\r\n\r\n          for (; ;) {\r\n\r\n            // If the digit to be rounded up is in the first element of xc...\r\n            if (ni == 0) {\r\n\r\n              // i will be the length of xc[0] before k is added.\r\n              for (i = 1, j = xc[0]; j >= 10; j /= 10, i++);\r\n              j = xc[0] += k;\r\n              for (k = 1; j >= 10; j /= 10, k++);\r\n\r\n              // if i != k the length has increased.\r\n              if (i != k) {\r\n                x.e++;\r\n                if (xc[0] == BASE) xc[0] = 1;\r\n              }\r\n\r\n              break;\r\n            } else {\r\n              xc[ni] += k;\r\n              if (xc[ni] != BASE) break;\r\n              xc[ni--] = 0;\r\n              k = 1;\r\n            }\r\n          }\r\n        }\r\n\r\n        // Remove trailing zeros.\r\n        for (i = xc.length; xc[--i] === 0; xc.pop());\r\n      }\r\n\r\n      // Overflow? Infinity.\r\n      if (x.e > MAX_EXP) {\r\n        x.c = x.e = null;\r\n\r\n      // Underflow? Zero.\r\n      } else if (x.e < MIN_EXP) {\r\n        x.c = [x.e = 0];\r\n      }\r\n    }\r\n\r\n    return x;\r\n  }\r\n\r\n\r\n  function valueOf(n) {\r\n    var str,\r\n      e = n.e;\r\n\r\n    if (e === null) return n.toString();\r\n\r\n    str = coeffToString(n.c);\r\n\r\n    str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n      ? toExponential(str, e)\r\n      : toFixedPoint(str, e, '0');\r\n\r\n    return n.s < 0 ? '-' + str : str;\r\n  }\r\n\r\n\r\n  // PROTOTYPE/INSTANCE METHODS\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber whose value is the absolute value of this BigNumber.\r\n   */\r\n  P.absoluteValue = P.abs = function () {\r\n    var x = new BigNumber(this);\r\n    if (x.s < 0) x.s = 1;\r\n    return x;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return\r\n   *   1 if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n   *   -1 if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n   *   0 if they have the same value,\r\n   *   or null if the value of either is NaN.\r\n   */\r\n  P.comparedTo = function (y, b) {\r\n    return compare(this, new BigNumber(y, b));\r\n  };\r\n\r\n\r\n  /*\r\n   * If dp is undefined or null or true or false, return the number of decimal places of the\r\n   * value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN.\r\n   *\r\n   * Otherwise, if dp is a number, return a new BigNumber whose value is the value of this\r\n   * BigNumber rounded to a maximum of dp decimal places using rounding mode rm, or\r\n   * ROUNDING_MODE if rm is omitted.\r\n   *\r\n   * [dp] {number} Decimal places: integer, 0 to MAX inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n   */\r\n  P.decimalPlaces = P.dp = function (dp, rm) {\r\n    var c, n, v,\r\n      x = this;\r\n\r\n    if (dp != null) {\r\n      intCheck(dp, 0, MAX);\r\n      if (rm == null) rm = ROUNDING_MODE;\r\n      else intCheck(rm, 0, 8);\r\n\r\n      return round(new BigNumber(x), dp + x.e + 1, rm);\r\n    }\r\n\r\n    if (!(c = x.c)) return null;\r\n    n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE;\r\n\r\n    // Subtract the number of trailing zeros of the last number.\r\n    if (v = c[v]) for (; v % 10 == 0; v /= 10, n--);\r\n    if (n < 0) n = 0;\r\n\r\n    return n;\r\n  };\r\n\r\n\r\n  /*\r\n   *  n / 0 = I\r\n   *  n / N = N\r\n   *  n / I = 0\r\n   *  0 / n = 0\r\n   *  0 / 0 = N\r\n   *  0 / N = N\r\n   *  0 / I = 0\r\n   *  N / n = N\r\n   *  N / 0 = N\r\n   *  N / N = N\r\n   *  N / I = N\r\n   *  I / n = I\r\n   *  I / 0 = I\r\n   *  I / N = N\r\n   *  I / I = N\r\n   *\r\n   * Return a new BigNumber whose value is the value of this BigNumber divided by the value of\r\n   * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n   */\r\n  P.dividedBy = P.div = function (y, b) {\r\n    return div(this, new BigNumber(y, b), DECIMAL_PLACES, ROUNDING_MODE);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber whose value is the integer part of dividing the value of this\r\n   * BigNumber by the value of BigNumber(y, b).\r\n   */\r\n  P.dividedToIntegerBy = P.idiv = function (y, b) {\r\n    return div(this, new BigNumber(y, b), 0, 1);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a BigNumber whose value is the value of this BigNumber exponentiated by n.\r\n   *\r\n   * If m is present, return the result modulo m.\r\n   * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE.\r\n   * If POW_PRECISION is non-zero and m is not present, round to POW_PRECISION using ROUNDING_MODE.\r\n   *\r\n   * The modular power operation works efficiently when x, n, and m are integers, otherwise it\r\n   * is equivalent to calculating x.exponentiatedBy(n).modulo(m) with a POW_PRECISION of 0.\r\n   *\r\n   * n {number|string|BigNumber} The exponent. An integer.\r\n   * [m] {number|string|BigNumber} The modulus.\r\n   *\r\n   * '[BigNumber Error] Exponent not an integer: {n}'\r\n   */\r\n  P.exponentiatedBy = P.pow = function (n, m) {\r\n    var half, isModExp, i, k, more, nIsBig, nIsNeg, nIsOdd, y,\r\n      x = this;\r\n\r\n    n = new BigNumber(n);\r\n\r\n    // Allow NaN and ±Infinity, but not other non-integers.\r\n    if (n.c && !n.isInteger()) {\r\n      throw Error\r\n        (bignumberError + 'Exponent not an integer: ' + valueOf(n));\r\n    }\r\n\r\n    if (m != null) m = new BigNumber(m);\r\n\r\n    // Exponent of MAX_SAFE_INTEGER is 15.\r\n    nIsBig = n.e > 14;\r\n\r\n    // If x is NaN, ±Infinity, ±0 or ±1, or n is ±Infinity, NaN or ±0.\r\n    if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) {\r\n\r\n      // The sign of the result of pow when x is negative depends on the evenness of n.\r\n      // If +n overflows to ±Infinity, the evenness of n would be not be known.\r\n      y = new BigNumber(Math.pow(+valueOf(x), nIsBig ? n.s * (2 - isOdd(n)) : +valueOf(n)));\r\n      return m ? y.mod(m) : y;\r\n    }\r\n\r\n    nIsNeg = n.s < 0;\r\n\r\n    if (m) {\r\n\r\n      // x % m returns NaN if abs(m) is zero, or m is NaN.\r\n      if (m.c ? !m.c[0] : !m.s) return new BigNumber(NaN);\r\n\r\n      isModExp = !nIsNeg && x.isInteger() && m.isInteger();\r\n\r\n      if (isModExp) x = x.mod(m);\r\n\r\n    // Overflow to ±Infinity: >=2**1e10 or >=1.0000024**1e15.\r\n    // Underflow to ±0: <=0.79**1e10 or <=0.9999975**1e15.\r\n    } else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0\r\n      // [1, 240000000]\r\n      ? x.c[0] > 1 || nIsBig && x.c[1] >= 24e7\r\n      // [80000000000000]  [99999750000000]\r\n      : x.c[0] < 8e13 || nIsBig && x.c[0] <= 9999975e7))) {\r\n\r\n      // If x is negative and n is odd, k = -0, else k = 0.\r\n      k = x.s < 0 && isOdd(n) ? -0 : 0;\r\n\r\n      // If x >= 1, k = ±Infinity.\r\n      if (x.e > -1) k = 1 / k;\r\n\r\n      // If n is negative return ±0, else return ±Infinity.\r\n      return new BigNumber(nIsNeg ? 1 / k : k);\r\n\r\n    } else if (POW_PRECISION) {\r\n\r\n      // Truncating each coefficient array to a length of k after each multiplication\r\n      // equates to truncating significant digits to POW_PRECISION + [28, 41],\r\n      // i.e. there will be a minimum of 28 guard digits retained.\r\n      k = mathceil(POW_PRECISION / LOG_BASE + 2);\r\n    }\r\n\r\n    if (nIsBig) {\r\n      half = new BigNumber(0.5);\r\n      if (nIsNeg) n.s = 1;\r\n      nIsOdd = isOdd(n);\r\n    } else {\r\n      i = Math.abs(+valueOf(n));\r\n      nIsOdd = i % 2;\r\n    }\r\n\r\n    y = new BigNumber(ONE);\r\n\r\n    // Performs 54 loop iterations for n of 9007199254740991.\r\n    for (; ;) {\r\n\r\n      if (nIsOdd) {\r\n        y = y.times(x);\r\n        if (!y.c) break;\r\n\r\n        if (k) {\r\n          if (y.c.length > k) y.c.length = k;\r\n        } else if (isModExp) {\r\n          y = y.mod(m);    //y = y.minus(div(y, m, 0, MODULO_MODE).times(m));\r\n        }\r\n      }\r\n\r\n      if (i) {\r\n        i = mathfloor(i / 2);\r\n        if (i === 0) break;\r\n        nIsOdd = i % 2;\r\n      } else {\r\n        n = n.times(half);\r\n        round(n, n.e + 1, 1);\r\n\r\n        if (n.e > 14) {\r\n          nIsOdd = isOdd(n);\r\n        } else {\r\n          i = +valueOf(n);\r\n          if (i === 0) break;\r\n          nIsOdd = i % 2;\r\n        }\r\n      }\r\n\r\n      x = x.times(x);\r\n\r\n      if (k) {\r\n        if (x.c && x.c.length > k) x.c.length = k;\r\n      } else if (isModExp) {\r\n        x = x.mod(m);    //x = x.minus(div(x, m, 0, MODULO_MODE).times(m));\r\n      }\r\n    }\r\n\r\n    if (isModExp) return y;\r\n    if (nIsNeg) y = ONE.div(y);\r\n\r\n    return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber whose value is the value of this BigNumber rounded to an integer\r\n   * using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n   *\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {rm}'\r\n   */\r\n  P.integerValue = function (rm) {\r\n    var n = new BigNumber(this);\r\n    if (rm == null) rm = ROUNDING_MODE;\r\n    else intCheck(rm, 0, 8);\r\n    return round(n, n.e + 1, rm);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b),\r\n   * otherwise return false.\r\n   */\r\n  P.isEqualTo = P.eq = function (y, b) {\r\n    return compare(this, new BigNumber(y, b)) === 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is a finite number, otherwise return false.\r\n   */\r\n  P.isFinite = function () {\r\n    return !!this.c;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n   * otherwise return false.\r\n   */\r\n  P.isGreaterThan = P.gt = function (y, b) {\r\n    return compare(this, new BigNumber(y, b)) > 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is greater than or equal to the value of\r\n   * BigNumber(y, b), otherwise return false.\r\n   */\r\n  P.isGreaterThanOrEqualTo = P.gte = function (y, b) {\r\n    return (b = compare(this, new BigNumber(y, b))) === 1 || b === 0;\r\n\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is an integer, otherwise return false.\r\n   */\r\n  P.isInteger = function () {\r\n    return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n   * otherwise return false.\r\n   */\r\n  P.isLessThan = P.lt = function (y, b) {\r\n    return compare(this, new BigNumber(y, b)) < 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is less than or equal to the value of\r\n   * BigNumber(y, b), otherwise return false.\r\n   */\r\n  P.isLessThanOrEqualTo = P.lte = function (y, b) {\r\n    return (b = compare(this, new BigNumber(y, b))) === -1 || b === 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is NaN, otherwise return false.\r\n   */\r\n  P.isNaN = function () {\r\n    return !this.s;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is negative, otherwise return false.\r\n   */\r\n  P.isNegative = function () {\r\n    return this.s < 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is positive, otherwise return false.\r\n   */\r\n  P.isPositive = function () {\r\n    return this.s > 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is 0 or -0, otherwise return false.\r\n   */\r\n  P.isZero = function () {\r\n    return !!this.c && this.c[0] == 0;\r\n  };\r\n\r\n\r\n  /*\r\n   *  n - 0 = n\r\n   *  n - N = N\r\n   *  n - I = -I\r\n   *  0 - n = -n\r\n   *  0 - 0 = 0\r\n   *  0 - N = N\r\n   *  0 - I = -I\r\n   *  N - n = N\r\n   *  N - 0 = N\r\n   *  N - N = N\r\n   *  N - I = N\r\n   *  I - n = I\r\n   *  I - 0 = I\r\n   *  I - N = N\r\n   *  I - I = N\r\n   *\r\n   * Return a new BigNumber whose value is the value of this BigNumber minus the value of\r\n   * BigNumber(y, b).\r\n   */\r\n  P.minus = function (y, b) {\r\n    var i, j, t, xLTy,\r\n      x = this,\r\n      a = x.s;\r\n\r\n    y = new BigNumber(y, b);\r\n    b = y.s;\r\n\r\n    // Either NaN?\r\n    if (!a || !b) return new BigNumber(NaN);\r\n\r\n    // Signs differ?\r\n    if (a != b) {\r\n      y.s = -b;\r\n      return x.plus(y);\r\n    }\r\n\r\n    var xe = x.e / LOG_BASE,\r\n      ye = y.e / LOG_BASE,\r\n      xc = x.c,\r\n      yc = y.c;\r\n\r\n    if (!xe || !ye) {\r\n\r\n      // Either Infinity?\r\n      if (!xc || !yc) return xc ? (y.s = -b, y) : new BigNumber(yc ? x : NaN);\r\n\r\n      // Either zero?\r\n      if (!xc[0] || !yc[0]) {\r\n\r\n        // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n        return yc[0] ? (y.s = -b, y) : new BigNumber(xc[0] ? x :\r\n\r\n         // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity\r\n         ROUNDING_MODE == 3 ? -0 : 0);\r\n      }\r\n    }\r\n\r\n    xe = bitFloor(xe);\r\n    ye = bitFloor(ye);\r\n    xc = xc.slice();\r\n\r\n    // Determine which is the bigger number.\r\n    if (a = xe - ye) {\r\n\r\n      if (xLTy = a < 0) {\r\n        a = -a;\r\n        t = xc;\r\n      } else {\r\n        ye = xe;\r\n        t = yc;\r\n      }\r\n\r\n      t.reverse();\r\n\r\n      // Prepend zeros to equalise exponents.\r\n      for (b = a; b--; t.push(0));\r\n      t.reverse();\r\n    } else {\r\n\r\n      // Exponents equal. Check digit by digit.\r\n      j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b;\r\n\r\n      for (a = b = 0; b < j; b++) {\r\n\r\n        if (xc[b] != yc[b]) {\r\n          xLTy = xc[b] < yc[b];\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    // x < y? Point xc to the array of the bigger number.\r\n    if (xLTy) {\r\n      t = xc;\r\n      xc = yc;\r\n      yc = t;\r\n      y.s = -y.s;\r\n    }\r\n\r\n    b = (j = yc.length) - (i = xc.length);\r\n\r\n    // Append zeros to xc if shorter.\r\n    // No need to add zeros to yc if shorter as subtract only needs to start at yc.length.\r\n    if (b > 0) for (; b--; xc[i++] = 0);\r\n    b = BASE - 1;\r\n\r\n    // Subtract yc from xc.\r\n    for (; j > a;) {\r\n\r\n      if (xc[--j] < yc[j]) {\r\n        for (i = j; i && !xc[--i]; xc[i] = b);\r\n        --xc[i];\r\n        xc[j] += BASE;\r\n      }\r\n\r\n      xc[j] -= yc[j];\r\n    }\r\n\r\n    // Remove leading zeros and adjust exponent accordingly.\r\n    for (; xc[0] == 0; xc.splice(0, 1), --ye);\r\n\r\n    // Zero?\r\n    if (!xc[0]) {\r\n\r\n      // Following IEEE 754 (2008) 6.3,\r\n      // n - n = +0  but  n - n = -0  when rounding towards -Infinity.\r\n      y.s = ROUNDING_MODE == 3 ? -1 : 1;\r\n      y.c = [y.e = 0];\r\n      return y;\r\n    }\r\n\r\n    // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity\r\n    // for finite x and y.\r\n    return normalise(y, xc, ye);\r\n  };\r\n\r\n\r\n  /*\r\n   *   n % 0 =  N\r\n   *   n % N =  N\r\n   *   n % I =  n\r\n   *   0 % n =  0\r\n   *  -0 % n = -0\r\n   *   0 % 0 =  N\r\n   *   0 % N =  N\r\n   *   0 % I =  0\r\n   *   N % n =  N\r\n   *   N % 0 =  N\r\n   *   N % N =  N\r\n   *   N % I =  N\r\n   *   I % n =  N\r\n   *   I % 0 =  N\r\n   *   I % N =  N\r\n   *   I % I =  N\r\n   *\r\n   * Return a new BigNumber whose value is the value of this BigNumber modulo the value of\r\n   * BigNumber(y, b). The result depends on the value of MODULO_MODE.\r\n   */\r\n  P.modulo = P.mod = function (y, b) {\r\n    var q, s,\r\n      x = this;\r\n\r\n    y = new BigNumber(y, b);\r\n\r\n    // Return NaN if x is Infinity or NaN, or y is NaN or zero.\r\n    if (!x.c || !y.s || y.c && !y.c[0]) {\r\n      return new BigNumber(NaN);\r\n\r\n    // Return x if y is Infinity or x is zero.\r\n    } else if (!y.c || x.c && !x.c[0]) {\r\n      return new BigNumber(x);\r\n    }\r\n\r\n    if (MODULO_MODE == 9) {\r\n\r\n      // Euclidian division: q = sign(y) * floor(x / abs(y))\r\n      // r = x - qy    where  0 <= r < abs(y)\r\n      s = y.s;\r\n      y.s = 1;\r\n      q = div(x, y, 0, 3);\r\n      y.s = s;\r\n      q.s *= s;\r\n    } else {\r\n      q = div(x, y, 0, MODULO_MODE);\r\n    }\r\n\r\n    y = x.minus(q.times(y));\r\n\r\n    // To match JavaScript %, ensure sign of zero is sign of dividend.\r\n    if (!y.c[0] && MODULO_MODE == 1) y.s = x.s;\r\n\r\n    return y;\r\n  };\r\n\r\n\r\n  /*\r\n   *  n * 0 = 0\r\n   *  n * N = N\r\n   *  n * I = I\r\n   *  0 * n = 0\r\n   *  0 * 0 = 0\r\n   *  0 * N = N\r\n   *  0 * I = N\r\n   *  N * n = N\r\n   *  N * 0 = N\r\n   *  N * N = N\r\n   *  N * I = N\r\n   *  I * n = I\r\n   *  I * 0 = N\r\n   *  I * N = N\r\n   *  I * I = I\r\n   *\r\n   * Return a new BigNumber whose value is the value of this BigNumber multiplied by the value\r\n   * of BigNumber(y, b).\r\n   */\r\n  P.multipliedBy = P.times = function (y, b) {\r\n    var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc,\r\n      base, sqrtBase,\r\n      x = this,\r\n      xc = x.c,\r\n      yc = (y = new BigNumber(y, b)).c;\r\n\r\n    // Either NaN, ±Infinity or ±0?\r\n    if (!xc || !yc || !xc[0] || !yc[0]) {\r\n\r\n      // Return NaN if either is NaN, or one is 0 and the other is Infinity.\r\n      if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) {\r\n        y.c = y.e = y.s = null;\r\n      } else {\r\n        y.s *= x.s;\r\n\r\n        // Return ±Infinity if either is ±Infinity.\r\n        if (!xc || !yc) {\r\n          y.c = y.e = null;\r\n\r\n        // Return ±0 if either is ±0.\r\n        } else {\r\n          y.c = [0];\r\n          y.e = 0;\r\n        }\r\n      }\r\n\r\n      return y;\r\n    }\r\n\r\n    e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE);\r\n    y.s *= x.s;\r\n    xcL = xc.length;\r\n    ycL = yc.length;\r\n\r\n    // Ensure xc points to longer array and xcL to its length.\r\n    if (xcL < ycL) {\r\n      zc = xc;\r\n      xc = yc;\r\n      yc = zc;\r\n      i = xcL;\r\n      xcL = ycL;\r\n      ycL = i;\r\n    }\r\n\r\n    // Initialise the result array with zeros.\r\n    for (i = xcL + ycL, zc = []; i--; zc.push(0));\r\n\r\n    base = BASE;\r\n    sqrtBase = SQRT_BASE;\r\n\r\n    for (i = ycL; --i >= 0;) {\r\n      c = 0;\r\n      ylo = yc[i] % sqrtBase;\r\n      yhi = yc[i] / sqrtBase | 0;\r\n\r\n      for (k = xcL, j = i + k; j > i;) {\r\n        xlo = xc[--k] % sqrtBase;\r\n        xhi = xc[k] / sqrtBase | 0;\r\n        m = yhi * xlo + xhi * ylo;\r\n        xlo = ylo * xlo + ((m % sqrtBase) * sqrtBase) + zc[j] + c;\r\n        c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi;\r\n        zc[j--] = xlo % base;\r\n      }\r\n\r\n      zc[j] = c;\r\n    }\r\n\r\n    if (c) {\r\n      ++e;\r\n    } else {\r\n      zc.splice(0, 1);\r\n    }\r\n\r\n    return normalise(y, zc, e);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber whose value is the value of this BigNumber negated,\r\n   * i.e. multiplied by -1.\r\n   */\r\n  P.negated = function () {\r\n    var x = new BigNumber(this);\r\n    x.s = -x.s || null;\r\n    return x;\r\n  };\r\n\r\n\r\n  /*\r\n   *  n + 0 = n\r\n   *  n + N = N\r\n   *  n + I = I\r\n   *  0 + n = n\r\n   *  0 + 0 = 0\r\n   *  0 + N = N\r\n   *  0 + I = I\r\n   *  N + n = N\r\n   *  N + 0 = N\r\n   *  N + N = N\r\n   *  N + I = N\r\n   *  I + n = I\r\n   *  I + 0 = I\r\n   *  I + N = N\r\n   *  I + I = I\r\n   *\r\n   * Return a new BigNumber whose value is the value of this BigNumber plus the value of\r\n   * BigNumber(y, b).\r\n   */\r\n  P.plus = function (y, b) {\r\n    var t,\r\n      x = this,\r\n      a = x.s;\r\n\r\n    y = new BigNumber(y, b);\r\n    b = y.s;\r\n\r\n    // Either NaN?\r\n    if (!a || !b) return new BigNumber(NaN);\r\n\r\n    // Signs differ?\r\n     if (a != b) {\r\n      y.s = -b;\r\n      return x.minus(y);\r\n    }\r\n\r\n    var xe = x.e / LOG_BASE,\r\n      ye = y.e / LOG_BASE,\r\n      xc = x.c,\r\n      yc = y.c;\r\n\r\n    if (!xe || !ye) {\r\n\r\n      // Return ±Infinity if either ±Infinity.\r\n      if (!xc || !yc) return new BigNumber(a / 0);\r\n\r\n      // Either zero?\r\n      // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n      if (!xc[0] || !yc[0]) return yc[0] ? y : new BigNumber(xc[0] ? x : a * 0);\r\n    }\r\n\r\n    xe = bitFloor(xe);\r\n    ye = bitFloor(ye);\r\n    xc = xc.slice();\r\n\r\n    // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts.\r\n    if (a = xe - ye) {\r\n      if (a > 0) {\r\n        ye = xe;\r\n        t = yc;\r\n      } else {\r\n        a = -a;\r\n        t = xc;\r\n      }\r\n\r\n      t.reverse();\r\n      for (; a--; t.push(0));\r\n      t.reverse();\r\n    }\r\n\r\n    a = xc.length;\r\n    b = yc.length;\r\n\r\n    // Point xc to the longer array, and b to the shorter length.\r\n    if (a - b < 0) {\r\n      t = yc;\r\n      yc = xc;\r\n      xc = t;\r\n      b = a;\r\n    }\r\n\r\n    // Only start adding at yc.length - 1 as the further digits of xc can be ignored.\r\n    for (a = 0; b;) {\r\n      a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0;\r\n      xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE;\r\n    }\r\n\r\n    if (a) {\r\n      xc = [a].concat(xc);\r\n      ++ye;\r\n    }\r\n\r\n    // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n    // ye = MAX_EXP + 1 possible\r\n    return normalise(y, xc, ye);\r\n  };\r\n\r\n\r\n  /*\r\n   * If sd is undefined or null or true or false, return the number of significant digits of\r\n   * the value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN.\r\n   * If sd is true include integer-part trailing zeros in the count.\r\n   *\r\n   * Otherwise, if sd is a number, return a new BigNumber whose value is the value of this\r\n   * BigNumber rounded to a maximum of sd significant digits using rounding mode rm, or\r\n   * ROUNDING_MODE if rm is omitted.\r\n   *\r\n   * sd {number|boolean} number: significant digits: integer, 1 to MAX inclusive.\r\n   *                     boolean: whether to count integer-part trailing zeros: true or false.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n   */\r\n  P.precision = P.sd = function (sd, rm) {\r\n    var c, n, v,\r\n      x = this;\r\n\r\n    if (sd != null && sd !== !!sd) {\r\n      intCheck(sd, 1, MAX);\r\n      if (rm == null) rm = ROUNDING_MODE;\r\n      else intCheck(rm, 0, 8);\r\n\r\n      return round(new BigNumber(x), sd, rm);\r\n    }\r\n\r\n    if (!(c = x.c)) return null;\r\n    v = c.length - 1;\r\n    n = v * LOG_BASE + 1;\r\n\r\n    if (v = c[v]) {\r\n\r\n      // Subtract the number of trailing zeros of the last element.\r\n      for (; v % 10 == 0; v /= 10, n--);\r\n\r\n      // Add the number of digits of the first element.\r\n      for (v = c[0]; v >= 10; v /= 10, n++);\r\n    }\r\n\r\n    if (sd && x.e + 1 > n) n = x.e + 1;\r\n\r\n    return n;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber whose value is the value of this BigNumber shifted by k places\r\n   * (powers of 10). Shift to the right if n > 0, and to the left if n < 0.\r\n   *\r\n   * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {k}'\r\n   */\r\n  P.shiftedBy = function (k) {\r\n    intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER);\r\n    return this.times('1e' + k);\r\n  };\r\n\r\n\r\n  /*\r\n   *  sqrt(-n) =  N\r\n   *  sqrt(N) =  N\r\n   *  sqrt(-I) =  N\r\n   *  sqrt(I) =  I\r\n   *  sqrt(0) =  0\r\n   *  sqrt(-0) = -0\r\n   *\r\n   * Return a new BigNumber whose value is the square root of the value of this BigNumber,\r\n   * rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n   */\r\n  P.squareRoot = P.sqrt = function () {\r\n    var m, n, r, rep, t,\r\n      x = this,\r\n      c = x.c,\r\n      s = x.s,\r\n      e = x.e,\r\n      dp = DECIMAL_PLACES + 4,\r\n      half = new BigNumber('0.5');\r\n\r\n    // Negative/NaN/Infinity/zero?\r\n    if (s !== 1 || !c || !c[0]) {\r\n      return new BigNumber(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0);\r\n    }\r\n\r\n    // Initial estimate.\r\n    s = Math.sqrt(+valueOf(x));\r\n\r\n    // Math.sqrt underflow/overflow?\r\n    // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n    if (s == 0 || s == 1 / 0) {\r\n      n = coeffToString(c);\r\n      if ((n.length + e) % 2 == 0) n += '0';\r\n      s = Math.sqrt(+n);\r\n      e = bitFloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n      if (s == 1 / 0) {\r\n        n = '5e' + e;\r\n      } else {\r\n        n = s.toExponential();\r\n        n = n.slice(0, n.indexOf('e') + 1) + e;\r\n      }\r\n\r\n      r = new BigNumber(n);\r\n    } else {\r\n      r = new BigNumber(s + '');\r\n    }\r\n\r\n    // Check for zero.\r\n    // r could be zero if MIN_EXP is changed after the this value was created.\r\n    // This would cause a division by zero (x/t) and hence Infinity below, which would cause\r\n    // coeffToString to throw.\r\n    if (r.c[0]) {\r\n      e = r.e;\r\n      s = e + dp;\r\n      if (s < 3) s = 0;\r\n\r\n      // Newton-Raphson iteration.\r\n      for (; ;) {\r\n        t = r;\r\n        r = half.times(t.plus(div(x, t, dp, 1)));\r\n\r\n        if (coeffToString(t.c).slice(0, s) === (n = coeffToString(r.c)).slice(0, s)) {\r\n\r\n          // The exponent of r may here be one less than the final result exponent,\r\n          // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits\r\n          // are indexed correctly.\r\n          if (r.e < e) --s;\r\n          n = n.slice(s - 3, s + 1);\r\n\r\n          // The 4th rounding digit may be in error by -1 so if the 4 rounding digits\r\n          // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the\r\n          // iteration.\r\n          if (n == '9999' || !rep && n == '4999') {\r\n\r\n            // On the first iteration only, check to see if rounding up gives the\r\n            // exact result as the nines may infinitely repeat.\r\n            if (!rep) {\r\n              round(t, t.e + DECIMAL_PLACES + 2, 0);\r\n\r\n              if (t.times(t).eq(x)) {\r\n                r = t;\r\n                break;\r\n              }\r\n            }\r\n\r\n            dp += 4;\r\n            s += 4;\r\n            rep = 1;\r\n          } else {\r\n\r\n            // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact\r\n            // result. If not, then there are further digits and m will be truthy.\r\n            if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n              // Truncate to the first rounding digit.\r\n              round(r, r.e + DECIMAL_PLACES + 2, 1);\r\n              m = !r.times(r).eq(x);\r\n            }\r\n\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this BigNumber in exponential notation and\r\n   * rounded using ROUNDING_MODE to dp fixed decimal places.\r\n   *\r\n   * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n   */\r\n  P.toExponential = function (dp, rm) {\r\n    if (dp != null) {\r\n      intCheck(dp, 0, MAX);\r\n      dp++;\r\n    }\r\n    return format(this, dp, rm, 1);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this BigNumber in fixed-point notation rounding\r\n   * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n   *\r\n   * Note: as with JavaScript's number type, (-0).toFixed(0) is '0',\r\n   * but e.g. (-0.00001).toFixed(0) is '-0'.\r\n   *\r\n   * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n   */\r\n  P.toFixed = function (dp, rm) {\r\n    if (dp != null) {\r\n      intCheck(dp, 0, MAX);\r\n      dp = dp + this.e + 1;\r\n    }\r\n    return format(this, dp, rm);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this BigNumber in fixed-point notation rounded\r\n   * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties\r\n   * of the format or FORMAT object (see BigNumber.set).\r\n   *\r\n   * The formatting object may contain some or all of the properties shown below.\r\n   *\r\n   * FORMAT = {\r\n   *   prefix: '',\r\n   *   groupSize: 3,\r\n   *   secondaryGroupSize: 0,\r\n   *   groupSeparator: ',',\r\n   *   decimalSeparator: '.',\r\n   *   fractionGroupSize: 0,\r\n   *   fractionGroupSeparator: '\\xA0',      // non-breaking space\r\n   *   suffix: ''\r\n   * };\r\n   *\r\n   * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   * [format] {object} Formatting options. See FORMAT pbject above.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n   * '[BigNumber Error] Argument not an object: {format}'\r\n   */\r\n  P.toFormat = function (dp, rm, format) {\r\n    var str,\r\n      x = this;\r\n\r\n    if (format == null) {\r\n      if (dp != null && rm && typeof rm == 'object') {\r\n        format = rm;\r\n        rm = null;\r\n      } else if (dp && typeof dp == 'object') {\r\n        format = dp;\r\n        dp = rm = null;\r\n      } else {\r\n        format = FORMAT;\r\n      }\r\n    } else if (typeof format != 'object') {\r\n      throw Error\r\n        (bignumberError + 'Argument not an object: ' + format);\r\n    }\r\n\r\n    str = x.toFixed(dp, rm);\r\n\r\n    if (x.c) {\r\n      var i,\r\n        arr = str.split('.'),\r\n        g1 = +format.groupSize,\r\n        g2 = +format.secondaryGroupSize,\r\n        groupSeparator = format.groupSeparator || '',\r\n        intPart = arr[0],\r\n        fractionPart = arr[1],\r\n        isNeg = x.s < 0,\r\n        intDigits = isNeg ? intPart.slice(1) : intPart,\r\n        len = intDigits.length;\r\n\r\n      if (g2) {\r\n        i = g1;\r\n        g1 = g2;\r\n        g2 = i;\r\n        len -= i;\r\n      }\r\n\r\n      if (g1 > 0 && len > 0) {\r\n        i = len % g1 || g1;\r\n        intPart = intDigits.substr(0, i);\r\n        for (; i < len; i += g1) intPart += groupSeparator + intDigits.substr(i, g1);\r\n        if (g2 > 0) intPart += groupSeparator + intDigits.slice(i);\r\n        if (isNeg) intPart = '-' + intPart;\r\n      }\r\n\r\n      str = fractionPart\r\n       ? intPart + (format.decimalSeparator || '') + ((g2 = +format.fractionGroupSize)\r\n        ? fractionPart.replace(new RegExp('\\\\d{' + g2 + '}\\\\B', 'g'),\r\n         '$&' + (format.fractionGroupSeparator || ''))\r\n        : fractionPart)\r\n       : intPart;\r\n    }\r\n\r\n    return (format.prefix || '') + str + (format.suffix || '');\r\n  };\r\n\r\n\r\n  /*\r\n   * Return an array of two BigNumbers representing the value of this BigNumber as a simple\r\n   * fraction with an integer numerator and an integer denominator.\r\n   * The denominator will be a positive non-zero value less than or equal to the specified\r\n   * maximum denominator. If a maximum denominator is not specified, the denominator will be\r\n   * the lowest value necessary to represent the number exactly.\r\n   *\r\n   * [md] {number|string|BigNumber} Integer >= 1, or Infinity. The maximum denominator.\r\n   *\r\n   * '[BigNumber Error] Argument {not an integer|out of range} : {md}'\r\n   */\r\n  P.toFraction = function (md) {\r\n    var d, d0, d1, d2, e, exp, n, n0, n1, q, r, s,\r\n      x = this,\r\n      xc = x.c;\r\n\r\n    if (md != null) {\r\n      n = new BigNumber(md);\r\n\r\n      // Throw if md is less than one or is not an integer, unless it is Infinity.\r\n      if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) {\r\n        throw Error\r\n          (bignumberError + 'Argument ' +\r\n            (n.isInteger() ? 'out of range: ' : 'not an integer: ') + valueOf(n));\r\n      }\r\n    }\r\n\r\n    if (!xc) return new BigNumber(x);\r\n\r\n    d = new BigNumber(ONE);\r\n    n1 = d0 = new BigNumber(ONE);\r\n    d1 = n0 = new BigNumber(ONE);\r\n    s = coeffToString(xc);\r\n\r\n    // Determine initial denominator.\r\n    // d is a power of 10 and the minimum max denominator that specifies the value exactly.\r\n    e = d.e = s.length - x.e - 1;\r\n    d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp];\r\n    md = !md || n.comparedTo(d) > 0 ? (e > 0 ? d : n1) : n;\r\n\r\n    exp = MAX_EXP;\r\n    MAX_EXP = 1 / 0;\r\n    n = new BigNumber(s);\r\n\r\n    // n0 = d1 = 0\r\n    n0.c[0] = 0;\r\n\r\n    for (; ;)  {\r\n      q = div(n, d, 0, 1);\r\n      d2 = d0.plus(q.times(d1));\r\n      if (d2.comparedTo(md) == 1) break;\r\n      d0 = d1;\r\n      d1 = d2;\r\n      n1 = n0.plus(q.times(d2 = n1));\r\n      n0 = d2;\r\n      d = n.minus(q.times(d2 = d));\r\n      n = d2;\r\n    }\r\n\r\n    d2 = div(md.minus(d0), d1, 0, 1);\r\n    n0 = n0.plus(d2.times(n1));\r\n    d0 = d0.plus(d2.times(d1));\r\n    n0.s = n1.s = x.s;\r\n    e = e * 2;\r\n\r\n    // Determine which fraction is closer to x, n0/d0 or n1/d1\r\n    r = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo(\r\n        div(n0, d0, e, ROUNDING_MODE).minus(x).abs()) < 1 ? [n1, d1] : [n0, d0];\r\n\r\n    MAX_EXP = exp;\r\n\r\n    return r;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return the value of this BigNumber converted to a number primitive.\r\n   */\r\n  P.toNumber = function () {\r\n    return +valueOf(this);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this BigNumber rounded to sd significant digits\r\n   * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits\r\n   * necessary to represent the integer part of the value in fixed-point notation, then use\r\n   * exponential notation.\r\n   *\r\n   * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n   */\r\n  P.toPrecision = function (sd, rm) {\r\n    if (sd != null) intCheck(sd, 1, MAX);\r\n    return format(this, sd, rm, 2);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this BigNumber in base b, or base 10 if b is\r\n   * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and\r\n   * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent\r\n   * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than\r\n   * TO_EXP_NEG, return exponential notation.\r\n   *\r\n   * [b] {number} Integer, 2 to ALPHABET.length inclusive.\r\n   *\r\n   * '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n   */\r\n  P.toString = function (b) {\r\n    var str,\r\n      n = this,\r\n      s = n.s,\r\n      e = n.e;\r\n\r\n    // Infinity or NaN?\r\n    if (e === null) {\r\n      if (s) {\r\n        str = 'Infinity';\r\n        if (s < 0) str = '-' + str;\r\n      } else {\r\n        str = 'NaN';\r\n      }\r\n    } else {\r\n      if (b == null) {\r\n        str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n         ? toExponential(coeffToString(n.c), e)\r\n         : toFixedPoint(coeffToString(n.c), e, '0');\r\n      } else if (b === 10 && alphabetHasNormalDecimalDigits) {\r\n        n = round(new BigNumber(n), DECIMAL_PLACES + e + 1, ROUNDING_MODE);\r\n        str = toFixedPoint(coeffToString(n.c), n.e, '0');\r\n      } else {\r\n        intCheck(b, 2, ALPHABET.length, 'Base');\r\n        str = convertBase(toFixedPoint(coeffToString(n.c), e, '0'), 10, b, s, true);\r\n      }\r\n\r\n      if (s < 0 && n.c[0]) str = '-' + str;\r\n    }\r\n\r\n    return str;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return as toString, but do not accept a base argument, and include the minus sign for\r\n   * negative zero.\r\n   */\r\n  P.valueOf = P.toJSON = function () {\r\n    return valueOf(this);\r\n  };\r\n\r\n\r\n  P._isBigNumber = true;\r\n\r\n  P[Symbol.toStringTag] = 'BigNumber';\r\n\r\n  // Node.js v10.12.0+\r\n  P[Symbol.for('nodejs.util.inspect.custom')] = P.valueOf;\r\n\r\n  if (configObject != null) BigNumber.set(configObject);\r\n\r\n  return BigNumber;\r\n}\r\n\r\n\r\n// PRIVATE HELPER FUNCTIONS\r\n\r\n// These functions don't need access to variables,\r\n// e.g. DECIMAL_PLACES, in the scope of the `clone` function above.\r\n\r\n\r\nfunction bitFloor(n) {\r\n  var i = n | 0;\r\n  return n > 0 || n === i ? i : i - 1;\r\n}\r\n\r\n\r\n// Return a coefficient array as a string of base 10 digits.\r\nfunction coeffToString(a) {\r\n  var s, z,\r\n    i = 1,\r\n    j = a.length,\r\n    r = a[0] + '';\r\n\r\n  for (; i < j;) {\r\n    s = a[i++] + '';\r\n    z = LOG_BASE - s.length;\r\n    for (; z--; s = '0' + s);\r\n    r += s;\r\n  }\r\n\r\n  // Determine trailing zeros.\r\n  for (j = r.length; r.charCodeAt(--j) === 48;);\r\n\r\n  return r.slice(0, j + 1 || 1);\r\n}\r\n\r\n\r\n// Compare the value of BigNumbers x and y.\r\nfunction compare(x, y) {\r\n  var a, b,\r\n    xc = x.c,\r\n    yc = y.c,\r\n    i = x.s,\r\n    j = y.s,\r\n    k = x.e,\r\n    l = y.e;\r\n\r\n  // Either NaN?\r\n  if (!i || !j) return null;\r\n\r\n  a = xc && !xc[0];\r\n  b = yc && !yc[0];\r\n\r\n  // Either zero?\r\n  if (a || b) return a ? b ? 0 : -j : i;\r\n\r\n  // Signs differ?\r\n  if (i != j) return i;\r\n\r\n  a = i < 0;\r\n  b = k == l;\r\n\r\n  // Either Infinity?\r\n  if (!xc || !yc) return b ? 0 : !xc ^ a ? 1 : -1;\r\n\r\n  // Compare exponents.\r\n  if (!b) return k > l ^ a ? 1 : -1;\r\n\r\n  j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n  // Compare digit by digit.\r\n  for (i = 0; i < j; i++) if (xc[i] != yc[i]) return xc[i] > yc[i] ^ a ? 1 : -1;\r\n\r\n  // Compare lengths.\r\n  return k == l ? 0 : k > l ^ a ? 1 : -1;\r\n}\r\n\r\n\r\n/*\r\n * Check that n is a primitive number, an integer, and in range, otherwise throw.\r\n */\r\nfunction intCheck(n, min, max, name) {\r\n  if (n < min || n > max || n !== mathfloor(n)) {\r\n    throw Error\r\n     (bignumberError + (name || 'Argument') + (typeof n == 'number'\r\n       ? n < min || n > max ? ' out of range: ' : ' not an integer: '\r\n       : ' not a primitive number: ') + String(n));\r\n  }\r\n}\r\n\r\n\r\n// Assumes finite n.\r\nfunction isOdd(n) {\r\n  var k = n.c.length - 1;\r\n  return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0;\r\n}\r\n\r\n\r\nfunction toExponential(str, e) {\r\n  return (str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str) +\r\n   (e < 0 ? 'e' : 'e+') + e;\r\n}\r\n\r\n\r\nfunction toFixedPoint(str, e, z) {\r\n  var len, zs;\r\n\r\n  // Negative exponent?\r\n  if (e < 0) {\r\n\r\n    // Prepend zeros.\r\n    for (zs = z + '.'; ++e; zs += z);\r\n    str = zs + str;\r\n\r\n  // Positive exponent\r\n  } else {\r\n    len = str.length;\r\n\r\n    // Append zeros.\r\n    if (++e > len) {\r\n      for (zs = z, e -= len; --e; zs += z);\r\n      str += zs;\r\n    } else if (e < len) {\r\n      str = str.slice(0, e) + '.' + str.slice(e);\r\n    }\r\n  }\r\n\r\n  return str;\r\n}\r\n\r\n\r\n// EXPORT\r\n\r\n\r\nexport var BigNumber = clone();\r\n\r\nexport default BigNumber;\r\n","/* global global, window */\nimport { sha3_512 as sha3 } from \"@noble/hashes/sha3.js\";\nimport BigNumber from \"bignumber.js\";\n\nconst defaultLength = 24;\nconst bigLength = 32;\n\n/**\n * A cryptographically secure random number generator that mimics Math.random()\n * Uses the Web Crypto API which is available in both modern browsers and Node.js\n * Returns a random float in the range [0, 1) just like Math.random()\n */\nconst createRandom = () => {\n  // Use globalThis.crypto which works in both Node.js and browsers\n  if (\n    typeof globalThis !== \"undefined\" &&\n    globalThis.crypto &&\n    typeof globalThis.crypto.getRandomValues === \"function\"\n  ) {\n    return () => {\n      // Generate a random 32-bit unsigned integer\n      const buffer = new Uint32Array(1);\n      globalThis.crypto.getRandomValues(buffer);\n      // Convert to a float in [0, 1) by dividing by 2^32\n      return buffer[0] / 0x100000000;\n    };\n  }\n  // Fallback to Math.random if crypto is not available\n  return Math.random;\n};\n\nconst random = createRandom();\n\nconst createEntropy = (length = 4, rand = random) => {\n  let entropy = \"\";\n\n  while (entropy.length < length) {\n    entropy = entropy + Math.floor(rand() * 36).toString(36);\n  }\n  return entropy;\n};\n\n/*\n * Adapted from https://github.com/juanelas/bigint-conversion\n * MIT License Copyright (c) 2018 Juan Hernández Serrano\n */\nfunction bufToBigInt(buf) {\n  let value = new BigNumber(0);\n\n  for (const i of buf.values()) {\n    // Multiply by 256 (left shift by 8 bits) and add the current byte\n    value = value.multipliedBy(256).plus(i);\n  }\n  return value;\n}\n\nconst hash = (input = \"\") => {\n  // Drop the first character because it will bias the histogram\n  // to the left.\n  const encoder = new TextEncoder();\n  return bufToBigInt(sha3(encoder.encode(input)))\n    .toString(36)\n    .slice(1);\n};\n\nconst alphabet = Array.from({ length: 26 }, (x, i) =>\n  String.fromCharCode(i + 97)\n);\n\nconst randomLetter = (rand) => alphabet[Math.floor(rand() * alphabet.length)];\n\n/*\nThis is a fingerprint of the host environment. It is used to help\nprevent collisions when generating ids in a distributed system.\nIf no global object is available, you can pass in your own, or fall back\non a random string.\n*/\nconst createFingerprint = ({\n  globalObj = typeof global !== \"undefined\"\n    ? global\n    : typeof window !== \"undefined\"\n    ? window\n    : {},\n  random: rand = random,\n} = {}) => {\n  const globals = Object.keys(globalObj).toString();\n  const sourceString = globals.length\n    ? globals + createEntropy(bigLength, rand)\n    : createEntropy(bigLength, rand);\n\n  return hash(sourceString).substring(0, bigLength);\n};\n\nconst createCounter = (count) => () => {\n  return count++;\n};\n\n// ~22k hosts before 50% chance of initial counter collision\n// with a remaining counter range of 9.0e+15 in JavaScript.\nconst initialCountMax = 476782367;\n\nconst init = ({\n  // Fallback if the user does not pass in a CSPRNG. This should be OK\n  // because we don't rely solely on the random number generator for entropy.\n  // We also use the host fingerprint, current time, and a session counter.\n  random: rand = random,\n  counter = createCounter(Math.floor(rand() * initialCountMax)),\n  length = defaultLength,\n  fingerprint = createFingerprint({ random: rand }),\n} = {}) => {\n  if (length > bigLength) {\n    throw new Error(\n      `Length must be between 2 and ${bigLength}. Received: ${length}`\n    );\n  }\n  return function cuid2() {\n    const firstLetter = randomLetter(rand);\n\n    // If we're lucky, the `.toString(36)` calls may reduce hashing rounds\n    // by shortening the input to the hash function a little.\n    const time = Date.now().toString(36);\n    const count = counter().toString(36);\n\n    // The salt should be long enough to be globally unique across the full\n    // length of the hash. For simplicity, we use the same length as the\n    // intended id output.\n    const salt = createEntropy(length, rand);\n    const hashInput = `${time + salt + count + fingerprint}`;\n\n    return `${firstLetter + hash(hashInput).substring(1, length)}`;\n  };\n};\n\nconst createId = init();\n\nconst isCuid = (id, { minLength = 2, maxLength = bigLength } = {}) => {\n  const length = id.length;\n  const regex = /^[a-z][0-9a-z]+$/;\n\n  try {\n    if (\n      typeof id === \"string\" &&\n      length >= minLength &&\n      length <= maxLength &&\n      regex.test(id)\n    )\n      return true;\n  } finally {\n  }\n\n  return false;\n};\n\nexport const getConstants = () => ({ defaultLength, bigLength });\nexport { init };\nexport { createId };\nexport { bufToBigInt };\nexport { createCounter };\nexport { createFingerprint };\nexport { isCuid };\n","/**\n * Enhanced ID generation and validation utilities using CUID2\n *\n * CUID2s are collision resistant, URL-safe, and horizontally scalable.\n * Perfect for database records, API keys, and distributed systems.\n */\n\nimport { createId } from '@paralleldrive/cuid2'\n\n/**\n * Generate a new CUID2 ID for database records\n *\n * CUID2s are:\n * - URL-safe\n * - Collision resistant\n * - Horizontally scalable\n * - Case sensitive\n * - Around 24 characters long\n *\n * @returns A new CUID2 string\n */\nexport function generateDatabaseId(): string {\n  return createId()\n}\n\n/**\n * Generate a CUID2 with a custom prefix for easier identification\n *\n * @param prefix - Optional prefix to add before the CUID2 (e.g., 'user_', 'org_')\n * @returns A prefixed CUID2 string\n */\nexport function generatePrefixedId(prefix: string): string {\n  return `${prefix}${createId()}`\n}\n\n/**\n * Generate multiple unique IDs at once\n *\n * @param count - Number of IDs to generate\n * @returns Array of unique CUID2 strings\n */\nexport function generateMultipleIds(count: number): string[] {\n  return Array.from({ length: count }, () => createId())\n}\n\n/**\n * Generate a short ID (10 characters) for less critical use cases\n *\n * @returns A shorter CUID2 string (10 characters)\n */\nexport function generateShortId(): string {\n  return createId().slice(0, 10)\n}\n\n/**\n * Generate a CUID2 with custom length\n *\n * @param length - Desired length (min 2, max 24)\n * @returns A CUID2 string of specified length\n */\nexport function generateIdWithLength(length: number): string {\n  if (length < 2)\n    length = 2\n  if (length > 24)\n    length = 24\n\n  const fullId = createId()\n  return fullId.slice(0, length)\n}\n\n/**\n * Validate that a string looks like a CUID2\n *\n * Note: This is a basic format check, not cryptographic validation\n *\n * @param id - The string to validate\n * @returns True if the string appears to be a valid CUID2\n */\nexport function isValidCuid2(id: string): boolean {\n  if (typeof id !== 'string')\n    return false\n\n  // CUID2s are 2-24 characters, start with a letter, and contain only a-z, A-Z, 0-9\n  const cuid2Pattern = /^[a-z][a-z0-9]{1,23}$/i\n  return cuid2Pattern.test(id)\n}\n\n/**\n * Validate a prefixed CUID2\n *\n * @param id - The prefixed ID to validate\n * @param prefix - The expected prefix\n * @returns True if the ID has the correct prefix and valid CUID2 suffix\n */\nexport function isValidPrefixedCuid2(id: string, prefix: string): boolean {\n  if (typeof id !== 'string' || !id.startsWith(prefix)) {\n    return false\n  }\n\n  const cuid2Part = id.slice(prefix.length)\n  return isValidCuid2(cuid2Part)\n}\n\n/**\n * Extract the CUID2 part from a prefixed ID\n *\n * @param prefixedId - The prefixed ID\n * @param prefix - The prefix to remove\n * @returns The CUID2 part without prefix, or null if invalid\n */\nexport function extractCuid2FromPrefixed(prefixedId: string, prefix: string): string | null {\n  if (!isValidPrefixedCuid2(prefixedId, prefix)) {\n    return null\n  }\n\n  return prefixedId.slice(prefix.length)\n}\n\n/**\n * Generate a time-based sortable ID (timestamp + CUID2)\n * Useful for IDs that need to be chronologically sortable\n *\n * @returns A sortable ID string (timestamp-cuid2)\n */\nexport function generateSortableId(): string {\n  const timestamp = Date.now().toString(36) // Base36 timestamp\n  const id = createId()\n  return `${timestamp}-${id}`\n}\n\n/**\n * Parse a sortable ID to extract timestamp and ID parts\n *\n * @param sortableId - The sortable ID to parse\n * @returns Object with timestamp and id, or null if invalid\n */\nexport function parseSortableId(sortableId: string): { timestamp: number, id: string } | null {\n  if (typeof sortableId !== 'string')\n    return null\n\n  const parts = sortableId.split('-')\n  if (parts.length !== 2)\n    return null\n\n  const timestampStr = parts[0]\n  const id = parts[1]\n\n  if (!timestampStr || !id)\n    return null\n\n  const timestamp = Number.parseInt(timestampStr, 36)\n\n  if (Number.isNaN(timestamp) || !isValidCuid2(id)) {\n    return null\n  }\n\n  return { timestamp, id }\n}\n\n/**\n * Batch ID generation with validation\n * Useful for bulk operations\n *\n * @param count - Number of IDs to generate\n * @param prefix - Optional prefix for all IDs\n * @returns Object with generated IDs and metadata\n */\nexport function generateBatchIds(count: number, prefix?: string): {\n  ids: string[]\n  count: number\n  prefix: string | undefined\n  generatedAt: string\n} {\n  const ids = Array.from({ length: count }, () =>\n    prefix ? generatePrefixedId(prefix) : createId())\n\n  return {\n    ids,\n    count: ids.length,\n    prefix,\n    generatedAt: new Date().toISOString(),\n  }\n}\n","/**\n * Cloudflare Workers-Safe Crypto Utilities\n *\n * These implementations avoid global scope violations by deferring\n * crypto operations until function call time, making them compatible\n * with Cloudflare Workers runtime restrictions.\n *\n * Use these instead of the regular crypto utilities when deploying\n * to Cloudflare Workers or other edge environments with similar\n * global scope restrictions.\n *\n * @example\n * ```typescript\n * import { createWorkerSafeCuid2, generateWorkerSafeId } from '@g-1/util/crypto/workers-safe';\n *\n * // Generate CUID2-compatible ID (Workers-safe)\n * const id = createWorkerSafeCuid2(); // \"ckd3j4k2l0000qzrmn831i7rn\"\n *\n * // Generate generic ID (Workers-safe)\n * const genericId = generateWorkerSafeId(); // \"ckd3j4k2l0000qzrmn831i7rn\"\n * ```\n */\n\n// Base alphabets for encoding\nconst BASE36_ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz'\nconst HEX_ALPHABET = '0123456789abcdef'\nconst URL_SAFE_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'\n\n/**\n * Generate cryptographically secure random bytes using Web Crypto API\n * This is Workers-safe as it doesn't perform operations at module load time\n */\nfunction getSecureRandomBytes(length: number): Uint8Array {\n  const bytes = new Uint8Array(length)\n  crypto.getRandomValues(bytes)\n  return bytes\n}\n\n/**\n * Generate a random string using specified alphabet\n */\nfunction randomStringWithAlphabet(alphabet: string, length: number): string {\n  const bytes = getSecureRandomBytes(length)\n  return Array.from(bytes, byte => alphabet[byte % alphabet.length]).join('')\n}\n\n/**\n * Generate a timestamp component in base36 for chronological sorting\n */\nfunction getTimestampComponent(): string {\n  return Date.now().toString(36)\n}\n\n/**\n * Generate a CUID2-compatible ID that's safe for Cloudflare Workers\n *\n * This implementation:\n * - Starts with a letter for HTML ID compatibility\n * - Includes timestamp for rough chronological ordering\n * - Uses secure random generation via Web Crypto API\n * - Avoids global scope crypto operations\n *\n * @returns A CUID2-compatible ID string\n */\nexport function createWorkerSafeCuid2(): string {\n  const prefix = 'c' // Start with letter like CUID2\n  const timestamp = getTimestampComponent()\n  const random = randomStringWithAlphabet(BASE36_ALPHABET, 12)\n\n  return prefix + timestamp + random\n}\n\n/**\n * Generate a generic ID using Workers-safe crypto\n * This is a drop-in replacement for generateDatabaseId from id-utils\n *\n * @returns A cryptographically secure ID string\n */\nexport function generateWorkerSafeId(): string {\n  return createWorkerSafeCuid2()\n}\n\n/**\n * Generate a prefixed ID using Workers-safe crypto\n *\n * @param prefix - Prefix to add before the ID\n * @returns A prefixed ID string\n */\nexport function generateWorkerSafePrefixedId(prefix: string): string {\n  return `${prefix}${createWorkerSafeCuid2()}`\n}\n\n/**\n * Generate multiple unique IDs at once (Workers-safe)\n *\n * @param count - Number of IDs to generate\n * @returns Array of unique ID strings\n */\nexport function generateWorkerSafeMultipleIds(count: number): string[] {\n  return Array.from({ length: count }, () => createWorkerSafeCuid2())\n}\n\n/**\n * Generate a hex ID using Workers-safe crypto\n *\n * @param length - Length of the hex ID (default: 16)\n * @returns A hexadecimal ID string\n */\nexport function generateWorkerSafeHexId(length: number = 16): string {\n  return randomStringWithAlphabet(HEX_ALPHABET, length)\n}\n\n/**\n * Generate a URL-safe ID using Workers-safe crypto\n *\n * @param length - Length of the URL-safe ID (default: 16)\n * @returns A URL-safe ID string\n */\nexport function generateWorkerSafeUrlSafeId(length: number = 16): string {\n  return randomStringWithAlphabet(URL_SAFE_ALPHABET, length)\n}\n\n/**\n * Generate a numeric ID using Workers-safe crypto\n *\n * @param length - Length of the numeric ID (default: 16)\n * @returns A numeric ID string\n */\nexport function generateWorkerSafeNumericId(length: number = 16): string {\n  return randomStringWithAlphabet('0123456789', length)\n}\n\n/**\n * Generate an ID with custom alphabet using Workers-safe crypto\n *\n * @param alphabet - Custom alphabet to use\n * @param length - Length of the ID (default: 16)\n * @returns A random ID string using the custom alphabet\n */\nexport function generateWorkerSafeIdWith(alphabet: string, length: number = 16): string {\n  return randomStringWithAlphabet(alphabet, length)\n}\n\n/**\n * Generate a time-based sortable ID using Workers-safe crypto\n *\n * @returns A sortable ID string (timestamp-id)\n */\nexport function generateWorkerSafeSortableId(): string {\n  const timestamp = getTimestampComponent()\n  const id = createWorkerSafeCuid2()\n  return `${timestamp}-${id}`\n}\n\n/**\n * Validate that a string looks like a CUID2\n * (Same validation logic as the original, but included for completeness)\n *\n * @param id - The string to validate\n * @returns True if the string appears to be a valid CUID2\n */\nexport function isValidWorkerSafeCuid2(id: string): boolean {\n  if (typeof id !== 'string')\n    return false\n\n  // CUID2s are 2-32 characters, start with a letter, and contain only a-z, A-Z, 0-9\n  const cuid2Pattern = /^[a-z][a-z0-9]{1,31}$/i\n  return cuid2Pattern.test(id)\n}\n\n/**\n * Validate a prefixed CUID2\n *\n * @param id - The prefixed ID to validate\n * @param prefix - The expected prefix\n * @returns True if the ID has the correct prefix and valid CUID2 suffix\n */\nexport function isValidWorkerSafePrefixedCuid2(id: string, prefix: string): boolean {\n  if (typeof id !== 'string' || !id.startsWith(prefix)) {\n    return false\n  }\n\n  const cuid2Part = id.slice(prefix.length)\n  return isValidWorkerSafeCuid2(cuid2Part)\n}\n\n/**\n * Alphabet constants for Workers-safe crypto operations\n */\nexport const WORKERS_SAFE_ALPHABETS = {\n  /** Base36: 0-9, a-z */\n  BASE36: BASE36_ALPHABET,\n  /** Hexadecimal: 0-9, a-f */\n  HEX: HEX_ALPHABET,\n  /** Numeric only: 0-9 */\n  NUMERIC: '0123456789',\n  /** URL-safe: 0-9, A-Z, a-z, -, _ */\n  URL_SAFE: URL_SAFE_ALPHABET,\n  /** Alphanumeric: 0-9, A-Z, a-z */\n  ALPHANUMERIC: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',\n  /** Lowercase alphanumeric: 0-9, a-z */\n  LOWERCASE: '0123456789abcdefghijklmnopqrstuvwxyz',\n  /** Uppercase alphanumeric: 0-9, A-Z */\n  UPPERCASE: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',\n  /** Alpha only: A-Z, a-z */\n  ALPHA: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',\n} as const\n","/**\n * Database Utilities\n *\n * Generic database utility functions that work with any ORM or database library.\n * These utilities help with common database operations and result handling.\n *\n * @example\n * ```typescript\n * import { takeFirst, takeFirstOrThrow } from '@go-corp/utils/database';\n *\n * // Get first result or null\n * const user = takeFirst(await db.select().from(users));\n *\n * // Get first result or throw error\n * const user = takeFirstOrThrow(\n *   await db.select().from(users).where(eq(users.id, userId)),\n *   'User not found'\n * );\n * ```\n */\n\n/**\n * Generic error class for database query operations\n */\nexport class DatabaseQueryError extends Error {\n  constructor(message: string, public readonly code?: string) {\n    super(message)\n    this.name = 'DatabaseQueryError'\n  }\n}\n\n/**\n * Error thrown when a required database record is not found in query results\n */\nexport class QueryNotFoundError extends DatabaseQueryError {\n  constructor(message: string = 'Record not found') {\n    super(message, 'NOT_FOUND')\n    this.name = 'QueryNotFoundError'\n  }\n}\n\n/**\n * Get the first element of an array or return null\n *\n * This is useful when working with database queries that return arrays\n * but you only need the first result.\n *\n * @param values - Array of values from database query\n * @returns First element or null if array is empty\n */\nexport function takeFirst<T>(values: T[]): T | null {\n  return values.length > 0 ? values[0]! : null\n}\n\n/**\n * Get the first element of an array or throw an error\n *\n * This is useful when you expect exactly one result from a database query\n * and want to throw an error if no results are found.\n *\n * @param values - Array of values from database query\n * @param errorMessage - Custom error message (optional)\n * @returns First element\n * @throws QueryNotFoundError if array is empty\n */\nexport function takeFirstOrThrow<T>(\n  values: T[],\n  errorMessage: string = 'Record not found',\n): T {\n  const value = takeFirst(values)\n  if (value === null) {\n    throw new QueryNotFoundError(errorMessage)\n  }\n  return value\n}\n\n/**\n * Get the last element of an array or return null\n *\n * @param values - Array of values from database query\n * @returns Last element or null if array is empty\n */\nexport function takeLast<T>(values: T[]): T | null {\n  return values.length > 0 ? values[values.length - 1]! : null\n}\n\n/**\n * Get the last element of an array or throw an error\n *\n * @param values - Array of values from database query\n * @param errorMessage - Custom error message (optional)\n * @returns Last element\n * @throws QueryNotFoundError if array is empty\n */\nexport function takeLastOrThrow<T>(\n  values: T[],\n  errorMessage: string = 'Record not found',\n): T {\n  const value = takeLast(values)\n  if (value === null) {\n    throw new QueryNotFoundError(errorMessage)\n  }\n  return value\n}\n\n/**\n * Ensure exactly one result or throw an error\n *\n * This is useful when you expect exactly one result and want to throw\n * an error for both empty results and multiple results.\n *\n * @param values - Array of values from database query\n * @param errorMessage - Custom error message (optional)\n * @returns The single element\n * @throws QueryNotFoundError if array is empty\n * @throws DatabaseQueryError if array has more than one element\n */\nexport function takeExactlyOne<T>(\n  values: T[],\n  errorMessage: string = 'Record not found',\n): T {\n  if (values.length === 0) {\n    throw new QueryNotFoundError(errorMessage)\n  }\n  if (values.length > 1) {\n    throw new DatabaseQueryError(`Expected exactly one record, but found ${values.length}`)\n  }\n  return values[0]!\n}\n\n/**\n * Check if a database result set is empty\n *\n * @param values - Array of values from database query\n * @returns True if array is empty\n */\nexport function isEmptyArray<T>(values: T[]): boolean {\n  return values.length === 0\n}\n\n/**\n * Check if a database result set has exactly one element\n *\n * @param values - Array of values from database query\n * @returns True if array has exactly one element\n */\nexport function isExactlyOne<T>(values: T[]): boolean {\n  return values.length === 1\n}\n\n/**\n * Check if a database result set has multiple elements\n *\n * @param values - Array of values from database query\n * @returns True if array has more than one element\n */\nexport function hasMultiple<T>(values: T[]): boolean {\n  return values.length > 1\n}\n\n/**\n * Paginate results with offset and limit\n *\n * @param values - Array of values to paginate\n * @param page - Page number (1-based)\n * @param pageSize - Number of items per page\n * @returns Object with paginated results and metadata\n */\nexport function paginate<T>(\n  values: T[],\n  page: number = 1,\n  pageSize: number = 10,\n): {\n  data: T[]\n  pagination: {\n    page: number\n    pageSize: number\n    total: number\n    totalPages: number\n    hasNext: boolean\n    hasPrev: boolean\n  }\n} {\n  const total = values.length\n  const totalPages = Math.ceil(total / pageSize)\n  const offset = (page - 1) * pageSize\n  const data = values.slice(offset, offset + pageSize)\n\n  return {\n    data,\n    pagination: {\n      page,\n      pageSize,\n      total,\n      totalPages,\n      hasNext: page < totalPages,\n      hasPrev: page > 1,\n    },\n  }\n}\n","/**\n * Formats a date to a readable string\n */\nexport function formatDate(date: Date, format: 'short' | 'medium' | 'long' | 'iso' = 'medium'): string {\n  const formats = {\n    short: { year: 'numeric', month: 'numeric', day: 'numeric' } as const,\n    medium: { year: 'numeric', month: 'short', day: 'numeric' } as const,\n    long: { year: 'numeric', month: 'long', day: 'numeric', weekday: 'long' } as const,\n    iso: 'iso' as const,\n  }\n\n  if (format === 'iso') {\n    return date.toISOString().split('T')[0]!\n  }\n\n  return date.toLocaleDateString('en-US', formats[format])\n}\n\n/**\n * Gets the number of days between two dates\n */\nexport function daysBetween(date1: Date, date2: Date): number {\n  const diffTime = Math.abs(date2.getTime() - date1.getTime())\n  return Math.ceil(diffTime / (1000 * 60 * 60 * 24))\n}\n\n/**\n * Checks if a date is today\n */\nexport function isToday(date: Date): boolean {\n  const today = new Date()\n  return date.toDateString() === today.toDateString()\n}\n\n/**\n * Checks if a date is this week\n */\nexport function isThisWeek(date: Date): boolean {\n  const today = new Date()\n  const startOfWeek = new Date(today.getFullYear(), today.getMonth(), today.getDate() - today.getDay())\n  const endOfWeek = new Date(today.getFullYear(), today.getMonth(), today.getDate() + (6 - today.getDay()))\n\n  return date >= startOfWeek && date <= endOfWeek\n}\n\n/**\n * Adds days to a date\n */\nexport function addDays(date: Date, days: number): Date {\n  const result = new Date(date)\n  result.setDate(result.getDate() + days)\n  return result\n}\n\n/**\n * Adds months to a date\n */\nexport function addMonths(date: Date, months: number): Date {\n  const result = new Date(date)\n  result.setMonth(result.getMonth() + months)\n  return result\n}\n\n/**\n * Gets the start of the day\n */\nexport function startOfDay(date: Date): Date {\n  const result = new Date(date)\n  result.setHours(0, 0, 0, 0)\n  return result\n}\n\n/**\n * Gets the end of the day\n */\nexport function endOfDay(date: Date): Date {\n  const result = new Date(date)\n  result.setHours(23, 59, 59, 999)\n  return result\n}\n\n/**\n * Gets a relative time string (e.g., \"2 hours ago\")\n */\nexport function getRelativeTime(date: Date, baseDate: Date = new Date()): string {\n  const diffMs = baseDate.getTime() - date.getTime()\n  const diffSecs = Math.round(diffMs / 1000)\n  const diffMins = Math.round(diffSecs / 60)\n  const diffHours = Math.round(diffMins / 60)\n  const diffDays = Math.round(diffHours / 24)\n  const diffMonths = Math.round(diffDays / 30)\n  const diffYears = Math.round(diffDays / 365)\n\n  if (Math.abs(diffSecs) < 60) {\n    return 'just now'\n  }\n  else if (Math.abs(diffMins) < 60) {\n    return diffMins > 0 ? `${diffMins} minutes ago` : `in ${Math.abs(diffMins)} minutes`\n  }\n  else if (Math.abs(diffHours) < 24) {\n    return diffHours > 0 ? `${diffHours} hours ago` : `in ${Math.abs(diffHours)} hours`\n  }\n  else if (Math.abs(diffDays) < 30) {\n    return diffDays > 0 ? `${diffDays} days ago` : `in ${Math.abs(diffDays)} days`\n  }\n  else if (Math.abs(diffMonths) < 12) {\n    return diffMonths > 0 ? `${diffMonths} months ago` : `in ${Math.abs(diffMonths)} months`\n  }\n  else {\n    return diffYears > 0 ? `${diffYears} years ago` : `in ${Math.abs(diffYears)} years`\n  }\n}\n","/**\n * Simple performance timer\n */\nexport function createTimer(label: string = 'Timer') {\n  const start = performance.now()\n\n  return {\n    stop(): number {\n      const end = performance.now()\n      const duration = end - start\n      console.log(`${label}: ${duration.toFixed(2)}ms`)\n      return duration\n    },\n  }\n}\n\n/**\n * Logs with timestamp\n */\nexport function logWithTime(message: string, ...args: any[]): void {\n  const timestamp = new Date().toISOString()\n  console.log(`[${timestamp}] ${message}`, ...args)\n}\n\n/**\n * Pretty prints an object\n */\nexport function prettyPrint(obj: any, indent: number = 2): void {\n  console.log(JSON.stringify(obj, null, indent))\n}\n\n/**\n * Measure function execution time\n */\nexport async function measureTime<T>(\n  fn: () => T | Promise<T>,\n  label: string = 'Function',\n): Promise<{ result: T, duration: number }> {\n  const start = performance.now()\n  const result = await fn()\n  const end = performance.now()\n  const duration = end - start\n\n  console.log(`${label} took ${duration.toFixed(2)}ms`)\n\n  return { result, duration }\n}\n","/**\n * Error Formatting Utility - Enhanced error styling for failures\n */\n\nimport chalk, { Chalk } from 'chalk'\n\nconst noColor = typeof process !== 'undefined' && typeof process.env !== 'undefined' && (process.env.NO_COLOR !== undefined || process.env.FORCE_COLOR === '0')\nconst ch = new Chalk({ level: noColor ? 0 : chalk.level })\n\nexport interface FormattedError {\n  message: string\n  type: 'critical' | 'warning' | 'info'\n  context?: string | undefined\n}\n\nexport class ErrorFormatter {\n  /**\n   * Format error messages with red styling and red X\n   */\n  static formatError(error: Error | string, type: 'critical' | 'warning' | 'info' = 'critical'): FormattedError {\n    const message = error instanceof Error ? error.message : error\n\n    let formattedMessage: string\n    let icon: string\n\n    switch (type) {\n      case 'critical':\n        icon = ch.red('✗')\n        formattedMessage = ch.red.bold(message)\n        break\n      case 'warning':\n        icon = ch.yellow('⚠️')\n        formattedMessage = ch.yellow(message)\n        break\n      case 'info':\n        icon = ch.blue('ℹ')\n        formattedMessage = ch.blue(message)\n        break\n    }\n\n    return {\n      message: `${icon} ${formattedMessage}`,\n      type,\n      context: error instanceof Error ? error.stack : undefined,\n    }\n  }\n\n  /**\n   * Format step failures with enhanced visibility\n   */\n  static formatWorkflowFailure(stepTitle: string, error: Error | string): string {\n    const formattedError = this.formatError(error, 'critical')\n    return `${ch.red('✗')} ${ch.red.bold(stepTitle)} - ${formattedError.message.replace(/^✗\\s/, '')}`\n  }\n\n  /**\n   * Format publishing workflow failures specifically\n   */\n  static formatPublishingFailure(error: Error | string): string {\n    const formattedError = this.formatError(error, 'critical')\n    return `${ch.red('✗')} ${ch.red.bold('Publishing workflow failed')} - ${formattedError.message.replace(/^✗\\s/, '')}`\n  }\n\n  /**\n   * Create a red error box for critical failures\n   */\n  static createErrorBox(title: string, message: string, suggestions?: string[]): string {\n    const width = 68\n    const border = '═'.repeat(width - 2)\n\n    let output = '\\n'\n    output += ch.red(`╔${border}╗\\n`)\n    output += ch.red(`║${title.padStart((width + title.length) / 2).padEnd(width - 2)}║\\n`)\n    output += ch.red(`╚${border}╝\\n`)\n    output += '\\n'\n    output += `${ch.red.bold(message)}\\n`\n\n    if (suggestions && suggestions.length > 0) {\n      output += `\\n${ch.yellow.bold('Suggestions:\\n')}`\n      suggestions.forEach((suggestion) => {\n        output += ch.yellow(`  • ${suggestion}\\n`)\n      })\n    }\n\n    output += '\\n'\n    return output\n  }\n\n  /**\n   * Format error logs for display\n   */\n  static formatErrorLogs(logs: string): string {\n    return logs\n      .split('\\n')\n      .map((line) => {\n        if (line.includes('error') || line.includes('Error') || line.includes('ERROR')) {\n          return ch.red(line)\n        }\n        if (line.includes('warn') || line.includes('Warning') || line.includes('WARN')) {\n          return ch.yellow(line)\n        }\n        return ch.gray(line)\n      })\n      .join('\\n')\n  }\n}\n","/**\n * Enterprise Structured Logger - Consolidated from go-test-suite\n * Provides comprehensive logging with telemetry, performance monitoring, and multi-level output\n */\n\nexport enum LogLevel {\n  ERROR = 0,\n  WARN = 1,\n  INFO = 2,\n  DEBUG = 3,\n  TRACE = 4,\n}\n\nexport interface LogEntry {\n  timestamp: string\n  level: LogLevel\n  message: string\n  metadata?: Record<string, any>\n  error?: Error\n  source?: string\n}\n\nexport interface TelemetryEvent {\n  name: string\n  properties: Record<string, any>\n  timestamp: string\n  sessionId: string\n}\n\nexport interface LoggerConfig {\n  verbose?: boolean\n  source?: string\n  telemetry?: {\n    enabled?: boolean\n    endpoint?: string\n    apiKey?: string\n  }\n}\n\n/**\n * Color constants for terminal output\n */\nconst COLORS = {\n  reset: '\\x1B[0m',\n  bright: '\\x1B[1m',\n  red: '\\x1B[31m',\n  green: '\\x1B[32m',\n  yellow: '\\x1B[33m',\n  blue: '\\x1B[34m',\n  magenta: '\\x1B[35m',\n  cyan: '\\x1B[36m',\n  gray: '\\x1B[90m',\n} as const\n\n/**\n * Enterprise-level structured logger\n */\nexport class StructuredLogger {\n  private sessionId: string = this.generateSessionId()\n  private logLevel: LogLevel = LogLevel.INFO\n  private config: LoggerConfig\n  private telemetryEvents: TelemetryEvent[] = []\n\n  constructor(config: LoggerConfig = {}) {\n    this.config = {\n      verbose: false,\n      source: 'go-utils',\n      telemetry: { enabled: false },\n      ...config,\n    }\n    this.logLevel = this.config.verbose ? LogLevel.DEBUG : LogLevel.INFO\n  }\n\n  /**\n   * Log error message\n   */\n  error(message: string, error?: Error, metadata?: Record<string, any>): void {\n    this.log(LogLevel.ERROR, message, metadata, error)\n\n    if (error) {\n      this.trackTelemetry('error', {\n        message,\n        errorName: error.name,\n        errorMessage: error.message,\n        stack: error.stack,\n        ...metadata,\n      })\n    }\n  }\n\n  /**\n   * Log warning message\n   */\n  warn(message: string, metadata?: Record<string, any>): void {\n    this.log(LogLevel.WARN, message, metadata)\n  }\n\n  /**\n   * Log info message\n   */\n  info(message: string, metadata?: Record<string, any>): void {\n    this.log(LogLevel.INFO, message, metadata)\n  }\n\n  /**\n   * Log debug message\n   */\n  debug(message: string, metadata?: Record<string, any>): void {\n    this.log(LogLevel.DEBUG, message, metadata)\n  }\n\n  /**\n   * Log trace message\n   */\n  trace(message: string, metadata?: Record<string, any>): void {\n    this.log(LogLevel.TRACE, message, metadata)\n  }\n\n  /**\n   * Log success message\n   */\n  success(message: string, metadata?: Record<string, any>): void {\n    if (this.logLevel >= LogLevel.INFO) {\n      const formatted = this.formatMessage(LogLevel.INFO, message, 'success')\n      console.log(formatted)\n      this.trackTelemetry('success', { message, ...metadata })\n    }\n  }\n\n  /**\n   * Log with timestamp (enhanced version from debug-utils)\n   */\n  logWithTime(message: string, ...args: any[]): void {\n    const timestamp = new Date().toISOString()\n    console.log(`[${timestamp}] ${message}`, ...args)\n  }\n\n  /**\n   * Pretty print object\n   */\n  prettyPrint(obj: any, indent: number = 2): void {\n    console.log(JSON.stringify(obj, null, indent))\n  }\n\n  /**\n   * Track telemetry event\n   */\n  trackTelemetry(name: string, properties: Record<string, any> = {}): void {\n    if (!this.config.telemetry?.enabled)\n      return\n\n    const event: TelemetryEvent = {\n      name,\n      properties: {\n        ...properties,\n        nodeVersion: typeof process !== 'undefined' ? process.version : undefined,\n        platform: typeof process !== 'undefined' ? process.platform : undefined,\n        arch: typeof process !== 'undefined' ? process.arch : undefined,\n      },\n      timestamp: new Date().toISOString(),\n      sessionId: this.sessionId,\n    }\n\n    this.telemetryEvents.push(event)\n\n    // Send telemetry if endpoint is configured\n    if (this.config.telemetry?.endpoint) {\n      this.sendTelemetry(event).catch((err) => {\n        this.debug('Failed to send telemetry', { error: err.message })\n      })\n    }\n  }\n\n  /**\n   * Create a child logger with additional metadata\n   */\n  child(metadata: Record<string, any>, source?: string): StructuredLogger {\n    const child = new StructuredLogger({\n      ...this.config,\n      source: source || this.config.source || 'go-utils',\n    })\n    child.sessionId = this.sessionId\n    child.logLevel = this.logLevel\n\n    // Override log method to include child metadata\n    const originalLog = child.log.bind(child)\n    child.log = (level: LogLevel, message: string, childMetadata?: Record<string, any>, error?: Error) => {\n      originalLog(level, message, { ...metadata, ...childMetadata }, error)\n    }\n\n    return child\n  }\n\n  /**\n   * Get performance timer (enhanced version)\n   */\n  timer(label: string): () => number {\n    const start = performance.now()\n    return () => {\n      const duration = performance.now() - start\n      this.debug(`Timer: ${label}`, { duration: `${duration.toFixed(2)}ms` })\n      this.trackTelemetry('performance', { label, duration })\n      return duration\n    }\n  }\n\n  /**\n   * Measure function execution time\n   */\n  async measureTime<T>(\n    fn: () => T | Promise<T>,\n    label: string = 'Function',\n  ): Promise<{ result: T, duration: number }> {\n    const start = performance.now()\n    const result = await fn()\n    const end = performance.now()\n    const duration = end - start\n\n    this.info(`${label} completed`, { duration: `${duration.toFixed(2)}ms` })\n    this.trackTelemetry('function_timing', { label, duration })\n\n    return { result, duration }\n  }\n\n  /**\n   * Flush telemetry events\n   */\n  async flush(): Promise<void> {\n    if (!this.config.telemetry?.enabled || this.telemetryEvents.length === 0) {\n      return\n    }\n\n    if (this.config.telemetry.endpoint) {\n      try {\n        await this.sendBatchTelemetry(this.telemetryEvents)\n        this.telemetryEvents = []\n      }\n      catch (error) {\n        this.debug('Failed to flush telemetry', {\n          error: error instanceof Error ? error.message : 'Unknown error',\n          eventCount: this.telemetryEvents.length,\n        })\n      }\n    }\n  }\n\n  /**\n   * Set log level\n   */\n  setLevel(level: LogLevel): void {\n    this.logLevel = level\n  }\n\n  /**\n   * Get current session ID\n   */\n  getSessionId(): string {\n    return this.sessionId\n  }\n\n  /**\n   * Core logging method\n   */\n  private log(level: LogLevel, message: string, metadata?: Record<string, any>, error?: Error): void {\n    if (level > this.logLevel)\n      return\n\n    const entry: LogEntry = {\n      timestamp: new Date().toISOString(),\n      level,\n      message,\n      ...(metadata && { metadata }),\n      ...(error && { error }),\n      source: this.config.source || 'go-utils',\n    }\n\n    // Output to console with formatting\n    const formatted = this.formatMessage(level, message, undefined, metadata, error)\n\n    if (level === LogLevel.ERROR) {\n      console.error(formatted)\n      if (error && this.logLevel >= LogLevel.DEBUG) {\n        console.error(COLORS.gray + (error.stack || error.message) + COLORS.reset)\n      }\n    }\n    else {\n      console.log(formatted)\n    }\n\n    // Store for potential export/analysis\n    this.storeLogEntry(entry)\n  }\n\n  /**\n   * Format message for console output\n   */\n  private formatMessage(\n    level: LogLevel,\n    message: string,\n    type?: 'success' | 'error' | 'warn',\n    metadata?: Record<string, any>,\n    _error?: Error,\n  ): string {\n    const timestamp = COLORS.gray + new Date().toISOString() + COLORS.reset\n    const levelStr = LogLevel[level].padEnd(5)\n\n    let colorFn = (str: string) => str\n    let prefix = ''\n\n    switch (type || LogLevel[level]) {\n      case 'success':\n        colorFn = (str: string) => COLORS.green + str + COLORS.reset\n        prefix = '✅ '\n        break\n      case 'ERROR':\n        colorFn = (str: string) => COLORS.red + str + COLORS.reset\n        prefix = '❌ '\n        break\n      case 'WARN':\n        colorFn = (str: string) => COLORS.yellow + str + COLORS.reset\n        prefix = '⚠️  '\n        break\n      case 'INFO':\n        colorFn = (str: string) => COLORS.blue + str + COLORS.reset\n        prefix = 'ℹ️  '\n        break\n      case 'DEBUG':\n        colorFn = (str: string) => COLORS.magenta + str + COLORS.reset\n        prefix = '🔍 '\n        break\n      case 'TRACE':\n        colorFn = (str: string) => COLORS.gray + str + COLORS.reset\n        prefix = '🔬 '\n        break\n    }\n\n    let formatted = `${timestamp} ${COLORS.bright + levelStr + COLORS.reset} ${prefix}${colorFn(message)}`\n\n    if (metadata && Object.keys(metadata).length > 0 && this.logLevel >= LogLevel.DEBUG) {\n      const metaStr = Object.entries(metadata)\n        .map(([key, value]) => `${key}=${JSON.stringify(value)}`)\n        .join(' ')\n      formatted += ` ${COLORS.gray}[${metaStr}]${COLORS.reset}`\n    }\n\n    return formatted\n  }\n\n  /**\n   * Store log entry for analysis\n   */\n  private storeLogEntry(entry: LogEntry): void {\n    // Could store to file, database, or memory for analysis\n    // For now, just track in telemetry\n    if (entry.level <= LogLevel.WARN) {\n      this.trackTelemetry('log_event', {\n        level: LogLevel[entry.level],\n        message: entry.message,\n        hasError: !!entry.error,\n        metadata: entry.metadata,\n      })\n    }\n  }\n\n  /**\n   * Send single telemetry event\n   */\n  private async sendTelemetry(event: TelemetryEvent): Promise<void> {\n    if (!this.config.telemetry?.endpoint)\n      return\n\n    const headers: Record<string, string> = {\n      'Content-Type': 'application/json',\n      'User-Agent': this.config.source || 'go-utils',\n    }\n\n    if (this.config.telemetry.apiKey) {\n      headers.Authorization = `Bearer ${this.config.telemetry.apiKey}`\n    }\n\n    await fetch(this.config.telemetry.endpoint, {\n      method: 'POST',\n      headers,\n      body: JSON.stringify(event),\n    })\n  }\n\n  /**\n   * Send batch telemetry events\n   */\n  private async sendBatchTelemetry(events: TelemetryEvent[]): Promise<void> {\n    if (!this.config.telemetry?.endpoint)\n      return\n\n    const headers: Record<string, string> = {\n      'Content-Type': 'application/json',\n      'User-Agent': this.config.source || 'go-utils',\n    }\n\n    if (this.config.telemetry.apiKey) {\n      headers.Authorization = `Bearer ${this.config.telemetry.apiKey}`\n    }\n\n    await fetch(this.config.telemetry.endpoint, {\n      method: 'POST',\n      headers,\n      body: JSON.stringify({ events }),\n    })\n  }\n\n  /**\n   * Generate unique session ID\n   */\n  private generateSessionId(): string {\n    return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`\n  }\n}\n\n/**\n * Exit codes for different error types\n */\nexport enum ExitCode {\n  SUCCESS = 0,\n  GENERAL_ERROR = 1,\n  CONFIG_ERROR = 2,\n  TEST_FAILURE = 3,\n  NO_TESTS_FOUND = 4,\n  TIMEOUT = 5,\n  INTERRUPTED = 6,\n  DEPENDENCY_ERROR = 7,\n}\n\n/**\n * Format error with proper exit code\n */\nexport function formatError(error: Error, exitCode: ExitCode = ExitCode.GENERAL_ERROR): never {\n  const logger = createLogger({ source: 'error-handler' })\n  logger.error(error.message, error)\n\n  if (typeof process !== 'undefined') {\n    process.exit(exitCode)\n  }\n  throw error\n}\n\n/**\n * Handle uncaught errors gracefully\n */\nexport function setupErrorHandlers(logger: StructuredLogger): void {\n  if (typeof process === 'undefined')\n    return\n\n  process.on('uncaughtException', (error) => {\n    logger.error('Uncaught exception', error)\n    logger.flush().finally(() => process.exit(ExitCode.GENERAL_ERROR))\n  })\n\n  process.on('unhandledRejection', (reason, promise) => {\n    const error = reason instanceof Error ? reason : new Error(String(reason))\n    logger.error('Unhandled rejection', error, { promise: promise.toString() })\n    logger.flush().finally(() => process.exit(ExitCode.GENERAL_ERROR))\n  })\n\n  process.on('SIGINT', () => {\n    logger.info('Received SIGINT, shutting down gracefully...')\n    logger.flush().finally(() => process.exit(ExitCode.INTERRUPTED))\n  })\n\n  process.on('SIGTERM', () => {\n    logger.info('Received SIGTERM, shutting down gracefully...')\n    logger.flush().finally(() => process.exit(ExitCode.INTERRUPTED))\n  })\n}\n\n/**\n * Factory function for creating logger instances\n */\nexport function createLogger(config?: LoggerConfig): StructuredLogger {\n  return new StructuredLogger(config)\n}\n\n/**\n * Default logger instance\n */\nexport const logger = createLogger()\n\n/**\n * Simple timer function (backward compatibility)\n */\nexport function createTimer(label: string = 'Timer') {\n  const start = performance.now()\n\n  return {\n    stop(): number {\n      const end = performance.now()\n      const duration = end - start\n      logger.info(`${label}: ${duration.toFixed(2)}ms`)\n      return duration\n    },\n  }\n}\n\n/**\n * Log with timestamp (backward compatibility)\n */\nexport function logWithTime(message: string, ...args: any[]): void {\n  logger.logWithTime(message, ...args)\n}\n\n/**\n * Pretty print (backward compatibility)\n */\nexport function prettyPrint(obj: any, indent: number = 2): void {\n  logger.prettyPrint(obj, indent)\n}\n\n/**\n * Measure function execution time (backward compatibility)\n */\nexport async function measureTime<T>(\n  fn: () => T | Promise<T>,\n  label: string = 'Function',\n): Promise<{ result: T, duration: number }> {\n  return logger.measureTime(fn, label)\n}\n","/**\n * Environment utilities for consistent environment variable handling\n * Works in both Node.js and edge environments\n */\n\n/**\n * Environment detection utilities\n */\nexport function isDev(): boolean {\n  return getEnv('NODE_ENV') === 'development'\n}\n\nexport function isProd(): boolean {\n  return getEnv('NODE_ENV') === 'production'\n}\n\nexport function isTest(): boolean {\n  return getEnv('NODE_ENV') === 'test'\n}\n\n/**\n * Get environment variable with fallback\n * Works in both Node.js and edge environments like Cloudflare Workers\n */\nexport function getEnv(key: string, defaultValue?: string): string | undefined {\n  // Try process.env first (Node.js)\n  if (typeof process !== 'undefined' && process.env) {\n    const value = process.env[key]\n    if (value !== undefined)\n      return value\n  }\n\n  // Fallback to globalThis for edge environments\n  if (typeof globalThis !== 'undefined' && (globalThis as any).process?.env) {\n    const value = (globalThis as any).process.env[key]\n    if (value !== undefined)\n      return value\n  }\n\n  return defaultValue\n}\n\n/**\n * Require an environment variable - throws if not found\n */\nexport function requireEnv(key: string): string {\n  const value = getEnv(key)\n  if (!value) {\n    throw new Error(`Environment variable ${key} is required but not set`)\n  }\n  return value\n}\n\n/**\n * Get environment variable as number\n */\nexport function getEnvNumber(key: string, defaultValue?: number): number | undefined {\n  const value = getEnv(key)\n  if (!value)\n    return defaultValue\n\n  const num = Number(value)\n  if (Number.isNaN(num)) {\n    throw new TypeError(`Environment variable ${key} must be a number, got: ${value}`)\n  }\n  return num\n}\n\n/**\n * Get environment variable as boolean\n */\nexport function getEnvBoolean(key: string, defaultValue?: boolean): boolean | undefined {\n  const value = getEnv(key)\n  if (!value)\n    return defaultValue\n\n  const lower = value.toLowerCase()\n  if (['true', '1', 'yes', 'on'].includes(lower))\n    return true\n  if (['false', '0', 'no', 'off'].includes(lower))\n    return false\n\n  throw new Error(`Environment variable ${key} must be a boolean, got: ${value}`)\n}\n\n/**\n * Get environment variable as JSON\n */\nexport function getEnvJson<T = any>(key: string, defaultValue?: T): T | undefined {\n  const value = getEnv(key)\n  if (!value)\n    return defaultValue\n\n  try {\n    return JSON.parse(value) as T\n  }\n  catch {\n    throw new Error(`Environment variable ${key} must be valid JSON, got: ${value}`)\n  }\n}\n\n/**\n * Validate required environment variables\n */\nexport function validateEnv(requiredVars: string[]): { missing: string[] } {\n  const missing: string[] = []\n\n  for (const varName of requiredVars) {\n    if (!getEnv(varName)) {\n      missing.push(varName)\n    }\n  }\n\n  return { missing }\n}\n\n/**\n * Environment configuration helper\n */\nexport interface EnvConfig {\n  [key: string]: {\n    required?: boolean\n    type?: 'string' | 'number' | 'boolean' | 'json'\n    defaultValue?: any\n  }\n}\n\n/**\n * Load environment configuration with type validation\n */\nexport function loadEnvConfig<T extends Record<string, any>>(config: EnvConfig): T {\n  const result: any = {}\n  const errors: string[] = []\n\n  for (const [key, options] of Object.entries(config)) {\n    try {\n      let value: any\n\n      switch (options.type) {\n        case 'number':\n          value = getEnvNumber(key, options.defaultValue)\n          break\n        case 'boolean':\n          value = getEnvBoolean(key, options.defaultValue)\n          break\n        case 'json':\n          value = getEnvJson(key, options.defaultValue)\n          break\n        default:\n          value = getEnv(key, options.defaultValue)\n      }\n\n      if (options.required && (value === undefined || value === null || value === '')) {\n        errors.push(`Required environment variable ${key} is missing`)\n      }\n      else {\n        result[key] = value\n      }\n    }\n    catch (error) {\n      errors.push(`Invalid environment variable ${key}: ${(error as Error).message}`)\n    }\n  }\n\n  if (errors.length > 0) {\n    throw new Error(`Environment validation failed:\\n${errors.join('\\n')}`)\n  }\n\n  return result as T\n}\n\n/**\n * Common environment patterns for Go Corp projects\n */\nexport const CommonEnvVars = {\n  // Application\n  NODE_ENV: () => getEnv('NODE_ENV', 'development'),\n  PORT: () => getEnvNumber('PORT', 3000),\n  HOST: () => getEnv('HOST', '0.0.0.0'),\n\n  // Database\n  DATABASE_URL: () => requireEnv('DATABASE_URL'),\n  REDIS_URL: () => getEnv('REDIS_URL'),\n\n  // Authentication\n  JWT_SECRET: () => requireEnv('JWT_SECRET'),\n  JWT_EXPIRES_IN: () => getEnv('JWT_EXPIRES_IN', '7d'),\n\n  // External Services\n  API_BASE_URL: () => getEnv('API_BASE_URL'),\n  WEBHOOK_SECRET: () => getEnv('WEBHOOK_SECRET'),\n\n  // Feature flags\n  FEATURE_FLAGS: () => getEnvJson<Record<string, boolean>>('FEATURE_FLAGS', {}),\n\n  // Logging\n  LOG_LEVEL: () => getEnv('LOG_LEVEL', 'info'),\n  LOG_FORMAT: () => getEnv('LOG_FORMAT', 'json'),\n\n  // CORS\n  ALLOWED_ORIGINS: () => {\n    const origins = getEnv('ALLOWED_ORIGINS')\n    return origins ? origins.split(',').map(s => s.trim()) : ['http://localhost:3000']\n  },\n} as const\n\n/**\n * Runtime detection utilities\n */\nexport type Runtime = 'node' | 'bun' | 'cloudflare-workers' | 'unknown'\nexport type DatabaseProvider = 'memory' | 'sqlite' | 'd1'\n\n/**\n * Detect the current runtime environment\n */\nexport function detectRuntime(): Runtime {\n  // Cloudflare Workers\n  if (typeof globalThis !== 'undefined') {\n    if ('CloudflareWorkerGlobalScope' in globalThis || 'caches' in globalThis) {\n      return 'cloudflare-workers'\n    }\n  }\n\n  // Bun\n  if (typeof (globalThis as any).Bun !== 'undefined') {\n    return 'bun'\n  }\n\n  // Node.js\n  if (typeof process !== 'undefined' && process.versions?.node) {\n    return 'node'\n  }\n\n  return 'unknown'\n}\n\n/**\n * Detect the best database provider for the current environment\n */\nexport function detectDatabaseProvider(): DatabaseProvider {\n  const runtime = detectRuntime()\n\n  switch (runtime) {\n    case 'cloudflare-workers':\n      return 'd1'\n\n    case 'node':\n    case 'bun':\n      // Check if better-sqlite3 is available\n      try {\n        if (typeof require !== 'undefined') {\n          require.resolve('better-sqlite3')\n          return 'sqlite'\n        }\n      }\n      catch {\n        return 'memory'\n      }\n      return 'memory'\n\n    default:\n      return 'memory'\n  }\n}\n\n/**\n * Get runtime capabilities\n */\nexport function getRuntimeCapabilities(): {\n  hasFileSystem: boolean\n  hasNetworking: boolean\n  hasDatabase: boolean\n  hasSQLite: boolean\n  hasD1: boolean\n  supportsWorkers: boolean\n} {\n  const runtime = detectRuntime()\n\n  switch (runtime) {\n    case 'cloudflare-workers':\n      return {\n        hasFileSystem: false,\n        hasNetworking: true,\n        hasDatabase: true,\n        hasSQLite: false,\n        hasD1: true,\n        supportsWorkers: true,\n      }\n\n    case 'node':\n      return {\n        hasFileSystem: true,\n        hasNetworking: true,\n        hasDatabase: true,\n        hasSQLite: true,\n        hasD1: false,\n        supportsWorkers: false,\n      }\n\n    case 'bun':\n      return {\n        hasFileSystem: true,\n        hasNetworking: true,\n        hasDatabase: true,\n        hasSQLite: true,\n        hasD1: false,\n        supportsWorkers: false,\n      }\n\n    default:\n      return {\n        hasFileSystem: false,\n        hasNetworking: false,\n        hasDatabase: false,\n        hasSQLite: false,\n        hasD1: false,\n        supportsWorkers: false,\n      }\n  }\n}\n\n/**\n * Get environment info for debugging\n */\nexport function getEnvironmentInfo(): {\n  runtime: Runtime\n  databaseProvider: DatabaseProvider\n  capabilities: ReturnType<typeof getRuntimeCapabilities>\n  nodeVersion?: string\n  bunVersion?: string\n  platform?: string\n  arch?: string\n} {\n  const runtime = detectRuntime()\n  const info: ReturnType<typeof getEnvironmentInfo> = {\n    runtime,\n    databaseProvider: detectDatabaseProvider(),\n    capabilities: getRuntimeCapabilities(),\n  }\n\n  // Add Node.js specific info\n  if (typeof process !== 'undefined') {\n    info.nodeVersion = process.versions?.node\n    info.bunVersion = process.versions?.bun\n    info.platform = process.platform\n    info.arch = process.arch\n  }\n\n  // Add Bun specific info\n  if (typeof (globalThis as any).Bun !== 'undefined') {\n    info.bunVersion = (globalThis as any).Bun.version\n  }\n\n  return info\n}\n\n/**\n * Setup test environment variables\n */\nexport function setupTestEnvironment(): void {\n  const defaultEnv = {\n    NODE_ENV: 'test',\n    // Common test variables\n    RESEND_API_KEY: 'test_key_mock',\n    DATABASE_URL: ':memory:',\n    // Disable external services in tests\n    DISABLE_ANALYTICS: 'true',\n    DISABLE_MONITORING: 'true',\n  }\n\n  // Set environment variables if not already set\n  Object.entries(defaultEnv).forEach(([key, defaultValue]) => {\n    if (!getEnv(key)) {\n      if (typeof process !== 'undefined' && process.env) {\n        process.env[key] = defaultValue\n      }\n    }\n  })\n}\n\n/**\n * Check if we're in a test environment\n */\nexport function isTestEnvironment(): boolean {\n  return isTest()\n    || getEnv('VITEST') === 'true'\n    || getEnv('JEST_WORKER_ID') !== undefined\n}\n\n/**\n * Check if we're in CI environment\n */\nexport function isCIEnvironment(): boolean {\n  return getEnv('CI') === 'true'\n    || getEnv('GITHUB_ACTIONS') === 'true'\n    || getEnv('GITLAB_CI') === 'true'\n    || getEnv('TRAVIS') === 'true'\n    || getEnv('CIRCLECI') === 'true'\n}\n\n/**\n * Development utilities\n */\nexport const DevUtils = {\n  /**\n   * Load .env file in development (Node.js only)\n   */\n  loadDotEnv: async () => {\n    if (!isDev() || typeof process === 'undefined')\n      return\n\n    try {\n      // Use eval to avoid TypeScript checking for optional dependency\n      // eslint-disable-next-line no-eval\n      const dotenv = await (0, eval)('import(\"dotenv\")')\n      dotenv.config()\n    }\n    catch {\n      // dotenv not available, continue silently\n    }\n  },\n\n  /**\n   * Print environment info for debugging\n   */\n  printEnvInfo: () => {\n    if (!isDev())\n      return\n\n    console.log('🌍 Environment Info:')\n    console.log(`  NODE_ENV: ${getEnv('NODE_ENV')}`)\n    console.log(`  Platform: ${typeof process !== 'undefined' ? 'Node.js' : 'Edge'}`)\n    console.log(`  Port: ${getEnv('PORT') || 'Not set'}`)\n  },\n}\n","/**\n * HTTP Status Codes and Phrases\n *\n * Provides commonly used HTTP status codes and their corresponding phrases.\n * This module is tree-shakeable - only imported values will be included in your bundle.\n *\n * @example\n * ```typescript\n * import { OK, NOT_FOUND, HTTP_STATUS_PHRASES } from '@go-corp/utils/http-status';\n *\n * // Use status codes\n * response.status(OK);\n *\n * // Use phrases\n * console.log(HTTP_STATUS_PHRASES.NOT_FOUND); // \"Not Found\"\n * ```\n */\n\n// HTTP Status Codes\nexport const HTTP_STATUS_CODES = {\n  // 2xx Success\n  OK: 200,\n  CREATED: 201,\n  NO_CONTENT: 204,\n\n  // 4xx Client Error\n  BAD_REQUEST: 400,\n  UNAUTHORIZED: 401,\n  FORBIDDEN: 403,\n  NOT_FOUND: 404,\n  CONFLICT: 409,\n  UNPROCESSABLE_ENTITY: 422,\n  TOO_MANY_REQUESTS: 429,\n\n  // 5xx Server Error\n  INTERNAL_SERVER_ERROR: 500,\n} as const\n\n// HTTP Status Phrases\nexport const HTTP_STATUS_PHRASES = {\n  // 2xx Success\n  OK: 'OK',\n  CREATED: 'Created',\n  NO_CONTENT: 'No Content',\n\n  // 4xx Client Error\n  BAD_REQUEST: 'Bad Request',\n  UNAUTHORIZED: 'Unauthorized',\n  FORBIDDEN: 'Forbidden',\n  NOT_FOUND: 'Not Found',\n  CONFLICT: 'Conflict',\n  UNPROCESSABLE_ENTITY: 'Unprocessable Entity',\n  TOO_MANY_REQUESTS: 'Too Many Requests',\n\n  // 5xx Server Error\n  INTERNAL_SERVER_ERROR: 'Internal Server Error',\n} as const\n\n// Individual exports for tree-shaking\nexport const {\n  OK,\n  CREATED,\n  NO_CONTENT,\n  BAD_REQUEST,\n  UNAUTHORIZED,\n  FORBIDDEN,\n  NOT_FOUND,\n  CONFLICT,\n  UNPROCESSABLE_ENTITY,\n  TOO_MANY_REQUESTS,\n  INTERNAL_SERVER_ERROR,\n} = HTTP_STATUS_CODES\n\n// Type definitions for better TypeScript support\nexport type HttpStatusCode = typeof HTTP_STATUS_CODES[keyof typeof HTTP_STATUS_CODES]\nexport type HttpStatusPhrase = typeof HTTP_STATUS_PHRASES[keyof typeof HTTP_STATUS_PHRASES]\n\n/**\n * Check if a status code indicates success (2xx)\n */\nexport function isSuccess(statusCode: number): boolean {\n  return statusCode >= 200 && statusCode < 300\n}\n\n/**\n * Check if a status code indicates client error (4xx)\n */\nexport function isClientError(statusCode: number): boolean {\n  return statusCode >= 400 && statusCode < 500\n}\n\n/**\n * Check if a status code indicates server error (5xx)\n */\nexport function isServerError(statusCode: number): boolean {\n  return statusCode >= 500 && statusCode < 600\n}\n\n/**\n * Get the phrase for a given status code\n */\nexport function getStatusPhrase(statusCode: HttpStatusCode): HttpStatusPhrase | undefined {\n  const key = Object.keys(HTTP_STATUS_CODES).find(\n    k => HTTP_STATUS_CODES[k as keyof typeof HTTP_STATUS_CODES] === statusCode,\n  ) as keyof typeof HTTP_STATUS_PHRASES | undefined\n\n  return key ? HTTP_STATUS_PHRASES[key] : undefined\n}\n","/**\n * Clamps a number between min and max values\n */\nexport function clamp(value: number, min: number, max: number): number {\n  return Math.min(Math.max(value, min), max)\n}\n\n/**\n * Generates a random number between min and max (inclusive)\n */\nexport function randomBetween(min: number, max: number): number {\n  return Math.floor(Math.random() * (max - min + 1)) + min\n}\n\n/**\n * Rounds a number to specified decimal places\n */\nexport function roundTo(value: number, decimals: number): number {\n  const factor = 10 ** decimals\n  return Math.round(value * factor) / factor\n}\n\n/**\n * Calculates percentage of a value\n */\nexport function percentage(value: number, total: number): number {\n  return (value / total) * 100\n}\n\n/**\n * Converts degrees to radians\n */\nexport function degToRad(degrees: number): number {\n  return degrees * (Math.PI / 180)\n}\n\n/**\n * Converts radians to degrees\n */\nexport function radToDeg(radians: number): number {\n  return radians * (180 / Math.PI)\n}\n","/**\n * Deep clones an object with support for Date, RegExp, and other types\n * More type-safe and performant implementation\n */\nexport function deepClone<T>(obj: T): T {\n  // Handle primitive types and null\n  if (obj === null || typeof obj !== 'object')\n    return obj\n\n  // Handle Date objects\n  if (obj instanceof Date)\n    return new Date(obj.getTime()) as T\n\n  // Handle RegExp objects\n  if (obj instanceof RegExp)\n    return new RegExp(obj.source, obj.flags) as T\n\n  // Handle Arrays\n  if (Array.isArray(obj))\n    return obj.map(deepClone) as T\n\n  // Handle plain objects\n  const cloned = {} as T\n  for (const key in obj) {\n    if (Object.hasOwnProperty.call(obj, key)) {\n      cloned[key] = deepClone(obj[key])\n    }\n  }\n  return cloned\n}\n\n/**\n * Omits specified keys from an object\n */\nexport function omit<T extends Record<string, any>, K extends keyof T>(\n  obj: T,\n  keys: K[],\n): Omit<T, K> {\n  const result = { ...obj }\n  keys.forEach(key => delete result[key])\n  return result\n}\n\n/**\n * Picks specified keys from an object\n */\nexport function pick<T extends Record<string, any>, K extends keyof T>(\n  obj: T,\n  keys: K[],\n): Pick<T, K> {\n  const result = {} as Pick<T, K>\n  keys.forEach((key) => {\n    if (key in obj) {\n      result[key] = obj[key]\n    }\n  })\n  return result\n}\n\n/**\n * Checks if an object is empty\n */\nexport function isEmpty(obj: any): boolean {\n  if (obj == null)\n    return true\n  if (Array.isArray(obj) || typeof obj === 'string')\n    return obj.length === 0\n  if (obj instanceof Date)\n    return false\n  return Object.keys(obj).length === 0\n}\n","/**\n * Converts a string to camelCase by removing hyphens, underscores, and spaces,\n * then capitalizing the first letter of each word except the first.\n *\n * @param str - The input string to convert\n * @returns The camelCase version of the input string\n *\n * @example\n * ```typescript\n * toCamelCase('hello world') // 'helloWorld'\n * toCamelCase('my-awesome-function') // 'myAwesomeFunction'\n * toCamelCase('user_name') // 'userName'\n * ```\n */\nexport function toCamelCase(str: string): string {\n  return str\n    .toLowerCase()\n    .replace(/[-_\\s]+(.)?/g, (_, char) => char ? char.toUpperCase() : '')\n}\n\n// Shared regex pattern for word boundary detection\nconst WORD_BOUNDARY_REGEX = /[A-Z]{2,}(?=[A-Z][a-z]+\\d|\\b)|[A-Z]?[a-z]+\\d*|[A-Z]|\\d+/g\n\n/**\n * Converts a string to kebab-case by splitting on word boundaries and joining with hyphens.\n * Handles camelCase, PascalCase, snake_case, and regular words.\n *\n * @param str - The input string to convert\n * @returns The kebab-case version of the input string\n *\n * @example\n * ```typescript\n * toKebabCase('helloWorld') // 'hello-world'\n * toKebabCase('MyAwesomeFunction') // 'my-awesome-function'\n * toKebabCase('user_name') // 'user-name'\n * ```\n */\nexport function toKebabCase(str: string): string {\n  return str\n    .match(WORD_BOUNDARY_REGEX)\n    ?.map(x => x.toLowerCase())\n    .join('-') || ''\n}\n\n/**\n * Converts a string to snake_case\n */\nexport function toSnakeCase(str: string): string {\n  return str\n    .match(WORD_BOUNDARY_REGEX)\n    ?.map(x => x.toLowerCase())\n    .join('_') || ''\n}\n\n/**\n * Converts a string to PascalCase\n */\nexport function toPascalCase(str: string): string {\n  return str\n    .replace(/[-_\\s]+(.)?/g, (_, char) => char ? char.toUpperCase() : '')\n    .replace(/^[a-z]/, char => char.toUpperCase())\n}\n\n/**\n * Truncates a string to a specified length, adding a suffix if truncated.\n *\n * @param str - The input string to truncate\n * @param length - The maximum length of the result (including suffix)\n * @param suffix - The suffix to append when truncating (defaults to '...')\n * @returns The truncated string with suffix, or original string if within length\n *\n * @example\n * ```typescript\n * truncate('Hello, world!', 10) // 'Hello, w...'\n * truncate('Short', 10) // 'Short'\n * truncate('Long text here', 15, '…') // 'Long text her…'\n * ```\n */\nexport function truncate(str: string, length: number, suffix: string = '...'): string {\n  if (str.length <= length)\n    return str\n  return str.slice(0, length - suffix.length) + suffix\n}\n\n/**\n * Capitalizes the first letter of a string\n */\nexport function capitalize(str: string): string {\n  if (!str)\n    return str\n  return str.charAt(0).toUpperCase() + str.slice(1)\n}\n\n/**\n * Generates a random string of specified length using nanoid for better performance\n * Falls back to custom charset generation if custom charset is provided\n */\nexport async function generateRandomString(length: number, charset?: string): Promise<string> {\n  // Use nanoid for default case (better performance and security)\n  if (!charset) {\n    const { nanoid } = await import('nanoid')\n    return nanoid(length)\n  }\n\n  // Fallback for custom charset\n  let result = ''\n  for (let i = 0; i < length; i++) {\n    result += charset.charAt(Math.floor(Math.random() * charset.length))\n  }\n  return result\n}\n\n/**\n * Removes all whitespace from a string\n */\nexport function removeWhitespace(str: string): string {\n  return str.replace(/\\s/g, '')\n}\n\n/**\n * Slugifies a string for URL-friendly format\n */\nexport function slugify(str: string): string {\n  return str\n    .toLowerCase()\n    .trim()\n    .replace(/[^\\w\\s-]/g, ' ')\n    .replace(/[\\s_-]+/g, '-')\n    .replace(/^-+|-+$/g, '')\n}\n","/**\n * Type guard to check if value is not null or undefined\n */\nexport function isNotNull<T>(value: T | null | undefined): value is T {\n  return value !== null && value !== undefined\n}\n\n/**\n * Type guard to check if value is a string\n */\nexport function isString(value: unknown): value is string {\n  return typeof value === 'string'\n}\n\n/**\n * Type guard to check if value is a number\n */\nexport function isNumber(value: unknown): value is number {\n  return typeof value === 'number' && !Number.isNaN(value)\n}\n\n/**\n * Type guard to check if value is a boolean\n */\nexport function isBoolean(value: unknown): value is boolean {\n  return typeof value === 'boolean'\n}\n\n/**\n * Type guard to check if value is an array\n */\nexport function isArray<T>(value: unknown): value is T[] {\n  return Array.isArray(value)\n}\n\n/**\n * Type guard to check if value is a plain object\n */\nexport function isObject(value: unknown): value is Record<string, unknown> {\n  return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\n/**\n * Type guard to check if value is a function\n */\nexport function isFunction(value: unknown): value is (...args: any[]) => any {\n  return typeof value === 'function'\n}\n\n/**\n * Utility type that makes all properties of T optional recursively\n */\nexport type DeepPartial<T> = {\n  [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P]\n}\n\n/**\n * Utility type that makes all properties of T readonly recursively\n */\nexport type DeepReadonly<T> = {\n  readonly [P in keyof T]: T[P] extends object ? DeepReadonly<T[P]> : T[P]\n}\n\n/**\n * Utility type for arrays that must have at least one element\n */\nexport type NonEmptyArray<T> = [T, ...T[]]\n\n/**\n * Utility type that flattens intersection types for better readability\n */\nexport type Prettify<T> = {\n  [K in keyof T]: T[K]\n} & Record<string, never>\n\n/**\n * Utility type that extracts required keys from a type\n */\nexport type RequiredKeys<T> = {\n  [K in keyof T]-?: Record<string, never> extends Pick<T, K> ? never : K\n}[keyof T]\n\n/**\n * Utility type that converts a union type to an intersection type\n */\nexport type UnionToIntersection<U> = (\n  U extends any ? (k: U) => void : never\n) extends (k: infer I) => void\n  ? I\n  : never\n","/**\n * Core validation utilities - universal validation functions\n * Compatible with all JavaScript environments\n */\n\n/**\n * Validates an email address using a robust regex pattern\n * @param email - The email address to validate\n * @returns true if email is valid, false otherwise\n */\nexport function isValidEmail(email: string): boolean {\n  const emailRegex = /^[^\\s@]+@[^\\s@][^\\s.@]*\\.[^\\s@]+$/\n  return emailRegex.test(email)\n}\n\n/**\n * Validates a phone number (supports international and US formats)\n * @param phone - The phone number to validate\n * @returns true if phone number is valid, false otherwise\n */\nexport function isValidPhone(phone: string): boolean {\n  // Clean the phone number but preserve essential format\n  const cleanPhone = phone.replace(/\\s+/g, '')\n\n  // US/Canada phone number patterns (10-11 digits)\n  const patterns = [\n    /^\\+?1?[-.\\s]?\\(?\\d{3}\\)?[-.\\s]?\\d{3}[-.\\s]?\\d{4}$/, // +1-123-456-7890, 1-123-456-7890, etc.\n    /^\\(?\\d{3}\\)?[-.\\s]?\\d{3}[-.\\s]?\\d{4}$/, // (123) 456-7890, 123-456-7890, etc.\n    /^\\d{10}$/, // 1234567890\n  ]\n\n  return patterns.some(pattern => pattern.test(cleanPhone))\n}\n\n/**\n * Validates a UUID (versions 1-5)\n * @param uuid - The UUID string to validate\n * @returns true if UUID is valid, false otherwise\n */\nexport function isValidUUID(uuid: string): boolean {\n  const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i\n  return uuidRegex.test(uuid)\n}\n\n/**\n * Validates a hexadecimal color code\n * @param color - The color code to validate (with or without #)\n * @returns true if valid hex color, false otherwise\n */\nexport function isValidHexColor(color: string): boolean {\n  const hexRegex = /^#?(?:[0-9A-F]{3}|[0-9A-F]{6})$/i\n  return hexRegex.test(color)\n}\n\n/**\n * Validates an IP address (IPv4 and IPv6)\n * @param ip - The IP address to validate\n * @returns true if valid IP address, false otherwise\n */\nexport function isValidIP(ip: string): boolean {\n  // IPv4 pattern\n  const ipv4Regex = /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d{1,2})\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d{1,2})$/\n\n  // IPv6 pattern (simplified)\n  const ipv6Regex = /^(?:[0-9a-f]{1,4}:){7}[0-9a-f]{1,4}$|^::1$|^::$/i\n\n  return ipv4Regex.test(ip) || ipv6Regex.test(ip)\n}\n\n/**\n * Validates a credit card number using Luhn algorithm\n * @param cardNumber - The credit card number to validate\n * @returns true if valid credit card number, false otherwise\n */\nexport function isValidCreditCard(cardNumber: string): boolean {\n  // Remove spaces and non-digits\n  const cleanNumber = cardNumber.replace(/\\D/g, '')\n\n  if (cleanNumber.length < 13 || cleanNumber.length > 19) {\n    return false\n  }\n\n  // Luhn algorithm\n  let sum = 0\n  let isEven = false\n\n  for (let i = cleanNumber.length - 1; i >= 0; i--) {\n    let digit = Number.parseInt(cleanNumber.charAt(i), 10)\n\n    if (isEven) {\n      digit *= 2\n      if (digit > 9) {\n        digit -= 9\n      }\n    }\n\n    sum += digit\n    isEven = !isEven\n  }\n\n  return sum % 10 === 0\n}\n","/**\n * Validates an email address\n */\nexport function isValidEmail(email: string): boolean {\n  const emailRegex = /^[^\\s@]+@[^\\s@][^\\s.@]*\\.[^\\s@]+$/\n  return emailRegex.test(email)\n}\n\n/**\n * Validates a URL\n */\nexport function isValidUrl(url: string): boolean {\n  try {\n    // Using new URL() for validation only\n    void new URL(url)\n    return true\n  }\n  catch {\n    return false\n  }\n}\n\n/**\n * Validates a phone number (basic US format)\n */\nexport function isValidPhone(phone: string): boolean {\n  const phoneRegex = /^\\+?1?[-.\\s]?\\(?\\d{3}\\)?[-.\\s]?\\d{3}[-.\\s]?\\d{4}$/\n  return phoneRegex.test(phone)\n}\n\n/**\n * Validates a UUID\n */\nexport function isValidUUID(uuid: string): boolean {\n  const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i\n  return uuidRegex.test(uuid)\n}\n","/**\n * Enhanced validation utilities for web applications\n *\n * Provides common validation patterns for web APIs, forms, and data processing.\n */\n\nimport { isValidEmail as baseEmailValidator } from './index.js'\n\n/**\n * Validate required fields in an object\n */\nexport function validateRequired<T extends Record<string, unknown>>(\n  data: T,\n  requiredFields: (keyof T)[],\n): { isValid: boolean, missingFields: string[] } {\n  const missing = requiredFields.filter(field =>\n    data[field] === undefined || data[field] === null || data[field] === '',\n  )\n\n  return {\n    isValid: missing.length === 0,\n    missingFields: missing.map(String),\n  }\n}\n\n/**\n * Validate and normalize email address\n */\nexport function validateAndNormalizeEmail(email: string): {\n  isValid: boolean\n  normalizedEmail: string\n  error?: string\n} {\n  if (!email || typeof email !== 'string') {\n    return { isValid: false, normalizedEmail: '', error: 'Email is required' }\n  }\n\n  const normalizedEmail = email.trim().toLowerCase()\n\n  if (!baseEmailValidator(normalizedEmail)) {\n    return { isValid: false, normalizedEmail, error: 'Invalid email format' }\n  }\n\n  return { isValid: true, normalizedEmail }\n}\n\n/**\n * Normalize email address (lowercase, trim)\n */\nexport function normalizeEmail(email: string): string {\n  return email.trim().toLowerCase()\n}\n\n/**\n * Validate pagination parameters\n */\nexport function validatePagination(\n  page: number | string,\n  limit: number | string,\n  maxLimit: number = 100,\n): { page: number, limit: number } {\n  const validatedPage = Math.max(1, Math.floor(Number(page) || 1))\n  const validatedLimit = Math.min(Math.max(1, Math.floor(Number(limit) || 20)), maxLimit)\n\n  return { page: validatedPage, limit: validatedLimit }\n}\n\n/**\n * Validate string length\n */\nexport function validateLength(\n  value: string,\n  minLength: number = 0,\n  maxLength: number = Infinity,\n): { isValid: boolean, error?: string } {\n  if (typeof value !== 'string') {\n    return { isValid: false, error: 'Value must be a string' }\n  }\n\n  if (value.length < minLength) {\n    return { isValid: false, error: `Must be at least ${minLength} characters` }\n  }\n\n  if (value.length > maxLength) {\n    return { isValid: false, error: `Must be no more than ${maxLength} characters` }\n  }\n\n  return { isValid: true }\n}\n\n/**\n * Validate number range\n */\nexport function validateRange(\n  value: number,\n  min: number = -Infinity,\n  max: number = Infinity,\n): { isValid: boolean, error?: string } {\n  if (typeof value !== 'number' || Number.isNaN(value)) {\n    return { isValid: false, error: 'Value must be a number' }\n  }\n\n  if (value < min) {\n    return { isValid: false, error: `Must be at least ${min}` }\n  }\n\n  if (value > max) {\n    return { isValid: false, error: `Must be no more than ${max}` }\n  }\n\n  return { isValid: true }\n}\n\n/**\n * Validate that a value is one of the allowed options\n */\nexport function validateEnum<T extends string>(\n  value: string,\n  allowedValues: T[],\n): { isValid: boolean, error?: string } {\n  if (!allowedValues.includes(value as T)) {\n    return {\n      isValid: false,\n      error: `Value must be one of: ${allowedValues.join(', ')}`,\n    }\n  }\n\n  return { isValid: true }\n}\n\n/**\n * Comprehensive data validation result\n */\nexport interface ValidationResult {\n  isValid: boolean\n  errors: Record<string, string>\n}\n\n/**\n * Validate multiple fields at once\n */\nexport function validateFields(validations: Record<string, () => { isValid: boolean, error?: string }>): ValidationResult {\n  const errors: Record<string, string> = {}\n\n  for (const [field, validate] of Object.entries(validations)) {\n    const result = validate()\n    if (!result.isValid && result.error) {\n      errors[field] = result.error\n    }\n  }\n\n  return {\n    isValid: Object.keys(errors).length === 0,\n    errors,\n  }\n}\n\n/**\n * Create a validation function for common patterns\n */\nexport function createValidator<T>(\n  validators: Array<(value: T) => { isValid: boolean, error?: string }>,\n) {\n  return (value: T): { isValid: boolean, errors: string[] } => {\n    const errors: string[] = []\n\n    for (const validator of validators) {\n      const result = validator(value)\n      if (!result.isValid && result.error) {\n        errors.push(result.error)\n      }\n    }\n\n    return {\n      isValid: errors.length === 0,\n      errors,\n    }\n  }\n}\n","/**\n * Web-specific validation utilities\n * These utilities use browser/Node.js APIs and may not work in all environments\n */\n\n/**\n * Validates a URL using the URL constructor\n * @param url - The URL string to validate\n * @returns true if URL is valid, false otherwise\n */\nexport function isValidUrl(url: string): boolean {\n  try {\n    // Using new URL() for validation only\n    void new URL(url)\n    return true\n  }\n  catch {\n    return false\n  }\n}\n\n/**\n * Validates a domain name\n * @param domain - The domain name to validate\n * @returns true if domain is valid, false otherwise\n */\nexport function isValidDomain(domain: string): boolean {\n  const domainRegex = /^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z]{2,}$/i\n  return domainRegex.test(domain)\n}\n\n/**\n * Validates a slug (URL-friendly string)\n * @param slug - The slug to validate\n * @returns true if slug is valid, false otherwise\n */\nexport function isValidSlug(slug: string): boolean {\n  const slugRegex = /^[a-z0-9]+(?:-[a-z0-9]+)*$/\n  return slugRegex.test(slug)\n}\n\n/**\n * Validates a JSON string\n * @param jsonString - The JSON string to validate\n * @returns true if valid JSON, false otherwise\n */\nexport function isValidJSON(jsonString: string): boolean {\n  try {\n    JSON.parse(jsonString)\n    return true\n  }\n  catch {\n    return false\n  }\n}\n\n/**\n * Validates a base64 encoded string\n * @param base64String - The base64 string to validate\n * @returns true if valid base64, false otherwise\n */\nexport function isValidBase64(base64String: string): boolean {\n  const base64Regex = /^[A-Z0-9+/]*={0,2}$/i\n  return base64Regex.test(base64String)\n}\n\n/**\n * Validates a semantic version string (semver)\n * @param version - The version string to validate\n * @returns true if valid semver, false otherwise\n */\nexport function isValidSemver(version: string): boolean {\n  const semverRegex = /^(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(?:-[0-9a-z-]+(?:\\.[0-9a-z-]+)*)?(?:\\+[0-9a-z-]+(?:\\.[0-9a-z-]+)*)?$/i\n  return semverRegex.test(version)\n}\n","/**\n * Structured error classes for Cloudflare Workers applications\n *\n * These classes provide consistent error handling with structured data,\n * JSON serialization, and proper HTTP status codes.\n */\n\nimport {\n  BAD_REQUEST,\n  CONFLICT,\n  FORBIDDEN,\n  INTERNAL_SERVER_ERROR,\n  NOT_FOUND,\n  UNAUTHORIZED,\n} from '../http/index.js'\n\n/**\n * HTTP Status Code type (compatible with various frameworks)\n */\nexport type StatusCode = number\n\n/**\n * Base application error class with structured error handling\n */\nexport class AppError extends Error {\n  public readonly isOperational: boolean = true\n  public readonly timestamp: string = new Date().toISOString()\n\n  constructor(\n    message: string,\n    public readonly code: string,\n    public readonly statusCode: StatusCode,\n    public readonly details?: unknown,\n    isOperational: boolean = true,\n  ) {\n    super(message)\n    this.name = this.constructor.name\n    this.isOperational = isOperational\n\n    // Maintains proper stack trace for where our error was thrown (only available on V8)\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, AppError)\n    }\n  }\n\n  /**\n   * Convert to JSON-serializable format for API responses\n   */\n  toJSON() {\n    return {\n      error: {\n        code: this.code,\n        message: this.message,\n        details: this.details,\n        timestamp: this.timestamp,\n      },\n    }\n  }\n}\n\n/**\n * Validation error for request validation failures\n */\nexport class ValidationError extends AppError {\n  constructor(message: string, details?: unknown) {\n    super(message, 'VALIDATION_ERROR', BAD_REQUEST, details)\n  }\n}\n\n/**\n * Database-related errors\n */\nexport class DatabaseError extends AppError {\n  constructor(message: string, originalError?: Error, details?: Record<string, unknown>) {\n    super(\n      message,\n      'DATABASE_ERROR',\n      INTERNAL_SERVER_ERROR,\n      {\n        originalError: originalError?.message,\n        ...(details || {}),\n      },\n    )\n  }\n}\n\n/**\n * Resource not found error\n */\nexport class NotFoundError extends AppError {\n  constructor(resource: string, identifier?: string) {\n    const message = identifier\n      ? `${resource} with identifier '${identifier}' not found`\n      : `${resource} not found`\n\n    super(message, 'NOT_FOUND', NOT_FOUND, { resource, identifier })\n  }\n}\n\n/**\n * Resource conflict error (e.g., duplicate entries)\n */\nexport class ConflictError extends AppError {\n  constructor(message: string, details?: unknown) {\n    super(message, 'CONFLICT', CONFLICT, details)\n  }\n}\n\n/**\n * Authentication error\n */\nexport class AuthenticationError extends AppError {\n  constructor(message: string = 'Authentication required') {\n    super(message, 'AUTHENTICATION_ERROR', UNAUTHORIZED)\n  }\n}\n\n/**\n * Authorization error\n */\nexport class AuthorizationError extends AppError {\n  constructor(message: string = 'Insufficient permissions') {\n    super(message, 'AUTHORIZATION_ERROR', FORBIDDEN)\n  }\n}\n\n/**\n * Rate limiting error\n */\nexport class RateLimitError extends AppError {\n  constructor(message: string = 'Too many requests') {\n    super(message, 'RATE_LIMIT_EXCEEDED', 429 as StatusCode)\n  }\n}\n\n/**\n * External service error\n */\nexport class ExternalServiceError extends AppError {\n  constructor(service: string, message: string, details?: Record<string, unknown>) {\n    super(\n      `External service error from ${service}: ${message}`,\n      'EXTERNAL_SERVICE_ERROR',\n      INTERNAL_SERVER_ERROR,\n      { service, ...(details || {}) },\n    )\n  }\n}\n\n/**\n * Type guard to check if error is an operational error\n */\nexport function isOperationalError(error: Error): error is AppError {\n  return error instanceof AppError && error.isOperational\n}\n\n/**\n * Utility to safely extract error message from unknown error\n */\nexport function getErrorMessage(error: unknown): string {\n  if (error instanceof Error) {\n    return error.message\n  }\n  if (typeof error === 'string') {\n    return error\n  }\n  return 'Unknown error occurred'\n}\n\n/**\n * Utility to safely extract error code from unknown error\n */\nexport function getErrorCode(error: unknown): string {\n  if (error instanceof AppError) {\n    return error.code\n  }\n  return 'UNKNOWN_ERROR'\n}\n\n/**\n * Utility to get appropriate HTTP status code from error\n */\nexport function getErrorStatusCode(error: unknown): StatusCode {\n  if (error instanceof AppError) {\n    return error.statusCode\n  }\n  return INTERNAL_SERVER_ERROR\n}\n","/**\n * HTTP Exception factory functions for Cloudflare Workers\n *\n * These functions create HTTP exceptions with standard status codes and messages.\n * Compatible with Hono's HTTPException class and other web frameworks.\n */\n\n// Note: We avoid importing HTTPException directly to keep this framework-agnostic\n// Users can create their own HTTPException or use these with any framework\n\nimport {\n  BAD_REQUEST,\n  CONFLICT,\n  FORBIDDEN,\n  INTERNAL_SERVER_ERROR,\n  NOT_FOUND,\n  TOO_MANY_REQUESTS,\n  UNAUTHORIZED,\n} from '../http/index.js'\n\n/**\n * Generic HTTP error creator\n */\nexport function createHttpError(\n  statusCode: number,\n  message: string,\n  details?: unknown,\n): { statusCode: number, message: string, details?: unknown } {\n  return { statusCode, message, details }\n}\n\n/**\n * Bad Request (400) error\n */\nexport function createBadRequest(message: string = 'Bad Request', details?: unknown) {\n  return createHttpError(BAD_REQUEST, message, details)\n}\n\n/**\n * Unauthorized (401) error\n */\nexport function createUnauthorized(message: string = 'Unauthorized', details?: unknown) {\n  return createHttpError(UNAUTHORIZED, message, details)\n}\n\n/**\n * Forbidden (403) error\n */\nexport function createForbidden(message: string = 'Forbidden', details?: unknown) {\n  return createHttpError(FORBIDDEN, message, details)\n}\n\n/**\n * Not Found (404) error\n */\nexport function createNotFound(message: string = 'Not Found', details?: unknown) {\n  return createHttpError(NOT_FOUND, message, details)\n}\n\n/**\n * Conflict (409) error\n */\nexport function createConflict(message: string = 'Already exists', details?: unknown) {\n  return createHttpError(CONFLICT, message, details)\n}\n\n/**\n * Too Many Requests (429) error\n */\nexport function createTooManyRequests(message: string = 'Too many requests', details?: unknown) {\n  return createHttpError(TOO_MANY_REQUESTS, message, details)\n}\n\n/**\n * Internal Server Error (500) error\n */\nexport function createInternalError(message: string = 'Internal Error', details?: unknown) {\n  return createHttpError(INTERNAL_SERVER_ERROR, message, details)\n}\n\n/**\n * Factory function to create HTTP error from status code\n */\nexport function createErrorFromStatus(\n  statusCode: number,\n  message?: string,\n  details?: unknown,\n) {\n  const defaultMessages: Record<number, string> = {\n    [BAD_REQUEST]: 'Bad Request',\n    [UNAUTHORIZED]: 'Unauthorized',\n    [FORBIDDEN]: 'Forbidden',\n    [NOT_FOUND]: 'Not Found',\n    [CONFLICT]: 'Conflict',\n    [TOO_MANY_REQUESTS]: 'Too Many Requests',\n    [INTERNAL_SERVER_ERROR]: 'Internal Server Error',\n  }\n\n  const defaultMessage = defaultMessages[statusCode] || 'Unknown Error'\n  return createHttpError(statusCode, message || defaultMessage, details)\n}\n","/**\n * Gets query parameters from URL\n */\nexport function getQueryParams(url: string): Record<string, string> {\n  const params: Record<string, string> = {}\n  const searchParams = new URL(url).searchParams\n\n  for (const [key, value] of searchParams) {\n    params[key] = value\n  }\n\n  return params\n}\n\n/**\n * Formats bytes to human readable format\n */\nexport function formatBytes(bytes: number, decimals: number = 2): string {\n  if (bytes === 0)\n    return '0 Bytes'\n\n  const k = 1024\n  const dm = decimals < 0 ? 0 : decimals\n  const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n\n  const i = Math.floor(Math.log(bytes) / Math.log(k))\n\n  return `${Number.parseFloat((bytes / k ** i).toFixed(dm))} ${sizes[i]}`\n}\n\n/**\n * Copies text to clipboard\n */\nexport async function copyToClipboard(text: string): Promise<boolean> {\n  try {\n    if (navigator.clipboard && window.isSecureContext) {\n      await navigator.clipboard.writeText(text)\n      return true\n    }\n\n    // Fallback for older browsers\n    const textArea = document.createElement('textarea')\n    textArea.value = text\n    textArea.style.position = 'absolute'\n    textArea.style.left = '-999999px'\n\n    document.body.prepend(textArea)\n    textArea.select()\n\n    try {\n      document.execCommand('copy')\n      return true\n    }\n    finally {\n      textArea.remove()\n    }\n  }\n  catch (error) {\n    console.warn('Copy to clipboard failed', error)\n    return false\n  }\n}\n"]}