@liquid-js/qr-code-styling 3.1.3 → 4.0.0-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"qr-code-styling.js","sources":["../node_modules/qrcode-generator/qrcode.js","../src/types/qrcode.ts","../src/utils/merge.ts","../src/utils/gradient.ts","../src/utils/options.ts","../src/utils/qrcode.ts","../src/utils/svg.ts","../src/figures/corner-dot.ts","../src/figures/corner-square.ts","../src/figures/dot.ts","../src/tools/browser-image-tools.ts","../src/core/qr-svg.ts","../src/utils/image.ts","../src/core/qr-code-styling.ts","../src/utils/canvas-options.ts","../src/tools/browser-utils.ts","../src/index.ts"],"sourcesContent":["//---------------------------------------------------------------------\n//\n// QR Code Generator for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n// The word 'QR Code' is registered trademark of\n// DENSO WAVE INCORPORATED\n// http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n\nvar qrcode = function() {\n\n //---------------------------------------------------------------------\n // qrcode\n //---------------------------------------------------------------------\n\n /**\n * qrcode\n * @param typeNumber 1 to 40\n * @param errorCorrectionLevel 'L','M','Q','H'\n */\n var qrcode = function(typeNumber, errorCorrectionLevel) {\n\n var PAD0 = 0xEC;\n var PAD1 = 0x11;\n\n var _typeNumber = typeNumber;\n var _errorCorrectionLevel = QRErrorCorrectionLevel[errorCorrectionLevel];\n var _modules = null;\n var _moduleCount = 0;\n var _dataCache = null;\n var _dataList = [];\n\n var _this = {};\n\n var makeImpl = function(test, maskPattern) {\n\n _moduleCount = _typeNumber * 4 + 17;\n _modules = function(moduleCount) {\n var modules = new Array(moduleCount);\n for (var row = 0; row < moduleCount; row += 1) {\n modules[row] = new Array(moduleCount);\n for (var col = 0; col < moduleCount; col += 1) {\n modules[row][col] = null;\n }\n }\n return modules;\n }(_moduleCount);\n\n setupPositionProbePattern(0, 0);\n setupPositionProbePattern(_moduleCount - 7, 0);\n setupPositionProbePattern(0, _moduleCount - 7);\n setupPositionAdjustPattern();\n setupTimingPattern();\n setupTypeInfo(test, maskPattern);\n\n if (_typeNumber >= 7) {\n setupTypeNumber(test);\n }\n\n if (_dataCache == null) {\n _dataCache = createData(_typeNumber, _errorCorrectionLevel, _dataList);\n }\n\n mapData(_dataCache, maskPattern);\n };\n\n var setupPositionProbePattern = function(row, col) {\n\n for (var r = -1; r <= 7; r += 1) {\n\n if (row + r <= -1 || _moduleCount <= row + r) continue;\n\n for (var c = -1; c <= 7; c += 1) {\n\n if (col + c <= -1 || _moduleCount <= col + c) continue;\n\n if ( (0 <= r && r <= 6 && (c == 0 || c == 6) )\n || (0 <= c && c <= 6 && (r == 0 || r == 6) )\n || (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {\n _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n };\n\n var getBestMaskPattern = function() {\n\n var minLostPoint = 0;\n var pattern = 0;\n\n for (var i = 0; i < 8; i += 1) {\n\n makeImpl(true, i);\n\n var lostPoint = QRUtil.getLostPoint(_this);\n\n if (i == 0 || minLostPoint > lostPoint) {\n minLostPoint = lostPoint;\n pattern = i;\n }\n }\n\n return pattern;\n };\n\n var setupTimingPattern = function() {\n\n for (var r = 8; r < _moduleCount - 8; r += 1) {\n if (_modules[r][6] != null) {\n continue;\n }\n _modules[r][6] = (r % 2 == 0);\n }\n\n for (var c = 8; c < _moduleCount - 8; c += 1) {\n if (_modules[6][c] != null) {\n continue;\n }\n _modules[6][c] = (c % 2 == 0);\n }\n };\n\n var setupPositionAdjustPattern = function() {\n\n var pos = QRUtil.getPatternPosition(_typeNumber);\n\n for (var i = 0; i < pos.length; i += 1) {\n\n for (var j = 0; j < pos.length; j += 1) {\n\n var row = pos[i];\n var col = pos[j];\n\n if (_modules[row][col] != null) {\n continue;\n }\n\n for (var r = -2; r <= 2; r += 1) {\n\n for (var c = -2; c <= 2; c += 1) {\n\n if (r == -2 || r == 2 || c == -2 || c == 2\n || (r == 0 && c == 0) ) {\n _modules[row + r][col + c] = true;\n } else {\n _modules[row + r][col + c] = false;\n }\n }\n }\n }\n }\n };\n\n var setupTypeNumber = function(test) {\n\n var bits = QRUtil.getBCHTypeNumber(_typeNumber);\n\n for (var i = 0; i < 18; i += 1) {\n var mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod;\n }\n\n for (var i = 0; i < 18; i += 1) {\n var mod = (!test && ( (bits >> i) & 1) == 1);\n _modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod;\n }\n };\n\n var setupTypeInfo = function(test, maskPattern) {\n\n var data = (_errorCorrectionLevel << 3) | maskPattern;\n var bits = QRUtil.getBCHTypeInfo(data);\n\n // vertical\n for (var i = 0; i < 15; i += 1) {\n\n var mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 6) {\n _modules[i][8] = mod;\n } else if (i < 8) {\n _modules[i + 1][8] = mod;\n } else {\n _modules[_moduleCount - 15 + i][8] = mod;\n }\n }\n\n // horizontal\n for (var i = 0; i < 15; i += 1) {\n\n var mod = (!test && ( (bits >> i) & 1) == 1);\n\n if (i < 8) {\n _modules[8][_moduleCount - i - 1] = mod;\n } else if (i < 9) {\n _modules[8][15 - i - 1 + 1] = mod;\n } else {\n _modules[8][15 - i - 1] = mod;\n }\n }\n\n // fixed module\n _modules[_moduleCount - 8][8] = (!test);\n };\n\n var mapData = function(data, maskPattern) {\n\n var inc = -1;\n var row = _moduleCount - 1;\n var bitIndex = 7;\n var byteIndex = 0;\n var maskFunc = QRUtil.getMaskFunction(maskPattern);\n\n for (var col = _moduleCount - 1; col > 0; col -= 2) {\n\n if (col == 6) col -= 1;\n\n while (true) {\n\n for (var c = 0; c < 2; c += 1) {\n\n if (_modules[row][col - c] == null) {\n\n var dark = false;\n\n if (byteIndex < data.length) {\n dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);\n }\n\n var mask = maskFunc(row, col - c);\n\n if (mask) {\n dark = !dark;\n }\n\n _modules[row][col - c] = dark;\n bitIndex -= 1;\n\n if (bitIndex == -1) {\n byteIndex += 1;\n bitIndex = 7;\n }\n }\n }\n\n row += inc;\n\n if (row < 0 || _moduleCount <= row) {\n row -= inc;\n inc = -inc;\n break;\n }\n }\n }\n };\n\n var createBytes = function(buffer, rsBlocks) {\n\n var offset = 0;\n\n var maxDcCount = 0;\n var maxEcCount = 0;\n\n var dcdata = new Array(rsBlocks.length);\n var ecdata = new Array(rsBlocks.length);\n\n for (var r = 0; r < rsBlocks.length; r += 1) {\n\n var dcCount = rsBlocks[r].dataCount;\n var ecCount = rsBlocks[r].totalCount - dcCount;\n\n maxDcCount = Math.max(maxDcCount, dcCount);\n maxEcCount = Math.max(maxEcCount, ecCount);\n\n dcdata[r] = new Array(dcCount);\n\n for (var i = 0; i < dcdata[r].length; i += 1) {\n dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];\n }\n offset += dcCount;\n\n var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\n var rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);\n\n var modPoly = rawPoly.mod(rsPoly);\n ecdata[r] = new Array(rsPoly.getLength() - 1);\n for (var i = 0; i < ecdata[r].length; i += 1) {\n var modIndex = i + modPoly.getLength() - ecdata[r].length;\n ecdata[r][i] = (modIndex >= 0)? modPoly.getAt(modIndex) : 0;\n }\n }\n\n var totalCodeCount = 0;\n for (var i = 0; i < rsBlocks.length; i += 1) {\n totalCodeCount += rsBlocks[i].totalCount;\n }\n\n var data = new Array(totalCodeCount);\n var index = 0;\n\n for (var i = 0; i < maxDcCount; i += 1) {\n for (var r = 0; r < rsBlocks.length; r += 1) {\n if (i < dcdata[r].length) {\n data[index] = dcdata[r][i];\n index += 1;\n }\n }\n }\n\n for (var i = 0; i < maxEcCount; i += 1) {\n for (var r = 0; r < rsBlocks.length; r += 1) {\n if (i < ecdata[r].length) {\n data[index] = ecdata[r][i];\n index += 1;\n }\n }\n }\n\n return data;\n };\n\n var createData = function(typeNumber, errorCorrectionLevel, dataList) {\n\n var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectionLevel);\n\n var buffer = qrBitBuffer();\n\n for (var i = 0; i < dataList.length; i += 1) {\n var data = dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n // calc num max data.\n var totalDataCount = 0;\n for (var i = 0; i < rsBlocks.length; i += 1) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() > totalDataCount * 8) {\n throw 'code length overflow. ('\n + buffer.getLengthInBits()\n + '>'\n + totalDataCount * 8\n + ')';\n }\n\n // end code\n if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n buffer.put(0, 4);\n }\n\n // padding\n while (buffer.getLengthInBits() % 8 != 0) {\n buffer.putBit(false);\n }\n\n // padding\n while (true) {\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD0, 8);\n\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(PAD1, 8);\n }\n\n return createBytes(buffer, rsBlocks);\n };\n\n _this.addData = function(data, mode) {\n\n mode = mode || 'Byte';\n\n var newData = null;\n\n switch(mode) {\n case 'Numeric' :\n newData = qrNumber(data);\n break;\n case 'Alphanumeric' :\n newData = qrAlphaNum(data);\n break;\n case 'Byte' :\n newData = qr8BitByte(data);\n break;\n case 'Kanji' :\n newData = qrKanji(data);\n break;\n default :\n throw 'mode:' + mode;\n }\n\n _dataList.push(newData);\n _dataCache = null;\n };\n\n _this.isDark = function(row, col) {\n if (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) {\n throw row + ',' + col;\n }\n return _modules[row][col];\n };\n\n _this.getModuleCount = function() {\n return _moduleCount;\n };\n\n _this.make = function() {\n if (_typeNumber < 1) {\n var typeNumber = 1;\n\n for (; typeNumber < 40; typeNumber++) {\n var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, _errorCorrectionLevel);\n var buffer = qrBitBuffer();\n\n for (var i = 0; i < _dataList.length; i++) {\n var data = _dataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n data.write(buffer);\n }\n\n var totalDataCount = 0;\n for (var i = 0; i < rsBlocks.length; i++) {\n totalDataCount += rsBlocks[i].dataCount;\n }\n\n if (buffer.getLengthInBits() <= totalDataCount * 8) {\n break;\n }\n }\n\n _typeNumber = typeNumber;\n }\n\n makeImpl(false, getBestMaskPattern() );\n };\n\n _this.createTableTag = function(cellSize, margin) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var qrHtml = '';\n\n qrHtml += '<table style=\"';\n qrHtml += ' border-width: 0px; border-style: none;';\n qrHtml += ' border-collapse: collapse;';\n qrHtml += ' padding: 0px; margin: ' + margin + 'px;';\n qrHtml += '\">';\n qrHtml += '<tbody>';\n\n for (var r = 0; r < _this.getModuleCount(); r += 1) {\n\n qrHtml += '<tr>';\n\n for (var c = 0; c < _this.getModuleCount(); c += 1) {\n qrHtml += '<td style=\"';\n qrHtml += ' border-width: 0px; border-style: none;';\n qrHtml += ' border-collapse: collapse;';\n qrHtml += ' padding: 0px; margin: 0px;';\n qrHtml += ' width: ' + cellSize + 'px;';\n qrHtml += ' height: ' + cellSize + 'px;';\n qrHtml += ' background-color: ';\n qrHtml += _this.isDark(r, c)? '#000000' : '#ffffff';\n qrHtml += ';';\n qrHtml += '\"/>';\n }\n\n qrHtml += '</tr>';\n }\n\n qrHtml += '</tbody>';\n qrHtml += '</table>';\n\n return qrHtml;\n };\n\n _this.createSvgTag = function(cellSize, margin, alt, title) {\n\n var opts = {};\n if (typeof arguments[0] == 'object') {\n // Called by options.\n opts = arguments[0];\n // overwrite cellSize and margin.\n cellSize = opts.cellSize;\n margin = opts.margin;\n alt = opts.alt;\n title = opts.title;\n }\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n // Compose alt property surrogate\n alt = (typeof alt === 'string') ? {text: alt} : alt || {};\n alt.text = alt.text || null;\n alt.id = (alt.text) ? alt.id || 'qrcode-description' : null;\n\n // Compose title property surrogate\n title = (typeof title === 'string') ? {text: title} : title || {};\n title.text = title.text || null;\n title.id = (title.text) ? title.id || 'qrcode-title' : null;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var c, mc, r, mr, qrSvg='', rect;\n\n rect = 'l' + cellSize + ',0 0,' + cellSize +\n ' -' + cellSize + ',0 0,-' + cellSize + 'z ';\n\n qrSvg += '<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"';\n qrSvg += !opts.scalable ? ' width=\"' + size + 'px\" height=\"' + size + 'px\"' : '';\n qrSvg += ' viewBox=\"0 0 ' + size + ' ' + size + '\" ';\n qrSvg += ' preserveAspectRatio=\"xMinYMin meet\"';\n qrSvg += (title.text || alt.text) ? ' role=\"img\" aria-labelledby=\"' +\n escapeXml([title.id, alt.id].join(' ').trim() ) + '\"' : '';\n qrSvg += '>';\n qrSvg += (title.text) ? '<title id=\"' + escapeXml(title.id) + '\">' +\n escapeXml(title.text) + '</title>' : '';\n qrSvg += (alt.text) ? '<description id=\"' + escapeXml(alt.id) + '\">' +\n escapeXml(alt.text) + '</description>' : '';\n qrSvg += '<rect width=\"100%\" height=\"100%\" fill=\"white\" cx=\"0\" cy=\"0\"/>';\n qrSvg += '<path d=\"';\n\n for (r = 0; r < _this.getModuleCount(); r += 1) {\n mr = r * cellSize + margin;\n for (c = 0; c < _this.getModuleCount(); c += 1) {\n if (_this.isDark(r, c) ) {\n mc = c*cellSize+margin;\n qrSvg += 'M' + mc + ',' + mr + rect;\n }\n }\n }\n\n qrSvg += '\" stroke=\"transparent\" fill=\"black\"/>';\n qrSvg += '</svg>';\n\n return qrSvg;\n };\n\n _this.createDataURL = function(cellSize, margin) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n return createDataURL(size, size, function(x, y) {\n if (min <= x && x < max && min <= y && y < max) {\n var c = Math.floor( (x - min) / cellSize);\n var r = Math.floor( (y - min) / cellSize);\n return _this.isDark(r, c)? 0 : 1;\n } else {\n return 1;\n }\n } );\n };\n\n _this.createImgTag = function(cellSize, margin, alt) {\n\n cellSize = cellSize || 2;\n margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n\n var img = '';\n img += '<img';\n img += '\\u0020src=\"';\n img += _this.createDataURL(cellSize, margin);\n img += '\"';\n img += '\\u0020width=\"';\n img += size;\n img += '\"';\n img += '\\u0020height=\"';\n img += size;\n img += '\"';\n if (alt) {\n img += '\\u0020alt=\"';\n img += escapeXml(alt);\n img += '\"';\n }\n img += '/>';\n\n return img;\n };\n\n var escapeXml = function(s) {\n var escaped = '';\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charAt(i);\n switch(c) {\n case '<': escaped += '&lt;'; break;\n case '>': escaped += '&gt;'; break;\n case '&': escaped += '&amp;'; break;\n case '\"': escaped += '&quot;'; break;\n default : escaped += c; break;\n }\n }\n return escaped;\n };\n\n var _createHalfASCII = function(margin) {\n var cellSize = 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n var y, x, r1, r2, p;\n\n var blocks = {\n '██': '█',\n '█ ': '▀',\n ' █': '▄',\n ' ': ' '\n };\n\n var blocksLastLineNoMargin = {\n '██': '▀',\n '█ ': '▀',\n ' █': ' ',\n ' ': ' '\n };\n\n var ascii = '';\n for (y = 0; y < size; y += 2) {\n r1 = Math.floor((y - min) / cellSize);\n r2 = Math.floor((y + 1 - min) / cellSize);\n for (x = 0; x < size; x += 1) {\n p = '█';\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r1, Math.floor((x - min) / cellSize))) {\n p = ' ';\n }\n\n if (min <= x && x < max && min <= y+1 && y+1 < max && _this.isDark(r2, Math.floor((x - min) / cellSize))) {\n p += ' ';\n }\n else {\n p += '█';\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n ascii += (margin < 1 && y+1 >= max) ? blocksLastLineNoMargin[p] : blocks[p];\n }\n\n ascii += '\\n';\n }\n\n if (size % 2 && margin > 0) {\n return ascii.substring(0, ascii.length - size - 1) + Array(size+1).join('▀');\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.createASCII = function(cellSize, margin) {\n cellSize = cellSize || 1;\n\n if (cellSize < 2) {\n return _createHalfASCII(margin);\n }\n\n cellSize -= 1;\n margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n var size = _this.getModuleCount() * cellSize + margin * 2;\n var min = margin;\n var max = size - margin;\n\n var y, x, r, p;\n\n var white = Array(cellSize+1).join('██');\n var black = Array(cellSize+1).join(' ');\n\n var ascii = '';\n var line = '';\n for (y = 0; y < size; y += 1) {\n r = Math.floor( (y - min) / cellSize);\n line = '';\n for (x = 0; x < size; x += 1) {\n p = 1;\n\n if (min <= x && x < max && min <= y && y < max && _this.isDark(r, Math.floor((x - min) / cellSize))) {\n p = 0;\n }\n\n // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n line += p ? white : black;\n }\n\n for (r = 0; r < cellSize; r += 1) {\n ascii += line + '\\n';\n }\n }\n\n return ascii.substring(0, ascii.length-1);\n };\n\n _this.renderTo2dContext = function(context, cellSize) {\n cellSize = cellSize || 2;\n var length = _this.getModuleCount();\n for (var row = 0; row < length; row++) {\n for (var col = 0; col < length; col++) {\n context.fillStyle = _this.isDark(row, col) ? 'black' : 'white';\n context.fillRect(row * cellSize, col * cellSize, cellSize, cellSize);\n }\n }\n }\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrcode.stringToBytes\n //---------------------------------------------------------------------\n\n qrcode.stringToBytesFuncs = {\n 'default' : function(s) {\n var bytes = [];\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charCodeAt(i);\n bytes.push(c & 0xff);\n }\n return bytes;\n }\n };\n\n qrcode.stringToBytes = qrcode.stringToBytesFuncs['default'];\n\n //---------------------------------------------------------------------\n // qrcode.createStringToBytes\n //---------------------------------------------------------------------\n\n /**\n * @param unicodeData base64 string of byte array.\n * [16bit Unicode],[16bit Bytes], ...\n * @param numChars\n */\n qrcode.createStringToBytes = function(unicodeData, numChars) {\n\n // create conversion map.\n\n var unicodeMap = function() {\n\n var bin = base64DecodeInputStream(unicodeData);\n var read = function() {\n var b = bin.read();\n if (b == -1) throw 'eof';\n return b;\n };\n\n var count = 0;\n var unicodeMap = {};\n while (true) {\n var b0 = bin.read();\n if (b0 == -1) break;\n var b1 = read();\n var b2 = read();\n var b3 = read();\n var k = String.fromCharCode( (b0 << 8) | b1);\n var v = (b2 << 8) | b3;\n unicodeMap[k] = v;\n count += 1;\n }\n if (count != numChars) {\n throw count + ' != ' + numChars;\n }\n\n return unicodeMap;\n }();\n\n var unknownChar = '?'.charCodeAt(0);\n\n return function(s) {\n var bytes = [];\n for (var i = 0; i < s.length; i += 1) {\n var c = s.charCodeAt(i);\n if (c < 128) {\n bytes.push(c);\n } else {\n var b = unicodeMap[s.charAt(i)];\n if (typeof b == 'number') {\n if ( (b & 0xff) == b) {\n // 1byte\n bytes.push(b);\n } else {\n // 2bytes\n bytes.push(b >>> 8);\n bytes.push(b & 0xff);\n }\n } else {\n bytes.push(unknownChar);\n }\n }\n }\n return bytes;\n };\n };\n\n //---------------------------------------------------------------------\n // QRMode\n //---------------------------------------------------------------------\n\n var QRMode = {\n MODE_NUMBER : 1 << 0,\n MODE_ALPHA_NUM : 1 << 1,\n MODE_8BIT_BYTE : 1 << 2,\n MODE_KANJI : 1 << 3\n };\n\n //---------------------------------------------------------------------\n // QRErrorCorrectionLevel\n //---------------------------------------------------------------------\n\n var QRErrorCorrectionLevel = {\n L : 1,\n M : 0,\n Q : 3,\n H : 2\n };\n\n //---------------------------------------------------------------------\n // QRMaskPattern\n //---------------------------------------------------------------------\n\n var QRMaskPattern = {\n PATTERN000 : 0,\n PATTERN001 : 1,\n PATTERN010 : 2,\n PATTERN011 : 3,\n PATTERN100 : 4,\n PATTERN101 : 5,\n PATTERN110 : 6,\n PATTERN111 : 7\n };\n\n //---------------------------------------------------------------------\n // QRUtil\n //---------------------------------------------------------------------\n\n var QRUtil = function() {\n\n var PATTERN_POSITION_TABLE = [\n [],\n [6, 18],\n [6, 22],\n [6, 26],\n [6, 30],\n [6, 34],\n [6, 22, 38],\n [6, 24, 42],\n [6, 26, 46],\n [6, 28, 50],\n [6, 30, 54],\n [6, 32, 58],\n [6, 34, 62],\n [6, 26, 46, 66],\n [6, 26, 48, 70],\n [6, 26, 50, 74],\n [6, 30, 54, 78],\n [6, 30, 56, 82],\n [6, 30, 58, 86],\n [6, 34, 62, 90],\n [6, 28, 50, 72, 94],\n [6, 26, 50, 74, 98],\n [6, 30, 54, 78, 102],\n [6, 28, 54, 80, 106],\n [6, 32, 58, 84, 110],\n [6, 30, 58, 86, 114],\n [6, 34, 62, 90, 118],\n [6, 26, 50, 74, 98, 122],\n [6, 30, 54, 78, 102, 126],\n [6, 26, 52, 78, 104, 130],\n [6, 30, 56, 82, 108, 134],\n [6, 34, 60, 86, 112, 138],\n [6, 30, 58, 86, 114, 142],\n [6, 34, 62, 90, 118, 146],\n [6, 30, 54, 78, 102, 126, 150],\n [6, 24, 50, 76, 102, 128, 154],\n [6, 28, 54, 80, 106, 132, 158],\n [6, 32, 58, 84, 110, 136, 162],\n [6, 26, 54, 82, 110, 138, 166],\n [6, 30, 58, 86, 114, 142, 170]\n ];\n var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);\n var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);\n var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);\n\n var _this = {};\n\n var getBCHDigit = function(data) {\n var digit = 0;\n while (data != 0) {\n digit += 1;\n data >>>= 1;\n }\n return digit;\n };\n\n _this.getBCHTypeInfo = function(data) {\n var d = data << 10;\n while (getBCHDigit(d) - getBCHDigit(G15) >= 0) {\n d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15) ) );\n }\n return ( (data << 10) | d) ^ G15_MASK;\n };\n\n _this.getBCHTypeNumber = function(data) {\n var d = data << 12;\n while (getBCHDigit(d) - getBCHDigit(G18) >= 0) {\n d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18) ) );\n }\n return (data << 12) | d;\n };\n\n _this.getPatternPosition = function(typeNumber) {\n return PATTERN_POSITION_TABLE[typeNumber - 1];\n };\n\n _this.getMaskFunction = function(maskPattern) {\n\n switch (maskPattern) {\n\n case QRMaskPattern.PATTERN000 :\n return function(i, j) { return (i + j) % 2 == 0; };\n case QRMaskPattern.PATTERN001 :\n return function(i, j) { return i % 2 == 0; };\n case QRMaskPattern.PATTERN010 :\n return function(i, j) { return j % 3 == 0; };\n case QRMaskPattern.PATTERN011 :\n return function(i, j) { return (i + j) % 3 == 0; };\n case QRMaskPattern.PATTERN100 :\n return function(i, j) { return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0; };\n case QRMaskPattern.PATTERN101 :\n return function(i, j) { return (i * j) % 2 + (i * j) % 3 == 0; };\n case QRMaskPattern.PATTERN110 :\n return function(i, j) { return ( (i * j) % 2 + (i * j) % 3) % 2 == 0; };\n case QRMaskPattern.PATTERN111 :\n return function(i, j) { return ( (i * j) % 3 + (i + j) % 2) % 2 == 0; };\n\n default :\n throw 'bad maskPattern:' + maskPattern;\n }\n };\n\n _this.getErrorCorrectPolynomial = function(errorCorrectLength) {\n var a = qrPolynomial([1], 0);\n for (var i = 0; i < errorCorrectLength; i += 1) {\n a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0) );\n }\n return a;\n };\n\n _this.getLengthInBits = function(mode, type) {\n\n if (1 <= type && type < 10) {\n\n // 1 - 9\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 10;\n case QRMode.MODE_ALPHA_NUM : return 9;\n case QRMode.MODE_8BIT_BYTE : return 8;\n case QRMode.MODE_KANJI : return 8;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 27) {\n\n // 10 - 26\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 12;\n case QRMode.MODE_ALPHA_NUM : return 11;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 10;\n default :\n throw 'mode:' + mode;\n }\n\n } else if (type < 41) {\n\n // 27 - 40\n\n switch(mode) {\n case QRMode.MODE_NUMBER : return 14;\n case QRMode.MODE_ALPHA_NUM : return 13;\n case QRMode.MODE_8BIT_BYTE : return 16;\n case QRMode.MODE_KANJI : return 12;\n default :\n throw 'mode:' + mode;\n }\n\n } else {\n throw 'type:' + type;\n }\n };\n\n _this.getLostPoint = function(qrcode) {\n\n var moduleCount = qrcode.getModuleCount();\n\n var lostPoint = 0;\n\n // LEVEL1\n\n for (var row = 0; row < moduleCount; row += 1) {\n for (var col = 0; col < moduleCount; col += 1) {\n\n var sameCount = 0;\n var dark = qrcode.isDark(row, col);\n\n for (var r = -1; r <= 1; r += 1) {\n\n if (row + r < 0 || moduleCount <= row + r) {\n continue;\n }\n\n for (var c = -1; c <= 1; c += 1) {\n\n if (col + c < 0 || moduleCount <= col + c) {\n continue;\n }\n\n if (r == 0 && c == 0) {\n continue;\n }\n\n if (dark == qrcode.isDark(row + r, col + c) ) {\n sameCount += 1;\n }\n }\n }\n\n if (sameCount > 5) {\n lostPoint += (3 + sameCount - 5);\n }\n }\n };\n\n // LEVEL2\n\n for (var row = 0; row < moduleCount - 1; row += 1) {\n for (var col = 0; col < moduleCount - 1; col += 1) {\n var count = 0;\n if (qrcode.isDark(row, col) ) count += 1;\n if (qrcode.isDark(row + 1, col) ) count += 1;\n if (qrcode.isDark(row, col + 1) ) count += 1;\n if (qrcode.isDark(row + 1, col + 1) ) count += 1;\n if (count == 0 || count == 4) {\n lostPoint += 3;\n }\n }\n }\n\n // LEVEL3\n\n for (var row = 0; row < moduleCount; row += 1) {\n for (var col = 0; col < moduleCount - 6; col += 1) {\n if (qrcode.isDark(row, col)\n && !qrcode.isDark(row, col + 1)\n && qrcode.isDark(row, col + 2)\n && qrcode.isDark(row, col + 3)\n && qrcode.isDark(row, col + 4)\n && !qrcode.isDark(row, col + 5)\n && qrcode.isDark(row, col + 6) ) {\n lostPoint += 40;\n }\n }\n }\n\n for (var col = 0; col < moduleCount; col += 1) {\n for (var row = 0; row < moduleCount - 6; row += 1) {\n if (qrcode.isDark(row, col)\n && !qrcode.isDark(row + 1, col)\n && qrcode.isDark(row + 2, col)\n && qrcode.isDark(row + 3, col)\n && qrcode.isDark(row + 4, col)\n && !qrcode.isDark(row + 5, col)\n && qrcode.isDark(row + 6, col) ) {\n lostPoint += 40;\n }\n }\n }\n\n // LEVEL4\n\n var darkCount = 0;\n\n for (var col = 0; col < moduleCount; col += 1) {\n for (var row = 0; row < moduleCount; row += 1) {\n if (qrcode.isDark(row, col) ) {\n darkCount += 1;\n }\n }\n }\n\n var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\n lostPoint += ratio * 10;\n\n return lostPoint;\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // QRMath\n //---------------------------------------------------------------------\n\n var QRMath = function() {\n\n var EXP_TABLE = new Array(256);\n var LOG_TABLE = new Array(256);\n\n // initialize tables\n for (var i = 0; i < 8; i += 1) {\n EXP_TABLE[i] = 1 << i;\n }\n for (var i = 8; i < 256; i += 1) {\n EXP_TABLE[i] = EXP_TABLE[i - 4]\n ^ EXP_TABLE[i - 5]\n ^ EXP_TABLE[i - 6]\n ^ EXP_TABLE[i - 8];\n }\n for (var i = 0; i < 255; i += 1) {\n LOG_TABLE[EXP_TABLE[i] ] = i;\n }\n\n var _this = {};\n\n _this.glog = function(n) {\n\n if (n < 1) {\n throw 'glog(' + n + ')';\n }\n\n return LOG_TABLE[n];\n };\n\n _this.gexp = function(n) {\n\n while (n < 0) {\n n += 255;\n }\n\n while (n >= 256) {\n n -= 255;\n }\n\n return EXP_TABLE[n];\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // qrPolynomial\n //---------------------------------------------------------------------\n\n function qrPolynomial(num, shift) {\n\n if (typeof num.length == 'undefined') {\n throw num.length + '/' + shift;\n }\n\n var _num = function() {\n var offset = 0;\n while (offset < num.length && num[offset] == 0) {\n offset += 1;\n }\n var _num = new Array(num.length - offset + shift);\n for (var i = 0; i < num.length - offset; i += 1) {\n _num[i] = num[i + offset];\n }\n return _num;\n }();\n\n var _this = {};\n\n _this.getAt = function(index) {\n return _num[index];\n };\n\n _this.getLength = function() {\n return _num.length;\n };\n\n _this.multiply = function(e) {\n\n var num = new Array(_this.getLength() + e.getLength() - 1);\n\n for (var i = 0; i < _this.getLength(); i += 1) {\n for (var j = 0; j < e.getLength(); j += 1) {\n num[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i) ) + QRMath.glog(e.getAt(j) ) );\n }\n }\n\n return qrPolynomial(num, 0);\n };\n\n _this.mod = function(e) {\n\n if (_this.getLength() - e.getLength() < 0) {\n return _this;\n }\n\n var ratio = QRMath.glog(_this.getAt(0) ) - QRMath.glog(e.getAt(0) );\n\n var num = new Array(_this.getLength() );\n for (var i = 0; i < _this.getLength(); i += 1) {\n num[i] = _this.getAt(i);\n }\n\n for (var i = 0; i < e.getLength(); i += 1) {\n num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i) ) + ratio);\n }\n\n // recursive call\n return qrPolynomial(num, 0).mod(e);\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // QRRSBlock\n //---------------------------------------------------------------------\n\n var QRRSBlock = function() {\n\n var RS_BLOCK_TABLE = [\n\n // L\n // M\n // Q\n // H\n\n // 1\n [1, 26, 19],\n [1, 26, 16],\n [1, 26, 13],\n [1, 26, 9],\n\n // 2\n [1, 44, 34],\n [1, 44, 28],\n [1, 44, 22],\n [1, 44, 16],\n\n // 3\n [1, 70, 55],\n [1, 70, 44],\n [2, 35, 17],\n [2, 35, 13],\n\n // 4\n [1, 100, 80],\n [2, 50, 32],\n [2, 50, 24],\n [4, 25, 9],\n\n // 5\n [1, 134, 108],\n [2, 67, 43],\n [2, 33, 15, 2, 34, 16],\n [2, 33, 11, 2, 34, 12],\n\n // 6\n [2, 86, 68],\n [4, 43, 27],\n [4, 43, 19],\n [4, 43, 15],\n\n // 7\n [2, 98, 78],\n [4, 49, 31],\n [2, 32, 14, 4, 33, 15],\n [4, 39, 13, 1, 40, 14],\n\n // 8\n [2, 121, 97],\n [2, 60, 38, 2, 61, 39],\n [4, 40, 18, 2, 41, 19],\n [4, 40, 14, 2, 41, 15],\n\n // 9\n [2, 146, 116],\n [3, 58, 36, 2, 59, 37],\n [4, 36, 16, 4, 37, 17],\n [4, 36, 12, 4, 37, 13],\n\n // 10\n [2, 86, 68, 2, 87, 69],\n [4, 69, 43, 1, 70, 44],\n [6, 43, 19, 2, 44, 20],\n [6, 43, 15, 2, 44, 16],\n\n // 11\n [4, 101, 81],\n [1, 80, 50, 4, 81, 51],\n [4, 50, 22, 4, 51, 23],\n [3, 36, 12, 8, 37, 13],\n\n // 12\n [2, 116, 92, 2, 117, 93],\n [6, 58, 36, 2, 59, 37],\n [4, 46, 20, 6, 47, 21],\n [7, 42, 14, 4, 43, 15],\n\n // 13\n [4, 133, 107],\n [8, 59, 37, 1, 60, 38],\n [8, 44, 20, 4, 45, 21],\n [12, 33, 11, 4, 34, 12],\n\n // 14\n [3, 145, 115, 1, 146, 116],\n [4, 64, 40, 5, 65, 41],\n [11, 36, 16, 5, 37, 17],\n [11, 36, 12, 5, 37, 13],\n\n // 15\n [5, 109, 87, 1, 110, 88],\n [5, 65, 41, 5, 66, 42],\n [5, 54, 24, 7, 55, 25],\n [11, 36, 12, 7, 37, 13],\n\n // 16\n [5, 122, 98, 1, 123, 99],\n [7, 73, 45, 3, 74, 46],\n [15, 43, 19, 2, 44, 20],\n [3, 45, 15, 13, 46, 16],\n\n // 17\n [1, 135, 107, 5, 136, 108],\n [10, 74, 46, 1, 75, 47],\n [1, 50, 22, 15, 51, 23],\n [2, 42, 14, 17, 43, 15],\n\n // 18\n [5, 150, 120, 1, 151, 121],\n [9, 69, 43, 4, 70, 44],\n [17, 50, 22, 1, 51, 23],\n [2, 42, 14, 19, 43, 15],\n\n // 19\n [3, 141, 113, 4, 142, 114],\n [3, 70, 44, 11, 71, 45],\n [17, 47, 21, 4, 48, 22],\n [9, 39, 13, 16, 40, 14],\n\n // 20\n [3, 135, 107, 5, 136, 108],\n [3, 67, 41, 13, 68, 42],\n [15, 54, 24, 5, 55, 25],\n [15, 43, 15, 10, 44, 16],\n\n // 21\n [4, 144, 116, 4, 145, 117],\n [17, 68, 42],\n [17, 50, 22, 6, 51, 23],\n [19, 46, 16, 6, 47, 17],\n\n // 22\n [2, 139, 111, 7, 140, 112],\n [17, 74, 46],\n [7, 54, 24, 16, 55, 25],\n [34, 37, 13],\n\n // 23\n [4, 151, 121, 5, 152, 122],\n [4, 75, 47, 14, 76, 48],\n [11, 54, 24, 14, 55, 25],\n [16, 45, 15, 14, 46, 16],\n\n // 24\n [6, 147, 117, 4, 148, 118],\n [6, 73, 45, 14, 74, 46],\n [11, 54, 24, 16, 55, 25],\n [30, 46, 16, 2, 47, 17],\n\n // 25\n [8, 132, 106, 4, 133, 107],\n [8, 75, 47, 13, 76, 48],\n [7, 54, 24, 22, 55, 25],\n [22, 45, 15, 13, 46, 16],\n\n // 26\n [10, 142, 114, 2, 143, 115],\n [19, 74, 46, 4, 75, 47],\n [28, 50, 22, 6, 51, 23],\n [33, 46, 16, 4, 47, 17],\n\n // 27\n [8, 152, 122, 4, 153, 123],\n [22, 73, 45, 3, 74, 46],\n [8, 53, 23, 26, 54, 24],\n [12, 45, 15, 28, 46, 16],\n\n // 28\n [3, 147, 117, 10, 148, 118],\n [3, 73, 45, 23, 74, 46],\n [4, 54, 24, 31, 55, 25],\n [11, 45, 15, 31, 46, 16],\n\n // 29\n [7, 146, 116, 7, 147, 117],\n [21, 73, 45, 7, 74, 46],\n [1, 53, 23, 37, 54, 24],\n [19, 45, 15, 26, 46, 16],\n\n // 30\n [5, 145, 115, 10, 146, 116],\n [19, 75, 47, 10, 76, 48],\n [15, 54, 24, 25, 55, 25],\n [23, 45, 15, 25, 46, 16],\n\n // 31\n [13, 145, 115, 3, 146, 116],\n [2, 74, 46, 29, 75, 47],\n [42, 54, 24, 1, 55, 25],\n [23, 45, 15, 28, 46, 16],\n\n // 32\n [17, 145, 115],\n [10, 74, 46, 23, 75, 47],\n [10, 54, 24, 35, 55, 25],\n [19, 45, 15, 35, 46, 16],\n\n // 33\n [17, 145, 115, 1, 146, 116],\n [14, 74, 46, 21, 75, 47],\n [29, 54, 24, 19, 55, 25],\n [11, 45, 15, 46, 46, 16],\n\n // 34\n [13, 145, 115, 6, 146, 116],\n [14, 74, 46, 23, 75, 47],\n [44, 54, 24, 7, 55, 25],\n [59, 46, 16, 1, 47, 17],\n\n // 35\n [12, 151, 121, 7, 152, 122],\n [12, 75, 47, 26, 76, 48],\n [39, 54, 24, 14, 55, 25],\n [22, 45, 15, 41, 46, 16],\n\n // 36\n [6, 151, 121, 14, 152, 122],\n [6, 75, 47, 34, 76, 48],\n [46, 54, 24, 10, 55, 25],\n [2, 45, 15, 64, 46, 16],\n\n // 37\n [17, 152, 122, 4, 153, 123],\n [29, 74, 46, 14, 75, 47],\n [49, 54, 24, 10, 55, 25],\n [24, 45, 15, 46, 46, 16],\n\n // 38\n [4, 152, 122, 18, 153, 123],\n [13, 74, 46, 32, 75, 47],\n [48, 54, 24, 14, 55, 25],\n [42, 45, 15, 32, 46, 16],\n\n // 39\n [20, 147, 117, 4, 148, 118],\n [40, 75, 47, 7, 76, 48],\n [43, 54, 24, 22, 55, 25],\n [10, 45, 15, 67, 46, 16],\n\n // 40\n [19, 148, 118, 6, 149, 119],\n [18, 75, 47, 31, 76, 48],\n [34, 54, 24, 34, 55, 25],\n [20, 45, 15, 61, 46, 16]\n ];\n\n var qrRSBlock = function(totalCount, dataCount) {\n var _this = {};\n _this.totalCount = totalCount;\n _this.dataCount = dataCount;\n return _this;\n };\n\n var _this = {};\n\n var getRsBlockTable = function(typeNumber, errorCorrectionLevel) {\n\n switch(errorCorrectionLevel) {\n case QRErrorCorrectionLevel.L :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n case QRErrorCorrectionLevel.M :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n case QRErrorCorrectionLevel.Q :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n case QRErrorCorrectionLevel.H :\n return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n default :\n return undefined;\n }\n };\n\n _this.getRSBlocks = function(typeNumber, errorCorrectionLevel) {\n\n var rsBlock = getRsBlockTable(typeNumber, errorCorrectionLevel);\n\n if (typeof rsBlock == 'undefined') {\n throw 'bad rs block @ typeNumber:' + typeNumber +\n '/errorCorrectionLevel:' + errorCorrectionLevel;\n }\n\n var length = rsBlock.length / 3;\n\n var list = [];\n\n for (var i = 0; i < length; i += 1) {\n\n var count = rsBlock[i * 3 + 0];\n var totalCount = rsBlock[i * 3 + 1];\n var dataCount = rsBlock[i * 3 + 2];\n\n for (var j = 0; j < count; j += 1) {\n list.push(qrRSBlock(totalCount, dataCount) );\n }\n }\n\n return list;\n };\n\n return _this;\n }();\n\n //---------------------------------------------------------------------\n // qrBitBuffer\n //---------------------------------------------------------------------\n\n var qrBitBuffer = function() {\n\n var _buffer = [];\n var _length = 0;\n\n var _this = {};\n\n _this.getBuffer = function() {\n return _buffer;\n };\n\n _this.getAt = function(index) {\n var bufIndex = Math.floor(index / 8);\n return ( (_buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;\n };\n\n _this.put = function(num, length) {\n for (var i = 0; i < length; i += 1) {\n _this.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);\n }\n };\n\n _this.getLengthInBits = function() {\n return _length;\n };\n\n _this.putBit = function(bit) {\n\n var bufIndex = Math.floor(_length / 8);\n if (_buffer.length <= bufIndex) {\n _buffer.push(0);\n }\n\n if (bit) {\n _buffer[bufIndex] |= (0x80 >>> (_length % 8) );\n }\n\n _length += 1;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrNumber\n //---------------------------------------------------------------------\n\n var qrNumber = function(data) {\n\n var _mode = QRMode.MODE_NUMBER;\n var _data = data;\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n var data = _data;\n\n var i = 0;\n\n while (i + 2 < data.length) {\n buffer.put(strToNum(data.substring(i, i + 3) ), 10);\n i += 3;\n }\n\n if (i < data.length) {\n if (data.length - i == 1) {\n buffer.put(strToNum(data.substring(i, i + 1) ), 4);\n } else if (data.length - i == 2) {\n buffer.put(strToNum(data.substring(i, i + 2) ), 7);\n }\n }\n };\n\n var strToNum = function(s) {\n var num = 0;\n for (var i = 0; i < s.length; i += 1) {\n num = num * 10 + chatToNum(s.charAt(i) );\n }\n return num;\n };\n\n var chatToNum = function(c) {\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n }\n throw 'illegal char :' + c;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrAlphaNum\n //---------------------------------------------------------------------\n\n var qrAlphaNum = function(data) {\n\n var _mode = QRMode.MODE_ALPHA_NUM;\n var _data = data;\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _data.length;\n };\n\n _this.write = function(buffer) {\n\n var s = _data;\n\n var i = 0;\n\n while (i + 1 < s.length) {\n buffer.put(\n getCode(s.charAt(i) ) * 45 +\n getCode(s.charAt(i + 1) ), 11);\n i += 2;\n }\n\n if (i < s.length) {\n buffer.put(getCode(s.charAt(i) ), 6);\n }\n };\n\n var getCode = function(c) {\n\n if ('0' <= c && c <= '9') {\n return c.charCodeAt(0) - '0'.charCodeAt(0);\n } else if ('A' <= c && c <= 'Z') {\n return c.charCodeAt(0) - 'A'.charCodeAt(0) + 10;\n } else {\n switch (c) {\n case ' ' : return 36;\n case '$' : return 37;\n case '%' : return 38;\n case '*' : return 39;\n case '+' : return 40;\n case '-' : return 41;\n case '.' : return 42;\n case '/' : return 43;\n case ':' : return 44;\n default :\n throw 'illegal char :' + c;\n }\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qr8BitByte\n //---------------------------------------------------------------------\n\n var qr8BitByte = function(data) {\n\n var _mode = QRMode.MODE_8BIT_BYTE;\n var _data = data;\n var _bytes = qrcode.stringToBytes(data);\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return _bytes.length;\n };\n\n _this.write = function(buffer) {\n for (var i = 0; i < _bytes.length; i += 1) {\n buffer.put(_bytes[i], 8);\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // qrKanji\n //---------------------------------------------------------------------\n\n var qrKanji = function(data) {\n\n var _mode = QRMode.MODE_KANJI;\n var _data = data;\n\n var stringToBytes = qrcode.stringToBytesFuncs['SJIS'];\n if (!stringToBytes) {\n throw 'sjis not supported.';\n }\n !function(c, code) {\n // self test for sjis support.\n var test = stringToBytes(c);\n if (test.length != 2 || ( (test[0] << 8) | test[1]) != code) {\n throw 'sjis not supported.';\n }\n }('\\u53cb', 0x9746);\n\n var _bytes = stringToBytes(data);\n\n var _this = {};\n\n _this.getMode = function() {\n return _mode;\n };\n\n _this.getLength = function(buffer) {\n return ~~(_bytes.length / 2);\n };\n\n _this.write = function(buffer) {\n\n var data = _bytes;\n\n var i = 0;\n\n while (i + 1 < data.length) {\n\n var c = ( (0xff & data[i]) << 8) | (0xff & data[i + 1]);\n\n if (0x8140 <= c && c <= 0x9FFC) {\n c -= 0x8140;\n } else if (0xE040 <= c && c <= 0xEBBF) {\n c -= 0xC140;\n } else {\n throw 'illegal char at ' + (i + 1) + '/' + c;\n }\n\n c = ( (c >>> 8) & 0xff) * 0xC0 + (c & 0xff);\n\n buffer.put(c, 13);\n\n i += 2;\n }\n\n if (i < data.length) {\n throw 'illegal char at ' + (i + 1);\n }\n };\n\n return _this;\n };\n\n //=====================================================================\n // GIF Support etc.\n //\n\n //---------------------------------------------------------------------\n // byteArrayOutputStream\n //---------------------------------------------------------------------\n\n var byteArrayOutputStream = function() {\n\n var _bytes = [];\n\n var _this = {};\n\n _this.writeByte = function(b) {\n _bytes.push(b & 0xff);\n };\n\n _this.writeShort = function(i) {\n _this.writeByte(i);\n _this.writeByte(i >>> 8);\n };\n\n _this.writeBytes = function(b, off, len) {\n off = off || 0;\n len = len || b.length;\n for (var i = 0; i < len; i += 1) {\n _this.writeByte(b[i + off]);\n }\n };\n\n _this.writeString = function(s) {\n for (var i = 0; i < s.length; i += 1) {\n _this.writeByte(s.charCodeAt(i) );\n }\n };\n\n _this.toByteArray = function() {\n return _bytes;\n };\n\n _this.toString = function() {\n var s = '';\n s += '[';\n for (var i = 0; i < _bytes.length; i += 1) {\n if (i > 0) {\n s += ',';\n }\n s += _bytes[i];\n }\n s += ']';\n return s;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // base64EncodeOutputStream\n //---------------------------------------------------------------------\n\n var base64EncodeOutputStream = function() {\n\n var _buffer = 0;\n var _buflen = 0;\n var _length = 0;\n var _base64 = '';\n\n var _this = {};\n\n var writeEncoded = function(b) {\n _base64 += String.fromCharCode(encode(b & 0x3f) );\n };\n\n var encode = function(n) {\n if (n < 0) {\n // error.\n } else if (n < 26) {\n return 0x41 + n;\n } else if (n < 52) {\n return 0x61 + (n - 26);\n } else if (n < 62) {\n return 0x30 + (n - 52);\n } else if (n == 62) {\n return 0x2b;\n } else if (n == 63) {\n return 0x2f;\n }\n throw 'n:' + n;\n };\n\n _this.writeByte = function(n) {\n\n _buffer = (_buffer << 8) | (n & 0xff);\n _buflen += 8;\n _length += 1;\n\n while (_buflen >= 6) {\n writeEncoded(_buffer >>> (_buflen - 6) );\n _buflen -= 6;\n }\n };\n\n _this.flush = function() {\n\n if (_buflen > 0) {\n writeEncoded(_buffer << (6 - _buflen) );\n _buffer = 0;\n _buflen = 0;\n }\n\n if (_length % 3 != 0) {\n // padding\n var padlen = 3 - _length % 3;\n for (var i = 0; i < padlen; i += 1) {\n _base64 += '=';\n }\n }\n };\n\n _this.toString = function() {\n return _base64;\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // base64DecodeInputStream\n //---------------------------------------------------------------------\n\n var base64DecodeInputStream = function(str) {\n\n var _str = str;\n var _pos = 0;\n var _buffer = 0;\n var _buflen = 0;\n\n var _this = {};\n\n _this.read = function() {\n\n while (_buflen < 8) {\n\n if (_pos >= _str.length) {\n if (_buflen == 0) {\n return -1;\n }\n throw 'unexpected end of file./' + _buflen;\n }\n\n var c = _str.charAt(_pos);\n _pos += 1;\n\n if (c == '=') {\n _buflen = 0;\n return -1;\n } else if (c.match(/^\\s$/) ) {\n // ignore if whitespace.\n continue;\n }\n\n _buffer = (_buffer << 6) | decode(c.charCodeAt(0) );\n _buflen += 6;\n }\n\n var n = (_buffer >>> (_buflen - 8) ) & 0xff;\n _buflen -= 8;\n return n;\n };\n\n var decode = function(c) {\n if (0x41 <= c && c <= 0x5a) {\n return c - 0x41;\n } else if (0x61 <= c && c <= 0x7a) {\n return c - 0x61 + 26;\n } else if (0x30 <= c && c <= 0x39) {\n return c - 0x30 + 52;\n } else if (c == 0x2b) {\n return 62;\n } else if (c == 0x2f) {\n return 63;\n } else {\n throw 'c:' + c;\n }\n };\n\n return _this;\n };\n\n //---------------------------------------------------------------------\n // gifImage (B/W)\n //---------------------------------------------------------------------\n\n var gifImage = function(width, height) {\n\n var _width = width;\n var _height = height;\n var _data = new Array(width * height);\n\n var _this = {};\n\n _this.setPixel = function(x, y, pixel) {\n _data[y * _width + x] = pixel;\n };\n\n _this.write = function(out) {\n\n //---------------------------------\n // GIF Signature\n\n out.writeString('GIF87a');\n\n //---------------------------------\n // Screen Descriptor\n\n out.writeShort(_width);\n out.writeShort(_height);\n\n out.writeByte(0x80); // 2bit\n out.writeByte(0);\n out.writeByte(0);\n\n //---------------------------------\n // Global Color Map\n\n // black\n out.writeByte(0x00);\n out.writeByte(0x00);\n out.writeByte(0x00);\n\n // white\n out.writeByte(0xff);\n out.writeByte(0xff);\n out.writeByte(0xff);\n\n //---------------------------------\n // Image Descriptor\n\n out.writeString(',');\n out.writeShort(0);\n out.writeShort(0);\n out.writeShort(_width);\n out.writeShort(_height);\n out.writeByte(0);\n\n //---------------------------------\n // Local Color Map\n\n //---------------------------------\n // Raster Data\n\n var lzwMinCodeSize = 2;\n var raster = getLZWRaster(lzwMinCodeSize);\n\n out.writeByte(lzwMinCodeSize);\n\n var offset = 0;\n\n while (raster.length - offset > 255) {\n out.writeByte(255);\n out.writeBytes(raster, offset, 255);\n offset += 255;\n }\n\n out.writeByte(raster.length - offset);\n out.writeBytes(raster, offset, raster.length - offset);\n out.writeByte(0x00);\n\n //---------------------------------\n // GIF Terminator\n out.writeString(';');\n };\n\n var bitOutputStream = function(out) {\n\n var _out = out;\n var _bitLength = 0;\n var _bitBuffer = 0;\n\n var _this = {};\n\n _this.write = function(data, length) {\n\n if ( (data >>> length) != 0) {\n throw 'length over';\n }\n\n while (_bitLength + length >= 8) {\n _out.writeByte(0xff & ( (data << _bitLength) | _bitBuffer) );\n length -= (8 - _bitLength);\n data >>>= (8 - _bitLength);\n _bitBuffer = 0;\n _bitLength = 0;\n }\n\n _bitBuffer = (data << _bitLength) | _bitBuffer;\n _bitLength = _bitLength + length;\n };\n\n _this.flush = function() {\n if (_bitLength > 0) {\n _out.writeByte(_bitBuffer);\n }\n };\n\n return _this;\n };\n\n var getLZWRaster = function(lzwMinCodeSize) {\n\n var clearCode = 1 << lzwMinCodeSize;\n var endCode = (1 << lzwMinCodeSize) + 1;\n var bitLength = lzwMinCodeSize + 1;\n\n // Setup LZWTable\n var table = lzwTable();\n\n for (var i = 0; i < clearCode; i += 1) {\n table.add(String.fromCharCode(i) );\n }\n table.add(String.fromCharCode(clearCode) );\n table.add(String.fromCharCode(endCode) );\n\n var byteOut = byteArrayOutputStream();\n var bitOut = bitOutputStream(byteOut);\n\n // clear code\n bitOut.write(clearCode, bitLength);\n\n var dataIndex = 0;\n\n var s = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n while (dataIndex < _data.length) {\n\n var c = String.fromCharCode(_data[dataIndex]);\n dataIndex += 1;\n\n if (table.contains(s + c) ) {\n\n s = s + c;\n\n } else {\n\n bitOut.write(table.indexOf(s), bitLength);\n\n if (table.size() < 0xfff) {\n\n if (table.size() == (1 << bitLength) ) {\n bitLength += 1;\n }\n\n table.add(s + c);\n }\n\n s = c;\n }\n }\n\n bitOut.write(table.indexOf(s), bitLength);\n\n // end code\n bitOut.write(endCode, bitLength);\n\n bitOut.flush();\n\n return byteOut.toByteArray();\n };\n\n var lzwTable = function() {\n\n var _map = {};\n var _size = 0;\n\n var _this = {};\n\n _this.add = function(key) {\n if (_this.contains(key) ) {\n throw 'dup key:' + key;\n }\n _map[key] = _size;\n _size += 1;\n };\n\n _this.size = function() {\n return _size;\n };\n\n _this.indexOf = function(key) {\n return _map[key];\n };\n\n _this.contains = function(key) {\n return typeof _map[key] != 'undefined';\n };\n\n return _this;\n };\n\n return _this;\n };\n\n var createDataURL = function(width, height, getPixel) {\n var gif = gifImage(width, height);\n for (var y = 0; y < height; y += 1) {\n for (var x = 0; x < width; x += 1) {\n gif.setPixel(x, y, getPixel(x, y) );\n }\n }\n\n var b = byteArrayOutputStream();\n gif.write(b);\n\n var base64 = base64EncodeOutputStream();\n var bytes = b.toByteArray();\n for (var i = 0; i < bytes.length; i += 1) {\n base64.writeByte(bytes[i]);\n }\n base64.flush();\n\n return 'data:image/gif;base64,' + base64;\n };\n\n //---------------------------------------------------------------------\n // returns qrcode function.\n\n return qrcode;\n}();\n\n// multibyte support\n!function() {\n\n qrcode.stringToBytesFuncs['UTF-8'] = function(s) {\n // http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\n function toUTF8Array(str) {\n var utf8 = [];\n for (var i=0; i < str.length; i++) {\n var charcode = str.charCodeAt(i);\n if (charcode < 0x80) utf8.push(charcode);\n else if (charcode < 0x800) {\n utf8.push(0xc0 | (charcode >> 6),\n 0x80 | (charcode & 0x3f));\n }\n else if (charcode < 0xd800 || charcode >= 0xe000) {\n utf8.push(0xe0 | (charcode >> 12),\n 0x80 | ((charcode>>6) & 0x3f),\n 0x80 | (charcode & 0x3f));\n }\n // surrogate pair\n else {\n i++;\n // UTF-16 encodes 0x10000-0x10FFFF by\n // subtracting 0x10000 and splitting the\n // 20 bits of 0x0-0xFFFFF into two halves\n charcode = 0x10000 + (((charcode & 0x3ff)<<10)\n | (str.charCodeAt(i) & 0x3ff));\n utf8.push(0xf0 | (charcode >>18),\n 0x80 | ((charcode>>12) & 0x3f),\n 0x80 | ((charcode>>6) & 0x3f),\n 0x80 | (charcode & 0x3f));\n }\n }\n return utf8;\n }\n return toUTF8Array(s);\n };\n\n}();\n\n(function (factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n }\n}(function () {\n return qrcode;\n}));\n","type TypeNumber =\n | 0\n | 1\n | 2\n | 3\n | 4\n | 5\n | 6\n | 7\n | 8\n | 9\n | 10\n | 11\n | 12\n | 13\n | 14\n | 15\n | 16\n | 17\n | 18\n | 19\n | 20\n | 21\n | 22\n | 23\n | 24\n | 25\n | 26\n | 27\n | 28\n | 29\n | 30\n | 31\n | 32\n | 33\n | 34\n | 35\n | 36\n | 37\n | 38\n | 39\n | 40;\n\nconst TypeNumber = Array(41)\n .fill(0)\n .map((_, i) => i) as unknown as {\n [P in TypeNumber]: P;\n};\n\nexport { TypeNumber };\n\nexport enum ErrorCorrectionLevel {\n L = \"L\",\n M = \"M\",\n Q = \"Q\",\n H = \"H\"\n}\n\nexport enum Mode {\n numeric = \"Numeric\",\n alphanumeric = \"Alphanumeric\",\n byte = \"Byte\",\n kanji = \"Kanji\",\n unicode = \"Unicode\"\n}\n\nexport interface QRCode {\n addData(data: string, mode?: Mode.alphanumeric | Mode.byte | Mode.kanji | Mode.numeric): void;\n make(): void;\n getModuleCount(): number;\n isDark(row: number, col: number): boolean;\n}\n","const isObject = (obj: Record<string, unknown> | undefined): boolean =>\n !!obj && typeof obj === \"object\" && !Array.isArray(obj);\n\nexport type UnknownObject =\n | {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n }\n | undefined;\n\nexport function mergeDeep(target: UnknownObject, ...sources: UnknownObject[]): UnknownObject {\n if (!sources.length) return target;\n const source = sources.shift();\n if (source === undefined || !isObject(target) || !isObject(source)) return target;\n target = { ...target };\n Object.keys(source).forEach((key: string): void => {\n const targetValue = target[key];\n const sourceValue = source[key];\n\n if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {\n target[key] = sourceValue;\n } else if (isObject(targetValue) && isObject(sourceValue)) {\n target[key] = mergeDeep(Object.assign({}, targetValue), sourceValue);\n } else {\n target[key] = sourceValue;\n }\n });\n\n return mergeDeep(target, ...sources);\n}\n","export enum GradientType {\n radial = \"radial\",\n linear = \"linear\"\n}\n\nexport type Gradient = {\n /**\n * Type of gradient spread\n *\n * @default GradientType.linear\n */\n type: `${GradientType}`;\n /**\n * Rotation of gradient (in radians, Math.PI === 180 degrees)\n *\n * @default 0\n */\n rotation?: number;\n /** Gradient colors. */\n colorStops: {\n /** Position of color in gradient range */\n offset: number;\n /** Color of stop in gradient range */\n color: string;\n }[];\n};\n\nexport function sanitizeGradient(gradient: Gradient): Gradient {\n const newGradient = { ...gradient };\n\n if (!newGradient.colorStops || !newGradient.colorStops.length) {\n throw \"Field 'colorStops' is required in gradient\";\n }\n\n if (newGradient.rotation) {\n newGradient.rotation = Number(newGradient.rotation);\n } else {\n newGradient.rotation = 0;\n }\n\n newGradient.colorStops = newGradient.colorStops.map((colorStop: { offset: number; color: string }) => ({\n ...colorStop,\n offset: Number(colorStop.offset)\n }));\n\n return newGradient;\n}\n","import { browserImageTools } from \"../tools/browser-image-tools.js\";\nimport { ErrorCorrectionLevel, TypeNumber } from \"../types/qrcode.js\";\nimport { Gradient, sanitizeGradient } from \"./gradient.js\";\n\nexport enum DotType {\n dot = \"dot\",\n randomDot = \"random-dot\",\n rounded = \"rounded\",\n extraRounded = \"extra-rounded\",\n verticalLine = \"vertical-line\",\n horizontalLine = \"horizontal-line\",\n classy = \"classy\",\n classyRounded = \"classy-rounded\",\n square = \"square\",\n smallSquare = \"small-square\",\n diamond = \"diamond\"\n}\n\nexport enum CornerDotType {\n dot = \"dot\",\n square = \"square\",\n heart = \"heart\",\n extraRounded = \"extra-rounded\",\n classy = \"classy\",\n outpoint = \"outpoint\",\n inpoint = \"inpoint\"\n}\n\nexport enum CornerSquareType {\n dot = \"dot\",\n square = \"square\",\n extraRounded = \"extra-rounded\",\n classy = \"classy\",\n outpoint = \"outpoint\",\n inpoint = \"inpoint\"\n}\n\nexport enum ShapeType {\n square = \"square\",\n circle = \"circle\"\n}\n\nexport interface Options {\n /** Use a custom DOM domplementation */\n document: Document;\n /** Use a custom image fetching & serializaton implementation */\n imageTools?: typeof browserImageTools;\n /** @ignore */\n width: number;\n /** @ignore */\n height: number;\n /** The data will be encoded in the QR code */\n data: string;\n /** The image will be copied to the center of the QR code */\n image?: string | Buffer | Blob;\n /**\n * QR code shape\n *\n * @default ShapeType.square\n */\n shape: `${ShapeType}`;\n /** Options will be passed to `qrcode-generator` lib */\n qrOptions: {\n typeNumber: TypeNumber;\n mode?: `${Mode}`;\n /** @default ErrorCorrectionLevel.Q */\n errorCorrectionLevel: `${ErrorCorrectionLevel}`;\n };\n imageOptions: {\n /**\n * Hide all dots covered by the image\n *\n * @default true\n */\n hideBackgroundDots: boolean;\n /**\n * Coefficient of the image size\n *\n * @default 0.4\n */\n imageSize: number;\n /**\n * Margin of the image (in blocks)\n *\n * @default 0\n */\n margin: number;\n /**\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLImageElement/crossOrigin)\n */\n crossOrigin?: string;\n };\n dotsOptions: {\n /**\n * QR dot size (in pixels)\n *\n * @default 10\n */\n size: number;\n /**\n * Color of QR dots\n *\n * @default \"#000\"\n */\n color: string;\n /** Gradient of QR dots */\n gradient?: Gradient;\n /**\n * Style of QR dots\n *\n * @default DotType.square\n */\n type: `${DotType}`;\n };\n /** Corners Square options, omitted values match dots */\n cornersSquareOptions?: {\n /** Color of Corners Square */\n color?: string;\n /** Gradient of Corners Square */\n gradient?: Gradient;\n /** Style of Corners Square */\n type?: `${CornerSquareType}`;\n };\n /** Corners Dot options, omitted values match squares */\n cornersDotOptions?: {\n /** Color of Corners Dot */\n color?: string;\n /** Gradient of Corners Dot */\n gradient?: Gradient;\n /** Style of Corners Dot */\n type?: `${CornerDotType}`;\n };\n /** QR background styling options, false to disable background */\n backgroundOptions?:\n | {\n /** Background roundnes, from 0 (square) to 1 (circle) */\n round?: number;\n /** Background color */\n color?: string;\n /** Background Gradient */\n gradient?: Gradient;\n /**\n * Margin (in blocks) between background and the QR code\n *\n * @default 0\n */\n margin?: number;\n }\n | false;\n /** `import { stringToBytesFuncs } from \"@liquid-js/qr-code-styling/kanji\";` to add Kanji support */\n stringToBytesFuncs?: { [encoding: string]: (s: string) => number[] };\n}\n\nexport const defaultOptions: Options = {\n document: undefined as never,\n shape: ShapeType.square,\n width: undefined as never,\n height: undefined as never,\n data: \"\",\n qrOptions: {\n typeNumber: TypeNumber[0],\n mode: undefined,\n errorCorrectionLevel: ErrorCorrectionLevel.Q\n },\n imageOptions: {\n hideBackgroundDots: true,\n imageSize: 0.4,\n crossOrigin: undefined,\n margin: 0\n },\n dotsOptions: {\n type: DotType.square,\n color: \"#000\",\n size: 10\n }\n};\n\nexport function sanitizeOptions(options: Options): Options {\n const newOptions = { ...options };\n\n newOptions.imageOptions = {\n ...newOptions.imageOptions,\n hideBackgroundDots: Boolean(newOptions.imageOptions.hideBackgroundDots),\n imageSize: Math.min(1, Number(newOptions.imageOptions.imageSize)) || 1,\n margin: Number(newOptions.imageOptions.margin)\n };\n\n newOptions.dotsOptions = {\n ...newOptions.dotsOptions\n };\n if (newOptions.dotsOptions.gradient) {\n newOptions.dotsOptions.gradient = sanitizeGradient(newOptions.dotsOptions.gradient);\n }\n // Ensure integer dot size\n newOptions.dotsOptions.size = Math.round(Math.max(0, newOptions.dotsOptions.size) || 10);\n\n if (newOptions.cornersSquareOptions) {\n newOptions.cornersSquareOptions = {\n ...newOptions.cornersSquareOptions\n };\n if (newOptions.cornersSquareOptions.gradient) {\n newOptions.cornersSquareOptions.gradient = sanitizeGradient(newOptions.cornersSquareOptions.gradient);\n }\n }\n\n if (newOptions.cornersDotOptions) {\n newOptions.cornersDotOptions = {\n ...newOptions.cornersDotOptions\n };\n if (newOptions.cornersDotOptions.gradient) {\n newOptions.cornersDotOptions.gradient = sanitizeGradient(newOptions.cornersDotOptions.gradient);\n }\n }\n\n if (newOptions.backgroundOptions) {\n newOptions.backgroundOptions = {\n ...newOptions.backgroundOptions\n };\n if (newOptions.backgroundOptions.gradient) {\n newOptions.backgroundOptions.gradient = sanitizeGradient(newOptions.backgroundOptions.gradient);\n }\n }\n\n if (!newOptions.document) newOptions.document = document;\n\n return newOptions;\n}\n","import { ErrorCorrectionLevel, Mode } from \"../types/qrcode.js\";\n\nexport const ErrorCorrectionPercents = {\n [ErrorCorrectionLevel.L]: 0.07,\n [ErrorCorrectionLevel.M]: 0.15,\n [ErrorCorrectionLevel.Q]: 0.25,\n [ErrorCorrectionLevel.H]: 0.3\n};\n\nexport function getMode(data: string): Mode {\n switch (true) {\n case /^[0-9]*$/.test(data):\n return Mode.numeric;\n case /^[0-9A-Z $%*+\\-./:]*$/.test(data):\n return Mode.alphanumeric;\n // eslint-disable-next-line no-control-regex\n case /[^\\u0000-\\u00ff]/.test(data):\n return Mode.unicode;\n default:\n return Mode.byte;\n }\n}\n","const rx = /\\.?0+$/;\n\nexport function numToAttr(value: number) {\n return value.toFixed(7).replace(rx, \"\");\n}\n\nexport function svgPath(strings: TemplateStringsArray, ...values: unknown[]) {\n return strings\n .reduce((t, v, i) => {\n let p: unknown = \"\";\n if (i) p = values[i - 1];\n if (typeof p == \"number\") p = numToAttr(p);\n return `${t}${p}${v}`;\n }, \"\")\n .trim()\n .replace(/[\\s\\n\\r]+/gim, \" \");\n}\n","import { BasicFigureDrawArgs, DrawArgs, RotateFigureArgs } from \"../types/helper.js\";\nimport { CornerDotType } from \"../utils/options.js\";\nimport { numToAttr, svgPath } from \"../utils/svg.js\";\n\nexport class QRCornerDot {\n private _element?: SVGElement;\n\n get element() {\n return this._element;\n }\n\n constructor(\n private readonly type: `${CornerDotType}`,\n private readonly document: Document\n ) {}\n\n draw(args: DrawArgs): void {\n const type = this.type;\n let drawFunction;\n\n switch (type) {\n case CornerDotType.square:\n drawFunction = this.drawSquare;\n break;\n case CornerDotType.heart:\n drawFunction = this.drawHeart;\n break;\n case CornerDotType.extraRounded:\n drawFunction = this.drawRounded;\n break;\n case CornerDotType.classy:\n drawFunction = this.drawClassy;\n break;\n case CornerDotType.inpoint:\n drawFunction = this.drawInpoint;\n break;\n case CornerDotType.outpoint:\n drawFunction = this.drawOutpoint;\n break;\n case CornerDotType.dot:\n default:\n drawFunction = this.drawDot;\n }\n\n drawFunction.call(this, args);\n }\n\n private rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\n const cx = x + size / 2;\n const cy = y + size / 2;\n\n draw();\n this._element?.setAttribute(\"transform\", `rotate(${numToAttr((180 * rotation) / Math.PI)},${cx},${cy})`);\n }\n\n private basicDot(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\n this._element.setAttribute(\"cx\", numToAttr(x + size / 2));\n this._element.setAttribute(\"cy\", numToAttr(y + size / 2));\n this._element.setAttribute(\"r\", numToAttr(size / 2));\n }\n });\n }\n\n private basicSquare(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n this._element.setAttribute(\"x\", numToAttr(x));\n this._element.setAttribute(\"y\", numToAttr(y));\n this._element.setAttribute(\"width\", numToAttr(size));\n this._element.setAttribute(\"height\", numToAttr(size));\n }\n });\n }\n\n private basicHeart(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n const path = [\n \"M\",\n 1,\n 0.3262506,\n \"c\",\n 0,\n 0.0383376,\n -0.0064626,\n 0.0758377,\n -0.0193751,\n 0.1125001,\n \"s\",\n -0.0356247,\n 0.076875,\n -0.0681248,\n 0.1206252,\n \"c\",\n -0.0325,\n 0.0437499,\n -0.0762503,\n 0.0931247,\n -0.1312501,\n 0.1481249,\n \"C\",\n 0.7262502,\n 0.7625008,\n 0.6566626,\n 0.8279132,\n 0.5724999,\n 0.9037505,\n \"L\",\n 0.5,\n 0.9687506,\n \"L\",\n 0.4275001,\n 0.9037505,\n \"C\",\n 0.3433374,\n 0.8279132,\n 0.2737499,\n 0.7625005,\n 0.21875,\n 0.7075007,\n \"C\",\n 0.1637501,\n 0.6525008,\n 0.1199999,\n 0.6031258,\n 0.0874999,\n 0.5593758,\n \"S\",\n 0.0322876,\n 0.4754133,\n 0.0193751,\n 0.4387506,\n \"S\",\n 0,\n 0.3645881,\n 0,\n 0.3262506,\n \"c\",\n 0,\n -0.0783374,\n 0.0262499,\n -0.1437498,\n 0.07875,\n -0.1962499,\n \"s\",\n 0.1179124,\n -0.07875,\n 0.1962499,\n -0.07875,\n \"c\",\n 0.0433376,\n 0,\n 0.0845875,\n 0.0091625,\n 0.12375,\n 0.0274999,\n \"S\",\n 0.4716623,\n 0.1229131,\n 0.5,\n 0.1562506,\n \"c\",\n 0.0283374,\n -0.0333375,\n 0.0620874,\n -0.0591625,\n 0.1012502,\n -0.0775,\n \"c\",\n 0.0391627,\n -0.0183375,\n 0.0804126,\n -0.0274999,\n 0.12375,\n -0.0274999,\n \"c\",\n 0.0783374,\n 0,\n 0.1437497,\n 0.0262499,\n 0.1962501,\n 0.07875,\n \"S\",\n 1,\n 0.2479131,\n 1,\n 0.3262506,\n \"z\"\n ];\n let move = false;\n let i = 0;\n this._element.setAttribute(\n \"d\",\n path\n .map((v) => {\n if (typeof v == \"string\") {\n i = 0;\n move = v.toUpperCase() == v;\n return v;\n }\n i++;\n v = v * size;\n if (move) {\n v += i % 2 == 1 ? x : y;\n }\n return numToAttr(v);\n })\n .join(\" \")\n );\n }\n\n private basicRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n this._element.setAttribute(\"x\", numToAttr(x));\n this._element.setAttribute(\"y\", numToAttr(y));\n this._element.setAttribute(\"width\", numToAttr(size));\n this._element.setAttribute(\"height\", numToAttr(size));\n this._element.setAttribute(\"rx\", numToAttr(size / 4));\n this._element.setAttribute(\"ry\", numToAttr(size / 4));\n }\n });\n }\n\n private basicClassy(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y + 2.5 * dotSize}\n v ${2 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}\n h ${4.5 * dotSize}\n v ${-4.5 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}\n h ${-2 * dotSize}\n H ${x}\n z`\n );\n }\n });\n }\n\n private basicInpoint(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y + dotSize / 2}\n v ${dotSize / 4}\n a ${dotSize / 4}, ${dotSize / 4} 0 0 0 ${dotSize / 4}, ${dotSize / 4}\n h ${(dotSize / 4) * 3}\n v ${(-dotSize / 4) * 3}\n a ${dotSize / 4}, ${dotSize / 4} 0 0 0 ${-dotSize / 4}, ${-dotSize / 4}\n h ${-dotSize / 2}\n a ${dotSize / 4}, ${dotSize / 4} 0 0 0 ${-dotSize / 4}, ${dotSize / 4}\n z`\n );\n }\n });\n }\n\n private drawDot({ x, y, size, rotation }: DrawArgs): void {\n this.basicDot({ x, y, size, rotation });\n }\n\n private drawSquare({ x, y, size, rotation }: DrawArgs): void {\n this.basicSquare({ x, y, size, rotation });\n }\n\n private drawHeart({ x, y, size, rotation }: DrawArgs): void {\n this.basicHeart({ x, y, size, rotation });\n }\n\n private drawRounded({ x, y, size, rotation }: DrawArgs): void {\n this.basicRounded({ x, y, size, rotation });\n }\n\n private drawClassy({ x, y, size, rotation }: DrawArgs): void {\n this.basicClassy({ x, y, size, rotation });\n }\n\n private drawInpoint({ x, y, size, rotation }: DrawArgs): void {\n this.basicInpoint({ x, y, size, rotation });\n }\n\n private drawOutpoint({ x, y, size, rotation }: DrawArgs): void {\n this.basicInpoint({ x, y, size, rotation: (rotation || 0) + Math.PI });\n }\n}\n","import { BasicFigureDrawArgs, DrawArgs, RotateFigureArgs } from \"../types/helper.js\";\nimport { CornerSquareType } from \"../utils/options.js\";\nimport { numToAttr, svgPath } from \"../utils/svg.js\";\n\nexport class QRCornerSquare {\n private _element?: SVGElement;\n\n get element() {\n return this._element;\n }\n\n constructor(\n private readonly type: `${CornerSquareType}`,\n private readonly document: Document\n ) {}\n\n draw(args: DrawArgs): void {\n const type = this.type;\n let drawFunction;\n\n switch (type) {\n case CornerSquareType.square:\n drawFunction = this.drawSquare;\n break;\n case CornerSquareType.extraRounded:\n drawFunction = this.drawExtraRounded;\n break;\n case CornerSquareType.classy:\n drawFunction = this.drawClassy;\n break;\n case CornerSquareType.outpoint:\n drawFunction = this.drawOutpoint;\n break;\n case CornerSquareType.inpoint:\n drawFunction = this.drawInpoint;\n break;\n case CornerSquareType.dot:\n default:\n drawFunction = this.drawDot;\n }\n\n drawFunction.call(this, args);\n }\n\n private rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\n const cx = x + size / 2;\n const cy = y + size / 2;\n\n draw();\n this._element?.setAttribute(\"transform\", `rotate(${numToAttr((180 * rotation) / Math.PI)},${cx},${cy})`);\n }\n\n private basicDot(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x + size / 2} ${y}\n a ${size / 2} ${size / 2} 0 1 0 0.1 0\n z\n m 0 ${dotSize}\n a ${size / 2 - dotSize} ${size / 2 - dotSize} 0 1 1 -0.1 0\n Z`\n );\n }\n });\n }\n\n private basicSquare(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y}\n v ${size}\n h ${size}\n v ${-size}\n z\n M ${x + dotSize} ${y + dotSize}\n h ${size - 2 * dotSize}\n v ${size - 2 * dotSize}\n h ${-size + 2 * dotSize}\n z`\n );\n }\n });\n }\n\n private basicExtraRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y + 2.5 * dotSize}\n v ${2 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}\n h ${2 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${-dotSize * 2.5}\n v ${-2 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}\n h ${-2 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${dotSize * 2.5}\n z\n M ${x + 2.5 * dotSize} ${y + dotSize}\n h ${2 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}\n v ${2 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${dotSize * 1.5}\n h ${-2 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}\n v ${-2 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${-dotSize * 1.5}\n z`\n );\n }\n });\n }\n\n private basicClassy(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y + 2.5 * dotSize}\n v ${2 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}\n h ${4.5 * dotSize}\n v ${-4.5 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}\n h ${-2 * dotSize}\n H ${x}\n z\n M ${x + 2.5 * dotSize} ${y + dotSize}\n h ${2 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}\n v ${3.5 * dotSize}\n h ${-3.5 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}\n v ${-3.5 * dotSize}\n z`\n );\n }\n });\n }\n\n private basicInpoint(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y + 2.5 * dotSize}\n v ${2 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}\n h ${4.5 * dotSize}\n v ${-4.5 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}\n h ${-2 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${dotSize * 2.5}\n z\n M ${x + 2.5 * dotSize} ${y + dotSize}\n h ${2 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}\n v ${3.5 * dotSize}\n h ${-3.5 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}\n v ${-2 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${-dotSize * 1.5}\n z`\n );\n }\n });\n }\n\n private drawDot({ x, y, size, rotation }: DrawArgs): void {\n this.basicDot({ x, y, size, rotation });\n }\n\n private drawSquare({ x, y, size, rotation }: DrawArgs): void {\n this.basicSquare({ x, y, size, rotation });\n }\n\n private drawExtraRounded({ x, y, size, rotation }: DrawArgs): void {\n this.basicExtraRounded({ x, y, size, rotation });\n }\n\n private drawClassy({ x, y, size, rotation }: DrawArgs): void {\n this.basicClassy({ x, y, size, rotation });\n }\n\n private drawInpoint({ x, y, size, rotation }: DrawArgs): void {\n this.basicInpoint({ x, y, size, rotation });\n }\n\n private drawOutpoint({ x, y, size, rotation }: DrawArgs): void {\n this.basicInpoint({ x, y, size, rotation: (rotation || 0) + Math.PI });\n }\n}\n","import { BasicFigureDrawArgs, DrawArgs, RotateFigureArgs } from \"../types/helper.js\";\nimport { DotType } from \"../utils/options.js\";\nimport { numToAttr, svgPath } from \"../utils/svg.js\";\n\nexport class QRDot {\n private _element?: SVGElement;\n\n get element() {\n return this._element;\n }\n\n constructor(\n private readonly type: `${DotType}`,\n private readonly document: Document\n ) {}\n\n draw(args: DrawArgs): void {\n const type = this.type;\n let drawFunction;\n\n switch (type) {\n case DotType.dot:\n drawFunction = this.drawDot;\n break;\n case DotType.randomDot:\n drawFunction = this.drawRandomDot;\n break;\n case DotType.classy:\n drawFunction = this.drawClassy;\n break;\n case DotType.classyRounded:\n drawFunction = this.drawClassyRounded;\n break;\n case DotType.rounded:\n drawFunction = this.drawRounded;\n break;\n case DotType.verticalLine:\n drawFunction = this.drawVerticalLine;\n break;\n case DotType.horizontalLine:\n drawFunction = this.drawHorizontalLine;\n break;\n case DotType.extraRounded:\n drawFunction = this.drawExtraRounded;\n break;\n case DotType.diamond:\n drawFunction = this.drawDiamond;\n break;\n case DotType.smallSquare:\n drawFunction = this.drawSmallSquare;\n break;\n case DotType.square:\n default:\n drawFunction = this.drawSquare;\n }\n\n drawFunction.call(this, args);\n }\n\n private rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\n const cx = x + size / 2;\n const cy = y + size / 2;\n\n draw();\n this._element?.setAttribute(\"transform\", `rotate(${numToAttr((180 * rotation) / Math.PI)},${cx},${cy})`);\n }\n\n private basicDot(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\n this._element.setAttribute(\"cx\", numToAttr(x + size / 2));\n this._element.setAttribute(\"cy\", numToAttr(y + size / 2));\n this._element.setAttribute(\"r\", numToAttr(size / 2));\n }\n });\n }\n\n private basicSquare(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n this._element.setAttribute(\"x\", numToAttr(x));\n this._element.setAttribute(\"y\", numToAttr(y));\n this._element.setAttribute(\"width\", numToAttr(size));\n this._element.setAttribute(\"height\", numToAttr(size));\n }\n });\n }\n\n //if rotation === 0 - right side is rounded\n private basicSideRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y}\n v ${size}\n h ${size / 2}\n a ${size / 2} ${size / 2}, 0, 0, 0, 0 ${-size}\n z`\n );\n }\n });\n }\n\n //if rotation === 0 - top right corner is rounded\n private basicCornerRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y}\n v ${size}\n h ${size}\n v ${-size / 2}\n a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}\n z`\n );\n }\n });\n }\n\n //if rotation === 0 - top right corner is rounded\n private basicCornerExtraRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y}\n v ${size}\n h ${size}\n a ${size} ${size}, 0, 0, 0, ${-size} ${-size}\n z`\n );\n }\n });\n }\n\n //if rotation === 0 - left bottom and right top corners are rounded\n private basicCornersRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y}\n v ${size / 2}\n a ${size / 2} ${size / 2}, 0, 0, 0, ${size / 2} ${size / 2}\n h ${size / 2}\n v ${-size / 2}\n a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}\n z`\n );\n }\n });\n }\n\n private drawDot({ x, y, size }: DrawArgs): void {\n this.basicDot({ x, y, size, rotation: 0 });\n }\n\n private drawRandomDot({ x, y, size }: DrawArgs): void {\n const randomFactor = Math.random() * (1 - 0.75) + 0.75;\n this.basicDot({ x, y, size: size * randomFactor, rotation: 0 });\n }\n\n private drawSquare({ x, y, size }: DrawArgs): void {\n this.basicSquare({ x, y, size, rotation: 0 });\n }\n\n private drawSmallSquare({ x, y, size }: DrawArgs): void {\n const originalSize = size;\n\n size = originalSize * 0.7;\n x = x + originalSize * 0.15;\n y = y + originalSize * 0.15;\n\n this.basicSquare({ x, y, size, rotation: 0 });\n }\n\n private drawDiamond({ x, y, size }: DrawArgs): void {\n this.basicSquare({ x, y, size, rotation: Math.PI / 4 });\n }\n\n private drawRounded({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this.basicDot({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\n this.basicSquare({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount === 2) {\n let rotation = 0;\n\n if (leftNeighbor && topNeighbor) {\n rotation = Math.PI / 2;\n } else if (topNeighbor && rightNeighbor) {\n rotation = Math.PI;\n } else if (rightNeighbor && bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this.basicCornerRounded({ x, y, size, rotation });\n return;\n }\n\n if (neighborsCount === 1) {\n let rotation = 0;\n\n if (topNeighbor) {\n rotation = Math.PI / 2;\n } else if (rightNeighbor) {\n rotation = Math.PI;\n } else if (bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this.basicSideRounded({ x, y, size, rotation });\n return;\n }\n }\n\n private drawVerticalLine({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (\n neighborsCount === 0 ||\n (leftNeighbor && !(topNeighbor || bottomNeighbor)) ||\n (rightNeighbor && !(topNeighbor || bottomNeighbor))\n ) {\n this.basicDot({ x, y, size, rotation: 0 });\n return;\n }\n\n if (topNeighbor && bottomNeighbor) {\n this.basicSquare({ x, y, size, rotation: 0 });\n return;\n }\n\n if (topNeighbor && !bottomNeighbor) {\n const rotation = Math.PI / 2;\n this.basicSideRounded({ x, y, size, rotation });\n return;\n }\n\n if (bottomNeighbor && !topNeighbor) {\n const rotation = -Math.PI / 2;\n this.basicSideRounded({ x, y, size, rotation });\n return;\n }\n }\n\n private drawHorizontalLine({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (\n neighborsCount === 0 ||\n (topNeighbor && !(leftNeighbor || rightNeighbor)) ||\n (bottomNeighbor && !(leftNeighbor || rightNeighbor))\n ) {\n this.basicDot({ x, y, size, rotation: 0 });\n return;\n }\n\n if (leftNeighbor && rightNeighbor) {\n this.basicSquare({ x, y, size, rotation: 0 });\n return;\n }\n\n if (leftNeighbor && !rightNeighbor) {\n const rotation = 0;\n this.basicSideRounded({ x, y, size, rotation });\n return;\n }\n\n if (rightNeighbor && !leftNeighbor) {\n const rotation = Math.PI;\n this.basicSideRounded({ x, y, size, rotation });\n return;\n }\n }\n\n private drawExtraRounded({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this.basicDot({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\n this.basicSquare({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount === 2) {\n let rotation = 0;\n\n if (leftNeighbor && topNeighbor) {\n rotation = Math.PI / 2;\n } else if (topNeighbor && rightNeighbor) {\n rotation = Math.PI;\n } else if (rightNeighbor && bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this.basicCornerExtraRounded({ x, y, size, rotation });\n return;\n }\n\n if (neighborsCount === 1) {\n let rotation = 0;\n\n if (topNeighbor) {\n rotation = Math.PI / 2;\n } else if (rightNeighbor) {\n rotation = Math.PI;\n } else if (bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this.basicSideRounded({ x, y, size, rotation });\n return;\n }\n }\n\n private drawClassy({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this.basicCornersRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n if (!leftNeighbor && !topNeighbor) {\n this.basicCornerRounded({ x, y, size, rotation: -Math.PI / 2 });\n return;\n }\n\n if (!rightNeighbor && !bottomNeighbor) {\n this.basicCornerRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n this.basicSquare({ x, y, size, rotation: 0 });\n }\n\n private drawClassyRounded({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this.basicCornersRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n if (!leftNeighbor && !topNeighbor) {\n this.basicCornerExtraRounded({ x, y, size, rotation: -Math.PI / 2 });\n return;\n }\n\n if (!rightNeighbor && !bottomNeighbor) {\n this.basicCornerExtraRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n this.basicSquare({ x, y, size, rotation: 0 });\n }\n}\n","export const browserImageTools = {\n toDataURL(url: string | Buffer | Blob): Promise<string> {\n if (typeof url == \"string\" && url.startsWith(\"data:\")) return Promise.resolve(url);\n return new Promise((resolve, reject) => {\n if (typeof url == \"string\") {\n const xhr = new XMLHttpRequest();\n xhr.onload = function () {\n const reader = new FileReader();\n reader.onloadend = function () {\n resolve(reader.result as string);\n };\n reader.readAsDataURL(xhr.response);\n };\n xhr.onerror = xhr.onabort = xhr.ontimeout = reject;\n xhr.open(\"GET\", url, true);\n xhr.responseType = \"blob\";\n xhr.send();\n } else {\n const reader = new FileReader();\n reader.onloadend = function () {\n resolve(reader.result as string);\n };\n reader.readAsDataURL(url as Blob);\n }\n });\n },\n getSize(src: string | Blob | Buffer, crossOrigin?: string): Promise<{ width: number; height: number }> {\n return new Promise((resolve, reject) => {\n const image = new Image();\n\n if (crossOrigin === \"string\") {\n image.crossOrigin = crossOrigin;\n }\n\n image.onload = (): void => {\n resolve({ width: image.width, height: image.height });\n };\n image.onerror = image.onabort = reject;\n\n if (typeof src == \"string\") image.src = src;\n else\n browserImageTools\n .toDataURL(src)\n .then((url) => (image.src = url))\n .catch(reject);\n });\n }\n};\n","import { QRCornerDot } from \"../figures/corner-dot.js\";\nimport { QRCornerSquare } from \"../figures/corner-square.js\";\nimport { QRDot } from \"../figures/dot.js\";\nimport { browserImageTools } from \"../tools/browser-image-tools.js\";\nimport { Gradient, GradientType } from \"../utils/gradient.js\";\nimport { calculateImageSize } from \"../utils/image.js\";\nimport { Options, ShapeType } from \"../utils/options.js\";\nimport { numToAttr } from \"../utils/svg.js\";\n\nconst squareMask = [\n [1, 1, 1, 1, 1, 1, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 1, 1, 1, 1, 1, 1]\n];\n\nconst dotMask = [\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 1, 1, 1, 0, 0],\n [0, 0, 1, 1, 1, 0, 0],\n [0, 0, 1, 1, 1, 0, 0],\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0, 0, 0]\n];\n\nconst alignmentCount = [\n [35, 49],\n [28, 36],\n [21, 25],\n [14, 16],\n [7, 9],\n [2, 4],\n [1, 1]\n];\n\nexport class QRSVG {\n private _element: SVGElement;\n\n get element() {\n return this._element;\n }\n\n private defs: SVGElement;\n\n private backgroundMask?: SVGElement;\n private backgroundMaskGroup?: SVGElement;\n\n private dotsMask?: SVGElement;\n private dotsMaskGroup?: SVGElement;\n\n private qr?: QRCode;\n private document: Document;\n private imageTools: typeof browserImageTools;\n\n constructor(\n private options: Pick<\n Options,\n | \"width\"\n | \"height\"\n | \"document\"\n | \"imageTools\"\n | \"image\"\n | \"imageOptions\"\n | \"dotsOptions\"\n | \"cornersDotOptions\"\n | \"cornersSquareOptions\"\n | \"backgroundOptions\"\n | \"shape\"\n > & { errorCorrectionPercent: number }\n ) {\n this.document = options.document;\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n const width = numToAttr(options.width);\n const height = numToAttr(options.height);\n this._element.setAttribute(\"width\", width);\n this._element.setAttribute(\"height\", height);\n this._element.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\n this.defs = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"defs\");\n this._element.appendChild(this.defs);\n this.imageTools = options.imageTools || browserImageTools;\n }\n\n get width(): number {\n return this.options.width;\n }\n\n get height(): number {\n return this.options.height;\n }\n\n async drawQR(qr: QRCode): Promise<void> {\n const count = qr.getModuleCount();\n const typeNumber = parseInt(((count - 17) / 4).toFixed(0), 10);\n const dotSize = this.options.dotsOptions.size;\n let drawImageSize = {\n hideXDots: 0,\n hideYDots: 0,\n width: 0,\n height: 0\n };\n\n this.qr = qr;\n\n if (this.options.image) {\n //We need it to get image size\n const size = await this.imageTools.getSize(this.options.image, this.options.imageOptions.crossOrigin);\n const { imageOptions, errorCorrectionPercent } = this.options;\n const coverLevel = imageOptions.imageSize * errorCorrectionPercent;\n const alignment = alignmentCount.find((v) => v[0] <= typeNumber) || [0, 0];\n const maxHiddenDots = Math.floor(coverLevel * (count * count - 3 * 8 * 8 - 2 * (count - 16) - alignment[1] * 25));\n\n drawImageSize = calculateImageSize({\n originalWidth: size.width,\n originalHeight: size.height,\n maxHiddenDots,\n maxHiddenAxisDots: count - 14,\n dotSize,\n margin: imageOptions.margin\n });\n }\n\n this.drawBackground();\n this.drawDots((i: number, j: number): boolean => {\n if (this.options.imageOptions.hideBackgroundDots) {\n if (\n i >= (count - drawImageSize.hideXDots) / 2 &&\n i < (count + drawImageSize.hideXDots) / 2 &&\n j >= (count - drawImageSize.hideYDots) / 2 &&\n j < (count + drawImageSize.hideYDots) / 2\n ) {\n return false;\n }\n }\n\n if (squareMask[i]?.[j] || squareMask[i - count + 7]?.[j] || squareMask[i]?.[j - count + 7]) {\n return false;\n }\n\n if (dotMask[i]?.[j] || dotMask[i - count + 7]?.[j] || dotMask[i]?.[j - count + 7]) {\n return false;\n }\n\n return true;\n });\n this.drawCorners();\n\n if (this.options.image && drawImageSize.width > 0 && drawImageSize.height > 0) {\n await this.drawImage({ width: drawImageSize.width, height: drawImageSize.height, count, dotSize });\n }\n }\n\n drawBackground(): void {\n const element = this._element;\n const options = this.options;\n\n if (element && options.backgroundOptions) {\n const gradientOptions = options.backgroundOptions.gradient;\n const color = options.backgroundOptions.color;\n\n this.createColor({\n options: gradientOptions,\n color: color,\n additionalRotation: 0,\n x: 0,\n y: 0,\n height: options.height,\n width: options.width,\n name: \"background-color\"\n });\n\n const size = Math.min(options.width, options.height);\n const element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n [this.backgroundMask, this.backgroundMaskGroup] = this.createMask(\"mask-background-color\");\n this.defs.appendChild(this.backgroundMask);\n\n element.setAttribute(\"x\", numToAttr((options.width - size) / 2));\n element.setAttribute(\"y\", numToAttr((options.height - size) / 2));\n element.setAttribute(\"width\", numToAttr(size));\n element.setAttribute(\"height\", numToAttr(size));\n element.setAttribute(\"rx\", numToAttr((size / 2) * (options.backgroundOptions.round || 0)));\n\n this.backgroundMaskGroup.appendChild(element);\n }\n }\n\n drawDots(filter?: (i: number, j: number) => boolean): void {\n if (!this.qr) {\n throw \"QR code is not defined\";\n }\n\n const options = this.options;\n const count = this.qr.getModuleCount();\n\n if (count > options.width || count > options.height) {\n throw \"The canvas is too small.\";\n }\n\n const minSize = Math.min(options.width, options.height);\n const dotSize = this.options.dotsOptions.size;\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\n const dot = new QRDot(options.dotsOptions.type, this.document);\n\n [this.dotsMask, this.dotsMaskGroup] = this.createMask(\"mask-dot-color\");\n this.defs.appendChild(this.dotsMask);\n\n for (let i = 0; i < count; i++) {\n for (let j = 0; j < count; j++) {\n if (filter && !filter(i, j)) {\n continue;\n }\n if (!this.qr?.isDark(j, i)) {\n continue;\n }\n\n dot.draw({\n x: xBeginning + i * dotSize,\n y: yBeginning + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean => {\n if (i + xOffset < 0 || j + yOffset < 0 || i + xOffset >= count || j + yOffset >= count) return false;\n if (filter && !filter(i + xOffset, j + yOffset)) return false;\n return !!this.qr && this.qr.isDark(j + yOffset, i + xOffset);\n }\n });\n\n if (dot.element && this.dotsMask) {\n this.dotsMaskGroup.appendChild(dot.element);\n }\n }\n }\n\n let colorX = xBeginning;\n let colorY = yBeginning;\n let colorCount = count;\n\n if (options.shape === ShapeType.circle) {\n const margin = (this.options.backgroundOptions && this.options.backgroundOptions.margin) || 0;\n const additionalDots = Math.floor((minSize / dotSize - count - 2 * margin) / 2);\n const fakeCount = count + additionalDots * 2;\n const xFakeBeginning = xBeginning - additionalDots * dotSize;\n const yFakeBeginning = yBeginning - additionalDots * dotSize;\n colorX = xFakeBeginning;\n colorY = yFakeBeginning;\n colorCount = count + additionalDots * 2;\n const fakeMatrix: number[][] = [];\n const center = Math.floor(fakeCount / 2);\n\n for (let i = 0; i < fakeCount; i++) {\n fakeMatrix[i] = [];\n for (let j = 0; j < fakeCount; j++) {\n if (\n i >= additionalDots - 1 &&\n i <= fakeCount - additionalDots &&\n j >= additionalDots - 1 &&\n j <= fakeCount - additionalDots\n ) {\n fakeMatrix[i][j] = 0;\n continue;\n }\n\n if (Math.sqrt((i - center) * (i - center) + (j - center) * (j - center)) > center) {\n fakeMatrix[i][j] = 0;\n continue;\n }\n\n //Get random dots from QR code to show it outside of QR code\n fakeMatrix[i][j] = this.qr.isDark(\n j - 2 * additionalDots < 0 ? j : j >= count ? j - 2 * additionalDots : j - additionalDots,\n i - 2 * additionalDots < 0 ? i : i >= count ? i - 2 * additionalDots : i - additionalDots\n )\n ? 1\n : 0;\n }\n }\n\n for (let i = 0; i < fakeCount; i++) {\n for (let j = 0; j < fakeCount; j++) {\n if (!fakeMatrix[i][j]) continue;\n\n dot.draw({\n x: xFakeBeginning + i * dotSize,\n y: yFakeBeginning + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean => {\n return !!fakeMatrix[i + xOffset]?.[j + yOffset];\n }\n });\n if (dot.element && this.dotsMask) {\n this.dotsMaskGroup.appendChild(dot.element);\n }\n }\n }\n }\n\n this.createColor({\n options: options.dotsOptions?.gradient,\n color: options.dotsOptions.color,\n additionalRotation: 0,\n x: colorX,\n y: colorY,\n height: colorCount * dotSize,\n width: colorCount * dotSize,\n name: \"dot-color\"\n });\n }\n\n drawCorners(): void {\n if (!this.qr) {\n throw \"QR code is not defined\";\n }\n\n const element = this._element;\n const options = this.options;\n\n if (!element) {\n throw \"Element code is not defined\";\n }\n\n const count = this.qr.getModuleCount();\n const dotSize = this.options.dotsOptions.size;\n const cornersSquareSize = dotSize * 7;\n const cornersDotSize = dotSize * 3;\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\n\n [\n [0, 0, 0],\n [1, 0, Math.PI / 2],\n [0, 1, -Math.PI / 2]\n ].forEach(([column, row, rotation]) => {\n const x = xBeginning + column * dotSize * (count - 7);\n const y = yBeginning + row * dotSize * (count - 7);\n let cornersSquareMask = this.dotsMask;\n let cornersSquareMaskGroup = this.dotsMaskGroup;\n let cornersDotMask = this.dotsMask;\n let cornersDotMaskGroup = this.dotsMaskGroup;\n\n if (options.cornersSquareOptions?.gradient || options.cornersSquareOptions?.color) {\n [cornersSquareMask, cornersSquareMaskGroup] = this.createMask(`mask-corners-square-color-${column}-${row}`);\n this.defs.appendChild(cornersSquareMask);\n cornersDotMask = cornersSquareMask;\n cornersDotMaskGroup = cornersSquareMaskGroup;\n\n this.createColor({\n options: options.cornersSquareOptions?.gradient,\n color: options.cornersSquareOptions?.color,\n additionalRotation: rotation,\n x,\n y,\n height: cornersSquareSize,\n width: cornersSquareSize,\n name: `corners-square-color-${column}-${row}`\n });\n }\n\n if (options.cornersSquareOptions?.type) {\n const cornersSquare = new QRCornerSquare(options.cornersSquareOptions.type, this.document);\n\n cornersSquare.draw({\n x,\n y,\n size: cornersSquareSize,\n rotation\n });\n\n if (cornersSquare.element && cornersSquareMaskGroup) {\n cornersSquareMaskGroup.appendChild(cornersSquare.element);\n }\n } else {\n const dot = new QRDot(options.dotsOptions.type, this.document);\n\n for (let i = 0; i < squareMask.length; i++) {\n for (let j = 0; j < squareMask[i].length; j++) {\n if (!squareMask[i]?.[j]) {\n continue;\n }\n\n dot.draw({\n x: x + i * dotSize,\n y: y + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean => !!squareMask[i + xOffset]?.[j + yOffset]\n });\n\n if (dot.element && cornersSquareMaskGroup) {\n cornersSquareMaskGroup.appendChild(dot.element);\n }\n }\n }\n }\n\n if (options.cornersDotOptions?.gradient || options.cornersDotOptions?.color) {\n [cornersDotMask, cornersDotMaskGroup] = this.createMask(`mask-corners-dot-color-${column}-${row}`);\n this.defs.appendChild(cornersDotMask);\n\n this.createColor({\n options: options.cornersDotOptions?.gradient,\n color: options.cornersDotOptions?.color,\n additionalRotation: rotation,\n x: x + dotSize * 2,\n y: y + dotSize * 2,\n height: cornersDotSize,\n width: cornersDotSize,\n name: `corners-dot-color-${column}-${row}`\n });\n }\n\n if (options.cornersDotOptions?.type) {\n const cornersDot = new QRCornerDot(options.cornersDotOptions.type, this.document);\n\n cornersDot.draw({\n x: x + dotSize * 2,\n y: y + dotSize * 2,\n size: cornersDotSize,\n rotation\n });\n\n if (cornersDot.element && cornersDotMaskGroup) {\n cornersDotMaskGroup.appendChild(cornersDot.element);\n }\n } else {\n const dot = new QRDot(options.dotsOptions.type, this.document);\n\n for (let i = 0; i < dotMask.length; i++) {\n for (let j = 0; j < dotMask[i].length; j++) {\n if (!dotMask[i]?.[j]) {\n continue;\n }\n\n dot.draw({\n x: x + i * dotSize,\n y: y + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean => !!dotMask[i + xOffset]?.[j + yOffset]\n });\n\n if (dot.element && cornersDotMaskGroup) {\n cornersDotMaskGroup.appendChild(dot.element);\n }\n }\n }\n }\n });\n }\n\n async drawImage({\n width,\n height,\n count,\n dotSize\n }: {\n width: number;\n height: number;\n count: number;\n dotSize: number;\n }): Promise<void> {\n const options = this.options;\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\n const margin = options.imageOptions.margin * dotSize;\n const dx = xBeginning + margin + (count * dotSize - width) / 2;\n const dy = yBeginning + margin + (count * dotSize - height) / 2;\n const dw = width - margin * 2;\n const dh = height - margin * 2;\n\n const imageUrl = await this.imageTools.toDataURL(options.image || \"\");\n let image: SVGElement = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"image\");\n image.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"xlink:href\", imageUrl || \"\");\n\n if (imageUrl.startsWith(\"data:image/svg+xml;\")) {\n let data = imageUrl.substring(19);\n const i = data.indexOf(\",\");\n const encoding = data.substring(0, i);\n data = data.substring(i + 1);\n\n switch (encoding) {\n case \"base64\":\n data = typeof atob == \"function\" ? atob(data) : Buffer.from(data, \"base64\").toString(\"utf8\");\n break;\n default:\n data = \"\";\n break;\n }\n\n if (data) {\n const container = new DOMParser().parseFromString(data, \"text/xml\");\n const rootEl = Array.from(container.getElementsByTagName(\"svg\"));\n if (rootEl.length) image = rootEl[0];\n }\n }\n\n image.setAttribute(\"x\", numToAttr(dx));\n image.setAttribute(\"y\", numToAttr(dy));\n image.setAttribute(\"width\", `${numToAttr(dw)}px`);\n image.setAttribute(\"height\", `${numToAttr(dh)}px`);\n\n this._element.appendChild(image);\n }\n\n private createColor({\n options,\n color,\n additionalRotation,\n x,\n y,\n height,\n width,\n name\n }: {\n options?: Gradient;\n color?: string;\n additionalRotation: number;\n x: number;\n y: number;\n height: number;\n width: number;\n name: string;\n }): void {\n const size = width > height ? width : height;\n const rect = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n rect.setAttribute(\"x\", numToAttr(x));\n rect.setAttribute(\"y\", numToAttr(y));\n rect.setAttribute(\"height\", numToAttr(height));\n rect.setAttribute(\"width\", numToAttr(width));\n rect.setAttribute(\"style\", `mask:url(#mask-${name})`);\n\n if (options) {\n let gradient: SVGElement;\n if (options.type === GradientType.radial) {\n gradient = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"radialGradient\");\n gradient.setAttribute(\"id\", name);\n gradient.setAttribute(\"gradientUnits\", \"userSpaceOnUse\");\n gradient.setAttribute(\"fx\", numToAttr(x + width / 2));\n gradient.setAttribute(\"fy\", numToAttr(y + height / 2));\n gradient.setAttribute(\"cx\", numToAttr(x + width / 2));\n gradient.setAttribute(\"cy\", numToAttr(y + height / 2));\n gradient.setAttribute(\"r\", numToAttr(size / 2));\n } else {\n const rotation = ((options.rotation || 0) + additionalRotation) % (2 * Math.PI);\n const positiveRotation = (rotation + 2 * Math.PI) % (2 * Math.PI);\n let x0 = x + width / 2;\n let y0 = y + height / 2;\n let x1 = x + width / 2;\n let y1 = y + height / 2;\n\n if (\n (positiveRotation >= 0 && positiveRotation <= 0.25 * Math.PI) ||\n (positiveRotation > 1.75 * Math.PI && positiveRotation <= 2 * Math.PI)\n ) {\n x0 = x0 - width / 2;\n y0 = y0 - (height / 2) * Math.tan(rotation);\n x1 = x1 + width / 2;\n y1 = y1 + (height / 2) * Math.tan(rotation);\n } else if (positiveRotation > 0.25 * Math.PI && positiveRotation <= 0.75 * Math.PI) {\n y0 = y0 - height / 2;\n x0 = x0 - width / 2 / Math.tan(rotation);\n y1 = y1 + height / 2;\n x1 = x1 + width / 2 / Math.tan(rotation);\n } else if (positiveRotation > 0.75 * Math.PI && positiveRotation <= 1.25 * Math.PI) {\n x0 = x0 + width / 2;\n y0 = y0 + (height / 2) * Math.tan(rotation);\n x1 = x1 - width / 2;\n y1 = y1 - (height / 2) * Math.tan(rotation);\n } else if (positiveRotation > 1.25 * Math.PI && positiveRotation <= 1.75 * Math.PI) {\n y0 = y0 + height / 2;\n x0 = x0 + width / 2 / Math.tan(rotation);\n y1 = y1 - height / 2;\n x1 = x1 - width / 2 / Math.tan(rotation);\n }\n\n gradient = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"linearGradient\");\n gradient.setAttribute(\"id\", name);\n gradient.setAttribute(\"gradientUnits\", \"userSpaceOnUse\");\n gradient.setAttribute(\"x1\", numToAttr(x0));\n gradient.setAttribute(\"y1\", numToAttr(y0));\n gradient.setAttribute(\"x2\", numToAttr(x1));\n gradient.setAttribute(\"y2\", numToAttr(y1));\n }\n\n options.colorStops.forEach(({ offset, color }: { offset: number; color: string }) => {\n const stop = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"stop\");\n stop.setAttribute(\"offset\", `${numToAttr(100 * offset)}%`);\n stop.setAttribute(\"stop-color\", color);\n gradient.appendChild(stop);\n });\n\n rect.setAttribute(\"fill\", `url(#${name})`);\n this.defs.appendChild(gradient);\n } else if (color) {\n rect.setAttribute(\"fill\", color);\n }\n\n this._element.appendChild(rect);\n }\n\n private createMask(id: string) {\n const options = this.options;\n\n const mask = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"mask\");\n mask.setAttribute(\"id\", id);\n mask.setAttribute(\"maskUnits\", \"userSpaceOnUse\");\n mask.setAttribute(\"x\", \"0\");\n mask.setAttribute(\"y\", \"0\");\n mask.setAttribute(\"width\", numToAttr(options.width));\n mask.setAttribute(\"height\", numToAttr(options.height));\n\n const group = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n group.setAttribute(\"fill\", \"#fff\");\n mask.appendChild(group);\n\n return [mask, group];\n }\n}\n","interface ImageSizeOptions {\n originalHeight: number;\n originalWidth: number;\n maxHiddenDots: number;\n maxHiddenAxisDots?: number;\n dotSize: number;\n margin: number;\n}\n\ninterface ImageSizeResult {\n height: number;\n width: number;\n hideYDots: number;\n hideXDots: number;\n}\n\nexport function calculateImageSize({\n originalHeight,\n originalWidth,\n maxHiddenDots,\n maxHiddenAxisDots,\n dotSize,\n margin\n}: ImageSizeOptions): ImageSizeResult {\n const hideDots = { x: 0, y: 0 };\n const imageSize = { x: 0, y: 0 };\n\n if (\n originalHeight <= 0 ||\n originalWidth <= 0 ||\n maxHiddenDots <= 0 ||\n dotSize <= 0 ||\n 4 * margin ** 2 > maxHiddenDots\n ) {\n return {\n height: 0,\n width: 0,\n hideYDots: 0,\n hideXDots: 0\n };\n }\n\n //If set, ensure maxHiddenAxisDots is odd and at least 1\n if (maxHiddenAxisDots && maxHiddenAxisDots % 2 == 0) maxHiddenAxisDots = Math.max(1, maxHiddenAxisDots - 1);\n\n //Determine the bigger and smaller image dimension\n const dimMax = Math.max(originalWidth, originalHeight);\n const dimMin = Math.min(originalWidth, originalHeight);\n\n //Find max image size along the bigger dimension\n let lower = 0,\n upper = (maxHiddenAxisDots || maxHiddenDots) - 2 * margin;\n do {\n const size = lower + (upper - lower) / 2;\n let dotsMax = Math.max(1, Math.ceil(size + 2 * margin));\n if (dotsMax % 2 == 0) dotsMax++;\n let dotsMin = Math.max(1, Math.ceil((size * dimMin) / dimMax + 2 * margin));\n if (dotsMin % 2 == 0) dotsMin++;\n\n if (dotsMax * dotsMin > maxHiddenDots) upper = size;\n else lower = size;\n } while (Math.abs(lower - upper) > 0.001);\n\n //Calculate how many dots the given size corresponds to\n const size = lower;\n let hideMax = Math.max(1, Math.ceil(size + 2 * margin));\n if (hideMax % 2 == 0) hideMax++;\n let hideMin = Math.max(1, Math.ceil((size * dimMin) / dimMax + 2 * margin));\n if (hideMin % 2 == 0) hideMin++;\n\n //Set hidden dots along bigger and smaller dimension to the right axis\n if (originalWidth > originalHeight) {\n hideDots.x = hideMax;\n hideDots.y = hideMin;\n } else {\n hideDots.x = hideMin;\n hideDots.y = hideMax;\n }\n\n //Fit image to the hidden dots\n const maxW = (hideDots.x - 2 * margin) * dotSize;\n const maxH = (hideDots.y - 2 * margin) * dotSize;\n imageSize.x = maxW;\n imageSize.y = (maxW * originalHeight) / originalWidth;\n if (imageSize.y > maxH) {\n imageSize.y = maxH;\n imageSize.x = (maxH * originalWidth) / originalHeight;\n }\n\n return {\n height: Math.round(imageSize.y + 2 * margin * dotSize),\n width: Math.round(imageSize.x + 2 * margin * dotSize),\n hideYDots: hideDots.y,\n hideXDots: hideDots.x\n };\n}\n","import qrcode from \"qrcode-generator\";\nimport { RecursivePartial } from \"../types/helper.js\";\nimport { Mode } from \"../types/qrcode.js\";\nimport { mergeDeep } from \"../utils/merge.js\";\nimport { Options, ShapeType, defaultOptions, sanitizeOptions } from \"../utils/options.js\";\nimport { ErrorCorrectionPercents, getMode } from \"../utils/qrcode.js\";\nimport { QRSVG } from \"./qr-svg.js\";\n\nexport type ExtensionFunction = (svg: SVGElement, options: RecursivePartial<Options>) => void;\n\nexport class QRCodeStyling {\n private options: Options;\n private container?: HTMLElement;\n private qr?: QRCode;\n private extension?: ExtensionFunction;\n private svgDrawingPromise?: Promise<void>;\n private qrSVG?: QRSVG;\n\n get size() {\n if (this.qrSVG)\n return {\n width: this.qrSVG.width,\n height: this.qrSVG.height\n };\n return undefined;\n }\n\n constructor(options?: RecursivePartial<Options>) {\n this.options = options ? sanitizeOptions(mergeDeep(defaultOptions, options) as Options) : defaultOptions;\n this.update();\n }\n\n update(\n /** The same options as for initialization */\n options?: RecursivePartial<Options>\n ): void {\n if (this.container) this.container.innerHTML = \"\";\n\n this.options = options ? sanitizeOptions(mergeDeep(this.options, options) as Options) : this.options;\n\n if (!this.options.data) {\n return;\n }\n\n if (this.options.stringToBytesFuncs) {\n Object.assign(qrcode.stringToBytesFuncs, this.options.stringToBytesFuncs);\n delete this.options.stringToBytesFuncs;\n }\n\n this.qr = qrcode(this.options.qrOptions.typeNumber, this.options.qrOptions.errorCorrectionLevel);\n let mode = this.options.qrOptions.mode || getMode(this.options.data);\n if (mode == Mode.unicode) {\n qrcode.stringToBytes = qrcode.stringToBytesFuncs[\"UTF-8\"];\n mode = Mode.byte;\n } else {\n qrcode.stringToBytes = qrcode.stringToBytesFuncs[\"default\"];\n }\n this.qr.addData(this.options.data, mode);\n this.qr.make();\n\n this.setupSvg();\n\n this.append(this.container);\n }\n\n append(\n /** This container will be used for appending of the QR code */\n container?: HTMLElement\n ): void {\n if (!container) {\n return;\n }\n\n if (this.qrSVG?.element) {\n container.appendChild(this.qrSVG.element);\n }\n\n this.container = container;\n }\n\n /**\n *\n * @example\n *\n * ```js\n * const extension = (svg, options) => {\n * const { width, height } = options;\n * const size = Math.min(width, height);\n * const border = options.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n * const borderAttributes = {\n * fill: \"none\",\n * x: (width - size + 40) / 2,\n * y: (height - size + 40) / 2,\n * width: size - 40,\n * height: size - 40,\n * stroke: \"black\",\n * \"stroke-width\": 40,\n * rx: 100\n * };\n * Object.keys(borderAttributes).forEach((attribute) => {\n * border.setAttribute(attribute, borderAttributes[attribute]);\n * });\n * svg.appendChild(border);\n * };\n * ```\n */\n applyExtension(\n /** Extension is a function that takes svg and previously applied options and modifies an svg */\n extension: ExtensionFunction\n ): void {\n if (!extension) {\n throw \"Extension function should be defined.\";\n }\n\n this.extension = extension;\n this.update();\n }\n\n deleteExtension(): void {\n this.extension = undefined;\n this.update();\n }\n\n async serialize(): Promise<string | undefined> {\n if (!this.qr) throw \"QR code is empty\";\n\n if (!this.qrSVG?.element || !this.svgDrawingPromise) {\n this.setupSvg();\n }\n await this.svgDrawingPromise;\n\n if (!this.qrSVG?.element) {\n return;\n }\n\n const serializer = new XMLSerializer();\n let source = serializer.serializeToString(this.qrSVG.element);\n\n source = '<?xml version=\"1.0\" standalone=\"no\"?>\\r\\n' + source;\n return source;\n }\n\n private setupSvg(): void {\n if (!this.qr) {\n return;\n }\n const count = Math.ceil((this.options.shape == ShapeType.circle ? Math.sqrt(2) : 1) * this.qr.getModuleCount());\n const margin = (this.options.backgroundOptions && this.options.backgroundOptions.margin) || 0;\n const size = Math.ceil(this.options.dotsOptions.size * (count + 2 * margin));\n this.qrSVG = new QRSVG({\n ...this.options,\n width: size,\n height: size,\n errorCorrectionPercent: ErrorCorrectionPercents[this.options.qrOptions.errorCorrectionLevel]\n });\n\n this.svgDrawingPromise = this.qrSVG.drawQR(this.qr).then(() => {\n if (!this.qrSVG?.element) return;\n this.extension?.(this.qrSVG.element, this.options);\n });\n }\n}\n","export interface CanvasOptions {\n width: number;\n height: number;\n margin: number;\n}\n\nexport const defaultCanvasOptions: CanvasOptions = {\n width: 300,\n height: 300,\n margin: 0\n};\n\nexport function sanitizeCanvasOptions(options: CanvasOptions): CanvasOptions {\n const newOptions = { ...options };\n\n newOptions.width = Number(newOptions.width);\n newOptions.height = Number(newOptions.height);\n newOptions.margin = Number(newOptions.margin);\n\n if (newOptions.margin > Math.min(newOptions.width, newOptions.height)) {\n newOptions.margin = Math.min(newOptions.width, newOptions.height);\n }\n\n return newOptions;\n}\n","import { QRCodeStyling } from \"../core/qr-code-styling.js\";\nimport { RecursivePartial } from \"../types/helper.js\";\nimport { CanvasOptions, defaultCanvasOptions, sanitizeCanvasOptions } from \"../utils/canvas-options.js\";\nimport { mergeDeep } from \"../utils/merge.js\";\n\nexport enum FileExtension {\n svg = \"svg\",\n png = \"png\",\n jpeg = \"jpeg\",\n webp = \"webp\"\n}\n\nexport function drawToCanvas(\n qrCode: QRCodeStyling,\n options?: RecursivePartial<CanvasOptions>\n): { canvas: HTMLCanvasElement; canvasDrawingPromise: Promise<void> | undefined } | undefined {\n const { width, height, margin } = options\n ? sanitizeCanvasOptions(mergeDeep(defaultCanvasOptions, options) as CanvasOptions)\n : defaultCanvasOptions;\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = width;\n canvas.height = height;\n\n const size = Math.min(width, height) - 2 * margin;\n\n const canvasDrawingPromise = qrCode.serialize().then((xml) => {\n if (!xml) return;\n const svg64 = btoa(xml);\n const image64 = \"data:image/svg+xml;base64,\" + svg64;\n const image = new Image();\n\n return new Promise<void>((resolve, reject) => {\n image.onload = (): void => {\n // Ensure pixel-perfect rendering of SVG to avoid artefact, then downscale to requested size\n const aaFactor = Math.ceil((2 * size) / Math.min(image.width, image.height));\n let aaCanvas: HTMLCanvasElement | OffscreenCanvas;\n try {\n aaCanvas = new OffscreenCanvas(image.width * aaFactor, image.height * aaFactor);\n } catch (_) {\n // Fallback to regular canvas element\n aaCanvas = document.createElement(\"canvas\");\n aaCanvas.width = image.width * aaFactor;\n aaCanvas.height = image.height * aaFactor;\n }\n aaCanvas.getContext(\"2d\")?.drawImage(image, 0, 0, aaCanvas.width, aaCanvas.height);\n\n canvas?.getContext(\"2d\")?.drawImage(aaCanvas, (width - size) / 2, (height - size) / 2, size, size);\n resolve();\n };\n image.onerror = image.onabort = reject;\n\n image.src = image64;\n });\n });\n\n return { canvas, canvasDrawingPromise };\n}\n\nexport async function download(\n qrCode: QRCodeStyling,\n downloadOptions: `${FileExtension}` | { name?: string; extension: `${FileExtension}` },\n options?: RecursivePartial<CanvasOptions>\n): Promise<void> {\n let extension: `${FileExtension}` = FileExtension.png;\n let name = \"qr\";\n\n //TODO remove deprecated code in the v2\n if (typeof downloadOptions === \"string\") {\n extension = downloadOptions;\n console.warn(\n \"Extension is deprecated as argument for 'download' method, please pass object { name: '...', extension: '...' } as argument\"\n );\n } else if (typeof downloadOptions === \"object\" && downloadOptions !== null) {\n if (downloadOptions.name) {\n name = downloadOptions.name;\n }\n if (downloadOptions.extension) {\n extension = downloadOptions.extension;\n }\n }\n\n if (extension.toLowerCase() === \"svg\") {\n const source = await qrCode.serialize();\n if (!source) return;\n const url = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(source);\n downloadURI(url, `${name}.svg`);\n } else {\n const res = drawToCanvas(qrCode, options);\n if (!res) return;\n const { canvas, canvasDrawingPromise } = res;\n await canvasDrawingPromise;\n const url = canvas.toDataURL(`image/${extension}`);\n downloadURI(url, `${name}.${extension}`);\n }\n}\n\nexport function downloadURI(uri: string, name: string): void {\n const link = document.createElement(\"a\");\n link.download = name;\n link.href = uri;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n}\n","export { type ExtensionFunction, QRCodeStyling } from \"./core/qr-code-styling.js\";\nexport { FileExtension } from \"./tools/browser-utils.js\";\nexport { type RecursivePartial } from \"./types/helper.js\";\nexport { ErrorCorrectionLevel, Mode, TypeNumber } from \"./types/qrcode.js\";\nexport { type CanvasOptions } from \"./utils/canvas-options.js\";\nexport { type Gradient, GradientType } from \"./utils/gradient.js\";\nexport { CornerDotType, CornerSquareType, DotType, type Options, ShapeType } from \"./utils/options.js\";\nexport { ErrorCorrectionPercents } from \"./utils/qrcode.js\";\nimport * as _browserUtils from \"./tools/browser-utils.js\";\n\nexport const browserUtils: typeof _browserUtils | undefined = _browserUtils;\n"],"names":["qrcode","createDataURL","e","width","height","getPixel","gif","gifImage","lzwTable","r","_map","_size","_this","add","_this.add","key","contains","p","size","_this.size","indexOf","_this.indexOf","_this.contains","bitOutputStream","f","out","_bitLength","_bitBuffer","write","_this.write","data","length","writeByte","flush","_this.flush","_data","Array","setPixel","_this.setPixel","x","y","pixel","writeString","writeShort","bitLength","table","i","clearCode","String","fromCharCode","endCode","bitOut","byteOut","byteArrayOutputStream","dataIndex","s","c","O","toByteArray","lzwMinCodeSize","offset","raster","writeBytes","b","base64","base64EncodeOutputStream","encode","u","n","_buffer","_buflen","_length","_base64","_this.writeByte","padlen","toString","_this.toString","h","g","bytes","v","_bytes","push","_this.writeShort","_this.writeBytes","off","len","_this.writeString","charCodeAt","_this.toByteArray","qrBitBuffer","getBuffer","_this.getBuffer","getAt","_this.getAt","index","Math","floor","put","_this.put","num","putBit","getLengthInBits","_this.getLengthInBits","_this.putBit","bit","bufIndex","typeNumber","errorCorrectionLevel","escapeXml","escaped","charAt","t","setupPositionProbePattern","row","col","_moduleCount","_modules","makeImpl","test","maskPattern","_typeNumber","modules","moduleCount","q","pos","QRUtil","getPatternPosition","j","getBCHTypeInfo","_errorCorrectionLevel","mod","bits","getBCHTypeNumber","_dataCache","rsBlocks","QRRSBlock","getRSBlocks","buffer","_dataList","getMode","getLength","totalDataCount","dataCount","PAD0","PAD1","maxEcCount","maxDcCount","dcdata","ecdata","dcCount","ecCount","totalCount","max","w","R","rsPoly","getErrorCorrectPolynomial","qrPolynomial","N","modIndex","modPoly","totalCodeCount","Q","inc","bitIndex","maskFunc","getMaskFunction","dark","byteIndex","QRErrorCorrectionLevel","addData","_this.addData","mode","newData","qrNumber","strToNum","_this.getMode","_this.getLength","substring","qrAlphaNum","getCode","MODE_ALPHA_NUM","qr8BitByte","stringToBytes","qrKanji","stringToBytesFuncs","SJIS","isDark","_this.isDark","getModuleCount","_this.getModuleCount","z","make","_this.make","pattern","minLostPoint","lostPoint","getLostPoint","createTableTag","_this.createTableTag","cellSize","margin","qrHtml","createSvgTag","_this.createSvgTag","alt","title","opts","text","id","rect","qrSvg","scalable","join","trim","mr","mc","_this.createDataURL","min","createImgTag","_this.createImgTag","img","createASCII","_this.createASCII","blocks","blocksLastLineNoMargin","ascii","r1","r2","l","C","white","black","line","renderTo2dContext","_this.renderTo2dContext","context","fillStyle","fillRect","I","shift","_num","multiply","_this.multiply","QRMath","gexp","glog","L","_this.mod","ratio","default","createStringToBytes","qrcode.createStringToBytes","unicodeData","numChars","unicodeMap","read","bin","base64DecodeInputStream","str","decode","_pos","_this.read","match","count","b0","b1","b2","b3","k","unknownChar","RS_BLOCK_TABLE","M","H","getBCHDigit","digit","PATTERN_POSITION_TABLE","_this.getBCHTypeInfo","d","G15","G15_MASK","_this.getBCHTypeNumber","G18","_this.getPatternPosition","_this.getMaskFunction","PATTERN000","PATTERN001","PATTERN010","PATTERN011","PATTERN100","PATTERN101","PATTERN110","PATTERN111","_this.getErrorCorrectPolynomial","errorCorrectLength","a","type","MODE_NUMBER","MODE_8BIT_BYTE","MODE_KANJI","_this.getLostPoint","sameCount","darkCount","abs","EXP_TABLE","LOG_TABLE","_this.glog","_this.gexp","_this.getRSBlocks","rsBlock","getRsBlockTable","list","call","utf8","charcode","exports","TypeNumber","fill","map","_","ErrorCorrectionLevel","fa","Mode","ha","numeric","alphanumeric","kanji","unicode","isObject","obj","isArray","mergeDeep","target","sources","undefined","source","Object","keys","forEach","targetValue","sourceValue","assign","GradientType","la","sanitizeGradient","gradient","colorStops","newGradient","rotation","Number","colorStop","radial","linear","DotType","V","dot","randomDot","rounded","extraRounded","verticalLine","horizontalLine","classy","classyRounded","square","smallSquare","diamond","CornerDotType","na","heart","outpoint","inpoint","CornerSquareType","pa","ShapeType","ra","circle","defaultOptions","document","shape","qrOptions","imageOptions","hideBackgroundDots","imageSize","crossOrigin","dotsOptions","color","sanitizeOptions","options","newOptions","round","cornersSquareOptions","cornersDotOptions","backgroundOptions","ErrorCorrectionPercents","rx","numToAttr","X","value","toFixed","replace","Y","strings","values","reduce","element","_element","constructor","this","draw","args","drawFunction","drawSquare","drawHeart","drawRounded","drawClassy","drawInpoint","drawOutpoint","drawDot","rotateFigure","setAttribute","PI","cx","cy","basicDot","createElementNS","basicSquare","basicHeart","move","path","toUpperCase","basicRounded","basicClassy","svgPath","dotSize","basicInpoint","drawExtraRounded","basicExtraRounded","drawRandomDot","drawClassyRounded","drawVerticalLine","drawHorizontalLine","drawDiamond","drawSmallSquare","basicSideRounded","basicCornerRounded","basicCornerExtraRounded","basicCornersRounded","random","getNeighbor","leftNeighbor","rightNeighbor","topNeighbor","neighborsCount","bottomNeighbor","browserImageTools","toDataURL","url","startsWith","Promise","resolve","reject","xhr","XMLHttpRequest","onload","xhr.onload","reader","FileReader","onloadend","reader.onloadend","result","readAsDataURL","response","onerror","onabort","ontimeout","open","responseType","send","getSize","src","image","Image","then","catch","squareMask","dotMask","alignmentCount","QRSVG","defs","appendChild","imageTools","drawQR","qr","parseInt","drawImageSize","hideXDots","hideYDots","errorCorrectionPercent","coverLevel","alignment","find","originalHeight","originalWidth","maxHiddenDots","maxHiddenAxisDots","dimMax","dimMin","lower","upper","dotsMax","ceil","dotsMin","K","hideMax","hideMin","maxW","maxH","calculateImageSize","drawBackground","drawDots","drawCorners","drawImage","createColor","additionalRotation","name","backgroundMask","backgroundMaskGroup","createMask","filter","minSize","QRDot","dotsMask","dotsMaskGroup","xBeginning","yBeginning","xOffset","yOffset","colorX","colorY","colorCount","additionalDots","fakeCount","xFakeBeginning","fakeMatrix","center","sqrt","yFakeBeginning","column","cornersSquareMask","cornersSquareMaskGroup","cornersDotMask","cornersDotMaskGroup","cornersSquareSize","QRCornerSquare","cornersSquare","cornersDotSize","QRCornerDot","cornersDot","dx","dy","dh","setAttributeNS","imageUrl","encoding","atob","Buffer","from","container","parseFromString","DOMParser","rootEl","getElementsByTagName","dw","x0","y0","y1","positiveRotation","tan","x1","stop","mask","group","qrSVG","update","innerHTML","byte","setupSvg","append","applyExtension","extension","deleteExtension","serialize","svgDrawingPromise","serializeToString","XMLSerializer","defaultCanvasOptions","FileExtension","Ka","La","qrCode","sanitizeCanvasOptions","canvas","createElement","xml","image64","btoa","aaFactor","aaCanvas","OffscreenCanvas","getContext","canvasDrawingPromise","downloadURI","Ma","uri","link","download","href","body","click","removeChild","svg","png","jpeg","webp","browserUtils","downloadOptions","console","warn","toLowerCase","res","drawToCanvas"],"mappings":"MAiBIA,sBAAAA,EAAS,WA4pESC,SAAAC,EAASC,EAAOC,EAAQC,GAE1C,IADA,IAAIC,EAnNSC,SAASJ,EAAOC,GAiLdI,SAAAC,IAEb,IAAIC,EAAO,CAAA,EACPC,EAAQ,EAERC,EAAQ,CAEZC,IAAYC,SAASC,GACnB,GAAIH,EAAMI,SAASD,GACjB,KAAM,WAAaA,EAErBL,EAAKK,GAAOJ,EACZM,GAAS,CALe,EAQ1BC,KAAaC,WACX,OAAOR,CADe,EAIxBS,QAAgBC,SAASN,GACvB,SAAYA,EADgB,EAI9BC,SAAiBM,SAASP,GACxB,YAA2B,IAAbL,EAAKK,EADU,GAIxBH,OAAAA,CA3BiB,CAjGJW,SAAAC,EAASC,GAG7B,IAAIC,EAAa,EACbC,EAAa,QAELf,CAEZgB,MAAcC,SAASC,EAAMC,GAE3B,GAA0B,GAApBD,IAASC,EACb,KAAM,cAGR,KAA8B,GAAvBL,EAAaK,GAZXN,EAaFO,UAAU,KAAUF,GAAQJ,EAAcC,IAC/CI,GAAW,EAAIL,EACfI,KAAW,EAAIJ,EAEfA,EADAC,EAAa,EAIfA,GAAcG,GAAQJ,KACIK,CAfS,EAkBrCE,MAAcC,WACK,EAAbR,GAzBKD,EA0BFO,UAAUL,EAFM,EA1BS,CA5EpC,IAAIQ,EAAYC,MAAMjC,EAAQC,GA2M9B,MAzMYQ,CAEZyB,SAAiBC,SAASC,EAAGC,EAAGC,GAC9BN,EAAMK,EAPKrC,EAOQoC,GAAKE,CADa,EAIvCb,MAAcC,SAASJ,GAKrBA,EAAIiB,YAAY,UAKhBjB,EAAIkB,WApBOxC,KAqBPwC,WApBQvC,GAsBR4B,EAAAA,UAAU,KACdP,EAAIO,UAAU,GACVA,EAAAA,UAAU,KAMVA,UAAU,KACVA,UAAU,GACdP,EAAIO,UAAU,GAGVA,EAAAA,UAAU,KACdP,EAAIO,UAAU,KACVA,EAAAA,UAAU,KAKdP,EAAIiB,YAAY,KACZC,EAAAA,WAAW,KACXA,WAAW,KACXA,WA9COxC,GA+CXsB,EAAIkB,WA9CQvC,GA+CZqB,EAAIO,UAAU,GAwEd,IAHIY,IAAAA,EAAY,EAGZC,EAAQrC,IAEHsC,EAAI,EAPGC,EAOAD,EAAeA,GAAK,EAClCD,EAAMhC,IAAImC,OAAOC,aAAaH,IAEhCD,EAAMhC,IAAImC,OAAOC,aAVDF,IAWVlC,EAAAA,IAAImC,OAAOC,aAVHC,IAaVC,IAAAA,EAAS5B,EADT6B,EAAUC,KAIPzB,EAAAA,MAjBSmB,EAiBQH,GAEpBU,IAAAA,EAAY,EAEZC,EAAIP,OAAOC,aAAad,EAAMmB,IAGlC,IAFAA,GAAa,EAENA,EAAYnB,EAAMJ,QAAQ,CAE/B,IAAIyB,EAAIR,OAAOC,aAAad,EAAMmB,IAClCG,GAAa,EAETZ,EAAM7B,SAASuC,EAAIC,GAEjBD,GAAIC,GAIRL,EAAOvB,MAAMiB,EAAMzB,QAAQmC,GAAIX,GAEZ,KAAfC,EAAM3B,SAEJ2B,EAAM3B,QAAW,GAAK0B,IACxBA,GAAa,GAGfC,EAAMhC,IAAI0C,EAAIC,IAGhBD,EAAIC,EAtByB,CA5EjC,IAsGAL,EAAOvB,MAAMiB,EAAMzB,QAAQmC,GAAIX,GAG/BO,EAAOvB,MApDOsB,EAoDQN,GAEtBO,EAAOlB,QAEPhB,EAAOmC,EAAQM,cAjHfjC,EAAIO,UAHiB2B,GAKjBC,EAAS,EAEmB,IAAzBC,EAAO9B,OAAS6B,GACrBnC,EAAIO,UAAU,KACdP,EAAIqC,WAAWD,EAAQD,EAAQ,KAC/BA,GAAU,IAGR5B,EAAAA,UAAU6B,EAAO9B,OAAS6B,GAC9BnC,EAAIqC,WAAWD,EAAQD,EAAQC,EAAO9B,OAAS6B,GAC/CnC,EAAIO,UAAU,GAIVU,EAAAA,YAAY,IAjEU,EAZS,CAmN3BnC,CAASJ,EAAOC,GACjBoC,EAAI,EAAGA,EAAIpC,EAAQoC,GAAK,EAC/B,IAAK,IAAID,EAAI,EAAGA,EAAIpC,EAAOoC,GAAK,EAC9BjC,EAAI+B,SAASE,EAAGC,EAAGnC,EAASkC,EAAGC,IASnC,MALQa,IACR/C,EAAIsB,MAAMmC,GAENC,EAlWyBC,WAahBC,SAAAC,EAASC,GACpB,KAAQ,EAAJA,GAEG,CAAA,GAAQ,GAAJA,EACT,OAAA,GAAcA,EACT,GAAQ,GAAJA,EACT,OAAeA,EAAI,GAAZ,GACF,GAAQ,GAAJA,EACT,OAAeA,EAAI,GAAZ,GACO,GAAA,IAALA,EACT,OACK,GAAA,GAAS,IAALA,EACT,OAAO,EATF,CAWP,KAAM,KAAOA,CAdU,CAXzB,IAAIC,EAAU,EACVC,EAAU,EACVC,EAAU,EACVC,EAAU,GAEV5D,EAAQ,CAuBZoB,UAAkByC,SAASL,GAIzBG,IAFAF,EAAWA,GAAW,EAAU,IAAJD,EAC5BE,GAAW,EACXC,GAAW,EAEO,GAAXD,GA1BPE,GAAWxB,OAAOC,aAAaiB,EA2BhBG,IAAaC,EAAU,EA3BI,KA4BxCA,GAAW,CARe,EAY9BrC,MAAcC,WAQO,GANL,EAAVoC,IAlCJE,GAAWxB,OAAOC,aAAaiB,EAmChBG,GAAY,EAAIC,EAnCW,KAqCxCA,EADAD,EAAU,GAIO,GAAfE,EAAU,EAGZ,IADA,IAAIG,EAAS,EAAIH,EAAU,EAClBzB,EAAI,EAAGA,EAAI4B,EAAQ5B,GAAK,EAC/B0B,GAAW,GAZQ,EAiBzBG,SAAiBC,WACf,OAD0BC,CAAA,GAI5B,OA/DwCC,CAAA,CAkW3Bb,KACDF,EAAEL,cACLZ,EAAI,EAAGA,EAAIiC,EAAMhD,OAAQe,GAAK,EACrCkB,EAAOhC,UAAU+C,EAAMjC,IAIzB,OAFAkB,EAAO/B,QAEA,yBAA2B+B,CAlBkB,CA5Y1BX,SAAA2B,IAE1B,IAAIC,EAAS,GAETrE,EAAQ,CAEZoB,UAAkByC,SAASV,GACzBkB,EAAOC,KAAS,IAAJnB,EADgB,EAI9BpB,WAAmBwC,SAASrC,GAC1BlC,EAAMoB,UAAUc,GACVd,EAAAA,UAAUc,IAAM,EAFO,EAK/BgB,WAAmBsB,SAASrB,EAAGsB,EAAKC,GAClCD,EAAMA,GAAO,EACbR,EAAMS,GAAOvB,EAAEhC,OACV,IAAA,IAAIe,EAAI,EAAGA,EAAIwC,EAAKxC,GAAK,EAC5BlC,EAAMoB,UAAU+B,EAAEjB,EAAIuC,GAJe,EAQzC3C,YAAoB6C,SAAShC,GAC3B,IAAK,IAAIT,EAAI,EAAGA,EAAIS,EAAExB,OAAQe,GAAK,EACjClC,EAAMoB,UAAUuB,EAAEiC,WAAW1C,GAFD,EAMhCY,YAAoB+B,WAClB,OAD6BtB,CAAA,EAI/BQ,SAAiBC,WAGf,IADA,IAAArB,EAAA,IACST,EAAI,EAAGA,EAAImC,EAAOlD,OAAQe,GAAK,EAC9B,EAAJA,IACFS,GAAK,KAEPA,GAAK0B,EAAOnC,GAGd,SADK,GATqB,GAarBlC,OAAAA,CA9C8B,CA1QrB8E,aAEhB,IAAIrB,EAAU,GACVE,EAAU,EAEV3D,EAAQ,CAEZ+E,UAAkBC,WAChB,OAD2BzB,CAAA,EAI7B0B,MAAcC,SAASC,GAErB,OAA0D,IAAhD1B,EADK2B,KAAKC,MAAMF,EAAQ,MACD,EAAIA,EAAQ,EAAO,EAFxB,EAK9BG,IAAYC,SAASC,EAAKrE,GACxB,IAAK,IAAIe,EAAI,EAAGA,EAAIf,EAAQe,GAAK,EAC/BlC,EAAMyF,OAA8C,IAAnCD,IAASrE,EAASe,EAAI,EAAO,GAFhB,EAMlCwD,gBAAwBC,WACtB,OADiChE,CAAA,EAInC8D,OAAeG,SAASC,GAEtB,IAAIC,EAAWV,KAAKC,MAAM1B,EAAU,GACxBxC,EAAAA,QAAU2E,GACpBrC,EAAQa,KAAK,GAGXuB,IACFpC,EAAQqC,IAAc,MAAUnC,EAAU,GAG5ChC,GAAW,CAXgB,GActB3B,OAAAA,CAxCoB,CA3/ChBZ,WAAS2G,EAAYC,GAgkBhBC,WAAStD,GAEvB,IADA,IAAIuD,EAAU,GACLhE,EAAI,EAAGA,EAAIS,EAAExB,OAAQe,GAAK,EAAG,CACpC,IAAIU,EAAID,EAAEwD,OAAOjE,GACjB,OAAOU,GACP,IAAK,IAAKsD,GAAW,OAAQ,UACxB,IAAKA,GAAW,OAAQ,MACxB,IAAA,IAAKA,GAAW,QACrB,MAAK,IAAA,IAAKA,GAAW,eACXA,QAAAA,GAAWtD,EAPe,CAUtC,OAZ0BwD,CAAA,CAlhBIC,WAASC,EAAKC,GAE5C,IAAK,IAAI1G,GAAK,EAAQ,GAALA,EAAQA,GAAK,EAE5B,MAAgB,GAAZyG,EAAMzG,GAAW2G,GAAgBF,EAAMzG,GAE3C,IAAK,IAAI+C,GAAK,EAAQ,GAALA,EAAQA,GAAK,GAEZ,GAAZ2D,EAAM3D,GAAW4D,GAAgBD,EAAM3D,IAKzC6D,EAASH,EAAMzG,GAAG0G,EAAM3D,GAHpB,GAAK/C,GAAU,GAALA,IAAgB,GAAL+C,GAAe,GAALA,IAC7B,GAAKA,GAAU,GAALA,IAAgB,GAAL/C,GAAe,GAALA,IAC/B,GAAKA,GAAU,GAALA,GAAU,GAAK+C,GAAU,GAALA,EAZO,CAhCpC8D,SAAAzC,EAAS0C,EAAMC,GAK1B,IAOAJ,IAAAA,EAVFA,EAA6B,EAAdK,EAAkB,GAE3BC,EAActF,MAAMuF,GACfT,EAAM,EAAGA,EAAMS,EAAaT,GAAO,EAAG,CAC7CQ,EAAQR,GAAW9E,MAAMuF,GACzB,IAAK,IAAIR,EAAM,EAAGA,EAAMQ,EAAaR,GAAO,EAC1CO,EAAQR,GAAKC,GAAO,IAHuB,CAyFjD,IAnFES,EAAOF,EAGTlG,EAA0B,EAAG,GAC7ByF,EAA0BG,EAAe,EAAG,GAC5C5F,EAA0B,EAAG4F,EAAe,GA4ExCS,EAAMC,EAAOC,mBAAmBN,GAE3B3E,EAAI,EAAGA,EAAI+E,EAAI9F,OAAQe,GAAK,EAEnC,IAASkF,EAAI,EAAGA,EAAIH,EAAI9F,OAAQiG,GAAK,EAAG,CAElCd,EAAMW,EAAI/E,GACVqE,IAAAA,EAAMU,EAAIG,GAEd,GAA0B,MAAtBX,EAASH,GAAKC,GAIlB,IAAK,IAAI1G,GAAK,EAAQ,GAALA,EAAQA,GAAK,EAE5B,IAAK,IAAI+C,GAAK,EAAQ,GAALA,EAAQA,GAAK,EAI1B6D,EAASH,EAAMzG,GAAG0G,EAAM3D,IAFhB,GAAN/C,GAAgB,GAALA,IAAgB,GAAN+C,GAAgB,GAALA,GACvB,GAAL/C,GAAe,GAAL+C,CAdgB,CArB1C,IAAS/C,EAAI,EAAGA,EAAI2G,EAAe,EAAG3G,GAAK,EACnB,MAAlB4G,EAAS5G,GAAG,KAGhB4G,EAAS5G,GAAG,GAAe,GAATA,EAAI,OAGf+C,EAAI,EAAGA,EAAI4D,EAAe,EAAG5D,GAAK,EACnB,MAAlB6D,EAAS,GAAG7D,KAGhB6D,EAAS,GAAG7D,GAAe,GAATA,EAAI,SAqDbsE,EAAOG,eADNC,GAAyB,EAvHjBV,GA2HX1E,EAAI,EAAO,GAAJA,EAAQA,GAAK,EAEvBqF,GA7HQZ,GA6H8B,IAAnBa,GAAQtF,EAAK,GAE5B,EAAJA,EACFuE,EAASvE,GAAG,GAAKqF,EACJ,EAAJrF,EACTuE,EAASvE,EAAI,GAAG,GAAKqF,EAErBd,EAASD,EAAe,GAAKtE,GAAG,GAAKqF,EAKhCrF,IAAAA,EAAI,EAAO,GAAJA,EAAQA,GAAK,EAEvBqF,GA3IQZ,GA2I8B,IAAnBa,GAAQtF,EAAK,GAE5B,EAAJA,EACFuE,EAAS,GAAGD,EAAetE,EAAI,GAAKqF,EACvB,EAAJrF,EACTuE,EAAS,GAAG,GAAKvE,EAAI,EAAI,GAAKqF,EAE9Bd,EAAS,GAAG,GAAKvE,EAAI,GAAKqF,OAKrBf,EAAe,GAAG,IAvJbG,EAEK,GAAfE,EAAJ,CAwGA,IAFIW,EAAON,EAAOO,iBAAiBZ,GAE1B3E,EAAI,EAAO,GAAJA,EAAQA,GAAK,EACvBqF,GAxGYZ,GAwG0B,IAAnBa,GAAQtF,EAAK,GACpCuE,EAASrB,KAAKC,MAAMnD,EAAI,IAAIA,EAAI,EAAIsE,EAAe,EAAI,GAAKe,EAGrDrF,IAAAA,EAAI,EAAO,GAAJA,EAAQA,GAAK,EACvBqF,GA7GYZ,GA6G0B,IAAnBa,GAAQtF,EAAK,GACpCuE,EAASvE,EAAI,EAAIsE,EAAe,EAAI,GAAGpB,KAAKC,MAAMnD,EAAI,IAAMqF,CA/G9D,CAIA,GAAkB,MAAdG,EAAJ,CA8QSxF,IA7QiB2E,EAAAA,EAyQtBc,EAAWC,EAAUC,YAAY9B,EAzQEuB,GA2QnCQ,EAAShD,IAEJ5C,EAAI,EAAGA,EA7Q8C6F,EA6QjC5G,OAAQe,GAAK,EACpChB,EA9QwD6G,EA8QxC7F,GACpB4F,EAAOxC,IAAIpE,EAAK8G,UAAW,GAC3BF,EAAOxC,IAAIpE,EAAK+G,YAAaf,EAAOxB,gBAAgBxE,EAAK8G,UAAWjC,IACpE7E,EAAKF,MAAM8G,GAKJ5F,IAAAA,EADLgG,EAAiB,EACLhG,EAAIyF,EAASxG,OAAQe,GAAK,EACxCgG,GAAkBP,EAASzF,GAAGiG,UAGhC,GAAIL,EAAOpC,kBAAqC,EAAjBwC,EAC7B,KAAM,0BACFJ,EAAOpC,kBACP,IACiB,EAAjBwC,EACA,IASN,IALIJ,EAAOpC,kBAAoB,GAAsB,EAAjBwC,GAClCJ,EAAOxC,IAAI,EAAG,GAIuB,GAAhCwC,EAAOpC,kBAAoB,GAChCoC,EAAOrC,QAAO,GAIhB,OAEMqC,EAAOpC,mBAAsC,EAAjBwC,IAGhCJ,EAAOxC,IAxVA8C,IAwVU,GAEbN,EAAOpC,mBAAsC,EAAjBwC,OAGzB5C,IA5VA+C,GA4VU,GA/GnB,IAAIrF,EAAS,EAQb,IALIsF,EADAC,EAAa,EAGbC,EAAahH,MA6GUmG,EA7GKxG,QAC5BsH,EAAajH,MA4GUmG,EA5GKxG,QAEvBtB,EAAI,EAAGA,EA0GW8H,EA1GExG,OAAQtB,GAAK,EAAG,CAE3C,IAAI6I,EAwGqBf,EAxGF9H,GAAGsI,UACtBQ,EAuGqBhB,EAvGF9H,GAAG+I,WAAaF,EAOvC,IALAH,EAAanD,KAAKyD,IAAIN,EAAYG,GAClCI,EAAa1D,KAAKyD,IAAIP,EAAYK,GAElCH,EAAO3I,GAAS2B,MAAMkH,GAEbxG,EAAI,EAAGA,EAAIsG,EAAO3I,GAAGsB,OAAQe,GAAK,EACzCsG,EAAO3I,GAAGqC,GAAK,IA+FA4F,EA/Fc/C,YAAY7C,EAAIc,GAS/C,IAPA+F,GAAUL,EAENM,EAAS9B,EAAO+B,0BAA0BN,KAChCO,EAAaV,EAAO3I,GAAImJ,EAAOf,YAAc,GAErCV,IAAIyB,GAC1BG,EAAOtJ,GAAS2B,MAAMwH,EAAOf,YAAc,GAClC/F,EAAI,EAAGA,EAAIuG,EAAO5I,GAAGsB,OAAQe,GAAK,EACrCkH,EAAWlH,EAAImH,EAAQpB,YAAcQ,EAAO5I,GAAGsB,OACnDsH,EAAO5I,GAAGqC,GAAkB,GAAZkH,EAAgBC,EAAQpE,MAAMmE,GAAY,CAtBjB,CA2B7C,IAASlH,EADLoH,EAAiB,EACLpH,EA+EWyF,EA/EExG,OAAQe,GAAK,EACxCoH,GA8EyB3B,EA9EEzF,GAAG0G,WAMhC,IAHI1H,EAAWM,MAAM8H,GAGZpH,EAFLiD,EAAQ,EAEIjD,EAAIqG,EAAYrG,GAAK,EACnC,IAASrC,EAAI,EAAGA,EAuES8H,EAvEIxG,OAAQtB,GAAK,EACpCqC,EAAIsG,EAAO3I,GAAGsB,SAChBD,EAAKiE,GAASqD,EAAO3I,GAAGqC,GACxBiD,GAAS,GAKf,IAASjD,EAAI,EAAGA,EAAIoG,EAAYpG,GAAK,EACnC,IAASrC,EAAI,EAAGA,EA8DS8H,EA9DIxG,OAAQtB,GAAK,EACpCqC,EAAIuG,EAAO5I,GAAGsB,SAChBD,EAAKiE,GAASsD,EAAO5I,GAAGqC,GACxBiD,GAAS,GA2DfoE,EAtDOrI,CArQP,CA4JSqF,IAxJDmB,EAAAA,EAkJJ8B,GAAO,EACPlD,EAAME,EAAe,EACrBiD,EAAW,IACC,EACZC,EAAWxC,EAAOyC,gBAtJF/C,GAwJXL,EAAMC,EAAe,EAAS,EAAND,EAASA,GAAO,EAI/C,IAFW,GAAPA,KAAUA,IAED,CAEX,IAAS3D,EAAI,EAAO,EAAJA,EAAOA,GAAK,EAEI,MAA1B6D,EAASH,GAAKC,EAAM3D,KAElBgH,GAAO,EAEPC,EAAY3I,EAAKC,SACnByI,EAAkD,IAAtC1I,EAAK2I,KAAeJ,EAAY,IAGnCC,EAASpD,EAAKC,EAAM3D,KAG7BgH,GAAQA,GAGVnD,EAASH,GAAKC,EAAM3D,GAAKgH,GAGR,KAFjBH,IAGEI,GAAa,EACbJ,EAAW,IAOjB,GAAU,GAFVnD,GAAOkD,IAEQhD,GAAgBF,EAAK,CAClCA,GAAOkD,KACAA,EACP,KAHkC,CA9BzB,CAzL0B,CAT3C,IAAI3C,EAAcd,EACduB,EAAwBwC,EAAuB9D,GAC/CS,EAAW,KACXD,EAAe,EACfkB,EAAa,KACbK,EAAY,GAEZ/H,EAAQ,CAyVZ+J,QAAgBC,SAAS9I,EAAM+I,UAE7BA,EAAOA,GAAQ,QAKf,IAAK,UACHC,EA6rCSC,SAASjJ,GAmCPkJ,SAAAzI,EAASgB,GAEtB,IADA,IAAI6C,EAAM,EACDtD,EAAI,EAAGA,EAAIS,EAAExB,OAAQe,GAAK,EAAG,CAC9BsD,GAAM,GAAe,IAAAtB,EAAAvB,EAAEwD,OAAOjE,GAMlC,KAAA,KAAOU,GAAU,KAALA,GAGhB,KAAM,iBAAmBA,EATjBhC,GAONsD,EAAOtB,EAAEgC,WAAW,GAAK,EARW,CAGtC,OAAOY,CALkB,CAe3B,MA7CYxF,CAEZgI,QAAgBqC,WACd,OADyB,CAAA,EAI3BpC,UAAkBqC,WAChB,OAAanJ,EAAAA,MADoB,EAInCH,MAAcC,SAAS6G,GAMrB,IAFA,IAAI5F,EAAI,EAEDA,EAAI,EAlBDhB,EAkBUC,QAClB2G,EAAOxC,IAAI8E,EAnBHlJ,EAmBiBqJ,UAAUrI,EAAGA,EAAI,IAAM,IAChDA,GAAK,EAGPtB,EAvBUM,EAuBGC,SACY,GAxBfD,EAwBCC,OAASe,EAChB4F,EAAOxC,IAAI8E,EAzBLlJ,EAyBmBqJ,UAAUrI,EAAGA,EAAI,IAAM,GACpB,GA1BtBhB,EA0BQC,OAASe,GACvB4F,EAAOxC,IAAI8E,EA3BLlJ,EA2BmBqJ,UAAUrI,EAAGA,EAAI,IAAM,GAfvB,EAfH,CA7rCdiI,CAASjJ,GACnB,MACG,IAAA,eACHgJ,EAmvCWM,SAAStJ,GAiCVuJ,SAAA9I,EAASiB,GAErB,GAAI,KAAOA,GAAU,KAALA,EACd,OAAOA,EAAEgC,WAAW,GAAK,GACpB,GAAI,KAAOhC,GAAU,KAALA,EACrB,OAASgC,EAAAA,WAAW,GAAK,GAAoB,GAE7C,OAAQhC,GACR,IAAK,IAAM,OACX,GAAA,IAAK,IAAM,OACX,GAAA,IAAK,IAAM,UACN,IAAA,IAAM,OAAO,GACb,IAAA,IAAM,OAAO,OACb,IAAM,OACX,GAAA,IAAK,IAAM,OACX,GAAA,IAAK,IAAM,UACN,IAAA,IAAM,UAET,QAAA,KAAM,iBAAmBA,EAlBL,CAuB1B,MAnDY5C,CAEZgI,QAAgBqC,WACd,OA90BeK,CA60BU,EAI3BzC,UAAkBqC,WAChB,OATUpJ,EASGC,MADoB,EAInCH,MAAcC,SAAS6G,GAMrB,IAFA,IAAI5F,EAAI,EAEDA,EAAI,EAlBDhB,EAkBOC,QACf2G,EAAOxC,IACmB,GAAxBmF,EApBMvJ,EAoBIiF,OAAOjE,IACjBuI,EArBMvJ,EAqBIiF,OAAOjE,EAAI,IAAM,IAC7BA,GAAK,EAGPtB,EAzBUM,EAyBAC,QACR2G,EAAOxC,IAAImF,EA1BHvJ,EA0BaiF,OAAOjE,IAAM,EAdP,EAfD,CAnvChBsI,CAAWtJ,GAEvB,MAAA,IAAK,OACHgJ,EA+yCWS,SAASzJ,GAIxB,IAAImD,EAASjF,EAAOwL,cAAc1J,GAkBlC,MAhBYlB,CAEZgI,QAAgBqC,WACd,QADyB,EAI3BpC,UAAkBqC,WAChB,OAAOjG,EAAOlD,MADmB,EAInCH,MAAcC,SAAS6G,GACrB,IAAK,IAAI5F,EAAI,EAAGA,EAAImC,EAAOlD,OAAQe,GAAK,EACtC4F,EAAOxC,IAAIjB,EAAOnC,GAAI,EAFK,EAhBD,CA/yChByI,CAAWzJ,GAEvB,MAAA,IAAK,QACHgJ,EAy0CQW,SAAS3J,GAKrB,IAAI0J,EAAgBxL,EAAO0L,mBAAPC,KAChB,IAACH,EACH,KAAM,uBAEP,SAAShI,GAGR,GAAmB,IADf+D,EAAOiE,EAAchI,IAChBzB,QAGC,QAHiBwF,EAAK,IAAM,EAAKA,EAAK,IAC9C,KAAM,qBAJS,CAAlB,CAMC,SAEEtC,EAASuG,EAAc1J,SAEflB,CAEZgI,QAAgBqC,WACd,OADyB,CAAA,EAI3BpC,UAAkBqC,WAChB,SAAUjG,EAAOlD,OAAS,EADO,EAInCH,MAAcC,SAAS6G,GAMrB,IAFA,IAAI5F,EAAI,EAEDA,EAAI,EAJAmC,EAISlD,QAAQ,CAE1B,IAAIyB,GAAO,IANFyB,EAMcnC,KAAO,EAAM,IAN3BmC,EAMuCnC,EAAI,GAEhD,GAAA,OAAUU,GAAU,OAALA,EACjBA,GAAK,UACI,MAAA,OAAUA,GAAU,OAALA,GAGxB,KAAM,oBAAsBV,EAAI,GAAK,IAAMU,EAF3CA,GAAK,KAEL,CAGFA,EAA0B,KAAnBA,IAAM,EAAK,MAAoB,IAAJA,KAE3B0C,IAAI1C,EAAG,IAEdV,GAAK,CAhBqB,CAmB5B,GAAIA,EAvBOmC,EAuBElD,OACX,KAAM,oBAAsBe,EAAI,EA1BL,EA7BJ,CAz0Cb2I,CAAQ3J,GAEpB,MAAA,QACE,KAAM,QAAU+I,EAGlBlC,EAAUzD,KAAK4F,GACfxC,EAAa,IAxBsB,EA2BrCsD,OAAeC,SAAS3E,EAAKC,GAC3B,GAAU,EAAND,GAAWE,GAAgBF,GAAa,EAANC,GAAWC,GAAgBD,EAC/D,MAAMD,EAAM,IAAMC,EAEpB,OAAOE,EAASH,GAAKC,EAJW,EAOlC2E,eAAuBC,WACrB,OADgCC,CAAA,EAIlCC,KAAaC,WACX,GAAkB,EAAdzE,EAAiB,CAGnB,IAFA,IAAId,EAAa,EAEG,GAAbA,EAAiBA,IAAc,CAIpC,IAHA,IAAI4B,EAAWC,EAAUC,YAAY9B,EAAYuB,GAC7CQ,EAAShD,IAEJ5C,EAAI,EAAGA,EAAI6F,EAAU5G,OAAQe,IAAK,CACzC,IAAIhB,EAAO6G,EAAU7F,GACdoD,EAAAA,IAAIpE,EAAK8G,UAAW,GACpB1C,EAAAA,IAAIpE,EAAK+G,YAAaf,EAAOxB,gBAAgBxE,EAAK8G,UAAWjC,MAC/D/E,MAAM8G,EAJ8B,CAQ3C,IAAS5F,EADLgG,EAAiB,EACLhG,EAAIyF,EAASxG,OAAQe,IACnCgG,GAAkBP,EAASzF,GAAGiG,UAG5BL,GAAAA,EAAOpC,mBAAsC,EAAjBwC,EAC9B,KAjBkC,CAqBtCrB,EAAcd,CAxBK,CApUrB,IAAS7D,EAFLqJ,EADAC,EAAe,EAGC,EAAJtJ,EAAOA,GAAK,EAE1BwE,GAAS,EAAMxE,GAEXuJ,EAAYvE,EAAOwE,aAAa1L,IAE3B,GAALkC,GAAUsJ,EAAeC,KAC3BD,EAAeC,EACfF,EAAUrJ,GAuVdwE,GAAS,EAnVF6E,EAuTe,EA+BxBI,eAAuBC,SAASC,EAAUC,GAExCD,EAAWA,GAAY,EAUvBzF,EAHA2F,gHAN2B,IAAlBD,EAA2C,EAAXD,EAAeC,GAOT,eAI/C,IAAK,IAAIjM,EAAI,EAAGA,EAAIG,EAAMkL,iBAAkBrL,GAAK,EAAG,CAElDkM,GAAU,OAEL,IAAA,IAAInJ,EAAI,EAAGA,EAAI5C,EAAMkL,iBAAkBtI,GAAK,EAC/CmJ,GAAU,cACVA,GAAU,0CACVA,GAAU,8BACVA,GAAU,8BACVA,GAAU,WAAaF,EAAW,MAClCE,GAAU,YAAcF,EAAW,MACnCE,GAAU,sBACVA,GAAU/L,EAAMgL,OAAOnL,EAAG+C,GAAI,UAAY,UAC1CmJ,GAAU,IACVA,GAAU,SAGF,OAjBwC,CAuBpD,OAHAA,EAAU,kBAlCsC,EAwClDC,aAAqBC,SAASJ,EAAUC,EAAQI,EAAKC,GAEnD,IAAIC,EAAO,GACX,iBAAA5I,IAIEqI,GAFAO,EAAO5I,GAESqI,SAChBC,EAASM,EAAKN,OACdI,EAAME,EAAKF,IACXC,EAAQC,EAAKD,OAGf3I,EAAWqI,GAAY,SACI,IAAVC,EAAmC,EAAXD,EAAeC,KAGlC,iBAARI,EAAoB,CAACG,KAAMH,GAAOA,GAAO,CAAA,GACnDG,KAAOH,EAAIG,MAAQ,OACnBC,GAAMJ,EAAIG,KAAQH,EAAII,IAAM,qBAAuB,QAG7B,iBAAVH,EAAsB,CAACE,KAAMF,GAASA,GAAS,CAAA,GACzDE,KAAOF,EAAME,MAAQ,OACrBC,GAAMH,EAAME,KAAQF,EAAMG,IAAM,eAAiB,SAEnDhM,EAAON,EAAMkL,iBAAmBW,EAAoB,EAATC,EAG/CS,EAAO,IAAMV,EAAW,QAAUA,EAChC,KAAOA,EAAW,SAAWA,EAAW,KAgBrChM,IAVLiJ,KAJA0D,yDACUJ,EAAKK,SAA+D,GAApD,WAAanM,EAAO,eAAiBA,EAAO,QAC7D,iBAAmBA,EAAO,IAAMA,EAAO,0CAEtC6L,EAAME,MAAQH,EAAIG,KAAQ,gCAChCpG,EAAU,CAACkG,EAAMG,GAAIJ,EAAII,IAAII,KAAK,KAAKC,QAAW,IAAM,IAC5D7D,GAAS,IACT0D,GAAUL,EAAME,KAAQ,cAAgBpG,EAAUkG,EAAMG,IAAM,KAC1DrG,EAAUkG,EAAME,MAAQ,WAAa,GACzCG,GAAUN,EAAIG,KAAQ,oBAAsBpG,EAAUiG,EAAII,IAAM,KAC5DrG,EAAUiG,EAAIG,MAAQ,iBAAmB,GAC7CG,GAAS,mEACA,YAEJ3M,EAAI,EAAGA,EAAIG,EAAMkL,iBAAkBrL,GAAK,EAAG,CAC9C,IAAA+M,EAAK/M,EAAIgM,EAAWC,EACpB,IAAKlJ,EAAI,EAAGA,EAAI5C,EAAMkL,iBAAkBtI,GAAK,EACvC5C,EAAMgL,OAAOnL,EAAG+C,KAElB4J,GAAS,KADTK,EAAKjK,EAAEiJ,EAASC,GACI,IAAMc,EAAKL,EALW,CAWhDC,OADAA,GAAS,yCACA,QAzDiD,EA8D5DnN,cAAsByN,SAASjB,EAAUC,GAEvCD,EAAWA,GAAY,EACvBzF,OAA2B,IAAlBA,EAA2C,EAAXyF,EAAeC,EAExD,IAAIxL,EAAON,EAAMkL,iBAAmBW,EAAoB,EAATC,EAC3CiB,EAAMjB,EACNjD,EAAMvI,EAAOwL,EAEjB,SAAqBxL,EAAMA,GAAM,SAASqB,EAAGC,GAC3C,UAAWD,GAAKA,EAAIkH,GAAOkE,GAAOnL,GAAKA,EAAIiH,GAGlC7I,EAAMgL,OADL5F,KAAKC,OAAQzD,EAAImL,GAAOlB,GADxBzG,KAAKC,OAAQ1D,EAAIoL,GAAOlB,IAEL,EAEpB,CANqC,GATD,EAoBjDmB,aAAqBC,SAASpB,EAAUC,EAAQI,GAE9CL,EAAWA,GAAY,EACvBzF,OAA2B,IAAlBA,EAA2C,EAAXyF,EAAeC,EAExD,IAAIxL,EAAON,EAAMkL,iBAAmBW,EAAoB,EAATC,EAkB/CoB,OANAA,QARAA,aACOlN,EAAMX,cAAcwM,EAAUC,IAC9B,YAEAxL,EACA,cAEAA,EACA,QAEL4M,GAAO,SACPA,GAAOjH,EAAUiG,GACjBgB,GAAO,KAETA,EAAO,IAvB4C,EAmGrDC,YAAoBC,SAASvB,EAAUC,GAGrC,GAAe,GAFfD,EAAWA,GAAY,GAEL,CAzDlBrI,OAA2B,KA0DDsI,EAAAA,GA1De,EAAeA,EAExD,IAAIxL,EAHWuL,EAGJ7L,EAAMkL,iBAAuC,EAATY,EAC3CiB,EAAMjB,EACNjD,EAAMvI,EAAOwL,MAEblK,EAAGD,EAEH0L,EAAS,CACX,KAAM,IACN,KAAM,IACN,KAAM,IACN,KAAM,KAGJC,EAAyB,CAC3B,KAAM,IACN,KAAM,IACN,KAAM,IACN,KAAM,KAGJC,EAAQ,GACP3L,IAAAA,EAAI,EAAGA,EAAItB,EAAMsB,GAAK,EAAG,CAC5B,IAAA4L,EAAKpI,KAAKC,MAAOzD,EAAImL,GACrBU,EAAKrI,KAAKC,MAAOzD,EAAI,EAAImL,GACpBpL,IAAAA,EAAI,EAAGA,EAAIrB,EAAMqB,GAAK,EAAG,CAC5B,IAAAtB,EAAI,IAEJqN,GAAW/L,GAAKA,EAAIkH,GAAOkE,GAAOnL,GAAKA,EAAIiH,GAAO7I,EAAMgL,OAAOwC,EAAIpI,KAAKC,MAAO1D,EAAIoL,MACjF1M,EAAI,KAIJA,EADE0M,GAAOpL,GAAKA,EAAIkH,GAAOkE,GAAOnL,EAAE,GAAKA,EAAE,EAAIiH,GAAO7I,EAAMgL,OAAOyC,EAAIrI,KAAKC,MAAO1D,EAAIoL,IACrF1M,EAAK,IAGLA,EAAK,IAIPsN,GAAmB,EAAT7B,GAAclK,EAAE,GAAKiH,EAAOyE,EAAuBjN,GAAKgN,EAAOhN,EAf7C,CAkB9BkN,GAAS,IArBmB,CAmC5B,OAVA/J,EADElD,EAAO,GAAc,EAATwL,EACPyB,EAAMhD,UAAU,EAAGgD,EAAMpM,OAASb,EAAO,GAAKkB,MAAMlB,EAAK,GAAGoM,KAAK,KAGnEa,EAAMhD,UAAU,EAAGgD,EAAMpM,OAAO,EAMrB,CAkBbS,MAdLiK,EAIIkB,EAHJ3G,OAA2B,IAAlBA,EAA2C,EAAXyF,EAAeC,EAIpDjD,GAFAvI,EAAON,EAAMkL,iBAAmBW,EAAoB,EAATC,GAE9BA,EAIb8B,EAAQpM,MAAMqK,EAAS,GAAGa,KAAK,MAC/BmB,EAAQrM,MAAMqK,EAAS,GAAGa,KAAK,QAEvB,GAEP9K,EAAI,EAAGA,EAAItB,EAAMsB,GAAK,EAAG,KAC5B/B,EAAIuF,KAAKC,OAAQzD,EAAImL,GAAOlB,GAC5BiC,EAAO,GACFnM,EAAI,EAAGA,EAAIrB,EAAMqB,GAAK,EACzBtB,EAAI,EAEA0M,GAAOpL,GAAKA,EAAIkH,GAAOkE,GAAOnL,GAAKA,EAAIiH,GAAO7I,EAAMgL,OAAOnL,EAAGuF,KAAKC,OAAO1D,EAAIoL,GAAOlB,MACvFxL,EAAI,GAINyN,GAAQzN,EAAIuN,EAAQC,EAGtB,IAAKhO,EAAI,EAAGA,EAAIgM,EAAUhM,GAAK,EAC7B0N,GAASO,EAAO,IAfU,CAmB9B,OAAOP,EAAMhD,UAAU,EAAGgD,EAAMpM,OAAO,EAxCM,EA2C/C4M,kBAA0BC,SAASC,EAASpC,GAC1CA,EAAWA,GAAY,EACvB,IAAA,IAAI1K,EAASnB,EAAMkL,iBACV5E,EAAM,EAAGA,EAAMnF,EAAQmF,IAC9B,IAAK,IAAIC,EAAM,EAAGA,EAAMpF,EAAQoF,IAC9B0H,EAAQC,UAAYlO,EAAMgL,OAAO1E,EAAKC,GAAO,QAAU,QACvD0H,EAAQE,SAAS7H,EAAMuF,EAAUtF,EAAMsF,EAAUA,EAAUA,EANX,GAWtD,OA7rBsDuC,CAAA,CAioCxDlF,SAASA,EAAa1D,EAAK6I,GAEzB,QAAyB,IAAVlN,EAAAA,OACb,MAAMqE,EAAIrE,OAAS,IAAMkN,EAG3B,IAAIC,EAAO,WAET,IADA,IAAItL,EAAS,EACNA,EAASwC,EAAIrE,QAAyB,GAAfqE,EAAIxC,IAChCA,GAAU,EAEZ,IAAA,IAAIsL,EAAW9M,MAAMgE,EAAIrE,OAAS6B,EAASqL,GAClCnM,EAAI,EAAGA,EAAIsD,EAAIrE,OAAS6B,EAAQd,GAAK,EAC5CoM,EAAKpM,GAAKsD,EAAItD,EAAIc,GAEbsL,OAAAA,CATa,CAAX,GAYPtO,EAAQ,CAEZiF,MAAcC,SAASC,GACrB,OAAOtF,EAAKsF,EADgB,EAI9B8C,UAAkBqC,WAChB,OAAOgE,EAAKnN,MADe,EAI7BoN,SAAiBC,SAASlP,GAIxB,IAFA,IAAIkG,EAAUhE,MAAMxB,EAAMiI,YAAc3I,EAAE2I,YAAc,GAE/C/F,EAAI,EAAGA,EAAIlC,EAAMiI,YAAa/F,GAAK,EAC1C,IAAK,IAAIkF,EAAI,EAAGA,EAAI9H,EAAE2I,YAAab,GAAK,EACtC5B,EAAItD,EAAIkF,IAAMqH,EAAOC,KAAKD,EAAOE,KAAK3O,EAAMiF,MAAM/C,IAAOuM,EAAOE,KAAKrP,EAAE2F,MAAMmC,KAIjF,OAAOwH,EAAapJ,EAAK,EAVE,EAa7B+B,IAAYsH,SAASvP,GAEnB,GAAwC,EAApCU,EAAMiI,YAAc3I,EAAE2I,YACxB,OAMFrH,EAAA,IAHA,IAAIkO,EAAQL,EAAOE,KAAK3O,EAAMiF,MAAM,IAAOwJ,EAAOE,KAAKrP,EAAE2F,MAAM,IAE3DO,EAAUhE,MAAMxB,EAAMiI,aACjB/F,EAAI,EAAGA,EAAIlC,EAAMiI,YAAa/F,GAAK,EAC1CsD,EAAItD,GAAKlC,EAAMiF,MAAM/C,GAGvB,IAASA,EAAI,EAAGA,EAAI5C,EAAE2I,YAAa/F,GAAK,EACtCsD,EAAItD,IAAMuM,EAAOC,KAAKD,EAAOE,KAAKrP,EAAE2F,MAAM/C,IAAO4M,GAInD,OAAOF,EAAapJ,EAAK,GAAG+B,IAAIjI,EAlBV,GAqBxB,OA9DgCsB,CAAA,CA7blCxB,EAAO0L,mBAAqB,CAC1BiE,QAAYA,SAASpM,GAEnB,IADA,IAAIwB,EAAQ,GACHjC,EAAI,EAAGA,EAAIS,EAAExB,OAAQe,GAAK,EAAG,CACpC,IAAIU,EAAID,EAAEiC,WAAW1C,GACrBiC,EAAMG,KAAS,IAAJ1B,EAFyB,CAItC,QANsB,GAUnBgI,EAAAA,cAAgBxL,EAAO0L,mBAAP,QAWvB1L,EAAO4P,oBAAsBC,SAASC,EAAaC,GAIjD,IAAIC,EAAa,WAGJC,SAAAzO,IACT,IAAIuC,EAAImM,EAAID,OACZ,IAAU,GAANlM,EAAS,KAAM,MACnB,QAHoB,CAQtB,IATA,IAAImM,EAgqCsBC,SAASC,GAwCxBC,SAAA9N,EAASiB,GACpB,GAAI,IAAQA,GAAU,IAALA,EACf,OAAOA,EAAI,GACN,GAAI,IAAQA,GAAU,KAALA,EACtB,OAAAsB,EAAW,GAAO,GACT,GAAA,IAAQtB,GAAU,IAALA,EACtB,OAAOA,EAAI,GAAO,GACJ,GAAA,IAALA,EACT,OAAO,GACO,GAAA,IAALA,EACT,OAAO,GAED,KAAA,KAAOA,CAZQ,CArCzB,IAAI8M,EAAO,EACPjM,EAAU,EACVC,EAAU,EAmDd,MAjDY1D,CAEZqP,KAAaM,WAEX,KAAiB,EAAVjM,GAAa,CAElB,GAAIgM,GAXGF,EAWUrO,OAAQ,CACvB,GAAe,GAAXuC,EACF,OAAQ,EAEJ,KAAA,2BAA6BA,CAJZ,CAOzB,IAAId,EAlBG4M,EAkBMrJ,OAAOuJ,GAGX,GAFT7P,GAAQ,EAEC,KAAL+C,EAEF,SADU,GACF,EACCA,EAAEgN,MAAM,UAKnBnM,EAAWA,GAAW,EAAKgM,EAAO7M,EAAEgC,WAAW,IAC/ClB,GAAW,EArBO,CA0BbF,OAFHA,EAAKC,IAAaC,EAAU,EAAO,IACvCA,GAAW,EACJF,CA5Be,EATkB,CAhqC9B+L,CAAwBL,GAO9BW,EAAQ,EACRT,EAAa,KACJ,CACX,IAAIU,EAAKR,EAAID,OACH,IAAC,GAAPS,EAAU,MACVC,IAAAA,EAAKV,IACLW,EAAKX,IACLY,EAAKZ,IAGTD,EAFIc,EAAI9N,OAAOC,aAAeyN,GAAM,EAAKC,IAChCC,GAAM,EAAKC,EAEpBJ,GAAS,CATE,CAWb,GAAIA,GAASV,EACX,MAAAjL,EAAc,OAASiL,EAGzB,OA1B0B9O,CAAA,CAAX,GA+BV,OAAA,SAASsC,GAEd,IADA,IAAIwB,EAAQ,GACHjC,EAAI,EAAGA,EAAIS,EAAExB,OAAQe,GAAK,EAAG,CACpC,IAAIU,EAAID,EAAEiC,WAAW1C,GACb,IAAJU,EACFuB,EAAMG,KAAK1B,GAGK,iBADZO,EAAIiM,EAAWzM,EAAEwD,OAAOjE,MAEhB,IAAJiB,IAAaA,EAEjBgB,EAAMG,KAAKnB,IAGXgB,EAAMG,KAAKnB,IAAM,GACjBgB,EAAMG,KAAS,IAAJnB,IAGbgB,EAAMG,KApBI6L,GAIsB,CAoBtC,OAAOhM,CAtBU,CAnCwC,EA4E7D,IAkaMiM,EAlaFtG,EAAyB,CAC3B8E,EAAI,EACJyB,EAAI,EACJ9G,EAAI,EACJ+G,EAAI,GAsBFpJ,EAAS,WAkDOqJ,SAAAhN,EAASrC,GAEzB,IADA,IAAIsP,EAAQ,EACG,GAARtP,GACLsP,GAAS,EACTtP,KAAU,EAELsP,OAAAA,CANwB,CAhDjC,IAAIC,EAAyB,CAC3B,GACA,CAAC,EAAG,IACJ,CAAC,EAAG,IACJ,CAAC,EAAG,IACJ,CAAC,EAAG,IACJ,CAAC,EAAG,IACJ,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,GAAI,IACZ,CAAC,EAAG,GAAI,GAAI,IACZ,CAAC,EAAG,GAAI,GAAI,IACZ,CAAC,EAAG,GAAI,GAAI,IACZ,CAAC,EAAG,GAAI,GAAI,IACZ,CAAC,EAAG,GAAI,GAAI,IACZ,CAAC,EAAG,GAAI,GAAI,IACZ,CAAC,EAAG,GAAI,GAAI,GAAI,IAChB,CAAC,EAAG,GAAI,GAAI,GAAI,IAChB,CAAC,EAAG,GAAI,GAAI,GAAI,KAChB,CAAC,EAAG,GAAI,GAAI,GAAI,KAChB,CAAC,EAAG,GAAI,GAAI,GAAI,KAChB,CAAC,EAAG,GAAI,GAAI,GAAI,KAChB,CAAC,EAAG,GAAI,GAAI,GAAI,KAChB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,KACpB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,KACrB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,KACrB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,KACrB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,KACrB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,KACrB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,KACrB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,KAC1B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,KAC1B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,KAC1B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,KAC1B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,KAC1B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,YAMhB,CAWZpJ,eAAuBqJ,SAASxP,GAE9B,IADA,IAAIyP,EAAIzP,GAAQ,GAC4B,GAArCqP,EAAYI,GAAKJ,EAjBhBK,OAkBND,GAlBMC,MAkBQL,EAAYI,GAAKJ,EAlBzBK,MAoBR,OAlBaC,OAkBH3P,GAAQ,GAAMyP,EALY,EAQtClJ,iBAAyBqJ,SAAS5P,GAEhC,IADA,IAAIyP,EAAIzP,GAAQ,GAC4B,GAArCqP,EAAYI,GAAKJ,EAxBhBQ,OAyBNJ,GAzBMI,MAyBQR,EAAYI,GAAKJ,EAzBzBQ,aA2BRnQ,GAAgB,GAAM+P,CALgB,EAQxCxJ,mBAA2B6J,SAASjL,GAClC,SAA8BA,EAAa,EADG,EAIhD4D,gBAAwBsH,SAASrK,GAE/B,OAAQA,GAER,KAjGWsK,EAkGT,OAAgB,SAAAhP,EAAGkF,GAAK,OAAsB,IAAdlF,EAAIkF,GAAK,CAAnB,EAjGb+J,KAAAA,EAmGT,gBAAgBjP,GAAQ,UAAOA,EAAI,CAAb,EACxB,KAnGWkP,EAoGT,OAAO,SAASlP,EAAGkF,GAAK,OAAgB,GAATA,EAAI,CAAb,EAnGbiK,KAAAA,EAqGT,gBAAgBnP,EAAGkF,GAAK,OAAA,IAAQlF,EAAIkF,GAAK,CAAnB,EACxB,KArGWkK,EAsGT,OAAO,SAASpP,EAAGkF,GAAK,OAAA,IAAQhC,KAAKC,MAAMnD,EAAI,GAAKkD,KAAKC,MAAM+B,EAAI,IAAO,CAApD,EACxB,KAtGWmK,EAuGT,gBAAgBrP,EAAGkF,GAAK,OAAA,GAAQlF,EAAIkF,EAAK,EAAKlF,EAAIkF,EAAK,CAAjC,EAtGboK,KAAAA,EAwGT,OAAO,SAAStP,EAAGkF,GAAK,WAAUlF,EAAIkF,EAAK,EAAKlF,EAAIkF,EAAK,GAAK,CAAxC,EACxB,KAxGWqK,EAyGT,OAAO,SAASvP,EAAGkF,GAAK,WAAUlF,EAAIkF,EAAK,GAAKlF,EAAIkF,GAAK,GAAK,CAAxC,EAGtB,QAAA,KAAM,mBAAqBR,EAtBe,EA0B9CqC,0BAAkCyI,SAASC,GAEzC,IADA,IAAIC,EAAI1I,EAAa,CAAC,GAAI,GACjBhH,EAAI,EAAGA,EAAIyP,EAAoBzP,GAAK,EAC3C0P,EAAIA,EAAErD,SAASrF,EAAa,CAAC,EAAGuF,EAAOC,KAAKxM,IAAK,IAEnD,QAL6D,EAQ/DwD,gBAAwBC,SAASsE,EAAM4H,GAErC,GAAI,GAAKA,GAAe,GAAPA,EAIf,OAAO5H,GACP,KA5Ja6H,EA4JgB,OAAO,QA3JvBpH,EA4JgB,OAC7B,EAAA,KA5JaqH,EA6Jb,KA5JaC,EA4JgB,SAE3B,QAAA,KAAM,QAAU/H,OAGF,GAAA,GAAP4H,EAIT,OAAO5H,GACP,KAzKa6H,EAyKgB,OAC7B,GAAA,KAzKapH,EAyKgB,UAxKhBqH,KAAAA,EAyKgB,UAxKhBC,KAAAA,EAyKgB,OAAO,WAElC,KAAM,QAAU/H,YAGF,GAAP4H,GAcT,KAAM,QAAUA,EAVhB,OAAO5H,GACP,KAtLa6H,EAsLgB,OAC7B,GAAA,KAtLapH,EAsLgB,UArLhBqH,KAAAA,EAsLgB,OAAO,QArLvBC,EAsLgB,OAC7B,GACE,QAAA,KAAM,QAAU/H,EAIlB,CA1CyC,EA8C7CyB,aAAqBuG,SAAS7S,GAQ5B,IANA,IAAI2H,EAAc3H,EAAO8L,iBAErBO,EAAY,EAIPnF,EAAM,EAAGA,EAAMS,EAAaT,GAAO,EAC1C,IAAK,IAAIC,EAAM,EAAGA,EAAMQ,EAAaR,GAAO,EAAG,CAK7C,IAHA,IAAI2L,EAAY,EACZtI,EAAOxK,EAAO4L,OAAO1E,EAAKC,GAErB1G,GAAK,EAAQ,GAALA,EAAQA,GAAK,EAE5B,KAAc,EAAVyG,EAAMzG,GAASkH,GAAeT,EAAMzG,GAIxC,IAAK,IAAI+C,GAAK,EAAQ,GAALA,EAAQA,GAAK,EAEd,EAAV2D,EAAM3D,GAASmE,GAAeR,EAAM3D,IAI/B,GAAL/C,GAAe,GAAL+C,IAIVgH,GAAQxK,EAAO4L,OAAO1E,EAAMzG,EAAG0G,EAAM3D,KACvCsP,GAAa,GAKnB,EAAIA,IACFzG,GAAc,EAAIyG,EAAY,EA5Ba,CAmCjD,IAAS5L,EAAM,EAAGA,EAAMS,EAAc,EAAGT,GAAO,EAC9C,IAASC,EAAM,EAAGA,EAAMQ,EAAc,EAAGR,GAAO,EAC1CsJ,EAAQ,EACRzQ,EAAO4L,OAAO1E,EAAKC,KAAOsJ,GAAS,GACnCzQ,EAAO4L,OAAO1E,EAAM,EAAGC,KAAOsJ,GAAS,GACvCzQ,EAAO4L,OAAO1E,EAAKC,EAAM,KAAKsJ,GAAS,GACvCzQ,EAAO4L,OAAO1E,EAAM,EAAGC,EAAM,KAAKsJ,GAAS,IAClC,GAATA,GAAuB,GAATA,KAChBpE,GAAa,GAOnB,IAASnF,EAAM,EAAGA,EAAMS,EAAaT,GAAO,EAC1C,IAASC,EAAM,EAAGA,EAAMQ,EAAc,EAAGR,GAAO,EAC1CnH,EAAO4L,OAAO1E,EAAKC,KACfnH,EAAO4L,OAAO1E,EAAKC,EAAM,IACzBnH,EAAO4L,OAAO1E,EAAKC,EAAM,IACzBnH,EAAO4L,OAAO1E,EAAKC,EAAM,IACzBnH,EAAO4L,OAAO1E,EAAKC,EAAM,KACzBnH,EAAO4L,OAAO1E,EAAKC,EAAM,IACzBnH,EAAO4L,OAAO1E,EAAKC,EAAM,KAC/BkF,GAAa,QAKVlF,EAAM,EAAGA,EAAMQ,EAAaR,GAAO,EAC1C,IAASD,EAAM,EAAGA,EAAMS,EAAc,EAAGT,GAAO,EAC1ClH,EAAO4L,OAAO1E,EAAKC,KACfnH,EAAO4L,OAAO1E,EAAM,EAAGC,IACvBnH,EAAO4L,OAAO1E,EAAM,EAAGC,IACvBnH,EAAO4L,OAAO1E,EAAM,EAAGC,IACvBnH,EAAO4L,OAAO1E,EAAM,EAAGC,KACvBnH,EAAO4L,OAAO1E,EAAM,EAAGC,IACvBnH,EAAO4L,OAAO1E,EAAM,EAAGC,KAC7BkF,GAAa,IASVlF,IAAAA,EAFL4L,EAAY,EAEE5L,EAAMQ,EAAaR,GAAO,EAC1C,IAASD,EAAM,EAAGA,EAAMS,EAAaT,GAAO,EACtClH,EAAO4L,OAAO1E,EAAKC,KACrB4L,GAAa,GAMnB1G,OAAAA,EADYrG,KAAKgN,IAAI,IAAMD,EAAYpL,EAAcA,EAAc,IAAM,EACpD,EApGe,EA/JhB,CAAX,GA+QT0H,EAAS,WAMX,IAJA,IAAI4D,EAAgB7Q,MAAM,KACtB8Q,EAAgB9Q,MAAM,KAGjBU,EAAI,EAAO,EAAJA,EAAOA,GAAK,EAC1BmQ,EAAUnQ,GAAK,GAAKA,EAEbA,IAAAA,EAAI,EAAO,IAAJA,EAASA,GAAK,EAC5BmQ,EAAUnQ,GAAKmQ,EAAUnQ,EAAI,GACzBmQ,EAAUnQ,EAAI,GACdmQ,EAAUnQ,EAAI,GACdmQ,EAAUnQ,EAAI,GAEXA,IAAAA,EAAI,EAAO,IAAJA,EAASA,GAAK,EAC5BoQ,EAAUD,EAAUnQ,IAAOA,EA2B7B,MAxBYlC,CAEZ2O,KAAa4D,SAAS/O,GAEpB,GAAQ,EAAJA,EACF,KAAM,QAAUA,EAAI,IAGtB,OAAO7B,EAAU6B,EANM,EASzBkL,KAAa8D,SAAShP,GAEpB,KAAW,EAAJA,GACLA,GAAK,IAGP,KAAY,KAALA,GACLA,GAAK,IAGP,SAAiBA,EAVM,EA9BH,CAAX,GAuHToE,GAEEwI,EAAiB,CAQnB,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,GAGR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IAGR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IAGR,CAAC,EAAG,IAAK,IACT,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,GAGR,CAAC,EAAG,IAAK,KACT,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IAGnB,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IAGR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,IACR,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IAGnB,CAAC,EAAG,IAAK,IACT,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IAGnB,CAAC,EAAG,IAAK,KACT,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IAGnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IAGnB,CAAC,EAAG,IAAK,IACT,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IAGnB,CAAC,EAAG,IAAK,GAAI,EAAG,IAAK,IACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IAGnB,CAAC,EAAG,IAAK,KACT,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IAGpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IAGpB,CAAC,EAAG,IAAK,GAAI,EAAG,IAAK,IACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IAGpB,CAAC,EAAG,IAAK,GAAI,EAAG,IAAK,IACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IAGpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IAGpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IAGpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IAGpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,GAAI,GAAI,IACT,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IAGpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,GAAI,GAAI,IACT,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,IAGT,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IAGpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IAGpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,KACvB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,GAAI,IAAK,KACV,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IAGpB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,KACvB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IAGpB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGrB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,KAUX,CAkBZvI,YAAoB4K,SAAS1M,EAAYC,GAEvC,IAAI0M,EAlBgBC,SAAS5M,EAAYC,GAEzC,OAAOA,GACP,KAAK8D,EAAuB8E,EAC1B,SAAyC,GAAlB7I,EAAa,IACtC,KAAK+D,EAAuBuG,EAC1B,SAAyC,GAAlBtK,EAAa,GAAS,QAC1C+D,EAAuBP,EAC1B,OAAO5H,EAAkC,GAAlBoE,EAAa,GAAS,GAC1C+D,KAAAA,EAAuBwG,EAC1B,OAAO3O,EAAkC,GAAlBoE,EAAa,GAAS,GAVgB,CAkBjD4M,CAAgB5M,EAAYC,GAE1C,QAAsB,IAAX0M,EACT,KAAM,6BAA+B3M,EACjC,yBAA2BC,EAG7B7E,EAASuR,EAAQvR,OAAS,EAE1ByR,EAAO,GAEX,IAAK,IAAI1Q,EAAI,EAAGA,EAAIf,EAAQe,GAAK,EAM/B,IAJA,IAAI2N,EAAQ6C,EAAY,EAAJxQ,GAChB0G,EAAa8J,EAAY,EAAJxQ,EAAQ,GAC7BiG,EAAYuK,EAAY,EAAJxQ,EAAQ,GAEvBkF,EAAI,EAAGA,EAAIyI,EAAOzI,GAAK,EAAG,CACjCwL,IAAAA,EAAAA,EAAKtO,EAALsO,EAAKtO,KAA2B6D,EAAAA,EA5ChCnI,EAAQ,CAAA,EACN4I,EAAAA,WA2CkBA,EA1CxB5I,EAAMmI,UAAYA,EA0Cd3E,EAAAqP,KAAAD,EAzCG5S,EAwC8B,CAKrC,OAAO4S,CAxBsD,IAgtB1DxT,OAAAA,CAprEe,CAAX,IA0rEJ0L,mBAAmB,SAAW,SAASnI,GAI1C,IADA,IAAImQ,EAAO,GACF5Q,EAAE,EAAGA,EA4BGS,EA5BKxB,OAAQe,IAAK,CACjC,IAAI6Q,EA2BWpQ,EA3BIiC,WAAW1C,GACf,IAAX6Q,EAAiBD,EAAKxO,KAAKyO,GACX,KAAXA,EACPD,EAAKxO,KAAK,IAAQyO,GAAY,EAC1B,IAAmB,GAAXA,GAEM,MAAXA,GAAiC,OAAZA,EAC5BD,EAAKxO,KAAK,IAAQyO,GAAY,GAC1B,IAASA,GAAU,EAAK,GACxB,IAAmB,GAAXA,IAIZ7Q,IAIA6Q,EAAW,QAAwB,KAAXA,IAAmB,GAClB,KASZpQ,EATJiC,WAAW1C,IACpB4Q,EAAKxO,KAAK,IAAQyO,GAAW,GACzB,IAASA,GAAU,GAAM,GACzB,IAASA,GAAU,EAAK,GACxB,IAAmB,GAAXA,GAvBmB,CA4BrC,OAhC+CpC,CAAA,EAyC7CqC,EAAAA,QAGK5T,qGC5sEX6T,IAAAA,EAAgBzR,MAAQ,IACrB0R,KAAK,GACLC,KAAI,CAACC,EAAGlR,IAAMA,IAMLmR,IAAAA,EAAAC,EAAAD,IAAAA,EAKX,CALW,GACVC,EAAA1E,EAAA,MACAyB,EAAA,IACAgD,EAAA9J,EAAA,IACA8J,EAAA/C,EAAA,IAGUiD,IAAAA,EAAAC,EAAAD,IAAAA,EAMX,CANW,KACVE,QAAA,YACAC,aAAA,eACAH,EAAA,KAAA,SACAI,MAAA,QACAJ,EAAAK,QAAA,UC/DF,IAAMC,OACJC,GAAwB,iBAAfA,UAA4BC,QAAaD,GASpCE,SAAAA,EAAUC,KAA0BC,GAClD,IAAKA,EAAQ/S,OAAQ,OAAO8S,QAChBC,UACGC,YAAAA,IAAXC,GAAyBP,EAASI,IAAYJ,EAASO,IAC3DxC,EAAS,IAAKqC,GACdI,OAAOC,KAAKF,GAAQG,SAASpU,IAC3B,MAAiB8T,OACAG,KAEPL,MAAAA,QAAQS,IAAgBhT,MAAMuS,QAAQU,GAC9CR,EAAO9T,GAAOsU,EACLZ,EAASW,IAAgBX,EAASY,GAC3CR,EAAO9T,GAAO6T,EAAUK,OAAOK,OAAO,CAAd,EAAkBF,GAAcC,GAExDR,EAAO9T,GAAOsU,OAIDR,KAAWC,KAlB8C,KCVhES,EAAAC,EAAAD,IAAAA,EAGX,CAHW,GA2BIE,SAAAA,EAAiBC,GAG3B,OAFa,IAAQA,IAERC,aAAeC,EAAYD,WAAW5T,OACrD,KAAM,6CAcR,OAVE6T,EAAYC,SADVD,EAAYC,SACSC,OAAOF,EAAYC,UAEnB,EAGzBD,EAAYD,WAAaC,EAAYD,WAAW5B,KAAKgC,IAAkD,IAClGA,EACHnS,OAAQkS,OAAOC,EAAUnS,YAfsB4O,CAAA,CA1BjDgD,EAAAQ,OAAA,WACAC,OAAA,aCEUC,EAAAC,EAAAD,IAAAA,EAYX,CAZW,GACVC,EAAAC,IAAA,MACAF,EAAAG,UAAA,aACAF,EAAAG,QAAA,UACAH,EAAAI,aAAA,gBACAL,EAAAM,aAAA,gBACAL,EAAAM,eAAA,kBACAP,EAAAQ,OAAA,SACAR,EAAAS,cAAA,iBACAR,EAAAS,OAAA,SACAV,EAAAW,YAAA,iBACAC,QAAA,cAGUC,EAAAC,EAAAD,IAAAA,EAQX,IAPCA,EAAAX,IAAA,QACAQ,OAAA,SACAI,EAAAC,MAAA,QACAD,EAAAT,aAAA,gBACAS,EAAAN,OAAA,SACAK,EAAAG,SAAA,WACAH,EAAAI,QAAA,cAGUC,EAAAC,EAAAD,IAAAA,EAOX,CAPW,GACVC,EAAAjB,IAAA,MACAiB,EAAAT,OAAA,SACAS,EAAAd,aAAA,gBACAa,EAAAV,OAAA,SACAU,EAAAF,SAAA,WACAE,EAAAD,QAAA,cAGUG,EAAAC,EAAAD,IAAAA,EAGX,CAHW,GACVC,EAAAX,OAAA,SACAW,EAAAC,OAAA,SAkHKC,IAAAA,EAAgC,CACrCC,cAAU3C,EACV4C,MAAOL,EAAUV,OACjBzW,WAAO4U,EACP3U,YAAQ2U,EACRjT,KAAM,GACN8V,UAAW,CACTjR,WAAYkN,EAAW,GACvBhJ,UAAMkK,EACNnO,qBAAsBqN,EAAqB9J,GAE7C0N,aAAc,CACZC,oBAAoB,EACpBC,UAAW,GACXC,iBAAajD,EACbrI,OAAQ,GAEVuL,YAAa,CACXxF,KAAMyD,EAAQU,OACdsB,MAAO,OACPhX,KAAM,KAIMiX,SAAAA,EAAgBC,GAgDvBC,SA/CS,IAAQD,IAEbP,aAAe,IACrBQ,EAAWR,aACdC,qBAA4BO,EAAWR,aAAaC,mBACpDC,UAAW/R,KAAK2H,IAAI,EAAGmI,OAAOuC,EAAWR,aAAaE,aAAe,EACrErL,OAAQoJ,OAAOuC,EAAWR,aAAanL,SAG9BuL,EAAAA,YAAc,IACpBI,EAAWJ,aAEZI,EAAWJ,YAAYvC,WACzB2C,EAAWJ,YAAYvC,SAAWD,EAAiB4C,EAAWJ,YAAYvC,WAGjEuC,EAAAA,YAAY/W,KAAO8E,KAAKsS,MAAMtS,KAAKyD,IAAI,EAAG4O,EAAWJ,YAAY/W,OAAS,IAEtEqX,EAAAA,uBACbF,EAAWE,qBAAuB,IAC7BF,EAAWE,sBAEZF,EAAWE,qBAAqB7C,WAClC2C,EAAWE,qBAAqB7C,SAAWD,EAAiB4C,EAAWE,qBAAqB7C,YAI5F2C,EAAWG,oBACbH,EAAWG,kBAAoB,IAC1BH,EAAWG,mBAEZH,EAAWG,kBAAkB9C,WAC/B2C,EAAWG,kBAAkB9C,SAAWD,EAAiB4C,EAAWG,kBAAkB9C,YAI3E+C,EAAAA,oBACbJ,EAAWI,kBAAoB,IAC1BJ,EAAWI,mBAEZJ,EAAWI,kBAAkB/C,WAC/B2C,EAAWI,kBAAkB/C,SAAWD,EAAiB4C,EAAWI,kBAAkB/C,YAI1EgC,EAAAA,WAAUW,EAAWX,SAAWA,UAEzCW,CAhDuC,CC/KnC,IAAAK,EAA0B,CACrC,CAACzE,EAAqBzE,GAAI,IAC1B,CAACyE,EAAqBhD,GAAI,IAC1B,CAACgD,EAAqB9J,GAAI,IAC1B,CAAC8J,EAAqB/C,GAAI,ICN5B,IAAMyH,EAAK,SAELC,SAAmBC,EAACC,GACxB,OAAOA,EAAMC,QAAQ,GAAGC,QAAQL,EAAI,GADC,UAIhBM,EAACC,KAAkCC,GACxD,OACGC,EAAAA,QAAO,CAACpS,EAAGhC,EAAGlC,KACb,IAAI7B,EAAa,GAGjB,WAFOA,EAAIkY,EAAOrW,EAAI,IACN,qBAAU7B,EAAI2X,EAAU3X,IACjC,GAAG+F,IAAI/F,IAAI+D,GAAX,GACN,IACFuI,OACAyL,QAAQ,eAAgB,IAT8C,SCCrE,WAAAK,GACF,OAAYC,KAAAA,QADH,CAIXC,WAAAA,CACmB9G,EACAiF,GADA8B,KAAI/G,KAAJA,EACA+G,KAAQ9B,SAARA,CAAkB,CAGrC+B,IAAAA,CAAKC,GAEH,IAAIC,EAEJ,OAHUH,KAAO/G,MAIf,KAAKsE,EAAcH,OACjB+C,EAAeH,KAAKI,WACpB,WACG7C,EAAcE,MACjB0C,EAAeH,KAAKK,UACpB,WACG9C,EAAcR,aACjBoD,EAAeH,KAAKM,kBAEjB/C,KAAAA,EAAcL,OACjBiD,EAAeH,KAAKO,iBAEjBhD,KAAAA,EAAcI,QACjBwC,EAAeH,KAAKQ,YAEtB,MAAA,KAAKjD,EAAcG,SACjByC,EAAeH,KAAKS,aACpB,MAGAN,QAAAA,EAAeH,KAAKU,QAGxBP,EAAalG,KAAK+F,KAAME,EA5BP,CA+BXS,YAAAA,EAAe5X,EAAAA,EAAGC,EAAAA,EAAGtB,KAAAA,EAAM2U,SAAAA,EAAW,EAAG4D,KAAAA,IACpClX,KAAQ,EACRC,KAAQ,EAEnBiX,IACKH,KAAAA,UAAUc,aAAa,YAAa,UAAUxB,EAAW,IAAM/C,EAAY7P,KAAKqU,OAAOC,KAAMC,KAL3B,CAQjEC,QAAAA,CAASd,GACf,IAAMxY,KAAAA,EAAMqB,EAAAA,EAAGC,EAAAA,GAAQkX,EAElBS,KAAAA,aAAa,IACbT,EACHD,KAAM,KACJD,KAAKF,SAAWE,KAAK9B,SAAS+C,gBAAgB,6BAA8B,UACvEnB,KAAAA,SAASc,aAAa,KAAMxB,EAAUrW,EAAIrB,EAAO,IACtDsY,KAAKF,SAASc,aAAa,KAAMxB,EAAUpW,EAAItB,EAAO,IACjDoY,KAAAA,SAASc,aAAa,IAAKxB,EAAU1X,EAAO,GAAjD,GAToC,CAclCwZ,WAAAA,CAAYhB,GAClB,IAAMxY,KAAAA,EAAMqB,EAAAA,EAAGC,EAAAA,GAAQkX,EAElBS,KAAAA,aAAa,IACbT,EACHD,KAAM,KACJD,KAAKF,SAAWE,KAAK9B,SAAS+C,gBAAgB,6BAA8B,QACvEnB,KAAAA,SAASc,aAAa,IAAKxB,EAAUrW,IAC1CiX,KAAKF,SAASc,aAAa,IAAKxB,EAAUpW,IAC1CgX,KAAKF,SAASc,aAAa,QAASxB,EAAU1X,SACzCoY,SAASc,aAAa,SAAUxB,EAAU1X,GAA/C,GAVuC,CAerCyZ,UAAAA,CAAWjB,GACjB,IAAMxY,KAAAA,EAAMqB,EAAAA,EAAGC,EAAAA,GAAQkX,OAElBJ,SAAWE,KAAK9B,SAAS+C,gBAAgB,6BAA8B,QAiH5E,IAAIG,GAAO,EACP9X,EAAI,EACHwW,KAAAA,SAASc,aACZ,IAnHWS,CACX,IACA,EACA,SACA,IACA,EACA,UACC,SACD,UACC,SACD,SACA,KACC,SACD,SACC,SACD,SACA,KACC,MACD,UACC,SACD,UACC,SACD,SACA,IACA,SACA,SACA,SACA,SACA,SACA,SACA,IACA,GACA,SACA,IACA,SACA,SACA,IACA,SACA,SACA,SACA,SACA,OACA,SACA,IACA,SACA,SACA,SACA,SACA,SACA,SACA,IACA,SACA,SACA,SACA,SACA,IACA,EACA,SACA,EACA,SACA,IACA,GACC,SACD,UACC,SACD,QACC,SACD,IACA,UACC,OACD,UACC,OACD,IACA,SACA,EACA,SACA,SACA,OACA,SACA,IACA,SACA,SACA,GACA,SACA,IACA,UACC,SACD,UACC,SACD,UACC,MACD,IACA,UACC,SACD,UACC,SACD,QACC,SACD,IACA,SACA,EACA,SACA,SACA,SACA,OACA,IACA,EACA,SACA,EACA,SACA,KAOG9G,KAAK/O,GACY,iBAAhBA,GAGSA,EAFH,EACJ4V,EAAO5V,EAAE8V,eAAiB9V,EACnBA,IAETlC,IACAkC,GAAQ9D,EACRsC,IACEwB,GAAc,GAATlC,EAAI,EAASP,EAAIC,GAEjBoW,EAAU5T,MAElBsI,KAAK,KAtIgC,CA0IpCyN,YAAAA,CAAarB,GACnB,IAAMxY,KAAAA,EAAMqB,EAAAA,EAAGC,EAAAA,GAAQkX,EAEvBF,KAAKW,aAAa,IACbT,EACHD,KAAM,KACJD,KAAKF,SAAWE,KAAK9B,SAAS+C,gBAAgB,6BAA8B,QAC5EjB,KAAKF,SAASc,aAAa,IAAKxB,EAAUrW,IACrC+W,KAAAA,SAASc,aAAa,IAAKxB,EAAUpW,SACrC8W,SAASc,aAAa,QAASxB,EAAU1X,IACzCoY,KAAAA,SAASc,aAAa,SAAUxB,EAAU1X,IAC1CoY,KAAAA,SAASc,aAAa,KAAMxB,EAAU1X,EAAO,IAC7CoY,KAAAA,SAASc,aAAa,KAAMxB,EAAU1X,EAAO,GAAlD,GAZwC,CAiBtC8Z,WAAAA,CAAYtB,GAClB,IAAMxY,KAAAA,EAAMqB,EAAAA,EAAGC,EAAAA,GAAQkX,IACVxY,EAAO,OACfiZ,aAAa,IACbT,EACHD,KAAM,KACJD,KAAKF,SA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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"qr-code-styling.js","sources":["../node_modules/@liquid-js/qrcode-generator/lib/qrcode/BitBuffer.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/ErrorCorrectLevel.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRMath.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/Polynomial.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/Mode.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRData.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QR8BitByte.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRAlphaNum.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRKanji.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRNumber.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/MaskPattern.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRUtil.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/RSBlock.js","../node_modules/@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js","../src/utils/merge.ts","../src/utils/gradient.ts","../src/utils/options.ts","../src/utils/qrcode.ts","../src/utils/svg.ts","../src/figures/corner-dot.ts","../src/figures/corner-square.ts","../src/figures/dot.ts","../src/tools/browser-image-tools.ts","../src/core/qr-svg.ts","../src/utils/image.ts","../src/core/qr-code-styling.ts","../node_modules/@liquid-js/qrcode-generator/lib/text/stringToBytes_UTF8.js","../src/utils/canvas-options.ts","../src/tools/browser-utils.ts","../src/index.ts"],"sourcesContent":["export class BitBuffer {\n constructor() {\n this.buffer = [];\n this.length = 0;\n }\n getBuffer() {\n return this.buffer;\n }\n getLengthInBits() {\n return this.length;\n }\n toString() {\n let buffer = \"\";\n for (let i = 0; i < this.getLengthInBits(); i += 1) {\n buffer += this.getBit(i) ? \"1\" : \"0\";\n }\n return buffer;\n }\n getBit(index) {\n return ((this.buffer[~~(index / 8)] >>> (7 - (index % 8))) & 1) == 1;\n }\n put(num, length) {\n for (let i = 0; i < length; i += 1) {\n this.putBit(((num >>> (length - i - 1)) & 1) == 1);\n }\n }\n putBit(bit) {\n if (this.length == this.buffer.length * 8) {\n this.buffer.push(0);\n }\n if (bit) {\n this.buffer[~~(this.length / 8)] |= 0x80 >>> this.length % 8;\n }\n this.length += 1;\n }\n}\n//# sourceMappingURL=BitBuffer.js.map","/**\n * ErrorCorrectLevel\n * @author Kazuhiko Arase\n */\nexport var ErrorCorrectLevel;\n(function (ErrorCorrectLevel) {\n /**\n * 7%\n */\n ErrorCorrectLevel[ErrorCorrectLevel[\"L\"] = 1] = \"L\";\n /**\n * 15%\n */\n ErrorCorrectLevel[ErrorCorrectLevel[\"M\"] = 0] = \"M\";\n /**\n * 25%\n */\n ErrorCorrectLevel[ErrorCorrectLevel[\"Q\"] = 3] = \"Q\";\n /**\n * 30%\n */\n ErrorCorrectLevel[ErrorCorrectLevel[\"H\"] = 2] = \"H\";\n})(ErrorCorrectLevel || (ErrorCorrectLevel = {}));\n//# sourceMappingURL=ErrorCorrectLevel.js.map","/**\n * QRMath\n * @author Kazuhiko Arase\n */\nexport class QRMath {\n constructor() {\n throw \"error\";\n }\n static glog(n) {\n if (n < 1) {\n throw \"log(\" + n + \")\";\n }\n return QRMath.LOG_TABLE[n];\n }\n static gexp(n) {\n while (n < 0) {\n n += 255;\n }\n while (n >= 256) {\n n -= 255;\n }\n return QRMath.EXP_TABLE[n];\n }\n}\nQRMath.initialize = (function () {\n QRMath.EXP_TABLE = [];\n QRMath.LOG_TABLE = [];\n for (let i = 0; i < 256; i += 1) {\n QRMath.EXP_TABLE.push(i < 8\n ? 1 << i\n : QRMath.EXP_TABLE[i - 4] ^ QRMath.EXP_TABLE[i - 5] ^ QRMath.EXP_TABLE[i - 6] ^ QRMath.EXP_TABLE[i - 8]);\n QRMath.LOG_TABLE.push(0);\n }\n for (let i = 0; i < 255; i += 1) {\n QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i;\n }\n})();\n//# sourceMappingURL=QRMath.js.map","import { QRMath } from \"./QRMath.js\";\n/**\n * Polynomial\n * @author Kazuhiko Arase\n */\nexport class Polynomial {\n constructor(num, shift = 0) {\n let offset = 0;\n while (offset < num.length && num[offset] == 0) {\n offset += 1;\n }\n this.num = [];\n const len = num.length - offset;\n for (let i = 0; i < len; i += 1) {\n this.num.push(num[offset + i]);\n }\n for (let i = 0; i < shift; i += 1) {\n this.num.push(0);\n }\n }\n getAt(index) {\n return this.num[index];\n }\n getLength() {\n return this.num.length;\n }\n toString() {\n let buffer = \"\";\n for (let i = 0; i < this.getLength(); i += 1) {\n if (i > 0) {\n buffer += \",\";\n }\n buffer += this.getAt(i);\n }\n return buffer.toString();\n }\n toLogString() {\n let buffer = \"\";\n for (let i = 0; i < this.getLength(); i += 1) {\n if (i > 0) {\n buffer += \",\";\n }\n buffer += QRMath.glog(this.getAt(i));\n }\n return buffer.toString();\n }\n multiply(e) {\n const num = [];\n const len = this.getLength() + e.getLength() - 1;\n for (let i = 0; i < len; i += 1) {\n num.push(0);\n }\n for (let i = 0; i < this.getLength(); i += 1) {\n for (let j = 0; j < e.getLength(); j += 1) {\n num[i + j] ^= QRMath.gexp(QRMath.glog(this.getAt(i)) + QRMath.glog(e.getAt(j)));\n }\n }\n return new Polynomial(num);\n }\n mod(e) {\n if (this.getLength() - e.getLength() < 0) {\n return this;\n }\n const ratio = QRMath.glog(this.getAt(0)) - QRMath.glog(e.getAt(0));\n // create copy\n const num = [];\n for (let i = 0; i < this.getLength(); i += 1) {\n num.push(this.getAt(i));\n }\n // subtract and calc rest.\n for (let i = 0; i < e.getLength(); i += 1) {\n num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i)) + ratio);\n }\n // call recursively\n return new Polynomial(num).mod(e);\n }\n}\n//# sourceMappingURL=Polynomial.js.map","/**\n * Mode\n * @author Kazuhiko Arase\n */\nexport var Mode;\n(function (Mode) {\n /**\n * number\n */\n Mode[Mode[\"MODE_NUMBER\"] = 1] = \"MODE_NUMBER\";\n /**\n * alphabet and number\n */\n Mode[Mode[\"MODE_ALPHA_NUM\"] = 2] = \"MODE_ALPHA_NUM\";\n /**\n * 8bit byte\n */\n Mode[Mode[\"MODE_8BIT_BYTE\"] = 4] = \"MODE_8BIT_BYTE\";\n /**\n * KANJI\n */\n Mode[Mode[\"MODE_KANJI\"] = 8] = \"MODE_KANJI\";\n})(Mode || (Mode = {}));\n//# sourceMappingURL=Mode.js.map","import { Mode } from \"./Mode.js\";\n/**\n * QRData\n * @author Kazuhiko Arase\n */\nexport class QRData {\n constructor(mode, data) {\n this.mode = mode;\n this.data = data;\n }\n getMode() {\n return this.mode;\n }\n getData() {\n return this.data;\n }\n getLengthInBits(typeNumber) {\n if (1 <= typeNumber && typeNumber < 10) {\n // 1 - 9\n switch (this.mode) {\n case Mode.MODE_NUMBER:\n return 10;\n case Mode.MODE_ALPHA_NUM:\n return 9;\n case Mode.MODE_8BIT_BYTE:\n return 8;\n case Mode.MODE_KANJI:\n return 8;\n default:\n throw \"mode:\" + this.mode;\n }\n }\n else if (typeNumber < 27) {\n // 10 - 26\n switch (this.mode) {\n case Mode.MODE_NUMBER:\n return 12;\n case Mode.MODE_ALPHA_NUM:\n return 11;\n case Mode.MODE_8BIT_BYTE:\n return 16;\n case Mode.MODE_KANJI:\n return 10;\n default:\n throw \"mode:\" + this.mode;\n }\n }\n else if (typeNumber < 41) {\n // 27 - 40\n switch (this.mode) {\n case Mode.MODE_NUMBER:\n return 14;\n case Mode.MODE_ALPHA_NUM:\n return 13;\n case Mode.MODE_8BIT_BYTE:\n return 16;\n case Mode.MODE_KANJI:\n return 12;\n default:\n throw \"mode:\" + this.mode;\n }\n }\n else {\n throw \"typeNumber:\" + typeNumber;\n }\n }\n}\n//# sourceMappingURL=QRData.js.map","import { Mode } from \"./Mode.js\";\nimport { QRData } from \"./QRData.js\";\n/**\n * QR8BitByte\n * @author Kazuhiko Arase\n */\nexport class QR8BitByte extends QRData {\n constructor(data, stringToBytes) {\n super(Mode.MODE_8BIT_BYTE, data);\n this.stringToBytes = stringToBytes;\n }\n write(buffer) {\n const data = this.stringToBytes(this.getData());\n for (let i = 0; i < data.length; i += 1) {\n buffer.put(data[i], 8);\n }\n }\n getLength() {\n return this.stringToBytes(this.getData()).length;\n }\n}\n//# sourceMappingURL=QR8BitByte.js.map","import { Mode } from \"./Mode.js\";\nimport { QRData } from \"./QRData.js\";\n/**\n * QRAlphaNum\n * @author Kazuhiko Arase\n */\nexport class QRAlphaNum extends QRData {\n constructor(data) {\n super(Mode.MODE_ALPHA_NUM, data);\n }\n write(buffer) {\n const s = this.getData();\n let i = 0;\n while (i + 1 < s.length) {\n buffer.put(QRAlphaNum.getCode(s.charAt(i)) * 45 + QRAlphaNum.getCode(s.charAt(i + 1)), 11);\n i += 2;\n }\n if (i < s.length) {\n buffer.put(QRAlphaNum.getCode(s.charAt(i)), 6);\n }\n }\n getLength() {\n return this.getData().length;\n }\n static getCode(c) {\n if (\"0\" <= c && c <= \"9\") {\n return c.charCodeAt(0) - \"0\".charCodeAt(0);\n }\n else if (\"A\" <= c && c <= \"Z\") {\n return c.charCodeAt(0) - \"A\".charCodeAt(0) + 10;\n }\n else {\n switch (c) {\n case \" \":\n return 36;\n case \"$\":\n return 37;\n case \"%\":\n return 38;\n case \"*\":\n return 39;\n case \"+\":\n return 40;\n case \"-\":\n return 41;\n case \".\":\n return 42;\n case \"/\":\n return 43;\n case \":\":\n return 44;\n default:\n throw \"illegal char :\" + c;\n }\n }\n }\n}\n//# sourceMappingURL=QRAlphaNum.js.map","import { Mode } from \"./Mode.js\";\nimport { QRData } from \"./QRData.js\";\n/**\n * QRKanji(SJIS only)\n * @author Kazuhiko Arase\n */\nexport class QRKanji extends QRData {\n constructor(data, stringToBytes) {\n super(Mode.MODE_KANJI, data);\n this.stringToBytes = stringToBytes;\n }\n write(buffer) {\n const data = this.stringToBytes(this.getData());\n let i = 0;\n while (i + 1 < data.length) {\n let c = ((0xff & data[i]) << 8) | (0xff & data[i + 1]);\n if (0x8140 <= c && c <= 0x9ffc) {\n c -= 0x8140;\n }\n else if (0xe040 <= c && c <= 0xebbf) {\n c -= 0xc140;\n }\n else {\n throw \"illegal char at \" + (i + 1) + \"/\" + c;\n }\n c = ((c >>> 8) & 0xff) * 0xc0 + (c & 0xff);\n buffer.put(c, 13);\n i += 2;\n }\n if (i < data.length) {\n throw \"illegal char at \" + (i + 1);\n }\n }\n getLength() {\n return this.stringToBytes(this.getData()).length / 2;\n }\n}\n//# sourceMappingURL=QRKanji.js.map","import { Mode } from \"./Mode.js\";\nimport { QRData } from \"./QRData.js\";\n/**\n * QRNumber\n * @author Kazuhiko Arase\n */\nexport class QRNumber extends QRData {\n constructor(data) {\n super(Mode.MODE_NUMBER, data);\n }\n write(buffer) {\n const data = this.getData();\n let i = 0;\n while (i + 2 < data.length) {\n buffer.put(QRNumber.strToNum(data.substring(i, i + 3)), 10);\n i += 3;\n }\n if (i < data.length) {\n if (data.length - i == 1) {\n buffer.put(QRNumber.strToNum(data.substring(i, i + 1)), 4);\n }\n else if (data.length - i == 2) {\n buffer.put(QRNumber.strToNum(data.substring(i, i + 2)), 7);\n }\n }\n }\n getLength() {\n return this.getData().length;\n }\n static strToNum(s) {\n let num = 0;\n for (let i = 0; i < s.length; i += 1) {\n num = num * 10 + QRNumber.chatToNum(s.charAt(i));\n }\n return num;\n }\n static chatToNum(c) {\n if (\"0\" <= c && c <= \"9\") {\n return c.charCodeAt(0) - \"0\".charCodeAt(0);\n }\n throw \"illegal char :\" + c;\n }\n}\n//# sourceMappingURL=QRNumber.js.map","/**\n * MaskPattern\n * @author Kazuhiko Arase\n */\nexport var MaskPattern;\n(function (MaskPattern) {\n /**\n * mask pattern 000\n */\n MaskPattern[MaskPattern[\"PATTERN000\"] = 0] = \"PATTERN000\";\n /**\n * mask pattern 001\n */\n MaskPattern[MaskPattern[\"PATTERN001\"] = 1] = \"PATTERN001\";\n /**\n * mask pattern 010\n */\n MaskPattern[MaskPattern[\"PATTERN010\"] = 2] = \"PATTERN010\";\n /**\n * mask pattern 011\n */\n MaskPattern[MaskPattern[\"PATTERN011\"] = 3] = \"PATTERN011\";\n /**\n * mask pattern 100\n */\n MaskPattern[MaskPattern[\"PATTERN100\"] = 4] = \"PATTERN100\";\n /**\n * mask pattern 101\n */\n MaskPattern[MaskPattern[\"PATTERN101\"] = 5] = \"PATTERN101\";\n /**\n * mask pattern 110\n */\n MaskPattern[MaskPattern[\"PATTERN110\"] = 6] = \"PATTERN110\";\n /**\n * mask pattern 111\n */\n MaskPattern[MaskPattern[\"PATTERN111\"] = 7] = \"PATTERN111\";\n})(MaskPattern || (MaskPattern = {}));\n//# sourceMappingURL=MaskPattern.js.map","import { ErrorCorrectLevel } from \"./ErrorCorrectLevel.js\";\nimport { MaskPattern } from \"./MaskPattern.js\";\nimport { Mode } from \"./Mode.js\";\nimport { Polynomial } from \"./Polynomial.js\";\nimport { QRMath } from \"./QRMath.js\";\n/**\n * QRUtil\n * @author Kazuhiko Arase\n */\nexport class QRUtil {\n constructor() {\n throw \"error\";\n }\n static getPatternPosition(typeNumber) {\n return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];\n }\n static getMaxLength(typeNumber, mode, errorCorrectLevel) {\n const t = typeNumber - 1;\n let e = 0;\n let m = 0;\n switch (errorCorrectLevel) {\n case ErrorCorrectLevel.L:\n e = 0;\n break;\n case ErrorCorrectLevel.M:\n e = 1;\n break;\n case ErrorCorrectLevel.Q:\n e = 2;\n break;\n case ErrorCorrectLevel.H:\n e = 3;\n break;\n default:\n throw \"e:\" + errorCorrectLevel;\n }\n switch (mode) {\n case Mode.MODE_NUMBER:\n m = 0;\n break;\n case Mode.MODE_ALPHA_NUM:\n m = 1;\n break;\n case Mode.MODE_8BIT_BYTE:\n m = 2;\n break;\n case Mode.MODE_KANJI:\n m = 3;\n break;\n default:\n throw \"m:\" + mode;\n }\n return QRUtil.MAX_LENGTH[t][e][m];\n }\n static getErrorCorrectPolynomial(errorCorrectLength) {\n let a = new Polynomial([1]);\n for (let i = 0; i < errorCorrectLength; i += 1) {\n a = a.multiply(new Polynomial([1, QRMath.gexp(i)]));\n }\n return a;\n }\n static getMaskFunc(maskPattern) {\n switch (maskPattern) {\n case MaskPattern.PATTERN000:\n return (i, j) => (i + j) % 2 == 0;\n case MaskPattern.PATTERN001:\n return (i, _j) => i % 2 == 0;\n case MaskPattern.PATTERN010:\n return (_i, j) => j % 3 == 0;\n case MaskPattern.PATTERN011:\n return (i, j) => (i + j) % 3 == 0;\n case MaskPattern.PATTERN100:\n return (i, j) => (~~(i / 2) + ~~(j / 3)) % 2 == 0;\n case MaskPattern.PATTERN101:\n return (i, j) => ((i * j) % 2) + ((i * j) % 3) == 0;\n case MaskPattern.PATTERN110:\n return (i, j) => (((i * j) % 2) + ((i * j) % 3)) % 2 == 0;\n case MaskPattern.PATTERN111:\n return (i, j) => (((i * j) % 3) + ((i + j) % 2)) % 2 == 0;\n default:\n throw \"mask:\" + maskPattern;\n }\n }\n static getLostPoint(qrCode) {\n const moduleCount = qrCode.getModuleCount();\n let lostPoint = 0;\n // LEVEL1\n for (let row = 0; row < moduleCount; row += 1) {\n for (let col = 0; col < moduleCount; col += 1) {\n let sameCount = 0;\n const dark = qrCode.isDark(row, col);\n for (let r = -1; r <= 1; r += 1) {\n if (row + r < 0 || moduleCount <= row + r) {\n continue;\n }\n for (let c = -1; c <= 1; c += 1) {\n if (col + c < 0 || moduleCount <= col + c) {\n continue;\n }\n if (r == 0 && c == 0) {\n continue;\n }\n if (dark == qrCode.isDark(row + r, col + c)) {\n sameCount += 1;\n }\n }\n }\n if (sameCount > 5) {\n lostPoint += 3 + sameCount - 5;\n }\n }\n }\n // LEVEL2\n for (let row = 0; row < moduleCount - 1; row += 1) {\n for (let col = 0; col < moduleCount - 1; col += 1) {\n let count = 0;\n if (qrCode.isDark(row, col))\n count += 1;\n if (qrCode.isDark(row + 1, col))\n count += 1;\n if (qrCode.isDark(row, col + 1))\n count += 1;\n if (qrCode.isDark(row + 1, col + 1))\n count += 1;\n if (count == 0 || count == 4) {\n lostPoint += 3;\n }\n }\n }\n // LEVEL3\n for (let row = 0; row < moduleCount; row += 1) {\n for (let col = 0; col < moduleCount - 6; col += 1) {\n if (qrCode.isDark(row, col) &&\n !qrCode.isDark(row, col + 1) &&\n qrCode.isDark(row, col + 2) &&\n qrCode.isDark(row, col + 3) &&\n qrCode.isDark(row, col + 4) &&\n !qrCode.isDark(row, col + 5) &&\n qrCode.isDark(row, col + 6)) {\n lostPoint += 40;\n }\n }\n }\n for (let col = 0; col < moduleCount; col += 1) {\n for (let row = 0; row < moduleCount - 6; row += 1) {\n if (qrCode.isDark(row, col) &&\n !qrCode.isDark(row + 1, col) &&\n qrCode.isDark(row + 2, col) &&\n qrCode.isDark(row + 3, col) &&\n qrCode.isDark(row + 4, col) &&\n !qrCode.isDark(row + 5, col) &&\n qrCode.isDark(row + 6, col)) {\n lostPoint += 40;\n }\n }\n }\n // LEVEL4\n let darkCount = 0;\n for (let col = 0; col < moduleCount; col += 1) {\n for (let row = 0; row < moduleCount; row += 1) {\n if (qrCode.isDark(row, col)) {\n darkCount += 1;\n }\n }\n }\n const ratio = Math.abs((100 * darkCount) / moduleCount / moduleCount - 50) / 5;\n lostPoint += ratio * 10;\n return lostPoint;\n }\n static getBCHTypeInfo(data) {\n let d = data << 10;\n while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {\n d ^= QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15));\n }\n return ((data << 10) | d) ^ QRUtil.G15_MASK;\n }\n static getBCHTypeNumber(data) {\n let d = data << 12;\n while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {\n d ^= QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18));\n }\n return (data << 12) | d;\n }\n static getBCHDigit(data) {\n let digit = 0;\n while (data != 0) {\n digit += 1;\n data >>>= 1;\n }\n return digit;\n }\n}\nQRUtil.PATTERN_POSITION_TABLE = [\n [],\n [6, 18],\n [6, 22],\n [6, 26],\n [6, 30],\n [6, 34],\n [6, 22, 38],\n [6, 24, 42],\n [6, 26, 46],\n [6, 28, 50],\n [6, 30, 54],\n [6, 32, 58],\n [6, 34, 62],\n [6, 26, 46, 66],\n [6, 26, 48, 70],\n [6, 26, 50, 74],\n [6, 30, 54, 78],\n [6, 30, 56, 82],\n [6, 30, 58, 86],\n [6, 34, 62, 90],\n [6, 28, 50, 72, 94],\n [6, 26, 50, 74, 98],\n [6, 30, 54, 78, 102],\n [6, 28, 54, 80, 106],\n [6, 32, 58, 84, 110],\n [6, 30, 58, 86, 114],\n [6, 34, 62, 90, 118],\n [6, 26, 50, 74, 98, 122],\n [6, 30, 54, 78, 102, 126],\n [6, 26, 52, 78, 104, 130],\n [6, 30, 56, 82, 108, 134],\n [6, 34, 60, 86, 112, 138],\n [6, 30, 58, 86, 114, 142],\n [6, 34, 62, 90, 118, 146],\n [6, 30, 54, 78, 102, 126, 150],\n [6, 24, 50, 76, 102, 128, 154],\n [6, 28, 54, 80, 106, 132, 158],\n [6, 32, 58, 84, 110, 136, 162],\n [6, 26, 54, 82, 110, 138, 166],\n [6, 30, 58, 86, 114, 142, 170]\n];\nQRUtil.MAX_LENGTH = [\n [\n [41, 25, 17, 10],\n [34, 20, 14, 8],\n [27, 16, 11, 7],\n [17, 10, 7, 4]\n ],\n [\n [77, 47, 32, 20],\n [63, 38, 26, 16],\n [48, 29, 20, 12],\n [34, 20, 14, 8]\n ],\n [\n [127, 77, 53, 32],\n [101, 61, 42, 26],\n [77, 47, 32, 20],\n [58, 35, 24, 15]\n ],\n [\n [187, 114, 78, 48],\n [149, 90, 62, 38],\n [111, 67, 46, 28],\n [82, 50, 34, 21]\n ],\n [\n [255, 154, 106, 65],\n [202, 122, 84, 52],\n [144, 87, 60, 37],\n [106, 64, 44, 27]\n ],\n [\n [322, 195, 134, 82],\n [255, 154, 106, 65],\n [178, 108, 74, 45],\n [139, 84, 58, 36]\n ],\n [\n [370, 224, 154, 95],\n [293, 178, 122, 75],\n [207, 125, 86, 53],\n [154, 93, 64, 39]\n ],\n [\n [461, 279, 192, 118],\n [365, 221, 152, 93],\n [259, 157, 108, 66],\n [202, 122, 84, 52]\n ],\n [\n [552, 335, 230, 141],\n [432, 262, 180, 111],\n [312, 189, 130, 80],\n [235, 143, 98, 60]\n ],\n [\n [652, 395, 271, 167],\n [513, 311, 213, 131],\n [364, 221, 151, 93],\n [288, 174, 119, 74]\n ]\n];\nQRUtil.G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);\nQRUtil.G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);\nQRUtil.G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);\n//# sourceMappingURL=QRUtil.js.map","import { ErrorCorrectLevel } from \"./ErrorCorrectLevel.js\";\n/**\n * RSBlock\n * @author Kazuhiko Arase\n */\nexport class RSBlock {\n constructor(totalCount, dataCount) {\n this.totalCount = totalCount;\n this.dataCount = dataCount;\n }\n getDataCount() {\n return this.dataCount;\n }\n getTotalCount() {\n return this.totalCount;\n }\n static getRSBlocks(typeNumber, errorCorrectLevel) {\n const rsBlock = RSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);\n const length = rsBlock.length / 3;\n const list = [];\n for (let i = 0; i < length; i += 1) {\n const count = rsBlock[i * 3 + 0];\n const totalCount = rsBlock[i * 3 + 1];\n const dataCount = rsBlock[i * 3 + 2];\n for (let j = 0; j < count; j += 1) {\n list.push(new RSBlock(totalCount, dataCount));\n }\n }\n return list;\n }\n static getRsBlockTable(typeNumber, errorCorrectLevel) {\n switch (errorCorrectLevel) {\n case ErrorCorrectLevel.L:\n return RSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n case ErrorCorrectLevel.M:\n return RSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n case ErrorCorrectLevel.Q:\n return RSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n case ErrorCorrectLevel.H:\n return RSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n default:\n break;\n }\n throw \"tn:\" + typeNumber + \"/ecl:\" + errorCorrectLevel;\n }\n}\nRSBlock.RS_BLOCK_TABLE = [\n // L\n // M\n // Q\n // H\n // 1\n [1, 26, 19],\n [1, 26, 16],\n [1, 26, 13],\n [1, 26, 9],\n // 2\n [1, 44, 34],\n [1, 44, 28],\n [1, 44, 22],\n [1, 44, 16],\n // 3\n [1, 70, 55],\n [1, 70, 44],\n [2, 35, 17],\n [2, 35, 13],\n // 4\n [1, 100, 80],\n [2, 50, 32],\n [2, 50, 24],\n [4, 25, 9],\n // 5\n [1, 134, 108],\n [2, 67, 43],\n [2, 33, 15, 2, 34, 16],\n [2, 33, 11, 2, 34, 12],\n // 6\n [2, 86, 68],\n [4, 43, 27],\n [4, 43, 19],\n [4, 43, 15],\n // 7\n [2, 98, 78],\n [4, 49, 31],\n [2, 32, 14, 4, 33, 15],\n [4, 39, 13, 1, 40, 14],\n // 8\n [2, 121, 97],\n [2, 60, 38, 2, 61, 39],\n [4, 40, 18, 2, 41, 19],\n [4, 40, 14, 2, 41, 15],\n // 9\n [2, 146, 116],\n [3, 58, 36, 2, 59, 37],\n [4, 36, 16, 4, 37, 17],\n [4, 36, 12, 4, 37, 13],\n // 10\n [2, 86, 68, 2, 87, 69],\n [4, 69, 43, 1, 70, 44],\n [6, 43, 19, 2, 44, 20],\n [6, 43, 15, 2, 44, 16],\n // 11\n [4, 101, 81],\n [1, 80, 50, 4, 81, 51],\n [4, 50, 22, 4, 51, 23],\n [3, 36, 12, 8, 37, 13],\n // 12\n [2, 116, 92, 2, 117, 93],\n [6, 58, 36, 2, 59, 37],\n [4, 46, 20, 6, 47, 21],\n [7, 42, 14, 4, 43, 15],\n // 13\n [4, 133, 107],\n [8, 59, 37, 1, 60, 38],\n [8, 44, 20, 4, 45, 21],\n [12, 33, 11, 4, 34, 12],\n // 14\n [3, 145, 115, 1, 146, 116],\n [4, 64, 40, 5, 65, 41],\n [11, 36, 16, 5, 37, 17],\n [11, 36, 12, 5, 37, 13],\n // 15\n [5, 109, 87, 1, 110, 88],\n [5, 65, 41, 5, 66, 42],\n [5, 54, 24, 7, 55, 25],\n [11, 36, 12, 7, 37, 13],\n // 16\n [5, 122, 98, 1, 123, 99],\n [7, 73, 45, 3, 74, 46],\n [15, 43, 19, 2, 44, 20],\n [3, 45, 15, 13, 46, 16],\n // 17\n [1, 135, 107, 5, 136, 108],\n [10, 74, 46, 1, 75, 47],\n [1, 50, 22, 15, 51, 23],\n [2, 42, 14, 17, 43, 15],\n // 18\n [5, 150, 120, 1, 151, 121],\n [9, 69, 43, 4, 70, 44],\n [17, 50, 22, 1, 51, 23],\n [2, 42, 14, 19, 43, 15],\n // 19\n [3, 141, 113, 4, 142, 114],\n [3, 70, 44, 11, 71, 45],\n [17, 47, 21, 4, 48, 22],\n [9, 39, 13, 16, 40, 14],\n // 20\n [3, 135, 107, 5, 136, 108],\n [3, 67, 41, 13, 68, 42],\n [15, 54, 24, 5, 55, 25],\n [15, 43, 15, 10, 44, 16],\n // 21\n [4, 144, 116, 4, 145, 117],\n [17, 68, 42],\n [17, 50, 22, 6, 51, 23],\n [19, 46, 16, 6, 47, 17],\n // 22\n [2, 139, 111, 7, 140, 112],\n [17, 74, 46],\n [7, 54, 24, 16, 55, 25],\n [34, 37, 13],\n // 23\n [4, 151, 121, 5, 152, 122],\n [4, 75, 47, 14, 76, 48],\n [11, 54, 24, 14, 55, 25],\n [16, 45, 15, 14, 46, 16],\n // 24\n [6, 147, 117, 4, 148, 118],\n [6, 73, 45, 14, 74, 46],\n [11, 54, 24, 16, 55, 25],\n [30, 46, 16, 2, 47, 17],\n // 25\n [8, 132, 106, 4, 133, 107],\n [8, 75, 47, 13, 76, 48],\n [7, 54, 24, 22, 55, 25],\n [22, 45, 15, 13, 46, 16],\n // 26\n [10, 142, 114, 2, 143, 115],\n [19, 74, 46, 4, 75, 47],\n [28, 50, 22, 6, 51, 23],\n [33, 46, 16, 4, 47, 17],\n // 27\n [8, 152, 122, 4, 153, 123],\n [22, 73, 45, 3, 74, 46],\n [8, 53, 23, 26, 54, 24],\n [12, 45, 15, 28, 46, 16],\n // 28\n [3, 147, 117, 10, 148, 118],\n [3, 73, 45, 23, 74, 46],\n [4, 54, 24, 31, 55, 25],\n [11, 45, 15, 31, 46, 16],\n // 29\n [7, 146, 116, 7, 147, 117],\n [21, 73, 45, 7, 74, 46],\n [1, 53, 23, 37, 54, 24],\n [19, 45, 15, 26, 46, 16],\n // 30\n [5, 145, 115, 10, 146, 116],\n [19, 75, 47, 10, 76, 48],\n [15, 54, 24, 25, 55, 25],\n [23, 45, 15, 25, 46, 16],\n // 31\n [13, 145, 115, 3, 146, 116],\n [2, 74, 46, 29, 75, 47],\n [42, 54, 24, 1, 55, 25],\n [23, 45, 15, 28, 46, 16],\n // 32\n [17, 145, 115],\n [10, 74, 46, 23, 75, 47],\n [10, 54, 24, 35, 55, 25],\n [19, 45, 15, 35, 46, 16],\n // 33\n [17, 145, 115, 1, 146, 116],\n [14, 74, 46, 21, 75, 47],\n [29, 54, 24, 19, 55, 25],\n [11, 45, 15, 46, 46, 16],\n // 34\n [13, 145, 115, 6, 146, 116],\n [14, 74, 46, 23, 75, 47],\n [44, 54, 24, 7, 55, 25],\n [59, 46, 16, 1, 47, 17],\n // 35\n [12, 151, 121, 7, 152, 122],\n [12, 75, 47, 26, 76, 48],\n [39, 54, 24, 14, 55, 25],\n [22, 45, 15, 41, 46, 16],\n // 36\n [6, 151, 121, 14, 152, 122],\n [6, 75, 47, 34, 76, 48],\n [46, 54, 24, 10, 55, 25],\n [2, 45, 15, 64, 46, 16],\n // 37\n [17, 152, 122, 4, 153, 123],\n [29, 74, 46, 14, 75, 47],\n [49, 54, 24, 10, 55, 25],\n [24, 45, 15, 46, 46, 16],\n // 38\n [4, 152, 122, 18, 153, 123],\n [13, 74, 46, 32, 75, 47],\n [48, 54, 24, 14, 55, 25],\n [42, 45, 15, 32, 46, 16],\n // 39\n [20, 147, 117, 4, 148, 118],\n [40, 75, 47, 7, 76, 48],\n [43, 54, 24, 22, 55, 25],\n [10, 45, 15, 67, 46, 16],\n // 40\n [19, 148, 118, 6, 149, 119],\n [18, 75, 47, 31, 76, 48],\n [34, 54, 24, 34, 55, 25],\n [20, 45, 15, 61, 46, 16]\n];\n//# sourceMappingURL=RSBlock.js.map","import { BitBuffer } from \"./BitBuffer.js\";\nimport { ErrorCorrectLevel } from \"./ErrorCorrectLevel.js\";\nimport { Polynomial } from \"./Polynomial.js\";\nimport { QR8BitByte } from \"./QR8BitByte.js\";\nimport { QRAlphaNum } from \"./QRAlphaNum.js\";\nimport { QRData } from \"./QRData.js\";\nimport { QRKanji } from \"./QRKanji.js\";\nimport { QRNumber } from \"./QRNumber.js\";\nimport { QRUtil } from \"./QRUtil.js\";\nimport { RSBlock } from \"./RSBlock.js\";\nconst TypeNumber = Array(41)\n .fill(0)\n .map((_, i) => i);\nexport { TypeNumber };\nexport var ErrorCorrectionLevel;\n(function (ErrorCorrectionLevel) {\n ErrorCorrectionLevel[\"L\"] = \"L\";\n ErrorCorrectionLevel[\"M\"] = \"M\";\n ErrorCorrectionLevel[\"Q\"] = \"Q\";\n ErrorCorrectionLevel[\"H\"] = \"H\";\n})(ErrorCorrectionLevel || (ErrorCorrectionLevel = {}));\nexport var Mode;\n(function (Mode) {\n Mode[\"numeric\"] = \"numeric\";\n Mode[\"alphanumeric\"] = \"alphanumeric\";\n /**\n * Default\n */\n Mode[\"byte\"] = \"byte\";\n Mode[\"kanji\"] = \"kanji\";\n Mode[\"unicode\"] = \"unicode\";\n})(Mode || (Mode = {}));\n/**\n * QRCode\n * @author Kazuhiko Arase\n */\nexport class QRCodeMinimal {\n constructor(typeNumber = 0, errorCorrectionLevel = ErrorCorrectionLevel.L) {\n this.modules = [];\n this.moduleCount = 0;\n this.typeNumber = typeNumber;\n this.errorCorrectLevel = ErrorCorrectLevel[errorCorrectionLevel];\n this.qrDataList = [];\n }\n getTypeNumber() {\n return this.typeNumber;\n }\n setTypeNumber(typeNumber) {\n this.typeNumber = typeNumber;\n }\n getErrorCorrectLevel() {\n return this.errorCorrectLevel;\n }\n setErrorCorrectLevel(errorCorrectLevel) {\n this.errorCorrectLevel = errorCorrectLevel;\n }\n clearData() {\n this.qrDataList = [];\n }\n addData(qrData, mode = Mode.byte) {\n if (qrData instanceof QRData) {\n this.qrDataList.push(qrData);\n }\n else if (typeof qrData === \"string\") {\n switch (mode) {\n case Mode.numeric:\n this.qrDataList.push(new QRNumber(qrData));\n break;\n case Mode.alphanumeric:\n this.qrDataList.push(new QRAlphaNum(qrData));\n break;\n case Mode.byte:\n this.qrDataList.push(new QR8BitByte(qrData, QRCodeMinimal.stringToBytesFuncs.default));\n break;\n case Mode.unicode:\n this.qrDataList.push(new QR8BitByte(qrData, QRCodeMinimal.stringToBytesFuncs[\"UTF8\"]));\n break;\n case Mode.kanji:\n this.qrDataList.push(new QRKanji(qrData, QRCodeMinimal.stringToBytesFuncs[\"SJIS\"]));\n break;\n default:\n throw \"mode:\" + mode;\n }\n }\n else {\n throw typeof qrData;\n }\n }\n /*private getDataCount(): number {\n return this.qrDataList.length;\n }\n \n private getData(index: number): QRData {\n return this.qrDataList[index];\n }*/\n isDark(row, col) {\n if (this.modules[row][col] != null) {\n return this.modules[row][col];\n }\n else {\n return false;\n }\n }\n getModuleCount() {\n return this.moduleCount;\n }\n make() {\n if (this.typeNumber < 1) {\n let typeNumber = 1;\n for (; typeNumber < 40; typeNumber++) {\n const rsBlocks = RSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel);\n const buffer = new BitBuffer();\n for (let i = 0; i < this.qrDataList.length; i++) {\n const data = this.qrDataList[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), data.getLengthInBits(typeNumber));\n data.write(buffer);\n }\n let totalDataCount = 0;\n for (let i = 0; i < rsBlocks.length; i++) {\n totalDataCount += rsBlocks[i].getDataCount();\n }\n if (buffer.getLengthInBits() <= totalDataCount * 8) {\n break;\n }\n }\n this.typeNumber = typeNumber;\n }\n this.makeImpl(false, this.getBestMaskPattern());\n }\n getBestMaskPattern() {\n let minLostPoint = 0;\n let pattern = 0;\n for (let i = 0; i < 8; i += 1) {\n this.makeImpl(true, i);\n const lostPoint = QRUtil.getLostPoint(this);\n if (i == 0 || minLostPoint > lostPoint) {\n minLostPoint = lostPoint;\n pattern = i;\n }\n }\n return pattern;\n }\n makeImpl(test, maskPattern) {\n // initialize modules\n this.moduleCount = this.typeNumber * 4 + 17;\n this.modules = [];\n for (let i = 0; i < this.moduleCount; i += 1) {\n this.modules.push([]);\n for (let j = 0; j < this.moduleCount; j += 1) {\n this.modules[i].push(null);\n }\n }\n this.setupPositionProbePattern(0, 0);\n this.setupPositionProbePattern(this.moduleCount - 7, 0);\n this.setupPositionProbePattern(0, this.moduleCount - 7);\n this.setupPositionAdjustPattern();\n this.setupTimingPattern();\n this.setupTypeInfo(test, maskPattern);\n if (this.typeNumber >= 7) {\n this.setupTypeNumber(test);\n }\n const data = QRCodeMinimal.createData(this.typeNumber, this.errorCorrectLevel, this.qrDataList);\n this.mapData(data, maskPattern);\n }\n mapData(data, maskPattern) {\n let inc = -1;\n let row = this.moduleCount - 1;\n let bitIndex = 7;\n let byteIndex = 0;\n const maskFunc = QRUtil.getMaskFunc(maskPattern);\n for (let col = this.moduleCount - 1; col > 0; col -= 2) {\n if (col == 6) {\n col -= 1;\n }\n while (true) {\n for (let c = 0; c < 2; c += 1) {\n if (this.modules[row][col - c] == null) {\n let dark = false;\n if (byteIndex < data.length) {\n dark = ((data[byteIndex] >>> bitIndex) & 1) == 1;\n }\n const mask = maskFunc(row, col - c);\n if (mask) {\n dark = !dark;\n }\n this.modules[row][col - c] = dark;\n bitIndex -= 1;\n if (bitIndex == -1) {\n byteIndex += 1;\n bitIndex = 7;\n }\n }\n }\n row += inc;\n if (row < 0 || this.moduleCount <= row) {\n row -= inc;\n inc = -inc;\n break;\n }\n }\n }\n }\n setupPositionAdjustPattern() {\n const pos = QRUtil.getPatternPosition(this.typeNumber);\n for (let i = 0; i < pos.length; i += 1) {\n for (let j = 0; j < pos.length; j += 1) {\n const row = pos[i];\n const col = pos[j];\n if (this.modules[row][col] != null) {\n continue;\n }\n for (let r = -2; r <= 2; r += 1) {\n for (let c = -2; c <= 2; c += 1) {\n if (r == -2 || r == 2 || c == -2 || c == 2 || (r == 0 && c == 0)) {\n this.modules[row + r][col + c] = true;\n }\n else {\n this.modules[row + r][col + c] = false;\n }\n }\n }\n }\n }\n }\n setupPositionProbePattern(row, col) {\n for (let r = -1; r <= 7; r += 1) {\n for (let c = -1; c <= 7; c += 1) {\n if (row + r <= -1 || this.moduleCount <= row + r || col + c <= -1 || this.moduleCount <= col + c) {\n continue;\n }\n if ((0 <= r && r <= 6 && (c == 0 || c == 6)) ||\n (0 <= c && c <= 6 && (r == 0 || r == 6)) ||\n (2 <= r && r <= 4 && 2 <= c && c <= 4)) {\n this.modules[row + r][col + c] = true;\n }\n else {\n this.modules[row + r][col + c] = false;\n }\n }\n }\n }\n setupTimingPattern() {\n for (let r = 8; r < this.moduleCount - 8; r += 1) {\n if (this.modules[r][6] != null) {\n continue;\n }\n this.modules[r][6] = r % 2 == 0;\n }\n for (let c = 8; c < this.moduleCount - 8; c += 1) {\n if (this.modules[6][c] != null) {\n continue;\n }\n this.modules[6][c] = c % 2 == 0;\n }\n }\n setupTypeNumber(test) {\n const bits = QRUtil.getBCHTypeNumber(this.typeNumber);\n for (let i = 0; i < 18; i += 1) {\n this.modules[~~(i / 3)][(i % 3) + this.moduleCount - 8 - 3] = !test && ((bits >> i) & 1) == 1;\n }\n for (let i = 0; i < 18; i += 1) {\n this.modules[(i % 3) + this.moduleCount - 8 - 3][~~(i / 3)] = !test && ((bits >> i) & 1) == 1;\n }\n }\n setupTypeInfo(test, maskPattern) {\n const data = (this.errorCorrectLevel << 3) | maskPattern;\n const bits = QRUtil.getBCHTypeInfo(data);\n // vertical\n for (let i = 0; i < 15; i += 1) {\n const mod = !test && ((bits >> i) & 1) == 1;\n if (i < 6) {\n this.modules[i][8] = mod;\n }\n else if (i < 8) {\n this.modules[i + 1][8] = mod;\n }\n else {\n this.modules[this.moduleCount - 15 + i][8] = mod;\n }\n }\n // horizontal\n for (let i = 0; i < 15; i += 1) {\n const mod = !test && ((bits >> i) & 1) == 1;\n if (i < 8) {\n this.modules[8][this.moduleCount - i - 1] = mod;\n }\n else if (i < 9) {\n this.modules[8][15 - i - 1 + 1] = mod;\n }\n else {\n this.modules[8][15 - i - 1] = mod;\n }\n }\n // fixed\n this.modules[this.moduleCount - 8][8] = !test;\n }\n static createData(typeNumber, errorCorrectLevel, dataArray) {\n const rsBlocks = RSBlock.getRSBlocks(typeNumber, errorCorrectLevel);\n const buffer = new BitBuffer();\n for (let i = 0; i < dataArray.length; i += 1) {\n const data = dataArray[i];\n buffer.put(data.getMode(), 4);\n buffer.put(data.getLength(), data.getLengthInBits(typeNumber));\n data.write(buffer);\n }\n // calc max data count\n let totalDataCount = 0;\n for (let i = 0; i < rsBlocks.length; i += 1) {\n totalDataCount += rsBlocks[i].getDataCount();\n }\n if (buffer.getLengthInBits() > totalDataCount * 8) {\n throw \"code length overflow. (\" + buffer.getLengthInBits() + \">\" + totalDataCount * 8 + \")\";\n }\n // end\n if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n buffer.put(0, 4);\n }\n // padding\n while (buffer.getLengthInBits() % 8 != 0) {\n buffer.putBit(false);\n }\n // padding\n while (true) {\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(QRCodeMinimal.PAD0, 8);\n if (buffer.getLengthInBits() >= totalDataCount * 8) {\n break;\n }\n buffer.put(QRCodeMinimal.PAD1, 8);\n }\n return QRCodeMinimal.createBytes(buffer, rsBlocks);\n }\n static createBytes(buffer, rsBlocks) {\n let offset = 0;\n let maxDcCount = 0;\n let maxEcCount = 0;\n const dcdata = [];\n const ecdata = [];\n for (let r = 0; r < rsBlocks.length; r += 1) {\n dcdata.push([]);\n ecdata.push([]);\n }\n function createNumArray(len) {\n const a = [];\n for (let i = 0; i < len; i += 1) {\n a.push(0);\n }\n return a;\n }\n for (let r = 0; r < rsBlocks.length; r += 1) {\n const dcCount = rsBlocks[r].getDataCount();\n const ecCount = rsBlocks[r].getTotalCount() - dcCount;\n maxDcCount = Math.max(maxDcCount, dcCount);\n maxEcCount = Math.max(maxEcCount, ecCount);\n dcdata[r] = createNumArray(dcCount);\n for (let i = 0; i < dcdata[r].length; i += 1) {\n dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];\n }\n offset += dcCount;\n const rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\n const rawPoly = new Polynomial(dcdata[r], rsPoly.getLength() - 1);\n const modPoly = rawPoly.mod(rsPoly);\n ecdata[r] = createNumArray(rsPoly.getLength() - 1);\n for (let i = 0; i < ecdata[r].length; i += 1) {\n const modIndex = i + modPoly.getLength() - ecdata[r].length;\n ecdata[r][i] = modIndex >= 0 ? modPoly.getAt(modIndex) : 0;\n }\n }\n let totalCodeCount = 0;\n for (let i = 0; i < rsBlocks.length; i += 1) {\n totalCodeCount += rsBlocks[i].getTotalCount();\n }\n const data = createNumArray(totalCodeCount);\n let index = 0;\n for (let i = 0; i < maxDcCount; i += 1) {\n for (let r = 0; r < rsBlocks.length; r += 1) {\n if (i < dcdata[r].length) {\n data[index] = dcdata[r][i];\n index += 1;\n }\n }\n }\n for (let i = 0; i < maxEcCount; i += 1) {\n for (let r = 0; r < rsBlocks.length; r += 1) {\n if (i < ecdata[r].length) {\n data[index] = ecdata[r][i];\n index += 1;\n }\n }\n }\n return data;\n }\n}\nQRCodeMinimal.PAD0 = 0xec;\nQRCodeMinimal.PAD1 = 0x11;\nQRCodeMinimal.stringToBytesFuncs = {\n default: function (s) {\n const bytes = [];\n for (let i = 0; i < s.length; i += 1) {\n const c = s.charCodeAt(i);\n bytes.push(c & 0xff);\n }\n return bytes;\n }\n};\n//# sourceMappingURL=QRCodeMinimal.js.map","const isObject = (obj: Record<string, unknown> | undefined): boolean =>\n !!obj && typeof obj === \"object\" && !Array.isArray(obj);\n\nexport type UnknownObject =\n | {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n }\n | undefined;\n\nexport function mergeDeep(target: UnknownObject, ...sources: UnknownObject[]): UnknownObject {\n if (!sources.length) return target;\n const source = sources.shift();\n if (source === undefined || !isObject(target) || !isObject(source)) return target;\n target = { ...target };\n Object.keys(source).forEach((key: string): void => {\n const targetValue = target[key];\n const sourceValue = source[key];\n\n if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {\n target[key] = sourceValue;\n } else if (isObject(targetValue) && isObject(sourceValue)) {\n target[key] = mergeDeep(Object.assign({}, targetValue), sourceValue);\n } else {\n target[key] = sourceValue;\n }\n });\n\n return mergeDeep(target, ...sources);\n}\n","export enum GradientType {\n radial = \"radial\",\n linear = \"linear\"\n}\n\nexport type Gradient = {\n /**\n * Type of gradient spread\n *\n * @default GradientType.linear\n */\n type: `${GradientType}`;\n /**\n * Rotation of gradient (in radians, Math.PI === 180 degrees)\n *\n * @default 0\n */\n rotation?: number;\n /** Gradient colors. */\n colorStops: {\n /** Position of color in gradient range */\n offset: number;\n /** Color of stop in gradient range */\n color: string;\n }[];\n};\n\nexport function sanitizeGradient(gradient: Gradient): Gradient {\n const newGradient = { ...gradient };\n\n if (!newGradient.colorStops || !newGradient.colorStops.length) {\n throw \"Field 'colorStops' is required in gradient\";\n }\n\n if (newGradient.rotation) {\n newGradient.rotation = Number(newGradient.rotation);\n } else {\n newGradient.rotation = 0;\n }\n\n newGradient.colorStops = newGradient.colorStops.map((colorStop: { offset: number; color: string }) => ({\n ...colorStop,\n offset: Number(colorStop.offset)\n }));\n\n return newGradient;\n}\n","import { ErrorCorrectionLevel, Mode, TypeNumber } from \"@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js\";\nimport { browserImageTools } from \"../tools/browser-image-tools.js\";\nimport { Gradient, sanitizeGradient } from \"./gradient.js\";\n\nexport enum DotType {\n dot = \"dot\",\n randomDot = \"random-dot\",\n rounded = \"rounded\",\n extraRounded = \"extra-rounded\",\n verticalLine = \"vertical-line\",\n horizontalLine = \"horizontal-line\",\n classy = \"classy\",\n classyRounded = \"classy-rounded\",\n square = \"square\",\n smallSquare = \"small-square\",\n tinySquare = \"tiny-square\",\n diamond = \"diamond\"\n}\n\nexport enum CornerDotType {\n dot = \"dot\",\n square = \"square\",\n heart = \"heart\",\n extraRounded = \"extra-rounded\",\n classy = \"classy\",\n outpoint = \"outpoint\",\n inpoint = \"inpoint\"\n}\n\nexport enum CornerSquareType {\n dot = \"dot\",\n square = \"square\",\n extraRounded = \"extra-rounded\",\n classy = \"classy\",\n outpoint = \"outpoint\",\n inpoint = \"inpoint\"\n}\n\nexport enum ShapeType {\n square = \"square\",\n circle = \"circle\"\n}\n\nexport enum ImageMode {\n /**\n * Place image in the center of the code\n */\n center = \"center\",\n /**\n * Use image as background, draw dots over it\n */\n background = \"background\"\n}\n\nexport interface Options {\n /** Use a custom DOM domplementation */\n document: Document;\n /** Use a custom image fetching & serializaton implementation */\n imageTools?: typeof browserImageTools;\n /** @ignore */\n width: number;\n /** @ignore */\n height: number;\n /** The data will be encoded in the QR code */\n data: string;\n /** The image will be copied to the center of the QR code */\n image?: string | Buffer | Blob;\n /**\n * QR code shape\n *\n * @default ShapeType.square\n */\n shape: `${ShapeType}`;\n /** Options will be passed to `@liquid-js/qrcode-generator` lib */\n qrOptions: {\n typeNumber: TypeNumber;\n mode?: `${Mode}`;\n /** @default ErrorCorrectionLevel.Q */\n errorCorrectionLevel: `${ErrorCorrectionLevel}`;\n };\n imageOptions: {\n /**\n * Image mode\n *\n * @default ImageMode.center\n */\n mode: `${ImageMode}`;\n /**\n * Fill blank areas of the code with selected color\n */\n fill: {\n /**\n * Color of QR dots\n *\n * @default \"rgba(255,255,255,0.75)\"\n */\n color: string;\n /** Gradient of Corners Dot */\n gradient?: Gradient;\n };\n /**\n * Coefficient of the image size\n *\n * @default 0.4\n */\n imageSize: number;\n /**\n * Margin of the image (in blocks)\n *\n * @default 0\n */\n margin: number;\n /**\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLImageElement/crossOrigin)\n */\n crossOrigin?: string;\n };\n dotsOptions: {\n /**\n * QR dot size (in pixels)\n *\n * @default 10\n */\n size: number;\n /**\n * Color of QR dots\n *\n * @default \"#000\"\n */\n color: string;\n /** Gradient of QR dots */\n gradient?: Gradient;\n /**\n * Style of QR dots\n *\n * @default DotType.square\n */\n type: `${DotType}`;\n };\n /** Corners Square options, omitted values match dots */\n cornersSquareOptions?: {\n /** Color of Corners Square */\n color?: string;\n /** Gradient of Corners Square */\n gradient?: Gradient;\n /** Style of Corners Square */\n type?: `${CornerSquareType}`;\n };\n /** Corners Dot options, omitted values match squares */\n cornersDotOptions?: {\n /** Color of Corners Dot */\n color?: string;\n /** Gradient of Corners Dot */\n gradient?: Gradient;\n /** Style of Corners Dot */\n type?: `${CornerDotType}`;\n };\n /** QR background styling options, false to disable background */\n backgroundOptions?:\n | {\n /** Background roundnes, from 0 (square) to 1 (circle) */\n round?: number;\n /** Background color */\n color?: string;\n /** Background Gradient */\n gradient?: Gradient;\n /**\n * Margin (in blocks) between background and the QR code\n *\n * @default 0\n */\n margin?: number;\n }\n | false;\n /** `import { stringToBytesFuncs } from \"@liquid-js/qr-code-styling/kanji\";` to add Kanji support */\n stringToBytesFuncs?: { [encoding: string]: (s: string) => number[] };\n}\n\nexport const defaultOptions: Options = {\n document: undefined as never,\n shape: ShapeType.square,\n width: undefined as never,\n height: undefined as never,\n data: \"\",\n qrOptions: {\n typeNumber: TypeNumber[0],\n mode: undefined,\n errorCorrectionLevel: ErrorCorrectionLevel.Q\n },\n imageOptions: {\n mode: ImageMode.center,\n imageSize: 0.4,\n crossOrigin: undefined,\n margin: 0,\n fill: {\n color: \"rgba(255,255,255,1)\"\n }\n },\n dotsOptions: {\n type: DotType.square,\n color: \"#000\",\n size: 10\n }\n};\n\nexport function sanitizeOptions(options: Options): Options {\n const newOptions = { ...options };\n\n newOptions.imageOptions = {\n ...newOptions.imageOptions,\n imageSize: Math.min(1, Number(newOptions.imageOptions.imageSize)) || 1,\n margin: Number(newOptions.imageOptions.margin),\n fill: {\n ...newOptions.imageOptions.fill\n }\n };\n\n if (newOptions.imageOptions.mode == ImageMode.background) newOptions.imageOptions.margin = 0;\n if (newOptions.imageOptions.fill.gradient) {\n newOptions.imageOptions.fill.gradient = sanitizeGradient(newOptions.imageOptions.fill.gradient);\n }\n\n newOptions.dotsOptions = {\n ...newOptions.dotsOptions\n };\n if (newOptions.dotsOptions.gradient) {\n newOptions.dotsOptions.gradient = sanitizeGradient(newOptions.dotsOptions.gradient);\n }\n // Ensure integer dot size\n newOptions.dotsOptions.size = Math.round(Math.max(0, newOptions.dotsOptions.size) || 10);\n\n if (newOptions.cornersSquareOptions) {\n newOptions.cornersSquareOptions = {\n ...newOptions.cornersSquareOptions\n };\n if (newOptions.cornersSquareOptions.gradient) {\n newOptions.cornersSquareOptions.gradient = sanitizeGradient(newOptions.cornersSquareOptions.gradient);\n }\n }\n\n if (newOptions.cornersDotOptions) {\n newOptions.cornersDotOptions = {\n ...newOptions.cornersDotOptions\n };\n if (newOptions.cornersDotOptions.gradient) {\n newOptions.cornersDotOptions.gradient = sanitizeGradient(newOptions.cornersDotOptions.gradient);\n }\n }\n\n if (newOptions.backgroundOptions) {\n newOptions.backgroundOptions = {\n ...newOptions.backgroundOptions\n };\n if (newOptions.backgroundOptions.gradient) {\n newOptions.backgroundOptions.gradient = sanitizeGradient(newOptions.backgroundOptions.gradient);\n }\n }\n\n if (!newOptions.document) newOptions.document = document;\n\n return newOptions;\n}\n","import { ErrorCorrectionLevel, Mode } from \"@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js\";\n\nexport const ErrorCorrectionPercents = {\n [ErrorCorrectionLevel.L]: 0.07,\n [ErrorCorrectionLevel.M]: 0.15,\n [ErrorCorrectionLevel.Q]: 0.25,\n [ErrorCorrectionLevel.H]: 0.3\n};\n\nexport function getMode(data: string): Mode {\n switch (true) {\n case /^[0-9]*$/.test(data):\n return Mode.numeric;\n case /^[0-9A-Z $%*+\\-./:]*$/.test(data):\n return Mode.alphanumeric;\n // eslint-disable-next-line no-control-regex\n case /[^\\u0000-\\u00ff]/.test(data):\n return Mode.unicode;\n default:\n return Mode.byte;\n }\n}\n","const rx = /\\.?0+$/;\n\nexport function numToAttr(value: number) {\n return value.toFixed(7).replace(rx, \"\");\n}\n\nexport function svgPath(strings: TemplateStringsArray, ...values: unknown[]) {\n return strings\n .reduce((t, v, i) => {\n let p: unknown = \"\";\n if (i) p = values[i - 1];\n if (typeof p == \"number\") p = numToAttr(p);\n return `${t}${p}${v}`;\n }, \"\")\n .trim()\n .replace(/[\\s\\n\\r]+/gim, \" \");\n}\n","import { BasicFigureDrawArgs, DrawArgs, RotateFigureArgs } from \"../types/helper.js\";\nimport { CornerDotType } from \"../utils/options.js\";\nimport { numToAttr, svgPath } from \"../utils/svg.js\";\n\nexport class QRCornerDot {\n private _element?: SVGElement;\n\n get element() {\n return this._element;\n }\n\n constructor(\n private readonly type: `${CornerDotType}`,\n private readonly document: Document\n ) {}\n\n draw(args: DrawArgs): void {\n const type = this.type;\n let drawFunction;\n\n switch (type) {\n case CornerDotType.square:\n drawFunction = this.drawSquare;\n break;\n case CornerDotType.heart:\n drawFunction = this.drawHeart;\n break;\n case CornerDotType.extraRounded:\n drawFunction = this.drawRounded;\n break;\n case CornerDotType.classy:\n drawFunction = this.drawClassy;\n break;\n case CornerDotType.inpoint:\n drawFunction = this.drawInpoint;\n break;\n case CornerDotType.outpoint:\n drawFunction = this.drawOutpoint;\n break;\n case CornerDotType.dot:\n default:\n drawFunction = this.drawDot;\n }\n\n drawFunction.call(this, args);\n }\n\n private rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\n const cx = x + size / 2;\n const cy = y + size / 2;\n\n draw();\n this._element?.setAttribute(\"transform\", `rotate(${numToAttr((180 * rotation) / Math.PI)},${cx},${cy})`);\n }\n\n private basicDot(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\n this._element.setAttribute(\"cx\", numToAttr(x + size / 2));\n this._element.setAttribute(\"cy\", numToAttr(y + size / 2));\n this._element.setAttribute(\"r\", numToAttr(size / 2));\n }\n });\n }\n\n private basicSquare(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n this._element.setAttribute(\"x\", numToAttr(x));\n this._element.setAttribute(\"y\", numToAttr(y));\n this._element.setAttribute(\"width\", numToAttr(size));\n this._element.setAttribute(\"height\", numToAttr(size));\n }\n });\n }\n\n private basicHeart(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n const path = [\n \"M\",\n 1,\n 0.3262506,\n \"c\",\n 0,\n 0.0383376,\n -0.0064626,\n 0.0758377,\n -0.0193751,\n 0.1125001,\n \"s\",\n -0.0356247,\n 0.076875,\n -0.0681248,\n 0.1206252,\n \"c\",\n -0.0325,\n 0.0437499,\n -0.0762503,\n 0.0931247,\n -0.1312501,\n 0.1481249,\n \"C\",\n 0.7262502,\n 0.7625008,\n 0.6566626,\n 0.8279132,\n 0.5724999,\n 0.9037505,\n \"L\",\n 0.5,\n 0.9687506,\n \"L\",\n 0.4275001,\n 0.9037505,\n \"C\",\n 0.3433374,\n 0.8279132,\n 0.2737499,\n 0.7625005,\n 0.21875,\n 0.7075007,\n \"C\",\n 0.1637501,\n 0.6525008,\n 0.1199999,\n 0.6031258,\n 0.0874999,\n 0.5593758,\n \"S\",\n 0.0322876,\n 0.4754133,\n 0.0193751,\n 0.4387506,\n \"S\",\n 0,\n 0.3645881,\n 0,\n 0.3262506,\n \"c\",\n 0,\n -0.0783374,\n 0.0262499,\n -0.1437498,\n 0.07875,\n -0.1962499,\n \"s\",\n 0.1179124,\n -0.07875,\n 0.1962499,\n -0.07875,\n \"c\",\n 0.0433376,\n 0,\n 0.0845875,\n 0.0091625,\n 0.12375,\n 0.0274999,\n \"S\",\n 0.4716623,\n 0.1229131,\n 0.5,\n 0.1562506,\n \"c\",\n 0.0283374,\n -0.0333375,\n 0.0620874,\n -0.0591625,\n 0.1012502,\n -0.0775,\n \"c\",\n 0.0391627,\n -0.0183375,\n 0.0804126,\n -0.0274999,\n 0.12375,\n -0.0274999,\n \"c\",\n 0.0783374,\n 0,\n 0.1437497,\n 0.0262499,\n 0.1962501,\n 0.07875,\n \"S\",\n 1,\n 0.2479131,\n 1,\n 0.3262506,\n \"z\"\n ];\n let move = false;\n let i = 0;\n this._element.setAttribute(\n \"d\",\n path\n .map((v) => {\n if (typeof v == \"string\") {\n i = 0;\n move = v.toUpperCase() == v;\n return v;\n }\n i++;\n v = v * size;\n if (move) {\n v += i % 2 == 1 ? x : y;\n }\n return numToAttr(v);\n })\n .join(\" \")\n );\n }\n\n private basicRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n this._element.setAttribute(\"x\", numToAttr(x));\n this._element.setAttribute(\"y\", numToAttr(y));\n this._element.setAttribute(\"width\", numToAttr(size));\n this._element.setAttribute(\"height\", numToAttr(size));\n this._element.setAttribute(\"rx\", numToAttr(size / 4));\n this._element.setAttribute(\"ry\", numToAttr(size / 4));\n }\n });\n }\n\n private basicClassy(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y + 2.5 * dotSize}\n v ${2 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}\n h ${4.5 * dotSize}\n v ${-4.5 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}\n h ${-2 * dotSize}\n H ${x}\n z`\n );\n }\n });\n }\n\n private basicInpoint(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y + dotSize / 2}\n v ${dotSize / 4}\n a ${dotSize / 4}, ${dotSize / 4} 0 0 0 ${dotSize / 4}, ${dotSize / 4}\n h ${(dotSize / 4) * 3}\n v ${(-dotSize / 4) * 3}\n a ${dotSize / 4}, ${dotSize / 4} 0 0 0 ${-dotSize / 4}, ${-dotSize / 4}\n h ${-dotSize / 2}\n a ${dotSize / 4}, ${dotSize / 4} 0 0 0 ${-dotSize / 4}, ${dotSize / 4}\n z`\n );\n }\n });\n }\n\n private drawDot({ x, y, size, rotation }: DrawArgs): void {\n this.basicDot({ x, y, size, rotation });\n }\n\n private drawSquare({ x, y, size, rotation }: DrawArgs): void {\n this.basicSquare({ x, y, size, rotation });\n }\n\n private drawHeart({ x, y, size, rotation }: DrawArgs): void {\n this.basicHeart({ x, y, size, rotation });\n }\n\n private drawRounded({ x, y, size, rotation }: DrawArgs): void {\n this.basicRounded({ x, y, size, rotation });\n }\n\n private drawClassy({ x, y, size, rotation }: DrawArgs): void {\n this.basicClassy({ x, y, size, rotation });\n }\n\n private drawInpoint({ x, y, size, rotation }: DrawArgs): void {\n this.basicInpoint({ x, y, size, rotation });\n }\n\n private drawOutpoint({ x, y, size, rotation }: DrawArgs): void {\n this.basicInpoint({ x, y, size, rotation: (rotation || 0) + Math.PI });\n }\n}\n","import { BasicFigureDrawArgs, DrawArgs, RotateFigureArgs } from \"../types/helper.js\";\nimport { CornerSquareType } from \"../utils/options.js\";\nimport { numToAttr, svgPath } from \"../utils/svg.js\";\n\nexport class QRCornerSquare {\n private _element?: SVGElement;\n private _fill?: SVGElement;\n\n get element() {\n return this._element;\n }\n\n get fill() {\n return this._fill;\n }\n\n constructor(\n private readonly type: `${CornerSquareType}`,\n private readonly document: Document\n ) {}\n\n draw(args: DrawArgs): void {\n const type = this.type;\n let drawFunction;\n\n switch (type) {\n case CornerSquareType.square:\n drawFunction = this.drawSquare;\n break;\n case CornerSquareType.extraRounded:\n drawFunction = this.drawExtraRounded;\n break;\n case CornerSquareType.classy:\n drawFunction = this.drawClassy;\n break;\n case CornerSquareType.outpoint:\n drawFunction = this.drawOutpoint;\n break;\n case CornerSquareType.inpoint:\n drawFunction = this.drawInpoint;\n break;\n case CornerSquareType.dot:\n default:\n drawFunction = this.drawDot;\n }\n\n drawFunction.call(this, args);\n }\n\n private rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\n const cx = x + size / 2;\n const cy = y + size / 2;\n\n draw();\n this._element?.setAttribute(\"transform\", `rotate(${numToAttr((180 * rotation) / Math.PI)},${cx},${cy})`);\n this._fill?.setAttribute(\"transform\", `rotate(${numToAttr((180 * rotation) / Math.PI)},${cx},${cy})`);\n }\n\n private basicDot(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x + size / 2} ${y}\n a ${size / 2} ${size / 2} 0 1 0 0.1 0\n z\n m 0 ${dotSize}\n a ${size / 2 - dotSize} ${size / 2 - dotSize} 0 1 1 -0.1 0\n Z`\n );\n this._fill = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._fill.setAttribute(\"clip-rule\", \"evenodd\");\n this._fill.setAttribute(\n \"d\",\n svgPath`M ${x + size / 2} ${y - dotSize}\n a ${size / 2 + dotSize} ${size / 2 + dotSize} 0 1 0 0.1 0\n z`\n );\n }\n });\n }\n\n private basicSquare(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y}\n v ${size}\n h ${size}\n v ${-size}\n z\n M ${x + dotSize} ${y + dotSize}\n h ${size - 2 * dotSize}\n v ${size - 2 * dotSize}\n h ${-size + 2 * dotSize}\n z`\n );\n this._fill = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._fill.setAttribute(\"clip-rule\", \"evenodd\");\n this._fill.setAttribute(\n \"d\",\n svgPath`\n M ${x - dotSize} ${y - dotSize}\n h ${size + 2 * dotSize}\n v ${size + 2 * dotSize}\n h ${-size - 2 * dotSize}\n z`\n );\n }\n });\n }\n\n private basicExtraRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y + 2.5 * dotSize}\n v ${2 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}\n h ${2 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${-dotSize * 2.5}\n v ${-2 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}\n h ${-2 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${dotSize * 2.5}\n z\n M ${x + 2.5 * dotSize} ${y + dotSize}\n h ${2 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}\n v ${2 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${dotSize * 1.5}\n h ${-2 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}\n v ${-2 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${-dotSize * 1.5}\n z`\n );\n this._fill = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._fill.setAttribute(\"clip-rule\", \"evenodd\");\n this._fill.setAttribute(\n \"d\",\n svgPath`\n M ${x + 2.5 * dotSize} ${y + dotSize}\n h ${2 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}\n v ${2 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${dotSize * 1.5}\n h ${-2 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}\n v ${-2 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${-dotSize * 1.5}\n z`\n );\n }\n });\n }\n\n private basicClassy(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y + 2.5 * dotSize}\n v ${2 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}\n h ${4.5 * dotSize}\n v ${-4.5 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}\n h ${-2 * dotSize}\n H ${x}\n z\n M ${x + 2.5 * dotSize} ${y + dotSize}\n h ${2 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}\n v ${3.5 * dotSize}\n h ${-3.5 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}\n v ${-3.5 * dotSize}\n z`\n );\n this._fill = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._fill.setAttribute(\"clip-rule\", \"evenodd\");\n this._fill.setAttribute(\n \"d\",\n svgPath`\n M ${x + 0.5 * dotSize} ${y - dotSize}\n h ${4 * dotSize}\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${dotSize * 3.5} ${dotSize * 3.5}\n v ${5.5 * dotSize}\n h ${-5.5 * dotSize}\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${-dotSize * 3.5} ${-dotSize * 3.5}\n v ${-5.5 * dotSize}\n z`\n );\n }\n });\n }\n\n private basicInpoint(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n const dotSize = size / 7;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\"clip-rule\", \"evenodd\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y + 2.5 * dotSize}\n v ${2 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}\n h ${4.5 * dotSize}\n v ${-4.5 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}\n h ${-2 * dotSize}\n a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${dotSize * 2.5}\n z\n M ${x + 2.5 * dotSize} ${y + dotSize}\n h ${2 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}\n v ${3.5 * dotSize}\n h ${-3.5 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}\n v ${-2 * dotSize}\n a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${-dotSize * 1.5}\n z`\n );\n this._fill = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._fill.setAttribute(\"clip-rule\", \"evenodd\");\n this._fill.setAttribute(\n \"d\",\n svgPath`\n M ${x + 0.5 * dotSize} ${y - dotSize}\n h ${4 * dotSize}\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${dotSize * 3.5} ${dotSize * 3.5}\n v ${5.5 * dotSize}\n h ${-5.5 * dotSize}\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${-dotSize * 3.5} ${-dotSize * 3.5}\n v ${-2 * dotSize}\n a ${3.5 * dotSize} ${3.5 * dotSize}, 0, 0, 1, ${dotSize * 3.5} ${-dotSize * 3.5}\n z`\n );\n }\n });\n }\n\n private drawDot({ x, y, size, rotation }: DrawArgs): void {\n this.basicDot({ x, y, size, rotation });\n }\n\n private drawSquare({ x, y, size, rotation }: DrawArgs): void {\n this.basicSquare({ x, y, size, rotation });\n }\n\n private drawExtraRounded({ x, y, size, rotation }: DrawArgs): void {\n this.basicExtraRounded({ x, y, size, rotation });\n }\n\n private drawClassy({ x, y, size, rotation }: DrawArgs): void {\n this.basicClassy({ x, y, size, rotation });\n }\n\n private drawInpoint({ x, y, size, rotation }: DrawArgs): void {\n this.basicInpoint({ x, y, size, rotation });\n }\n\n private drawOutpoint({ x, y, size, rotation }: DrawArgs): void {\n this.basicInpoint({ x, y, size, rotation: (rotation || 0) + Math.PI });\n }\n}\n","import { BasicFigureDrawArgs, DrawArgs, RotateFigureArgs } from \"../types/helper.js\";\nimport { DotType } from \"../utils/options.js\";\nimport { numToAttr, svgPath } from \"../utils/svg.js\";\n\nexport class QRDot {\n private _element?: SVGElement;\n\n get element() {\n return this._element;\n }\n\n constructor(\n private readonly type: `${DotType}`,\n private readonly document: Document\n ) {}\n\n draw(args: DrawArgs): void {\n const type = this.type;\n let drawFunction;\n\n switch (type) {\n case DotType.dot:\n drawFunction = this.drawDot;\n break;\n case DotType.randomDot:\n drawFunction = this.drawRandomDot;\n break;\n case DotType.classy:\n drawFunction = this.drawClassy;\n break;\n case DotType.classyRounded:\n drawFunction = this.drawClassyRounded;\n break;\n case DotType.rounded:\n drawFunction = this.drawRounded;\n break;\n case DotType.verticalLine:\n drawFunction = this.drawVerticalLine;\n break;\n case DotType.horizontalLine:\n drawFunction = this.drawHorizontalLine;\n break;\n case DotType.extraRounded:\n drawFunction = this.drawExtraRounded;\n break;\n case DotType.diamond:\n drawFunction = this.drawDiamond;\n break;\n case DotType.smallSquare:\n drawFunction = this.drawSmallSquare;\n break;\n case DotType.tinySquare:\n drawFunction = this.drawTinySquare;\n break;\n case DotType.square:\n default:\n drawFunction = this.drawSquare;\n }\n\n drawFunction.call(this, args);\n }\n\n private rotateFigure({ x, y, size, rotation = 0, draw }: RotateFigureArgs): void {\n const cx = x + size / 2;\n const cy = y + size / 2;\n\n draw();\n this._element?.setAttribute(\"transform\", `rotate(${numToAttr((180 * rotation) / Math.PI)},${cx},${cy})`);\n }\n\n private basicDot(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\n this._element.setAttribute(\"cx\", numToAttr(x + size / 2));\n this._element.setAttribute(\"cy\", numToAttr(y + size / 2));\n this._element.setAttribute(\"r\", numToAttr(size / 2));\n }\n });\n }\n\n private basicSquare(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n this._element.setAttribute(\"x\", numToAttr(x));\n this._element.setAttribute(\"y\", numToAttr(y));\n this._element.setAttribute(\"width\", numToAttr(size));\n this._element.setAttribute(\"height\", numToAttr(size));\n }\n });\n }\n\n //if rotation === 0 - right side is rounded\n private basicSideRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y}\n v ${size}\n h ${size / 2}\n a ${size / 2} ${size / 2}, 0, 0, 0, 0 ${-size}\n z`\n );\n }\n });\n }\n\n //if rotation === 0 - top right corner is rounded\n private basicCornerRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y}\n v ${size}\n h ${size}\n v ${-size / 2}\n a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}\n z`\n );\n }\n });\n }\n\n //if rotation === 0 - top right corner is rounded\n private basicCornerExtraRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y}\n v ${size}\n h ${size}\n a ${size} ${size}, 0, 0, 0, ${-size} ${-size}\n z`\n );\n }\n });\n }\n\n //if rotation === 0 - left bottom and right top corners are rounded\n private basicCornersRounded(args: BasicFigureDrawArgs): void {\n const { size, x, y } = args;\n\n this.rotateFigure({\n ...args,\n draw: () => {\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._element.setAttribute(\n \"d\",\n svgPath`M ${x} ${y}\n v ${size / 2}\n a ${size / 2} ${size / 2}, 0, 0, 0, ${size / 2} ${size / 2}\n h ${size / 2}\n v ${-size / 2}\n a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}\n z`\n );\n }\n });\n }\n\n private drawDot({ x, y, size }: DrawArgs): void {\n this.basicDot({ x, y, size, rotation: 0 });\n }\n\n private drawRandomDot({ x, y, size }: DrawArgs): void {\n const randomFactor = Math.random() * (1 - 0.75) + 0.75;\n this.basicDot({ x, y, size: size * randomFactor, rotation: 0 });\n }\n\n private drawSquare({ x, y, size }: DrawArgs): void {\n this.basicSquare({ x, y, size, rotation: 0 });\n }\n\n private drawSmallSquare({ x, y, size }: DrawArgs): void {\n const originalSize = size;\n\n size = originalSize * 0.7;\n x = x + originalSize * 0.15;\n y = y + originalSize * 0.15;\n\n this.basicSquare({ x, y, size, rotation: 0 });\n }\n\n private drawTinySquare({ x, y, size }: DrawArgs): void {\n const originalSize = size;\n\n size = originalSize * 0.3;\n x = x + originalSize * 0.35;\n y = y + originalSize * 0.35;\n\n this.basicSquare({ x, y, size, rotation: 0 });\n }\n\n private drawDiamond({ x, y, size }: DrawArgs): void {\n this.basicSquare({ x, y, size, rotation: Math.PI / 4 });\n }\n\n private drawRounded({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this.basicDot({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\n this.basicSquare({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount === 2) {\n let rotation = 0;\n\n if (leftNeighbor && topNeighbor) {\n rotation = Math.PI / 2;\n } else if (topNeighbor && rightNeighbor) {\n rotation = Math.PI;\n } else if (rightNeighbor && bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this.basicCornerRounded({ x, y, size, rotation });\n return;\n }\n\n if (neighborsCount === 1) {\n let rotation = 0;\n\n if (topNeighbor) {\n rotation = Math.PI / 2;\n } else if (rightNeighbor) {\n rotation = Math.PI;\n } else if (bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this.basicSideRounded({ x, y, size, rotation });\n return;\n }\n }\n\n private drawVerticalLine({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (\n neighborsCount === 0 ||\n (leftNeighbor && !(topNeighbor || bottomNeighbor)) ||\n (rightNeighbor && !(topNeighbor || bottomNeighbor))\n ) {\n this.basicDot({ x, y, size, rotation: 0 });\n return;\n }\n\n if (topNeighbor && bottomNeighbor) {\n this.basicSquare({ x, y, size, rotation: 0 });\n return;\n }\n\n if (topNeighbor && !bottomNeighbor) {\n const rotation = Math.PI / 2;\n this.basicSideRounded({ x, y, size, rotation });\n return;\n }\n\n if (bottomNeighbor && !topNeighbor) {\n const rotation = -Math.PI / 2;\n this.basicSideRounded({ x, y, size, rotation });\n return;\n }\n }\n\n private drawHorizontalLine({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (\n neighborsCount === 0 ||\n (topNeighbor && !(leftNeighbor || rightNeighbor)) ||\n (bottomNeighbor && !(leftNeighbor || rightNeighbor))\n ) {\n this.basicDot({ x, y, size, rotation: 0 });\n return;\n }\n\n if (leftNeighbor && rightNeighbor) {\n this.basicSquare({ x, y, size, rotation: 0 });\n return;\n }\n\n if (leftNeighbor && !rightNeighbor) {\n const rotation = 0;\n this.basicSideRounded({ x, y, size, rotation });\n return;\n }\n\n if (rightNeighbor && !leftNeighbor) {\n const rotation = Math.PI;\n this.basicSideRounded({ x, y, size, rotation });\n return;\n }\n }\n\n private drawExtraRounded({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this.basicDot({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) {\n this.basicSquare({ x, y, size, rotation: 0 });\n return;\n }\n\n if (neighborsCount === 2) {\n let rotation = 0;\n\n if (leftNeighbor && topNeighbor) {\n rotation = Math.PI / 2;\n } else if (topNeighbor && rightNeighbor) {\n rotation = Math.PI;\n } else if (rightNeighbor && bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this.basicCornerExtraRounded({ x, y, size, rotation });\n return;\n }\n\n if (neighborsCount === 1) {\n let rotation = 0;\n\n if (topNeighbor) {\n rotation = Math.PI / 2;\n } else if (rightNeighbor) {\n rotation = Math.PI;\n } else if (bottomNeighbor) {\n rotation = -Math.PI / 2;\n }\n\n this.basicSideRounded({ x, y, size, rotation });\n return;\n }\n }\n\n private drawClassy({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this.basicCornersRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n if (!leftNeighbor && !topNeighbor) {\n this.basicCornerRounded({ x, y, size, rotation: -Math.PI / 2 });\n return;\n }\n\n if (!rightNeighbor && !bottomNeighbor) {\n this.basicCornerRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n this.basicSquare({ x, y, size, rotation: 0 });\n }\n\n private drawClassyRounded({ x, y, size, getNeighbor }: DrawArgs): void {\n const leftNeighbor = getNeighbor ? +getNeighbor(-1, 0) : 0;\n const rightNeighbor = getNeighbor ? +getNeighbor(1, 0) : 0;\n const topNeighbor = getNeighbor ? +getNeighbor(0, -1) : 0;\n const bottomNeighbor = getNeighbor ? +getNeighbor(0, 1) : 0;\n\n const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor;\n\n if (neighborsCount === 0) {\n this.basicCornersRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n if (!leftNeighbor && !topNeighbor) {\n this.basicCornerExtraRounded({ x, y, size, rotation: -Math.PI / 2 });\n return;\n }\n\n if (!rightNeighbor && !bottomNeighbor) {\n this.basicCornerExtraRounded({ x, y, size, rotation: Math.PI / 2 });\n return;\n }\n\n this.basicSquare({ x, y, size, rotation: 0 });\n }\n}\n","export const browserImageTools = {\n toDataURL(url: string | Buffer | Blob): Promise<string> {\n if (typeof url == \"string\" && url.startsWith(\"data:\")) return Promise.resolve(url);\n return new Promise((resolve, reject) => {\n if (typeof url == \"string\") {\n const xhr = new XMLHttpRequest();\n xhr.onload = function () {\n const reader = new FileReader();\n reader.onloadend = function () {\n resolve(reader.result as string);\n };\n reader.readAsDataURL(xhr.response);\n };\n xhr.onerror = xhr.onabort = xhr.ontimeout = reject;\n xhr.open(\"GET\", url, true);\n xhr.responseType = \"blob\";\n xhr.send();\n } else {\n const reader = new FileReader();\n reader.onloadend = function () {\n resolve(reader.result as string);\n };\n reader.readAsDataURL(url as Blob);\n }\n });\n },\n getSize(src: string | Blob | Buffer, crossOrigin?: string): Promise<{ width: number; height: number }> {\n return new Promise((resolve, reject) => {\n const image = new Image();\n\n if (crossOrigin === \"string\") {\n image.crossOrigin = crossOrigin;\n }\n\n image.onload = (): void => {\n resolve({ width: image.width, height: image.height });\n };\n image.onerror = image.onabort = reject;\n\n if (typeof src == \"string\") image.src = src;\n else\n browserImageTools\n .toDataURL(src)\n .then((url) => (image.src = url))\n .catch(reject);\n });\n }\n};\n","import { QRCodeMinimal } from \"@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js\";\nimport { QRUtil } from \"@liquid-js/qrcode-generator/lib/qrcode/QRUtil.js\";\nimport { QRCornerDot } from \"../figures/corner-dot.js\";\nimport { QRCornerSquare } from \"../figures/corner-square.js\";\nimport { QRDot } from \"../figures/dot.js\";\nimport { browserImageTools } from \"../tools/browser-image-tools.js\";\nimport { Gradient, GradientType } from \"../utils/gradient.js\";\nimport { calculateImageSize } from \"../utils/image.js\";\nimport { DotType, ImageMode, Options, ShapeType } from \"../utils/options.js\";\nimport { numToAttr } from \"../utils/svg.js\";\n\nconst squareMask = [\n [1, 1, 1, 1, 1, 1, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 1, 1, 1, 1, 1, 1]\n];\n\nconst dotMask = [\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 1, 1, 1, 0, 0],\n [0, 0, 1, 1, 1, 0, 0],\n [0, 0, 1, 1, 1, 0, 0],\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0, 0, 0]\n];\n\nexport class QRSVG {\n private _element: SVGElement;\n\n get element() {\n return this._element;\n }\n\n private defs: SVGElement;\n\n private backgroundMask?: SVGElement;\n private backgroundMaskGroup?: SVGElement;\n\n private dotsMask?: SVGElement;\n private dotsMaskGroup?: SVGElement;\n\n private lightDotsMask?: SVGElement;\n private lightDotsMaskGroup?: SVGElement;\n\n private qr?: QRCodeMinimal;\n private document: Document;\n private imageTools: typeof browserImageTools;\n\n constructor(\n private options: Pick<\n Options,\n | \"width\"\n | \"height\"\n | \"document\"\n | \"imageTools\"\n | \"image\"\n | \"imageOptions\"\n | \"dotsOptions\"\n | \"cornersDotOptions\"\n | \"cornersSquareOptions\"\n | \"backgroundOptions\"\n | \"shape\"\n > & { errorCorrectionPercent: number }\n ) {\n this.document = options.document;\n this._element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n const width = numToAttr(options.width);\n const height = numToAttr(options.height);\n this._element.setAttribute(\"width\", width);\n this._element.setAttribute(\"height\", height);\n this._element.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\n this.defs = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"defs\");\n this._element.appendChild(this.defs);\n this.imageTools = options.imageTools || browserImageTools;\n }\n\n get width(): number {\n return this.options.width;\n }\n\n get height(): number {\n return this.options.height;\n }\n\n async drawQR(qr: QRCodeMinimal): Promise<void> {\n const count = qr.getModuleCount();\n const typeNumber = parseInt(((count - 17) / 4).toFixed(0), 10);\n const dotSize = this.options.dotsOptions.size;\n let drawImageSize = {\n hideXDots: 0,\n hideYDots: 0,\n width: 0,\n height: 0\n };\n\n this.qr = qr;\n\n if (this.options.image) {\n //We need it to get image size\n const size = await this.imageTools.getSize(this.options.image, this.options.imageOptions.crossOrigin);\n const { imageOptions, errorCorrectionPercent } = this.options;\n\n if (imageOptions.mode == ImageMode.background) {\n const maxWidth = this.options.width * imageOptions.imageSize;\n const maxHeight = this.options.height * imageOptions.imageSize;\n let { width, height } = size;\n\n height = (height / width) * maxWidth;\n width = maxWidth;\n\n if (height > maxHeight) {\n width = (width / height) * maxHeight;\n height = maxHeight;\n }\n\n drawImageSize = {\n hideXDots: 0,\n hideYDots: 0,\n width,\n height\n };\n } else {\n const coverLevel = imageOptions.imageSize * errorCorrectionPercent;\n const alignment = QRUtil.getPatternPosition(typeNumber);\n const maxHiddenDots = Math.floor(\n coverLevel * (count * count - 3 * 8 * 8 - 2 * (count - 16) - alignment.length ** 2 * 25)\n );\n\n drawImageSize = calculateImageSize({\n originalWidth: size.width,\n originalHeight: size.height,\n maxHiddenDots,\n maxHiddenAxisDots: count - 14,\n dotSize,\n margin: imageOptions.margin\n });\n }\n }\n\n if (this.options.image && drawImageSize.width > 0 && drawImageSize.height > 0) {\n await this.drawImage({ width: drawImageSize.width, height: drawImageSize.height, count, dotSize });\n }\n\n this.drawBackground();\n this.drawDots((i: number, j: number): boolean => {\n if (this.options.imageOptions.mode == ImageMode.center) {\n if (\n i >= (count - drawImageSize.hideXDots) / 2 &&\n i < (count + drawImageSize.hideXDots) / 2 &&\n j >= (count - drawImageSize.hideYDots) / 2 &&\n j < (count + drawImageSize.hideYDots) / 2\n ) {\n return false;\n }\n }\n\n if ((i < 8 && j < 8) || (i >= count - 8 && j < 8) || (j >= count - 8 && i < 8)) return false;\n\n return true;\n });\n this.drawCorners();\n }\n\n drawBackground(): void {\n const element = this._element;\n const options = this.options;\n\n if (element && options.backgroundOptions) {\n const gradientOptions = options.backgroundOptions.gradient;\n const color = options.backgroundOptions.color;\n\n this.createColor({\n options: gradientOptions,\n color: color,\n additionalRotation: 0,\n x: 0,\n y: 0,\n height: options.height,\n width: options.width,\n name: \"background-color\"\n });\n\n const size = Math.min(options.width, options.height);\n const element = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n [this.backgroundMask, this.backgroundMaskGroup] = this.createMask(\"mask-background-color\");\n this.defs.appendChild(this.backgroundMask);\n\n element.setAttribute(\"x\", numToAttr((options.width - size) / 2));\n element.setAttribute(\"y\", numToAttr((options.height - size) / 2));\n element.setAttribute(\"width\", numToAttr(size));\n element.setAttribute(\"height\", numToAttr(size));\n element.setAttribute(\"rx\", numToAttr((size / 2) * (options.backgroundOptions.round || 0)));\n\n this.backgroundMaskGroup.appendChild(element);\n }\n }\n\n drawDots(filter?: (i: number, j: number) => boolean): void {\n if (!this.qr) {\n throw \"QR code is not defined\";\n }\n\n const options = this.options;\n const count = this.qr.getModuleCount();\n\n if (count > options.width || count > options.height) {\n throw \"The canvas is too small.\";\n }\n\n const minSize = Math.min(options.width, options.height);\n const dotSize = this.options.dotsOptions.size;\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\n let dot = new QRDot(options.dotsOptions.type, this.document);\n const overlayDot = new QRDot(DotType.tinySquare, this.document);\n const markerDot = new QRDot(DotType.square, this.document);\n\n [this.dotsMask, this.dotsMaskGroup] = this.createMask(\"mask-dot-color\");\n this.defs.appendChild(this.dotsMask);\n\n if (options.imageOptions.mode == ImageMode.background) {\n [this.lightDotsMask, this.lightDotsMaskGroup] = this.createMask(\"mask-light-dot-color\");\n this.defs.appendChild(this.lightDotsMask);\n }\n\n let margin = 0;\n let additionalDots = 0;\n let fakeCount = count;\n\n if (options.shape === ShapeType.circle) {\n margin = (this.options.backgroundOptions && this.options.backgroundOptions.margin) || 0;\n additionalDots = Math.floor((minSize / dotSize - count - 2 * margin) / 2);\n fakeCount = count + additionalDots * 2;\n }\n\n const xFakeBeginning = xBeginning - additionalDots * dotSize;\n const yFakeBeginning = yBeginning - additionalDots * dotSize;\n const colorX = xFakeBeginning;\n const colorY = yFakeBeginning;\n const colorCount = count + additionalDots * 2;\n const fakeMatrix: (boolean | undefined)[][] = new Array(fakeCount);\n const center = Math.floor(fakeCount / 2);\n\n for (let i = 0; i < fakeCount; i++) {\n fakeMatrix[i] = new Array(fakeCount);\n for (let j = 0; j < fakeCount; j++) {\n if (\n i > additionalDots - 1 &&\n i < fakeCount - additionalDots &&\n j > additionalDots - 1 &&\n j < fakeCount - additionalDots\n ) {\n const ii = i - additionalDots;\n const jj = j - additionalDots;\n if (filter && !filter(ii, jj)) fakeMatrix[i][j] = undefined;\n else fakeMatrix[i][j] = !!this.qr.isDark(jj, ii);\n continue;\n }\n\n if (\n options.shape === ShapeType.circle &&\n Math.sqrt((i - center) * (i - center) + (j - center) * (j - center)) > center\n ) {\n fakeMatrix[i][j] = undefined;\n continue;\n }\n\n if (\n i == additionalDots - 1 ||\n i == fakeCount - additionalDots ||\n j == additionalDots - 1 ||\n j == fakeCount - additionalDots\n ) {\n if (\n (j == additionalDots - 1 && (i < additionalDots + 8 || i > fakeCount - additionalDots - 9)) ||\n (j == fakeCount - additionalDots && i < additionalDots + 8) ||\n (i == additionalDots - 1 && (j < additionalDots + 8 || j > fakeCount - additionalDots - 9)) ||\n (i == fakeCount - additionalDots && j < additionalDots + 8)\n )\n fakeMatrix[i][j] = undefined;\n else fakeMatrix[i][j] = false;\n continue;\n }\n\n if (this.lightDotsMask) continue;\n\n // Get random dots from QR code to show it outside of QR code\n fakeMatrix[i][j] = this.qr.isDark(\n j - 2 * additionalDots < 0 ? j : j >= count ? j - 2 * additionalDots : j - additionalDots,\n i - 2 * additionalDots < 0 ? i : i >= count ? i - 2 * additionalDots : i - additionalDots\n );\n }\n }\n\n const typeNr = (count - 17) / 4;\n const alignment = QRUtil.getPatternPosition(typeNr);\n\n for (let i = 0; i < fakeCount; i++) {\n const iAlign = alignment.find((v) => i - additionalDots > v - 3 && i - additionalDots < v + 3);\n for (let j = 0; j < fakeCount; j++) {\n const jAlign = alignment.find((v) => j - additionalDots > v - 3 && j - additionalDots < v + 3);\n if (fakeMatrix[i][j] == undefined) continue;\n\n if (this.lightDotsMask) {\n dot =\n iAlign &&\n jAlign &&\n ((iAlign != alignment[0] && jAlign != alignment[0]) ||\n (jAlign != alignment[0] && jAlign != alignment[alignment.length - 1]) ||\n (iAlign != alignment[0] && iAlign != alignment[alignment.length - 1]))\n ? markerDot\n : overlayDot;\n }\n\n if (!fakeMatrix[i][j]) {\n if (this.lightDotsMask) {\n dot.draw({\n x: xFakeBeginning + i * dotSize,\n y: yFakeBeginning + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean => {\n return fakeMatrix[i + xOffset]?.[j + yOffset] === false;\n }\n });\n\n if (dot.element && this.lightDotsMaskGroup) {\n this.lightDotsMaskGroup.appendChild(dot.element);\n }\n }\n continue;\n }\n\n dot.draw({\n x: xFakeBeginning + i * dotSize,\n y: yFakeBeginning + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean => {\n return fakeMatrix[i + xOffset]?.[j + yOffset] === true;\n }\n });\n if (dot.element && this.dotsMaskGroup) {\n this.dotsMaskGroup.appendChild(dot.element);\n }\n }\n }\n\n if (this.lightDotsMask) {\n this.createColor({\n options: options.imageOptions.fill.gradient,\n color: options.imageOptions.fill.color,\n additionalRotation: 0,\n x: colorX - dotSize,\n y: colorY - dotSize,\n height: (colorCount + 2) * dotSize,\n width: (colorCount + 2) * dotSize,\n name: \"light-dot-color\"\n });\n }\n\n this.createColor({\n options: options.dotsOptions?.gradient,\n color: options.dotsOptions.color,\n additionalRotation: 0,\n x: colorX,\n y: colorY,\n height: colorCount * dotSize,\n width: colorCount * dotSize,\n name: \"dot-color\"\n });\n }\n\n drawCorners(): void {\n if (!this.qr) {\n throw \"QR code is not defined\";\n }\n\n const element = this._element;\n const options = this.options;\n\n if (!element) {\n throw \"Element code is not defined\";\n }\n\n const count = this.qr.getModuleCount();\n const dotSize = this.options.dotsOptions.size;\n const cornersSquareSize = dotSize * 7;\n const cornersDotSize = dotSize * 3;\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\n\n [\n [0, 0, 0],\n [1, 0, Math.PI / 2],\n [0, 1, -Math.PI / 2]\n ].forEach(([column, row, rotation]) => {\n const x = xBeginning + column * dotSize * (count - 7);\n const y = yBeginning + row * dotSize * (count - 7);\n let cornersSquareMask = this.dotsMask;\n let cornersSquareMaskGroup = this.dotsMaskGroup;\n let cornersDotMask = this.dotsMask;\n let cornersDotMaskGroup = this.dotsMaskGroup;\n\n if (options.cornersSquareOptions?.gradient || options.cornersSquareOptions?.color) {\n [cornersSquareMask, cornersSquareMaskGroup] = this.createMask(`mask-corners-square-color-${column}-${row}`);\n this.defs.appendChild(cornersSquareMask);\n cornersDotMask = cornersSquareMask;\n cornersDotMaskGroup = cornersSquareMaskGroup;\n\n this.createColor({\n options: options.cornersSquareOptions?.gradient,\n color: options.cornersSquareOptions?.color,\n additionalRotation: rotation,\n x,\n y,\n height: cornersSquareSize,\n width: cornersSquareSize,\n name: `corners-square-color-${column}-${row}`\n });\n }\n\n if (options.cornersSquareOptions?.type) {\n const cornersSquare = new QRCornerSquare(options.cornersSquareOptions.type, this.document);\n\n cornersSquare.draw({\n x,\n y,\n size: cornersSquareSize,\n rotation\n });\n\n if (cornersSquare.element && cornersSquareMaskGroup) {\n cornersSquareMaskGroup.appendChild(cornersSquare.element);\n }\n\n if (cornersSquare.fill && this.lightDotsMaskGroup) {\n this.lightDotsMaskGroup.appendChild(cornersSquare.fill);\n }\n } else {\n const dot = new QRDot(options.dotsOptions.type, this.document);\n\n for (let i = 0; i < squareMask.length; i++) {\n for (let j = 0; j < squareMask[i].length; j++) {\n if (!squareMask[i]?.[j]) {\n if (this.lightDotsMask && !dotMask[i]?.[j]) {\n dot.draw({\n x: x + i * dotSize,\n y: y + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean =>\n !squareMask[i + xOffset]?.[j + yOffset] && !dotMask[i + xOffset]?.[j + yOffset]\n });\n\n if (dot.element && this.lightDotsMaskGroup) {\n this.lightDotsMaskGroup.appendChild(dot.element);\n }\n }\n continue;\n }\n\n dot.draw({\n x: x + i * dotSize,\n y: y + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean => !!squareMask[i + xOffset]?.[j + yOffset]\n });\n\n if (dot.element && cornersSquareMaskGroup) {\n cornersSquareMaskGroup.appendChild(dot.element);\n }\n }\n }\n\n if (this.lightDotsMask)\n for (let i = -1; i < 8; i++) {\n for (let j = -1; j < 8; j++) {\n if (i == -1 || i == 7 || j == -1 || j == 7) {\n dot.draw({\n x: x + i * dotSize,\n y: y + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean => {\n const ii = i + xOffset;\n const jj = j + yOffset;\n return ii >= -1 && ii <= 7 && jj >= -1 && jj <= 7 && (ii == -1 || ii == 7 || jj == -1 || jj == 7);\n }\n });\n\n if (dot.element && this.lightDotsMaskGroup) {\n this.lightDotsMaskGroup.appendChild(dot.element);\n }\n }\n }\n }\n }\n\n if (options.cornersDotOptions?.gradient || options.cornersDotOptions?.color) {\n [cornersDotMask, cornersDotMaskGroup] = this.createMask(`mask-corners-dot-color-${column}-${row}`);\n this.defs.appendChild(cornersDotMask);\n\n this.createColor({\n options: options.cornersDotOptions?.gradient,\n color: options.cornersDotOptions?.color,\n additionalRotation: rotation,\n x: x + dotSize * 2,\n y: y + dotSize * 2,\n height: cornersDotSize,\n width: cornersDotSize,\n name: `corners-dot-color-${column}-${row}`\n });\n }\n\n if (options.cornersDotOptions?.type) {\n const cornersDot = new QRCornerDot(options.cornersDotOptions.type, this.document);\n\n cornersDot.draw({\n x: x + dotSize * 2,\n y: y + dotSize * 2,\n size: cornersDotSize,\n rotation\n });\n\n if (cornersDot.element && cornersDotMaskGroup) {\n cornersDotMaskGroup.appendChild(cornersDot.element);\n }\n } else {\n const dot = new QRDot(options.dotsOptions.type, this.document);\n\n for (let i = 0; i < dotMask.length; i++) {\n for (let j = 0; j < dotMask[i].length; j++) {\n if (!dotMask[i]?.[j]) {\n continue;\n }\n\n dot.draw({\n x: x + i * dotSize,\n y: y + j * dotSize,\n size: dotSize,\n getNeighbor: (xOffset: number, yOffset: number): boolean => !!dotMask[i + xOffset]?.[j + yOffset]\n });\n\n if (dot.element && cornersDotMaskGroup) {\n cornersDotMaskGroup.appendChild(dot.element);\n }\n }\n }\n }\n });\n }\n\n async drawImage({\n width,\n height,\n count,\n dotSize\n }: {\n width: number;\n height: number;\n count: number;\n dotSize: number;\n }): Promise<void> {\n const options = this.options;\n const xBeginning = Math.floor((options.width - count * dotSize) / 2);\n const yBeginning = Math.floor((options.height - count * dotSize) / 2);\n const margin = options.imageOptions.margin * dotSize;\n const dx = xBeginning + margin + (count * dotSize - width) / 2;\n const dy = yBeginning + margin + (count * dotSize - height) / 2;\n const dw = width - margin * 2;\n const dh = height - margin * 2;\n\n const imageUrl = await this.imageTools.toDataURL(options.image || \"\");\n let image: SVGElement = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"image\");\n image.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"xlink:href\", imageUrl || \"\");\n\n if (imageUrl.startsWith(\"data:image/svg+xml;\")) {\n let data = imageUrl.substring(19);\n const i = data.indexOf(\",\");\n const encoding = data.substring(0, i);\n data = data.substring(i + 1);\n\n switch (encoding) {\n case \"base64\":\n data = typeof atob == \"function\" ? atob(data) : Buffer.from(data, \"base64\").toString(\"utf8\");\n break;\n default:\n data = \"\";\n break;\n }\n\n if (data) {\n const container = new DOMParser().parseFromString(data, \"text/xml\");\n const rootEl = Array.from(container.getElementsByTagName(\"svg\"));\n if (rootEl.length) image = rootEl[0];\n }\n }\n\n image.setAttribute(\"x\", numToAttr(dx));\n image.setAttribute(\"y\", numToAttr(dy));\n image.setAttribute(\"width\", `${numToAttr(dw)}px`);\n image.setAttribute(\"height\", `${numToAttr(dh)}px`);\n\n this._element.appendChild(image);\n }\n\n private createColor({\n options,\n color,\n additionalRotation,\n x,\n y,\n height,\n width,\n name\n }: {\n options?: Gradient;\n color?: string;\n additionalRotation: number;\n x: number;\n y: number;\n height: number;\n width: number;\n name: string;\n }): void {\n const size = width > height ? width : height;\n const rect = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n rect.setAttribute(\"x\", numToAttr(x));\n rect.setAttribute(\"y\", numToAttr(y));\n rect.setAttribute(\"height\", numToAttr(height));\n rect.setAttribute(\"width\", numToAttr(width));\n rect.setAttribute(\"style\", `mask:url(#mask-${name})`);\n\n if (options) {\n let gradient: SVGElement;\n if (options.type === GradientType.radial) {\n gradient = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"radialGradient\");\n gradient.setAttribute(\"id\", name);\n gradient.setAttribute(\"gradientUnits\", \"userSpaceOnUse\");\n gradient.setAttribute(\"fx\", numToAttr(x + width / 2));\n gradient.setAttribute(\"fy\", numToAttr(y + height / 2));\n gradient.setAttribute(\"cx\", numToAttr(x + width / 2));\n gradient.setAttribute(\"cy\", numToAttr(y + height / 2));\n gradient.setAttribute(\"r\", numToAttr(size / 2));\n } else {\n const rotation = ((options.rotation || 0) + additionalRotation) % (2 * Math.PI);\n const positiveRotation = (rotation + 2 * Math.PI) % (2 * Math.PI);\n let x0 = x + width / 2;\n let y0 = y + height / 2;\n let x1 = x + width / 2;\n let y1 = y + height / 2;\n\n if (\n (positiveRotation >= 0 && positiveRotation <= 0.25 * Math.PI) ||\n (positiveRotation > 1.75 * Math.PI && positiveRotation <= 2 * Math.PI)\n ) {\n x0 = x0 - width / 2;\n y0 = y0 - (height / 2) * Math.tan(rotation);\n x1 = x1 + width / 2;\n y1 = y1 + (height / 2) * Math.tan(rotation);\n } else if (positiveRotation > 0.25 * Math.PI && positiveRotation <= 0.75 * Math.PI) {\n y0 = y0 - height / 2;\n x0 = x0 - width / 2 / Math.tan(rotation);\n y1 = y1 + height / 2;\n x1 = x1 + width / 2 / Math.tan(rotation);\n } else if (positiveRotation > 0.75 * Math.PI && positiveRotation <= 1.25 * Math.PI) {\n x0 = x0 + width / 2;\n y0 = y0 + (height / 2) * Math.tan(rotation);\n x1 = x1 - width / 2;\n y1 = y1 - (height / 2) * Math.tan(rotation);\n } else if (positiveRotation > 1.25 * Math.PI && positiveRotation <= 1.75 * Math.PI) {\n y0 = y0 + height / 2;\n x0 = x0 + width / 2 / Math.tan(rotation);\n y1 = y1 - height / 2;\n x1 = x1 - width / 2 / Math.tan(rotation);\n }\n\n gradient = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"linearGradient\");\n gradient.setAttribute(\"id\", name);\n gradient.setAttribute(\"gradientUnits\", \"userSpaceOnUse\");\n gradient.setAttribute(\"x1\", numToAttr(x0));\n gradient.setAttribute(\"y1\", numToAttr(y0));\n gradient.setAttribute(\"x2\", numToAttr(x1));\n gradient.setAttribute(\"y2\", numToAttr(y1));\n }\n\n options.colorStops.forEach(({ offset, color }: { offset: number; color: string }) => {\n const stop = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"stop\");\n stop.setAttribute(\"offset\", `${numToAttr(100 * offset)}%`);\n stop.setAttribute(\"stop-color\", color);\n gradient.appendChild(stop);\n });\n\n rect.setAttribute(\"fill\", `url(#${name})`);\n this.defs.appendChild(gradient);\n } else if (color) {\n rect.setAttribute(\"fill\", color);\n }\n\n this._element.appendChild(rect);\n }\n\n private createMask(id: string) {\n const options = this.options;\n\n const mask = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"mask\");\n mask.setAttribute(\"id\", id);\n mask.setAttribute(\"maskUnits\", \"userSpaceOnUse\");\n mask.setAttribute(\"x\", \"0\");\n mask.setAttribute(\"y\", \"0\");\n mask.setAttribute(\"width\", numToAttr(options.width));\n mask.setAttribute(\"height\", numToAttr(options.height));\n\n const group = this.document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n group.setAttribute(\"fill\", \"#fff\");\n mask.appendChild(group);\n\n return [mask, group];\n }\n}\n","interface ImageSizeOptions {\n originalHeight: number;\n originalWidth: number;\n maxHiddenDots: number;\n maxHiddenAxisDots?: number;\n dotSize: number;\n margin: number;\n}\n\ninterface ImageSizeResult {\n height: number;\n width: number;\n hideYDots: number;\n hideXDots: number;\n}\n\nexport function calculateImageSize({\n originalHeight,\n originalWidth,\n maxHiddenDots,\n maxHiddenAxisDots,\n dotSize,\n margin\n}: ImageSizeOptions): ImageSizeResult {\n const hideDots = { x: 0, y: 0 };\n const imageSize = { x: 0, y: 0 };\n\n if (\n originalHeight <= 0 ||\n originalWidth <= 0 ||\n maxHiddenDots <= 0 ||\n dotSize <= 0 ||\n 4 * margin ** 2 > maxHiddenDots\n ) {\n return {\n height: 0,\n width: 0,\n hideYDots: 0,\n hideXDots: 0\n };\n }\n\n //If set, ensure maxHiddenAxisDots is odd and at least 1\n if (maxHiddenAxisDots && maxHiddenAxisDots % 2 == 0) maxHiddenAxisDots = Math.max(1, maxHiddenAxisDots - 1);\n\n //Determine the bigger and smaller image dimension\n const dimMax = Math.max(originalWidth, originalHeight);\n const dimMin = Math.min(originalWidth, originalHeight);\n\n //Find max image size along the bigger dimension\n let lower = 0,\n upper = (maxHiddenAxisDots || maxHiddenDots) - 2 * margin;\n do {\n const size = lower + (upper - lower) / 2;\n let dotsMax = Math.max(1, Math.ceil(size + 2 * margin));\n if (dotsMax % 2 == 0) dotsMax++;\n let dotsMin = Math.max(1, Math.ceil((size * dimMin) / dimMax + 2 * margin));\n if (dotsMin % 2 == 0) dotsMin++;\n\n if (dotsMax * dotsMin > maxHiddenDots) upper = size;\n else lower = size;\n } while (Math.abs(lower - upper) > 0.001);\n\n //Calculate how many dots the given size corresponds to\n const size = lower;\n let hideMax = Math.max(1, Math.ceil(size + 2 * margin));\n if (hideMax % 2 == 0) hideMax++;\n let hideMin = Math.max(1, Math.ceil((size * dimMin) / dimMax + 2 * margin));\n if (hideMin % 2 == 0) hideMin++;\n\n //Set hidden dots along bigger and smaller dimension to the right axis\n if (originalWidth > originalHeight) {\n hideDots.x = hideMax;\n hideDots.y = hideMin;\n } else {\n hideDots.x = hideMin;\n hideDots.y = hideMax;\n }\n\n //Fit image to the hidden dots\n const maxW = (hideDots.x - 2 * margin) * dotSize;\n const maxH = (hideDots.y - 2 * margin) * dotSize;\n imageSize.x = maxW;\n imageSize.y = (maxW * originalHeight) / originalWidth;\n if (imageSize.y > maxH) {\n imageSize.y = maxH;\n imageSize.x = (maxH * originalWidth) / originalHeight;\n }\n\n return {\n height: Math.round(imageSize.y + 2 * margin * dotSize),\n width: Math.round(imageSize.x + 2 * margin * dotSize),\n hideYDots: hideDots.y,\n hideXDots: hideDots.x\n };\n}\n","import { QRCodeMinimal } from \"@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js\";\nimport { stringToBytes_UTF8 } from \"@liquid-js/qrcode-generator/lib/text/stringToBytes_UTF8.js\";\nimport { RecursivePartial } from \"../types/helper.js\";\nimport { mergeDeep } from \"../utils/merge.js\";\nimport { ImageMode, Options, ShapeType, defaultOptions, sanitizeOptions } from \"../utils/options.js\";\nimport { ErrorCorrectionPercents, getMode } from \"../utils/qrcode.js\";\nimport { QRSVG } from \"./qr-svg.js\";\n\nObject.assign(QRCodeMinimal.stringToBytesFuncs, stringToBytes_UTF8);\n\nexport type ExtensionFunction = (svg: SVGElement, options: RecursivePartial<Options>) => void;\n\nexport class QRCodeStyling {\n private options: Options;\n private container?: HTMLElement;\n private qr?: QRCodeMinimal;\n private extension?: ExtensionFunction;\n private svgDrawingPromise?: Promise<void>;\n private qrSVG?: QRSVG;\n\n get size() {\n if (this.qrSVG)\n return {\n width: this.qrSVG.width,\n height: this.qrSVG.height\n };\n return undefined;\n }\n\n constructor(options?: RecursivePartial<Options>) {\n this.options = options ? sanitizeOptions(mergeDeep(defaultOptions, options) as Options) : defaultOptions;\n this.update();\n }\n\n update(\n /** The same options as for initialization */\n options?: RecursivePartial<Options>\n ): void {\n if (this.container) this.container.innerHTML = \"\";\n\n this.options = options ? sanitizeOptions(mergeDeep(this.options, options) as Options) : this.options;\n\n if (!this.options.data) {\n return;\n }\n\n if (this.options.stringToBytesFuncs) {\n Object.assign(QRCodeMinimal.stringToBytesFuncs, this.options.stringToBytesFuncs);\n delete this.options.stringToBytesFuncs;\n }\n\n this.qr = new QRCodeMinimal(this.options.qrOptions.typeNumber, this.options.qrOptions.errorCorrectionLevel);\n const mode = this.options.qrOptions.mode || getMode(this.options.data);\n this.qr.addData(this.options.data, mode);\n this.qr.make();\n\n this.setupSvg();\n\n this.append(this.container);\n }\n\n append(\n /** This container will be used for appending of the QR code */\n container?: HTMLElement\n ): void {\n if (!container) {\n return;\n }\n\n if (this.qrSVG?.element) {\n container.appendChild(this.qrSVG.element);\n }\n\n this.container = container;\n }\n\n /**\n *\n * @example\n *\n * ```js\n * const extension = (svg, options) => {\n * const { width, height } = options;\n * const size = Math.min(width, height);\n * const border = options.document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n * const borderAttributes = {\n * fill: \"none\",\n * x: (width - size + 40) / 2,\n * y: (height - size + 40) / 2,\n * width: size - 40,\n * height: size - 40,\n * stroke: \"black\",\n * \"stroke-width\": 40,\n * rx: 100\n * };\n * Object.keys(borderAttributes).forEach((attribute) => {\n * border.setAttribute(attribute, borderAttributes[attribute]);\n * });\n * svg.appendChild(border);\n * };\n * ```\n */\n applyExtension(\n /** Extension is a function that takes svg and previously applied options and modifies an svg */\n extension: ExtensionFunction\n ): void {\n if (!extension) {\n throw \"Extension function should be defined.\";\n }\n\n this.extension = extension;\n this.update();\n }\n\n deleteExtension(): void {\n this.extension = undefined;\n this.update();\n }\n\n async serialize(): Promise<string | undefined> {\n if (!this.qr) throw \"QR code is empty\";\n\n if (!this.qrSVG?.element || !this.svgDrawingPromise) {\n this.setupSvg();\n }\n await this.svgDrawingPromise;\n\n if (!this.qrSVG?.element) {\n return;\n }\n\n const serializer = new XMLSerializer();\n let source = serializer.serializeToString(this.qrSVG.element);\n\n source = '<?xml version=\"1.0\" standalone=\"no\"?>\\r\\n' + source;\n return source;\n }\n\n private setupSvg(): void {\n if (!this.qr) {\n return;\n }\n let moduleCount = this.qr.getModuleCount();\n if (this.options.imageOptions.mode == ImageMode.background) moduleCount += 2;\n const count = Math.ceil((this.options.shape == ShapeType.circle ? Math.sqrt(2) : 1) * moduleCount);\n const margin = (this.options.backgroundOptions && this.options.backgroundOptions.margin) || 0;\n const size = Math.ceil(this.options.dotsOptions.size * (count + 2 * margin));\n this.qrSVG = new QRSVG({\n ...this.options,\n width: size,\n height: size,\n errorCorrectionPercent: ErrorCorrectionPercents[this.options.qrOptions.errorCorrectionLevel]\n });\n\n this.svgDrawingPromise = this.qrSVG.drawQR(this.qr).then(() => {\n if (!this.qrSVG?.element) return;\n this.extension?.(this.qrSVG.element, this.options);\n });\n }\n}\n","/**\n * stringToBytes_UTF8\n * contributed by elhigu\n */\nexport const stringToBytes_UTF8 = {\n UTF8: function (s) {\n // http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\n function toUTF8Array(str) {\n const utf8 = [];\n for (let i = 0; i < str.length; i++) {\n let charcode = str.charCodeAt(i);\n if (charcode < 0x80)\n utf8.push(charcode);\n else if (charcode < 0x800) {\n utf8.push(0xc0 | (charcode >> 6), 0x80 | (charcode & 0x3f));\n }\n else if (charcode < 0xd800 || charcode >= 0xe000) {\n utf8.push(0xe0 | (charcode >> 12), 0x80 | ((charcode >> 6) & 0x3f), 0x80 | (charcode & 0x3f));\n }\n // surrogate pair\n else {\n i++;\n // UTF-16 encodes 0x10000-0x10FFFF by\n // subtracting 0x10000 and splitting the\n // 20 bits of 0x0-0xFFFFF into two halves\n charcode = 0x10000 + (((charcode & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));\n utf8.push(0xf0 | (charcode >> 18), 0x80 | ((charcode >> 12) & 0x3f), 0x80 | ((charcode >> 6) & 0x3f), 0x80 | (charcode & 0x3f));\n }\n }\n return utf8;\n }\n return toUTF8Array(s);\n }\n};\n//# sourceMappingURL=stringToBytes_UTF8.js.map","export interface CanvasOptions {\n width: number;\n height: number;\n margin: number;\n}\n\nexport const defaultCanvasOptions: CanvasOptions = {\n width: 300,\n height: 300,\n margin: 0\n};\n\nexport function sanitizeCanvasOptions(options: CanvasOptions): CanvasOptions {\n const newOptions = { ...options };\n\n newOptions.width = Number(newOptions.width);\n newOptions.height = Number(newOptions.height);\n newOptions.margin = Number(newOptions.margin);\n\n if (newOptions.margin > Math.min(newOptions.width, newOptions.height)) {\n newOptions.margin = Math.min(newOptions.width, newOptions.height);\n }\n\n return newOptions;\n}\n","import { QRCodeStyling } from \"../core/qr-code-styling.js\";\nimport { RecursivePartial } from \"../types/helper.js\";\nimport { CanvasOptions, defaultCanvasOptions, sanitizeCanvasOptions } from \"../utils/canvas-options.js\";\nimport { mergeDeep } from \"../utils/merge.js\";\n\nexport enum FileExtension {\n svg = \"svg\",\n png = \"png\",\n jpeg = \"jpeg\",\n webp = \"webp\"\n}\n\nexport function drawToCanvas(\n qrCode: QRCodeStyling,\n options?: RecursivePartial<CanvasOptions>\n): { canvas: HTMLCanvasElement; canvasDrawingPromise: Promise<void> | undefined } | undefined {\n const { width, height, margin } = options\n ? sanitizeCanvasOptions(mergeDeep(defaultCanvasOptions, options) as CanvasOptions)\n : defaultCanvasOptions;\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = width;\n canvas.height = height;\n\n const size = Math.min(width, height) - 2 * margin;\n\n const canvasDrawingPromise = qrCode.serialize().then((xml) => {\n if (!xml) return;\n const svg64 = btoa(xml);\n const image64 = \"data:image/svg+xml;base64,\" + svg64;\n const image = new Image();\n\n return new Promise<void>((resolve, reject) => {\n image.onload = (): void => {\n // Ensure pixel-perfect rendering of SVG to avoid artefact, then downscale to requested size\n const aaFactor = Math.ceil((2 * size) / Math.min(image.width, image.height));\n let aaCanvas: HTMLCanvasElement | OffscreenCanvas;\n try {\n aaCanvas = new OffscreenCanvas(image.width * aaFactor, image.height * aaFactor);\n } catch (_) {\n // Fallback to regular canvas element\n aaCanvas = document.createElement(\"canvas\");\n aaCanvas.width = image.width * aaFactor;\n aaCanvas.height = image.height * aaFactor;\n }\n aaCanvas.getContext(\"2d\")?.drawImage(image, 0, 0, aaCanvas.width, aaCanvas.height);\n\n canvas?.getContext(\"2d\")?.drawImage(aaCanvas, (width - size) / 2, (height - size) / 2, size, size);\n resolve();\n };\n image.onerror = image.onabort = reject;\n\n image.src = image64;\n });\n });\n\n return { canvas, canvasDrawingPromise };\n}\n\nexport async function download(\n qrCode: QRCodeStyling,\n downloadOptions: `${FileExtension}` | { name?: string; extension: `${FileExtension}` },\n options?: RecursivePartial<CanvasOptions>\n): Promise<void> {\n let extension: `${FileExtension}` = FileExtension.png;\n let name = \"qr\";\n\n //TODO remove deprecated code in the v2\n if (typeof downloadOptions === \"string\") {\n extension = downloadOptions;\n console.warn(\n \"Extension is deprecated as argument for 'download' method, please pass object { name: '...', extension: '...' } as argument\"\n );\n } else if (typeof downloadOptions === \"object\" && downloadOptions !== null) {\n if (downloadOptions.name) {\n name = downloadOptions.name;\n }\n if (downloadOptions.extension) {\n extension = downloadOptions.extension;\n }\n }\n\n if (extension.toLowerCase() === \"svg\") {\n const source = await qrCode.serialize();\n if (!source) return;\n const url = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(source);\n downloadURI(url, `${name}.svg`);\n } else {\n const res = drawToCanvas(qrCode, options);\n if (!res) return;\n const { canvas, canvasDrawingPromise } = res;\n await canvasDrawingPromise;\n const url = canvas.toDataURL(`image/${extension}`);\n downloadURI(url, `${name}.${extension}`);\n }\n}\n\nexport function downloadURI(uri: string, name: string): void {\n const link = document.createElement(\"a\");\n link.download = name;\n link.href = uri;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n}\n","export { ErrorCorrectionLevel, Mode, TypeNumber } from \"@liquid-js/qrcode-generator/lib/qrcode/QRCodeMinimal.js\";\nexport { QRCodeStyling, type ExtensionFunction } from \"./core/qr-code-styling.js\";\nexport { FileExtension } from \"./tools/browser-utils.js\";\nexport { type RecursivePartial } from \"./types/helper.js\";\nexport { type CanvasOptions } from \"./utils/canvas-options.js\";\nexport { GradientType, type Gradient } from \"./utils/gradient.js\";\nexport { CornerDotType, CornerSquareType, DotType, ShapeType, type Options } from \"./utils/options.js\";\nexport { ErrorCorrectionPercents } from \"./utils/qrcode.js\";\nimport * as _browserUtils from \"./tools/browser-utils.js\";\n\nexport const browserUtils: typeof _browserUtils | undefined = _browserUtils;\n"],"names":["aa","constructor","this","length","buffer","getLengthInBits","toString","b","i","getBit","a","index","put","num","c","putBit","push","r","ErrorCorrectLevel","L","v","M","Q","H","QRMath","glog","n","LOG_TABLE","gexp","EXP_TABLE","initialize","y","shift","offset","len","getAt","getLength","toLogString","multiply","e","j","Polynomial","mod","ratio","Mode","MODE_NUMBER","MODE_ALPHA_NUM","MODE_8BIT_BYTE","MODE_KANJI","QRData","mode","data","getMode","getData","typeNumber","QR8BitByte","stringToBytes","super","write","QRAlphaNum","C","s","getCode","charAt","charCodeAt","QRNumber","strToNum","substring","chatToNum","MaskPattern","G","PATTERN000","PATTERN001","PATTERN010","PATTERN011","PATTERN100","PATTERN101","PATTERN110","PATTERN111","QRUtil","getPatternPosition","PATTERN_POSITION_TABLE","getMaxLength","errorCorrectLevel","m","MAX_LENGTH","getErrorCorrectPolynomial","errorCorrectLength","getMaskFunc","maskPattern","_i","getLostPoint","qrCode","lostPoint","row","moduleCount","col","sameCount","dark","isDark","count","darkCount","Math","abs","getBCHTypeInfo","d","getBCHDigit","G15","G15_MASK","getBCHTypeNumber","G18","digit","I","totalCount","dataCount","getDataCount","getTotalCount","getRSBlocks","rsBlock","RSBlock","getRsBlockTable","list","RS_BLOCK_TABLE","TypeNumber","Array","fill","map","_","ErrorCorrectionLevel","fa","numeric","alphanumeric","kanji","unicode","QRCodeMinimal","errorCorrectionLevel","modules","qrDataList","getTypeNumber","setTypeNumber","getErrorCorrectLevel","setErrorCorrectLevel","clearData","addData","qrData","byte","stringToBytesFuncs","default","UTF8","QRKanji","SJIS","getModuleCount","make","rsBlocks","BitBuffer","totalDataCount","makeImpl","getBestMaskPattern","minLostPoint","pattern","test","setupPositionProbePattern","setupPositionAdjustPattern","setupTimingPattern","setupTypeInfo","setupTypeNumber","mapData","inc","bitIndex","byteIndex","maskFunc","mask","pos","bits","createData","dataArray","PAD0","PAD1","createBytes","createNumArray","maxDcCount","maxEcCount","dcdata","ecdata","dcCount","ecCount","max","getBuffer","rsPoly","modPoly","h","modIndex","totalCodeCount","bytes","isObject","obj","isArray","mergeDeep","target","sources","undefined","source","keys","forEach","key","targetValue","sourceValue","Object","assign","GradientType","ja","sanitizeGradient","gradient","colorStops","newGradient","rotation","Number","colorStop","radial","linear","DotType","dot","randomDot","rounded","extraRounded","verticalLine","horizontalLine","classy","classyRounded","square","smallSquare","tinySquare","diamond","CornerDotType","S","heart","outpoint","inpoint","CornerSquareType","U","ShapeType","ka","circle","ImageMode","la","center","background","defaultOptions","document","shape","width","height","qrOptions","imageOptions","imageSize","crossOrigin","margin","color","dotsOptions","type","size","sanitizeOptions","options","newOptions","min","round","cornersSquareOptions","cornersDotOptions","backgroundOptions","ErrorCorrectionPercents","rx","numToAttr","X","value","toFixed","replace","Y","strings","values","reduce","t","p","trim","element","_element","draw","args","drawFunction","drawSquare","drawHeart","drawRounded","drawClassy","drawInpoint","drawOutpoint","drawDot","call","rotateFigure","x","setAttribute","PI","cx","cy","basicDot","createElementNS","basicSquare","basicHeart","move","path","g","toUpperCase","join","basicRounded","basicClassy","svgPath","dotSize","basicInpoint","_fill","drawExtraRounded","basicExtraRounded","drawRandomDot","drawClassyRounded","drawVerticalLine","drawHorizontalLine","drawDiamond","drawSmallSquare","drawTinySquare","basicSideRounded","basicCornerRounded","basicCornerExtraRounded","basicCornersRounded","random","getNeighbor","leftNeighbor","rightNeighbor","topNeighbor","neighborsCount","bottomNeighbor","browserImageTools","toDataURL","url","startsWith","Promise","resolve","reject","xhr","XMLHttpRequest","onload","xhr.onload","reader","FileReader","onloadend","reader.onloadend","result","readAsDataURL","response","onerror","onabort","ontimeout","open","responseType","send","getSize","src","image","Image","then","catch","squareMask","dotMask","QRSVG","defs","appendChild","imageTools","drawQR","qr","parseInt","drawImageSize","hideXDots","hideYDots","errorCorrectionPercent","maxWidth","maxHeight","q","f","alignment","originalHeight","originalWidth","maxHiddenDots","maxHiddenAxisDots","dimMax","dimMin","lower","upper","dotsMax","ceil","dotsMin","hideMax","hideMin","maxW","maxH","calculateImageSize","floor","coverLevel","drawImage","drawBackground","drawDots","drawCorners","createColor","additionalRotation","name","backgroundMask","backgroundMaskGroup","createMask","filter","minSize","QRDot","overlayDot","markerDot","dotsMask","dotsMaskGroup","lightDotsMask","lightDotsMaskGroup","additionalDots","fakeCount","xBeginning","yBeginning","colorCount","fakeMatrix","ii","jj","sqrt","iAlign","find","jAlign","xFakeBeginning","yFakeBeginning","xOffset","yOffset","column","cornersSquareMask","cornersSquareMaskGroup","cornersDotMask","cornersDotMaskGroup","cornersSquareSize","QRCornerSquare","cornersSquare","cornersDotSize","QRCornerDot","cornersDot","dx","imageUrl","setAttributeNS","indexOf","encoding","atob","Buffer","from","container","parseFromString","DOMParser","rootEl","getElementsByTagName","dy","dw","dh","rect","x0","y0","positiveRotation","tan","x1","y1","stop","id","group","stringToBytes_UTF8","utf8","charcode","QRCodeStyling","qrSVG","update","innerHTML","setupSvg","append","applyExtension","extension","deleteExtension","serialize","svgDrawingPromise","serializeToString","XMLSerializer","defaultCanvasOptions","FileExtension","Ca","Da","sanitizeCanvasOptions","canvas","createElement","xml","image64","btoa","aaFactor","aaCanvas","OffscreenCanvas","getContext","canvasDrawingPromise","downloadURI","Ea","uri","link","download","href","body","click","removeChild","svg","png","jpeg","webp","browserUtils","downloadOptions","console","warn","toLowerCase","res","drawToCanvas"],"mappings":"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CrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAErB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAErB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IAEpB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAErB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,KACvB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IAEpB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAErB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAErB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAErB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,SChPpBC,EAAWC,MAAQ,IACnBC,KAAK,GACLC,KAAI,CAACC,EAAGvH,IAAMA,IAET,IAACwH,EAMRC,EAAAD,IAAyBA,EAAuB,IAJ/CA,EAAA7G,EAA4B,IAC5B6G,EAAA3G,EAA4B,IAC5B2G,EAAA1G,EAA4B,IAC5B0G,EAAAzG,EAA4B,IAEtB,IAACqB,EAURzB,EAAAyB,IAASA,EAAO,IARfA,EAAAsF,QAAkB,UAClB/G,EAAAgH,aAAuB,iBAIvB,KAAe,OACfhH,EAAAiH,MAAgB,UAChBC,QAAkB,UAMTC,MAAAA,EACTrI,WAAAA,CAAYqD,EAAa,EAAGiF,EAAuBP,EAAqB7G,GACpEjB,KAAKsI,QAAU,GACftI,KAAK6F,YAAc,EACnB7F,KAAKoD,WAAaA,EAClBpD,KAAKiF,kBAAoBjE,EAAkBqH,GAC3CrI,KAAKuI,WAAa,EALqD,CAO3EC,aAAAA,GACI,OAAOxI,KAAKoD,UADA,CAGhBqF,aAAAA,CAAcrF,GACVpD,KAAKoD,WAAaA,CADI,CAG1BsF,oBAAAA,GACI,OAAYzD,KAAAA,iBADO,CAGvB0D,oBAAAA,CAAqB1D,GACjBjF,KAAKiF,kBAAoBA,CADW,CAGxC2D,SAAAA,GACI5I,KAAKuI,WAAa,EADV,CAGZM,OAAAA,CAAQC,EAAQ9F,EAAON,EAAKqG,MACxB,GAAID,aAAJpF,EACI1D,KAAKuI,WAAWzH,KAAKgI,OAEpB,IAAsB,iBAAtBtI,EAsBD,aAAAA,EArBA,OAAQwC,GACJ,KAAKN,EAAKsF,QACNhI,KAAKuI,WAAWzH,KAAK,IAAIiD,EAAS+E,UAEjCpG,KAAAA,EAAKuF,aACNjI,KAAKuI,WAAWzH,KAAK,IAAI2C,EAAWqF,IAExC,MAAA,KAAKpG,EAAKqG,KACN/I,KAAKuI,WAAWzH,KAAK,IAAIuC,EAAWyF,EAAQV,EAAcY,mBAAmBC,UAEjF,MAAA,KAAKvG,EAAKyF,QACNnI,KAAKuI,WAAWzH,KAAK,IAAIuC,EAAWyF,EAAQV,EAAcY,mBAAdE,OAC5C,WACCxG,EAAKwF,MACNlI,KAAKuI,WAAWzH,KAAK,IAAIqI,EAAQL,EAAQV,EAAcY,mBAAdI,OAE7C,MAAA,QACI,KAAM,QAAUpG,EAIxB,CA1B0B,CAoClCiD,MAAAA,CAAOL,EAAKE,GACR,OAA8B,MAA1B9F,KAAKsI,QAAQ1C,GAAKE,IACX9F,KAAKsI,QAAQ1C,GAAKE,EAFhB,CAQjBuD,cAAAA,GACI,OAAOrJ,KAAK6F,WADC,CAGjByD,IAAAA,GACI,GAAsB,EAAlBtJ,KAAKoD,WAAgB,CACrB,IAAIA,EAAa,EACjB,KAAoB,GAAbA,EAAiBA,IAAc,CAClC,IAAMmG,EAAWlC,EAAAF,YAAQ/D,EAAsBpD,KAAEiF,qBACrC,IAAOuE,MACd,IAAIlJ,EAAI,EAAGA,EAAIN,KAAKuI,WAAWtI,OAAQK,IAAK,CAC7C,IAAA2C,EAAajD,KAAAuI,WAAejI,GAC5BJ,EAAOQ,IAAIuC,EAAKC,UAAW,GAC3BhD,EAAOQ,IAAIuC,EAAKf,YAAae,EAAK9C,gBAAgBiD,IAC7CI,EAAAA,MAAMtD,EAJkC,CAOjD,IADIuJ,EAAiB,EACZnJ,EAAI,EAAGA,EAAIiJ,EAAStJ,OAAQK,IACjCmJ,GAAkBF,EAASjJ,GAAG2G,eAElC,GAAI/G,EAAOC,mBAAsC,EAAjBsJ,EAC5B,KAd8B,CAiBtCzJ,KAAKoD,WAAaA,CAnBG,CAqBzBpD,KAAK0J,UAAS,EAAO1J,KAAK2J,qBAtBvB,CAwBPA,kBAAAA,GACI,IAAIC,EAAe,EACfC,EAAU,EACd,IAAK,IAAIvJ,EAAI,EAAO,EAAJA,EAAOA,GAAK,EAAG,CAC3BN,KAAK0J,UAAS,EAAMpJ,GACpB,IAAAqF,EAAkBd,EAAAY,aAAmBzF,OAC5B,GAALM,GAAUsJ,EAAejE,KACzBiE,EAAejE,EACfkE,EAAUvJ,EALa,CAQ/B,OAAOuJ,CAXU,CAarBH,QAAAA,CAASI,EAAMvE,GAEXvF,KAAK6F,YAAgC,EAAlB7F,KAAKoD,WAAiB,GACpCkF,KAAAA,QAAU,GACV,IAAA,IAAIhI,EAAI,EAAGA,EAAIN,KAAK6F,YAAavF,GAAK,EAAG,CAC1CN,KAAKsI,QAAQxH,KAAK,IACb,IAAA,IAAIwB,EAAI,EAAGA,EAAItC,KAAK6F,YAAavD,GAAK,EACvCtC,KAAKsI,QAAQhI,GAAGQ,KAAK,KAHiB,CAM9Cd,KAAK+J,0BAA0B,EAAG,GAC7BA,KAAAA,0BAA0B/J,KAAK6F,YAAc,EAAG,GAChDkE,KAAAA,0BAA0B,EAAG/J,KAAK6F,YAAc,QAChDmE,6BACLhK,KAAKiK,qBACAC,KAAAA,cAAcJ,EAAMvE,GACzB,GAAIvF,KAAKoD,YACLpD,KAAKmK,gBAAgBL,KAEf1B,aAAiBpI,KAAeoD,WAAWpD,KAAEiF,kBAAsBjF,iBACxEoK,KAAAA,QAAQnH,EAAMsC,EApBK,CAsB5B6E,OAAAA,CAAQnH,EAAMsC,GACV,IAAI8E,GAAO,EACPzE,EAAM5F,KAAK6F,YAAc,EACzByE,EAAW,EACXC,EAAY,EAChBC,EAAiB3F,EAAAS,YAAkBC,GAC9B,IAAA,IAAIO,EAAM9F,KAAK6F,YAAc,EAAS,EAANC,EAASA,GAAO,EAIjD,IAHW,GAAPA,KACAA,IAES,CACT,IAAK,IAAIlF,EAAI,EAAO,EAAJA,EAAOA,GAAK,EACxB,GAAkC,MAA9BZ,KAAKsI,QAAQ1C,GAAKE,EAAMlF,GAAY,CACpC,IAAIoF,GAAO,EACPuE,EAAYtH,EAAKhD,SACjB+F,EAA+C,IAAtC/C,EAAKsH,KAAeD,EAAY,IAEnCG,EAAW7E,EAAIE,EAAKlF,KAE1BoF,GAAQA,GAEPsC,KAAAA,QAAQ1C,GAAKE,EAAMlF,GAAKoF,IAC7BsE,GACiB,GAAbA,IACAC,GAAa,EACbD,EAAW,EAbqB,CAkBlC,GADV1E,GAAOyE,EACG,EAANzE,GAAW5F,KAAK6F,aAAeD,EAAK,CACpCA,GAAOyE,EACPA,GAAOA,EACP,KAHoC,CApB/B,CAVM,CAsC3BL,0BAAAA,GACI,IAAAU,EAAS7F,EAASC,mBAAmB9E,KAAKoD,YACrC,IAAA,IAAI9C,EAAI,EAAGA,EAAIoK,EAAIzK,OAAQK,GAAK,EACjC,IAAK,IAAIgC,EAAI,EAAGA,EAAIoI,EAAIzK,OAAQqC,GAAK,EAAG,CACpC,MAASoI,OACAA,KACT,GAA8B,MAA1B1K,KAAKsI,QAAQ1C,GAAKE,GAGtB,IAAK,IAAI/E,GAAK,EAAQ,GAALA,EAAQA,GAAK,EAC1B,IAAK,IAAIH,GAAK,EAAQ,GAALA,EAAQA,GAAK,EAEtBZ,KAAKsI,QAAQ1C,EAAM7E,GAAG+E,EAAMlF,IADtB,GAANG,GAAgB,GAALA,IAAgB,GAANH,GAAgB,GAALA,GAAgB,GAALG,GAAe,GAALH,CAR7B,CAHnB,CAsB7BmJ,yBAAAA,CAA0BnE,EAAKE,GAC3B,IAAK,IAAI/E,GAAK,EAAQ,GAALA,EAAQA,GAAK,EAC1B,IAAK,IAAIH,GAAK,EAAQ,GAALA,EAAQA,GAAK,GACV,GAAZgF,EAAM7E,GAAWf,KAAK6F,aAAeD,EAAM7E,IAAiB,GAAZ+E,EAAMlF,GAAWZ,KAAK6F,aAAeC,EAAMlF,IAM3FZ,KAAKsI,QAAQ1C,EAAM7E,GAAG+E,EAAMlF,GAH3B,GAAKG,GAAU,GAALA,IAAgB,GAALH,GAAe,GAALA,IAC/B,GAAKA,GAAU,GAALA,IAAgB,GAALG,GAAe,GAALA,IAC/B,GAAKA,GAAU,GAALA,GAAU,GAAKH,GAAU,GAALA,EARX,CAiBpCqJ,kBAAAA,GACI,IAAK,IAAIlJ,EAAI,EAAGA,EAAIf,KAAK6F,YAAc,EAAG9E,GAAK,EACjB,MAAtBf,KAAKsI,QAAQvH,GAAG,KAGpBf,KAAKsI,QAAQvH,GAAG,GAAc,GAATA,EAAI,GAEpBH,IAAAA,EAAI,EAAGA,EAAIZ,KAAK6F,YAAc,EAAGjF,GAAK,EACjB,MAAtBZ,KAAKsI,QAAQ,GAAG1H,KAGpBZ,KAAKsI,QAAQ,GAAG1H,GAAc,GAATA,EAAI,EAXZ,CAcrBuJ,eAAAA,CAAgBL,GACZ,IAAAa,EAAU9F,EAAS8B,iBAAiB3G,KAAKoD,YACzC,IAAK,IAAI9C,EAAI,EAAO,GAAJA,EAAQA,GAAK,EACzBN,KAAKsI,WAAWhI,EAAI,IAAKA,EAAI,EAAKN,KAAK6F,YAAc,EAAI,IAAMiE,GAA6B,IAAnBa,GAAQrK,EAAK,GAEjFA,IAAAA,EAAI,EAAO,GAAJA,EAAQA,GAAK,EACzBN,KAAKsI,QAAShI,EAAI,EAAKN,KAAK6F,YAAc,EAAI,MAAMvF,EAAI,KAAOwJ,GAA6B,IAAnBa,GAAQrK,EAAK,EANxE,CAStB4J,aAAAA,CAAcJ,EAAMvE,GAEhBoF,EAAa9F,EAAAyB,eADHtG,KAAIiF,mBAA0B,EAAKM,GAGxC,IAAA,IAAIjF,EAAI,EAAO,GAAJA,EAAQA,GAAK,EAAG,CAC5B,IAAMkC,GAAMsH,GAAyB,IAAhBa,KAAW,GAChC,EAAIrK,EACAN,KAAKsI,QAAQhI,GAAG,GAAKkC,EAEZ,EAAJlC,EACLN,KAAKsI,QAAQhI,EAAI,GAAG,GAAKkC,EAGzBxC,KAAKsI,QAAQtI,KAAK6F,YAAc,GAAKvF,GAAG,GAAKkC,CATrB,CAahC,IAASlC,EAAI,EAAO,GAAJA,EAAQA,GAAK,EACnBkC,GAAMsH,GAAyB,IAAhBa,KAAW,GACxB,EAAJrK,EACAN,KAAKsI,QAAQ,GAAGtI,KAAK6F,YAAcvF,EAAI,GAAKkC,EAEnC,EAAJlC,EACLN,KAAKsI,QAAQ,GAAG,GAAKhI,EAAI,EAAI,GAAKkC,EAGlCxC,KAAKsI,QAAQ,GAAG,GAAKhI,EAAI,GAAKkC,EAIjC8F,KAAAA,QAAQtI,KAAK6F,YAAc,GAAG,IAAMiE,CA9BZ,CAgC1Bc,iBAAAA,CAAWxH,EAAY6B,EAAmB4F,GAC7CtB,EAAclC,EAAUF,YAAY/D,EAAW6B,SACnC,IAAOuE,MACd,IAAIlJ,EAAI,EAAGA,EAAIuK,EAAU5K,OAAQK,GAAK,EAAG,CAC1C,MAAUuK,OACHnK,IAAIuC,EAAKC,UAAW,GACpBxC,EAAAA,IAAIuC,EAAKf,YAAae,EAAK9C,gBAAgBiD,IAClDH,EAAKO,MAAMtD,EAJ+B,KAO1CuJ,EAAiB,EACZnJ,EAAI,EAAGA,EAAIiJ,EAAStJ,OAAQK,GAAK,EACtCmJ,GAAkBF,EAASjJ,GAAG2G,eAElC,GAAI/G,EAAOC,kBAAqC,EAAjBsJ,EAC3B,KAAM,0BAA4BvJ,EAAOC,kBAAoB,IAAuB,EAAjBsJ,EAAqB,IAO5F,IAJIvJ,EAAOC,kBAAoB,GAAsB,EAAjBsJ,GAChCvJ,EAAOQ,IAAI,EAAG,GAGqB,GAAhCR,EAAOC,kBAAoB,GAC9BD,EAAOW,QAAO,GAGlB,OACQX,EAAOC,mBAAsC,EAAjBsJ,KAGhCvJ,EAAOQ,IAAI0H,EAAc0C,KAAM,KAC3B5K,EAAOC,mBAAsC,EAAjBsJ,KAGhCvJ,EAAOQ,IAAI0H,EAAc2C,KAAM,GAEnC,OAAO3C,EAAc4C,YAAY9K,EAAQqJ,EApCe,CAsCrDyB,kBAAWA,CAAC9K,EAAQqJ,GAUvB0B,SAAuBrK,EAACoB,GACpB,IAAMxB,EAAI,GACL,IAAA,IAAIF,EAAI,EAAGA,EAAI0B,EAAK1B,GAAK,EAC1BE,EAAEM,KAAK,GAEJN,OAAAA,CALkB,CAT7B,IAAIuB,EAAS,EACTmJ,EAAa,EACjB,IAAIC,EAAa,EACXC,IAAAA,EAAS,GACf,IAAMC,EAAS,GACV,IAAA,IAAItK,EAAI,EAAGA,EAAIwI,EAAStJ,OAAQc,GAAK,EACtCqK,EAAOtK,KAAK,IACZuK,EAAOvK,KAAK,IASPC,IAAAA,EAAI,EAAGA,EAAIwI,EAAStJ,OAAQc,GAAK,EAAG,CACzC,IAAAuK,EAAa/B,EAAWxI,GAAEkG,eACpBsE,EAAUhC,EAAAxI,GAAUmG,gBAAoBoE,EAC9CJ,EAAa9E,KAAKoF,IAAIN,EAAYI,GAClCH,EAAa/E,KAAKoF,IAAIL,EAAYI,GAClCH,EAAOrK,GAAKkK,EAAeK,GACtB,IAAA,IAAIhL,EAAI,EAAGA,EAAI8K,EAAOrK,GAAGd,OAAQK,GAAK,EACvC8K,EAAOrK,GAAGT,GAAK,IAAOJ,EAAOuL,YAAYnL,EAAIyB,OAEjDA,GAAUuJ,EACVI,EAAe7G,EAAAO,0BAAgCmG,GAE/CI,EAAgBnJ,MADc4I,KAAUM,cAAuB,GAC/ClJ,IAAWkJ,GAC3BE,EAAO7K,GAAKkK,EAAeS,EAAOxJ,YAAc,GACvC5B,EAAI,EAAGA,EAAI+K,EAAOtK,GAAGd,OAAQK,GAAK,IACzBA,EAAIqL,cAAsBN,KAAWpL,OACnDoL,EAAOtK,GAAGT,GAAiB,GAAZuL,EAAgBF,EAAQ1J,MAAM4J,GAAY,CAhBpB,CAoB7C,IADIC,EAAiB,EACZxL,EAAI,EAAGA,EAAIiJ,EAAStJ,OAAQK,GAAK,EACtCwL,GAAkBvC,EAASjJ,GAAG4G,gBAIlC,MAFU+D,KACNxK,EAAQ,EACHH,EAAI,EAAGA,EAAI4K,EAAY5K,GAAK,EACjC,IAASS,EAAI,EAAGA,EAAIwI,EAAStJ,OAAQc,GAAK,EAClCT,EAAI8K,EAAOrK,GAAGd,SACdgD,EAAKxC,GAAS2K,EAAOrK,GAAGT,GACxBG,GAAS,GAIrB,IAASH,EAAI,EAAGA,EAAI6K,EAAY7K,GAAK,EACjC,IAASS,EAAI,EAAGA,EAAIwI,EAAStJ,OAAQc,GAAK,EAClCT,EAAI+K,EAAOtK,GAAGd,SACdgD,EAAKxC,GAAS4K,EAAOtK,GAAGT,GACxBG,GAAS,GAIdwC,OAAAA,CA1D0B,EA6DzCmF,EAAc0C,KAAO,IACrB1C,EAAc2C,KAAO,GACrB3C,EAAcY,mBAAqB,CAC/BC,QAASA,SAAUtF,GACf,IAAMoI,EAAQ,OACT,IAAIzL,EAAI,EAAGA,EAAIqD,EAAE1D,OAAQK,GAAK,EAAG,CAClC,IAAAM,EAAU+C,EAAAG,WAAYxD,GAChBQ,EAAAA,KAAS,IAAJF,EAFuB,CAItC,OAAOmL,CANW,GC/YpBC,IAAAA,OACJC,GAAwB,2BAAaC,QAAaD,GASpCE,SAAAA,EAAUC,KAA0BC,GAClD,IAAKA,EAAQpM,OAAQ,eACToM,UACGC,YAAAA,IAAXC,GAAyBP,EAASI,IAAYJ,EAASO,IAC3DH,EAAS,IAAKA,UACPI,KAAKD,GAAQE,SAASC,IAC3B,MAAiBN,OACAG,KAEPL,MAAAA,QAAQS,IAAgBjF,MAAMwE,QAAQU,GAC9CR,EAAOM,GAAOE,EACLZ,EAASW,IAAgBX,EAASY,GAC3CR,EAAOM,GAAOP,EAAUU,OAAOC,OAAO,CAAd,EAAkBH,GAAcC,GAExDR,EAAOM,GAAOE,OAIDR,KAAWC,IAd5BD,CAJ0E,KCVhEW,EAAAC,EAAAD,IAAAA,EAGX,CAAA,GAwBeE,SAAAA,EAAiBC,GAG3B,OAFa,IAAQA,IAERC,aAAeC,EAAYD,WAAWlN,OACrD,KAAM,6CAcR,OAVEmN,EAAYC,SADVD,EAAYC,SACSC,OAAOF,EAAYC,UAEnB,EAGzBD,EAAYD,WAAaC,EAAYD,WAAWvF,KAAK2F,IAAkD,IAClGA,EACHxL,OAAQuL,OAAOC,EAAUxL,YAfsBvB,CAAA,CA1BjDwM,EAAAQ,OAAA,WACAC,OAAA,aCEUC,EAAAtM,EAAAsM,IAAAA,EAaX,CAbW,GACVtM,EAAAuM,IAAA,MACAD,EAAAE,UAAA,aACAxM,EAAAyM,QAAA,UACAzM,EAAA0M,aAAA,gBACAJ,EAAAK,aAAA,gBACA3M,EAAA4M,eAAA,kBACAN,EAAAO,OAAA,SACAP,EAAAQ,cAAA,iBACA9M,EAAA+M,OAAA,SACAT,EAAAU,YAAA,eACAhN,EAAAiN,WAAA,cACAX,EAAAY,QAAA,UAGUC,IAAAA,EAAAC,EAAAD,IAAAA,EAQX,CAAA,GAPCA,EAAAZ,IAAA,MACAa,EAAAL,OAAA,SACAI,EAAAE,MAAA,QACAF,EAAAT,aAAA,gBACAU,EAAAP,OAAA,SACAM,EAAAG,SAAA,WACAH,EAAAI,QAAA,UAGUC,IAAAA,EAAAC,EAAAD,IAAAA,EAOX,CAPW,KACVjB,IAAA,MACAkB,EAAAV,OAAA,SACAS,EAAAd,aAAA,gBACAe,EAAAZ,OAAA,SACAY,EAAAH,SAAA,WACAE,EAAAD,QAAA,UAGUG,IAAAA,EAAAC,EAAAD,IAAAA,EAGX,CAAA,GAFCA,EAAAX,OAAA,SACAY,EAAAC,OAAA,SAGF,IAAYC,EAAAC,EAAAD,IAAAA,EASX,CATW,GAIVC,EAAAC,OAAA,SAIAF,EAAAG,WAAA,aA+HKC,IAAAA,EAAgC,CACrCC,cAAUhD,EACViD,MAAOT,EAAUX,OACjBqB,WAAOlD,EACPmD,YAAQnD,EACRrJ,KAAM,GACNyM,UAAW,CACTtM,WAAYqE,EAAW,GACvBzE,UAAMsJ,EACNjE,qBAAsBP,EAAqB1G,GAE7CuO,aAAc,CACZ3M,KAAMiM,EAAUE,OAChBS,UAAW,GACXC,iBAAavD,EACbwD,OAAQ,EACRnI,KAAM,CACJoI,MAAO,wBAGXC,YAAa,CACXC,KAAMvC,EAAQS,OACd4B,MAAO,OACPG,KAAM,KAIMC,SAAAA,EAAgBC,GAuD9B,SAtDgB,IAAQA,IAEbT,aAAe,IACrBU,EAAWV,aACdC,UAAWxJ,KAAKkK,IAAI,EAAGhD,OAAO+C,EAAWV,aAAaC,aAAe,EACrEE,OAAQxC,OAAO+C,EAAWV,aAAaG,QACvCnI,KAAM,IACD0I,EAAWV,aAAahI,OAI3B0I,EAAWV,aAAa3M,MAAQiM,EAAUG,aAAYiB,EAAWV,aAAaG,OAAS,GACvFO,EAAWV,aAAahI,KAAKuF,WAC/BmD,EAAWV,aAAahI,KAAKuF,SAAWD,EAAiBoD,EAAWV,aAAahI,KAAKuF,WAGxFmD,EAAWL,YAAc,IACpBK,EAAWL,aAEZK,EAAWL,YAAY9C,WACzBmD,EAAWL,YAAY9C,SAAWD,EAAiBoD,EAAWL,YAAY9C,aAGjE8C,YAAYE,KAAO9J,KAAKmK,MAAMnK,KAAKoF,IAAI,EAAG6E,EAAWL,YAAYE,OAAS,IAEtEM,EAAAA,uBACbH,EAAWG,qBAAuB,IAC7BH,EAAWG,sBAEZH,EAAWG,qBAAqBtD,WAClCmD,EAAWG,qBAAqBtD,SAAWD,EAAiBoD,EAAWG,qBAAqBtD,YAIjFuD,EAAAA,oBACbJ,EAAWI,kBAAoB,IAC1BJ,EAAWI,mBAEZJ,EAAWI,kBAAkBvD,WAC/BmD,EAAWI,kBAAkBvD,SAAWD,EAAiBoD,EAAWI,kBAAkBvD,YAItFmD,EAAWK,oBACbL,EAAWK,kBAAoB,IAC1BL,EAAWK,mBAEZL,EAAWK,kBAAkBxD,WAC/BmD,EAAWK,kBAAkBxD,SAAWD,EAAiBoD,EAAWK,kBAAkBxD,cAI1EoC,WAAUe,EAAWf,SAAWA,UArDF9O,CAAA,CC3MnC,IAAAmQ,EAA0B,CACrC,CAAC7I,EAAqB7G,GAAI,IAC1B,CAAC6G,EAAqB3G,GAAI,IAC1B,CAAC2G,EAAqB1G,GAAI,IAC1B,CAAC0G,EAAqBzG,GAAI,ICN5B,IAAMuP,EAAK,SAELC,SAAmBC,EAACC,GACxB,OAAaC,EAAAA,QAAQ,GAAGC,QAAQL,EAAI,GADC,UAIhBM,EAACC,KAAkCC,GACxD,OACGC,EAAAA,QAAO,CAACC,EAAGpQ,EAAGZ,KACb,IAAIiR,EAAa,GAGjB,OAFAlP,IAAOkP,EAAIH,EAAO9Q,EAAI,IACtB,iBAAWiR,IAAeA,EAAIV,EAAUU,IACjC,GAAGD,IAAIC,IAAIrQ,GAAX,GACN,IACFsQ,OACAP,QAAQ,eAAgB,IAT8C,SCCrE,WAAAQ,GACF,OAAYC,KAAAA,QADH,CAIX3R,WAAAA,CACmBkQ,EACAX,GADAtP,KAAIiQ,KAAJA,EACAjQ,KAAQsP,SAARA,CAAkB,CAGrCqC,IAAAA,CAAKC,GAEH,IAAIC,EAEJ,OAHU7R,KAAOiQ,MAIf,KAAK1B,EAAcJ,OACjB0D,EAAe7R,KAAK8R,WACpB,WACGvD,EAAcE,MACjBoD,EAAe7R,KAAK+R,UACpB,WACGxD,EAAcT,aACjB+D,EAAe7R,KAAKgS,kBAEjBzD,KAAAA,EAAcN,OACjB4D,EAAe7R,KAAKiS,iBAEjB1D,KAAAA,EAAcI,QACjBkD,EAAe7R,KAAKkS,YAEtB,MAAA,KAAK3D,EAAcG,SACjBmD,EAAe7R,KAAKmS,aACpB,MAGAN,QAAAA,EAAe7R,KAAKoS,QAGxBP,EAAaQ,KAAKrS,KAAM4R,EA5BP,CA+BXU,YAAAA,EAAeC,EAAAA,EAAG1Q,EAAAA,EAAGqO,KAAAA,EAAM7C,SAAAA,EAAW,EAAGsE,KAAAA,IACpCY,KAAQ,EACR1Q,KAAQ,EAEnB8P,IACKD,KAAAA,UAAUc,aAAa,YAAa,UAAU3B,EAAW,IAAMxD,EAAYjH,KAAKqM,OAAOC,KAAMC,KAL3B,CAQjEC,QAAAA,CAAShB,GACf,IAAM1B,KAAAA,EAAMqC,EAAAA,EAAG1Q,EAAAA,GAAQ+P,EAElBU,KAAAA,aAAa,IACbV,EACHD,KAAM,KACJ3R,KAAK0R,SAAW1R,KAAKsP,SAASuD,gBAAgB,6BAA8B,UACvEnB,KAAAA,SAASc,aAAa,KAAM3B,EAAU0B,EAAIrC,EAAO,IACtDlQ,KAAK0R,SAASc,aAAa,KAAM3B,EAAUhP,EAAIqO,EAAO,IACjDwB,KAAAA,SAASc,aAAa,IAAK3B,EAAUX,EAAO,GAAjD,GAToC,CAclC4C,WAAAA,CAAYlB,GAClB,IAAM1B,KAAAA,EAAMqC,EAAAA,EAAG1Q,EAAAA,GAAQ+P,EAElBU,KAAAA,aAAa,IACbV,EACHD,KAAM,KACJ3R,KAAK0R,SAAW1R,KAAKsP,SAASuD,gBAAgB,6BAA8B,QACvEnB,KAAAA,SAASc,aAAa,IAAK3B,EAAU0B,IAC1CvS,KAAK0R,SAASc,aAAa,IAAK3B,EAAUhP,IAC1C7B,KAAK0R,SAASc,aAAa,QAAS3B,EAAUX,SACzCwB,SAASc,aAAa,SAAU3B,EAAUX,GAA/C,GAVuC,CAerC6C,UAAAA,CAAWnB,GACjB,IAAM1B,KAAAA,EAAMqC,EAAAA,EAAG1Q,EAAAA,GAAQ+P,OAElBF,SAAW1R,KAAKsP,SAASuD,gBAAgB,6BAA8B,QAiH5E,IAAIG,GAAO,EACP1S,EAAI,EACHoR,KAAAA,SAASc,aACZ,IAnHWS,CACX,IACA,EACA,SACA,IACA,EACA,UACC,SACD,UACC,SACD,SACA,KACC,SACD,SACC,SACD,SACA,KACC,MACD,UACC,SACD,UACC,SACD,SACA,IACA,SACA,SACA,SACA,SACA,SACA,SACA,IACA,GACA,SACA,IACA,SACA,SACA,IACA,SACA,SACA,SACA,SACA,OACA,SACA,IACA,SACA,SACA,SACA,SACA,SACA,SACA,IACA,SACA,SACA,SACA,SACA,IACA,EACA,SACA,EACA,SACA,IACA,GACC,SACD,UACC,SACD,QACC,SACD,IACA,UACC,OACD,UACC,OACD,IACA,SACA,EACA,SACA,SACA,OACA,SACA,IACA,SACA,SACA,GACA,SACA,IACA,UACC,SACD,UACC,SACD,UACC,MACD,IACA,UACC,SACD,UACC,SACD,QACC,SACD,IACA,SACA,EACA,SACA,SACA,SACA,OACA,IACA,EACA,SACA,EACA,SACA,KAOGrL,KAAK1G,GACY,iBAAhBgS,GAGShS,EAFH,EACJ8R,EAAO9R,EAAEiS,eAAiBjS,EACnBA,IAETZ,IACA4S,GAAQhD,EACR7N,IACEnB,GAAc,GAATZ,EAAI,EAASiS,EAAI1Q,GAEjBgP,EAAU3P,MAElBkS,KAAK,KAtIgC,CA0IpCC,YAAAA,CAAazB,GACnB,IAAM1B,KAAAA,EAAMqC,EAAAA,EAAG1Q,EAAAA,GAAQ+P,EAEvB5R,KAAKsS,aAAa,IACbV,EACHD,KAAM,KACJ3R,KAAK0R,SAAW1R,KAAKsP,SAASuD,gBAAgB,6BAA8B,QAC5E7S,KAAK0R,SAASc,aAAa,IAAK3B,EAAU0B,IACrCb,KAAAA,SAASc,aAAa,IAAK3B,EAAUhP,SACrC6P,SAASc,aAAa,QAAS3B,EAAUX,IACzCwB,KAAAA,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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,26]}