{"version":3,"file":"qrcodegen.mjs","sources":["../../../../../../packages/components/qrcode/src/qrcodegen.tsx"],"sourcesContent":["/* eslint-disable ts/class-literal-property-style */\n/* eslint-disable ts/no-namespace */\n/**\n * @license QR Code generator library (TypeScript)\n * Copyright (c) Project Nayuki.\n * SPDX-License-Identifier: MIT\n */\n\n'use strict';\n\nnamespace qrcodegen {\n  type bit = number;\n  type byte = number;\n  type int = number;\n\n  /* ---- QR Code symbol class ---- */\n\n  /*\n   * A QR Code symbol, which is a type of two-dimension barcode.\n   * Invented by Denso Wave and described in the ISO/IEC 18004 standard.\n   * Instances of this class represent an immutable square grid of dark and light cells.\n   * The class provides static factory functions to create a QR Code from text or binary data.\n   * The class covers the QR Code Model 2 specification, supporting all versions (sizes)\n   * from 1 to 40, all 4 error correction levels, and 4 character encoding modes.\n   *\n   * Ways to create a QR Code object:\n   * - High level: Take the payload data and call QrCode.encodeText() or QrCode.encodeBinary().\n   * - Mid level: Custom-make the list of segments and call QrCode.encodeSegments().\n   * - Low level: Custom-make the array of data codeword bytes (including\n   *   segment headers and final padding, excluding error correction codewords),\n   *   supply the appropriate version number, and call the QrCode() constructor.\n   * (Note that all ways require supplying the desired error correction level.)\n   */\n  export class QrCode {\n    /* -- Static factory functions (high level) -- */\n\n    // Returns a QR Code representing the given Unicode text string at the given error correction level.\n    // As a conservative upper bound, this function is guaranteed to succeed for strings that have 738 or fewer\n    // Unicode code points (not UTF-16 code units) if the low error correction level is used. The smallest possible\n    // QR Code version is automatically chosen for the output. The ECC level of the result may be higher than the\n    // ecl argument if it can be done without increasing the version.\n    public static encodeText(text: string, ecl: QrCode.Ecc): QrCode {\n      const segs: QrSegment[] = qrcodegen.QrSegment.makeSegments(text);\n      return QrCode.encodeSegments(segs, ecl);\n    }\n\n    // Returns a QR Code representing the given binary data at the given error correction level.\n    // This function always encodes using the binary segment mode, not any text mode. The maximum number of\n    // bytes allowed is 2953. The smallest possible QR Code version is automatically chosen for the output.\n    // The ECC level of the result may be higher than the ecl argument if it can be done without increasing the version.\n    public static encodeBinary(data: readonly byte[], ecl: QrCode.Ecc): QrCode {\n      const seg: QrSegment = qrcodegen.QrSegment.makeBytes(data);\n      return QrCode.encodeSegments([seg], ecl);\n    }\n\n    /* -- Static factory functions (mid level) -- */\n\n    // Returns a QR Code representing the given segments with the given encoding parameters.\n    // The smallest possible QR Code version within the given range is automatically\n    // chosen for the output. Iff boostEcl is true, then the ECC level of the result\n    // may be higher than the ecl argument if it can be done without increasing the\n    // version. The mask number is either between 0 to 7 (inclusive) to force that\n    // mask, or -1 to automatically choose an appropriate mask (which may be slow).\n    // This function allows the user to create a custom sequence of segments that switches\n    // between modes (such as alphanumeric and byte) to encode text in less space.\n    // This is a mid-level API; the high-level API is encodeText() and encodeBinary().\n    public static encodeSegments(\n      segs: readonly QrSegment[],\n      ecl: QrCode.Ecc,\n      minVersion: int = 1,\n      maxVersion: int = 40,\n      mask: int = -1,\n      boostEcl = true,\n    ): QrCode {\n      if (\n        !(\n          QrCode.MIN_VERSION <= minVersion\n          && minVersion <= maxVersion\n          && maxVersion <= QrCode.MAX_VERSION\n        )\n        || mask < -1\n        || mask > 7\n      ) {\n        throw new RangeError('Invalid value');\n      }\n\n      // Find the minimal version number to use\n      let version: int;\n      let dataUsedBits: int;\n      for (version = minVersion; ; version++) {\n        const dataCapacityBits: int = QrCode.getNumDataCodewords(version, ecl) * 8; // Number of data bits available\n        const usedBits: number = QrSegment.getTotalBits(segs, version);\n        if (usedBits <= dataCapacityBits) {\n          dataUsedBits = usedBits;\n          break; // This version number is found to be suitable\n        }\n        if (version >= maxVersion)\n          // All versions in the range could not fit the given data\n          throw new RangeError('Data too long');\n      }\n\n      // Increase the error correction level while the data still fits in the current version number\n      for (const newEcl of [QrCode.Ecc.MEDIUM, QrCode.Ecc.QUARTILE, QrCode.Ecc.HIGH]) {\n        // From low to high\n        if (boostEcl && dataUsedBits <= QrCode.getNumDataCodewords(version, newEcl) * 8)\n          ecl = newEcl;\n      }\n\n      // Concatenate all segments to create the data bit string\n      const bb: bit[] = [];\n      for (const seg of segs) {\n        appendBits(seg.mode.modeBits, 4, bb);\n        appendBits(seg.numChars, seg.mode.numCharCountBits(version), bb);\n        for (const b of seg.getData()) bb.push(b);\n      }\n      assert(bb.length === dataUsedBits);\n\n      // Add terminator and pad up to a byte if applicable\n      const dataCapacityBits: int = QrCode.getNumDataCodewords(version, ecl) * 8;\n      assert(bb.length <= dataCapacityBits);\n      appendBits(0, Math.min(4, dataCapacityBits - bb.length), bb);\n      appendBits(0, (8 - (bb.length % 8)) % 8, bb);\n      assert(bb.length % 8 === 0);\n\n      // Pad with alternating bytes until data capacity is reached\n      for (let padByte = 0xEC; bb.length < dataCapacityBits; padByte ^= 0xEC ^ 0x11)\n        appendBits(padByte, 8, bb);\n\n      // Pack bits into bytes in big endian\n      const dataCodewords: byte[] = [];\n      while (dataCodewords.length * 8 < bb.length) dataCodewords.push(0);\n      bb.forEach((b: bit, i: int) => (dataCodewords[i >>> 3] |= b << (7 - (i & 7))));\n\n      // Create the QR Code object\n      return new QrCode(version, ecl, dataCodewords, mask);\n    }\n\n    /* -- Fields -- */\n\n    // The width and height of this QR Code, measured in modules, between\n    // 21 and 177 (inclusive). This is equal to version * 4 + 17.\n    public readonly size: int;\n\n    // The index of the mask pattern used in this QR Code, which is between 0 and 7 (inclusive).\n    // Even if a QR Code is created with automatic masking requested (mask = -1),\n    // the resulting object still has a mask value between 0 and 7.\n    public readonly mask: int;\n\n    // The modules of this QR Code (false = light, true = dark).\n    // Immutable after constructor finishes. Accessed through getModule().\n    private readonly modules: boolean[][] = [];\n\n    // Indicates function modules that are not subjected to masking. Discarded when constructor finishes.\n    private readonly isFunction: boolean[][] = [];\n\n    /* -- Constructor (low level) and fields -- */\n\n    // Creates a new QR Code with the given version number,\n    // error correction level, data codeword bytes, and mask number.\n    // This is a low-level API that most users should not use directly.\n    // A mid-level API is the encodeSegments() function.\n    public constructor(\n      // The version number of this QR Code, which is between 1 and 40 (inclusive).\n      // This determines the size of this barcode.\n      public readonly version: int,\n\n      // The error correction level used in this QR Code.\n      public readonly errorCorrectionLevel: QrCode.Ecc,\n\n      dataCodewords: readonly byte[],\n\n      msk: int,\n    ) {\n      // Check scalar arguments\n      if (version < QrCode.MIN_VERSION || version > QrCode.MAX_VERSION)\n        throw new RangeError('Version value out of range');\n      if (msk < -1 || msk > 7) throw new RangeError('Mask value out of range');\n      this.size = version * 4 + 17;\n\n      // Initialize both grids to be size*size arrays of Boolean false\n      const row: boolean[] = [];\n      for (let i = 0; i < this.size; i++) row.push(false);\n      for (let i = 0; i < this.size; i++) {\n        this.modules.push(row.slice()); // Initially all light\n        this.isFunction.push(row.slice());\n      }\n\n      // Compute ECC, draw modules\n      this.drawFunctionPatterns();\n      const allCodewords: byte[] = this.addEccAndInterleave(dataCodewords);\n      this.drawCodewords(allCodewords);\n\n      // Do masking\n      if (msk === -1) {\n        // Automatically choose best mask\n        let minPenalty: int = 1000000000;\n        for (let i = 0; i < 8; i++) {\n          this.applyMask(i);\n          this.drawFormatBits(i);\n          const penalty: int = this.getPenaltyScore();\n          if (penalty < minPenalty) {\n            msk = i;\n            minPenalty = penalty;\n          }\n          this.applyMask(i); // Undoes the mask due to XOR\n        }\n      }\n      assert(msk >= 0 && msk <= 7);\n      this.mask = msk;\n      this.applyMask(msk); // Apply the final choice of mask\n      this.drawFormatBits(msk); // Overwrite old format bits\n\n      this.isFunction = [];\n    }\n\n    /* -- Accessor methods -- */\n\n    // Returns the color of the module (pixel) at the given coordinates, which is false\n    // for light or true for dark. The top left corner has the coordinates (x=0, y=0).\n    // If the given coordinates are out of bounds, then false (light) is returned.\n    public getModule(x: int, y: int): boolean {\n      return x >= 0 && x < this.size && y >= 0 && y < this.size && this.modules[y][x];\n    }\n\n    // Modified to expose modules for easy access\n    public getModules() {\n      return this.modules;\n    }\n\n    /* -- Private helper methods for constructor: Drawing function modules -- */\n\n    // Reads this object's version field, and draws and marks all function modules.\n    private drawFunctionPatterns(): void {\n      // Draw horizontal and vertical timing patterns\n      for (let i = 0; i < this.size; i++) {\n        this.setFunctionModule(6, i, i % 2 === 0);\n        this.setFunctionModule(i, 6, i % 2 === 0);\n      }\n\n      // Draw 3 finder patterns (all corners except bottom right; overwrites some timing modules)\n      this.drawFinderPattern(3, 3);\n      this.drawFinderPattern(this.size - 4, 3);\n      this.drawFinderPattern(3, this.size - 4);\n\n      // Draw numerous alignment patterns\n      const alignPatPos: int[] = this.getAlignmentPatternPositions();\n      const numAlign: int = alignPatPos.length;\n      for (let i = 0; i < numAlign; i++) {\n        for (let j = 0; j < numAlign; j++) {\n          // Don't draw on the three finder corners\n          if (\n            !((i === 0 && j === 0) || (i === 0 && j === numAlign - 1) || (i === numAlign - 1 && j === 0))\n          )\n            this.drawAlignmentPattern(alignPatPos[i], alignPatPos[j]);\n        }\n      }\n\n      // Draw configuration data\n      this.drawFormatBits(0); // Dummy mask value; overwritten later in the constructor\n      this.drawVersion();\n    }\n\n    // Draws two copies of the format bits (with its own error correction code)\n    // based on the given mask and this object's error correction level field.\n    private drawFormatBits(mask: int): void {\n      // Calculate error correction code and pack bits\n      const data: int = (this.errorCorrectionLevel.formatBits << 3) | mask; // errCorrLvl is uint2, mask is uint3\n      let rem: int = data;\n      for (let i = 0; i < 10; i++) rem = (rem << 1) ^ ((rem >>> 9) * 0x537);\n      const bits = ((data << 10) | rem) ^ 0x5412; // uint15\n      assert(bits >>> 15 === 0);\n\n      // Draw first copy\n      for (let i = 0; i <= 5; i++) this.setFunctionModule(8, i, getBit(bits, i));\n      this.setFunctionModule(8, 7, getBit(bits, 6));\n      this.setFunctionModule(8, 8, getBit(bits, 7));\n      this.setFunctionModule(7, 8, getBit(bits, 8));\n      for (let i = 9; i < 15; i++) this.setFunctionModule(14 - i, 8, getBit(bits, i));\n\n      // Draw second copy\n      for (let i = 0; i < 8; i++) this.setFunctionModule(this.size - 1 - i, 8, getBit(bits, i));\n      for (let i = 8; i < 15; i++) this.setFunctionModule(8, this.size - 15 + i, getBit(bits, i));\n      this.setFunctionModule(8, this.size - 8, true); // Always dark\n    }\n\n    // Draws two copies of the version bits (with its own error correction code),\n    // based on this object's version field, iff 7 <= version <= 40.\n    private drawVersion(): void {\n      if (this.version < 7) return;\n\n      // Calculate error correction code and pack bits\n      let rem: int = this.version; // version is uint6, in the range [7, 40]\n      for (let i = 0; i < 12; i++) rem = (rem << 1) ^ ((rem >>> 11) * 0x1F25);\n      const bits: int = (this.version << 12) | rem; // uint18\n      assert(bits >>> 18 === 0);\n\n      // Draw two copies\n      for (let i = 0; i < 18; i++) {\n        const color: boolean = getBit(bits, i);\n        const a: int = this.size - 11 + (i % 3);\n        const b: int = Math.floor(i / 3);\n        this.setFunctionModule(a, b, color);\n        this.setFunctionModule(b, a, color);\n      }\n    }\n\n    // Draws a 9*9 finder pattern including the border separator,\n    // with the center module at (x, y). Modules can be out of bounds.\n    private drawFinderPattern(x: int, y: int): void {\n      for (let dy = -4; dy <= 4; dy++) {\n        for (let dx = -4; dx <= 4; dx++) {\n          const dist: int = Math.max(Math.abs(dx), Math.abs(dy)); // Chebyshev/infinity norm\n          const xx: int = x + dx;\n          const yy: int = y + dy;\n          if (xx >= 0 && xx < this.size && yy >= 0 && yy < this.size)\n            this.setFunctionModule(xx, yy, dist !== 2 && dist !== 4);\n        }\n      }\n    }\n\n    // Draws a 5*5 alignment pattern, with the center module\n    // at (x, y). All modules must be in bounds.\n    private drawAlignmentPattern(x: int, y: int): void {\n      for (let dy = -2; dy <= 2; dy++) {\n        for (let dx = -2; dx <= 2; dx++)\n          this.setFunctionModule(x + dx, y + dy, Math.max(Math.abs(dx), Math.abs(dy)) !== 1);\n      }\n    }\n\n    // Sets the color of a module and marks it as a function module.\n    // Only used by the constructor. Coordinates must be in bounds.\n    private setFunctionModule(x: int, y: int, isDark: boolean): void {\n      this.modules[y][x] = isDark;\n      this.isFunction[y][x] = true;\n    }\n\n    /* -- Private helper methods for constructor: Codewords and masking -- */\n\n    // Returns a new byte string representing the given data with the appropriate error correction\n    // codewords appended to it, based on this object's version and error correction level.\n    private addEccAndInterleave(data: readonly byte[]): byte[] {\n      const ver: int = this.version;\n      const ecl: QrCode.Ecc = this.errorCorrectionLevel;\n      if (data.length !== QrCode.getNumDataCodewords(ver, ecl))\n        throw new RangeError('Invalid argument');\n\n      // Calculate parameter numbers\n      const numBlocks: int = QrCode.NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver];\n      const blockEccLen: int = QrCode.ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver];\n      const rawCodewords: int = Math.floor(QrCode.getNumRawDataModules(ver) / 8);\n      const numShortBlocks: int = numBlocks - (rawCodewords % numBlocks);\n      const shortBlockLen: int = Math.floor(rawCodewords / numBlocks);\n\n      // Split data into blocks and append ECC to each block\n      const blocks: byte[][] = [];\n      const rsDiv: byte[] = QrCode.reedSolomonComputeDivisor(blockEccLen);\n      for (let i = 0, k = 0; i < numBlocks; i++) {\n        const dat: byte[] = data.slice(\n          k,\n          k + shortBlockLen - blockEccLen + (i < numShortBlocks ? 0 : 1),\n        );\n        k += dat.length;\n        const ecc: byte[] = QrCode.reedSolomonComputeRemainder(dat, rsDiv);\n        if (i < numShortBlocks) dat.push(0);\n        blocks.push(dat.concat(ecc));\n      }\n\n      // Interleave (not concatenate) the bytes from every block into a single sequence\n      const result: byte[] = [];\n      for (let i = 0; i < blocks[0].length; i++) {\n        blocks.forEach((block, j) => {\n          // Skip the padding byte in short blocks\n          if (i !== shortBlockLen - blockEccLen || j >= numShortBlocks) result.push(block[i]);\n        });\n      }\n      assert(result.length === rawCodewords);\n      return result;\n    }\n\n    // Draws the given sequence of 8-bit codewords (data and error correction) onto the entire\n    // data area of this QR Code. Function modules need to be marked off before this is called.\n    private drawCodewords(data: readonly byte[]): void {\n      if (data.length !== Math.floor(QrCode.getNumRawDataModules(this.version) / 8))\n        throw new RangeError('Invalid argument');\n      let i: int = 0; // Bit index into the data\n      // Do the funny zigzag scan\n      for (let right = this.size - 1; right >= 1; right -= 2) {\n        // Index of right column in each column pair\n        if (right === 6) right = 5;\n        for (let vert = 0; vert < this.size; vert++) {\n          // Vertical counter\n          for (let j = 0; j < 2; j++) {\n            const x: int = right - j; // Actual x coordinate\n            const upward: boolean = ((right + 1) & 2) === 0;\n            const y: int = upward ? this.size - 1 - vert : vert; // Actual y coordinate\n            if (!this.isFunction[y][x] && i < data.length * 8) {\n              this.modules[y][x] = getBit(data[i >>> 3], 7 - (i & 7));\n              i++;\n            }\n            // If this QR Code has any remainder bits (0 to 7), they were assigned as\n            // 0/false/light by the constructor and are left unchanged by this method\n          }\n        }\n      }\n      assert(i === data.length * 8);\n    }\n\n    // XORs the codeword modules in this QR Code with the given mask pattern.\n    // The function modules must be marked and the codeword bits must be drawn\n    // before masking. Due to the arithmetic of XOR, calling applyMask() with\n    // the same mask value a second time will undo the mask. A final well-formed\n    // QR Code needs exactly one (not zero, two, etc.) mask applied.\n    private applyMask(mask: int): void {\n      if (mask < 0 || mask > 7) throw new RangeError('Mask value out of range');\n      for (let y = 0; y < this.size; y++) {\n        for (let x = 0; x < this.size; x++) {\n          let invert: boolean;\n          switch (mask) {\n            case 0:\n              invert = (x + y) % 2 === 0;\n              break;\n            case 1:\n              invert = y % 2 === 0;\n              break;\n            case 2:\n              invert = x % 3 === 0;\n              break;\n            case 3:\n              invert = (x + y) % 3 === 0;\n              break;\n            case 4:\n              invert = (Math.floor(x / 3) + Math.floor(y / 2)) % 2 === 0;\n              break;\n            case 5:\n              invert = ((x * y) % 2) + ((x * y) % 3) === 0;\n              break;\n            case 6:\n              invert = (((x * y) % 2) + ((x * y) % 3)) % 2 === 0;\n              break;\n            case 7:\n              invert = (((x + y) % 2) + ((x * y) % 3)) % 2 === 0;\n              break;\n            default:\n              throw new Error('Unreachable');\n          }\n          if (!this.isFunction[y][x] && invert) this.modules[y][x] = !this.modules[y][x];\n        }\n      }\n    }\n\n    // Calculates and returns the penalty score based on state of this QR Code's current modules.\n    // This is used by the automatic mask choice algorithm to find the mask pattern that yields the lowest score.\n    private getPenaltyScore(): int {\n      let result: int = 0;\n\n      // Adjacent modules in row having same color, and finder-like patterns\n      for (let y = 0; y < this.size; y++) {\n        let runColor = false;\n        let runX = 0;\n        const runHistory = [0, 0, 0, 0, 0, 0, 0];\n        for (let x = 0; x < this.size; x++) {\n          if (this.modules[y][x] === runColor) {\n            runX++;\n            if (runX === 5) result += QrCode.PENALTY_N1;\n            else if (runX > 5) result++;\n          } else {\n            this.finderPenaltyAddHistory(runX, runHistory);\n            if (!runColor)\n              result += this.finderPenaltyCountPatterns(runHistory) * QrCode.PENALTY_N3;\n            runColor = this.modules[y][x];\n            runX = 1;\n          }\n        }\n        result\n          += this.finderPenaltyTerminateAndCount(runColor, runX, runHistory) * QrCode.PENALTY_N3;\n      }\n      // Adjacent modules in column having same color, and finder-like patterns\n      for (let x = 0; x < this.size; x++) {\n        let runColor = false;\n        let runY = 0;\n        const runHistory = [0, 0, 0, 0, 0, 0, 0];\n        for (let y = 0; y < this.size; y++) {\n          if (this.modules[y][x] === runColor) {\n            runY++;\n            if (runY === 5) result += QrCode.PENALTY_N1;\n            else if (runY > 5) result++;\n          } else {\n            this.finderPenaltyAddHistory(runY, runHistory);\n            if (!runColor)\n              result += this.finderPenaltyCountPatterns(runHistory) * QrCode.PENALTY_N3;\n            runColor = this.modules[y][x];\n            runY = 1;\n          }\n        }\n        result\n          += this.finderPenaltyTerminateAndCount(runColor, runY, runHistory) * QrCode.PENALTY_N3;\n      }\n\n      // 2*2 blocks of modules having same color\n      for (let y = 0; y < this.size - 1; y++) {\n        for (let x = 0; x < this.size - 1; x++) {\n          const color: boolean = this.modules[y][x];\n          if (\n            color === this.modules[y][x + 1]\n            && color === this.modules[y + 1][x]\n            && color === this.modules[y + 1][x + 1]\n          ) {\n            result += QrCode.PENALTY_N2;\n          }\n        }\n      }\n\n      // Balance of dark and light modules\n      let dark: int = 0;\n      for (const row of this.modules)\n        dark = row.reduce((sum, color) => sum + (color ? 1 : 0), dark);\n      const total: int = this.size * this.size; // Note that size is odd, so dark/total !== 1/2\n      // Compute the smallest integer k >= 0 such that (45-5k)% <= dark/total <= (55+5k)%\n      const k: int = Math.ceil(Math.abs(dark * 20 - total * 10) / total) - 1;\n      assert(k >= 0 && k <= 9);\n      result += k * QrCode.PENALTY_N4;\n      assert(result >= 0 && result <= 2568888); // Non-tight upper bound based on default values of PENALTY_N1, ..., N4\n      return result;\n    }\n\n    /* -- Private helper functions -- */\n\n    // Returns an ascending list of positions of alignment patterns for this version number.\n    // Each position is in the range [0,177), and are used on both the x and y axes.\n    // This could be implemented as lookup table of 40 variable-length lists of integers.\n    private getAlignmentPatternPositions(): int[] {\n      if (this.version === 1) {\n        return [];\n      } else {\n        const numAlign: int = Math.floor(this.version / 7) + 2;\n        const step: int\n          = this.version === 32 ? 26 : Math.ceil((this.version * 4 + 4) / (numAlign * 2 - 2)) * 2;\n        const result: int[] = [6];\n        for (let pos = this.size - 7; result.length < numAlign; pos -= step)\n          result.splice(1, 0, pos);\n        return result;\n      }\n    }\n\n    // Returns the number of data bits that can be stored in a QR Code of the given version number, after\n    // all function modules are excluded. This includes remainder bits, so it might not be a multiple of 8.\n    // The result is in the range [208, 29648]. This could be implemented as a 40-entry lookup table.\n    private static getNumRawDataModules(ver: int): int {\n      if (ver < QrCode.MIN_VERSION || ver > QrCode.MAX_VERSION)\n        throw new RangeError('Version number out of range');\n      let result: int = (16 * ver + 128) * ver + 64;\n      if (ver >= 2) {\n        const numAlign: int = Math.floor(ver / 7) + 2;\n        result -= (25 * numAlign - 10) * numAlign - 55;\n        if (ver >= 7) result -= 36;\n      }\n      assert(result >= 208 && result <= 29648);\n      return result;\n    }\n\n    // Returns the number of 8-bit data (i.e. not error correction) codewords contained in any\n    // QR Code of the given version number and error correction level, with remainder bits discarded.\n    // This stateless pure function could be implemented as a (40*4)-cell lookup table.\n    private static getNumDataCodewords(ver: int, ecl: QrCode.Ecc): int {\n      return (\n        Math.floor(QrCode.getNumRawDataModules(ver) / 8)\n        - QrCode.ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver]\n          * QrCode.NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver]\n      );\n    }\n\n    // Returns a Reed-Solomon ECC generator polynomial for the given degree. This could be\n    // implemented as a lookup table over all possible parameter values, instead of as an algorithm.\n    private static reedSolomonComputeDivisor(degree: int): byte[] {\n      if (degree < 1 || degree > 255) throw new RangeError('Degree out of range');\n      // Polynomial coefficients are stored from highest to lowest power, excluding the leading term which is always 1.\n      // For example the polynomial x^3 + 255x^2 + 8x + 93 is stored as the uint8 array [255, 8, 93].\n      const result: byte[] = [];\n      for (let i = 0; i < degree - 1; i++) result.push(0);\n      result.push(1); // Start off with the monomial x^0\n\n      // Compute the product polynomial (x - r^0) * (x - r^1) * (x - r^2) * ... * (x - r^{degree-1}),\n      // and drop the highest monomial term which is always 1x^degree.\n      // Note that r = 0x02, which is a generator element of this field GF(2^8/0x11D).\n      let root = 1;\n      for (let i = 0; i < degree; i++) {\n        // Multiply the current product by (x - r^i)\n        for (let j = 0; j < result.length; j++) {\n          result[j] = QrCode.reedSolomonMultiply(result[j], root);\n          if (j + 1 < result.length) result[j] ^= result[j + 1];\n        }\n        root = QrCode.reedSolomonMultiply(root, 0x02);\n      }\n      return result;\n    }\n\n    // Returns the Reed-Solomon error correction codeword for the given data and divisor polynomials.\n    private static reedSolomonComputeRemainder(\n      data: readonly byte[],\n      divisor: readonly byte[],\n    ): byte[] {\n      const result: byte[] = divisor.map(_ => 0);\n      for (const b of data) {\n        // Polynomial division\n        const factor: byte = b ^ (result.shift() as byte);\n        result.push(0);\n        divisor.forEach((coef, i) => (result[i] ^= QrCode.reedSolomonMultiply(coef, factor)));\n      }\n      return result;\n    }\n\n    // Returns the product of the two given field elements modulo GF(2^8/0x11D). The arguments and result\n    // are unsigned 8-bit integers. This could be implemented as a lookup table of 256*256 entries of uint8.\n    private static reedSolomonMultiply(x: byte, y: byte): byte {\n      if (x >>> 8 !== 0 || y >>> 8 !== 0) throw new RangeError('Byte out of range');\n      // Russian peasant multiplication\n      let z: int = 0;\n      for (let i = 7; i >= 0; i--) {\n        z = (z << 1) ^ ((z >>> 7) * 0x11D);\n        z ^= ((y >>> i) & 1) * x;\n      }\n      assert(z >>> 8 === 0);\n      return z as byte;\n    }\n\n    // Can only be called immediately after a light run is added, and\n    // returns either 0, 1, or 2. A helper function for getPenaltyScore().\n    private finderPenaltyCountPatterns(runHistory: readonly int[]): int {\n      const n: int = runHistory[1];\n      assert(n <= this.size * 3);\n      const core: boolean\n        = n > 0\n        && runHistory[2] === n\n        && runHistory[3] === n * 3\n        && runHistory[4] === n\n        && runHistory[5] === n;\n      return (\n        ((core && runHistory[0] >= n * 4 && runHistory[6] >= n) ? 1 : 0)\n        + ((core && runHistory[6] >= n * 4 && runHistory[0] >= n) ? 1 : 0)\n      );\n    }\n\n    // Must be called at the end of a line (row or column) of modules. A helper function for getPenaltyScore().\n    private finderPenaltyTerminateAndCount(\n      currentRunColor: boolean,\n      currentRunLength: int,\n      runHistory: int[],\n    ): int {\n      if (currentRunColor) {\n        // Terminate dark run\n        this.finderPenaltyAddHistory(currentRunLength, runHistory);\n        currentRunLength = 0;\n      }\n      currentRunLength += this.size; // Add light border to final run\n      this.finderPenaltyAddHistory(currentRunLength, runHistory);\n      return this.finderPenaltyCountPatterns(runHistory);\n    }\n\n    // Pushes the given value to the front and drops the last value. A helper function for getPenaltyScore().\n    private finderPenaltyAddHistory(currentRunLength: int, runHistory: int[]): void {\n      if (runHistory[0] === 0) currentRunLength += this.size; // Add light border to initial run\n      runHistory.pop();\n      runHistory.unshift(currentRunLength);\n    }\n\n    /* -- Constants and tables -- */\n\n    // The minimum version number supported in the QR Code Model 2 standard.\n    public static readonly MIN_VERSION: int = 1;\n    // The maximum version number supported in the QR Code Model 2 standard.\n    public static readonly MAX_VERSION: int = 40;\n\n    // For use in getPenaltyScore(), when evaluating which mask is best.\n    private static readonly PENALTY_N1: int = 3;\n    private static readonly PENALTY_N2: int = 3;\n    private static readonly PENALTY_N3: int = 40;\n    private static readonly PENALTY_N4: int = 10;\n\n    private static readonly ECC_CODEWORDS_PER_BLOCK: int[][] = [\n      // Version: (note that index 0 is for padding, and is set to an illegal value)\n      // 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40    Error correction level\n      [\n        -1,\n        7,\n        10,\n        15,\n        20,\n        26,\n        18,\n        20,\n        24,\n        30,\n        18,\n        20,\n        24,\n        26,\n        30,\n        22,\n        24,\n        28,\n        30,\n        28,\n        28,\n        28,\n        28,\n        30,\n        30,\n        26,\n        28,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n      ], // Low\n      [\n        -1,\n        10,\n        16,\n        26,\n        18,\n        24,\n        16,\n        18,\n        22,\n        22,\n        26,\n        30,\n        22,\n        22,\n        24,\n        24,\n        28,\n        28,\n        26,\n        26,\n        26,\n        26,\n        28,\n        28,\n        28,\n        28,\n        28,\n        28,\n        28,\n        28,\n        28,\n        28,\n        28,\n        28,\n        28,\n        28,\n        28,\n        28,\n        28,\n        28,\n        28,\n      ], // Medium\n      [\n        -1,\n        13,\n        22,\n        18,\n        26,\n        18,\n        24,\n        18,\n        22,\n        20,\n        24,\n        28,\n        26,\n        24,\n        20,\n        30,\n        24,\n        28,\n        28,\n        26,\n        30,\n        28,\n        30,\n        30,\n        30,\n        30,\n        28,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n      ], // Quartile\n      [\n        -1,\n        17,\n        28,\n        22,\n        16,\n        22,\n        28,\n        26,\n        26,\n        24,\n        28,\n        24,\n        28,\n        22,\n        24,\n        24,\n        30,\n        28,\n        28,\n        26,\n        28,\n        30,\n        24,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n        30,\n      ], // High\n    ];\n\n    private static readonly NUM_ERROR_CORRECTION_BLOCKS: int[][] = [\n      // Version: (note that index 0 is for padding, and is set to an illegal value)\n      // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40    Error correction level\n      [\n        -1,\n        1,\n        1,\n        1,\n        1,\n        1,\n        2,\n        2,\n        2,\n        2,\n        4,\n        4,\n        4,\n        4,\n        4,\n        6,\n        6,\n        6,\n        6,\n        7,\n        8,\n        8,\n        9,\n        9,\n        10,\n        12,\n        12,\n        12,\n        13,\n        14,\n        15,\n        16,\n        17,\n        18,\n        19,\n        19,\n        20,\n        21,\n        22,\n        24,\n        25,\n      ], // Low\n      [\n        -1,\n        1,\n        1,\n        1,\n        2,\n        2,\n        4,\n        4,\n        4,\n        5,\n        5,\n        5,\n        8,\n        9,\n        9,\n        10,\n        10,\n        11,\n        13,\n        14,\n        16,\n        17,\n        17,\n        18,\n        20,\n        21,\n        23,\n        25,\n        26,\n        28,\n        29,\n        31,\n        33,\n        35,\n        37,\n        38,\n        40,\n        43,\n        45,\n        47,\n        49,\n      ], // Medium\n      [\n        -1,\n        1,\n        1,\n        2,\n        2,\n        4,\n        4,\n        6,\n        6,\n        8,\n        8,\n        8,\n        10,\n        12,\n        16,\n        12,\n        17,\n        16,\n        18,\n        21,\n        20,\n        23,\n        23,\n        25,\n        27,\n        29,\n        34,\n        34,\n        35,\n        38,\n        40,\n        43,\n        45,\n        48,\n        51,\n        53,\n        56,\n        59,\n        62,\n        65,\n        68,\n      ], // Quartile\n      [\n        -1,\n        1,\n        1,\n        2,\n        4,\n        4,\n        4,\n        5,\n        6,\n        8,\n        8,\n        11,\n        11,\n        16,\n        16,\n        18,\n        16,\n        19,\n        21,\n        25,\n        25,\n        25,\n        34,\n        30,\n        32,\n        35,\n        37,\n        40,\n        42,\n        45,\n        48,\n        51,\n        54,\n        57,\n        60,\n        63,\n        66,\n        70,\n        74,\n        77,\n        81,\n      ], // High\n    ];\n  }\n\n  // Appends the given number of low-order bits of the given value\n  // to the given buffer. Requires 0 <= len <= 31 and 0 <= val < 2^len.\n  function appendBits(val: int, len: int, bb: bit[]): void {\n    if (len < 0 || len > 31 || val >>> len !== 0) throw new RangeError('Value out of range');\n    for (\n      let i = len - 1;\n      i >= 0;\n      i-- // Append bit by bit\n    )\n      bb.push((val >>> i) & 1);\n  }\n\n  // Returns true iff the i'th bit of x is set to 1.\n  function getBit(x: int, i: int): boolean {\n    return ((x >>> i) & 1) !== 0;\n  }\n\n  // Throws an exception if the given condition is false.\n  function assert(cond: boolean): void {\n    if (!cond) throw new Error('Assertion error');\n  }\n\n  /* ---- Data segment class ---- */\n\n  /*\n   * A segment of character/binary/control data in a QR Code symbol.\n   * Instances of this class are immutable.\n   * The mid-level way to create a segment is to take the payload data\n   * and call a static factory function such as QrSegment.makeNumeric().\n   * The low-level way to create a segment is to custom-make the bit buffer\n   * and call the QrSegment() constructor with appropriate values.\n   * This segment class imposes no length restrictions, but QR Codes have restrictions.\n   * Even in the most favorable conditions, a QR Code can only hold 7089 characters of data.\n   * Any segment longer than this is meaningless for the purpose of generating QR Codes.\n   */\n  export class QrSegment {\n    /* -- Static factory functions (mid level) -- */\n\n    // Returns a segment representing the given binary data encoded in\n    // byte mode. All input byte arrays are acceptable. Any text string\n    // can be converted to UTF-8 bytes and encoded as a byte mode segment.\n    public static makeBytes(data: readonly byte[]): QrSegment {\n      const bb: bit[] = [];\n      for (const b of data) appendBits(b, 8, bb);\n      return new QrSegment(QrSegment.Mode.BYTE, data.length, bb);\n    }\n\n    // Returns a segment representing the given string of decimal digits encoded in numeric mode.\n    public static makeNumeric(digits: string): QrSegment {\n      if (!QrSegment.isNumeric(digits))\n        throw new RangeError('String contains non-numeric characters');\n      const bb: bit[] = [];\n      for (let i = 0; i < digits.length;) {\n        // Consume up to 3 digits per iteration\n        const n: int = Math.min(digits.length - i, 3);\n        appendBits(Number.parseInt(digits.substring(i, i + n), 10), n * 3 + 1, bb);\n        i += n;\n      }\n      return new QrSegment(QrSegment.Mode.NUMERIC, digits.length, bb);\n    }\n\n    // Returns a segment representing the given text string encoded in alphanumeric mode.\n    // The characters allowed are: 0 to 9, A to Z (uppercase only), space,\n    // dollar, percent, asterisk, plus, hyphen, period, slash, colon.\n    public static makeAlphanumeric(text: string): QrSegment {\n      if (!QrSegment.isAlphanumeric(text))\n        throw new RangeError('String contains unencodable characters in alphanumeric mode');\n      const bb: bit[] = [];\n      let i: int;\n      for (i = 0; i + 2 <= text.length; i += 2) {\n        // Process groups of 2\n        let temp: int = QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)) * 45;\n        temp += QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i + 1));\n        appendBits(temp, 11, bb);\n      }\n      if (i < text.length)\n        // 1 character remaining\n        appendBits(QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)), 6, bb);\n      return new QrSegment(QrSegment.Mode.ALPHANUMERIC, text.length, bb);\n    }\n\n    // Returns a new mutable list of zero or more segments to represent the given Unicode text string.\n    // The result may use various segment modes and switch modes to optimize the length of the bit stream.\n    public static makeSegments(text: string): QrSegment[] {\n      // Select the most efficient segment encoding automatically\n      if (text === '') return [];\n      else if (QrSegment.isNumeric(text)) return [QrSegment.makeNumeric(text)];\n      else if (QrSegment.isAlphanumeric(text)) return [QrSegment.makeAlphanumeric(text)];\n      else return [QrSegment.makeBytes(QrSegment.toUtf8ByteArray(text))];\n    }\n\n    // Returns a segment representing an Extended Channel Interpretation\n    // (ECI) designator with the given assignment value.\n    public static makeEci(assignVal: int): QrSegment {\n      const bb: bit[] = [];\n      if (assignVal < 0) {\n        throw new RangeError('ECI assignment value out of range');\n      } else if (assignVal < 1 << 7) {\n        appendBits(assignVal, 8, bb);\n      } else if (assignVal < 1 << 14) {\n        appendBits(0b10, 2, bb);\n        appendBits(assignVal, 14, bb);\n      } else if (assignVal < 1000000) {\n        appendBits(0b110, 3, bb);\n        appendBits(assignVal, 21, bb);\n      } else {\n        throw new RangeError('ECI assignment value out of range');\n      }\n      return new QrSegment(QrSegment.Mode.ECI, 0, bb);\n    }\n\n    // Tests whether the given string can be encoded as a segment in numeric mode.\n    // A string is encodable iff each character is in the range 0 to 9.\n    public static isNumeric(text: string): boolean {\n      return QrSegment.NUMERIC_REGEX.test(text);\n    }\n\n    // Tests whether the given string can be encoded as a segment in alphanumeric mode.\n    // A string is encodable iff each character is in the following set: 0 to 9, A to Z\n    // (uppercase only), space, dollar, percent, asterisk, plus, hyphen, period, slash, colon.\n    public static isAlphanumeric(text: string): boolean {\n      return QrSegment.ALPHANUMERIC_REGEX.test(text);\n    }\n\n    /* -- Constructor (low level) and fields -- */\n\n    // Creates a new QR Code segment with the given attributes and data.\n    // The character count (numChars) must agree with the mode and the bit buffer length,\n    // but the constraint isn't checked. The given bit buffer is cloned and stored.\n    public constructor(\n      // The mode indicator of this segment.\n      public readonly mode: QrSegment.Mode,\n\n      // The length of this segment's unencoded data. Measured in characters for\n      // numeric/alphanumeric/kanji mode, bytes for byte mode, and 0 for ECI mode.\n      // Always zero or positive. Not the same as the data's bit length.\n      public readonly numChars: int,\n\n      // The data bits of this segment. Accessed through getData().\n      private readonly bitData: bit[],\n    ) {\n      if (numChars < 0) throw new RangeError('Invalid argument');\n      this.bitData = bitData.slice(); // Make defensive copy\n    }\n\n    /* -- Methods -- */\n\n    // Returns a new copy of the data bits of this segment.\n    public getData(): bit[] {\n      return this.bitData.slice(); // Make defensive copy\n    }\n\n    // (Package-private) Calculates and returns the number of bits needed to encode the given segments at\n    // the given version. The result is infinity if a segment has too many characters to fit its length field.\n    public static getTotalBits(segs: readonly QrSegment[], version: int): number {\n      let result = 0;\n      for (const seg of segs) {\n        const ccbits: int = seg.mode.numCharCountBits(version);\n        if (seg.numChars >= 1 << ccbits) return Number.POSITIVE_INFINITY; // The segment's length doesn't fit the field's bit width\n        result += 4 + ccbits + seg.bitData.length;\n      }\n      return result;\n    }\n\n    // Returns a new array of bytes representing the given string encoded in UTF-8.\n    private static toUtf8ByteArray(str: string): byte[] {\n      str = encodeURI(str);\n      const result: byte[] = [];\n      for (let i = 0; i < str.length; i++) {\n        if (str.charAt(i) !== '%') {\n          result.push(str.charCodeAt(i));\n        } else {\n          result.push(Number.parseInt(str.substring(i + 1, i + 3), 16));\n          i += 2;\n        }\n      }\n      return result;\n    }\n\n    /* -- Constants -- */\n\n    // Describes precisely all strings that are encodable in numeric mode.\n    private static readonly NUMERIC_REGEX: RegExp = /^[0-9]*$/;\n\n    // Describes precisely all strings that are encodable in alphanumeric mode.\n    private static readonly ALPHANUMERIC_REGEX: RegExp = /^[A-Z0-9 $%*+.\\/:-]*$/;\n\n    // The set of all legal characters in alphanumeric mode,\n    // where each character value maps to the index in the string.\n    private static readonly ALPHANUMERIC_CHARSET: string\n      = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:';\n  }\n}\n\n/* ---- Public helper enumeration ---- */\n\nnamespace qrcodegen.QrCode {\n  type int = number;\n\n  /*\n   * The error correction level in a QR Code symbol. Immutable.\n   */\n  export class Ecc {\n    /* -- Constants -- */\n\n    public static readonly LOW = new Ecc(0, 1); // The QR Code can tolerate about  7% erroneous codewords\n    public static readonly MEDIUM = new Ecc(1, 0); // The QR Code can tolerate about 15% erroneous codewords\n    public static readonly QUARTILE = new Ecc(2, 3); // The QR Code can tolerate about 25% erroneous codewords\n    public static readonly HIGH = new Ecc(3, 2); // The QR Code can tolerate about 30% erroneous codewords\n\n    /* -- Constructor and fields -- */\n\n    private constructor(\n      // In the range 0 to 3 (unsigned 2-bit integer).\n      public readonly ordinal: int,\n      // (Package-private) In the range 0 to 3 (unsigned 2-bit integer).\n      public readonly formatBits: int,\n    ) {}\n  }\n}\n\n/* ---- Public helper enumeration ---- */\n\nnamespace qrcodegen.QrSegment {\n  type int = number;\n\n  /*\n   * Describes how a segment's data bits are interpreted. Immutable.\n   */\n  export class Mode {\n    /* -- Constants -- */\n\n    public static readonly NUMERIC = new Mode(0x1, [10, 12, 14]);\n    public static readonly ALPHANUMERIC = new Mode(0x2, [9, 11, 13]);\n    public static readonly BYTE = new Mode(0x4, [8, 16, 16]);\n    public static readonly KANJI = new Mode(0x8, [8, 10, 12]);\n    public static readonly ECI = new Mode(0x7, [0, 0, 0]);\n\n    /* -- Constructor and fields -- */\n\n    private constructor(\n      // The mode indicator bits, which is a uint4 value (range 0 to 15).\n      public readonly modeBits: int,\n      // Number of character count bits for three different version ranges.\n      private readonly numBitsCharCount: [int, int, int],\n    ) {}\n\n    /* -- Method -- */\n\n    // (Package-private) Returns the bit width of the character count field for a segment in\n    // this mode in a QR Code at the given version number. The result is in the range [0, 16].\n    public numCharCountBits(ver: int): int {\n      return this.numBitsCharCount[Math.floor((ver + 7) / 17)];\n    }\n  }\n}\n\n// Modification to export for actual use\nexport default qrcodegen;\n"],"names":["qrcodegen","_qrcodegen","QrCode","constructor","version","errorCorrectionLevel","dataCodewords","msk","modules","isFunction","MIN_VERSION","MAX_VERSION","RangeError","size","row","i","push","slice","drawFunctionPatterns","allCodewords","addEccAndInterleave","drawCodewords","minPenalty","applyMask","drawFormatBits","penalty","getPenaltyScore","assert","mask","encodeText","text","ecl","segs","QrSegment","makeSegments","encodeSegments","encodeBinary","data","seg","makeBytes","minVersion","maxVersion","boostEcl","dataUsedBits","dataCapacityBits","getNumDataCodewords","usedBits","getTotalBits","newEcl","Ecc","MEDIUM","QUARTILE","HIGH","bb","appendBits","mode","modeBits","numChars","numCharCountBits","b","getData","length","Math","min","padByte","forEach","getModule","x","y","getModules","setFunctionModule","drawFinderPattern","alignPatPos","getAlignmentPatternPositions","numAlign","j","drawAlignmentPattern","drawVersion","formatBits","rem","bits","getBit","color","a","floor","dy","dx","dist","max","abs","xx","yy","isDark","ver","numBlocks","NUM_ERROR_CORRECTION_BLOCKS","ordinal","blockEccLen","ECC_CODEWORDS_PER_BLOCK","rawCodewords","getNumRawDataModules","numShortBlocks","shortBlockLen","blocks","rsDiv","reedSolomonComputeDivisor","k","dat","ecc","reedSolomonComputeRemainder","concat","result","block","right","vert","upward","invert","Error","runColor","runX","runHistory","PENALTY_N1","finderPenaltyAddHistory","finderPenaltyCountPatterns","PENALTY_N3","finderPenaltyTerminateAndCount","runY","PENALTY_N2","dark","reduce","sum","total","ceil","PENALTY_N4","step","pos","splice","degree","root","reedSolomonMultiply","divisor","map","_","factor","shift","coef","z","n","core","currentRunColor","currentRunLength","pop","unshift","val","len","cond","Mode","BYTE","makeNumeric","digits","isNumeric","Number","parseInt","substring","NUMERIC","makeAlphanumeric","isAlphanumeric","temp","ALPHANUMERIC_CHARSET","indexOf","charAt","ALPHANUMERIC","toUtf8ByteArray","makeEci","assignVal","ECI","NUMERIC_REGEX","test","ALPHANUMERIC_REGEX","bitData","ccbits","POSITIVE_INFINITY","str","encodeURI","charCodeAt","_qrcodegen2","_QrCode","LOW","_qrcodegen3","_QrSegment","numBitsCharCount","KANJI"],"mappings":"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ACA,EAAA,EAAA,EACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EAAE,CAAA;AAAA;AAAA,IAEJ,CACE,CACA,CAAA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EAAE,CAAA;AAAA;AAAA,GACD,CAAA,CAAA;AAGL,EAAA,aAAA,CAtzBWhG,SAszBa6F,6BAAuC,EAAA;AAAA;AAAA;AAAA,IAG7D,CACE,CACA,CAAA,EAAA,CAAA,EACA,GACA,CACA,EAAA,CAAA,EACA,GACA,CACA,EAAA,CAAA,EACA,CACA,EAAA,CAAA,EACA,GACA,CACA,EAAA,CAAA,EACA,GACA,CACA,EAAA,CAAA,EACA,GACA,CACA,EAAA,CAAA,EACA,CACA,EAAA,CAAA,EACA,GACA,CACA,EAAA,CAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EAAE,CAAA;AAAA;AAAA,IAEJ,CACE,CACA,CAAA,EAAA,CAAA,EACA,GACA,CACA,EAAA,CAAA,EACA,GACA,CACA,EAAA,CAAA,EACA,CACA,EAAA,CAAA,EACA,GACA,CACA,EAAA,CAAA,EACA,GACA,CACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EAAE,CAAA;AAAA;AAAA,IAEJ,CACE,CACA,CAAA,EAAA,CAAA,EACA,GACA,CACA,EAAA,CAAA,EACA,GACA,CACA,EAAA,CAAA,EACA,CACA,EAAA,CAAA,EACA,GACA,CACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EAAE,CAAA;AAAA;AAAA,IAEJ,CACE,CACA,CAAA,EAAA,CAAA,EACA,GACA,CACA,EAAA,CAAA,EACA,GACA,CACA,EAAA,CAAA,EACA,CACA,EAAA,CAAA,EACA,GACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EACA,EAAA,EAAA,EACA,IACA,EAAE,CAAA;AAAA;AAAA,GACD,CAAA,CAAA;AAp+BA,EAAA,IAAM7F,MAAN,GAAA,OAAA,CAAA;AAs+BND,EAAAA,UAAAA,CAAAC,MAAAA,GAAAA,MAAAA,CAAAA;AAID,EAASoD,SAAAA,UAAAA,CAAWmG,GAAUC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"}