{"version":3,"file":"convert-to-jcamp.esm.js","sources":["../lib/utils/addInfoData.js","../node_modules/is-any-array/lib/index.js","../node_modules/ml-spectra-processing/lib/x/getOutputArray.js","../node_modules/ml-spectra-processing/lib/x/xCheck.js","../node_modules/ml-spectra-processing/lib/x/xDivide.js","../node_modules/ml-spectra-processing/lib/utils/isLittleEndian.js","../node_modules/ml-spectra-processing/lib/x/xMinMaxValues.js","../node_modules/ml-spectra-processing/lib/x/xMultiply.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCheck.js","../node_modules/ml-spectra-processing/lib/matrix/matrixMinMaxZ.js","../lib/utils/checkMatrix.js","../lib/utils/checkNumberOrArray.js","../lib/utils/getExtremeValues.js","../lib/creatorNtuples.js","../lib/utils/getFactorNumber.js","../lib/utils/getBestFactor.js","../lib/utils/getNumber.js","../lib/utils/peakTableCreator.js","../lib/utils/rescaleAndEnsureInteger.js","../lib/utils/vectorEncoder.js","../lib/utils/xyDataCreator.js","../lib/fromJSON.js","../lib/fromVariables.js","../lib/getOneIfArray.js","../lib/from1DNMRVariables.js","../lib/utils/getBestFactorMatrix.js","../lib/from2DNMRVariables.js"],"sourcesContent":["export const addInfoData = (data, options = {}) => {\n    const { keys = Object.keys(data), prefix = '##$' } = options;\n    let header = '';\n    for (const key of keys) {\n        header +=\n            typeof data[key] === 'object'\n                ? `${prefix}${key}=${JSON.stringify(data[key])}\\n`\n                : `${prefix}${key}=${data[key]}\\n`;\n    }\n    return header;\n};\n//# sourceMappingURL=addInfoData.js.map","// eslint-disable-next-line @typescript-eslint/unbound-method\nconst toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array, except those that contain bigint values).\n * @param value - Object to check.\n * @returns True if the object is an array or a typed array.\n */\nexport function isAnyArray(value) {\n    const tag = toString.call(value);\n    return tag.endsWith('Array]') && !tag.includes('Big');\n}\n//# sourceMappingURL=index.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * This function\n * @param output - undefined or a new array\n * @param length - length of the output array\n * @returns\n */\nexport function getOutputArray(output, length) {\n    if (output !== undefined) {\n        if (!isAnyArray(output)) {\n            throw new TypeError('output option must be an array if specified');\n        }\n        if (output.length !== length) {\n            throw new TypeError('the output array does not have the correct length');\n        }\n        return output;\n    }\n    else {\n        return new Float64Array(length);\n    }\n}\n//# sourceMappingURL=getOutputArray.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Checks if the input is a non-empty array of numbers.\n * Only checks the first element.\n * @param input - array to check.\n * @param options - additional checks.\n */\nexport function xCheck(input, options = {}) {\n    const { minLength = 1 } = options;\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    if (typeof input[0] !== 'number') {\n        throw new TypeError('input must contain numbers');\n    }\n    if (input.length < minLength) {\n        throw new Error(`input must have a length of at least ${minLength}`);\n    }\n}\n//# sourceMappingURL=xCheck.js.map","import { isAnyArray } from 'is-any-array';\nimport { getOutputArray } from \"./getOutputArray.js\";\n/**\n * This function divide the first array by the second array or a constant value to each element of the first array\n * @param array1 - first array\n * @param array2 - second array or number\n * @param options - options\n */\nexport function xDivide(array1, array2, options = {}) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new RangeError('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = getOutputArray(options.output, array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] / constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] / array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xDivide.js.map","const LITTLE_ENDIAN = new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n/**\n * Check whether the host stores multi-byte values least significant byte first.\n * Needed whenever a typed array is reinterpreted through another view, because\n * the position of the words of a value then depends on the platform.\n * @returns true on a little-endian host.\n */\nexport function isLittleEndian() {\n    return LITTLE_ENDIAN;\n}\n//# sourceMappingURL=isLittleEndian.js.map","import { xCheck } from \"./xCheck.js\";\n/**\n * Return min and max values of an array.\n * @param array - array of number\n * @returns object with 2 properties, min and max.\n */\nexport function xMinMaxValues(array) {\n    xCheck(array);\n    let min = array[0];\n    let max = array[0];\n    for (let i = 1; i < array.length; i++) {\n        const value = array[i];\n        if (value < min)\n            min = value;\n        else if (value > max)\n            max = value;\n    }\n    return { min, max };\n}\n//# sourceMappingURL=xMinMaxValues.js.map","import { isAnyArray } from 'is-any-array';\nimport { getOutputArray } from \"./getOutputArray.js\";\n/**\n * This function xMultiply the first array by the second array or a constant value to each element of the first array\n * @param array1 - first array\n * @param array2 - second array\n * @param options - options\n */\nexport function xMultiply(array1, array2, options = {}) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new Error('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = getOutputArray(options.output, array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] * constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] * array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xMultiply.js.map","export function matrixCheck(data) {\n    if (data.length === 0 || data[0].length === 0) {\n        throw new RangeError('matrix must contain data');\n    }\n    const firstLength = data[0].length;\n    for (let i = 1; i < data.length; i++) {\n        if (data[i].length !== firstLength) {\n            throw new RangeError('all rows must has the same length');\n        }\n    }\n}\n//# sourceMappingURL=matrixCheck.js.map","import { matrixCheck } from \"./matrixCheck.js\";\n/**\n * Get min and max Z.\n * @param matrix - matrix [rows][cols].\n */\nexport function matrixMinMaxZ(matrix) {\n    matrixCheck(matrix);\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    let min = matrix[0][0];\n    let max = matrix[0][0];\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            if (matrix[row][column] < min)\n                min = matrix[row][column];\n            if (matrix[row][column] > max)\n                max = matrix[row][column];\n        }\n    }\n    return { min, max };\n}\n//# sourceMappingURL=matrixMinMaxZ.js.map","import { isAnyArray } from 'is-any-array';\nexport function checkMatrix(data) {\n    if (!isAnyArray(data) || !isAnyArray(data[0])) {\n        throw new Error(`2D data should be a matrix`);\n    }\n}\n//# sourceMappingURL=checkMatrix.js.map","import { isAnyArray } from 'is-any-array';\nexport function checkNumberOrArray(data) {\n    if (!isAnyArray(data) || isAnyArray(data[0])) {\n        throw new Error(`x and y data should be an array of numbers`);\n    }\n}\n//# sourceMappingURL=checkNumberOrArray.js.map","import { isAnyArray } from 'is-any-array';\nimport { matrixMinMaxZ } from 'ml-spectra-processing/matrix';\nimport { xMinMaxValues } from 'ml-spectra-processing/x';\nimport { checkMatrix } from \"./checkMatrix.js\";\nimport { checkNumberOrArray } from \"./checkNumberOrArray.js\";\nexport function getExtremeValues(data) {\n    if (isAnyArray(data[0])) {\n        checkMatrix(data);\n        const firstRow = data[0];\n        return {\n            firstLast: {\n                first: firstRow[0],\n                last: data.at(-1)[firstRow.length - 1],\n            },\n            minMax: matrixMinMaxZ(data),\n        };\n    }\n    checkNumberOrArray(data);\n    return {\n        firstLast: {\n            first: data[0],\n            last: data.at(-1),\n        },\n        minMax: xMinMaxValues(data),\n    };\n}\n//# sourceMappingURL=getExtremeValues.js.map","import { addInfoData } from \"./utils/addInfoData.js\";\nimport { getExtremeValues } from \"./utils/getExtremeValues.js\";\n/**\n * Parse from a xyxy data array\n * @param variables - Variables to convert to jcamp\n * @param [options={}] - options that allows to add meta data in the jcamp\n * @returns JCAMP-DX text file corresponding to the variables\n */\nexport default function creatorNtuples(variables, options) {\n    const { meta = {}, info = {} } = options;\n    const { title = '', owner = '', origin = '', dataType = '', ...resultInfo } = info;\n    const symbol = [];\n    const variableName = [];\n    const variableType = [];\n    const variableDim = [];\n    const units = [];\n    const first = [];\n    const last = [];\n    const min = [];\n    const max = [];\n    const keys = Object.keys(variables);\n    for (let i = 0; i < keys.length; i++) {\n        const key = keys[i];\n        const variable = variables[key];\n        if (!variable)\n            continue;\n        const name = variable?.label.replace(/ *\\[.*/, '');\n        const unit = variable?.label.replace(/.*\\[(?<units>.*)\\].*/, '$<units>');\n        const { firstLast, minMax } = getExtremeValues(variable.data);\n        symbol.push(variable.symbol || key);\n        variableName.push(name || key);\n        variableDim.push(variable.data.length);\n        first.push(firstLast.first);\n        last.push(firstLast.last);\n        max.push(minMax.max);\n        min.push(minMax.min);\n        if (variable.isDependent !== undefined) {\n            variableType.push(variable.isDependent ? 'DEPENDENT' : 'INDEPENDENT');\n        }\n        else {\n            variableType.push(variable.isDependent !== undefined\n                ? !variable.isDependent\n                : i === 0\n                    ? 'INDEPENDENT'\n                    : 'DEPENDENT');\n        }\n        units.push(variable.units || unit || '');\n    }\n    let header = `##TITLE=${title}\n##JCAMP-DX=6.00\n##DATA TYPE=${dataType}\n##DATA CLASS= NTUPLES\n##ORIGIN=${origin}\n##OWNER=${owner}\\n`;\n    header += addInfoData(resultInfo, { prefix: '##' });\n    header += addInfoData(meta);\n    header += `##NTUPLES= ${dataType}\n##VAR_NAME=  ${variableName.join(',')}\n##SYMBOL=    ${symbol.join(',')}\n##VAR_TYPE=  ${variableType.join(',')}\n##VAR_DIM=   ${variableDim.join(',')}\n##UNITS=     ${units.join(',')}\n##FIRST=     ${first.join(',')}\n##LAST=      ${last.join(',')}\n##MIN=       ${min.join(',')}\n##MAX=       ${max.join(',')}\n##PAGE= N=1\\n`;\n    header += `##DATA TABLE= (${symbol.join('')}..${symbol.join('')}), PEAKS\\n`;\n    for (let i = 0; i < variables.x.data.length; i++) {\n        const point = [];\n        for (const key of keys) {\n            const variable = variables[key];\n            if (!variable)\n                continue;\n            point.push(variable.data[i]);\n        }\n        header += `${point.join('\\t')}\\n`;\n    }\n    header += `##END NTUPLES= ${dataType}\\n`;\n    header += '##END=\\n##END=';\n    return header;\n}\n//# sourceMappingURL=creatorNtuples.js.map","export function getFactorNumber(minMax, maxValue = 2 ** 31 - 1) {\n    let factor;\n    if (minMax.min < 0) {\n        if (minMax.max > 0) {\n            factor = Math.max(-minMax.min, minMax.max) / maxValue;\n        }\n        else {\n            factor = -minMax.min / maxValue;\n        }\n    }\n    else {\n        factor = minMax.max / maxValue;\n    }\n    return factor;\n}\n//# sourceMappingURL=getFactorNumber.js.map","import { xMinMaxValues } from 'ml-spectra-processing/x';\nimport { getFactorNumber } from \"./getFactorNumber.js\";\nexport function getBestFactor(array, options = {}) {\n    const { maxValue, factor, minMax } = options;\n    if (factor !== undefined) {\n        return factor;\n    }\n    // is there non integer number ?\n    let isOnlyInteger = true;\n    for (const y of array) {\n        if (Math.round(y) !== y) {\n            isOnlyInteger = false;\n            break;\n        }\n    }\n    if (isOnlyInteger) {\n        return 1;\n    }\n    // we need to rescale the values\n    // need to find the max and min values\n    const extremeValues = minMax || xMinMaxValues(array);\n    return getFactorNumber(extremeValues, maxValue);\n}\n//# sourceMappingURL=getBestFactor.js.map","/**\n * Reconvert number to original value\n * @param number - Number used for computation\n * @param factor - Multiplying factor\n * @returns Original value\n */\nexport function getNumber(number, factor) {\n    if (factor !== 1)\n        number /= factor;\n    const rounded = Math.round(number);\n    if (rounded !== number && Math.abs(rounded - number) <= Number.EPSILON) {\n        return rounded;\n    }\n    return number;\n}\n//# sourceMappingURL=getNumber.js.map","import { getNumber } from \"./getNumber.js\";\nexport function peakTableCreator(data, options = {}) {\n    const { xFactor = 1, yFactor = 1 } = options.info || {};\n    let firstX = Infinity;\n    let lastX = -Infinity;\n    let firstY = Infinity;\n    let lastY = -Infinity;\n    const lines = [];\n    for (let i = 0; i < data.x.length; i++) {\n        const x = data.x[i];\n        const y = data.y[i];\n        if (firstX > x) {\n            firstX = x;\n        }\n        if (lastX < x) {\n            lastX = x;\n        }\n        if (firstY > y) {\n            firstY = y;\n        }\n        if (lastY < y) {\n            lastY = y;\n        }\n    }\n    lines.push(`##FIRSTX=${firstX}`, `##LASTX=${lastX}`, `##FIRSTY=${firstY}`, `##LASTY=${lastY}`, `##XFACTOR=${xFactor}`, `##YFACTOR=${yFactor}`, '##PEAK TABLE=(XY..XY)');\n    for (let i = 0; i < data.x.length; i++) {\n        lines.push(`${getNumber(data.x[i], xFactor)} ${getNumber(data.y[i], yFactor)}`);\n    }\n    return lines;\n}\n//# sourceMappingURL=peakTableCreator.js.map","import { xDivide } from 'ml-spectra-processing/x';\nexport function rescaleAndEnsureInteger(data, factor = 1) {\n    if (factor === 1)\n        return data.map((value) => Math.round(value));\n    return xDivide(data, factor).map((value) => Math.round(value));\n}\n//# sourceMappingURL=rescaleAndEnsureInteger.js.map","/**\n * class encodes a integer vector as a String in order to store it in a text file.\n * The algorithms used to encode the data are describe in:\n *            https://www.iupac.org/publications/pac/pdf/2001/pdf/7311x1765.pdf\n */\nconst newLine = '\\n';\nconst pseudoDigits = [\n    ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n    ['@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'],\n    ['@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'],\n    ['%', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R'],\n    ['%', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r'],\n    [' ', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 's'],\n];\nconst SQZ_P = 1;\nconst SQZ_N = 2;\nconst DIF_P = 3;\nconst DIF_N = 4;\nconst DUP = 5;\nconst maxLinelength = 100;\n/**\n * This function encodes the given vector. The xyEncoding format is specified by the\n * xyEncoding option\n * @param data - Integer vector to encode.\n * @param firstX - First x value.\n * @param intervalX - Interval between two x values.\n * @param xyEncoding - 'FIX', 'SQZ', 'DIF', 'DIFDUP', 'CVS' or 'PAC'. Default 'DIFDUP'.\n * @returns The encoded data.\n */\nexport function vectorEncoder(data, firstX, intervalX, xyEncoding) {\n    switch (xyEncoding) {\n        case 'FIX':\n            return fixEncoding(data, firstX, intervalX);\n        case 'SQZ':\n            return squeezedEncoding(data, firstX, intervalX);\n        case 'DIF':\n            return differenceEncoding(data, firstX, intervalX);\n        case 'DIFDUP':\n            return differenceDuplicateEncoding(data, firstX, intervalX);\n        case 'CSV':\n            return commaSeparatedValuesEncoding(data, firstX, intervalX);\n        case 'PAC':\n            return packedEncoding(data, firstX, intervalX);\n        case undefined:\n        default:\n            return differenceEncoding(data, firstX, intervalX);\n    }\n}\n/**\n * @param data\n * @param firstX\n * @param intervalX\n * @private\n * No data compression used. The data is separated by a comma(',').\n */\nexport function commaSeparatedValuesEncoding(data, firstX, intervalX) {\n    return fixEncoding(data, firstX, intervalX, ',');\n}\n/**\n * @param data\n * @param firstX\n * @param intervalX\n * @param separator\n * @private\n * No data compression used. The data is separated by the specified separator.\n */\nexport function fixEncoding(data, firstX, intervalX, separator = ' ') {\n    let outputData = '';\n    let j = 0;\n    const dataLength = data.length;\n    while (j < dataLength - 7) {\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = 0; i < 8; i++) {\n            outputData += `${separator}${data[j++]}`;\n        }\n        outputData += newLine;\n    }\n    if (j < dataLength) {\n        // We add last numbers\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = j; i < dataLength; i++) {\n            outputData += `${separator}${data[i]}`;\n        }\n    }\n    return outputData;\n}\n/**\n * @param data\n * @param firstX\n * @param intervalX\n * @private\n * No data compression used. The data is separated by the sign of the number.\n */\nexport function packedEncoding(data, firstX, intervalX) {\n    let outputData = '';\n    let j = 0;\n    const dataLength = data.length;\n    while (j < dataLength - 7) {\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = 0; i < 8; i++) {\n            outputData +=\n                data[j] < 0 ? String(data[j++]) : `+${data[j++]}`;\n        }\n        outputData += newLine;\n    }\n    if (j < dataLength) {\n        // We add last numbers\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = j; i < dataLength; i++) {\n            outputData += data[i] < 0 ? String(data[i]) : `+${data[i]}`;\n        }\n    }\n    return outputData;\n}\n/**\n * @param data\n * @param firstX\n * @param intervalX\n * @private\n * Data compression is possible using the squeezed form (SQZ) in which the delimiter, the leading digit,\n * and sign are replaced by a pseudo-digit from Table 1. For example, the Y-values 30, 32 would be\n * represented as C0C2.\n */\nexport function squeezedEncoding(data, firstX, intervalX) {\n    let outputData = '';\n    // String outputData = new String();\n    let j = 0;\n    const dataLength = data.length;\n    while (j < dataLength - 10) {\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = 0; i < 10; i++) {\n            outputData += squeezedDigit(String(data[j++]));\n        }\n        outputData += newLine;\n    }\n    if (j < dataLength) {\n        // We add last numbers\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = j; i < dataLength; i++) {\n            outputData += squeezedDigit(String(data[i]));\n        }\n    }\n    return outputData;\n}\n/**\n * @param data\n * @param firstX\n * @param intervalX\n * @private\n * Duplicate suppression xyEncoding\n */\nexport function differenceDuplicateEncoding(data, firstX, intervalX) {\n    let mult = 0;\n    let index = 0;\n    let charCount = 0;\n    // We built a string where we store the encoded data.\n    let encodedData = '';\n    let encodedNumber = '';\n    let temporary = '';\n    // We calculate the differences vector\n    const diffData = new Array(data.length - 1);\n    for (let i = 0; i < diffData.length; i++) {\n        diffData[i] = data[i + 1] - data[i];\n    }\n    // We simulate a line carry\n    const numberDiff = diffData.length;\n    while (index < numberDiff) {\n        if (charCount === 0) {\n            // Start line\n            encodedNumber = `${Math.ceil(firstX + index * intervalX)}${squeezedDigit(String(data[index]))}${differenceDigit(diffData[index].toString())}`;\n            encodedData += encodedNumber;\n            charCount += encodedNumber.length;\n        }\n        else if (diffData[index - 1] === diffData[index]) {\n            // Try to insert next difference\n            mult++;\n        }\n        else if (mult > 0) {\n            // Now we know that it can be in line\n            mult++;\n            encodedNumber = duplicateDigit(mult.toString());\n            encodedData += encodedNumber;\n            charCount += encodedNumber.length;\n            mult = 0;\n            index--;\n        }\n        else {\n            // Check if it fits, otherwise start a new line\n            encodedNumber = differenceDigit(diffData[index].toString());\n            if (encodedNumber.length + charCount < maxLinelength) {\n                encodedData += encodedNumber;\n                charCount += encodedNumber.length;\n            }\n            else {\n                // start a new line\n                encodedData += newLine;\n                temporary = `${Math.ceil(firstX + index * intervalX)}${squeezedDigit(String(data[index]))}${encodedNumber}`;\n                encodedData += temporary; // Each line start with first index number.\n                charCount = temporary.length;\n            }\n        }\n        index++;\n    }\n    if (mult > 0) {\n        encodedData += duplicateDigit((mult + 1).toString());\n    }\n    // We insert the last data from fid. It is done to control of data\n    // The last line start with the number of datas in the fid.\n    encodedData += `${newLine}${Math.ceil(firstX + index * intervalX)}${squeezedDigit(String(data[index]))}`;\n    return encodedData;\n}\n/**\n * @param data\n * @param firstX\n * @param intervalX\n * @private\n * Differential xyEncoding\n */\nexport function differenceEncoding(data, firstX, intervalX) {\n    let index = 0;\n    let charCount = 0;\n    let i;\n    let encodedData = '';\n    let encodedNumber = '';\n    let temporary = '';\n    // We calculate the differences vector\n    const diffData = new Array(data.length - 1);\n    for (i = 0; i < diffData.length; i++) {\n        diffData[i] = data[i + 1] - data[i];\n    }\n    const numberDiff = diffData.length;\n    while (index < numberDiff) {\n        if (charCount === 0) {\n            // We convert the first number.\n            encodedNumber = `${Math.ceil(firstX + index * intervalX)}${squeezedDigit(String(data[index]))}${differenceDigit(diffData[index].toString())}`;\n            encodedData += encodedNumber;\n            charCount += encodedNumber.length;\n        }\n        else {\n            encodedNumber = differenceDigit(diffData[index].toString());\n            if (encodedNumber.length + charCount < maxLinelength) {\n                encodedData += encodedNumber;\n                charCount += encodedNumber.length;\n            }\n            else {\n                encodedData += newLine;\n                temporary = `${Math.ceil(firstX + index * intervalX)}${squeezedDigit(String(data[index]))}${encodedNumber}`;\n                encodedData += temporary; // Each line start with first index number.\n                charCount = temporary.length;\n            }\n        }\n        index++;\n    }\n    // We insert the last number from data. It is done to control of data\n    encodedData += `${newLine}${Math.ceil(firstX + index * intervalX)}${squeezedDigit(String(data[index]))}`;\n    return encodedData;\n}\n/**\n * @param num\n * @param number_\n * @private\n * Convert number to the ZQZ format, using pseudo digits.\n */\nfunction squeezedDigit(number_) {\n    let sqzDigits = '';\n    if (number_.startsWith('-')) {\n        sqzDigits += pseudoDigit(SQZ_N, number_.charAt(1));\n        if (number_.length > 2) {\n            sqzDigits += number_.slice(2);\n        }\n    }\n    else {\n        sqzDigits += pseudoDigit(SQZ_P, number_.charAt(0));\n        if (number_.length > 1) {\n            sqzDigits += number_.slice(1);\n        }\n    }\n    return sqzDigits;\n}\n/**\n * Convert number to the DIF format, using pseudo digits.\n * @param num\n * @param number_\n */\nfunction differenceDigit(number_) {\n    let diffDigits = '';\n    if (number_.startsWith('-')) {\n        diffDigits += pseudoDigit(DIF_N, number_.charAt(1));\n        if (number_.length > 2) {\n            diffDigits += number_.slice(2);\n        }\n    }\n    else {\n        diffDigits += pseudoDigit(DIF_P, number_.charAt(0));\n        if (number_.length > 1) {\n            diffDigits += number_.slice(1);\n        }\n    }\n    return diffDigits;\n}\n/**\n * Convert number to the DUP format, using pseudo digits.\n * @param num\n * @param number_\n */\nfunction duplicateDigit(number_) {\n    let dupDigits = '';\n    dupDigits += pseudoDigit(DUP, number_.charAt(0));\n    if (number_.length > 1) {\n        dupDigits += number_.slice(1);\n    }\n    return dupDigits;\n}\nfunction pseudoDigit(row, digit) {\n    return pseudoDigits[row][Number(digit)];\n}\n//# sourceMappingURL=vectorEncoder.js.map","import { rescaleAndEnsureInteger } from \"./rescaleAndEnsureInteger.js\";\nimport { vectorEncoder } from \"./vectorEncoder.js\";\nexport function xyDataCreator(data, options = {}) {\n    const { xyEncoding = 'DIF' } = options;\n    const { xFactor = 1, yFactor = 1 } = options.info || {};\n    const firstX = data.x[0];\n    const lastX = data.x.at(-1);\n    const firstY = data.y[0];\n    const lastY = data.y.at(-1);\n    const nbPoints = data.x.length;\n    const deltaX = (lastX - firstX) / (nbPoints - 1);\n    const lines = [\n        `##FIRSTX=${firstX}`,\n        `##LASTX=${lastX}`,\n        `##FIRSTY=${firstY}`,\n        `##LASTY=${lastY}`,\n        `##DELTAX=${deltaX}`,\n        `##XFACTOR=${xFactor}`,\n        `##YFACTOR=${yFactor}`,\n        '##XYDATA=(X++(Y..Y))',\n    ];\n    const line = vectorEncoder(rescaleAndEnsureInteger(data.y, yFactor), firstX / xFactor, deltaX / xFactor, xyEncoding);\n    if (line)\n        lines.push(line);\n    return lines;\n}\n//# sourceMappingURL=xyDataCreator.js.map","import { addInfoData } from \"./utils/addInfoData.js\";\nimport { getBestFactor } from \"./utils/getBestFactor.js\";\nimport { peakTableCreator } from \"./utils/peakTableCreator.js\";\nimport { xyDataCreator } from \"./utils/xyDataCreator.js\";\n/**\n * Create a jcamp\n * @param data - object of array\n * @param - - [options={meta:{},info:{}} - metadata object\n * @param options\n * @returns JCAMP of the input\n */\nexport function fromJSON(data, options = {}) {\n    const { meta = {}, info = {}, xyEncoding } = options;\n    const { title = '', owner = '', origin = '', dataType = '', xUnits = '', yUnits = '', ...resultInfo } = info;\n    let { xFactor, yFactor } = info;\n    data = { x: data.x, y: data.y };\n    let header = `##TITLE=${title}\n##JCAMP-DX=4.24\n##DATA TYPE=${dataType}\n##ORIGIN=${origin}\n##OWNER=${owner}\n##XUNITS=${xUnits}\n##YUNITS=${yUnits}\\n`;\n    header += addInfoData(resultInfo, { prefix: '##' });\n    header += addInfoData(meta);\n    // we leave the header and utf8 fonts ${header.replace(/[^\\t\\n\\x20-\\x7F]/g, '')\n    if (xyEncoding) {\n        xFactor = getBestFactor(data.x, { factor: xFactor });\n        yFactor = getBestFactor(data.y, { factor: yFactor });\n        return `${header}##NPOINTS=${data.x.length}\n${xyDataCreator(data, { info: { xFactor, yFactor }, xyEncoding }).join('\\n')}\n##END=`;\n    }\n    if (xFactor === undefined)\n        xFactor = 1;\n    if (yFactor === undefined)\n        yFactor = 1;\n    if (xFactor !== 1) {\n        data.x = data.x.map((value) => value / xFactor);\n    }\n    if (yFactor !== 1) {\n        data.y = data.y.map((value) => value / yFactor);\n    }\n    return `${header}##NPOINTS=${data.x.length}\n${peakTableCreator(data, { info: { xFactor, yFactor } }).join('\\n')}\n##END=`;\n}\n//# sourceMappingURL=fromJSON.js.map","import creatorNtuples from \"./creatorNtuples.js\";\nimport { fromJSON } from \"./fromJSON.js\";\nimport { checkNumberOrArray } from \"./utils/checkNumberOrArray.js\";\n/**\n * Create a jcamp from variables\n * @param variables\n * @param options\n */\nexport function fromVariables(\n/**\n * object of variables\n */\nvariables, options = {}) {\n    const { info = {}, meta = {}, forceNtuples = false } = options;\n    const jcampOptions = {\n        info,\n        meta,\n    };\n    const keys = Object.keys(variables).map((key) => key.toLowerCase());\n    if (!forceNtuples && keys.length === 2) {\n        const x = variables.x;\n        const xLabel = x.label || 'x';\n        if (variables.x.units) {\n            if (xLabel.includes(variables.x.units)) {\n                jcampOptions.info.xUnits = xLabel;\n            }\n            else {\n                jcampOptions.info.xUnits = `${xLabel} (${variables.x.units})`;\n            }\n        }\n        else {\n            jcampOptions.info.xUnits = xLabel;\n        }\n        const y = variables.y;\n        const yLabel = y.label || 'y';\n        if (variables.y.units) {\n            if (yLabel.includes(variables.y.units)) {\n                jcampOptions.info.xUnits = yLabel;\n            }\n            else {\n                jcampOptions.info.yUnits = `${yLabel} (${variables.y.units})`;\n            }\n        }\n        else {\n            jcampOptions.info.yUnits = yLabel;\n        }\n        const xData = variables.x.data;\n        const yData = variables.y.data;\n        checkNumberOrArray(xData);\n        checkNumberOrArray(yData);\n        return fromJSON({ x: xData, y: yData }, jcampOptions);\n    }\n    return creatorNtuples(variables, options);\n}\n//# sourceMappingURL=fromVariables.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * It returns an element if the input is an array otherwise it returns the input.\n * @param data - one list or single value\n * @param index - index of the desired element, if the index is out of the boundaries it throws an error.\n * @returns\n */\nexport function getOneIfArray(data, index = 0) {\n    if (isAnyArray(data)) {\n        const value = data.at(index);\n        if (value !== undefined) {\n            return value;\n        }\n        throw new RangeError('An array with a index out of boundaries');\n    }\n    return data;\n}\n//# sourceMappingURL=getOneIfArray.js.map","import { xMultiply } from 'ml-spectra-processing/x';\nimport { getOneIfArray } from \"./getOneIfArray.js\";\nimport { addInfoData } from \"./utils/addInfoData.js\";\nimport { checkNumberOrArray } from \"./utils/checkNumberOrArray.js\";\nimport { getBestFactor } from \"./utils/getBestFactor.js\";\nimport { getExtremeValues } from \"./utils/getExtremeValues.js\";\nimport { rescaleAndEnsureInteger } from \"./utils/rescaleAndEnsureInteger.js\";\nimport { vectorEncoder } from \"./utils/vectorEncoder.js\";\nconst ntuplesKeys = ['r', 'i'];\nfunction isNTuplesData(variables) {\n    return 'r' in variables && 'i' in variables;\n}\nfunction isRealData(variables) {\n    return 'r' in variables && !('i' in variables);\n}\n/**\n * Create a jcamp of 1D NMR data by variables x and y or x, r, i\n * @param variables - Variables to convert to jcamp\n * @param [options={}] - options that allows to add meta data in the jcamp\n * @returns JCAMP-DX text file corresponding to the variables\n */\nexport function from1DNMRVariables(variables, options) {\n    const { info: infoInput = {}, meta: currentMeta = {}, xyEncoding, nmrInfo, } = options;\n    const { isFid, title, frequencyOffset, decim, dspfvs, nucleus, originFrequency: originFreq, baseFrequency: baseFreq, spectralWidth: nmrSpectralWidth, solvent, owner: nmrOwner, dataType: nmrDataType, dataClass = variables.i ? 'NTUPLES' : 'XYDATA', scaleFactor, digitalFilter, ...currentInfo } = nmrInfo;\n    const baseFrequency = getOneIfArray(baseFreq || originFreq);\n    const originFrequency = getOneIfArray(originFreq || infoInput['.OBSERVE FREQUENCY']);\n    if (!originFrequency) {\n        throw new Error('originFrequency is mandatory into the info object for nmr data');\n    }\n    const xVariable = variables.x;\n    const x = xVariable.data.slice();\n    const xData = isFid ? x : xMultiply(x, originFrequency);\n    // --- Extracted: Metadata construction ---\n    const newMeta = constructMeta(xData, isFid, nmrSpectralWidth, baseFrequency, originFrequency, digitalFilter, decim, dspfvs, currentMeta, variables);\n    const meta = { ...currentInfo, ...currentMeta, ...newMeta };\n    // --- Extracted: Scaling logic ---\n    applyScaling(variables, scaleFactor, meta);\n    // --- Extracted: Info construction ---\n    const newInfo = constructInfo(isFid, xData, dataClass, solvent, nmrSpectralWidth, frequencyOffset, baseFrequency, title, originFrequency, nucleus, nmrDataType, nmrOwner);\n    const info = { ...infoInput, ...newInfo };\n    // --- Extracted: Header construction ---\n    const header = constructHeader(info, meta);\n    const nbPoints = xData.length;\n    const firstX = xData[0];\n    const secondX = xData[1];\n    const spectralWidth = Math.abs(xData[nbPoints - 1] - firstX);\n    const firstPoint = firstX > secondX ? spectralWidth : 0;\n    const lastPoint = firstX > secondX ? 0 : spectralWidth;\n    const symbol = ['X'];\n    const variableDim = [nbPoints];\n    const units = [xVariable.units ?? (isFid ? 'Time' : 'Hz')];\n    const variableType = ['INDEPENDENT'];\n    const variableForm = ['AFFN'];\n    const factor = 'factor' in options\n        ? { ...options.factor }\n        : {};\n    const factorArray = [spectralWidth / (nbPoints - 1)];\n    const variableName = [xVariable.label.replace(/ *\\[.*/, '') || 'X'];\n    const first = [firstPoint];\n    const last = [lastPoint];\n    const max = [Math.max(lastPoint, firstPoint)];\n    const min = [Math.min(lastPoint, firstPoint)];\n    for (const key of ntuplesKeys) {\n        const variable = variables[key];\n        if (!variable) {\n            if (key !== 'i') {\n                throw new Error(`variable ${key} is mandatory in real/imaginary data`);\n            }\n            continue;\n        }\n        const name = variable?.label.replace(/ *\\[.*/, '');\n        const { firstLast, minMax } = getExtremeValues(variable.data);\n        factor[key] = getBestFactor(variable.data, {\n            factor: factor[key],\n            minMax,\n        });\n        const currentFactor = factor[key];\n        factorArray.push(currentFactor || 1);\n        symbol.push(variable.symbol || (key === 'r' ? 'R' : 'I'));\n        variableName.push(name || key);\n        variableDim.push(variable.data.length);\n        variableForm.push('ASDF');\n        first.push(firstLast.first);\n        last.push(firstLast.last);\n        max.push(minMax.max);\n        min.push(minMax.min);\n        variableType.push('DEPENDENT');\n        units.push(variable.units ?? 'Arbitrary');\n    }\n    return isNTuplesData(variables)\n        ? addNtuplesHeader(header, variables, {\n            symbol,\n            varName: variableName,\n            varDim: variableDim,\n            varForm: variableForm,\n            first,\n            last,\n            min,\n            max,\n            units,\n            factor,\n            varType: variableType,\n            factorArray,\n        }, nmrDataType)\n        : isRealData(variables)\n            ? addRealData(header, {\n                xData,\n                yData: variables.r.data,\n                xyEncoding,\n                info: {\n                    XUNITS: 'HZ',\n                    YUNITS: units[1],\n                    XFACTOR: factorArray[0],\n                    YFACTOR: factorArray[1],\n                    DELTAX: xData[1] - xData[0],\n                    FIRSTX: first[0],\n                    FIRSTY: first[1],\n                    LASTX: last[0],\n                    MAXY: max[1],\n                    MINY: min[1],\n                    NPOINTS: xData.length,\n                    XYDATA: '(X++(Y..Y))',\n                },\n            })\n            : header;\n}\nfunction addNtuplesHeader(header, variables, inputs, dataType = '') {\n    const { symbol, varName, varDim, first, last, min, max, units, varType, varForm, factorArray, xyEncoding, factor, } = inputs;\n    header += `##NTUPLES= ${dataType}\n##VAR_NAME=  ${varName.join(',')}\n##SYMBOL=    ${symbol.join(',')}\n##VAR_TYPE=  ${varType.join(',')}\n##VAR_FORM=  ${varForm.join(',')}\n##VAR_DIM=   ${varDim.join(',')}\n##UNITS=     ${units.join(',')}\n##FACTOR=    ${factorArray.join(',')}\n##FIRST=     ${first.join(',')}\n##LAST=      ${last.join(',')}\n##MIN=       ${min.join(',')}\n##MAX=       ${max.join(',')}\\n`;\n    for (const key of ['r', 'i']) {\n        const variable = variables[key];\n        if (!variable)\n            continue;\n        checkNumberOrArray(variable.data);\n        header += `##PAGE= N=${key === 'r' ? 1 : 2}\\n`;\n        header += `##DATA TABLE= (X++(${key === 'r' ? 'R..R' : 'I..I'})), XYDATA\\n`;\n        header += vectorEncoder(rescaleAndEnsureInteger(variable.data, factor[key]), first[0] > last[0] ? varDim[0] : 0, first[0] > last[0] ? -1 : 1, xyEncoding);\n        header += '\\n';\n    }\n    header += `##END NTUPLES= ${dataType}\\n`;\n    header += '##END=';\n    return header;\n}\nfunction addRealData(header, options) {\n    const { xData, yData, info, xyEncoding } = options;\n    header += addInfoData(info, { prefix: '##' });\n    return `${header}${vectorEncoder(rescaleAndEnsureInteger(yData, info.YFACTOR), xData.length - 1, -1, xyEncoding)}\n##END=`;\n}\nfunction constructMeta(xData, isFid, nmrSpectralWidth, baseFrequency, originFrequency, digitalFilter, decim, dspfvs, currentMeta, variables) {\n    const newMeta = {\n        OFFSET: xData[0] / originFrequency,\n    };\n    maybeAdd(newMeta, 'SW', nmrSpectralWidth);\n    maybeAdd(newMeta, 'BF1', baseFrequency);\n    if (isFid) {\n        maybeAdd(newMeta, 'GRPDLY', digitalFilter);\n        maybeAdd(newMeta, 'DECIM', decim);\n        maybeAdd(newMeta, 'REVERSE', 'no');\n        maybeAdd(newMeta, 'DSPFVS', dspfvs);\n    }\n    maybeAdd(newMeta, 'SYMBOL', variables.i ? '' : currentMeta.SYMBOL);\n    return newMeta;\n}\nfunction constructInfo(isFid, xData, dataClass, solvent, nmrSpectralWidth, frequencyOffset, baseFrequency, title, originFrequency, nucleus, nmrDataType, nmrOwner) {\n    let shiftReference;\n    if (frequencyOffset && baseFrequency) {\n        const offset = frequencyOffset / baseFrequency;\n        shiftReference = offset + 0.5 * (nmrSpectralWidth ?? 0);\n    }\n    else {\n        shiftReference = xData.at(-1);\n    }\n    const newInfo = {};\n    maybeAdd(newInfo, '.SHIFT REFERENCE', `INTERNAL, ${String(solvent)}, ${isFid ? xData.length : 1}, ${shiftReference}`);\n    maybeAdd(newInfo, 'TITLE', title);\n    maybeAdd(newInfo, '.OBSERVE FREQUENCY', originFrequency);\n    maybeAdd(newInfo, '.OBSERVE NUCLEUS', getOneIfArray(nucleus));\n    maybeAdd(newInfo, 'DATATYPE', nmrDataType);\n    maybeAdd(newInfo, 'DATACLASS', dataClass);\n    maybeAdd(newInfo, '.SOLVENT', solvent);\n    maybeAdd(newInfo, 'OWNER', nmrOwner);\n    return newInfo;\n}\nfunction applyScaling(variables, scaleFactor, newMeta) {\n    const scale = 1 / (scaleFactor ?? 1);\n    if (scale === 1) {\n        return;\n    }\n    maybeAdd(newMeta, 'NC_proc', -Math.log2(scale));\n    xMultiply(variables.r?.data || [], scale, {\n        output: variables.r?.data,\n    });\n    if (variables.i) {\n        xMultiply(variables.i?.data || [], scale, {\n            output: variables.i?.data,\n        });\n    }\n}\nfunction constructHeader(info, meta) {\n    const { TITLE = '', OWNER = '', ORIGIN = '', DATATYPE = '', DATACLASS, ...resultInfo } = info;\n    let header = `##TITLE=${TITLE}\n##JCAMP-DX=6.00\n##DATA TYPE= ${DATATYPE}\n##DATA CLASS= ${DATACLASS}\n##ORIGIN=${ORIGIN}\n##OWNER=${OWNER}\\n`;\n    header += addInfoData(resultInfo, { prefix: '##' });\n    header += addInfoData(meta);\n    return header;\n}\nfunction maybeAdd(object, name, value) {\n    if (value === undefined)\n        return;\n    object[name] = getOneIfArray(value);\n}\n//# sourceMappingURL=from1DNMRVariables.js.map","import { matrixMinMaxZ } from 'ml-spectra-processing/matrix';\nimport { getFactorNumber } from \"./getFactorNumber.js\";\nexport function getBestFactorMatrix(matrix, options = {}) {\n    const { maxValue, factor, minMax } = options;\n    if (factor !== undefined) {\n        return factor;\n    }\n    // is there non integer number ?\n    let isOnlyInteger = true;\n    for (const row of matrix) {\n        for (const y of row) {\n            if (Math.round(y) !== y) {\n                isOnlyInteger = false;\n                break;\n            }\n        }\n    }\n    if (isOnlyInteger) {\n        return 1;\n    }\n    // we need to rescale the values\n    // need to find the max and min values\n    const extremeValues = minMax || matrixMinMaxZ(matrix);\n    return getFactorNumber(extremeValues, maxValue);\n}\n//# sourceMappingURL=getBestFactorMatrix.js.map","import { isAnyArray } from 'is-any-array';\nimport { addInfoData } from \"./utils/addInfoData.js\";\nimport { checkMatrix } from \"./utils/checkMatrix.js\";\nimport { checkNumberOrArray } from \"./utils/checkNumberOrArray.js\";\nimport { getBestFactor } from \"./utils/getBestFactor.js\";\nimport { getBestFactorMatrix } from \"./utils/getBestFactorMatrix.js\";\nimport { getExtremeValues } from \"./utils/getExtremeValues.js\";\nimport { rescaleAndEnsureInteger } from \"./utils/rescaleAndEnsureInteger.js\";\nimport { vectorEncoder } from \"./utils/vectorEncoder.js\";\n/**\n * Create a jcamp of 2D NMR data by variables. Currently only the convertion of processed data\n * is supported. The variables x and y are the direct (F2 in Bruker) and indirect (F1 in bruker),\n * data should be in ppm scale, the z variable is the intensity (dependent)\n * @param variables\n * @param options\n */\nexport function from2DNMRVariables(variables, options) {\n    const { nmrInfo, info = {}, meta = {}, xyEncoding = 'DIFDUP' } = options;\n    const factor = 'factor' in options\n        ? { ...options.factor }\n        : {};\n    const { title = '', owner = '', origin = '', dataType = 'NMR SPECTRUM', ...otherInfo } = nmrInfo;\n    const symbol = [];\n    const variableName = [];\n    const variableType = [];\n    const variableDim = [];\n    const units = [];\n    const first = [];\n    const last = [];\n    const min = [];\n    const max = [];\n    const factors = [];\n    const keys = ['y', 'x', 'z'];\n    for (let i = 0; i < keys.length; i++) {\n        const key = keys[i];\n        const variable = variables[key];\n        if (!variable)\n            throw new Error('variables x, y and z are mandatory');\n        const name = variable?.label.replace(/ *\\[.*/, '');\n        const unit = variable?.label.replace(/.*\\[(?<units>.*)\\].*/, '$<units>');\n        const { firstLast, minMax } = getExtremeValues(variable.data);\n        if (!Object.hasOwn(factor, key)) {\n            factor[key] = calculateFactor(variable.data, minMax);\n        }\n        symbol.push(variable.symbol || key);\n        variableName.push(name || key);\n        variableDim.push(variable.data.length);\n        first.push(firstLast.first);\n        last.push(firstLast.last);\n        max.push(minMax.max);\n        min.push(minMax.min);\n        factors.push(factor[key]);\n        if (variable.isDependent !== undefined) {\n            variableType.push(variable.isDependent ? 'DEPENDENT' : 'INDEPENDENT');\n        }\n        else {\n            variableType.push(variable.isDependent !== undefined\n                ? !variable.isDependent\n                : i === 0\n                    ? 'INDEPENDENT'\n                    : 'DEPENDENT');\n        }\n        units.push(variable.units || unit || '');\n    }\n    let header = `##TITLE=${title}\n##JCAMP-DX=6.00\n##DATA TYPE=${dataType}\n##DATA CLASS= NTUPLES\n##ORIGIN=${origin}\n##OWNER=${owner}\\n`;\n    header += addInfoData(info, { prefix: '##' });\n    header += addInfoData({ ...otherInfo, ...meta });\n    let xData = variables.x.data;\n    let yData = variables.y.data;\n    checkNumberOrArray(xData);\n    checkNumberOrArray(yData);\n    checkMandatoryParameters(meta);\n    const zData = variables.z?.data || [];\n    checkMatrix(zData);\n    const { direct, indirect, dependent } = getDimensionIndices(symbol);\n    const nuc1 = String(meta.NUC1);\n    const nuc2 = String(meta.NUC2);\n    const nucleus = new Array(3);\n    nucleus[direct] = nuc1;\n    nucleus[indirect] = nuc2;\n    const sfo1 = Number(meta.SFO1);\n    const sfo2 = Number(meta.SFO2);\n    const optionsScaleAndJoin = {\n        indices: { direct, indirect },\n        sfo1,\n        sfo2,\n    };\n    header += `##NTUPLES= ${dataType}\n##VAR_NAME=  ${variableName.join(',')}\n##SYMBOL=    ${symbol.join(',')}\n##VAR_TYPE=  ${variableType.join(',')}\n##VAR_DIM=   ${variableDim.join(',')}\n##.NUCLEUS=  ${nucleus.join(',')}\n##UNITS=     ${units.join(',')}\n##FACTOR=    ${factors.join(',')}\n##FIRST=     ${scaleAndJoin(first, optionsScaleAndJoin)}\n##LAST=      ${scaleAndJoin(last, optionsScaleAndJoin)}\n##MIN=       ${scaleAndJoin(min, optionsScaleAndJoin)}\n##MAX=       ${scaleAndJoin(max, optionsScaleAndJoin)}\\n`;\n    header += `##VAR_FORM= AFFN, AFFN, ASDF\\n`;\n    header += '##NUM DIM= 2\\n';\n    if (keys[direct] !== 'x') {\n        [yData, xData] = [xData, yData];\n    }\n    const directSymbol = symbol[direct].toUpperCase();\n    const indirectSymbol = symbol[indirect].toUpperCase();\n    const firstY = yData[0] * sfo2;\n    const lastY = yData.at(-1) * sfo2;\n    const firstX = xData[0];\n    const lastX = xData.at(-1);\n    const deltaX = (lastX - firstX) / (xData.length - 1);\n    const deltaY = (lastY - firstY) / (yData.length - 1);\n    const firstData = new Float64Array(3);\n    firstData[direct] = firstX * sfo1;\n    firstData[indirect] = firstY;\n    const yFactor = factor.y || 1;\n    const xFactor = factor.x || 1;\n    const zFactor = factor.z || 1;\n    for (let index = 0; index < zData.length; index++) {\n        const row = zData[index];\n        firstData[dependent] = row[0];\n        header += `##PAGE= ${indirectSymbol}=${(firstY + deltaY * index) / yFactor}\\n`;\n        header += `##FIRST=  ${firstData.join(',')}\\n`;\n        header += `##DATA TABLE= (${directSymbol}++(Y..Y)), PROFILE\\n`;\n        header += vectorEncoder(rescaleAndEnsureInteger(row, zFactor), firstX / xFactor, deltaX / xFactor, xyEncoding);\n        header += '\\n';\n    }\n    return header;\n}\nfunction scaleAndJoin(variable, options) {\n    const { sfo1, sfo2 } = options;\n    const { direct, indirect } = options.indices;\n    const copy = variable.slice();\n    copy[direct] = copy[direct] * sfo1;\n    copy[indirect] = copy[indirect] * sfo2;\n    return copy.join(',');\n}\nfunction getDimensionIndices(entry) {\n    const symbol = entry.map((item) => item.toUpperCase());\n    const direct = symbol.includes('F2')\n        ? symbol.indexOf('F2')\n        : symbol.indexOf('T2');\n    const indirect = symbol.includes('F1')\n        ? symbol.indexOf('F1')\n        : symbol.indexOf('T1');\n    if (direct === -1 || indirect === -1) {\n        throw new Error('F2/T2 and F1/T1 symbol should be defined for nD NMR SPECTRUM');\n    }\n    return { direct, indirect, dependent: 3 - direct - indirect };\n}\nfunction checkMandatoryParameters(meta) {\n    const list = ['SFO1', 'SFO2', 'NUC1', 'NUC2'];\n    for (const key of list) {\n        const value = meta[key];\n        if (!value) {\n            throw new Error(`${key} in options.meta should be defined`);\n        }\n    }\n}\nfunction calculateFactor(data, minMax) {\n    return isAnyArray(data[0])\n        ? getBestFactorMatrix(data, { minMax })\n        : getBestFactor(data, { minMax });\n}\n//# sourceMappingURL=from2DNMRVariables.js.map"],"names":["addInfoData","data","options","keys","Object","prefix","header","key","JSON","stringify","toString","prototype","isAnyArray","value","tag","call","endsWith","includes","getOutputArray","output","length","undefined","TypeError","Float64Array","xCheck","input","minLength","Error","xDivide","array1","array2","isConstant","constant","RangeError","array3","i","Uint8Array","Uint16Array","buffer","xMinMaxValues","array","min","max","xMultiply","matrixCheck","firstLength","matrixMinMaxZ","matrix","nbRows","nbColumns","column","row","checkMatrix","checkNumberOrArray","getExtremeValues","firstRow","firstLast","first","last","at","minMax","creatorNtuples","variables","meta","info","title","owner","origin","dataType","resultInfo","symbol","variableName","variableType","variableDim","units","variable","name","label","replace","unit","push","isDependent","join","x","point","getFactorNumber","maxValue","factor","Math","getBestFactor","isOnlyInteger","y","round","extremeValues","getNumber","number","rounded","abs","Number","EPSILON","peakTableCreator","xFactor","yFactor","firstX","Infinity","lastX","firstY","lastY","lines","rescaleAndEnsureInteger","map","newLine","pseudoDigits","SQZ_P","SQZ_N","DIF_P","DIF_N","DUP","maxLinelength","vectorEncoder","intervalX","xyEncoding","fixEncoding","squeezedEncoding","differenceEncoding","differenceDuplicateEncoding","commaSeparatedValuesEncoding","packedEncoding","separator","outputData","j","dataLength","String","ceil","squeezedDigit","mult","index","charCount","encodedData","encodedNumber","temporary","diffData","Array","numberDiff","differenceDigit","duplicateDigit","number_","sqzDigits","startsWith","pseudoDigit","charAt","slice","diffDigits","dupDigits","digit","xyDataCreator","nbPoints","deltaX","line","fromJSON","xUnits","yUnits","fromVariables","forceNtuples","jcampOptions","toLowerCase","xLabel","yLabel","xData","yData","getOneIfArray","ntuplesKeys","isNTuplesData","isRealData","from1DNMRVariables","infoInput","currentMeta","nmrInfo","isFid","frequencyOffset","decim","dspfvs","nucleus","originFrequency","originFreq","baseFrequency","baseFreq","spectralWidth","nmrSpectralWidth","solvent","nmrOwner","nmrDataType","dataClass","scaleFactor","digitalFilter","currentInfo","xVariable","newMeta","constructMeta","applyScaling","newInfo","constructInfo","constructHeader","secondX","firstPoint","lastPoint","variableForm","factorArray","currentFactor","addNtuplesHeader","varName","varDim","varForm","varType","addRealData","r","XUNITS","YUNITS","XFACTOR","YFACTOR","DELTAX","FIRSTX","FIRSTY","LASTX","MAXY","MINY","NPOINTS","XYDATA","inputs","OFFSET","maybeAdd","SYMBOL","shiftReference","offset","scale","log2","TITLE","OWNER","ORIGIN","DATATYPE","DATACLASS","object","getBestFactorMatrix","from2DNMRVariables","otherInfo","factors","hasOwn","calculateFactor","checkMandatoryParameters","zData","z","direct","indirect","dependent","getDimensionIndices","nuc1","NUC1","nuc2","NUC2","sfo1","SFO1","sfo2","SFO2","optionsScaleAndJoin","indices","scaleAndJoin","directSymbol","toUpperCase","indirectSymbol","deltaY","firstData","zFactor","copy","entry","item","indexOf","list"],"mappings":";;;;;;;AAAO,MAAMA,WAAW,GAAGA,CACzBC,IAAyB,EACzBC,OAAA,GAGI,EAAE,KACJ;EACF,MAAM;AAAEC,IAAAA,IAAI,GAAGC,MAAM,CAACD,IAAI,CAACF,IAAI,CAAC;AAAEI,IAAAA,MAAM,GAAG;AAAK,GAAE,GAAGH,OAAO;EAC5D,IAAII,MAAM,GAAG,EAAE;AACf,EAAA,KAAK,MAAMC,GAAG,IAAIJ,IAAI,EAAE;AACtBG,IAAAA,MAAM,IACJ,OAAOL,IAAI,CAACM,GAAG,CAAC,KAAK,QAAQ,GACzB,GAAGF,MAAM,CAAA,EAAGE,GAAG,CAAA,CAAA,EAAIC,IAAI,CAACC,SAAS,CAACR,IAAI,CAACM,GAAG,CAAC,CAAC,IAAI,GAChD,CAAA,EAAGF,MAAM,CAAA,EAAGE,GAAG,CAAA,CAAA,EAAIN,IAAI,CAACM,GAAG,CAAC,CAAA,EAAA,CAAI;AACxC,EAAA;AACA,EAAA,OAAOD,MAAM;AACf,CAAC;;AChBD;AACA,MAAMI,QAAQ,GAAGN,MAAM,CAACO,SAAS,CAACD,QAAQ;AAc1C;;;;;AAKM,SAAUE,UAAUA,CAACC,KAAc,EAAA;AACvC,EAAA,MAAMC,GAAG,GAAGJ,QAAQ,CAACK,IAAI,CAACF,KAAK,CAAC;AAChC,EAAA,OAAOC,GAAG,CAACE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAACF,GAAG,CAACG,QAAQ,CAAC,KAAK,CAAC;AACvD;;ACLA;;;;;;AAMM,SAAUC,cAAcA,CAC5BC,MAA+B,EAC/BC,MAAc,EAAA;EAEd,IAAID,MAAM,KAAKE,SAAS,EAAE;AACxB,IAAA,IAAI,CAACT,UAAU,CAACO,MAAM,CAAC,EAAE;AACvB,MAAA,MAAM,IAAIG,SAAS,CAAC,6CAA6C,CAAC;AACpE,IAAA;AACA,IAAA,IAAIH,MAAM,CAACC,MAAM,KAAKA,MAAM,EAAE;AAC5B,MAAA,MAAM,IAAIE,SAAS,CAAC,mDAAmD,CAAC;AAC1E,IAAA;AACA,IAAA,OAAOH,MAAM;AACf,EAAA,CAAC,MAAM;AACL,IAAA,OAAO,IAAII,YAAY,CAACH,MAAM,CAAC;AACjC,EAAA;AACF;;AC3BA;;;;;;AAMM,SAAUI,MAAMA,CACpBC,KAAc,EACdvB,OAAA,GAAyB,EAAE,EAAA;EAE3B,MAAM;AAAEwB,IAAAA,SAAS,GAAG;AAAC,GAAE,GAAGxB,OAAO;AACjC,EAAA,IAAI,CAACU,UAAU,CAACa,KAAK,CAAC,EAAE;AACtB,IAAA,MAAM,IAAIH,SAAS,CAAC,wBAAwB,CAAC;AAC/C,EAAA;AACA,EAAA,IAAIG,KAAK,CAACL,MAAM,KAAK,CAAC,EAAE;AACtB,IAAA,MAAM,IAAIE,SAAS,CAAC,yBAAyB,CAAC;AAChD,EAAA;AACA,EAAA,IAAI,OAAOG,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;AAChC,IAAA,MAAM,IAAIH,SAAS,CAAC,4BAA4B,CAAC;AACnD,EAAA;AACA,EAAA,IAAIG,KAAK,CAACL,MAAM,GAAGM,SAAS,EAAE;AAC5B,IAAA,MAAM,IAAIC,KAAK,CAAC,CAAA,qCAAA,EAAwCD,SAAS,EAAE,CAAC;AACtE,EAAA;AACF;;ACzBA;;;;;;AAMM,SAAUE,OAAOA,CACrBC,MAAmB,EACnBC,MAA4B,EAC5B5B,OAAA,GAAqC,EAAE,EAAA;EAEvC,IAAI6B,UAAU,GAAG,KAAK;EACtB,IAAIC,QAAQ,GAAG,CAAC;AAChB,EAAA,IAAIpB,UAAU,CAACkB,MAAM,CAAC,EAAE;AACtB,IAAA,IAAID,MAAM,CAACT,MAAM,KAAKU,MAAM,CAACV,MAAM,EAAE;AACnC,MAAA,MAAM,IAAIa,UAAU,CAAC,6CAA6C,CAAC;AACrE,IAAA;AACF,EAAA,CAAC,MAAM;AACLF,IAAAA,UAAU,GAAG,IAAI;AACjBC,IAAAA,QAAQ,GAAGF,MAAM;AACnB,EAAA;EAEA,MAAMI,MAAM,GAAGhB,cAAc,CAAChB,OAAO,CAACiB,MAAM,EAAEU,MAAM,CAACT,MAAM,CAAC;AAC5D,EAAA,IAAIW,UAAU,EAAE;AACd,IAAA,KAAK,IAAII,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGN,MAAM,CAACT,MAAM,EAAEe,CAAC,EAAE,EAAE;MACtCD,MAAM,CAACC,CAAC,CAAC,GAAGN,MAAM,CAACM,CAAC,CAAC,GAAGH,QAAQ;AAClC,IAAA;AACF,EAAA,CAAC,MAAM;AACL,IAAA,KAAK,IAAIG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGN,MAAM,CAACT,MAAM,EAAEe,CAAC,EAAE,EAAE;AACtCD,MAAAA,MAAM,CAACC,CAAC,CAAC,GAAGN,MAAM,CAACM,CAAC,CAAC,GAAIL,MAAmB,CAACK,CAAC,CAAC;AACjD,IAAA;AACF,EAAA;AAEA,EAAA,OAAOD,MAAM;AACf;;AC5CsB,IAAIE,UAAU,CAAC,IAAIC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAACC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK;;ACIzE;;;;;AAKM,SAAUC,aAAaA,CAACC,KAAkB,EAAA;EAI9ChB,MAAM,CAACgB,KAAK,CAAC;AAEb,EAAA,IAAIC,GAAG,GAAGD,KAAK,CAAC,CAAC,CAAC;AAClB,EAAA,IAAIE,GAAG,GAAGF,KAAK,CAAC,CAAC,CAAC;AAElB,EAAA,KAAK,IAAIL,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGK,KAAK,CAACpB,MAAM,EAAEe,CAAC,EAAE,EAAE;AACrC,IAAA,MAAMtB,KAAK,GAAG2B,KAAK,CAACL,CAAC,CAAC;AACtB,IAAA,IAAItB,KAAK,GAAG4B,GAAG,EAAEA,GAAG,GAAG5B,KAAK,CAAC,KACxB,IAAIA,KAAK,GAAG6B,GAAG,EAAEA,GAAG,GAAG7B,KAAK;AACnC,EAAA;EAEA,OAAO;IAAE4B,GAAG;AAAEC,IAAAA;GAAK;AACrB;;ACbA;;;;;;AAMM,SAAUC,SAASA,CACvBd,MAAmB,EACnBC,MAA4B,EAC5B5B,OAAA,GAAuC,EAAE,EAAA;EAEzC,IAAI6B,UAAU,GAAG,KAAK;EACtB,IAAIC,QAAQ,GAAG,CAAC;AAChB,EAAA,IAAIpB,UAAU,CAACkB,MAAM,CAAC,EAAE;AACtB,IAAA,IAAID,MAAM,CAACT,MAAM,KAAKU,MAAM,CAACV,MAAM,EAAE;AACnC,MAAA,MAAM,IAAIO,KAAK,CAAC,6CAA6C,CAAC;AAChE,IAAA;AACF,EAAA,CAAC,MAAM;AACLI,IAAAA,UAAU,GAAG,IAAI;AACjBC,IAAAA,QAAQ,GAAGF,MAAM;AACnB,EAAA;EAEA,MAAMI,MAAM,GAAGhB,cAAc,CAAChB,OAAO,CAACiB,MAAM,EAAEU,MAAM,CAACT,MAAM,CAAC;AAC5D,EAAA,IAAIW,UAAU,EAAE;AACd,IAAA,KAAK,IAAII,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGN,MAAM,CAACT,MAAM,EAAEe,CAAC,EAAE,EAAE;MACtCD,MAAM,CAACC,CAAC,CAAC,GAAGN,MAAM,CAACM,CAAC,CAAC,GAAGH,QAAQ;AAClC,IAAA;AACF,EAAA,CAAC,MAAM;AACL,IAAA,KAAK,IAAIG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGN,MAAM,CAACT,MAAM,EAAEe,CAAC,EAAE,EAAE;AACtCD,MAAAA,MAAM,CAACC,CAAC,CAAC,GAAGN,MAAM,CAACM,CAAC,CAAC,GAAIL,MAAa,CAACK,CAAC,CAAC;AAC3C,IAAA;AACF,EAAA;AAEA,EAAA,OAAOD,MAAM;AACf;;AC5CM,SAAUU,WAAWA,CAAC3C,IAAkB,EAAA;AAC5C,EAAA,IAAIA,IAAI,CAACmB,MAAM,KAAK,CAAC,IAAInB,IAAI,CAAC,CAAC,CAAC,CAACmB,MAAM,KAAK,CAAC,EAAE;AAC7C,IAAA,MAAM,IAAIa,UAAU,CAAC,0BAA0B,CAAC;AAClD,EAAA;AAEA,EAAA,MAAMY,WAAW,GAAG5C,IAAI,CAAC,CAAC,CAAC,CAACmB,MAAM;AAClC,EAAA,KAAK,IAAIe,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGlC,IAAI,CAACmB,MAAM,EAAEe,CAAC,EAAE,EAAE;IACpC,IAAIlC,IAAI,CAACkC,CAAC,CAAC,CAACf,MAAM,KAAKyB,WAAW,EAAE;AAClC,MAAA,MAAM,IAAIZ,UAAU,CAAC,mCAAmC,CAAC;AAC3D,IAAA;AACF,EAAA;AACF;;ACTA;;;;AAIM,SAAUa,aAAaA,CAACC,MAAoB,EAAA;EAIhDH,WAAW,CAACG,MAAM,CAAC;AACnB,EAAA,MAAMC,MAAM,GAAGD,MAAM,CAAC3B,MAAM;AAC5B,EAAA,MAAM6B,SAAS,GAAGF,MAAM,CAAC,CAAC,CAAC,CAAC3B,MAAM;EAElC,IAAIqB,GAAG,GAAGM,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACtB,IAAIL,GAAG,GAAGK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAEtB,KAAK,IAAIG,MAAM,GAAG,CAAC,EAAEA,MAAM,GAAGD,SAAS,EAAEC,MAAM,EAAE,EAAE;IACjD,KAAK,IAAIC,GAAG,GAAG,CAAC,EAAEA,GAAG,GAAGH,MAAM,EAAEG,GAAG,EAAE,EAAE;AACrC,MAAA,IAAIJ,MAAM,CAACI,GAAG,CAAC,CAACD,MAAM,CAAC,GAAGT,GAAG,EAAEA,GAAG,GAAGM,MAAM,CAACI,GAAG,CAAC,CAACD,MAAM,CAAC;AACxD,MAAA,IAAIH,MAAM,CAACI,GAAG,CAAC,CAACD,MAAM,CAAC,GAAGR,GAAG,EAAEA,GAAG,GAAGK,MAAM,CAACI,GAAG,CAAC,CAACD,MAAM,CAAC;AAC1D,IAAA;AACF,EAAA;EAEA,OAAO;IAAET,GAAG;AAAEC,IAAAA;GAAK;AACrB;;ACxBM,SAAUU,WAAWA,CACzBnD,IAAiC,EAAA;AAEjC,EAAA,IAAI,CAACW,UAAU,CAACX,IAAI,CAAC,IAAI,CAACW,UAAU,CAACX,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AAC7C,IAAA,MAAM,IAAI0B,KAAK,CAAC,CAAA,0BAAA,CAA4B,CAAC;AAC/C,EAAA;AACF;;ACNM,SAAU0B,kBAAkBA,CAChCpD,IAAiC,EAAA;AAEjC,EAAA,IAAI,CAACW,UAAU,CAACX,IAAI,CAAC,IAAIW,UAAU,CAACX,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AAC5C,IAAA,MAAM,IAAI0B,KAAK,CAAC,CAAA,0CAAA,CAA4C,CAAC;AAC/D,EAAA;AACF;;ACDM,SAAU2B,gBAAgBA,CAACrD,IAAgC,EAAA;AAC/D,EAAA,IAAIW,UAAU,CAACX,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;IACvBmD,WAAW,CAACnD,IAAI,CAAC;AACjB,IAAA,MAAMsD,QAAQ,GAAGtD,IAAI,CAAC,CAAC,CAAC;IACxB,OAAO;AACLuD,MAAAA,SAAS,EAAE;AACTC,QAAAA,KAAK,EAAEF,QAAQ,CAAC,CAAC,CAAW;AAC5BG,QAAAA,IAAI,EAAGzD,IAAI,CAAC0D,EAAE,CAAC,EAAE,CAAiB,CAACJ,QAAQ,CAACnC,MAAM,GAAG,CAAC;AACvD,OAAA;MACDwC,MAAM,EAAEd,aAAa,CAAC7C,IAAI;AAC3B,KAAA;AACH,EAAA;EAEAoD,kBAAkB,CAACpD,IAAI,CAAC;EAExB,OAAO;AACLuD,IAAAA,SAAS,EAAE;AACTC,MAAAA,KAAK,EAAExD,IAAI,CAAC,CAAC,CAAW;AACxByD,MAAAA,IAAI,EAAEzD,IAAI,CAAC0D,EAAE,CAAC,EAAE;AACjB,KAAA;IACDC,MAAM,EAAErB,aAAa,CAACtC,IAAI;AAC3B,GAAA;AACH;;ACxBA;;;;;;AAMc,SAAU4D,cAAcA,CACpCC,SAAiC,EACjC5D,OAAqB,EAAA;EAErB,MAAM;AAAE6D,IAAAA,IAAI,GAAG,EAAE;AAAEC,IAAAA,IAAI,GAAG;AAAE,GAAE,GAAG9D,OAAO;EAExC,MAAM;AACJ+D,IAAAA,KAAK,GAAG,EAAE;AACVC,IAAAA,KAAK,GAAG,EAAE;AACVC,IAAAA,MAAM,GAAG,EAAE;AACXC,IAAAA,QAAQ,GAAG,EAAE;IACb,GAAGC;AAAU,GACd,GAAGL,IAAI;EAER,MAAMM,MAAM,GAAG,EAAE;EACjB,MAAMC,YAAY,GAAG,EAAE;EACvB,MAAMC,YAAY,GAAG,EAAE;EACvB,MAAMC,WAAW,GAAG,EAAE;EACtB,MAAMC,KAAK,GAAG,EAAE;EAChB,MAAMjB,KAAK,GAAG,EAAE;EAChB,MAAMC,IAAI,GAAG,EAAE;EACf,MAAMjB,GAAG,GAAG,EAAE;EACd,MAAMC,GAAG,GAAG,EAAE;AAEd,EAAA,MAAMvC,IAAI,GAAGC,MAAM,CAACD,IAAI,CAAC2D,SAAS,CAAmB;AAErD,EAAA,KAAK,IAAI3B,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGhC,IAAI,CAACiB,MAAM,EAAEe,CAAC,EAAE,EAAE;AACpC,IAAA,MAAM5B,GAAG,GAAGJ,IAAI,CAACgC,CAAC,CAAiB;AACnC,IAAA,MAAMwC,QAAQ,GAAGb,SAAS,CAACvD,GAAG,CAAC;IAC/B,IAAI,CAACoE,QAAQ,EAAE;IAEf,MAAMC,IAAI,GAAGD,QAAQ,EAAEE,KAAK,CAACC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;IAClD,MAAMC,IAAI,GAAGJ,QAAQ,EAAEE,KAAK,CAACC,OAAO,CAAC,sBAAsB,EAAE,UAAU,CAAC;IAExE,MAAM;MAAEtB,SAAS;AAAEI,MAAAA;AAAM,KAAE,GAAGN,gBAAgB,CAACqB,QAAQ,CAAC1E,IAAI,CAAC;IAE7DqE,MAAM,CAACU,IAAI,CAACL,QAAQ,CAACL,MAAM,IAAI/D,GAAG,CAAC;AACnCgE,IAAAA,YAAY,CAACS,IAAI,CAACJ,IAAI,IAAIrE,GAAG,CAAC;IAC9BkE,WAAW,CAACO,IAAI,CAACL,QAAQ,CAAC1E,IAAI,CAACmB,MAAM,CAAC;AACtCqC,IAAAA,KAAK,CAACuB,IAAI,CAACxB,SAAS,CAACC,KAAK,CAAC;AAC3BC,IAAAA,IAAI,CAACsB,IAAI,CAACxB,SAAS,CAACE,IAAI,CAAC;AACzBhB,IAAAA,GAAG,CAACsC,IAAI,CAACpB,MAAM,CAAClB,GAAG,CAAC;AACpBD,IAAAA,GAAG,CAACuC,IAAI,CAACpB,MAAM,CAACnB,GAAG,CAAC;AAEpB,IAAA,IAAIkC,QAAQ,CAACM,WAAW,KAAK5D,SAAS,EAAE;MACtCmD,YAAY,CAACQ,IAAI,CAACL,QAAQ,CAACM,WAAW,GAAG,WAAW,GAAG,aAAa,CAAC;AACvE,IAAA,CAAC,MAAM;MACLT,YAAY,CAACQ,IAAI,CACfL,QAAQ,CAACM,WAAW,KAAK5D,SAAS,GAC9B,CAACsD,QAAQ,CAACM,WAAW,GACrB9C,CAAC,KAAK,CAAC,GACL,aAAa,GACb,WAAW,CAClB;AACH,IAAA;IAEAuC,KAAK,CAACM,IAAI,CAACL,QAAQ,CAACD,KAAK,IAAIK,IAAI,IAAI,EAAE,CAAC;AAC1C,EAAA;EAEA,IAAIzE,MAAM,GAAG,CAAA,QAAA,EAAW2D,KAAK;;cAEjBG,QAAQ;;WAEXD,MAAM;AACPD,QAAAA,EAAAA,KAAK,CAAA,EAAA,CAAI;AAEjB5D,EAAAA,MAAM,IAAIN,WAAW,CAACqE,UAAU,EAAE;AAAEhE,IAAAA,MAAM,EAAE;AAAI,GAAE,CAAC;AACnDC,EAAAA,MAAM,IAAIN,WAAW,CAAC+D,IAAI,CAAC;EAE3BzD,MAAM,IAAI,cAAc8D,QAAQ;AACnBG,aAAAA,EAAAA,YAAY,CAACW,IAAI,CAAC,GAAG,CAAC;AACtBZ,aAAAA,EAAAA,MAAM,CAACY,IAAI,CAAC,GAAG,CAAC;AAChBV,aAAAA,EAAAA,YAAY,CAACU,IAAI,CAAC,GAAG,CAAC;AACtBT,aAAAA,EAAAA,WAAW,CAACS,IAAI,CAAC,GAAG,CAAC;AACrBR,aAAAA,EAAAA,KAAK,CAACQ,IAAI,CAAC,GAAG,CAAC;AACfzB,aAAAA,EAAAA,KAAK,CAACyB,IAAI,CAAC,GAAG,CAAC;AACfxB,aAAAA,EAAAA,IAAI,CAACwB,IAAI,CAAC,GAAG,CAAC;AACdzC,aAAAA,EAAAA,GAAG,CAACyC,IAAI,CAAC,GAAG,CAAC;AACbxC,aAAAA,EAAAA,GAAG,CAACwC,IAAI,CAAC,GAAG,CAAC;AACd,aAAA,CAAA;AAEZ5E,EAAAA,MAAM,IAAI,CAAA,eAAA,EAAkBgE,MAAM,CAACY,IAAI,CAAC,EAAE,CAAC,CAAA,EAAA,EAAKZ,MAAM,CAACY,IAAI,CAAC,EAAE,CAAC,CAAA,UAAA,CAAY;AAC3E,EAAA,KAAK,IAAI/C,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG2B,SAAS,CAACqB,CAAC,CAAClF,IAAI,CAACmB,MAAM,EAAEe,CAAC,EAAE,EAAE;IAChD,MAAMiD,KAAK,GAAG,EAAE;AAChB,IAAA,KAAK,MAAM7E,GAAG,IAAIJ,IAAI,EAAE;AACtB,MAAA,MAAMwE,QAAQ,GAAGb,SAAS,CAACvD,GAAG,CAAC;MAC/B,IAAI,CAACoE,QAAQ,EAAE;MACfS,KAAK,CAACJ,IAAI,CAACL,QAAQ,CAAC1E,IAAI,CAACkC,CAAC,CAAC,CAAC;AAC9B,IAAA;IACA7B,MAAM,IAAI,GAAG8E,KAAK,CAACF,IAAI,CAAC,IAAI,CAAC,CAAA,EAAA,CAAI;AACnC,EAAA;EAEA5E,MAAM,IAAI,CAAA,eAAA,EAAkB8D,QAAQ,CAAA,EAAA,CAAI;AACxC9D,EAAAA,MAAM,IAAI,gBAAgB;AAC1B,EAAA,OAAOA,MAAM;AACf;;ACzGM,SAAU+E,eAAeA,CAACzB,MAAc,EAAE0B,QAAQ,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,EAAA;AACpE,EAAA,IAAIC,MAAc;AAClB,EAAA,IAAI3B,MAAM,CAACnB,GAAG,GAAG,CAAC,EAAE;AAClB,IAAA,IAAImB,MAAM,CAAClB,GAAG,GAAG,CAAC,EAAE;AAClB6C,MAAAA,MAAM,GAAGC,IAAI,CAAC9C,GAAG,CAAC,CAACkB,MAAM,CAACnB,GAAG,EAAEmB,MAAM,CAAClB,GAAG,CAAC,GAAG4C,QAAQ;AACvD,IAAA,CAAC,MAAM;AACLC,MAAAA,MAAM,GAAG,CAAC3B,MAAM,CAACnB,GAAG,GAAG6C,QAAQ;AACjC,IAAA;AACF,EAAA,CAAC,MAAM;AACLC,IAAAA,MAAM,GAAG3B,MAAM,CAAClB,GAAG,GAAG4C,QAAQ;AAChC,EAAA;AACA,EAAA,OAAOC,MAAM;AACf;;ACRM,SAAUE,aAAaA,CAC3BjD,KAAkB,EAClBtC,OAAA,GAOI,EAAE,EAAA;EAEN,MAAM;IAAEoF,QAAQ;IAAEC,MAAM;AAAE3B,IAAAA;AAAM,GAAE,GAAG1D,OAAO;EAE5C,IAAIqF,MAAM,KAAKlE,SAAS,EAAE;AACxB,IAAA,OAAOkE,MAAM;AACf,EAAA;AAEA;EACA,IAAIG,aAAa,GAAG,IAAI;AACxB,EAAA,KAAK,MAAMC,CAAC,IAAInD,KAAK,EAAE;IACrB,IAAIgD,IAAI,CAACI,KAAK,CAACD,CAAC,CAAC,KAAKA,CAAC,EAAE;AACvBD,MAAAA,aAAa,GAAG,KAAK;AACrB,MAAA;AACF,IAAA;AACF,EAAA;AACA,EAAA,IAAIA,aAAa,EAAE;AACjB,IAAA,OAAO,CAAC;AACV,EAAA;AACA;AACA;AACA,EAAA,MAAMG,aAAa,GAAGjC,MAAM,IAAIrB,aAAa,CAACC,KAAK,CAAC;AACpD,EAAA,OAAO6C,eAAe,CAACQ,aAAa,EAAEP,QAAQ,CAAC;AACjD;;ACtCA;;;;;;AAMM,SAAUQ,SAASA,CAACC,MAAc,EAAER,MAAc,EAAA;AACtD,EAAA,IAAIA,MAAM,KAAK,CAAC,EAAEQ,MAAM,IAAIR,MAAM;AAClC,EAAA,MAAMS,OAAO,GAAGR,IAAI,CAACI,KAAK,CAACG,MAAM,CAAC;AAClC,EAAA,IAAIC,OAAO,KAAKD,MAAM,IAAIP,IAAI,CAACS,GAAG,CAACD,OAAO,GAAGD,MAAM,CAAC,IAAIG,MAAM,CAACC,OAAO,EAAE;AACtE,IAAA,OAAOH,OAAO;AAChB,EAAA;AACA,EAAA,OAAOD,MAAM;AACf;;ACPM,SAAUK,gBAAgBA,CAACnG,IAAY,EAAEC,OAAA,GAAwB,EAAE,EAAA;EACvE,MAAM;AAAEmG,IAAAA,OAAO,GAAG,CAAC;AAAEC,IAAAA,OAAO,GAAG;AAAC,GAAE,GAAGpG,OAAO,CAAC8D,IAAI,IAAI,EAAE;EACvD,IAAIuC,MAAM,GAAGC,QAAQ;EACrB,IAAIC,KAAK,GAAG,CAACD,QAAQ;EACrB,IAAIE,MAAM,GAAGF,QAAQ;EACrB,IAAIG,KAAK,GAAG,CAACH,QAAQ;EAErB,MAAMI,KAAK,GAAG,EAAE;AAEhB,EAAA,KAAK,IAAIzE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGlC,IAAI,CAACkF,CAAC,CAAC/D,MAAM,EAAEe,CAAC,EAAE,EAAE;AACtC,IAAA,MAAMgD,CAAC,GAAGlF,IAAI,CAACkF,CAAC,CAAChD,CAAC,CAAW;AAC7B,IAAA,MAAMwD,CAAC,GAAG1F,IAAI,CAAC0F,CAAC,CAACxD,CAAC,CAAW;IAC7B,IAAIoE,MAAM,GAAGpB,CAAC,EAAE;AACdoB,MAAAA,MAAM,GAAGpB,CAAC;AACZ,IAAA;IACA,IAAIsB,KAAK,GAAGtB,CAAC,EAAE;AACbsB,MAAAA,KAAK,GAAGtB,CAAC;AACX,IAAA;IACA,IAAIuB,MAAM,GAAGf,CAAC,EAAE;AACde,MAAAA,MAAM,GAAGf,CAAC;AACZ,IAAA;IACA,IAAIgB,KAAK,GAAGhB,CAAC,EAAE;AACbgB,MAAAA,KAAK,GAAGhB,CAAC;AACX,IAAA;AACF,EAAA;AACAiB,EAAAA,KAAK,CAAC5B,IAAI,CACR,CAAA,SAAA,EAAYuB,MAAM,CAAA,CAAE,EACpB,CAAA,QAAA,EAAWE,KAAK,CAAA,CAAE,EAClB,CAAA,SAAA,EAAYC,MAAM,CAAA,CAAE,EACpB,CAAA,QAAA,EAAWC,KAAK,CAAA,CAAE,EAClB,CAAA,UAAA,EAAaN,OAAO,CAAA,CAAE,EACtB,CAAA,UAAA,EAAaC,OAAO,CAAA,CAAE,EACtB,uBAAuB,CACxB;AAED,EAAA,KAAK,IAAInE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGlC,IAAI,CAACkF,CAAC,CAAC/D,MAAM,EAAEe,CAAC,EAAE,EAAE;AACtCyE,IAAAA,KAAK,CAAC5B,IAAI,CACR,CAAA,EAAGc,SAAS,CAAC7F,IAAI,CAACkF,CAAC,CAAChD,CAAC,CAAW,EAAEkE,OAAO,CAAC,CAAA,CAAA,EAAIP,SAAS,CAAC7F,IAAI,CAAC0F,CAAC,CAACxD,CAAC,CAAW,EAAEmE,OAAO,CAAC,CAAA,CAAE,CACxF;AACH,EAAA;AACA,EAAA,OAAOM,KAAK;AACd;;AC5CM,SAAUC,uBAAuBA,CAAC5G,IAAiB,EAAEsF,MAAM,GAAG,CAAC,EAAA;AACnE,EAAA,IAAIA,MAAM,KAAK,CAAC,EAAE,OAAOtF,IAAI,CAAC6G,GAAG,CAAEjG,KAAK,IAAK2E,IAAI,CAACI,KAAK,CAAC/E,KAAK,CAAC,CAAC;AAC/D,EAAA,OAAOe,OAAO,CAAC3B,IAAI,EAAEsF,MAAM,CAAC,CAACuB,GAAG,CAAEjG,KAAK,IAAK2E,IAAI,CAACI,KAAK,CAAC/E,KAAK,CAAC,CAAC;AAChE;;ACJA;;;;;AAKA,MAAMkG,OAAO,GAAG,IAAI;AAEpB,MAAMC,YAAY,GAAe,CAC/B,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAClD,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAClD,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAClD,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAClD,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAClD,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CACnD;AAED,MAAMC,KAAK,GAAG,CAAC;AACf,MAAMC,KAAK,GAAG,CAAC;AACf,MAAMC,KAAK,GAAG,CAAC;AACf,MAAMC,KAAK,GAAG,CAAC;AACf,MAAMC,GAAG,GAAG,CAAC;AACb,MAAMC,aAAa,GAAG,GAAG;AAEzB;;;;;;;;;AASM,SAAUC,aAAaA,CAC3BtH,IAAiB,EACjBsG,MAAc,EACdiB,SAAiB,EACjBC,UAAmB,EAAA;AAEnB,EAAA,QAAQA,UAAU;AAChB,IAAA,KAAK,KAAK;AACR,MAAA,OAAOC,WAAW,CAACzH,IAAI,EAAEsG,MAAM,EAAEiB,SAAS,CAAC;AAC7C,IAAA,KAAK,KAAK;AACR,MAAA,OAAOG,gBAAgB,CAAC1H,IAAI,EAAEsG,MAAM,EAAEiB,SAAS,CAAC;AAClD,IAAA,KAAK,KAAK;AACR,MAAA,OAAOI,kBAAkB,CAAC3H,IAAI,EAAEsG,MAAM,EAAEiB,SAAS,CAAC;AACpD,IAAA,KAAK,QAAQ;AACX,MAAA,OAAOK,2BAA2B,CAAC5H,IAAI,EAAEsG,MAAM,EAAEiB,SAAS,CAAC;AAC7D,IAAA,KAAK,KAAK;AACR,MAAA,OAAOM,4BAA4B,CAAC7H,IAAI,EAAEsG,MAAM,EAAEiB,SAAS,CAAC;AAC9D,IAAA,KAAK,KAAK;AACR,MAAA,OAAOO,cAAc,CAAC9H,IAAI,EAAEsG,MAAM,EAAEiB,SAAS,CAAC;AAChD,IAAA,KAAKnG,SAAS;AACd,IAAA;AACE,MAAA,OAAOuG,kBAAkB,CAAC3H,IAAI,EAAEsG,MAAM,EAAEiB,SAAS,CAAC;AACtD;AACF;AAEA;;;;;;;AAOM,SAAUM,4BAA4BA,CAC1C7H,IAAiB,EACjBsG,MAAc,EACdiB,SAAiB,EAAA;EAEjB,OAAOE,WAAW,CAACzH,IAAI,EAAEsG,MAAM,EAAEiB,SAAS,EAAE,GAAG,CAAC;AAClD;AAEA;;;;;;;;AAQM,SAAUE,WAAWA,CACzBzH,IAAiB,EACjBsG,MAAc,EACdiB,SAAiB,EACjBQ,SAAS,GAAG,GAAG,EAAA;EAEf,IAAIC,UAAU,GAAG,EAAE;EACnB,IAAIC,CAAC,GAAG,CAAC;AACT,EAAA,MAAMC,UAAU,GAAGlI,IAAI,CAACmB,MAAM;AAC9B,EAAA,OAAO8G,CAAC,GAAGC,UAAU,GAAG,CAAC,EAAE;AACzBF,IAAAA,UAAU,IAAIG,MAAM,CAAC5C,IAAI,CAAC6C,IAAI,CAAC9B,MAAM,GAAG2B,CAAC,GAAGV,SAAS,CAAC,CAAC;IACvD,KAAK,IAAIrF,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,CAAC,EAAEA,CAAC,EAAE,EAAE;MAC1B8F,UAAU,IAAI,GAAGD,SAAS,CAAA,EAAG/H,IAAI,CAACiI,CAAC,EAAE,CAAC,CAAA,CAAE;AAC1C,IAAA;AACAD,IAAAA,UAAU,IAAIlB,OAAO;AACvB,EAAA;EACA,IAAImB,CAAC,GAAGC,UAAU,EAAE;AAClB;AACAF,IAAAA,UAAU,IAAIG,MAAM,CAAC5C,IAAI,CAAC6C,IAAI,CAAC9B,MAAM,GAAG2B,CAAC,GAAGV,SAAS,CAAC,CAAC;IACvD,KAAK,IAAIrF,CAAC,GAAG+F,CAAC,EAAE/F,CAAC,GAAGgG,UAAU,EAAEhG,CAAC,EAAE,EAAE;MACnC8F,UAAU,IAAI,GAAGD,SAAS,CAAA,EAAG/H,IAAI,CAACkC,CAAC,CAAC,CAAA,CAAE;AACxC,IAAA;AACF,EAAA;AACA,EAAA,OAAO8F,UAAU;AACnB;AAEA;;;;;;;AAOM,SAAUF,cAAcA,CAC5B9H,IAAiB,EACjBsG,MAAc,EACdiB,SAAiB,EAAA;EAEjB,IAAIS,UAAU,GAAG,EAAE;EACnB,IAAIC,CAAC,GAAG,CAAC;AACT,EAAA,MAAMC,UAAU,GAAGlI,IAAI,CAACmB,MAAM;AAE9B,EAAA,OAAO8G,CAAC,GAAGC,UAAU,GAAG,CAAC,EAAE;AACzBF,IAAAA,UAAU,IAAIG,MAAM,CAAC5C,IAAI,CAAC6C,IAAI,CAAC9B,MAAM,GAAG2B,CAAC,GAAGV,SAAS,CAAC,CAAC;IACvD,KAAK,IAAIrF,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,CAAC,EAAEA,CAAC,EAAE,EAAE;MAC1B8F,UAAU,IACPhI,IAAI,CAACiI,CAAC,CAAY,GAAG,CAAC,GAAGE,MAAM,CAACnI,IAAI,CAACiI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAA,CAAA,EAAIjI,IAAI,CAACiI,CAAC,EAAE,CAAC,CAAA,CAAE;AACjE,IAAA;AACAD,IAAAA,UAAU,IAAIlB,OAAO;AACvB,EAAA;EACA,IAAImB,CAAC,GAAGC,UAAU,EAAE;AAClB;AACAF,IAAAA,UAAU,IAAIG,MAAM,CAAC5C,IAAI,CAAC6C,IAAI,CAAC9B,MAAM,GAAG2B,CAAC,GAAGV,SAAS,CAAC,CAAC;IACvD,KAAK,IAAIrF,CAAC,GAAG+F,CAAC,EAAE/F,CAAC,GAAGgG,UAAU,EAAEhG,CAAC,EAAE,EAAE;MACnC8F,UAAU,IAAKhI,IAAI,CAACkC,CAAC,CAAY,GAAG,CAAC,GAAGiG,MAAM,CAACnI,IAAI,CAACkC,CAAC,CAAC,CAAC,GAAG,IAAIlC,IAAI,CAACkC,CAAC,CAAC,CAAA,CAAE;AACzE,IAAA;AACF,EAAA;AACA,EAAA,OAAO8F,UAAU;AACnB;AAEA;;;;;;;;;AASM,SAAUN,gBAAgBA,CAC9B1H,IAAiB,EACjBsG,MAAc,EACdiB,SAAiB,EAAA;EAEjB,IAAIS,UAAU,GAAG,EAAE;AACnB;EACA,IAAIC,CAAC,GAAG,CAAC;AACT,EAAA,MAAMC,UAAU,GAAGlI,IAAI,CAACmB,MAAM;AAC9B,EAAA,OAAO8G,CAAC,GAAGC,UAAU,GAAG,EAAE,EAAE;AAC1BF,IAAAA,UAAU,IAAIG,MAAM,CAAC5C,IAAI,CAAC6C,IAAI,CAAC9B,MAAM,GAAG2B,CAAC,GAAGV,SAAS,CAAC,CAAC;IACvD,KAAK,IAAIrF,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,EAAE,EAAEA,CAAC,EAAE,EAAE;MAC3B8F,UAAU,IAAIK,aAAa,CAACF,MAAM,CAACnI,IAAI,CAACiI,CAAC,EAAE,CAAC,CAAC,CAAC;AAChD,IAAA;AACAD,IAAAA,UAAU,IAAIlB,OAAO;AACvB,EAAA;EACA,IAAImB,CAAC,GAAGC,UAAU,EAAE;AAClB;AACAF,IAAAA,UAAU,IAAIG,MAAM,CAAC5C,IAAI,CAAC6C,IAAI,CAAC9B,MAAM,GAAG2B,CAAC,GAAGV,SAAS,CAAC,CAAC;IACvD,KAAK,IAAIrF,CAAC,GAAG+F,CAAC,EAAE/F,CAAC,GAAGgG,UAAU,EAAEhG,CAAC,EAAE,EAAE;MACnC8F,UAAU,IAAIK,aAAa,CAACF,MAAM,CAACnI,IAAI,CAACkC,CAAC,CAAC,CAAC,CAAC;AAC9C,IAAA;AACF,EAAA;AAEA,EAAA,OAAO8F,UAAU;AACnB;AAEA;;;;;;;AAOM,SAAUJ,2BAA2BA,CACzC5H,IAAiB,EACjBsG,MAAc,EACdiB,SAAiB,EAAA;EAEjB,IAAIe,IAAI,GAAG,CAAC;EACZ,IAAIC,KAAK,GAAG,CAAC;EACb,IAAIC,SAAS,GAAG,CAAC;AACjB;EACA,IAAIC,WAAW,GAAG,EAAE;EACpB,IAAIC,aAAa,GAAG,EAAE;EACtB,IAAIC,SAAS,GAAG,EAAE;AAElB;EACA,MAAMC,QAAQ,GAAG,IAAIC,KAAK,CAAC7I,IAAI,CAACmB,MAAM,GAAG,CAAC,CAAC;AAC3C,EAAA,KAAK,IAAIe,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG0G,QAAQ,CAACzH,MAAM,EAAEe,CAAC,EAAE,EAAE;AACxC0G,IAAAA,QAAQ,CAAC1G,CAAC,CAAC,GAAIlC,IAAI,CAACkC,CAAC,GAAG,CAAC,CAAY,GAAIlC,IAAI,CAACkC,CAAC,CAAY;AAC7D,EAAA;AAEA;AACA,EAAA,MAAM4G,UAAU,GAAGF,QAAQ,CAACzH,MAAM;EAClC,OAAOoH,KAAK,GAAGO,UAAU,EAAE;IACzB,IAAIN,SAAS,KAAK,CAAC,EAAE;AACnB;AACAE,MAAAA,aAAa,GAAG,CAAA,EAAGnD,IAAI,CAAC6C,IAAI,CAAC9B,MAAM,GAAGiC,KAAK,GAAGhB,SAAS,CAAC,CAAA,EAAGc,aAAa,CACtEF,MAAM,CAACnI,IAAI,CAACuI,KAAK,CAAC,CAAC,CACpB,GAAGQ,eAAe,CAACH,QAAQ,CAACL,KAAK,CAAC,CAAC9H,QAAQ,EAAE,CAAC,CAAA,CAAE;AACjDgI,MAAAA,WAAW,IAAIC,aAAa;MAC5BF,SAAS,IAAIE,aAAa,CAACvH,MAAM;AACnC,IAAA,CAAC,MAAM,IAAIyH,QAAQ,CAACL,KAAK,GAAG,CAAC,CAAC,KAAKK,QAAQ,CAACL,KAAK,CAAC,EAAE;AAClD;AACAD,MAAAA,IAAI,EAAE;AACR,IAAA,CAAC,MAAM,IAAIA,IAAI,GAAG,CAAC,EAAE;AACnB;AACAA,MAAAA,IAAI,EAAE;AACNI,MAAAA,aAAa,GAAGM,cAAc,CAACV,IAAI,CAAC7H,QAAQ,EAAE,CAAC;AAC/CgI,MAAAA,WAAW,IAAIC,aAAa;MAC5BF,SAAS,IAAIE,aAAa,CAACvH,MAAM;AACjCmH,MAAAA,IAAI,GAAG,CAAC;AACRC,MAAAA,KAAK,EAAE;AACT,IAAA,CAAC,MAAM;AACL;MACAG,aAAa,GAAGK,eAAe,CAACH,QAAQ,CAACL,KAAK,CAAC,CAAC9H,QAAQ,EAAE,CAAC;AAC3D,MAAA,IAAIiI,aAAa,CAACvH,MAAM,GAAGqH,SAAS,GAAGnB,aAAa,EAAE;AACpDoB,QAAAA,WAAW,IAAIC,aAAa;QAC5BF,SAAS,IAAIE,aAAa,CAACvH,MAAM;AACnC,MAAA,CAAC,MAAM;AACL;AACAsH,QAAAA,WAAW,IAAI3B,OAAO;QACtB6B,SAAS,GAAG,CAAA,EAAGpD,IAAI,CAAC6C,IAAI,CAAC9B,MAAM,GAAGiC,KAAK,GAAGhB,SAAS,CAAC,GAAGc,aAAa,CAClEF,MAAM,CAACnI,IAAI,CAACuI,KAAK,CAAC,CAAC,CACpB,CAAA,EAAGG,aAAa,CAAA,CAAE;QACnBD,WAAW,IAAIE,SAAS,CAAC;QACzBH,SAAS,GAAGG,SAAS,CAACxH,MAAM;AAC9B,MAAA;AACF,IAAA;AACAoH,IAAAA,KAAK,EAAE;AACT,EAAA;EACA,IAAID,IAAI,GAAG,CAAC,EAAE;IACZG,WAAW,IAAIO,cAAc,CAAC,CAACV,IAAI,GAAG,CAAC,EAAE7H,QAAQ,EAAE,CAAC;AACtD,EAAA;AACA;AACA;EACAgI,WAAW,IAAI,CAAA,EAAG3B,OAAO,CAAA,EAAGvB,IAAI,CAAC6C,IAAI,CACnC9B,MAAM,GAAGiC,KAAK,GAAGhB,SAAS,CAC3B,CAAA,EAAGc,aAAa,CAACF,MAAM,CAACnI,IAAI,CAACuI,KAAK,CAAC,CAAC,CAAC,CAAA,CAAE;AAExC,EAAA,OAAOE,WAAW;AACpB;AAEA;;;;;;;AAOM,SAAUd,kBAAkBA,CAChC3H,IAAiB,EACjBsG,MAAc,EACdiB,SAAiB,EAAA;EAEjB,IAAIgB,KAAK,GAAG,CAAC;EACb,IAAIC,SAAS,GAAG,CAAC;AACjB,EAAA,IAAItG,CAAC;EAEL,IAAIuG,WAAW,GAAG,EAAE;EACpB,IAAIC,aAAa,GAAG,EAAE;EACtB,IAAIC,SAAS,GAAG,EAAE;AAElB;EACA,MAAMC,QAAQ,GAAG,IAAIC,KAAK,CAAC7I,IAAI,CAACmB,MAAM,GAAG,CAAC,CAAC;AAC3C,EAAA,KAAKe,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG0G,QAAQ,CAACzH,MAAM,EAAEe,CAAC,EAAE,EAAE;AACpC0G,IAAAA,QAAQ,CAAC1G,CAAC,CAAC,GAAIlC,IAAI,CAACkC,CAAC,GAAG,CAAC,CAAY,GAAIlC,IAAI,CAACkC,CAAC,CAAY;AAC7D,EAAA;AAEA,EAAA,MAAM4G,UAAU,GAAGF,QAAQ,CAACzH,MAAM;EAClC,OAAOoH,KAAK,GAAGO,UAAU,EAAE;IACzB,IAAIN,SAAS,KAAK,CAAC,EAAE;AACnB;AACAE,MAAAA,aAAa,GAAG,CAAA,EAAGnD,IAAI,CAAC6C,IAAI,CAAC9B,MAAM,GAAGiC,KAAK,GAAGhB,SAAS,CAAC,CAAA,EAAGc,aAAa,CACtEF,MAAM,CAACnI,IAAI,CAACuI,KAAK,CAAC,CAAC,CACpB,GAAGQ,eAAe,CAACH,QAAQ,CAACL,KAAK,CAAC,CAAC9H,QAAQ,EAAE,CAAC,CAAA,CAAE;AACjDgI,MAAAA,WAAW,IAAIC,aAAa;MAC5BF,SAAS,IAAIE,aAAa,CAACvH,MAAM;AACnC,IAAA,CAAC,MAAM;MACLuH,aAAa,GAAGK,eAAe,CAACH,QAAQ,CAACL,KAAK,CAAC,CAAC9H,QAAQ,EAAE,CAAC;AAC3D,MAAA,IAAIiI,aAAa,CAACvH,MAAM,GAAGqH,SAAS,GAAGnB,aAAa,EAAE;AACpDoB,QAAAA,WAAW,IAAIC,aAAa;QAC5BF,SAAS,IAAIE,aAAa,CAACvH,MAAM;AACnC,MAAA,CAAC,MAAM;AACLsH,QAAAA,WAAW,IAAI3B,OAAO;QACtB6B,SAAS,GAAG,CAAA,EAAGpD,IAAI,CAAC6C,IAAI,CAAC9B,MAAM,GAAGiC,KAAK,GAAGhB,SAAS,CAAC,GAAGc,aAAa,CAClEF,MAAM,CAACnI,IAAI,CAACuI,KAAK,CAAC,CAAC,CACpB,CAAA,EAAGG,aAAa,CAAA,CAAE;QACnBD,WAAW,IAAIE,SAAS,CAAC;QACzBH,SAAS,GAAGG,SAAS,CAACxH,MAAM;AAC9B,MAAA;AACF,IAAA;AACAoH,IAAAA,KAAK,EAAE;AACT,EAAA;AACA;EACAE,WAAW,IAAI,CAAA,EAAG3B,OAAO,CAAA,EAAGvB,IAAI,CAAC6C,IAAI,CACnC9B,MAAM,GAAGiC,KAAK,GAAGhB,SAAS,CAC3B,CAAA,EAAGc,aAAa,CAACF,MAAM,CAACnI,IAAI,CAACuI,KAAK,CAAC,CAAC,CAAC,CAAA,CAAE;AAExC,EAAA,OAAOE,WAAW;AACpB;AAEA;;;;;;AAMA,SAASJ,aAAaA,CAACY,OAAe,EAAA;EACpC,IAAIC,SAAS,GAAG,EAAE;AAClB,EAAA,IAAID,OAAO,CAACE,UAAU,CAAC,GAAG,CAAC,EAAE;IAC3BD,SAAS,IAAIE,WAAW,CAACnC,KAAK,EAAEgC,OAAO,CAACI,MAAM,CAAC,CAAC,CAAC,CAAC;AAClD,IAAA,IAAIJ,OAAO,CAAC9H,MAAM,GAAG,CAAC,EAAE;AACtB+H,MAAAA,SAAS,IAAID,OAAO,CAACK,KAAK,CAAC,CAAC,CAAC;AAC/B,IAAA;AACF,EAAA,CAAC,MAAM;IACLJ,SAAS,IAAIE,WAAW,CAACpC,KAAK,EAAEiC,OAAO,CAACI,MAAM,CAAC,CAAC,CAAC,CAAC;AAClD,IAAA,IAAIJ,OAAO,CAAC9H,MAAM,GAAG,CAAC,EAAE;AACtB+H,MAAAA,SAAS,IAAID,OAAO,CAACK,KAAK,CAAC,CAAC,CAAC;AAC/B,IAAA;AACF,EAAA;AAEA,EAAA,OAAOJ,SAAS;AAClB;AAEA;;;;;AAKA,SAASH,eAAeA,CAACE,OAAe,EAAA;EACtC,IAAIM,UAAU,GAAG,EAAE;AAEnB,EAAA,IAAIN,OAAO,CAACE,UAAU,CAAC,GAAG,CAAC,EAAE;IAC3BI,UAAU,IAAIH,WAAW,CAACjC,KAAK,EAAE8B,OAAO,CAACI,MAAM,CAAC,CAAC,CAAC,CAAC;AACnD,IAAA,IAAIJ,OAAO,CAAC9H,MAAM,GAAG,CAAC,EAAE;AACtBoI,MAAAA,UAAU,IAAIN,OAAO,CAACK,KAAK,CAAC,CAAC,CAAC;AAChC,IAAA;AACF,EAAA,CAAC,MAAM;IACLC,UAAU,IAAIH,WAAW,CAAClC,KAAK,EAAE+B,OAAO,CAACI,MAAM,CAAC,CAAC,CAAC,CAAC;AACnD,IAAA,IAAIJ,OAAO,CAAC9H,MAAM,GAAG,CAAC,EAAE;AACtBoI,MAAAA,UAAU,IAAIN,OAAO,CAACK,KAAK,CAAC,CAAC,CAAC;AAChC,IAAA;AACF,EAAA;AAEA,EAAA,OAAOC,UAAU;AACnB;AAEA;;;;;AAKA,SAASP,cAAcA,CAACC,OAAe,EAAA;EACrC,IAAIO,SAAS,GAAG,EAAE;EAClBA,SAAS,IAAIJ,WAAW,CAAChC,GAAG,EAAE6B,OAAO,CAACI,MAAM,CAAC,CAAC,CAAC,CAAC;AAChD,EAAA,IAAIJ,OAAO,CAAC9H,MAAM,GAAG,CAAC,EAAE;AACtBqI,IAAAA,SAAS,IAAIP,OAAO,CAACK,KAAK,CAAC,CAAC,CAAC;AAC/B,EAAA;AAEA,EAAA,OAAOE,SAAS;AAClB;AAEA,SAASJ,WAAWA,CAAClG,GAAW,EAAEuG,KAAa,EAAA;EAC7C,OAAQ1C,YAAY,CAAC7D,GAAG,CAAc,CAAC+C,MAAM,CAACwD,KAAK,CAAC,CAAW;AACjE;;AClXM,SAAUC,aAAaA,CAAC1J,IAAY,EAAEC,OAAA,GAAwB,EAAE,EAAA;EACpE,MAAM;AAAEuH,IAAAA,UAAU,GAAG;AAAK,GAAE,GAAGvH,OAAO;EACtC,MAAM;AAAEmG,IAAAA,OAAO,GAAG,CAAC;AAAEC,IAAAA,OAAO,GAAG;AAAC,GAAE,GAAGpG,OAAO,CAAC8D,IAAI,IAAI,EAAE;AACvD,EAAA,MAAMuC,MAAM,GAAGtG,IAAI,CAACkF,CAAC,CAAC,CAAC,CAAW;EAClC,MAAMsB,KAAK,GAAGxG,IAAI,CAACkF,CAAC,CAACxB,EAAE,CAAC,EAAE,CAAW;AACrC,EAAA,MAAM+C,MAAM,GAAGzG,IAAI,CAAC0F,CAAC,CAAC,CAAC,CAAC;EACxB,MAAMgB,KAAK,GAAG1G,IAAI,CAAC0F,CAAC,CAAChC,EAAE,CAAC,EAAE,CAAC;AAC3B,EAAA,MAAMiG,QAAQ,GAAG3J,IAAI,CAACkF,CAAC,CAAC/D,MAAM;EAC9B,MAAMyI,MAAM,GAAG,CAACpD,KAAK,GAAGF,MAAM,KAAKqD,QAAQ,GAAG,CAAC,CAAC;AAChD,EAAA,MAAMhD,KAAK,GAAG,CACZ,CAAA,SAAA,EAAYL,MAAM,CAAA,CAAE,EACpB,CAAA,QAAA,EAAWE,KAAK,CAAA,CAAE,EAClB,CAAA,SAAA,EAAYC,MAAM,EAAE,EACpB,CAAA,QAAA,EAAWC,KAAK,CAAA,CAAE,EAClB,CAAA,SAAA,EAAYkD,MAAM,CAAA,CAAE,EACpB,CAAA,UAAA,EAAaxD,OAAO,CAAA,CAAE,EACtB,CAAA,UAAA,EAAaC,OAAO,CAAA,CAAE,EACtB,sBAAsB,CACvB;EAED,MAAMwD,IAAI,GAAGvC,aAAa,CACxBV,uBAAuB,CAAC5G,IAAI,CAAC0F,CAAC,EAAEW,OAAO,CAAC,EACxCC,MAAM,GAAGF,OAAO,EAChBwD,MAAM,GAAGxD,OAAO,EAChBoB,UAAU,CACX;AACD,EAAA,IAAIqC,IAAI,EAAElD,KAAK,CAAC5B,IAAI,CAAC8E,IAAI,CAAC;AAC1B,EAAA,OAAOlD,KAAK;AACd;;AC3BA;;;;;;;AAOM,SAAUmD,QAAQA,CAAC9J,IAAY,EAAEC,OAAA,GAAwB,EAAE,EAAA;EAC/D,MAAM;AAAE6D,IAAAA,IAAI,GAAG,EAAE;AAAEC,IAAAA,IAAI,GAAG,EAAE;AAAEyD,IAAAA;AAAU,GAAE,GAAGvH,OAAO;EAEpD,MAAM;AACJ+D,IAAAA,KAAK,GAAG,EAAE;AACVC,IAAAA,KAAK,GAAG,EAAE;AACVC,IAAAA,MAAM,GAAG,EAAE;AACXC,IAAAA,QAAQ,GAAG,EAAE;AACb4F,IAAAA,MAAM,GAAG,EAAE;AACXC,IAAAA,MAAM,GAAG,EAAE;IACX,GAAG5F;AAAU,GACd,GAAGL,IAAI;EAER,IAAI;IAAEqC,OAAO;AAAEC,IAAAA;AAAO,GAAE,GAAGtC,IAAI;AAE/B/D,EAAAA,IAAI,GAAG;IAAEkF,CAAC,EAAElF,IAAI,CAACkF,CAAC;IAAEQ,CAAC,EAAE1F,IAAI,CAAC0F;GAAG;EAE/B,IAAIrF,MAAM,GAAG,CAAA,QAAA,EAAW2D,KAAK;;cAEjBG,QAAQ;WACXD,MAAM;UACPD,KAAK;WACJ8F,MAAM;AACNC,SAAAA,EAAAA,MAAM,CAAA,EAAA,CAAI;AAEnB3J,EAAAA,MAAM,IAAIN,WAAW,CAACqE,UAAU,EAAE;AAAEhE,IAAAA,MAAM,EAAE;AAAI,GAAE,CAAC;AACnDC,EAAAA,MAAM,IAAIN,WAAW,CAAC+D,IAAI,CAAC;AAE3B;AAEA,EAAA,IAAI0D,UAAU,EAAE;AACdpB,IAAAA,OAAO,GAAGZ,aAAa,CAACxF,IAAI,CAACkF,CAAC,EAAE;AAAEI,MAAAA,MAAM,EAAEc;AAAO,KAAE,CAAC;AACpDC,IAAAA,OAAO,GAAGb,aAAa,CAACxF,IAAI,CAAC0F,CAAC,EAAE;AAAEJ,MAAAA,MAAM,EAAEe;AAAO,KAAE,CAAC;AACpD,IAAA,OAAO,GAAGhG,MAAM,CAAA,UAAA,EAAaL,IAAI,CAACkF,CAAC,CAAC/D,MAAM;EAC5CuI,aAAa,CAAC1J,IAAI,EAAE;AAAE+D,MAAAA,IAAI,EAAE;QAAEqC,OAAO;AAAEC,QAAAA;OAAS;AAAEmB,MAAAA;AAAU,KAAE,CAAC,CAACvC,IAAI,CAAC,IAAI,CAAC;AACrE,MAAA,CAAA;AACL,EAAA;AACA,EAAA,IAAImB,OAAO,KAAKhF,SAAS,EAAEgF,OAAO,GAAG,CAAC;AACtC,EAAA,IAAIC,OAAO,KAAKjF,SAAS,EAAEiF,OAAO,GAAG,CAAC;EACtC,IAAID,OAAO,KAAK,CAAC,EAAE;AACjBpG,IAAAA,IAAI,CAACkF,CAAC,GAAGlF,IAAI,CAACkF,CAAC,CAAC2B,GAAG,CAAEjG,KAAK,IAAKA,KAAK,GAAGwF,OAAO,CAAC;AACjD,EAAA;EACA,IAAIC,OAAO,KAAK,CAAC,EAAE;AACjBrG,IAAAA,IAAI,CAAC0F,CAAC,GAAG1F,IAAI,CAAC0F,CAAC,CAACmB,GAAG,CAAEjG,KAAK,IAAKA,KAAK,GAAGyF,OAAO,CAAC;AACjD,EAAA;AACA,EAAA,OAAO,GAAGhG,MAAM,CAAA,UAAA,EAAaL,IAAI,CAACkF,CAAC,CAAC/D,MAAM;EAC1CgF,gBAAgB,CAACnG,IAAI,EAAE;AAAE+D,IAAAA,IAAI,EAAE;MAAEqC,OAAO;AAAEC,MAAAA;AAAO;AAAE,GAAE,CAAC,CAACpB,IAAI,CAAC,IAAI,CAAC;AAC5D,MAAA,CAAA;AACP;;ACxDA;;;;;AAKM,SAAUgF,aAAaA;AAC3B;;;AAGApG,SAAiC,EACjC5D,OAAA,GAAwB,EAAE,EAAA;EAE1B,MAAM;AAAE8D,IAAAA,IAAI,GAAG,EAAE;AAAED,IAAAA,IAAI,GAAG,EAAE;AAAEoG,IAAAA,YAAY,GAAG;AAAK,GAAE,GAAGjK,OAAO;AAE9D,EAAA,MAAMkK,YAAY,GAAG;IACnBpG,IAAI;AACJD,IAAAA;AACD,GAAA;AAED,EAAA,MAAM5D,IAAI,GAAGC,MAAM,CAACD,IAAI,CAAC2D,SAAS,CAAC,CAACgD,GAAG,CAAEvG,GAAG,IAAKA,GAAG,CAAC8J,WAAW,EAAE,CAAC;EACnE,IAAI,CAACF,YAAY,IAAIhK,IAAI,CAACiB,MAAM,KAAK,CAAC,EAAE;AACtC,IAAA,MAAM+D,CAAC,GAAGrB,SAAS,CAACqB,CAAC;AACrB,IAAA,MAAMmF,MAAM,GAAGnF,CAAC,CAACN,KAAK,IAAI,GAAG;AAE7B,IAAA,IAAIf,SAAS,CAACqB,CAAC,CAACT,KAAK,EAAE;MACrB,IAAI4F,MAAM,CAACrJ,QAAQ,CAAC6C,SAAS,CAACqB,CAAC,CAACT,KAAK,CAAC,EAAE;AACtC0F,QAAAA,YAAY,CAACpG,IAAI,CAACgG,MAAM,GAAGM,MAAM;AACnC,MAAA,CAAC,MAAM;AACLF,QAAAA,YAAY,CAACpG,IAAI,CAACgG,MAAM,GAAG,CAAA,EAAGM,MAAM,CAAA,EAAA,EAAKxG,SAAS,CAACqB,CAAC,CAACT,KAAK,CAAA,CAAA,CAAG;AAC/D,MAAA;AACF,IAAA,CAAC,MAAM;AACL0F,MAAAA,YAAY,CAACpG,IAAI,CAACgG,MAAM,GAAGM,MAAM;AACnC,IAAA;AAEA,IAAA,MAAM3E,CAAC,GAAG7B,SAAS,CAAC6B,CAAC;AACrB,IAAA,MAAM4E,MAAM,GAAG5E,CAAC,CAACd,KAAK,IAAI,GAAG;AAE7B,IAAA,IAAIf,SAAS,CAAC6B,CAAC,CAACjB,KAAK,EAAE;MACrB,IAAI6F,MAAM,CAACtJ,QAAQ,CAAC6C,SAAS,CAAC6B,CAAC,CAACjB,KAAK,CAAC,EAAE;AACtC0F,QAAAA,YAAY,CAACpG,IAAI,CAACgG,MAAM,GAAGO,MAAM;AACnC,MAAA,CAAC,MAAM;AACLH,QAAAA,YAAY,CAACpG,IAAI,CAACiG,MAAM,GAAG,CAAA,EAAGM,MAAM,CAAA,EAAA,EAAKzG,SAAS,CAAC6B,CAAC,CAACjB,KAAK,CAAA,CAAA,CAAG;AAC/D,MAAA;AACF,IAAA,CAAC,MAAM;AACL0F,MAAAA,YAAY,CAACpG,IAAI,CAACiG,MAAM,GAAGM,MAAM;AACnC,IAAA;AAEA,IAAA,MAAMC,KAAK,GAAG1G,SAAS,CAACqB,CAAC,CAAClF,IAAI;AAC9B,IAAA,MAAMwK,KAAK,GAAG3G,SAAS,CAAC6B,CAAC,CAAC1F,IAAI;IAE9BoD,kBAAkB,CAACmH,KAAK,CAAC;IACzBnH,kBAAkB,CAACoH,KAAK,CAAC;AAEzB,IAAA,OAAOV,QAAQ,CAAC;AAAE5E,MAAAA,CAAC,EAAEqF,KAAK;AAAE7E,MAAAA,CAAC,EAAE8E;KAAO,EAAEL,YAAY,CAAC;AACvD,EAAA;AACA,EAAA,OAAOvG,cAAc,CAACC,SAAS,EAAE5D,OAAO,CAAC;AAC3C;;AC3DA;;;;;;AAMM,SAAUwK,aAAaA,CAC3BzK,IAAc,EACduI,KAAK,GAAG,CAAC,EAAA;AAET,EAAA,IAAI5H,UAAU,CAACX,IAAI,CAAC,EAAE;AACpB,IAAA,MAAMY,KAAK,GAAGZ,IAAI,CAAC0D,EAAE,CAAC6E,KAAK,CAAC;IAC5B,IAAI3H,KAAK,KAAKQ,SAAS,EAAE;AACvB,MAAA,OAAOR,KAAK;AACd,IAAA;AACA,IAAA,MAAM,IAAIoB,UAAU,CAAC,yCAAyC,CAAC;AACjE,EAAA;AAEA,EAAA,OAAOhC,IAAI;AACb;;ACIA,MAAM0K,WAAW,GAAG,CAAC,GAAG,EAAE,GAAG,CAA6B;AAyD1D,SAASC,aAAaA,CACpB9G,SAA0C,EAAA;AAE1C,EAAA,OAAO,GAAG,IAAIA,SAAS,IAAI,GAAG,IAAIA,SAAS;AAC7C;AAEA,SAAS+G,UAAUA,CACjB/G,SAA0C,EAAA;EAE1C,OAAO,GAAG,IAAIA,SAAS,IAAI,EAAE,GAAG,IAAIA,SAAS,CAAC;AAChD;AAKA;;;;;;AAMM,SAAUgH,kBAAkBA,CAChChH,SAAyB,EACzB5D,OAAwB,EAAA;EAExB,MAAM;IACJ8D,IAAI,EAAE+G,SAAS,GAAG,EAAE;IACpBhH,IAAI,EAAEiH,WAAW,GAAG,EAAE;IACtBvD,UAAU;AACVwD,IAAAA;AAAO,GACR,GAAG/K,OAAO;EACX,MAAM;IACJgL,KAAK;IACLjH,KAAK;IACLkH,eAAe;IACfC,KAAK;IACLC,MAAM;IACNC,OAAO;AACPC,IAAAA,eAAe,EAAEC,UAAU;AAC3BC,IAAAA,aAAa,EAAEC,QAAQ;AACvBC,IAAAA,aAAa,EAAEC,gBAAgB;IAC/BC,OAAO;AACP3H,IAAAA,KAAK,EAAE4H,QAAQ;AACf1H,IAAAA,QAAQ,EAAE2H,WAAW;AACrBC,IAAAA,SAAS,GAAGlI,SAAS,CAAC3B,CAAC,GAAG,SAAS,GAAG,QAAQ;IAC9C8J,WAAW;IACXC,aAAa;IACb,GAAGC;AAAW,GACf,GAAGlB,OAAO;AACX,EAAA,MAAMQ,aAAa,GAAGf,aAAa,CAACgB,QAAQ,IAAIF,UAAU,CAAC;EAE3D,MAAMD,eAAe,GAAGb,aAAa,CACnCc,UAAU,IAAIT,SAAS,CAAC,oBAAoB,CAAC,CAC9C;EAED,IAAI,CAACQ,eAAe,EAAE;AACpB,IAAA,MAAM,IAAI5J,KAAK,CACb,gEAAgE,CACjE;AACH,EAAA;AAEA,EAAA,MAAMyK,SAAS,GAAGtI,SAAS,CAACqB,CAAC;AAC7B,EAAA,MAAMA,CAAC,GAAGiH,SAAS,CAACnM,IAAI,CAACsJ,KAAK,EAAE;EAChC,MAAMiB,KAAK,GAAGU,KAAK,GAAG/F,CAAC,GAAGxC,SAAS,CAACwC,CAAC,EAAEoG,eAAe,CAAC;AAEvD;EACA,MAAMc,OAAO,GAAGC,aAAa,CAC3B9B,KAAK,EACLU,KAAK,EACLU,gBAAgB,EAChBH,aAAa,EACbF,eAAe,EACfW,aAAa,EACbd,KAAK,EACLC,MAAM,EACNL,WAAW,EACXlH,SAAS,CACV;AACD,EAAA,MAAMC,IAAI,GAAG;AAAE,IAAA,GAAGoI,WAAW;AAAE,IAAA,GAAGnB,WAAW;IAAE,GAAGqB;GAAS;AAE3D;AACAE,EAAAA,YAAY,CAACzI,SAAS,EAAEmI,WAAW,EAAElI,IAAI,CAAC;AAE1C;EACA,MAAMyI,OAAO,GAAGC,aAAa,CAC3BvB,KAAK,EACLV,KAAK,EACLwB,SAAS,EACTH,OAAO,EACPD,gBAAgB,EAChBT,eAAe,EACfM,aAAa,EACbxH,KAAK,EACLsH,eAAe,EACfD,OAAO,EACPS,WAAW,EACXD,QAAQ,CACT;AACD,EAAA,MAAM9H,IAAI,GAAG;AAAE,IAAA,GAAG+G,SAAS;IAAE,GAAGyB;GAAS;AAEzC;AAEA,EAAA,MAAMlM,MAAM,GAAGoM,eAAe,CAAC1I,IAAI,EAAED,IAAI,CAAC;AAE1C,EAAA,MAAM6F,QAAQ,GAAGY,KAAK,CAACpJ,MAAM;AAC7B,EAAA,MAAMmF,MAAM,GAAGiE,KAAK,CAAC,CAAC,CAAW;AACjC,EAAA,MAAMmC,OAAO,GAAGnC,KAAK,CAAC,CAAC,CAAW;AAClC,EAAA,MAAMmB,aAAa,GAAGnG,IAAI,CAACS,GAAG,CAAEuE,KAAK,CAACZ,QAAQ,GAAG,CAAC,CAAY,GAAGrD,MAAM,CAAC;EACxE,MAAMqG,UAAU,GAAGrG,MAAM,GAAGoG,OAAO,GAAGhB,aAAa,GAAG,CAAC;EACvD,MAAMkB,SAAS,GAAGtG,MAAM,GAAGoG,OAAO,GAAG,CAAC,GAAGhB,aAAa;AAEtD,EAAA,MAAMrH,MAAM,GAAG,CAAC,GAAG,CAAC;AACpB,EAAA,MAAMG,WAAW,GAAG,CAACmF,QAAQ,CAAC;AAC9B,EAAA,MAAMlF,KAAK,GAAG,CAAC0H,SAAS,CAAC1H,KAAK,KAAKwG,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;AAC1D,EAAA,MAAM1G,YAAY,GAAG,CAAC,aAAa,CAAC;AACpC,EAAA,MAAMsI,YAAY,GAAG,CAAC,MAAM,CAAC;AAC7B,EAAA,MAAMvH,MAAM,GACV,QAAQ,IAAIrF,OAAO,GACf;AAAE,IAAA,GAAGA,OAAO,CAACqF;AAAM,GAAE,GACpB,EAAmC;EAC1C,MAAMwH,WAAW,GAAG,CAACpB,aAAa,IAAI/B,QAAQ,GAAG,CAAC,CAAC,CAAC;AACpD,EAAA,MAAMrF,YAAY,GAAG,CAAC6H,SAAS,CAACvH,KAAK,CAACC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;AAEnE,EAAA,MAAMrB,KAAK,GAAG,CAACmJ,UAAU,CAAC;AAC1B,EAAA,MAAMlJ,IAAI,GAAG,CAACmJ,SAAS,CAAC;EAExB,MAAMnK,GAAG,GAAG,CAAC8C,IAAI,CAAC9C,GAAG,CAACmK,SAAS,EAAED,UAAU,CAAC,CAAC;EAC7C,MAAMnK,GAAG,GAAG,CAAC+C,IAAI,CAAC/C,GAAG,CAACoK,SAAS,EAAED,UAAU,CAAC,CAAC;AAE7C,EAAA,KAAK,MAAMrM,GAAG,IAAIoK,WAAW,EAAE;AAC7B,IAAA,MAAMhG,QAAQ,GAAGb,SAAS,CAACvD,GAAG,CAAC;IAE/B,IAAI,CAACoE,QAAQ,EAAE;MACb,IAAIpE,GAAG,KAAK,GAAG,EAAE;AACf,QAAA,MAAM,IAAIoB,KAAK,CAAC,CAAA,SAAA,EAAYpB,GAAG,sCAAsC,CAAC;AACxE,MAAA;AACA,MAAA;AACF,IAAA;IAEA,MAAMqE,IAAI,GAAGD,QAAQ,EAAEE,KAAK,CAACC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;IAClD,MAAM;MAAEtB,SAAS;AAAEI,MAAAA;AAAM,KAAE,GAAGN,gBAAgB,CAACqB,QAAQ,CAAC1E,IAAI,CAAC;IAC7DsF,MAAM,CAAChF,GAAG,CAAC,GAAGkF,aAAa,CAACd,QAAQ,CAAC1E,IAAI,EAAE;AACzCsF,MAAAA,MAAM,EAAEA,MAAM,CAAChF,GAAG,CAAC;AACnBqD,MAAAA;KACD,CAAC;AAEF,IAAA,MAAMoJ,aAAa,GAAGzH,MAAM,CAAChF,GAAG,CAAC;AACjCwM,IAAAA,WAAW,CAAC/H,IAAI,CAACgI,aAAa,IAAI,CAAC,CAAC;AACpC1I,IAAAA,MAAM,CAACU,IAAI,CAACL,QAAQ,CAACL,MAAM,KAAK/D,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AACzDgE,IAAAA,YAAY,CAACS,IAAI,CAACJ,IAAI,IAAIrE,GAAG,CAAC;IAC9BkE,WAAW,CAACO,IAAI,CAACL,QAAQ,CAAC1E,IAAI,CAACmB,MAAM,CAAC;AACtC0L,IAAAA,YAAY,CAAC9H,IAAI,CAAC,MAAM,CAAC;AACzBvB,IAAAA,KAAK,CAACuB,IAAI,CAACxB,SAAS,CAACC,KAAK,CAAC;AAC3BC,IAAAA,IAAI,CAACsB,IAAI,CAACxB,SAAS,CAACE,IAAI,CAAC;AACzBhB,IAAAA,GAAG,CAACsC,IAAI,CAACpB,MAAM,CAAClB,GAAG,CAAC;AACpBD,IAAAA,GAAG,CAACuC,IAAI,CAACpB,MAAM,CAACnB,GAAG,CAAC;AACpB+B,IAAAA,YAAY,CAACQ,IAAI,CAAC,WAAW,CAAC;IAC9BN,KAAK,CAACM,IAAI,CAACL,QAAQ,CAACD,KAAK,IAAI,WAAW,CAAC;AAC3C,EAAA;EAEA,OAAOkG,aAAa,CAAC9G,SAAS,CAAC,GAC3BmJ,gBAAgB,CACd3M,MAAM,EACNwD,SAAS,EACT;IACEQ,MAAM;AACN4I,IAAAA,OAAO,EAAE3I,YAAY;AACrB4I,IAAAA,MAAM,EAAE1I,WAAW;AACnB2I,IAAAA,OAAO,EAAEN,YAAY;IACrBrJ,KAAK;IACLC,IAAI;IACJjB,GAAG;IACHC,GAAG;IACHgC,KAAK;IACLa,MAAM;AACN8H,IAAAA,OAAO,EAAE7I,YAAY;AACrBuI,IAAAA;GACD,EACDhB,WAAW,CACZ,GACDlB,UAAU,CAAC/G,SAAS,CAAC,GACnBwJ,WAAW,CAAChN,MAAM,EAAE;IAClBkK,KAAK;AACLC,IAAAA,KAAK,EAAE3G,SAAS,CAACyJ,CAAC,CAACtN,IAAI;IACvBwH,UAAU;AACVzD,IAAAA,IAAI,EAAE;AACJwJ,MAAAA,MAAM,EAAE,IAAI;AACZC,MAAAA,MAAM,EAAE/I,KAAK,CAAC,CAAC,CAAC;AAChBgJ,MAAAA,OAAO,EAAEX,WAAW,CAAC,CAAC,CAAC;AACvBY,MAAAA,OAAO,EAAEZ,WAAW,CAAC,CAAC,CAAC;MACvBa,MAAM,EAAGpD,KAAK,CAAC,CAAC,CAAY,GAAIA,KAAK,CAAC,CAAC,CAAY;AACnDqD,MAAAA,MAAM,EAAEpK,KAAK,CAAC,CAAC,CAAC;AAChBqK,MAAAA,MAAM,EAAErK,KAAK,CAAC,CAAC,CAAC;AAChBsK,MAAAA,KAAK,EAAErK,IAAI,CAAC,CAAC,CAAC;AACdsK,MAAAA,IAAI,EAAEtL,GAAG,CAAC,CAAC,CAAC;AACZuL,MAAAA,IAAI,EAAExL,GAAG,CAAC,CAAC,CAAC;MACZyL,OAAO,EAAE1D,KAAK,CAACpJ,MAAM;AACrB+M,MAAAA,MAAM,EAAE;;AAEX,GAAA,CAAC,GACF7N,MAAM;AACd;AAEA,SAAS2M,gBAAgBA,CACvB3M,MAAc,EACdwD,SAAyB,EACzBsK,MAA2B,EAC3BhK,QAAQ,GAAG,EAAE,EAAA;EAEb,MAAM;IACJE,MAAM;IACN4I,OAAO;IACPC,MAAM;IACN1J,KAAK;IACLC,IAAI;IACJjB,GAAG;IACHC,GAAG;IACHgC,KAAK;IACL2I,OAAO;IACPD,OAAO;IACPL,WAAW;IACXtF,UAAU;AACVlC,IAAAA;AAAM,GACP,GAAG6I,MAAM;EAEV9N,MAAM,IAAI,cAAc8D,QAAQ;AACnB8I,aAAAA,EAAAA,OAAO,CAAChI,IAAI,CAAC,GAAG,CAAC;AACjBZ,aAAAA,EAAAA,MAAM,CAACY,IAAI,CAAC,GAAG,CAAC;AAChBmI,aAAAA,EAAAA,OAAO,CAACnI,IAAI,CAAC,GAAG,CAAC;AACjBkI,aAAAA,EAAAA,OAAO,CAAClI,IAAI,CAAC,GAAG,CAAC;AACjBiI,aAAAA,EAAAA,MAAM,CAACjI,IAAI,CAAC,GAAG,CAAC;AAChBR,aAAAA,EAAAA,KAAK,CAACQ,IAAI,CAAC,GAAG,CAAC;AACf6H,aAAAA,EAAAA,WAAW,CAAC7H,IAAI,CAAC,GAAG,CAAC;AACrBzB,aAAAA,EAAAA,KAAK,CAACyB,IAAI,CAAC,GAAG,CAAC;AACfxB,aAAAA,EAAAA,IAAI,CAACwB,IAAI,CAAC,GAAG,CAAC;AACdzC,aAAAA,EAAAA,GAAG,CAACyC,IAAI,CAAC,GAAG,CAAC;AACbxC,aAAAA,EAAAA,GAAG,CAACwC,IAAI,CAAC,GAAG,CAAC,CAAA,EAAA,CAAI;EAE9B,KAAK,MAAM3E,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAU,EAAE;AACrC,IAAA,MAAMoE,QAAQ,GAAGb,SAAS,CAACvD,GAAG,CAAC;IAE/B,IAAI,CAACoE,QAAQ,EAAE;AAEftB,IAAAA,kBAAkB,CAACsB,QAAQ,CAAC1E,IAAI,CAAC;IACjCK,MAAM,IAAI,aAAaC,GAAG,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA,EAAA,CAAI;IAC9CD,MAAM,IAAI,sBAAsBC,GAAG,KAAK,GAAG,GAAG,MAAM,GAAG,MAAM,CAAA,YAAA,CAAc;IAC3ED,MAAM,IAAIiH,aAAa,CACrBV,uBAAuB,CAAClC,QAAQ,CAAC1E,IAAI,EAAEsF,MAAM,CAAChF,GAAG,CAAC,CAAC,EACnDkD,KAAK,CAAC,CAAC,CAAC,GAAGC,IAAI,CAAC,CAAC,CAAC,GAAGyJ,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAClC1J,KAAK,CAAC,CAAC,CAAC,GAAGC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAC3B+D,UAAU,CACX;AACDnH,IAAAA,MAAM,IAAI,IAAI;AAChB,EAAA;EAEAA,MAAM,IAAI,CAAA,eAAA,EAAkB8D,QAAQ,CAAA,EAAA,CAAI;AACxC9D,EAAAA,MAAM,IAAI,QAAQ;AAClB,EAAA,OAAOA,MAAM;AACf;AAEA,SAASgN,WAAWA,CAAChN,MAAc,EAAEJ,OAAY,EAAA;EAC/C,MAAM;IAAEsK,KAAK;IAAEC,KAAK;IAAEzG,IAAI;AAAEyD,IAAAA;AAAU,GAAE,GAAGvH,OAAO;AAClDI,EAAAA,MAAM,IAAIN,WAAW,CAACgE,IAAI,EAAE;AAAE3D,IAAAA,MAAM,EAAE;AAAI,GAAE,CAAC;EAC7C,OAAO,CAAA,EAAGC,MAAM,CAAA,EAAGiH,aAAa,CAC9BV,uBAAuB,CAAC4D,KAAK,EAAEzG,IAAI,CAAC2J,OAAO,CAAC,EAC5CnD,KAAK,CAACpJ,MAAM,GAAG,CAAC,EAChB,EAAE,EACFqG,UAAU,CACX;AACI,MAAA,CAAA;AACP;AAEA,SAAS6E,aAAaA,CACpB9B,KAAkB,EAClBU,KAAc,EACdU,gBAAoC,EACpCH,aAAqB,EACrBF,eAAuB,EACvBW,aAAiC,EACjCd,KAAyB,EACzBC,MAA0B,EAC1BL,WAAgC,EAChClH,SAAyB,EAAA;AAEzB,EAAA,MAAMuI,OAAO,GAAQ;AACnBgC,IAAAA,MAAM,EAAG7D,KAAK,CAAC,CAAC,CAAY,GAAGe;AAChC,GAAA;AACD+C,EAAAA,QAAQ,CAACjC,OAAO,EAAE,IAAI,EAAET,gBAAgB,CAAC;AACzC0C,EAAAA,QAAQ,CAACjC,OAAO,EAAE,KAAK,EAAEZ,aAAa,CAAC;AAEvC,EAAA,IAAIP,KAAK,EAAE;AACToD,IAAAA,QAAQ,CAACjC,OAAO,EAAE,QAAQ,EAAEH,aAAa,CAAC;AAC1CoC,IAAAA,QAAQ,CAACjC,OAAO,EAAE,OAAO,EAAEjB,KAAK,CAAC;AACjCkD,IAAAA,QAAQ,CAACjC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC;AAClCiC,IAAAA,QAAQ,CAACjC,OAAO,EAAE,QAAQ,EAAEhB,MAAM,CAAC;AACrC,EAAA;AACAiD,EAAAA,QAAQ,CAACjC,OAAO,EAAE,QAAQ,EAAEvI,SAAS,CAAC3B,CAAC,GAAG,EAAE,GAAG6I,WAAW,CAACuD,MAAM,CAAC;AAClE,EAAA,OAAOlC,OAAO;AAChB;AAEA,SAASI,aAAaA,CACpBvB,KAAc,EACdV,KAAkB,EAClBwB,SAAiB,EACjBH,OAA2B,EAC3BD,gBAAoC,EACpCT,eAAmC,EACnCM,aAAiC,EACjCxH,KAAyB,EACzBsH,eAAuB,EACvBD,OAA2B,EAC3BS,WAA+B,EAC/BD,QAA4B,EAAA;AAE5B,EAAA,IAAI0C,cAAc;EAClB,IAAIrD,eAAe,IAAIM,aAAa,EAAE;AACpC,IAAA,MAAMgD,MAAM,GAAGtD,eAAe,GAAGM,aAAa;IAC9C+C,cAAc,GAAGC,MAAM,GAAG,GAAG,IAAI7C,gBAAgB,IAAI,CAAC,CAAC;AACzD,EAAA,CAAC,MAAM;AACL4C,IAAAA,cAAc,GAAGhE,KAAK,CAAC7G,EAAE,CAAC,EAAE,CAAC;AAC/B,EAAA;EAEA,MAAM6I,OAAO,GAAwB,EAAE;EACvC8B,QAAQ,CACN9B,OAAO,EACP,kBAAkB,EAClB,CAAA,UAAA,EAAapE,MAAM,CAACyD,OAAO,CAAC,KAAKX,KAAK,GAAGV,KAAK,CAACpJ,MAAM,GAAG,CAAC,CAAA,EAAA,EAAKoN,cAAc,CAAA,CAAE,CAC/E;AACDF,EAAAA,QAAQ,CAAC9B,OAAO,EAAE,OAAO,EAAEvI,KAAK,CAAC;AACjCqK,EAAAA,QAAQ,CAAC9B,OAAO,EAAE,oBAAoB,EAAEjB,eAAe,CAAC;EACxD+C,QAAQ,CAAC9B,OAAO,EAAE,kBAAkB,EAAE9B,aAAa,CAACY,OAAO,CAAC,CAAC;AAC7DgD,EAAAA,QAAQ,CAAC9B,OAAO,EAAE,UAAU,EAAET,WAAW,CAAC;AAC1CuC,EAAAA,QAAQ,CAAC9B,OAAO,EAAE,WAAW,EAAER,SAAS,CAAC;AACzCsC,EAAAA,QAAQ,CAAC9B,OAAO,EAAE,UAAU,EAAEX,OAAO,CAAC;AACtCyC,EAAAA,QAAQ,CAAC9B,OAAO,EAAE,OAAO,EAAEV,QAAQ,CAAC;AAEpC,EAAA,OAAOU,OAAO;AAChB;AAEA,SAASD,YAAYA,CACnBzI,SAAyB,EACzBmI,WAA+B,EAC/BI,OAA4B,EAAA;AAE5B,EAAA,MAAMqC,KAAK,GAAG,CAAC,IAAIzC,WAAW,IAAI,CAAC,CAAC;EACpC,IAAIyC,KAAK,KAAK,CAAC,EAAE;AACf,IAAA;AACF,EAAA;AAEAJ,EAAAA,QAAQ,CAACjC,OAAO,EAAE,SAAS,EAAE,CAAC7G,IAAI,CAACmJ,IAAI,CAACD,KAAK,CAAC,CAAC;EAC/C/L,SAAS,CAACmB,SAAS,CAACyJ,CAAC,EAAEtN,IAAI,IAAI,EAAE,EAAEyO,KAAK,EAAE;AACxCvN,IAAAA,MAAM,EAAE2C,SAAS,CAACyJ,CAAC,EAAEtN;GACtB,CAAC;EACF,IAAI6D,SAAS,CAAC3B,CAAC,EAAE;IACfQ,SAAS,CAACmB,SAAS,CAAC3B,CAAC,EAAElC,IAAI,IAAI,EAAE,EAAEyO,KAAK,EAAE;AACxCvN,MAAAA,MAAM,EAAE2C,SAAS,CAAC3B,CAAC,EAAElC;KACtB,CAAC;AACJ,EAAA;AACF;AAEA,SAASyM,eAAeA,CAAC1I,IAAyB,EAAED,IAAyB,EAAA;EAC3E,MAAM;AACJ6K,IAAAA,KAAK,GAAG,EAAE;AACVC,IAAAA,KAAK,GAAG,EAAE;AACVC,IAAAA,MAAM,GAAG,EAAE;AACXC,IAAAA,QAAQ,GAAG,EAAE;IACbC,SAAS;IACT,GAAG3K;AAAU,GACd,GAAGL,IAAI;EACR,IAAI1D,MAAM,GAAG,CAAA,QAAA,EAAWsO,KAAK;;eAEhBG,QAAQ;gBACPC,SAAS;WACdF,MAAM;AACPD,QAAAA,EAAAA,KAAK,CAAA,EAAA,CAAI;AAEjBvO,EAAAA,MAAM,IAAIN,WAAW,CAACqE,UAAU,EAAE;AAAEhE,IAAAA,MAAM,EAAE;AAAI,GAAE,CAAC;AACnDC,EAAAA,MAAM,IAAIN,WAAW,CAAC+D,IAAI,CAAC;AAC3B,EAAA,OAAOzD,MAAM;AACf;AAEA,SAASgO,QAAQA,CACfW,MAAW,EACXrK,IAAY,EACZ/D,KAAmE,EAAA;EAEnE,IAAIA,KAAK,KAAKQ,SAAS,EAAE;AACzB4N,EAAAA,MAAM,CAACrK,IAAI,CAAC,GAAG8F,aAAa,CAAC7J,KAAK,CAAC;AACrC;;AC/cM,SAAUqO,mBAAmBA,CACjCnM,MAAoB,EACpB7C,OAAA,GAMI,EAAE,EAAA;EAEN,MAAM;IAAEoF,QAAQ;IAAEC,MAAM;AAAE3B,IAAAA;AAAM,GAAE,GAAG1D,OAAO;EAE5C,IAAIqF,MAAM,KAAKlE,SAAS,EAAE;AACxB,IAAA,OAAOkE,MAAM;AACf,EAAA;AAEA;EACA,IAAIG,aAAa,GAAG,IAAI;AACxB,EAAA,KAAK,MAAMvC,GAAG,IAAIJ,MAAM,EAAE;AACxB,IAAA,KAAK,MAAM4C,CAAC,IAAIxC,GAAG,EAAE;MACnB,IAAIqC,IAAI,CAACI,KAAK,CAACD,CAAC,CAAC,KAAKA,CAAC,EAAE;AACvBD,QAAAA,aAAa,GAAG,KAAK;AACrB,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACA,EAAA,IAAIA,aAAa,EAAE;AACjB,IAAA,OAAO,CAAC;AACV,EAAA;AACA;AACA;AACA,EAAA,MAAMG,aAAa,GAAGjC,MAAM,IAAId,aAAa,CAACC,MAAM,CAAC;AACrD,EAAA,OAAOsC,eAAe,CAACQ,aAAa,EAAEP,QAAQ,CAAC;AACjD;;ACpBA;;;;;;;AAOM,SAAU6J,kBAAkBA,CAChCrL,SAAyB,EACzB5D,OAAwB,EAAA;EAExB,MAAM;IAAE+K,OAAO;AAAEjH,IAAAA,IAAI,GAAG,EAAE;AAAED,IAAAA,IAAI,GAAG,EAAE;AAAE0D,IAAAA,UAAU,GAAG;AAAQ,GAAE,GAAGvH,OAAO;AAExE,EAAA,MAAMqF,MAAM,GACV,QAAQ,IAAIrF,OAAO,GACf;AAAE,IAAA,GAAGA,OAAO,CAACqF;AAAM,GAAE,GACpB,EAAmC;EAE1C,MAAM;AACJtB,IAAAA,KAAK,GAAG,EAAE;AACVC,IAAAA,KAAK,GAAG,EAAE;AACVC,IAAAA,MAAM,GAAG,EAAE;AACXC,IAAAA,QAAQ,GAAG,cAAc;IACzB,GAAGgL;AAAS,GACb,GAAGnE,OAAO;EAEX,MAAM3G,MAAM,GAAG,EAAE;EACjB,MAAMC,YAAY,GAAG,EAAE;EACvB,MAAMC,YAAY,GAAG,EAAE;EACvB,MAAMC,WAAW,GAAG,EAAE;EACtB,MAAMC,KAAK,GAAG,EAAE;EAChB,MAAMjB,KAAK,GAAG,EAAE;EAChB,MAAMC,IAAI,GAAG,EAAE;EACf,MAAMjB,GAAG,GAAG,EAAE;EACd,MAAMC,GAAG,GAAG,EAAE;EACd,MAAM2M,OAAO,GAAG,EAAE;EAElB,MAAMlP,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAgC;AAE3D,EAAA,KAAK,IAAIgC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGhC,IAAI,CAACiB,MAAM,EAAEe,CAAC,EAAE,EAAE;AACpC,IAAA,MAAM5B,GAAG,GAAGJ,IAAI,CAACgC,CAAC,CAAyB;AAC3C,IAAA,MAAMwC,QAAQ,GAAGb,SAAS,CAACvD,GAAG,CAAC;IAC/B,IAAI,CAACoE,QAAQ,EAAE,MAAM,IAAIhD,KAAK,CAAC,oCAAoC,CAAC;IAEpE,MAAMiD,IAAI,GAAGD,QAAQ,EAAEE,KAAK,CAACC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;IAClD,MAAMC,IAAI,GAAGJ,QAAQ,EAAEE,KAAK,CAACC,OAAO,CAAC,sBAAsB,EAAE,UAAU,CAAC;IAExE,MAAM;MAAEtB,SAAS;AAAEI,MAAAA;AAAM,KAAE,GAAGN,gBAAgB,CAACqB,QAAQ,CAAC1E,IAAI,CAAC;IAC7D,IAAI,CAACG,MAAM,CAACkP,MAAM,CAAC/J,MAAM,EAAEhF,GAAG,CAAC,EAAE;MAC/BgF,MAAM,CAAChF,GAAG,CAAC,GAAGgP,eAAe,CAAC5K,QAAQ,CAAC1E,IAAI,EAAE2D,MAAM,CAAC;AACtD,IAAA;IAEAU,MAAM,CAACU,IAAI,CAACL,QAAQ,CAACL,MAAM,IAAI/D,GAAG,CAAC;AACnCgE,IAAAA,YAAY,CAACS,IAAI,CAACJ,IAAI,IAAIrE,GAAG,CAAC;IAC9BkE,WAAW,CAACO,IAAI,CAACL,QAAQ,CAAC1E,IAAI,CAACmB,MAAM,CAAC;AACtCqC,IAAAA,KAAK,CAACuB,IAAI,CAACxB,SAAS,CAACC,KAAK,CAAC;AAC3BC,IAAAA,IAAI,CAACsB,IAAI,CAACxB,SAAS,CAACE,IAAI,CAAC;AACzBhB,IAAAA,GAAG,CAACsC,IAAI,CAACpB,MAAM,CAAClB,GAAG,CAAC;AACpBD,IAAAA,GAAG,CAACuC,IAAI,CAACpB,MAAM,CAACnB,GAAG,CAAC;AACpB4M,IAAAA,OAAO,CAACrK,IAAI,CAACO,MAAM,CAAChF,GAAG,CAAC,CAAC;AAEzB,IAAA,IAAIoE,QAAQ,CAACM,WAAW,KAAK5D,SAAS,EAAE;MACtCmD,YAAY,CAACQ,IAAI,CAACL,QAAQ,CAACM,WAAW,GAAG,WAAW,GAAG,aAAa,CAAC;AACvE,IAAA,CAAC,MAAM;MACLT,YAAY,CAACQ,IAAI,CACfL,QAAQ,CAACM,WAAW,KAAK5D,SAAS,GAC9B,CAACsD,QAAQ,CAACM,WAAW,GACrB9C,CAAC,KAAK,CAAC,GACL,aAAa,GACb,WAAW,CAClB;AACH,IAAA;IAEAuC,KAAK,CAACM,IAAI,CAACL,QAAQ,CAACD,KAAK,IAAIK,IAAI,IAAI,EAAE,CAAC;AAC1C,EAAA;EAEA,IAAIzE,MAAM,GAAG,CAAA,QAAA,EAAW2D,KAAK;;cAEjBG,QAAQ;;WAEXD,MAAM;AACPD,QAAAA,EAAAA,KAAK,CAAA,EAAA,CAAI;AAEjB5D,EAAAA,MAAM,IAAIN,WAAW,CAACgE,IAAI,EAAE;AAAE3D,IAAAA,MAAM,EAAE;AAAI,GAAE,CAAC;EAC7CC,MAAM,IAAIN,WAAW,CAAC;AAAE,IAAA,GAAGoP,SAAS;IAAE,GAAGrL;AAAI,GAAE,CAAC;AAEhD,EAAA,IAAIyG,KAAK,GAAG1G,SAAS,CAACqB,CAAC,CAAClF,IAAI;AAC5B,EAAA,IAAIwK,KAAK,GAAG3G,SAAS,CAAC6B,CAAC,CAAC1F,IAAI;EAC5BoD,kBAAkB,CAACmH,KAAK,CAAC;EACzBnH,kBAAkB,CAACoH,KAAK,CAAC;EACzB+E,wBAAwB,CAACzL,IAAI,CAAC;EAE9B,MAAM0L,KAAK,GAAG3L,SAAS,CAAC4L,CAAC,EAAEzP,IAAI,IAAI,EAAE;EACrCmD,WAAW,CAACqM,KAAK,CAAC;EAElB,MAAM;IAAEE,MAAM;IAAEC,QAAQ;AAAEC,IAAAA;AAAS,GAAE,GAAGC,mBAAmB,CAACxL,MAAM,CAAC;AAEnE,EAAA,MAAMyL,IAAI,GAAG3H,MAAM,CAACrE,IAAI,CAACiM,IAAI,CAAC;AAC9B,EAAA,MAAMC,IAAI,GAAG7H,MAAM,CAACrE,IAAI,CAACmM,IAAI,CAAC;AAC9B,EAAA,MAAM5E,OAAO,GAAG,IAAIxC,KAAK,CAAC,CAAC,CAAC;AAC5BwC,EAAAA,OAAO,CAACqE,MAAM,CAAC,GAAGI,IAAI;AACtBzE,EAAAA,OAAO,CAACsE,QAAQ,CAAC,GAAGK,IAAI;AAExB,EAAA,MAAME,IAAI,GAAGjK,MAAM,CAACnC,IAAI,CAACqM,IAAI,CAAC;AAC9B,EAAA,MAAMC,IAAI,GAAGnK,MAAM,CAACnC,IAAI,CAACuM,IAAI,CAAC;AAC9B,EAAA,MAAMC,mBAAmB,GAAG;AAC1BC,IAAAA,OAAO,EAAE;MAAEb,MAAM;AAAEC,MAAAA;KAAU;IAC7BO,IAAI;AACJE,IAAAA;AACD,GAAA;EAED/P,MAAM,IAAI,cAAc8D,QAAQ;AACnBG,aAAAA,EAAAA,YAAY,CAACW,IAAI,CAAC,GAAG,CAAC;AACtBZ,aAAAA,EAAAA,MAAM,CAACY,IAAI,CAAC,GAAG,CAAC;AAChBV,aAAAA,EAAAA,YAAY,CAACU,IAAI,CAAC,GAAG,CAAC;AACtBT,aAAAA,EAAAA,WAAW,CAACS,IAAI,CAAC,GAAG,CAAC;AACrBoG,aAAAA,EAAAA,OAAO,CAACpG,IAAI,CAAC,GAAG,CAAC;AACjBR,aAAAA,EAAAA,KAAK,CAACQ,IAAI,CAAC,GAAG,CAAC;AACfmK,aAAAA,EAAAA,OAAO,CAACnK,IAAI,CAAC,GAAG,CAAC;AACjBuL,aAAAA,EAAAA,YAAY,CAAChN,KAAK,EAAE8M,mBAAmB,CAAC;AACxCE,aAAAA,EAAAA,YAAY,CAAC/M,IAAI,EAAE6M,mBAAmB,CAAC;AACvCE,aAAAA,EAAAA,YAAY,CAAChO,GAAG,EAAE8N,mBAAmB,CAAC;AACtCE,aAAAA,EAAAA,YAAY,CAAC/N,GAAG,EAAE6N,mBAAmB,CAAC,CAAA,EAAA,CAAI;AACvDjQ,EAAAA,MAAM,IAAI,CAAA,8BAAA,CAAgC;AAC1CA,EAAAA,MAAM,IAAI,gBAAgB;AAE1B,EAAA,IAAIH,IAAI,CAACwP,MAAM,CAAC,KAAK,GAAG,EAAE;IACxB,CAAClF,KAAK,EAAED,KAAK,CAAC,GAAG,CAACA,KAAK,EAAEC,KAAK,CAAC;AACjC,EAAA;EACA,MAAMiG,YAAY,GAAIpM,MAAM,CAACqL,MAAM,CAAY,CAACgB,WAAW,EAAE;EAC7D,MAAMC,cAAc,GAAItM,MAAM,CAACsL,QAAQ,CAAY,CAACe,WAAW,EAAE;AAEjE,EAAA,MAAMjK,MAAM,GAAI+D,KAAK,CAAC,CAAC,CAAY,GAAG4F,IAAI;EAC1C,MAAM1J,KAAK,GAAI8D,KAAK,CAAC9G,EAAE,CAAC,EAAE,CAAY,GAAG0M,IAAI;AAC7C,EAAA,MAAM9J,MAAM,GAAGiE,KAAK,CAAC,CAAC,CAAW;EACjC,MAAM/D,KAAK,GAAG+D,KAAK,CAAC7G,EAAE,CAAC,EAAE,CAAW;AACpC,EAAA,MAAMkG,MAAM,GAAG,CAACpD,KAAK,GAAGF,MAAM,KAAKiE,KAAK,CAACpJ,MAAM,GAAG,CAAC,CAAC;AACpD,EAAA,MAAMyP,MAAM,GAAG,CAAClK,KAAK,GAAGD,MAAM,KAAK+D,KAAK,CAACrJ,MAAM,GAAG,CAAC,CAAC;AAEpD,EAAA,MAAM0P,SAAS,GAAG,IAAIvP,YAAY,CAAC,CAAC,CAAC;AACrCuP,EAAAA,SAAS,CAACnB,MAAM,CAAC,GAAGpJ,MAAM,GAAG4J,IAAI;AACjCW,EAAAA,SAAS,CAAClB,QAAQ,CAAC,GAAGlJ,MAAM;AAE5B,EAAA,MAAMJ,OAAO,GAAGf,MAAM,CAACI,CAAC,IAAI,CAAC;AAC7B,EAAA,MAAMU,OAAO,GAAGd,MAAM,CAACJ,CAAC,IAAI,CAAC;AAC7B,EAAA,MAAM4L,OAAO,GAAGxL,MAAM,CAACmK,CAAC,IAAI,CAAC;AAE7B,EAAA,KAAK,IAAIlH,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGiH,KAAK,CAACrO,MAAM,EAAEoH,KAAK,EAAE,EAAE;AACjD,IAAA,MAAMrF,GAAG,GAAGsM,KAAK,CAACjH,KAAK,CAAgB;AACvCsI,IAAAA,SAAS,CAACjB,SAAS,CAAC,GAAG1M,GAAG,CAAC,CAAC,CAAW;AACvC7C,IAAAA,MAAM,IAAI,CAAA,QAAA,EAAWsQ,cAAc,CAAA,CAAA,EACjC,CAAClK,MAAM,GAAGmK,MAAM,GAAGrI,KAAK,IAAIlC,OAC9B,CAAA,EAAA,CAAI;IACJhG,MAAM,IAAI,aAAawQ,SAAS,CAAC5L,IAAI,CAAC,GAAG,CAAC,CAAA,EAAA,CAAI;IAC9C5E,MAAM,IAAI,CAAA,eAAA,EAAkBoQ,YAAY,CAAA,oBAAA,CAAsB;AAC9DpQ,IAAAA,MAAM,IAAIiH,aAAa,CACrBV,uBAAuB,CAAC1D,GAAG,EAAE4N,OAAO,CAAC,EACrCxK,MAAM,GAAGF,OAAO,EAChBwD,MAAM,GAAGxD,OAAO,EAChBoB,UAAU,CACX;AACDnH,IAAAA,MAAM,IAAI,IAAI;AAChB,EAAA;AAEA,EAAA,OAAOA,MAAM;AACf;AAEA,SAASmQ,YAAYA,CACnB9L,QAAkB,EAClBzE,OAIC,EAAA;EAED,MAAM;IAAEiQ,IAAI;AAAEE,IAAAA;AAAI,GAAE,GAAGnQ,OAAO;EAC9B,MAAM;IAAEyP,MAAM;AAAEC,IAAAA;GAAU,GAAG1P,OAAO,CAACsQ,OAAO;AAC5C,EAAA,MAAMQ,IAAI,GAAGrM,QAAQ,CAAC4E,KAAK,EAAE;EAC7ByH,IAAI,CAACrB,MAAM,CAAC,GAAIqB,IAAI,CAACrB,MAAM,CAAY,GAAGQ,IAAI;EAC9Ca,IAAI,CAACpB,QAAQ,CAAC,GAAIoB,IAAI,CAACpB,QAAQ,CAAY,GAAGS,IAAI;AAClD,EAAA,OAAOW,IAAI,CAAC9L,IAAI,CAAC,GAAG,CAAC;AACvB;AAEA,SAAS4K,mBAAmBA,CAACmB,KAAe,EAAA;AAC1C,EAAA,MAAM3M,MAAM,GAAG2M,KAAK,CAACnK,GAAG,CAAEoK,IAAI,IAAKA,IAAI,CAACP,WAAW,EAAE,CAAC;EACtD,MAAMhB,MAAM,GAAGrL,MAAM,CAACrD,QAAQ,CAAC,IAAI,CAAC,GAChCqD,MAAM,CAAC6M,OAAO,CAAC,IAAI,CAAC,GACpB7M,MAAM,CAAC6M,OAAO,CAAC,IAAI,CAAC;EACxB,MAAMvB,QAAQ,GAAGtL,MAAM,CAACrD,QAAQ,CAAC,IAAI,CAAC,GAClCqD,MAAM,CAAC6M,OAAO,CAAC,IAAI,CAAC,GACpB7M,MAAM,CAAC6M,OAAO,CAAC,IAAI,CAAC;EACxB,IAAIxB,MAAM,KAAK,EAAE,IAAIC,QAAQ,KAAK,EAAE,EAAE;AACpC,IAAA,MAAM,IAAIjO,KAAK,CACb,8DAA8D,CAC/D;AACH,EAAA;EACA,OAAO;IAAEgO,MAAM;IAAEC,QAAQ;AAAEC,IAAAA,SAAS,EAAE,CAAC,GAAGF,MAAM,GAAGC;GAAU;AAC/D;AAEA,SAASJ,wBAAwBA,CAACzL,IAAyB,EAAA;EACzD,MAAMqN,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAE7C,EAAA,KAAK,MAAM7Q,GAAG,IAAI6Q,IAAI,EAAE;AACtB,IAAA,MAAMvQ,KAAK,GAAGkD,IAAI,CAACxD,GAAG,CAAC;IACvB,IAAI,CAACM,KAAK,EAAE;AACV,MAAA,MAAM,IAAIc,KAAK,CAAC,CAAA,EAAGpB,GAAG,oCAAoC,CAAC;AAC7D,IAAA;AACF,EAAA;AACF;AAEA,SAASgP,eAAeA,CAACtP,IAAgC,EAAE2D,MAAc,EAAA;EACvE,OAAOhD,UAAU,CAACX,IAAI,CAAC,CAAC,CAAC,CAAC,GACtBiP,mBAAmB,CAACjP,IAAoB,EAAE;AAAE2D,IAAAA;AAAM,GAAE,CAAC,GACrD6B,aAAa,CAACxF,IAAmB,EAAE;AAAE2D,IAAAA;AAAM,GAAE,CAAC;AACpD;;","x_google_ignoreList":[1,2,3,4,5,6,7,8,9]}