coinley-test 0.1.21 → 0.1.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"index.esm.js","sources":["../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/jsx-runtime.js","../src/contexts/WalletContext.jsx","../node_modules/qrcode.react/lib/esm/index.js","../src/components/EnhancedQRCode.jsx","../src/assets/Logomark.png","../src/components/EnhancedSimpleCoinleyPayment.jsx","../src/CoinleyProvider.jsx","../src/PaymentAPI.js","../src/CoinleyPayment.jsx","../src/components/SimpleCoinleyPayment.jsx","../node_modules/react-dom/client.js","../src/vanilla/index.js","../src/index.js"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","// src/contexts/WalletContext.js\nimport React, { createContext, useContext, useReducer, useCallback } from 'react';\n\n// Wallet action types\nconst WALLET_ACTIONS = {\n SET_CONNECTING: 'SET_CONNECTING',\n SET_CONNECTED: 'SET_CONNECTED',\n SET_DISCONNECTED: 'SET_DISCONNECTED',\n SET_ERROR: 'SET_ERROR',\n SET_AVAILABLE_WALLETS: 'SET_AVAILABLE_WALLETS',\n CLEAR_ERROR: 'CLEAR_ERROR',\n SET_CHAIN_ID: 'SET_CHAIN_ID',\n SET_BALANCE: 'SET_BALANCE'\n};\n\n// Initial state\nconst initialState = {\n isConnected: false,\n isConnecting: false,\n account: null,\n chainId: null,\n walletType: null,\n balance: null,\n error: null,\n availableWallets: []\n};\n\n// Wallet reducer\nconst walletReducer = (state, action) => {\n switch (action.type) {\n case WALLET_ACTIONS.SET_CONNECTING:\n return {\n ...state,\n isConnecting: true,\n error: null\n };\n case WALLET_ACTIONS.SET_CONNECTED:\n return {\n ...state,\n isConnected: true,\n isConnecting: false,\n account: action.payload.account,\n chainId: action.payload.chainId,\n walletType: action.payload.walletType,\n error: null\n };\n case WALLET_ACTIONS.SET_DISCONNECTED:\n return {\n ...initialState,\n availableWallets: state.availableWallets\n };\n case WALLET_ACTIONS.SET_ERROR:\n return {\n ...state,\n isConnecting: false,\n error: action.payload\n };\n case WALLET_ACTIONS.CLEAR_ERROR:\n return {\n ...state,\n error: null\n };\n case WALLET_ACTIONS.SET_AVAILABLE_WALLETS:\n return {\n ...state,\n availableWallets: action.payload\n };\n case WALLET_ACTIONS.SET_CHAIN_ID:\n return {\n ...state,\n chainId: action.payload\n };\n case WALLET_ACTIONS.SET_BALANCE:\n return {\n ...state,\n balance: action.payload\n };\n default:\n return state;\n }\n};\n\n// Network configurations\nconst NETWORKS = {\n ethereum: {\n id: '1',\n name: 'Ethereum',\n shortName: 'ethereum',\n chainId: '0x1',\n rpcUrl: 'https://mainnet.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161',\n explorerUrl: 'https://etherscan.io',\n nativeCurrency: {\n name: 'Ethereum',\n symbol: 'ETH',\n decimals: 18\n }\n },\n bsc: {\n id: '56',\n name: 'BSC',\n shortName: 'bsc',\n chainId: '0x38',\n rpcUrl: 'https://bsc-dataseed.binance.org/',\n explorerUrl: 'https://bscscan.com',\n nativeCurrency: {\n name: 'BNB',\n symbol: 'BNB',\n decimals: 18\n }\n },\n polygon: {\n id: '137',\n name: 'Polygon',\n shortName: 'polygon',\n chainId: '0x89',\n rpcUrl: 'https://polygon-rpc.com',\n explorerUrl: 'https://polygonscan.com',\n nativeCurrency: {\n name: 'MATIC',\n symbol: 'MATIC',\n decimals: 18\n }\n },\n arbitrum: {\n id: '42161',\n name: 'Arbitrum',\n shortName: 'arbitrum',\n chainId: '0xa4b1',\n rpcUrl: 'https://arb1.arbitrum.io/rpc',\n explorerUrl: 'https://arbiscan.io',\n nativeCurrency: {\n name: 'Ethereum',\n symbol: 'ETH',\n decimals: 18\n }\n },\n optimism: {\n id: '10',\n name: 'Optimism',\n shortName: 'optimism',\n chainId: '0xa',\n rpcUrl: 'https://mainnet.optimism.io',\n explorerUrl: 'https://optimistic.etherscan.io',\n nativeCurrency: {\n name: 'Ethereum',\n symbol: 'ETH',\n decimals: 18\n }\n },\n avalanche: {\n id: '43114',\n name: 'Avalanche',\n shortName: 'avalanche',\n chainId: '0xa86a',\n rpcUrl: 'https://api.avax.network/ext/bc/C/rpc',\n explorerUrl: 'https://snowtrace.io',\n nativeCurrency: {\n name: 'AVAX',\n symbol: 'AVAX',\n decimals: 18\n }\n }\n};\n\n// Token configurations (USDT and USDC only)\nconst TOKENS = {\n ethereum: {\n USDT: {\n symbol: 'USDT',\n name: 'Tether USD',\n decimals: 6,\n contractAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7'\n },\n USDC: {\n symbol: 'USDC',\n name: 'USD Coin',\n decimals: 6,\n contractAddress: '0xA0b86a33E6c73521BfB8C0e56Bf5f1B54D2b4F6d'\n }\n },\n bsc: {\n USDT: {\n symbol: 'USDT',\n name: 'Tether USD',\n decimals: 18,\n contractAddress: '0x55d398326f99059fF775485246999027B3197955'\n },\n USDC: {\n symbol: 'USDC',\n name: 'USD Coin',\n decimals: 18,\n contractAddress: '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d'\n }\n },\n polygon: {\n USDT: {\n symbol: 'USDT',\n name: 'Tether USD',\n decimals: 6,\n contractAddress: '0xc2132D05D31c914a87C6611C10748AEb04B58e8F'\n },\n USDC: {\n symbol: 'USDC',\n name: 'USD Coin',\n decimals: 6,\n contractAddress: '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174'\n }\n },\n arbitrum: {\n USDT: {\n symbol: 'USDT',\n name: 'Tether USD',\n decimals: 6,\n contractAddress: '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9'\n },\n USDC: {\n symbol: 'USDC',\n name: 'USD Coin',\n decimals: 6,\n contractAddress: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831'\n }\n },\n optimism: {\n USDT: {\n symbol: 'USDT',\n name: 'Tether USD',\n decimals: 6,\n contractAddress: '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58'\n },\n USDC: {\n symbol: 'USDC',\n name: 'USD Coin',\n decimals: 6,\n contractAddress: '0x7F5c764cBc14f9669B88837ca1490cCa17c31607'\n }\n },\n avalanche: {\n USDT: {\n symbol: 'USDT',\n name: 'Tether USD',\n decimals: 6,\n contractAddress: '0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7'\n },\n USDC: {\n symbol: 'USDC',\n name: 'USD Coin',\n decimals: 6,\n contractAddress: '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E'\n }\n }\n};\n\n// Custom Wallet Manager Class\nclass CustomWalletManager {\n constructor(dispatch) {\n this.dispatch = dispatch;\n this.provider = null;\n this.currentWalletType = null;\n }\n\n // Detect available wallets\n detectWallets() {\n const wallets = [];\n\n if (typeof window === 'undefined') return wallets;\n\n // MetaMask detection\n if (window.ethereum && window.ethereum.isMetaMask) {\n wallets.push({\n type: 'metamask',\n name: 'MetaMask',\n icon: '🦊',\n description: 'Connect using MetaMask',\n installed: true\n });\n }\n\n // Coinbase Wallet detection\n if (window.ethereum && window.ethereum.isCoinbaseWallet) {\n wallets.push({\n type: 'coinbase',\n name: 'Coinbase Wallet',\n icon: '🔵',\n description: 'Connect using Coinbase Wallet',\n installed: true\n });\n }\n\n // Rabby Wallet detection\n if (window.ethereum && window.ethereum.isRabby) {\n wallets.push({\n type: 'rabby',\n name: 'Rabby Wallet',\n icon: '🐰',\n description: 'Connect using Rabby Wallet',\n installed: true\n });\n }\n\n // Trust Wallet detection\n if (window.ethereum && (window.ethereum.isTrust || window.ethereum.isTrustWallet)) {\n wallets.push({\n type: 'trust',\n name: 'Trust Wallet',\n icon: '🛡️',\n description: 'Connect using Trust Wallet',\n installed: true\n });\n }\n\n // Generic injected wallet fallback\n if (window.ethereum && wallets.length === 0) {\n wallets.push({\n type: 'injected',\n name: 'Browser Wallet',\n icon: '🌐',\n description: 'Connect using browser wallet',\n installed: true\n });\n }\n\n return wallets;\n }\n\n // Connect to a specific wallet\n async connect(walletType) {\n try {\n this.dispatch({ type: WALLET_ACTIONS.SET_CONNECTING });\n\n if (!window.ethereum) {\n throw new Error('No wallet detected. Please install a Web3 wallet.');\n }\n\n // Request account access\n const accounts = await window.ethereum.request({\n method: 'eth_requestAccounts'\n });\n\n if (accounts.length === 0) {\n throw new Error('No accounts found. Please unlock your wallet.');\n }\n\n // Get chain ID\n const chainId = await window.ethereum.request({\n method: 'eth_chainId'\n });\n\n this.provider = window.ethereum;\n this.currentWalletType = walletType;\n\n // Setup event listeners\n this.setupEventListeners();\n\n this.dispatch({\n type: WALLET_ACTIONS.SET_CONNECTED,\n payload: {\n account: accounts[0],\n chainId: chainId,\n walletType: walletType\n }\n });\n\n return {\n account: accounts[0],\n chainId: chainId,\n walletType: walletType\n };\n } catch (error) {\n this.dispatch({\n type: WALLET_ACTIONS.SET_ERROR,\n payload: error.message\n });\n throw error;\n }\n }\n\n // Setup event listeners for wallet changes\n setupEventListeners() {\n if (!this.provider) return;\n\n this.provider.on('accountsChanged', (accounts) => {\n if (accounts.length === 0) {\n this.disconnect();\n } else {\n this.dispatch({\n type: WALLET_ACTIONS.SET_CONNECTED,\n payload: {\n account: accounts[0],\n chainId: this.provider.chainId,\n walletType: this.currentWalletType\n }\n });\n }\n });\n\n this.provider.on('chainChanged', (chainId) => {\n this.dispatch({\n type: WALLET_ACTIONS.SET_CHAIN_ID,\n payload: chainId\n });\n });\n\n this.provider.on('disconnect', () => {\n this.disconnect();\n });\n }\n\n // Disconnect wallet\n disconnect() {\n if (this.provider && this.provider.removeAllListeners) {\n this.provider.removeAllListeners();\n }\n this.provider = null;\n this.currentWalletType = null;\n this.dispatch({ type: WALLET_ACTIONS.SET_DISCONNECTED });\n }\n\n // Switch network\n async switchNetwork(networkConfig) {\n if (!this.provider) {\n throw new Error('No wallet connected');\n }\n\n try {\n await this.provider.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: networkConfig.chainId }]\n });\n } catch (switchError) {\n // If network doesn't exist, add it\n if (switchError.code === 4902) {\n await this.provider.request({\n method: 'wallet_addEthereumChain',\n params: [{\n chainId: networkConfig.chainId,\n chainName: networkConfig.name,\n nativeCurrency: networkConfig.nativeCurrency,\n rpcUrls: [networkConfig.rpcUrl],\n blockExplorerUrls: [networkConfig.explorerUrl]\n }]\n });\n } else {\n throw switchError;\n }\n }\n }\n\n // Send transaction\n async sendTransaction(txParams) {\n if (!this.provider) {\n throw new Error('No wallet connected');\n }\n\n try {\n const txHash = await this.provider.request({\n method: 'eth_sendTransaction',\n params: [txParams]\n });\n return txHash;\n } catch (error) {\n if (error.code === 4001) {\n throw new Error('Transaction rejected by user');\n }\n throw error;\n }\n }\n\n // Get balance\n async getBalance(address) {\n if (!this.provider) {\n throw new Error('No wallet connected');\n }\n\n try {\n const balance = await this.provider.request({\n method: 'eth_getBalance',\n params: [address, 'latest']\n });\n return balance;\n } catch (error) {\n console.error('Failed to get balance:', error);\n return '0x0';\n }\n }\n}\n\n// Create wallet context\nconst WalletContext = createContext();\n\n// Wallet provider component\nexport const WalletProvider = ({ children }) => {\n const [state, dispatch] = useReducer(walletReducer, initialState);\n const walletManager = React.useRef(new CustomWalletManager(dispatch));\n\n // Initialize available wallets on mount\n React.useEffect(() => {\n const availableWallets = walletManager.current.detectWallets();\n dispatch({\n type: WALLET_ACTIONS.SET_AVAILABLE_WALLETS,\n payload: availableWallets\n });\n }, []);\n\n // Connect wallet function\n const connect = useCallback(async (walletType) => {\n return await walletManager.current.connect(walletType);\n }, []);\n\n // Disconnect wallet function\n const disconnect = useCallback(() => {\n walletManager.current.disconnect();\n }, []);\n\n // Switch network function\n const switchNetwork = useCallback(async (networkConfig) => {\n return await walletManager.current.switchNetwork(networkConfig);\n }, []);\n\n // Send transaction function\n const sendTransaction = useCallback(async (txParams) => {\n return await walletManager.current.sendTransaction(txParams);\n }, []);\n\n // Clear error function\n const clearError = useCallback(() => {\n dispatch({ type: WALLET_ACTIONS.CLEAR_ERROR });\n }, []);\n\n // Get network configuration\n const getNetworkConfig = useCallback((networkShortName) => {\n return NETWORKS[networkShortName];\n }, []);\n\n // Get token configuration\n const getTokenConfig = useCallback((networkShortName, tokenSymbol) => {\n return TOKENS[networkShortName]?.[tokenSymbol];\n }, []);\n\n // Context value\n const value = {\n // State\n ...state,\n \n // Actions\n connect,\n disconnect,\n switchNetwork,\n sendTransaction,\n clearError,\n \n // Helpers\n getNetworkConfig,\n getTokenConfig,\n \n // Constants\n networks: NETWORKS,\n tokens: TOKENS\n };\n\n return (\n <WalletContext.Provider value={value}>\n {children}\n </WalletContext.Provider>\n );\n};\n\n// Hook to use wallet context\nexport const useWallet = () => {\n const context = useContext(WalletContext);\n if (!context) {\n throw new Error('useWallet must be used within a WalletProvider');\n }\n return context;\n};","var __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\n\n// src/index.tsx\nimport React from \"react\";\n\n// src/third-party/qrcodegen/index.ts\n/**\n * @license QR Code generator library (TypeScript)\n * Copyright (c) Project Nayuki.\n * SPDX-License-Identifier: MIT\n */\nvar qrcodegen;\n((qrcodegen2) => {\n const _QrCode = class _QrCode {\n /*-- Constructor (low level) and fields --*/\n // Creates a new QR Code with the given version number,\n // error correction level, data codeword bytes, and mask number.\n // This is a low-level API that most users should not use directly.\n // A mid-level API is the encodeSegments() function.\n constructor(version, errorCorrectionLevel, dataCodewords, msk) {\n this.version = version;\n this.errorCorrectionLevel = errorCorrectionLevel;\n // The modules of this QR Code (false = light, true = dark).\n // Immutable after constructor finishes. Accessed through getModule().\n this.modules = [];\n // Indicates function modules that are not subjected to masking. Discarded when constructor finishes.\n this.isFunction = [];\n if (version < _QrCode.MIN_VERSION || version > _QrCode.MAX_VERSION)\n throw new RangeError(\"Version value out of range\");\n if (msk < -1 || msk > 7)\n throw new RangeError(\"Mask value out of range\");\n this.size = version * 4 + 17;\n let row = [];\n for (let i = 0; i < this.size; i++)\n row.push(false);\n for (let i = 0; i < this.size; i++) {\n this.modules.push(row.slice());\n this.isFunction.push(row.slice());\n }\n this.drawFunctionPatterns();\n const allCodewords = this.addEccAndInterleave(dataCodewords);\n this.drawCodewords(allCodewords);\n if (msk == -1) {\n let minPenalty = 1e9;\n for (let i = 0; i < 8; i++) {\n this.applyMask(i);\n this.drawFormatBits(i);\n const penalty = this.getPenaltyScore();\n if (penalty < minPenalty) {\n msk = i;\n minPenalty = penalty;\n }\n this.applyMask(i);\n }\n }\n assert(0 <= msk && msk <= 7);\n this.mask = msk;\n this.applyMask(msk);\n this.drawFormatBits(msk);\n this.isFunction = [];\n }\n /*-- Static factory functions (high level) --*/\n // Returns a QR Code representing the given Unicode text string at the given error correction level.\n // As a conservative upper bound, this function is guaranteed to succeed for strings that have 738 or fewer\n // Unicode code points (not UTF-16 code units) if the low error correction level is used. The smallest possible\n // QR Code version is automatically chosen for the output. The ECC level of the result may be higher than the\n // ecl argument if it can be done without increasing the version.\n static encodeText(text, ecl) {\n const segs = qrcodegen2.QrSegment.makeSegments(text);\n return _QrCode.encodeSegments(segs, ecl);\n }\n // Returns a QR Code representing the given binary data at the given error correction level.\n // This function always encodes using the binary segment mode, not any text mode. The maximum number of\n // bytes allowed is 2953. The smallest possible QR Code version is automatically chosen for the output.\n // The ECC level of the result may be higher than the ecl argument if it can be done without increasing the version.\n static encodeBinary(data, ecl) {\n const seg = qrcodegen2.QrSegment.makeBytes(data);\n return _QrCode.encodeSegments([seg], ecl);\n }\n /*-- Static factory functions (mid level) --*/\n // Returns a QR Code representing the given segments with the given encoding parameters.\n // The smallest possible QR Code version within the given range is automatically\n // chosen for the output. Iff boostEcl is true, then the ECC level of the result\n // may be higher than the ecl argument if it can be done without increasing the\n // version. The mask number is either between 0 to 7 (inclusive) to force that\n // mask, or -1 to automatically choose an appropriate mask (which may be slow).\n // This function allows the user to create a custom sequence of segments that switches\n // between modes (such as alphanumeric and byte) to encode text in less space.\n // This is a mid-level API; the high-level API is encodeText() and encodeBinary().\n static encodeSegments(segs, ecl, minVersion = 1, maxVersion = 40, mask = -1, boostEcl = true) {\n if (!(_QrCode.MIN_VERSION <= minVersion && minVersion <= maxVersion && maxVersion <= _QrCode.MAX_VERSION) || mask < -1 || mask > 7)\n throw new RangeError(\"Invalid value\");\n let version;\n let dataUsedBits;\n for (version = minVersion; ; version++) {\n const dataCapacityBits2 = _QrCode.getNumDataCodewords(version, ecl) * 8;\n const usedBits = QrSegment.getTotalBits(segs, version);\n if (usedBits <= dataCapacityBits2) {\n dataUsedBits = usedBits;\n break;\n }\n if (version >= maxVersion)\n throw new RangeError(\"Data too long\");\n }\n for (const newEcl of [_QrCode.Ecc.MEDIUM, _QrCode.Ecc.QUARTILE, _QrCode.Ecc.HIGH]) {\n if (boostEcl && dataUsedBits <= _QrCode.getNumDataCodewords(version, newEcl) * 8)\n ecl = newEcl;\n }\n let bb = [];\n for (const seg of segs) {\n appendBits(seg.mode.modeBits, 4, bb);\n appendBits(seg.numChars, seg.mode.numCharCountBits(version), bb);\n for (const b of seg.getData())\n bb.push(b);\n }\n assert(bb.length == dataUsedBits);\n const dataCapacityBits = _QrCode.getNumDataCodewords(version, ecl) * 8;\n assert(bb.length <= dataCapacityBits);\n appendBits(0, Math.min(4, dataCapacityBits - bb.length), bb);\n appendBits(0, (8 - bb.length % 8) % 8, bb);\n assert(bb.length % 8 == 0);\n for (let padByte = 236; bb.length < dataCapacityBits; padByte ^= 236 ^ 17)\n appendBits(padByte, 8, bb);\n let dataCodewords = [];\n while (dataCodewords.length * 8 < bb.length)\n dataCodewords.push(0);\n bb.forEach((b, i) => dataCodewords[i >>> 3] |= b << 7 - (i & 7));\n return new _QrCode(version, ecl, dataCodewords, mask);\n }\n /*-- Accessor methods --*/\n // Returns the color of the module (pixel) at the given coordinates, which is false\n // for light or true for dark. The top left corner has the coordinates (x=0, y=0).\n // If the given coordinates are out of bounds, then false (light) is returned.\n getModule(x, y) {\n return 0 <= x && x < this.size && 0 <= y && y < this.size && this.modules[y][x];\n }\n // Modified to expose modules for easy access\n getModules() {\n return this.modules;\n }\n /*-- Private helper methods for constructor: Drawing function modules --*/\n // Reads this object's version field, and draws and marks all function modules.\n drawFunctionPatterns() {\n for (let i = 0; i < this.size; i++) {\n this.setFunctionModule(6, i, i % 2 == 0);\n this.setFunctionModule(i, 6, i % 2 == 0);\n }\n this.drawFinderPattern(3, 3);\n this.drawFinderPattern(this.size - 4, 3);\n this.drawFinderPattern(3, this.size - 4);\n const alignPatPos = this.getAlignmentPatternPositions();\n const numAlign = alignPatPos.length;\n for (let i = 0; i < numAlign; i++) {\n for (let j = 0; j < numAlign; j++) {\n if (!(i == 0 && j == 0 || i == 0 && j == numAlign - 1 || i == numAlign - 1 && j == 0))\n this.drawAlignmentPattern(alignPatPos[i], alignPatPos[j]);\n }\n }\n this.drawFormatBits(0);\n this.drawVersion();\n }\n // Draws two copies of the format bits (with its own error correction code)\n // based on the given mask and this object's error correction level field.\n drawFormatBits(mask) {\n const data = this.errorCorrectionLevel.formatBits << 3 | mask;\n let rem = data;\n for (let i = 0; i < 10; i++)\n rem = rem << 1 ^ (rem >>> 9) * 1335;\n const bits = (data << 10 | rem) ^ 21522;\n assert(bits >>> 15 == 0);\n for (let i = 0; i <= 5; i++)\n this.setFunctionModule(8, i, getBit(bits, i));\n this.setFunctionModule(8, 7, getBit(bits, 6));\n this.setFunctionModule(8, 8, getBit(bits, 7));\n this.setFunctionModule(7, 8, getBit(bits, 8));\n for (let i = 9; i < 15; i++)\n this.setFunctionModule(14 - i, 8, getBit(bits, i));\n for (let i = 0; i < 8; i++)\n this.setFunctionModule(this.size - 1 - i, 8, getBit(bits, i));\n for (let i = 8; i < 15; i++)\n this.setFunctionModule(8, this.size - 15 + i, getBit(bits, i));\n this.setFunctionModule(8, this.size - 8, true);\n }\n // Draws two copies of the version bits (with its own error correction code),\n // based on this object's version field, iff 7 <= version <= 40.\n drawVersion() {\n if (this.version < 7)\n return;\n let rem = this.version;\n for (let i = 0; i < 12; i++)\n rem = rem << 1 ^ (rem >>> 11) * 7973;\n const bits = this.version << 12 | rem;\n assert(bits >>> 18 == 0);\n for (let i = 0; i < 18; i++) {\n const color = getBit(bits, i);\n const a = this.size - 11 + i % 3;\n const b = Math.floor(i / 3);\n this.setFunctionModule(a, b, color);\n this.setFunctionModule(b, a, color);\n }\n }\n // Draws a 9*9 finder pattern including the border separator,\n // with the center module at (x, y). Modules can be out of bounds.\n drawFinderPattern(x, y) {\n for (let dy = -4; dy <= 4; dy++) {\n for (let dx = -4; dx <= 4; dx++) {\n const dist = Math.max(Math.abs(dx), Math.abs(dy));\n const xx = x + dx;\n const yy = y + dy;\n if (0 <= xx && xx < this.size && 0 <= yy && yy < this.size)\n this.setFunctionModule(xx, yy, dist != 2 && dist != 4);\n }\n }\n }\n // Draws a 5*5 alignment pattern, with the center module\n // at (x, y). All modules must be in bounds.\n drawAlignmentPattern(x, y) {\n for (let dy = -2; dy <= 2; dy++) {\n for (let dx = -2; dx <= 2; dx++)\n this.setFunctionModule(x + dx, y + dy, Math.max(Math.abs(dx), Math.abs(dy)) != 1);\n }\n }\n // Sets the color of a module and marks it as a function module.\n // Only used by the constructor. Coordinates must be in bounds.\n setFunctionModule(x, y, isDark) {\n this.modules[y][x] = isDark;\n this.isFunction[y][x] = true;\n }\n /*-- Private helper methods for constructor: Codewords and masking --*/\n // Returns a new byte string representing the given data with the appropriate error correction\n // codewords appended to it, based on this object's version and error correction level.\n addEccAndInterleave(data) {\n const ver = this.version;\n const ecl = this.errorCorrectionLevel;\n if (data.length != _QrCode.getNumDataCodewords(ver, ecl))\n throw new RangeError(\"Invalid argument\");\n const numBlocks = _QrCode.NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver];\n const blockEccLen = _QrCode.ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver];\n const rawCodewords = Math.floor(_QrCode.getNumRawDataModules(ver) / 8);\n const numShortBlocks = numBlocks - rawCodewords % numBlocks;\n const shortBlockLen = Math.floor(rawCodewords / numBlocks);\n let blocks = [];\n const rsDiv = _QrCode.reedSolomonComputeDivisor(blockEccLen);\n for (let i = 0, k = 0; i < numBlocks; i++) {\n let dat = data.slice(k, k + shortBlockLen - blockEccLen + (i < numShortBlocks ? 0 : 1));\n k += dat.length;\n const ecc = _QrCode.reedSolomonComputeRemainder(dat, rsDiv);\n if (i < numShortBlocks)\n dat.push(0);\n blocks.push(dat.concat(ecc));\n }\n let result = [];\n for (let i = 0; i < blocks[0].length; i++) {\n blocks.forEach((block, j) => {\n if (i != shortBlockLen - blockEccLen || j >= numShortBlocks)\n result.push(block[i]);\n });\n }\n assert(result.length == rawCodewords);\n return result;\n }\n // Draws the given sequence of 8-bit codewords (data and error correction) onto the entire\n // data area of this QR Code. Function modules need to be marked off before this is called.\n drawCodewords(data) {\n if (data.length != Math.floor(_QrCode.getNumRawDataModules(this.version) / 8))\n throw new RangeError(\"Invalid argument\");\n let i = 0;\n for (let right = this.size - 1; right >= 1; right -= 2) {\n if (right == 6)\n right = 5;\n for (let vert = 0; vert < this.size; vert++) {\n for (let j = 0; j < 2; j++) {\n const x = right - j;\n const upward = (right + 1 & 2) == 0;\n const y = upward ? this.size - 1 - vert : vert;\n if (!this.isFunction[y][x] && i < data.length * 8) {\n this.modules[y][x] = getBit(data[i >>> 3], 7 - (i & 7));\n i++;\n }\n }\n }\n }\n assert(i == data.length * 8);\n }\n // XORs the codeword modules in this QR Code with the given mask pattern.\n // The function modules must be marked and the codeword bits must be drawn\n // before masking. Due to the arithmetic of XOR, calling applyMask() with\n // the same mask value a second time will undo the mask. A final well-formed\n // QR Code needs exactly one (not zero, two, etc.) mask applied.\n applyMask(mask) {\n if (mask < 0 || mask > 7)\n throw new RangeError(\"Mask value out of range\");\n for (let y = 0; y < this.size; y++) {\n for (let x = 0; x < this.size; x++) {\n let invert;\n switch (mask) {\n case 0:\n invert = (x + y) % 2 == 0;\n break;\n case 1:\n invert = y % 2 == 0;\n break;\n case 2:\n invert = x % 3 == 0;\n break;\n case 3:\n invert = (x + y) % 3 == 0;\n break;\n case 4:\n invert = (Math.floor(x / 3) + Math.floor(y / 2)) % 2 == 0;\n break;\n case 5:\n invert = x * y % 2 + x * y % 3 == 0;\n break;\n case 6:\n invert = (x * y % 2 + x * y % 3) % 2 == 0;\n break;\n case 7:\n invert = ((x + y) % 2 + x * y % 3) % 2 == 0;\n break;\n default:\n throw new Error(\"Unreachable\");\n }\n if (!this.isFunction[y][x] && invert)\n this.modules[y][x] = !this.modules[y][x];\n }\n }\n }\n // Calculates and returns the penalty score based on state of this QR Code's current modules.\n // This is used by the automatic mask choice algorithm to find the mask pattern that yields the lowest score.\n getPenaltyScore() {\n let result = 0;\n for (let y = 0; y < this.size; y++) {\n let runColor = false;\n let runX = 0;\n let runHistory = [0, 0, 0, 0, 0, 0, 0];\n for (let x = 0; x < this.size; x++) {\n if (this.modules[y][x] == runColor) {\n runX++;\n if (runX == 5)\n result += _QrCode.PENALTY_N1;\n else if (runX > 5)\n result++;\n } else {\n this.finderPenaltyAddHistory(runX, runHistory);\n if (!runColor)\n result += this.finderPenaltyCountPatterns(runHistory) * _QrCode.PENALTY_N3;\n runColor = this.modules[y][x];\n runX = 1;\n }\n }\n result += this.finderPenaltyTerminateAndCount(runColor, runX, runHistory) * _QrCode.PENALTY_N3;\n }\n for (let x = 0; x < this.size; x++) {\n let runColor = false;\n let runY = 0;\n let runHistory = [0, 0, 0, 0, 0, 0, 0];\n for (let y = 0; y < this.size; y++) {\n if (this.modules[y][x] == runColor) {\n runY++;\n if (runY == 5)\n result += _QrCode.PENALTY_N1;\n else if (runY > 5)\n result++;\n } else {\n this.finderPenaltyAddHistory(runY, runHistory);\n if (!runColor)\n result += this.finderPenaltyCountPatterns(runHistory) * _QrCode.PENALTY_N3;\n runColor = this.modules[y][x];\n runY = 1;\n }\n }\n result += this.finderPenaltyTerminateAndCount(runColor, runY, runHistory) * _QrCode.PENALTY_N3;\n }\n for (let y = 0; y < this.size - 1; y++) {\n for (let x = 0; x < this.size - 1; x++) {\n const color = this.modules[y][x];\n if (color == this.modules[y][x + 1] && color == this.modules[y + 1][x] && color == this.modules[y + 1][x + 1])\n result += _QrCode.PENALTY_N2;\n }\n }\n let dark = 0;\n for (const row of this.modules)\n dark = row.reduce((sum, color) => sum + (color ? 1 : 0), dark);\n const total = this.size * this.size;\n const k = Math.ceil(Math.abs(dark * 20 - total * 10) / total) - 1;\n assert(0 <= k && k <= 9);\n result += k * _QrCode.PENALTY_N4;\n assert(0 <= result && result <= 2568888);\n return result;\n }\n /*-- Private helper functions --*/\n // Returns an ascending list of positions of alignment patterns for this version number.\n // Each position is in the range [0,177), and are used on both the x and y axes.\n // This could be implemented as lookup table of 40 variable-length lists of integers.\n getAlignmentPatternPositions() {\n if (this.version == 1)\n return [];\n else {\n const numAlign = Math.floor(this.version / 7) + 2;\n const step = this.version == 32 ? 26 : Math.ceil((this.version * 4 + 4) / (numAlign * 2 - 2)) * 2;\n let result = [6];\n for (let pos = this.size - 7; result.length < numAlign; pos -= step)\n result.splice(1, 0, pos);\n return result;\n }\n }\n // Returns the number of data bits that can be stored in a QR Code of the given version number, after\n // all function modules are excluded. This includes remainder bits, so it might not be a multiple of 8.\n // The result is in the range [208, 29648]. This could be implemented as a 40-entry lookup table.\n static getNumRawDataModules(ver) {\n if (ver < _QrCode.MIN_VERSION || ver > _QrCode.MAX_VERSION)\n throw new RangeError(\"Version number out of range\");\n let result = (16 * ver + 128) * ver + 64;\n if (ver >= 2) {\n const numAlign = Math.floor(ver / 7) + 2;\n result -= (25 * numAlign - 10) * numAlign - 55;\n if (ver >= 7)\n result -= 36;\n }\n assert(208 <= result && result <= 29648);\n return result;\n }\n // Returns the number of 8-bit data (i.e. not error correction) codewords contained in any\n // QR Code of the given version number and error correction level, with remainder bits discarded.\n // This stateless pure function could be implemented as a (40*4)-cell lookup table.\n static getNumDataCodewords(ver, ecl) {\n return Math.floor(_QrCode.getNumRawDataModules(ver) / 8) - _QrCode.ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver] * _QrCode.NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver];\n }\n // Returns a Reed-Solomon ECC generator polynomial for the given degree. This could be\n // implemented as a lookup table over all possible parameter values, instead of as an algorithm.\n static reedSolomonComputeDivisor(degree) {\n if (degree < 1 || degree > 255)\n throw new RangeError(\"Degree out of range\");\n let result = [];\n for (let i = 0; i < degree - 1; i++)\n result.push(0);\n result.push(1);\n let root = 1;\n for (let i = 0; i < degree; i++) {\n for (let j = 0; j < result.length; j++) {\n result[j] = _QrCode.reedSolomonMultiply(result[j], root);\n if (j + 1 < result.length)\n result[j] ^= result[j + 1];\n }\n root = _QrCode.reedSolomonMultiply(root, 2);\n }\n return result;\n }\n // Returns the Reed-Solomon error correction codeword for the given data and divisor polynomials.\n static reedSolomonComputeRemainder(data, divisor) {\n let result = divisor.map((_) => 0);\n for (const b of data) {\n const factor = b ^ result.shift();\n result.push(0);\n divisor.forEach((coef, i) => result[i] ^= _QrCode.reedSolomonMultiply(coef, factor));\n }\n return result;\n }\n // Returns the product of the two given field elements modulo GF(2^8/0x11D). The arguments and result\n // are unsigned 8-bit integers. This could be implemented as a lookup table of 256*256 entries of uint8.\n static reedSolomonMultiply(x, y) {\n if (x >>> 8 != 0 || y >>> 8 != 0)\n throw new RangeError(\"Byte out of range\");\n let z = 0;\n for (let i = 7; i >= 0; i--) {\n z = z << 1 ^ (z >>> 7) * 285;\n z ^= (y >>> i & 1) * x;\n }\n assert(z >>> 8 == 0);\n return z;\n }\n // Can only be called immediately after a light run is added, and\n // returns either 0, 1, or 2. A helper function for getPenaltyScore().\n finderPenaltyCountPatterns(runHistory) {\n const n = runHistory[1];\n assert(n <= this.size * 3);\n const core = n > 0 && runHistory[2] == n && runHistory[3] == n * 3 && runHistory[4] == n && runHistory[5] == n;\n return (core && runHistory[0] >= n * 4 && runHistory[6] >= n ? 1 : 0) + (core && runHistory[6] >= n * 4 && runHistory[0] >= n ? 1 : 0);\n }\n // Must be called at the end of a line (row or column) of modules. A helper function for getPenaltyScore().\n finderPenaltyTerminateAndCount(currentRunColor, currentRunLength, runHistory) {\n if (currentRunColor) {\n this.finderPenaltyAddHistory(currentRunLength, runHistory);\n currentRunLength = 0;\n }\n currentRunLength += this.size;\n this.finderPenaltyAddHistory(currentRunLength, runHistory);\n return this.finderPenaltyCountPatterns(runHistory);\n }\n // Pushes the given value to the front and drops the last value. A helper function for getPenaltyScore().\n finderPenaltyAddHistory(currentRunLength, runHistory) {\n if (runHistory[0] == 0)\n currentRunLength += this.size;\n runHistory.pop();\n runHistory.unshift(currentRunLength);\n }\n };\n /*-- Constants and tables --*/\n // The minimum version number supported in the QR Code Model 2 standard.\n _QrCode.MIN_VERSION = 1;\n // The maximum version number supported in the QR Code Model 2 standard.\n _QrCode.MAX_VERSION = 40;\n // For use in getPenaltyScore(), when evaluating which mask is best.\n _QrCode.PENALTY_N1 = 3;\n _QrCode.PENALTY_N2 = 3;\n _QrCode.PENALTY_N3 = 40;\n _QrCode.PENALTY_N4 = 10;\n _QrCode.ECC_CODEWORDS_PER_BLOCK = [\n // Version: (note that index 0 is for padding, and is set to an illegal value)\n //0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level\n [-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],\n // Low\n [-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28],\n // Medium\n [-1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],\n // Quartile\n [-1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30]\n // High\n ];\n _QrCode.NUM_ERROR_CORRECTION_BLOCKS = [\n // Version: (note that index 0 is for padding, and is set to an illegal value)\n //0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level\n [-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25],\n // Low\n [-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49],\n // Medium\n [-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68],\n // Quartile\n [-1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81]\n // High\n ];\n let QrCode = _QrCode;\n qrcodegen2.QrCode = _QrCode;\n function appendBits(val, len, bb) {\n if (len < 0 || len > 31 || val >>> len != 0)\n throw new RangeError(\"Value out of range\");\n for (let i = len - 1; i >= 0; i--)\n bb.push(val >>> i & 1);\n }\n function getBit(x, i) {\n return (x >>> i & 1) != 0;\n }\n function assert(cond) {\n if (!cond)\n throw new Error(\"Assertion error\");\n }\n const _QrSegment = class _QrSegment {\n /*-- Constructor (low level) and fields --*/\n // Creates a new QR Code segment with the given attributes and data.\n // The character count (numChars) must agree with the mode and the bit buffer length,\n // but the constraint isn't checked. The given bit buffer is cloned and stored.\n constructor(mode, numChars, bitData) {\n this.mode = mode;\n this.numChars = numChars;\n this.bitData = bitData;\n if (numChars < 0)\n throw new RangeError(\"Invalid argument\");\n this.bitData = bitData.slice();\n }\n /*-- Static factory functions (mid level) --*/\n // Returns a segment representing the given binary data encoded in\n // byte mode. All input byte arrays are acceptable. Any text string\n // can be converted to UTF-8 bytes and encoded as a byte mode segment.\n static makeBytes(data) {\n let bb = [];\n for (const b of data)\n appendBits(b, 8, bb);\n return new _QrSegment(_QrSegment.Mode.BYTE, data.length, bb);\n }\n // Returns a segment representing the given string of decimal digits encoded in numeric mode.\n static makeNumeric(digits) {\n if (!_QrSegment.isNumeric(digits))\n throw new RangeError(\"String contains non-numeric characters\");\n let bb = [];\n for (let i = 0; i < digits.length; ) {\n const n = Math.min(digits.length - i, 3);\n appendBits(parseInt(digits.substring(i, i + n), 10), n * 3 + 1, bb);\n i += n;\n }\n return new _QrSegment(_QrSegment.Mode.NUMERIC, digits.length, bb);\n }\n // Returns a segment representing the given text string encoded in alphanumeric mode.\n // The characters allowed are: 0 to 9, A to Z (uppercase only), space,\n // dollar, percent, asterisk, plus, hyphen, period, slash, colon.\n static makeAlphanumeric(text) {\n if (!_QrSegment.isAlphanumeric(text))\n throw new RangeError(\"String contains unencodable characters in alphanumeric mode\");\n let bb = [];\n let i;\n for (i = 0; i + 2 <= text.length; i += 2) {\n let temp = _QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)) * 45;\n temp += _QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i + 1));\n appendBits(temp, 11, bb);\n }\n if (i < text.length)\n appendBits(_QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)), 6, bb);\n return new _QrSegment(_QrSegment.Mode.ALPHANUMERIC, text.length, bb);\n }\n // Returns a new mutable list of zero or more segments to represent the given Unicode text string.\n // The result may use various segment modes and switch modes to optimize the length of the bit stream.\n static makeSegments(text) {\n if (text == \"\")\n return [];\n else if (_QrSegment.isNumeric(text))\n return [_QrSegment.makeNumeric(text)];\n else if (_QrSegment.isAlphanumeric(text))\n return [_QrSegment.makeAlphanumeric(text)];\n else\n return [_QrSegment.makeBytes(_QrSegment.toUtf8ByteArray(text))];\n }\n // Returns a segment representing an Extended Channel Interpretation\n // (ECI) designator with the given assignment value.\n static makeEci(assignVal) {\n let bb = [];\n if (assignVal < 0)\n throw new RangeError(\"ECI assignment value out of range\");\n else if (assignVal < 1 << 7)\n appendBits(assignVal, 8, bb);\n else if (assignVal < 1 << 14) {\n appendBits(2, 2, bb);\n appendBits(assignVal, 14, bb);\n } else if (assignVal < 1e6) {\n appendBits(6, 3, bb);\n appendBits(assignVal, 21, bb);\n } else\n throw new RangeError(\"ECI assignment value out of range\");\n return new _QrSegment(_QrSegment.Mode.ECI, 0, bb);\n }\n // Tests whether the given string can be encoded as a segment in numeric mode.\n // A string is encodable iff each character is in the range 0 to 9.\n static isNumeric(text) {\n return _QrSegment.NUMERIC_REGEX.test(text);\n }\n // Tests whether the given string can be encoded as a segment in alphanumeric mode.\n // A string is encodable iff each character is in the following set: 0 to 9, A to Z\n // (uppercase only), space, dollar, percent, asterisk, plus, hyphen, period, slash, colon.\n static isAlphanumeric(text) {\n return _QrSegment.ALPHANUMERIC_REGEX.test(text);\n }\n /*-- Methods --*/\n // Returns a new copy of the data bits of this segment.\n getData() {\n return this.bitData.slice();\n }\n // (Package-private) Calculates and returns the number of bits needed to encode the given segments at\n // the given version. The result is infinity if a segment has too many characters to fit its length field.\n static getTotalBits(segs, version) {\n let result = 0;\n for (const seg of segs) {\n const ccbits = seg.mode.numCharCountBits(version);\n if (seg.numChars >= 1 << ccbits)\n return Infinity;\n result += 4 + ccbits + seg.bitData.length;\n }\n return result;\n }\n // Returns a new array of bytes representing the given string encoded in UTF-8.\n static toUtf8ByteArray(str) {\n str = encodeURI(str);\n let result = [];\n for (let i = 0; i < str.length; i++) {\n if (str.charAt(i) != \"%\")\n result.push(str.charCodeAt(i));\n else {\n result.push(parseInt(str.substring(i + 1, i + 3), 16));\n i += 2;\n }\n }\n return result;\n }\n };\n /*-- Constants --*/\n // Describes precisely all strings that are encodable in numeric mode.\n _QrSegment.NUMERIC_REGEX = /^[0-9]*$/;\n // Describes precisely all strings that are encodable in alphanumeric mode.\n _QrSegment.ALPHANUMERIC_REGEX = /^[A-Z0-9 $%*+.\\/:-]*$/;\n // The set of all legal characters in alphanumeric mode,\n // where each character value maps to the index in the string.\n _QrSegment.ALPHANUMERIC_CHARSET = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:\";\n let QrSegment = _QrSegment;\n qrcodegen2.QrSegment = _QrSegment;\n})(qrcodegen || (qrcodegen = {}));\n((qrcodegen2) => {\n let QrCode;\n ((QrCode2) => {\n const _Ecc = class _Ecc {\n // The QR Code can tolerate about 30% erroneous codewords\n /*-- Constructor and fields --*/\n constructor(ordinal, formatBits) {\n this.ordinal = ordinal;\n this.formatBits = formatBits;\n }\n };\n /*-- Constants --*/\n _Ecc.LOW = new _Ecc(0, 1);\n // The QR Code can tolerate about 7% erroneous codewords\n _Ecc.MEDIUM = new _Ecc(1, 0);\n // The QR Code can tolerate about 15% erroneous codewords\n _Ecc.QUARTILE = new _Ecc(2, 3);\n // The QR Code can tolerate about 25% erroneous codewords\n _Ecc.HIGH = new _Ecc(3, 2);\n let Ecc = _Ecc;\n QrCode2.Ecc = _Ecc;\n })(QrCode = qrcodegen2.QrCode || (qrcodegen2.QrCode = {}));\n})(qrcodegen || (qrcodegen = {}));\n((qrcodegen2) => {\n let QrSegment;\n ((QrSegment2) => {\n const _Mode = class _Mode {\n /*-- Constructor and fields --*/\n constructor(modeBits, numBitsCharCount) {\n this.modeBits = modeBits;\n this.numBitsCharCount = numBitsCharCount;\n }\n /*-- Method --*/\n // (Package-private) Returns the bit width of the character count field for a segment in\n // this mode in a QR Code at the given version number. The result is in the range [0, 16].\n numCharCountBits(ver) {\n return this.numBitsCharCount[Math.floor((ver + 7) / 17)];\n }\n };\n /*-- Constants --*/\n _Mode.NUMERIC = new _Mode(1, [10, 12, 14]);\n _Mode.ALPHANUMERIC = new _Mode(2, [9, 11, 13]);\n _Mode.BYTE = new _Mode(4, [8, 16, 16]);\n _Mode.KANJI = new _Mode(8, [8, 10, 12]);\n _Mode.ECI = new _Mode(7, [0, 0, 0]);\n let Mode = _Mode;\n QrSegment2.Mode = _Mode;\n })(QrSegment = qrcodegen2.QrSegment || (qrcodegen2.QrSegment = {}));\n})(qrcodegen || (qrcodegen = {}));\nvar qrcodegen_default = qrcodegen;\n\n// src/index.tsx\n/**\n * @license qrcode.react\n * Copyright (c) Paul O'Shannessy\n * SPDX-License-Identifier: ISC\n */\nvar ERROR_LEVEL_MAP = {\n L: qrcodegen_default.QrCode.Ecc.LOW,\n M: qrcodegen_default.QrCode.Ecc.MEDIUM,\n Q: qrcodegen_default.QrCode.Ecc.QUARTILE,\n H: qrcodegen_default.QrCode.Ecc.HIGH\n};\nvar DEFAULT_SIZE = 128;\nvar DEFAULT_LEVEL = \"L\";\nvar DEFAULT_BGCOLOR = \"#FFFFFF\";\nvar DEFAULT_FGCOLOR = \"#000000\";\nvar DEFAULT_INCLUDEMARGIN = false;\nvar DEFAULT_MINVERSION = 1;\nvar SPEC_MARGIN_SIZE = 4;\nvar DEFAULT_MARGIN_SIZE = 0;\nvar DEFAULT_IMG_SCALE = 0.1;\nfunction generatePath(modules, margin = 0) {\n const ops = [];\n modules.forEach(function(row, y) {\n let start = null;\n row.forEach(function(cell, x) {\n if (!cell && start !== null) {\n ops.push(\n `M${start + margin} ${y + margin}h${x - start}v1H${start + margin}z`\n );\n start = null;\n return;\n }\n if (x === row.length - 1) {\n if (!cell) {\n return;\n }\n if (start === null) {\n ops.push(`M${x + margin},${y + margin} h1v1H${x + margin}z`);\n } else {\n ops.push(\n `M${start + margin},${y + margin} h${x + 1 - start}v1H${start + margin}z`\n );\n }\n return;\n }\n if (cell && start === null) {\n start = x;\n }\n });\n });\n return ops.join(\"\");\n}\nfunction excavateModules(modules, excavation) {\n return modules.slice().map((row, y) => {\n if (y < excavation.y || y >= excavation.y + excavation.h) {\n return row;\n }\n return row.map((cell, x) => {\n if (x < excavation.x || x >= excavation.x + excavation.w) {\n return cell;\n }\n return false;\n });\n });\n}\nfunction getImageSettings(cells, size, margin, imageSettings) {\n if (imageSettings == null) {\n return null;\n }\n const numCells = cells.length + margin * 2;\n const defaultSize = Math.floor(size * DEFAULT_IMG_SCALE);\n const scale = numCells / size;\n const w = (imageSettings.width || defaultSize) * scale;\n const h = (imageSettings.height || defaultSize) * scale;\n const x = imageSettings.x == null ? cells.length / 2 - w / 2 : imageSettings.x * scale;\n const y = imageSettings.y == null ? cells.length / 2 - h / 2 : imageSettings.y * scale;\n const opacity = imageSettings.opacity == null ? 1 : imageSettings.opacity;\n let excavation = null;\n if (imageSettings.excavate) {\n let floorX = Math.floor(x);\n let floorY = Math.floor(y);\n let ceilW = Math.ceil(w + x - floorX);\n let ceilH = Math.ceil(h + y - floorY);\n excavation = { x: floorX, y: floorY, w: ceilW, h: ceilH };\n }\n const crossOrigin = imageSettings.crossOrigin;\n return { x, y, h, w, excavation, opacity, crossOrigin };\n}\nfunction getMarginSize(includeMargin, marginSize) {\n if (marginSize != null) {\n return Math.max(Math.floor(marginSize), 0);\n }\n return includeMargin ? SPEC_MARGIN_SIZE : DEFAULT_MARGIN_SIZE;\n}\nfunction useQRCode({\n value,\n level,\n minVersion,\n includeMargin,\n marginSize,\n imageSettings,\n size,\n boostLevel\n}) {\n let qrcode = React.useMemo(() => {\n const values = Array.isArray(value) ? value : [value];\n const segments = values.reduce((accum, v) => {\n accum.push(...qrcodegen_default.QrSegment.makeSegments(v));\n return accum;\n }, []);\n return qrcodegen_default.QrCode.encodeSegments(\n segments,\n ERROR_LEVEL_MAP[level],\n minVersion,\n void 0,\n void 0,\n boostLevel\n );\n }, [value, level, minVersion, boostLevel]);\n const { cells, margin, numCells, calculatedImageSettings } = React.useMemo(() => {\n let cells2 = qrcode.getModules();\n const margin2 = getMarginSize(includeMargin, marginSize);\n const numCells2 = cells2.length + margin2 * 2;\n const calculatedImageSettings2 = getImageSettings(\n cells2,\n size,\n margin2,\n imageSettings\n );\n return {\n cells: cells2,\n margin: margin2,\n numCells: numCells2,\n calculatedImageSettings: calculatedImageSettings2\n };\n }, [qrcode, size, imageSettings, includeMargin, marginSize]);\n return {\n qrcode,\n margin,\n cells,\n numCells,\n calculatedImageSettings\n };\n}\nvar SUPPORTS_PATH2D = function() {\n try {\n new Path2D().addPath(new Path2D());\n } catch (e) {\n return false;\n }\n return true;\n}();\nvar QRCodeCanvas = React.forwardRef(\n function QRCodeCanvas2(props, forwardedRef) {\n const _a = props, {\n value,\n size = DEFAULT_SIZE,\n level = DEFAULT_LEVEL,\n bgColor = DEFAULT_BGCOLOR,\n fgColor = DEFAULT_FGCOLOR,\n includeMargin = DEFAULT_INCLUDEMARGIN,\n minVersion = DEFAULT_MINVERSION,\n boostLevel,\n marginSize,\n imageSettings\n } = _a, extraProps = __objRest(_a, [\n \"value\",\n \"size\",\n \"level\",\n \"bgColor\",\n \"fgColor\",\n \"includeMargin\",\n \"minVersion\",\n \"boostLevel\",\n \"marginSize\",\n \"imageSettings\"\n ]);\n const _b = extraProps, { style } = _b, otherProps = __objRest(_b, [\"style\"]);\n const imgSrc = imageSettings == null ? void 0 : imageSettings.src;\n const _canvas = React.useRef(null);\n const _image = React.useRef(null);\n const setCanvasRef = React.useCallback(\n (node) => {\n _canvas.current = node;\n if (typeof forwardedRef === \"function\") {\n forwardedRef(node);\n } else if (forwardedRef) {\n forwardedRef.current = node;\n }\n },\n [forwardedRef]\n );\n const [isImgLoaded, setIsImageLoaded] = React.useState(false);\n const { margin, cells, numCells, calculatedImageSettings } = useQRCode({\n value,\n level,\n minVersion,\n boostLevel,\n includeMargin,\n marginSize,\n imageSettings,\n size\n });\n React.useEffect(() => {\n if (_canvas.current != null) {\n const canvas = _canvas.current;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n return;\n }\n let cellsToDraw = cells;\n const image = _image.current;\n const haveImageToRender = calculatedImageSettings != null && image !== null && image.complete && image.naturalHeight !== 0 && image.naturalWidth !== 0;\n if (haveImageToRender) {\n if (calculatedImageSettings.excavation != null) {\n cellsToDraw = excavateModules(\n cells,\n calculatedImageSettings.excavation\n );\n }\n }\n const pixelRatio = window.devicePixelRatio || 1;\n canvas.height = canvas.width = size * pixelRatio;\n const scale = size / numCells * pixelRatio;\n ctx.scale(scale, scale);\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, numCells, numCells);\n ctx.fillStyle = fgColor;\n if (SUPPORTS_PATH2D) {\n ctx.fill(new Path2D(generatePath(cellsToDraw, margin)));\n } else {\n cells.forEach(function(row, rdx) {\n row.forEach(function(cell, cdx) {\n if (cell) {\n ctx.fillRect(cdx + margin, rdx + margin, 1, 1);\n }\n });\n });\n }\n if (calculatedImageSettings) {\n ctx.globalAlpha = calculatedImageSettings.opacity;\n }\n if (haveImageToRender) {\n ctx.drawImage(\n image,\n calculatedImageSettings.x + margin,\n calculatedImageSettings.y + margin,\n calculatedImageSettings.w,\n calculatedImageSettings.h\n );\n }\n }\n });\n React.useEffect(() => {\n setIsImageLoaded(false);\n }, [imgSrc]);\n const canvasStyle = __spreadValues({ height: size, width: size }, style);\n let img = null;\n if (imgSrc != null) {\n img = /* @__PURE__ */ React.createElement(\n \"img\",\n {\n src: imgSrc,\n key: imgSrc,\n style: { display: \"none\" },\n onLoad: () => {\n setIsImageLoaded(true);\n },\n ref: _image,\n crossOrigin: calculatedImageSettings == null ? void 0 : calculatedImageSettings.crossOrigin\n }\n );\n }\n return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(\n \"canvas\",\n __spreadValues({\n style: canvasStyle,\n height: size,\n width: size,\n ref: setCanvasRef,\n role: \"img\"\n }, otherProps)\n ), img);\n }\n);\nQRCodeCanvas.displayName = \"QRCodeCanvas\";\nvar QRCodeSVG = React.forwardRef(\n function QRCodeSVG2(props, forwardedRef) {\n const _a = props, {\n value,\n size = DEFAULT_SIZE,\n level = DEFAULT_LEVEL,\n bgColor = DEFAULT_BGCOLOR,\n fgColor = DEFAULT_FGCOLOR,\n includeMargin = DEFAULT_INCLUDEMARGIN,\n minVersion = DEFAULT_MINVERSION,\n boostLevel,\n title,\n marginSize,\n imageSettings\n } = _a, otherProps = __objRest(_a, [\n \"value\",\n \"size\",\n \"level\",\n \"bgColor\",\n \"fgColor\",\n \"includeMargin\",\n \"minVersion\",\n \"boostLevel\",\n \"title\",\n \"marginSize\",\n \"imageSettings\"\n ]);\n const { margin, cells, numCells, calculatedImageSettings } = useQRCode({\n value,\n level,\n minVersion,\n boostLevel,\n includeMargin,\n marginSize,\n imageSettings,\n size\n });\n let cellsToDraw = cells;\n let image = null;\n if (imageSettings != null && calculatedImageSettings != null) {\n if (calculatedImageSettings.excavation != null) {\n cellsToDraw = excavateModules(\n cells,\n calculatedImageSettings.excavation\n );\n }\n image = /* @__PURE__ */ React.createElement(\n \"image\",\n {\n href: imageSettings.src,\n height: calculatedImageSettings.h,\n width: calculatedImageSettings.w,\n x: calculatedImageSettings.x + margin,\n y: calculatedImageSettings.y + margin,\n preserveAspectRatio: \"none\",\n opacity: calculatedImageSettings.opacity,\n crossOrigin: calculatedImageSettings.crossOrigin\n }\n );\n }\n const fgPath = generatePath(cellsToDraw, margin);\n return /* @__PURE__ */ React.createElement(\n \"svg\",\n __spreadValues({\n height: size,\n width: size,\n viewBox: `0 0 ${numCells} ${numCells}`,\n ref: forwardedRef,\n role: \"img\"\n }, otherProps),\n !!title && /* @__PURE__ */ React.createElement(\"title\", null, title),\n /* @__PURE__ */ React.createElement(\n \"path\",\n {\n fill: bgColor,\n d: `M0,0 h${numCells}v${numCells}H0z`,\n shapeRendering: \"crispEdges\"\n }\n ),\n /* @__PURE__ */ React.createElement(\"path\", { fill: fgColor, d: fgPath, shapeRendering: \"crispEdges\" }),\n image\n );\n }\n);\nQRCodeSVG.displayName = \"QRCodeSVG\";\nexport {\n QRCodeCanvas,\n QRCodeSVG\n};\n","// src/components/EnhancedQRCode.jsx\nimport React, { useState, useEffect, useRef } from 'react';\n// import QRCode from 'qrcode.react';\nimport { QRCodeSVG } from 'qrcode.react';\nimport { useWallet } from '../contexts/WalletContext';\n\n// Mobile detection utility\nconst MobileUtils = {\n isMobile: () => {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n },\n \n copyToClipboard: async (text) => {\n try {\n if (navigator.clipboard && navigator.clipboard.writeText) {\n await navigator.clipboard.writeText(text);\n return true;\n } else {\n const textArea = document.createElement('textarea');\n textArea.value = text;\n textArea.style.position = 'fixed';\n textArea.style.left = '-9999px';\n document.body.appendChild(textArea);\n textArea.select();\n document.execCommand('copy');\n document.body.removeChild(textArea);\n return true;\n }\n } catch (err) {\n console.error('Failed to copy to clipboard:', err);\n return false;\n }\n },\n\n vibrate: (pattern = [100]) => {\n if (navigator.vibrate) {\n navigator.vibrate(pattern);\n }\n }\n};\n\nconst EnhancedQRCode = ({\n walletAddress,\n amount,\n currency,\n network,\n theme = 'light',\n onPaymentSent\n}) => {\n const [qrValue, setQrValue] = useState('');\n const [isGenerating, setIsGenerating] = useState(true);\n const [copied, setCopied] = useState(false);\n const [copiedUri, setCopiedUri] = useState(false);\n const { getTokenConfig, getNetworkConfig } = useWallet();\n\n // Generate QR code URI based on network and currency\n useEffect(() => {\n const generateQRValue = () => {\n setIsGenerating(true);\n \n try {\n const networkConfig = getNetworkConfig(network);\n const tokenConfig = getTokenConfig(network, currency);\n \n let uri = '';\n \n // Generate network-specific payment URIs\n switch (network) {\n case 'ethereum':\n case 'bsc':\n case 'polygon':\n case 'arbitrum':\n case 'optimism':\n case 'avalanche':\n if (tokenConfig && tokenConfig.contractAddress) {\n // ERC-20 token payment\n const decimals = tokenConfig.decimals;\n const amountInWei = Math.floor(parseFloat(amount) * Math.pow(10, decimals)).toString();\n \n uri = `ethereum:${tokenConfig.contractAddress}/transfer?address=${walletAddress}&uint256=${amountInWei}${networkConfig.chainId !== '0x1' ? `@${networkConfig.id}` : ''}`;\n } else {\n // Native token payment\n const amountInWei = Math.floor(parseFloat(amount) * Math.pow(10, 18)).toString();\n uri = `ethereum:${walletAddress}${networkConfig.chainId !== '0x1' ? `@${networkConfig.id}` : ''}?value=${amountInWei}`;\n }\n break;\n \n default:\n // Fallback to simple address for unsupported networks\n uri = walletAddress;\n }\n \n console.log('Generated QR URI:', uri);\n setQrValue(uri);\n \n } catch (error) {\n console.error('Failed to generate QR code:', error);\n setQrValue(walletAddress); // Fallback to just the address\n }\n \n setTimeout(() => {\n setIsGenerating(false);\n }, 1000);\n };\n\n if (walletAddress && amount && currency && network) {\n generateQRValue();\n }\n }, [walletAddress, amount, currency, network, getTokenConfig, getNetworkConfig]);\n\n const handleCopyAddress = async () => {\n const success = await MobileUtils.copyToClipboard(walletAddress);\n if (success) {\n setCopied(true);\n MobileUtils.vibrate([50]);\n setTimeout(() => setCopied(false), 2000);\n }\n };\n\n const handleCopyUri = async () => {\n const success = await MobileUtils.copyToClipboard(qrValue);\n if (success) {\n setCopiedUri(true);\n MobileUtils.vibrate([50]);\n setTimeout(() => setCopiedUri(false), 2000);\n }\n };\n\n const formatAddress = (address) => {\n if (!address || address.length <= 16) return address;\n return `${address.slice(0, 8)}...${address.slice(-8)}`;\n };\n\n const getNetworkDisplayName = (networkShortName) => {\n const networkConfig = getNetworkConfig(networkShortName);\n return networkConfig ? networkConfig.name : networkShortName;\n };\n\n const getWalletSuggestions = (networkShortName) => {\n switch (networkShortName) {\n case 'ethereum':\n case 'bsc':\n case 'polygon':\n case 'arbitrum':\n case 'optimism':\n case 'avalanche':\n return ['MetaMask', 'Trust Wallet', 'Coinbase Wallet', 'Rabby'];\n default:\n return ['Compatible Wallet'];\n }\n };\n\n return (\n <div className=\"flex flex-col items-center p-4\">\n {/* QR Code Display */}\n <div className=\"mb-4 p-4 bg-white rounded-2xl shadow-lg border-2 border-gray-100\">\n {isGenerating ? (\n <div className=\"flex items-center justify-center\" style={{ width: 200, height: 200 }}>\n <div className=\"text-center\">\n <div className=\"animate-spin rounded-full h-8 w-8 border-b-2 border-[#7042D2] mx-auto mb-2\"></div>\n <div className=\"text-sm text-gray-600\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n Generating QR Code...\n </div>\n </div>\n </div>\n ) : qrValue ? (\n <QRCodeSVG\n value={qrValue}\n size={200}\n level=\"M\"\n includeMargin={true}\n renderAs=\"svg\"\n bgColor=\"#ffffff\"\n fgColor=\"#000000\"\n />\n ) : (\n <div className=\"flex items-center justify-center bg-gray-100 rounded-lg\" style={{ width: 200, height: 200 }}>\n <div className=\"text-center p-4\">\n <div className=\"text-2xl mb-2\">⚠️</div>\n <div className=\"text-sm text-gray-600\">Failed to generate QR</div>\n </div>\n </div>\n )}\n </div>\n\n {/* Payment Information */}\n <div className=\"w-full max-w-sm mb-4\">\n <div className=\"text-center mb-4\">\n <div className=\"flex items-center justify-center mb-2\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5 mr-2 text-[#7042D2]\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M12 12h-4.01M12 12V8.01\" />\n </svg>\n <h3 className=\"font-semibold text-gray-800\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n Scan to Pay {currency}\n </h3>\n </div>\n <p className=\"text-sm text-gray-600\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n Scan with your {getNetworkDisplayName(network)} wallet\n </p>\n </div>\n\n {/* Payment Details Card */}\n <div className=\"bg-gradient-to-r from-[#7042D2]/10 to-purple-50 p-4 rounded-xl border border-[#7042D2]/20\">\n <div className=\"space-y-2\">\n <div className=\"flex justify-between items-center\">\n <span className=\"text-sm font-medium text-gray-700\">Amount:</span>\n <span className=\"text-lg font-bold text-[#7042D2]\">{amount} {currency}</span>\n </div>\n <div className=\"flex justify-between items-center\">\n <span className=\"text-sm text-gray-600\">Network:</span>\n <span className=\"text-sm font-medium text-gray-800\">{getNetworkDisplayName(network)}</span>\n </div>\n <div className=\"flex justify-between items-center\">\n <span className=\"text-sm text-gray-600\">To:</span>\n <span className=\"text-sm font-mono text-gray-800\">{formatAddress(walletAddress)}</span>\n </div>\n </div>\n </div>\n </div>\n\n {/* Mobile Action Buttons */}\n {MobileUtils.isMobile() && (\n <div className=\"w-full max-w-sm space-y-2 mb-4\">\n <button\n onClick={handleCopyAddress}\n className={`w-full py-2 px-4 rounded-xl font-semibold transition-all ${\n copied \n ? 'bg-green-600 text-white' \n : 'bg-gray-100 text-gray-800 hover:bg-gray-200'\n }`}\n style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}\n >\n {copied ? '✅ Address Copied!' : '📋 Copy Wallet Address'}\n </button>\n \n {qrValue !== walletAddress && (\n <button\n onClick={handleCopyUri}\n className={`w-full py-2 px-4 rounded-xl font-semibold transition-all text-sm ${\n copiedUri \n ? 'bg-green-600 text-white' \n : 'bg-blue-100 text-blue-800 hover:bg-blue-200'\n }`}\n style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}\n >\n {copiedUri ? '✅ Payment URI Copied!' : '🔗 Copy Payment URI'}\n </button>\n )}\n </div>\n )}\n\n {/* Payment Instructions */}\n <div className=\"w-full max-w-sm\">\n <div className=\"bg-blue-50 p-4 rounded-xl border border-blue-200\">\n <h4 className=\"text-sm font-semibold mb-3 text-blue-800 flex items-center\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4 mr-2\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n Payment Instructions\n </h4>\n <ol className=\"text-xs space-y-1 text-blue-800\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n <li>1. Open your crypto wallet ({getWalletSuggestions(network).slice(0, 2).join(' or ')})</li>\n <li>2. Scan the QR code above or copy the address manually</li>\n <li>3. Send exactly <strong>{amount} {currency}</strong> on {getNetworkDisplayName(network)}</li>\n <li>4. Click \"I have sent the payment\" after sending</li>\n </ol>\n \n <div className=\"mt-3 p-2 bg-amber-50 border border-amber-200 rounded-lg\">\n <p className=\"text-xs text-amber-800\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n <strong>⚠️ Important:</strong> Ensure you're sending on the correct network ({getNetworkDisplayName(network)}) with the exact amount shown.\n </p>\n </div>\n </div>\n </div>\n\n {/* Payment Sent Button */}\n {onPaymentSent && (\n <div className=\"w-full max-w-sm mt-4\">\n <button\n onClick={onPaymentSent}\n className=\"w-full bg-green-600 hover:bg-green-700 text-white font-semibold py-3 px-4 rounded-xl transition-all shadow-lg hover:shadow-xl\"\n style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}\n >\n ✅ I have sent the payment\n </button>\n </div>\n )}\n </div>\n );\n};\n\nexport default EnhancedQRCode;","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABxCAYAAAAj+QZ8AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAzrSURBVHgB7V3dcRs5Em4MtXWPq41gZ1+v7mwrgh3rArAUgagITNcFYDmAK9ERSBuBfQGsxY3Aku26V/MiOO7j1nqAQwMgRQ4xQONnhqOfr8q2TA4H1HzoRqO70c1g4JhUH/dhNKqgrhfT2cEMOoQaqxidyx+P5J8F8PpYjnkNPYLBgPGq+vxSFOJM/rhvXpp39ZAkGaUk40r+WK69jKT8JMdbQE8oYKDAByTJmMItGQj10OR7zyA3itFr2CQD1NhFMYYeMVhCHA8C1co7pV4yYXL4aSz/GVvfFFBBjxguIcCeOt4szYxOhiG2/V7M+T2yY7iEMOaTgIl8mBWkoth7Cduqah2u97JjuIQIUXqvYWlSohZyUEaDE/88/M+P0BMGrLIIYFAZ/R+HTGovJ+42IRqvYxZ485kKBob7QEgZZZoWoyMgrg//+vDX/0JPuA+ESLCXEApG/kxvm0LEkK2secDVZYjFpRZzIWibSyHm0COGSwjnYWoiyOIqjujXskcJUWCBqgItLuriPipOgAombqBH7EEGTKovUvz/xIdxnc8Rx8IdiHpxn7ouCVJXGnPIBD1h9p5BIU6kS6ZkBXt//uvf365fk0SIcvJJv5LUL6Wcdvq1w09z+c9MeknfSHLmEAteX8t7B30EBHsBHkLkPSsI+h482bOs3froERAT+UdLMcPlSch91M0P0w9Pz5bXpqksRcaW6Yj/H8v3vkpyLvRuOBzGxd6F2voZwpBEyKT6XMln8dF4BCzfjW2oz2hCjAu89FxmiPkctyNmMWprdOS5J11dSQsrVgXjxJAT8lyqp2aMpTnGxv1TJCRgdyzO5Jf7Giwtgv8GwWhfH5T0hK0fUQu6UeUf8UfvxY1Jl0LIHMJQBksL5zMIhXCqpLDAFpNrYSAwymnIKEkf4PUv6/+NJsQs2BHirKTlHUVaTAw9cB1xqaQijJDACYGTzUQ5adAqcbb+UuI+RPwCcTgyodjSe6UQ/4ZAtLrLi4DYhn5Y5DVscvjlguLK3xyDvWm+lEYI5+8hHiWJFMEvIRA1/3ZgfYMV9OgfYzPKZWrxfv5JLtx8DCFQhD+5bL6cRIgSN+IXb4GXlCi1VbQEt0IWdA40yRztXaG5DaEQ/Nj2crrrpP72BtJAkJRg1bhlAZr9Cc0y1LPXK/1KTYVZbcsB3rapw2RC1AwW0WvJEktS7A8sWDWyH61jkD/ul3q1xwhVUwj0HnN+1vZ2Huei4Ghvp/qwSumxfWd7I4NqRND3TdLt43rbmO7+PYYNgj93bTazEKIG4PUppELHyM+t76WrRhoEzFw+uMk/Ph0FW1O3N3/l8+9lc7/Lgd6jboR0TF5VNyeW++eQEj8EtKpf7SmGC4i78VvpRPTuUfLGQ1A3CpHkjEOIgk2ti3zXUtJiiq6gc38DXEar+15LMkgqLishSnWhOZce9tyX68mF5f4pUjL3XmHZqC1hVGkJocBnIdcN6uXZI4ZKR2obO22Rx/VE6esG6m+n/nsLW/jX/Rnp5GuTDpP7Fb6IGzJCPMadhHCVjc1rnBVppAg4b5rCinBeHzs/x7fd9uqhuNz59TfrPY3qDA8f3JIxD/lYZzH1TKRgztXEcu8ZWiztH6vtD17wlt23w/qxH1NwI5IMNRx0iDyk2POntMUiLDpftIeOOZ9ufxd5fYv1Y6RjDCFIIAPRywkq9YuxQvp8WAkxkKS2HWdT+VgFpvWw7zG24Dv2Jq8/kv6nl3rH7L4eQ9AQQojcw4BQJ7yiJ2AvhCAMKe+CQqgrKBs+bmecAIxyAlldKUk7g0R4s070ovpdadJ8DL6TM+DPoHizEeGDyeHNmZwHYYukiDA3E0HMGUAsD4fOIAP2LF/EnKtjGAqtQG2EOCzTfDT0/+UM0jFhte8QN+rnur526U+cRXIMuZ8oLgJUWG/nM9bg3wBqFXWalO7UwEplbeYORexGN+6qSLp26Wijws7ktf4sQvQvXT0hb65ywOw92twk0oSG0+mvfhd9KBQhLUeCc2EOjsQ5EjFc/vIul0YHUBOUFR8bUrxQ/jpprXV1VFoTcvgJ3d5H0D0uncRgEvSoeCGlqzIvL1xmaddYfScFft114QIEM9LxFfrFZXKq6T0FbgzT1os4YEbjR2lx9W7KDh3M1Pf4H+wKHVgqdxmFdpknx8TjgRkb1BytBwDtyxIq6N6J1UBEKd0Z7+ARmhDj0k53l6dAiGd6F/+wsfL2rjyzPR9y3ARhk3jPseF+V6RguHF3a0rZZxmLIaLV26uca9o7W0Kf4PUP0x4Lhg0NXve78ukI8boXYnbgsxoayPEQRQz6m27dGnmRGGm7LwgOUK38OwxO4oJNFjxuDldIihiazdwzGT+p1NkLnQlOdcUsVFY75+/7cNrdFWQP4Zq0nRI0MeiW2SSIq4yQxaM0POJOoCsJ0VJSjMqtC3g9x5j8dPa35Bzg+4hkQnSlAv7MxOCpiQGIOeQowXHPEEWIJkFgXZEx5ImnPAasDOj7kJxJEHagg/PgIe/SEbS8rGYlm26Aaw5meRzDA4ZTQizF8LvHA/dlWSVEp+aMLgTryE3iwKj4y/ew22DZTmHJXFQLNkbvdpH8ADX/43d4wNiIh7yqvpyY+k47IUPi8qEv6itCMP4hivC6IlnhOR/+EKAIMalAO04y8J/hfgjQEhJQdrsb7C5ddGjQi7oOPMFuICXjkYwVstTtjYKOEGJQarY6FKR8YsvSSgx37rOHpsZM9vvNNKqgfRxWKf2mqDCOW0G7ZTedfnjyCnYAU8zyRE6Mt31NDL2GpFWGo0IdLcA2dMCLmar8o01sXL9cZvaktSBN1xjt4bgTU4P4nFATOBnLzMWZ/YhxFqwRIc1q9FchEWFV2CZ9PIwtbJapnaiM/Rx9rxy4zVzUJ0hPM2UuGrVUP5fqRpXSZrB3Ysqnxh0M6rmfoML2uXZdaC22MDQBVueiOV+H8Y4K/Lv2hfkjg03YSYDPmuXrjMqZQBouJbnpNbkCoc612/Zo6oDrt+Pca4s/UW4zaWEdc/zLWexL9bHdu4qrS7gFJyE4VojbBR2o1IfpMHqyt4LtrHBABwdJrYTcdmhQ43iDXJbrvQ+05QDoGvLtpTqpddLNqV7xe8s46x0arMVqNrB1vf+w0KoOWGtYgJ3nWleyE2LUlK2NRRpsprmNdKHWvrbvZkvCsBZLa0JLkcsSxRLq6aTklxAsZ5RnzbiFpUa6+eXLrWtdSeGjkf29tmJpDZgKRI66kumkZCUkqXyqC42yfqZlats47VahcL5H2vipIjjOMoOq2UBkocyMhFD7ykahGSfRRcVaH177oR9nf13/+rMEVp9zF/scx5KST0K0Ps+PRh3dqKJiZLCXJCmhFfscx6ivLIS06vMcEFbp6Ar7VCkxxT49ZzLD15RkQjz6PA1aOmabY/mlo713LaV7KE1KEF2Qki4hHn2eBNEoX95Pu+39EL8ZlRRbtW4bkggxMzbOWeiFtZhl5f+YY7FVmfeUodkLCACFFFOt27sdSO1jWEEX0oH7jkb9QrNPKP0fdvaunQMFuh9iBQEgkLJP8QqkEcI6OOjfVprbsQPfgLt3Ldn5qI7pBSKAlNZJnEZI7h25uidvO/xJU428fdNmnI5zICEupL1GSpvqbO2Tgkjt9JlXXalSftsHQI36II7lXSeorvL92OjgihSA99YLVJ8Uu+XVU6dPAlx1FQty//OFNzbBxW9ARYTaWgKlUYYLjtsdkuLMRng8IUWLoy4UusL0gbPIJSt+Btq9CA87oPuzYLRxHdDGSUudep1EsYF4QqgmpAuqYICq3tD6kIL619JapdIJoXWf9kJ5iTHJo7nYW0pSpaislLDlQkXZrp74S2mMlGlNA6FVqmlb4b1uDVkMl7XFvlFpadMzkNILN/QX0xDq5O0BOeRJlY6QVqkhXaiLIgshCCRlevV0DJvZPUjGaow0sxe73VDThjQRz0lSsQ7q+hEyOYKaDjN6u1Yi5GJ/KScFtoc9bVqWGc6pOytTL1Lrmci4AlZM9etxDseU7pzB98WGXldPD6AnJCdbm9k+lsScgSpEY2qb6JomQR0Umghqlwr1DEKAXagpnoY+6oStIVv2uyFmDnlB1d/hR+GwCzUbUVw/+6E5XynotOVROogLKrWz8yZQgkkP2ZwM7gXDJoTSkJ7Y2bkJPeNpxT5r/sdP0BMGLiHMX6FUQHy7V+oxjFxeCcpQMGQwRljQ48+29NZfNwADlxAvLpOzz/vqQk3E3SYkw7n2oUnJsAkRwmEFiXzn/gYkJQOXEGFP51Eue07zhREwJCkZupVldxYWLH/VB1cXat5fdaJhE8JriwUl3nTRrk4T3Bbdq1NCDUEYNCFm87Z8SAtzUukMOoK94bHo7Yw6orMjbTmxDOD05U/SBz2l2wab3ncgjS78H0eagrHjdQciAAAAAElFTkSuQmCC\"","// src/components/EnhancedSimpleCoinleyPayment.jsx\nimport React, { useState, useEffect, useRef } from 'react';\nimport ReactDOM from 'react-dom';\nimport { useWallet } from '../contexts/WalletContext';\nimport EnhancedQRCode from './EnhancedQRCode';\nimport logo from \"../assets/Logomark.png\";\n\n// Import ONLY the mobile utils\nconst MobileUtils = {\n isMobile: () => {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n },\n \n copyToClipboard: async (text) => {\n try {\n if (navigator.clipboard && navigator.clipboard.writeText) {\n await navigator.clipboard.writeText(text);\n return true;\n } else {\n const textArea = document.createElement('textarea');\n textArea.value = text;\n textArea.style.position = 'fixed';\n textArea.style.left = '-9999px';\n document.body.appendChild(textArea);\n textArea.select();\n document.execCommand('copy');\n document.body.removeChild(textArea);\n return true;\n }\n } catch (err) {\n console.error('Failed to copy to clipboard:', err);\n return false;\n }\n },\n\n vibrate: (pattern = [100]) => {\n if (navigator.vibrate) {\n navigator.vibrate(pattern);\n }\n }\n};\n\n// API class for backend communication\nclass SimplePaymentAPI {\n constructor(baseURL, apiKey, apiSecret) {\n this.baseURL = baseURL.endsWith('/') ? baseURL.slice(0, -1) : baseURL;\n this.apiKey = apiKey;\n this.apiSecret = apiSecret;\n }\n\n async request(endpoint, options = {}) {\n const url = `${this.baseURL}${endpoint}`;\n\n const headers = {\n 'Content-Type': 'application/json',\n 'X-API-Key': this.apiKey,\n 'X-API-Secret': this.apiSecret,\n ...options.headers\n };\n\n const response = await fetch(url, {\n ...options,\n headers\n });\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || `HTTP ${response.status}`);\n }\n\n return response.json();\n }\n\n async getNetworks() {\n try {\n return await this.request('/api/networks');\n } catch (error) {\n console.error('Failed to fetch networks:', error);\n return {\n networks: [\n { id: '1', name: 'Ethereum', shortName: 'ethereum', chainId: '0x1', type: 'ethereum' },\n { id: '56', name: 'BSC', shortName: 'bsc', chainId: '0x38', type: 'bsc' },\n { id: '137', name: 'Polygon', shortName: 'polygon', chainId: '0x89', type: 'polygon' },\n { id: '42161', name: 'Arbitrum', shortName: 'arbitrum', chainId: '0xa4b1', type: 'arbitrum' },\n { id: '10', name: 'Optimism', shortName: 'optimism', chainId: '0xa', type: 'optimism' },\n { id: '43114', name: 'Avalanche', shortName: 'avalanche', chainId: '0xa86a', type: 'avalanche' }\n ]\n };\n }\n }\n\n async getTokens() {\n try {\n return await this.request('/api/networks/stablecoins');\n } catch (error) {\n console.error('Failed to fetch tokens:', error);\n return {\n stablecoins: [\n {\n id: '1', name: 'Tether USD', symbol: 'USDT',\n contractAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\n decimals: 6, networkId: '1',\n Network: { shortName: 'ethereum', name: 'Ethereum' }\n },\n {\n id: '2', name: 'USD Coin', symbol: 'USDC',\n contractAddress: '0xA0b86a33E6c73521BfB8C0e56Bf5f1B54D2b4F6d',\n decimals: 6, networkId: '1',\n Network: { shortName: 'ethereum', name: 'Ethereum' }\n }\n ]\n };\n }\n }\n\n async createPayment(data) {\n return await this.request('/api/payments/create', {\n method: 'POST',\n body: JSON.stringify(data)\n });\n }\n\n async verifyQRPayment(paymentId) {\n return await this.request('/api/payments/verify-qr', {\n method: 'POST',\n body: JSON.stringify({ paymentId })\n });\n }\n\n async processPayment(paymentId, transactionHash, network, senderAddress) {\n return await this.request('/api/payments/process', {\n method: 'POST',\n body: JSON.stringify({\n paymentId,\n transactionHash,\n network,\n senderAddress\n })\n });\n }\n}\n\n// Logo mappings for tokens and networks\nconst CMC_LOGO_BASE_URL = 'https://s2.coinmarketcap.com/static/img/coins/64x64';\n\nconst CmcIds = {\n USDT: 825,\n USDC: 3408,\n ethereum: 1027,\n bsc: 1839,\n polygon: 3890,\n arbitrum: 11841,\n optimism: 11840,\n avalanche: 5805\n};\n\nconst getCmcLogoUrl = (symbol) => {\n if (!symbol) return null;\n const directId = CmcIds[symbol.toUpperCase()];\n if (directId) {\n return `${CMC_LOGO_BASE_URL}/${directId}.png`;\n }\n return null;\n};\n\nconst NetworkLogos = {\n ethereum: 'https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png',\n bsc: 'https://s2.coinmarketcap.com/static/img/coins/64x64/1839.png',\n polygon: 'https://s2.coinmarketcap.com/static/img/coins/64x64/28321.png',\n arbitrum: 'https://s2.coinmarketcap.com/static/img/coins/64x64/11841.png',\n optimism: 'https://s2.coinmarketcap.com/static/img/coins/64x64/11840.png',\n avalanche: 'https://s2.coinmarketcap.com/static/img/coins/64x64/5805.png'\n};\n\n// Modern Dropdown Component\nconst ModernDropdown = ({\n options = [],\n value,\n onChange,\n placeholder,\n renderOption,\n getOptionKey,\n getOptionValue,\n getSearchableText,\n disabled = false\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState('');\n const [dropdownPosition, setDropdownPosition] = useState({ top: 0, left: 0, width: 400, maxHeight: 450 });\n const dropdownRef = useRef(null);\n const buttonRef = useRef(null);\n\n const filteredOptions = options.filter(option => {\n const searchableText = getSearchableText ? getSearchableText(option) : '';\n return searchableText.toLowerCase().includes(searchTerm.toLowerCase());\n });\n\n const selectedOption = options.find(option => getOptionValue(option) === value);\n\n const updateDropdownPosition = () => {\n if (buttonRef.current) {\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n const scrollLeft = window.pageXOffset || document.documentElement.scrollLeft;\n\n const dropdownWidth = Math.min(400, viewportWidth - 40);\n const dropdownHeight = Math.min(450, viewportHeight - 100);\n\n const centerX = viewportWidth / 2;\n const centerY = viewportHeight / 2;\n\n const left = centerX - (dropdownWidth / 2);\n const top = centerY - (dropdownHeight / 2);\n\n setDropdownPosition({\n top: top + scrollTop,\n left: left + scrollLeft,\n width: dropdownWidth,\n maxHeight: dropdownHeight\n });\n }\n };\n\n useEffect(() => {\n const handleClickOutside = (event) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target) &&\n buttonRef.current && !buttonRef.current.contains(event.target)) {\n setIsOpen(false);\n setSearchTerm('');\n }\n };\n\n const handleScroll = () => {\n if (isOpen) {\n updateDropdownPosition();\n }\n };\n\n const handleResize = () => {\n if (isOpen) {\n updateDropdownPosition();\n }\n };\n\n if (isOpen) {\n updateDropdownPosition();\n document.addEventListener('mousedown', handleClickOutside);\n window.addEventListener('scroll', handleScroll, true);\n window.addEventListener('resize', handleResize);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n window.removeEventListener('scroll', handleScroll, true);\n window.removeEventListener('resize', handleResize);\n };\n }, [isOpen]);\n\n const handleToggle = () => {\n if (!disabled) {\n if (!isOpen) {\n updateDropdownPosition();\n }\n setIsOpen(!isOpen);\n }\n };\n\n const dropdownContent = isOpen && (\n <>\n <div\n className=\"fixed inset-0 bg-black bg-opacity-30 transition-opacity\"\n style={{ zIndex: 999998 }}\n onClick={() => {\n setIsOpen(false);\n setSearchTerm('');\n }}\n />\n\n <div\n ref={dropdownRef}\n className=\"fixed bg-white border-2 border-gray-200 rounded-3xl shadow-2xl overflow-hidden\"\n style={{\n top: dropdownPosition.top,\n left: dropdownPosition.left,\n width: dropdownPosition.width,\n maxHeight: dropdownPosition.maxHeight,\n zIndex: 999999,\n transform: 'translateZ(0)',\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25), 0 0 0 1px rgba(0, 0, 0, 0.05)'\n }}\n >\n <div className=\"flex items-center justify-between p-4 border-b border-gray-200 bg-gradient-to-r from-[#7042D2]/10 to-purple-50\">\n <h3 className=\"text-lg font-semibold text-[#7042D2]\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n {placeholder || 'Select Option'}\n </h3>\n <button\n onClick={() => {\n setIsOpen(false);\n setSearchTerm('');\n }}\n className=\"text-gray-500 hover:text-gray-700 transition-colors p-1 rounded-full hover:bg-gray-100\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <div className=\"p-4 border-b border-gray-200 bg-gray-50\">\n <input\n type=\"text\"\n placeholder=\"Search networks and tokens...\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n className=\"w-full p-3 border border-gray-300 rounded-xl focus:outline-none focus:ring-2 focus:ring-[#7042D2]/20 focus:border-[#7042D2] text-sm\"\n style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}\n autoFocus\n />\n </div>\n\n <div\n className=\"overflow-y-auto custom-scrollbar\"\n style={{\n maxHeight: `${(dropdownPosition.maxHeight || 450) - 180}px`,\n minHeight: '200px'\n }}\n >\n {filteredOptions.length === 0 ? (\n <div className=\"p-8 text-gray-500 text-center\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n <div className=\"text-4xl mb-3\">🔍</div>\n <div className=\"text-lg mb-2\">No options found</div>\n <div className=\"text-sm text-gray-400\">Try a different search term</div>\n </div>\n ) : (\n <>\n <div className=\"px-4 py-3 bg-gray-50 border-b border-gray-100 text-sm text-gray-600\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n <span className=\"font-semibold\">{filteredOptions.length}</span> option{filteredOptions.length !== 1 ? 's' : ''} available\n </div>\n\n <div className=\"p-2\">\n {filteredOptions.map((option) => (\n <button\n key={getOptionKey(option)}\n type=\"button\"\n onClick={() => {\n onChange(getOptionValue(option));\n setIsOpen(false);\n setSearchTerm('');\n }}\n className={`w-full p-4 text-left hover:bg-[#7042D2]/10 transition-all duration-200 rounded-xl mb-2 last:mb-0 ${getOptionValue(option) === value\n ? 'bg-[#7042D2]/20 text-[#7042D2] border-2 border-[#7042D2]/30'\n : 'text-gray-800 border-2 border-transparent hover:border-[#7042D2]/20'\n }`}\n style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}\n >\n {renderOption(option)}\n </button>\n ))}\n </div>\n </>\n )}\n </div>\n\n <div className=\"p-3 bg-gradient-to-r from-gray-50 to-gray-100 border-t border-gray-200 text-center\">\n <div className=\"text-xs text-gray-500\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n {filteredOptions.length > 5 ? '↕️ Scroll to see more options' : '✨ Select your preferred option'}\n </div>\n </div>\n </div>\n </>\n );\n\n return (\n <>\n <div className=\"relative\">\n <button\n ref={buttonRef}\n type=\"button\"\n onClick={handleToggle}\n disabled={disabled}\n className={`w-full p-4 border-2 rounded-2xl bg-gradient-to-r from-white to-gray-50 text-left focus:outline-none focus:ring-3 focus:ring-[#7042D2]/20 focus:border-[#7042D2] transition-all duration-300 ease-out shadow-lg hover:shadow-xl ${disabled ? 'opacity-50 cursor-not-allowed' : 'hover:border-[#7042D2]/50 cursor-pointer'\n } ${isOpen ? 'border-[#7042D2] ring-3 ring-[#7042D2]/20' : 'border-gray-200'}`}\n style={{\n minHeight: '60px',\n fontFamily: 'Bricolage Grotesque, sans-serif',\n fontSize: '16px',\n fontWeight: '500'\n }}\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center space-x-3\">\n {selectedOption ? renderOption(selectedOption) : (\n <span className=\"text-gray-500\">{placeholder}</span>\n )}\n </div>\n <div className={`transform transition-transform duration-200 ${isOpen ? 'rotate-180' : ''}`}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5 text-[#7042D2]\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </div>\n </div>\n </button>\n </div>\n\n {typeof document !== 'undefined' && document.body &&\n ReactDOM.createPortal(dropdownContent, document.body)\n }\n\n <style jsx>{`\n .custom-scrollbar {\n scrollbar-width: thin;\n scrollbar-color: #7042D2 #f1f1f1;\n }\n .custom-scrollbar::-webkit-scrollbar {\n width: 12px;\n }\n .custom-scrollbar::-webkit-scrollbar-track {\n background: #f8f9fa;\n border-radius: 10px;\n margin: 4px;\n }\n .custom-scrollbar::-webkit-scrollbar-thumb {\n background: linear-gradient(180deg, #7042D2 0%, #5b34b1 100%);\n border-radius: 10px;\n border: 2px solid #f8f9fa;\n }\n .custom-scrollbar::-webkit-scrollbar-thumb:hover {\n background: linear-gradient(180deg, #5b34b1 0%, #4c2a93 100%);\n }\n .custom-scrollbar::-webkit-scrollbar-corner {\n background: #f8f9fa;\n }\n `}</style>\n </>\n );\n};\n\n// Wallet Selection Component\nconst CustomWalletSelector = ({\n selectedNetwork,\n onWalletSelect,\n onConnect,\n loading\n}) => {\n const { availableWallets, isConnected, account, walletType, error } = useWallet();\n\n const getCompatibleWallets = () => {\n if (!selectedNetwork) return [];\n\n // Only show wallets for EVM-compatible chains\n const evmNetworks = ['ethereum', 'bsc', 'polygon', 'arbitrum', 'optimism', 'avalanche'];\n if (evmNetworks.includes(selectedNetwork.shortName)) {\n return availableWallets;\n }\n\n return [];\n };\n\n const compatibleWallets = getCompatibleWallets();\n\n const renderWalletOption = (wallet) => {\n return (\n <div className=\"flex items-center space-x-3\">\n <div className=\"text-2xl\">{wallet.icon}</div>\n <div className=\"flex-1\">\n <div className=\"font-semibold text-gray-800 flex items-center\">\n {wallet.name}\n {isConnected && walletType === wallet.type && (\n <span className=\"ml-2 px-2 py-1 bg-green-100 text-green-700 text-xs rounded-full\">\n CONNECTED\n </span>\n )}\n </div>\n <div className=\"text-sm text-gray-500\">\n {isConnected && walletType === wallet.type\n ? `Connected • ${account?.slice(0, 6)}...${account?.slice(-4)}`\n : wallet.description\n }\n </div>\n </div>\n {loading && (\n <div className=\"animate-spin rounded-full h-5 w-5 border-b-2 border-[#7042D2]\"></div>\n )}\n </div>\n );\n };\n\n const handleWalletSelection = async (walletType) => {\n onWalletSelect(walletType);\n await onConnect(walletType);\n };\n\n if (!selectedNetwork) {\n return (\n <div className=\"text-center p-4\">\n <p className=\"text-gray-500\">Please select a network first</p>\n </div>\n );\n }\n\n if (compatibleWallets.length === 0) {\n return (\n <div className=\"text-center p-4\">\n <p className=\"text-gray-500 mb-4\">No compatible wallets found for {selectedNetwork.name}</p>\n <div className=\"p-3 bg-amber-50 rounded-lg border border-amber-200\">\n <div className=\"text-sm text-amber-800\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n <div className=\"font-medium mb-2\">Install a compatible wallet:</div>\n <div className=\"space-y-1 text-xs\">\n <div>• <a href=\"https://metamask.io\" target=\"_blank\" rel=\"noopener noreferrer\" className=\"text-amber-700 underline hover:text-amber-900\">Install MetaMask</a></div>\n <div>• <a href=\"https://rabby.io\" target=\"_blank\" rel=\"noopener noreferrer\" className=\"text-amber-700 underline hover:text-amber-900\">Install Rabby Wallet</a></div>\n <div>• <a href=\"https://wallet.coinbase.com/\" target=\"_blank\" rel=\"noopener noreferrer\" className=\"text-amber-700 underline hover:text-amber-900\">Install Coinbase Wallet</a></div>\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-4\">\n <label className=\"block text-sm font-medium text-gray-700\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n Select Wallet for {selectedNetwork.name}\n </label>\n\n <ModernDropdown\n options={compatibleWallets}\n value={walletType || ''}\n onChange={handleWalletSelection}\n placeholder=\"Choose your wallet...\"\n renderOption={renderWalletOption}\n getOptionKey={(wallet) => wallet.type}\n getOptionValue={(wallet) => wallet.type}\n getSearchableText={(wallet) => `${wallet.name} ${wallet.description}`}\n disabled={loading}\n />\n\n {isConnected && (\n <div className=\"p-3 bg-green-50 rounded-lg border border-green-200\">\n <div className=\"text-sm text-green-800 text-center\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n <div className=\"font-medium\">Wallet Connected</div>\n <div className=\"text-xs mt-1 flex items-center justify-center space-x-2\">\n <span className=\"text-2xl\">\n {compatibleWallets.find(w => w.type === walletType)?.icon}\n </span>\n <span>\n {account?.slice(0, 6)}...{account?.slice(-4)}\n ({compatibleWallets.find(w => w.type === walletType)?.name})\n </span>\n </div>\n </div>\n </div>\n )}\n\n {error && (\n <div className=\"p-3 bg-red-50 rounded-lg border border-red-200\">\n <div className=\"text-sm text-red-800\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n {error}\n </div>\n </div>\n )}\n </div>\n );\n};\n\n// Payment Status Component\nconst EnhancedPaymentStatus = ({\n status,\n message,\n theme = 'light',\n payment = null,\n transactionHash = null,\n selectedPaymentMethod = null,\n merchantName = 'Merchant',\n onClose = null\n}) => {\n const [copiedHash, setCopiedHash] = useState(false);\n const [processingProgress, setProcessingProgress] = useState(0);\n\n useEffect(() => {\n if (status === 'processing') {\n const interval = setInterval(() => {\n setProcessingProgress(prev => {\n if (prev >= 90) return prev;\n return prev + Math.random() * 15;\n });\n }, 500);\n\n return () => clearInterval(interval);\n }\n }, [status]);\n\n const copyTransactionHash = async () => {\n if (transactionHash) {\n try {\n await navigator.clipboard.writeText(transactionHash);\n setCopiedHash(true);\n setTimeout(() => setCopiedHash(false), 2000);\n } catch (err) {\n console.error('Failed to copy transaction hash:', err);\n }\n }\n };\n\n const formatTransactionHash = (hash) => {\n if (!hash) return '';\n if (hash.length <= 16) return hash;\n return `${hash.slice(0, 8)}...${hash.slice(-8)}`;\n };\n\n const renderIcon = () => {\n switch (status) {\n case 'processing':\n return (\n <div className=\"relative\">\n <div className=\"animate-spin rounded-full h-12 w-12 border-4 border-t-[#7042D2] border-blue-500/20\"></div>\n <div className=\"absolute inset-0 flex items-center justify-center\">\n <div className=\"w-6 h-6 bg-[#7042D2] rounded-full animate-pulse\"></div>\n </div>\n </div>\n );\n case 'success':\n return (\n <div className=\"rounded-full h-16 w-16 bg-green-500 flex items-center justify-center animate-bounce\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-10 w-10 text-white\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={3}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n </div>\n );\n case 'error':\n return (\n <div className=\"rounded-full h-12 w-12 bg-red-100 flex items-center justify-center\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-8 w-8 text-red-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </div>\n );\n default:\n return null;\n }\n };\n\n if (status === 'processing') {\n return (\n <div className=\"flex flex-col items-center justify-center py-6 px-4\">\n <div className=\"mb-6\">{renderIcon()}</div>\n\n <h3 className=\"text-xl font-bold mb-3 text-gray-900\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n Processing Payment\n </h3>\n\n <p className=\"text-center text-gray-600 mb-6\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n Your transaction has been sent to the blockchain and is being processed...\n </p>\n\n <div className=\"w-full max-w-xs mb-4\">\n <div className=\"bg-gray-200 rounded-full h-3\">\n <div\n className=\"bg-[#7042D2] h-3 rounded-full transition-all duration-500 ease-out\"\n style={{ width: `${processingProgress}%` }}\n ></div>\n </div>\n <div className=\"text-center mt-2 text-sm text-gray-500\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n Processing... {Math.round(processingProgress)}%\n </div>\n </div>\n\n <div className=\"text-center space-y-2\">\n <div className=\"flex items-center justify-center space-x-2\">\n <div className=\"w-2 h-2 bg-gray-300 rounded-full\"></div>\n <span className=\"text-sm text-gray-400\">Finalizing payment...</span>\n </div>\n </div>\n\n <div className=\"mt-6 p-3 bg-blue-50 rounded-lg border border-blue-200\">\n <p className=\"text-xs text-blue-800 text-center\">\n Please don't close this window. This usually takes 10-30 seconds.\n </p>\n </div>\n </div>\n );\n }\n\n if (status === 'success') {\n return (\n <div className=\"flex flex-col items-center justify-center py-6 px-4\">\n <div className=\"mb-6\">{renderIcon()}</div>\n\n <h3 className=\"text-2xl font-bold mb-3 text-gray-900\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n Payment Successful!\n </h3>\n\n {payment && selectedPaymentMethod && (\n <p className=\"text-center max-w-[235px] mb-6 text-gray-600\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n Your payment of <span className='text-[#7042D2] font-semibold'>{payment.totalAmount || payment.amount} {selectedPaymentMethod.currency}</span> has been completed.\n </p>\n )}\n\n {transactionHash && (\n <div className=\"w-full mb-6 px-4\">\n <p className=\"text-sm font-medium mb-2 text-gray-700\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n Transaction Hash\n </p>\n <div\n className=\"flex items-center justify-between p-3 rounded-lg border cursor-pointer transition-colors bg-gray-50 border-gray-200 hover:bg-gray-100\"\n onClick={copyTransactionHash}\n >\n <span className=\"font-mono text-sm text-gray-700\">\n {formatTransactionHash(transactionHash)}\n </span>\n <div className=\"flex items-center\">\n {copiedHash ? (\n <span className=\"text-green-500 text-xs font-medium mr-2\">Copied!</span>\n ) : null}\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-4 w-4 text-gray-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\" />\n </svg>\n </div>\n </div>\n </div>\n )}\n\n {onClose && (\n <button\n onClick={onClose}\n className=\"w-full py-3 px-4 bg-[#7042D2] text-white font-semibold rounded-2xl text-lg shadow-md hover:bg-[#5b34b1] transition-colors\"\n style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}\n >\n Close\n </button>\n )}\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col items-center justify-center py-6\">\n <div className=\"mb-4\">{renderIcon()}</div>\n <h3 className=\"text-xl font-bold mb-2 text-gray-900\">\n {status === 'processing' ? 'Processing Payment' : status === 'error' ? 'Payment Failed' : 'Unknown Status'}\n </h3>\n <p className=\"text-center text-gray-600\">{message}</p>\n </div>\n );\n};\n\n// Screen transition wrapper\nconst ScreenTransition = ({\n currentStep,\n targetStep,\n children,\n className = \"\",\n duration = 300\n}) => {\n const [isVisible, setIsVisible] = useState(currentStep === targetStep);\n const [shouldRender, setShouldRender] = useState(currentStep === targetStep);\n\n useEffect(() => {\n if (currentStep === targetStep) {\n setShouldRender(true);\n setTimeout(() => setIsVisible(true), 10);\n } else {\n setIsVisible(false);\n setTimeout(() => setShouldRender(false), duration);\n }\n }, [currentStep, targetStep, duration]);\n\n if (!shouldRender) return null;\n\n return (\n <div\n className={`\n transition-all duration-300 ease-out\n ${isVisible\n ? 'transform translate-y-0 opacity-100'\n : 'transform translate-y-full opacity-0'\n }\n ${className}\n `}\n style={{\n transitionDuration: `${duration}ms`\n }}\n >\n {children}\n </div>\n );\n};\n\n// Main Enhanced Component\nconst EnhancedSimpleCoinleyPayment = ({\n apiKey,\n apiSecret,\n apiUrl,\n config,\n onSuccess,\n onError,\n onClose,\n isOpen,\n theme = 'light'\n}) => {\n const [currentStep, setCurrentStep] = useState('method');\n const [networks, setNetworks] = useState([]);\n const [tokens, setTokens] = useState([]);\n const [selectedNetwork, setSelectedNetwork] = useState(null);\n const [selectedToken, setSelectedToken] = useState(null);\n const [paymentData, setPaymentData] = useState(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n const [processing, setProcessing] = useState(false);\n const [paymentType, setPaymentType] = useState('wallet');\n const [actualTransactionHash, setActualTransactionHash] = useState(null);\n\n const api = useRef(new SimplePaymentAPI(apiUrl, apiKey, apiSecret));\n const {\n connect,\n disconnect,\n sendTransaction,\n switchNetwork,\n isConnected,\n account,\n walletType,\n chainId,\n clearError,\n getNetworkConfig,\n getTokenConfig\n } = useWallet();\n\n useEffect(() => {\n if (isOpen) {\n loadData();\n resetState();\n }\n }, [isOpen]);\n\n const resetState = () => {\n setCurrentStep('method');\n setSelectedNetwork(null);\n setSelectedToken(null);\n setPaymentData(null);\n setError('');\n setProcessing(false);\n setActualTransactionHash(null);\n setPaymentType('wallet');\n disconnect();\n clearError();\n };\n\n const loadData = async () => {\n try {\n setLoading(true);\n setError('');\n\n console.log('Loading networks and tokens...');\n const [networksRes, tokensRes] = await Promise.all([\n api.current.getNetworks(),\n api.current.getTokens()\n ]);\n\n // Filter for only USDT and USDC tokens\n const filteredTokens = tokensRes.stablecoins?.filter(token => \n ['USDT', 'USDC'].includes(token.symbol.toUpperCase())\n ) || [];\n\n setNetworks(networksRes.networks || []);\n setTokens(filteredTokens);\n\n console.log('Loaded networks:', networksRes.networks?.length || 0);\n console.log('Loaded filtered tokens (USDT/USDC only):', filteredTokens.length);\n\n } catch (err) {\n console.error('Failed to load data:', err);\n setError('Failed to load payment options. Using fallback data.');\n } finally {\n setLoading(false);\n }\n };\n\n const createPayment = async () => {\n try {\n setLoading(true);\n setError('');\n\n const paymentPayload = {\n amount: config.amount,\n currency: selectedToken.symbol,\n network: selectedNetwork.shortName,\n customerEmail: config.customerEmail,\n callbackUrl: config.callbackUrl,\n metadata: {\n ...config.metadata,\n merchantWalletAddresses: config.merchantWalletAddresses,\n selectedNetwork: selectedNetwork.shortName,\n selectedToken: selectedToken.symbol,\n customSdkEnabled: true\n }\n };\n\n console.log('Creating payment:', paymentPayload);\n const payment = await api.current.createPayment(paymentPayload);\n setPaymentData(payment.payment);\n\n console.log('Payment created:', payment.payment.id);\n setCurrentStep('confirm');\n\n } catch (err) {\n console.error('Payment creation failed:', err);\n setError(err.message);\n } finally {\n setLoading(false);\n }\n };\n\n const handleWalletConnect = async (walletType) => {\n try {\n setLoading(true);\n setError('');\n\n await connect(walletType);\n\n // Switch to correct network if needed\n const networkConfig = getNetworkConfig(selectedNetwork.shortName);\n if (networkConfig && chainId !== networkConfig.chainId) {\n await switchNetwork(networkConfig);\n }\n\n } catch (err) {\n console.error('Wallet connection failed:', err);\n setError(err.message);\n } finally {\n setLoading(false);\n }\n };\n\n const sendWalletTransaction = async () => {\n if (!isConnected) {\n setError('No wallet connected');\n return;\n }\n\n try {\n setProcessing(true);\n setError('');\n\n const recipientAddress = paymentData.metadata?.recipientWallet ||\n config.merchantWalletAddresses?.[selectedNetwork.shortName];\n\n if (!recipientAddress) {\n throw new Error('Merchant wallet address not found');\n }\n\n console.log('Preparing transaction to:', recipientAddress);\n\n let txParams;\n const tokenConfig = getTokenConfig(selectedNetwork.shortName, selectedToken.symbol);\n\n if (tokenConfig && tokenConfig.contractAddress) {\n // ERC-20 token transaction\n const decimals = tokenConfig.decimals || 6;\n const amount = Math.floor(paymentData.totalAmount * Math.pow(10, decimals));\n\n const methodId = '0xa9059cbb';\n const recipientPadded = recipientAddress.slice(2).toLowerCase().padStart(64, '0');\n const amountPadded = amount.toString(16).padStart(64, '0');\n const data = `${methodId}${recipientPadded}${amountPadded}`;\n\n txParams = {\n to: tokenConfig.contractAddress,\n data: data,\n value: '0x0'\n };\n\n } else {\n // Native token transaction\n const value = Math.floor(paymentData.totalAmount * Math.pow(10, 18));\n txParams = {\n to: recipientAddress,\n value: `0x${value.toString(16)}`\n };\n }\n\n setCurrentStep('processing');\n\n const txHash = await sendTransaction(txParams);\n console.log('Transaction sent successfully:', txHash);\n\n setActualTransactionHash(txHash);\n\n // Process payment on backend\n try {\n const processResult = await api.current.processPayment(\n paymentData.id,\n txHash,\n selectedNetwork.shortName,\n account\n );\n console.log('Payment processed on server:', processResult);\n } catch (processError) {\n console.error('Failed to update payment status:', processError);\n }\n\n setTimeout(() => {\n setCurrentStep('success');\n onSuccess?.(paymentData.id, txHash, {\n network: selectedNetwork.name,\n currency: selectedToken.symbol,\n amount: paymentData.totalAmount,\n method: 'wallet',\n walletType: walletType,\n customSdkEnabled: true,\n realTransactionHash: txHash\n });\n }, 2000);\n\n } catch (err) {\n console.error('Transaction failed:', err);\n setError(err.message);\n setCurrentStep('confirm');\n onError?.(err.message);\n } finally {\n setProcessing(false);\n }\n };\n\n const handleQRPaymentVerification = async () => {\n if (!paymentData) {\n setError('Payment information is missing');\n return;\n }\n\n setCurrentStep('processing');\n setError(null);\n\n try {\n console.log('Starting QR payment verification...');\n\n const verificationResult = await api.current.verifyQRPayment(paymentData.id);\n\n if (verificationResult.verified) {\n console.log('QR payment verified successfully:', verificationResult);\n\n if (verificationResult.payment?.transactionHash) {\n setActualTransactionHash(verificationResult.payment.transactionHash);\n }\n\n setCurrentStep('success');\n\n if (onSuccess) {\n onSuccess(paymentData.id, verificationResult.payment.transactionHash, {\n network: selectedNetwork.name,\n currency: selectedToken.symbol,\n amount: verificationResult.payment.amount,\n verificationType: 'QR_PAYMENT'\n });\n }\n } else {\n setError(verificationResult.message || 'Transaction not detected yet. Please wait a moment and try again.');\n setCurrentStep('confirm');\n }\n } catch (error) {\n console.error('QR payment verification error:', error);\n const errorMessage = error.message || 'Failed to verify payment. Please try again.';\n setError(errorMessage);\n setCurrentStep('confirm');\n if (onError) onError(errorMessage);\n }\n };\n\n const formatAmount = (amount) => {\n return parseFloat(amount).toFixed(2);\n };\n\n const getWalletAddressForNetwork = () => {\n if (!selectedNetwork) return 'No network selected';\n const networkAddress = config.merchantWalletAddresses?.[selectedNetwork.shortName];\n if (networkAddress) return networkAddress;\n if (paymentData?.recipientWallet) return paymentData.recipientWallet;\n return 'No wallet address configured for this network';\n };\n\n // Helper functions for dropdown rendering\n const renderNetworkOption = (network) => {\n const networkLogoUrl = NetworkLogos[network.shortName?.toLowerCase()];\n\n return (\n <div className=\"flex items-center space-x-3\">\n {networkLogoUrl ? (\n <img\n src={networkLogoUrl}\n alt={network.name}\n className=\"w-8 h-8 rounded-full\"\n onError={(e) => {\n e.target.style.display = 'none';\n e.target.nextSibling.style.display = 'flex';\n }}\n />\n ) : null}\n <div\n className=\"w-8 h-8 rounded-full bg-gray-200 flex items-center justify-center\"\n style={{ display: networkLogoUrl ? 'none' : 'flex' }}\n >\n <span className=\"text-xs font-bold text-gray-600\">{network.shortName?.slice(0, 2).toUpperCase()}</span>\n </div>\n <div>\n <div className=\"font-semibold text-gray-800\">{network.name}</div>\n <div className=\"text-sm text-gray-500\">{network.shortName?.toUpperCase()}</div>\n </div>\n </div>\n );\n };\n\n const renderTokenOption = (token) => {\n const tokenLogoUrl = getCmcLogoUrl(token.symbol);\n\n return (\n <div className=\"flex items-center space-x-3\">\n {tokenLogoUrl ? (\n <img\n src={tokenLogoUrl}\n alt={token.symbol}\n className=\"w-8 h-8 rounded-full\"\n onError={(e) => {\n e.target.style.display = 'none';\n e.target.nextSibling.style.display = 'flex';\n }}\n />\n ) : null}\n <div\n className=\"w-8 h-8 rounded-full bg-gray-200 flex items-center justify-center\"\n style={{ display: tokenLogoUrl ? 'none' : 'flex' }}\n >\n <span className=\"text-xs font-bold text-gray-600\">{token.symbol?.slice(0, 2)}</span>\n </div>\n <div>\n <div className=\"font-semibold text-gray-800\">{token.name} ({token.symbol})</div>\n <div className=\"text-sm text-gray-500\">\n {token.Network?.name || 'Unknown Network'}\n <span className=\"ml-2 text-green-600\">• Stablecoin</span>\n </div>\n </div>\n </div>\n );\n };\n\n if (!isOpen) return null;\n\n return (\n <div className=\"fixed inset-0 z-50\">\n <div className=\"fixed inset-0 bg-black bg-opacity-50 transition-opacity\" onClick={onClose} aria-hidden=\"true\" />\n <div className=\"fixed inset-0 overflow-y-auto\" style={{ zIndex: 51 }}>\n <div className=\"flex min-h-screen items-center justify-center p-4\">\n <div className=\"relative pt-6 w-full max-w-md mx-auto shadow-xl bg-gray-100 rounded-3xl overflow-hidden\" style={{ zIndex: 52 }}>\n\n {/* Modern Header with Logo */}\n <div className=\"bg-white flex justify-between items-center mb-6 mr-3 ml-3 py-4 px-2 rounded-full\">\n <div className=\"flex-1 flex items-center gap-2 px-4\">\n <div className=\"w-8 h-8 rounded-full flex items-center justify-center\">\n <img src={logo} alt=\"Coinley\" />\n </div>\n <span className=\"text-lg font-semibold text-gray-800\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>Payment Details</span>\n </div>\n {currentStep !== 'success' && currentStep !== 'processing' && (\n <button\n onClick={onClose}\n className=\"text-gray-500 hover:text-gray-700 focus:outline-none\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-6 w-6 mr-2\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n\n {/* Payment Summary */}\n {config && currentStep !== 'success' && (\n <div className=\"mb-6\">\n <div className=\"text-center\">\n <div className=\"text-sm text-gray-600\">Total Amount</div>\n <div className=\"text-4xl lg:text-5xl font-bold text-[#7042D2] mt-2 leading-tight tracking-tight\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n ${formatAmount(config.amount)}\n </div>\n\n <div className=\"mt-2 text-sm text-gray-500\">\n No additional fees\n </div>\n\n <div className=\"text-sm text-gray-600 mt-4\">Payment to:</div>\n <div className=\"text-base font-semibold mt-1 flex gap-2 items-center justify-center\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M15.3 7.50065L15.8 10.0007H4.2L4.7 7.50065H15.3ZM16.6667 3.33398H3.33333V5.00065H16.6667V3.33398ZM16.6667 5.83398H3.33333L2.5 10.0007V11.6673H3.33333V16.6673H11.6667V11.6673H15V16.6673H16.6667V11.6673H17.5V10.0007L16.6667 5.83398ZM5 15.0007V11.6673H10V15.0007H5Z\" fill=\"#7042D2\" />\n </svg>\n {config.merchantName || 'Merchant'}\n </div>\n </div>\n </div>\n )}\n\n {/* Main Content Area */}\n <div className=\"relative\">\n\n {/* Step 1: Select Network & Token */}\n <ScreenTransition currentStep={currentStep} targetStep=\"method\">\n <div className=\"pb-6 pt-6 px-6 bg-white rounded-t-2xl\">\n <h3 className=\"font-semibold text-center mb-6\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>Choose Payment Method</h3>\n\n {/* Network Selection */}\n <div className=\"space-y-4 mb-6\">\n <label className=\"block text-sm font-medium text-gray-700\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>Select Network</label>\n <ModernDropdown\n options={networks}\n value={selectedNetwork?.id || ''}\n onChange={(networkId) => {\n const network = networks.find(n => n.id === networkId);\n setSelectedNetwork(network);\n setSelectedToken(null);\n disconnect();\n }}\n placeholder=\"Choose your network...\"\n renderOption={renderNetworkOption}\n getOptionKey={(network) => network.id}\n getOptionValue={(network) => network.id}\n getSearchableText={(network) => `${network.name} ${network.shortName}`}\n disabled={loading}\n />\n </div>\n\n {/* Token Selection - Only USDT and USDC */}\n {selectedNetwork && (\n <div className=\"space-y-4 mb-6\">\n <label className=\"block text-sm font-medium text-gray-700\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>Select Stablecoin</label>\n <ModernDropdown\n options={tokens.filter(token =>\n token.Network?.shortName === selectedNetwork?.shortName ||\n token.networkId === selectedNetwork?.id\n )}\n value={selectedToken?.id || ''}\n onChange={(tokenId) => {\n const token = tokens\n .filter(token =>\n token.Network?.shortName === selectedNetwork?.shortName ||\n token.networkId === selectedNetwork?.id\n )\n .find(t => t.id === tokenId);\n setSelectedToken(token);\n }}\n placeholder=\"Choose USDT or USDC...\"\n renderOption={renderTokenOption}\n getOptionKey={(token) => token.id}\n getOptionValue={(token) => token.id}\n getSearchableText={(token) => `${token.name} ${token.symbol}`}\n disabled={loading}\n />\n </div>\n )}\n\n {/* Selected info display */}\n {selectedNetwork && selectedToken && (\n <div className=\"mb-6 p-4 bg-[#7042D2]/10 rounded-xl border border-[#7042D2]/20\">\n <div className=\"flex justify-between items-center\">\n <div className=\"flex items-center space-x-3\">\n {NetworkLogos[selectedNetwork.shortName] && (\n <img\n src={NetworkLogos[selectedNetwork.shortName]}\n alt={selectedNetwork.name}\n className=\"w-8 h-8 rounded-full\"\n />\n )}\n {getCmcLogoUrl(selectedToken.symbol) && (\n <img\n src={getCmcLogoUrl(selectedToken.symbol)}\n alt={selectedToken.symbol}\n className=\"w-8 h-8 rounded-full\"\n />\n )}\n <div>\n <p className=\"text-sm font-semibold text-[#7042D2]\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n {selectedNetwork.name} • {selectedToken.symbol}\n </p>\n <p className=\"text-xs text-[#7042D2]/80\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>{selectedToken.name}</p>\n </div>\n </div>\n <span className=\"px-3 py-1 bg-green-100 text-green-700 text-xs rounded-full font-medium\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n Stablecoin\n </span>\n </div>\n </div>\n )}\n\n {selectedNetwork && selectedToken && (\n <button\n onClick={createPayment}\n disabled={loading}\n className=\"w-full bg-[#7042D2] text-white py-4 px-4 rounded-xl hover:bg-[#5b34b1] disabled:opacity-50 font-semibold transition-all duration-200 shadow-lg hover:shadow-xl\"\n style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}\n >\n {loading ? (\n <span className=\"flex items-center justify-center\">\n <svg className=\"animate-spin -ml-1 mr-3 h-4 w-4 text-white\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\"></circle>\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n Creating Payment...\n </span>\n ) : (\n 'Continue'\n )}\n </button>\n )}\n\n {error && (\n <div className=\"mt-4 p-3 rounded-lg bg-red-50 text-red-600 text-sm\">\n {error}\n </div>\n )}\n </div>\n </ScreenTransition>\n\n {/* Step 2: Confirm Payment */}\n <ScreenTransition currentStep={currentStep} targetStep=\"confirm\">\n {selectedNetwork && selectedToken && paymentData && (\n <div>\n {/* Payment Method Tabs */}\n <div className=\"mb-4 px-4\">\n <div className=\"flex border-b border-gray-200\">\n <button\n onClick={() => setPaymentType('wallet')}\n className={`py-3 px-6 text-sm font-semibold transition-all duration-200 ${paymentType === 'wallet'\n ? 'border-b-2 border-[#7042D2] text-[#7042D2]'\n : 'text-gray-500 hover:text-gray-700'\n }`}\n style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}\n >\n Connect Wallet\n </button>\n <button\n onClick={() => setPaymentType('qrcode')}\n className={`py-3 px-6 text-sm font-semibold transition-all duration-200 ${paymentType === 'qrcode'\n ? 'border-b-2 border-[#7042D2] text-[#7042D2]'\n : 'text-gray-500 hover:text-gray-700'\n }`}\n style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}\n >\n QR Code\n </button>\n </div>\n </div>\n\n {/* Payment Content */}\n {paymentType === 'qrcode' ? (\n <div className=\"mb-4\">\n <EnhancedQRCode\n walletAddress={getWalletAddressForNetwork()}\n amount={paymentData.totalAmount || paymentData.amount}\n currency={selectedToken.symbol}\n network={selectedNetwork.shortName}\n theme={theme}\n onPaymentSent={handleQRPaymentVerification}\n />\n </div>\n ) : (\n <div>\n {/* Payment Details for wallet */}\n <div className=\"p-4 rounded-2xl mb-4 bg-white\">\n <h3 className=\"text-lg font-semibold mb-2 text-gray-800\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>Payment Details</h3>\n <div className=\"space-y-3 bg-[#7042D2]/10 p-4 rounded-xl\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n <div className=\"flex justify-between\">\n <span className=\"font-semibold text-gray-700\">Currency:</span>\n <span className=\"font-semibold text-[#7042D2] flex items-center\">\n {getCmcLogoUrl(selectedToken.symbol) && (\n <img src={getCmcLogoUrl(selectedToken.symbol)} alt={selectedToken.symbol} className=\"w-5 h-5 rounded-full mr-2\" />\n )}\n {selectedToken.symbol}\n </span>\n </div>\n <div className=\"border-b border-gray-300\"></div>\n <div className=\"flex justify-between\">\n <span className=\"font-semibold text-gray-700\">Network:</span>\n <span className=\"font-semibold text-[#7042D2] flex items-center\">\n {NetworkLogos[selectedNetwork.shortName] && (\n <img src={NetworkLogos[selectedNetwork.shortName]} alt={selectedNetwork.name} className=\"w-5 h-5 rounded-full mr-2\" />\n )}\n {selectedNetwork.name}\n </span>\n </div>\n <div className=\"border-b border-gray-300\"></div>\n <div className=\"flex justify-between border-t border-gray-400 pt-3 mt-2\">\n <span className=\"font-bold text-gray-800\">Total:</span>\n <span className=\"font-bold text-lg text-[#7042D2]\">${formatAmount(paymentData.totalAmount)}</span>\n </div>\n </div>\n </div>\n\n {/* Wallet Selection */}\n <div className=\"space-y-3 mb-4 px-4\">\n <CustomWalletSelector\n selectedNetwork={selectedNetwork}\n onWalletSelect={() => {}}\n onConnect={handleWalletConnect}\n loading={loading}\n />\n </div>\n </div>\n )}\n\n {/* Error Display */}\n {error && (\n <div className=\"p-3 rounded-lg bg-red-50 mb-4 text-red-600 text-sm mx-4\">\n {error}\n </div>\n )}\n\n {/* Action Buttons */}\n {paymentType === 'wallet' && (\n <div className=\"grid grid-cols-2 gap-3 mb-3 px-4\">\n <button\n type=\"button\"\n onClick={() => setCurrentStep('method')}\n className=\"w-full py-3 px-4 bg-gray-200 hover:bg-gray-300 text-[#7042D2] font-semibold rounded-xl transition-all duration-200\"\n style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}\n >\n Back\n </button>\n <button\n type=\"button\"\n onClick={sendWalletTransaction}\n className=\"bg-green-600 text-white w-full py-3 px-4 font-semibold rounded-xl hover:bg-green-700 transition-all duration-200 shadow-lg hover:shadow-xl\"\n disabled={!isConnected}\n style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}\n >\n Pay Now\n </button>\n </div>\n )}\n </div>\n )}\n </ScreenTransition>\n\n {/* Step 3: Processing */}\n <ScreenTransition currentStep={currentStep} targetStep=\"processing\">\n <EnhancedPaymentStatus\n status=\"processing\"\n theme={theme}\n message=\"Processing your payment...\"\n />\n </ScreenTransition>\n\n {/* Step 4: Success */}\n <ScreenTransition currentStep={currentStep} targetStep=\"success\">\n <EnhancedPaymentStatus\n status=\"success\"\n theme={theme}\n message=\"Payment successful!\"\n payment={paymentData}\n transactionHash={actualTransactionHash}\n selectedPaymentMethod={{ currency: selectedToken?.symbol }}\n merchantName={config.merchantName || 'Merchant'}\n onClose={onClose}\n />\n </ScreenTransition>\n\n </div>\n\n {/* Enhanced Footer */}\n {currentStep !== 'success' && (\n <div className=\"text-center text-xs text-gray-500 flex items-center justify-center gap-1 py-6 bg-white rounded-b-3xl\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n <p>Powered by <span className='text-[#7042D2] font-semibold'>Coinley</span> - Custom Wallet SDK</p>\n <svg className=\"inline w-4 h-4 text-green-500 ml-1\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"2\" fill=\"none\" />\n <path d=\"M9 12l2 2 4-4\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default EnhancedSimpleCoinleyPayment\n ","// //src/CoinleyProvider.jsx - coinley-test\n// import React, { createContext, useContext, useRef, forwardRef, useImperativeHandle } from 'react';\n// // import CoinleyPayment from './CoinleyPayment';\n// import CoinleyPayment from './components/EnhancedSimpleCoinleyPayment';\n\n// const CoinleyContext = createContext(null);\n\n// export const CoinleyProvider = ({\n// apiKey,\n// apiSecret,\n// apiUrl,\n// theme = 'light',\n// debug = false,\n// children\n// }) => {\n// const [isOpen, setIsOpen] = React.useState(false);\n// const [paymentConfig, setPaymentConfig] = React.useState(null);\n// const [callbacks, setCallbacks] = React.useState({});\n// const [merchantName, setMerchantName] = React.useState('');\n\n// const openPayment = (config, checkoutCallbacks) => {\n// setPaymentConfig(config);\n// if (checkoutCallbacks) {\n// setCallbacks(checkoutCallbacks);\n// }\n// setIsOpen(true);\n// };\n\n// const closePayment = () => {\n// setIsOpen(false);\n// setPaymentConfig(null);\n// if (callbacks.onClose) {\n// callbacks.onClose();\n// }\n// };\n\n// const contextValue = {\n// openPayment,\n// closePayment\n// };\n\n// return (\n// <CoinleyContext.Provider value={contextValue}>\n// {children}\n// {isOpen && paymentConfig && (\n// <CoinleyPayment\n// apiKey={apiKey}\n// apiSecret={apiSecret}\n// apiUrl={apiUrl}\n// isOpen={isOpen}\n// config={paymentConfig}\n// theme={theme}\n// debug={debug}\n// merchantName={merchantName}\n// onSuccess={callbacks.onSuccess}\n// onError={callbacks.onError}\n// onClose={closePayment}\n// />\n// )}\n// </CoinleyContext.Provider>\n// );\n// };\n\n// export const CoinleyCheckout = forwardRef((\n// {\n// customerEmail = '',\n// merchantName = '',\n// onSuccess,\n// onError,\n// onClose,\n// theme = 'light',\n// autoOpen = false,\n// testMode = false,\n// debug = false,\n// merchantWalletAddresses = {}\n// },\n// ref\n// ) => {\n// const context = useContext(CoinleyContext);\n\n// if (!context) {\n// throw new Error('CoinleyCheckout must be used within a CoinleyProvider');\n// }\n\n// const { openPayment, closePayment } = context;\n\n// const open = (config) => {\n// try {\n// if (debug) {\n// console.log('Opening Coinley checkout with config:', config);\n// }\n\n// if (!config.amount || config.amount <= 0) {\n// throw new Error('Amount must be greater than 0');\n// }\n\n// const finalConfig = {\n// ...config,\n// customerEmail: config.customerEmail || customerEmail,\n// merchantWalletAddresses: {\n// ...merchantWalletAddresses,\n// ...config.merchantWalletAddresses\n// },\n// metadata: {\n// ...config.metadata,\n// testMode,\n// checkoutVersion: '1.0.0'\n// }\n// };\n\n// const checkoutCallbacks = {\n// onSuccess,\n// onError,\n// onClose\n// };\n\n// openPayment(finalConfig, checkoutCallbacks);\n// } catch (error) {\n// console.error('Failed to open Coinley checkout:', error);\n// if (onError) {\n// onError(error);\n// }\n// }\n// };\n\n// const close = () => {\n// closePayment();\n// };\n\n// useImperativeHandle(ref, () => ({\n// open,\n// close\n// }));\n\n// return null;\n// });\n\n// CoinleyCheckout.displayName = 'CoinleyCheckout';\n\n// export const useCoinley = () => {\n// const context = useContext(CoinleyContext);\n// if (!context) {\n// throw new Error('useCoinley must be used within a CoinleyProvider');\n// }\n// return context;\n// };\n\n// export const ThemeProvider = ({\n// initialTheme = 'light',\n// children\n// }) => {\n// const [theme, setTheme] = React.useState(initialTheme);\n\n// React.useEffect(() => {\n// document.documentElement.setAttribute('data-coinley-theme', theme);\n// }, [theme]);\n\n// const toggleTheme = () => {\n// setTheme(prev => prev === 'light' ? 'dark' : 'light');\n// };\n\n// return (\n// <div className={`coinley-theme-${theme}`}>\n// {children}\n// </div>\n// );\n// };\n\n\n\n\n// src/CoinleyProvider.jsx\nimport React, { createContext, useContext, useRef, forwardRef, useImperativeHandle } from 'react';\nimport { WalletProvider } from './contexts/WalletContext.jsx';\nimport EnhancedSimpleCoinleyPayment from './components/EnhancedSimpleCoinleyPayment';\n\nconst CoinleyContext = createContext(null);\n\nexport const CoinleyProvider = ({\n apiKey,\n apiSecret,\n apiUrl,\n theme = 'light',\n debug = false,\n children\n}) => {\n const [isOpen, setIsOpen] = React.useState(false);\n const [paymentConfig, setPaymentConfig] = React.useState(null);\n const [callbacks, setCallbacks] = React.useState({});\n const [merchantName, setMerchantName] = React.useState('');\n\n const openPayment = (config, checkoutCallbacks) => {\n setPaymentConfig(config);\n if (checkoutCallbacks) {\n setCallbacks(checkoutCallbacks);\n }\n setIsOpen(true);\n };\n\n const closePayment = () => {\n setIsOpen(false);\n setPaymentConfig(null);\n setCallbacks({});\n };\n\n const handleSuccess = (paymentId, transactionHash, details) => {\n if (debug) {\n console.log('Payment Success:', { paymentId, transactionHash, details });\n }\n if (callbacks.onSuccess) {\n callbacks.onSuccess(paymentId, transactionHash, details);\n }\n };\n\n const handleError = (error) => {\n if (debug) {\n console.error('Payment Error:', error);\n }\n if (callbacks.onError) {\n callbacks.onError(error);\n }\n };\n\n const handleClose = () => {\n if (callbacks.onClose) {\n callbacks.onClose();\n }\n closePayment();\n };\n\n const contextValue = {\n openPayment,\n closePayment,\n isOpen,\n paymentConfig,\n theme,\n debug,\n merchantName,\n setMerchantName\n };\n\n return (\n <WalletProvider>\n <CoinleyContext.Provider value={contextValue}>\n {children}\n {isOpen && paymentConfig && (\n <EnhancedSimpleCoinleyPayment\n apiKey={apiKey}\n apiSecret={apiSecret}\n apiUrl={apiUrl}\n config={paymentConfig}\n onSuccess={handleSuccess}\n onError={handleError}\n onClose={handleClose}\n isOpen={isOpen}\n theme={theme}\n />\n )}\n </CoinleyContext.Provider>\n </WalletProvider>\n );\n};\n\nexport const useCoinley = () => {\n const context = useContext(CoinleyContext);\n if (!context) {\n throw new Error('useCoinley must be used within a CoinleyProvider');\n }\n return context;\n};\n\n// Theme provider context for backward compatibility\nconst ThemeContext = createContext('light');\n\nexport const ThemeProvider = ({ theme = 'light', children }) => {\n return (\n <ThemeContext.Provider value={theme}>\n {children}\n </ThemeContext.Provider>\n );\n};\n\nexport const useTheme = () => {\n return useContext(ThemeContext);\n};\n\n// CoinleyCheckout component for backward compatibility\nexport const CoinleyCheckout = forwardRef(({\n apiKey,\n apiSecret,\n apiUrl,\n theme = 'light',\n debug = false,\n onSuccess,\n onError,\n onClose,\n ...props\n}, ref) => {\n const [isOpen, setIsOpen] = React.useState(false);\n const [paymentConfig, setPaymentConfig] = React.useState(null);\n\n const openPayment = React.useCallback((config, callbacks = {}) => {\n setPaymentConfig({\n ...config,\n onSuccess: callbacks.onSuccess || onSuccess,\n onError: callbacks.onError || onError,\n onClose: callbacks.onClose || onClose\n });\n setIsOpen(true);\n }, [onSuccess, onError, onClose]);\n\n const closePayment = React.useCallback(() => {\n setIsOpen(false);\n setPaymentConfig(null);\n }, []);\n\n React.useImperativeHandle(ref, () => ({\n openPayment,\n closePayment\n }), [openPayment, closePayment]);\n\n const handleSuccess = (paymentId, transactionHash, details) => {\n if (debug) {\n console.log('Payment Success:', { paymentId, transactionHash, details });\n }\n if (paymentConfig?.onSuccess) {\n paymentConfig.onSuccess(paymentId, transactionHash, details);\n }\n };\n\n const handleError = (error) => {\n if (debug) {\n console.error('Payment Error:', error);\n }\n if (paymentConfig?.onError) {\n paymentConfig.onError(error);\n }\n };\n\n const handleClose = () => {\n if (paymentConfig?.onClose) {\n paymentConfig.onClose();\n }\n closePayment();\n };\n\n return (\n <WalletProvider>\n {isOpen && paymentConfig && (\n <EnhancedSimpleCoinleyPayment\n apiKey={apiKey}\n apiSecret={apiSecret}\n apiUrl={apiUrl}\n config={paymentConfig}\n onSuccess={handleSuccess}\n onError={handleError}\n onClose={handleClose}\n isOpen={isOpen}\n theme={theme}\n {...props}\n />\n )}\n </WalletProvider>\n );\n});\n\nCoinleyCheckout.displayName = 'CoinleyCheckout';\n\n// Forward ref component for imperative API access\nconst CoinleyPayment = forwardRef((props, ref) => {\n const coinleyRef = useRef();\n\n useImperativeHandle(ref, () => ({\n openPayment: (config, callbacks) => {\n if (coinleyRef.current) {\n coinleyRef.current.openPayment(config, callbacks);\n }\n },\n closePayment: () => {\n if (coinleyRef.current) {\n coinleyRef.current.closePayment();\n }\n }\n }));\n\n return (\n <CoinleyProvider {...props}>\n <div ref={coinleyRef} />\n </CoinleyProvider>\n );\n});\n\nCoinleyPayment.displayName = 'CoinleyPayment';\n\nexport default CoinleyPayment;","// //src/PaymentAPI.js \n// import axios from 'axios';\n\n// export class PaymentAPI {\n// constructor(baseURL, apiKey, apiSecret) {\n// this.apiKey = apiKey;\n// this.apiSecret = apiSecret;\n\n// this.api = axios.create({\n// baseURL: baseURL.endsWith('/') ? baseURL.slice(0, -1) : baseURL,\n// timeout: 30000,\n// headers: {\n// 'Content-Type': 'application/json',\n// },\n// });\n\n// // Add request interceptor\n// this.api.interceptors.request.use(\n// (config) => {\n// // FIXED: Use lowercase headers to match backend expectations\n// config.headers['x-api-key'] = this.apiKey;\n// config.headers['x-api-secret'] = this.apiSecret;\n \n// const token = this.generateMerchantToken();\n// if (token) {\n// config.headers['Authorization'] = `Bearer ${token}`;\n// }\n\n// console.log('API Request:', {\n// method: config.method?.toUpperCase(),\n// url: config.url,\n// data: config.data\n// });\n\n// return config;\n// },\n// (error) => {\n// console.error('Request interceptor error:', error);\n// return Promise.reject(error);\n// }\n// );\n\n// // Add response interceptor\n// this.api.interceptors.response.use(\n// (response) => {\n// console.log('API Response:', {\n// status: response.status,\n// url: response.config.url,\n// data: response.data\n// });\n// return response;\n// },\n// (error) => {\n// console.error('API Error:', {\n// status: error.response?.status,\n// data: error.response?.data,\n// message: error.message\n// });\n\n// if (error.response?.status === 401) {\n// throw new Error('Authentication failed. Please check your API credentials.');\n// } else if (error.response?.status === 404) {\n// throw new Error('API endpoint not found. Please check your API URL.');\n// } else if (error.response?.status >= 500) {\n// throw new Error('Server error. Please try again later.');\n// }\n\n// throw error;\n// }\n// );\n// }\n\n// generateMerchantToken() {\n// try {\n// const credentials = `${this.apiKey}:${this.apiSecret}`;\n// return btoa(credentials);\n// } catch (error) {\n// console.error('Failed to generate token:', error);\n// return null;\n// }\n// }\n\n// // ✅ FIXED: Add generic request method for internal use\n// async request(endpoint, options = {}) {\n// try {\n// const response = await this.api({\n// url: endpoint,\n// method: options.method || 'GET',\n// data: options.data || options.body ? JSON.parse(options.body || '{}') : undefined,\n// ...options\n// });\n// return response.data;\n// } catch (error) {\n// if (error.response?.data?.error) {\n// throw new Error(error.response.data.error);\n// }\n// throw new Error(error.message || 'Request failed');\n// }\n// }\n\n// async createPayment(params) {\n// try {\n// const response = await this.api.post('/api/payments/create', params);\n// return response.data;\n// } catch (error) {\n// if (error.response?.data?.error) {\n// throw new Error(error.response.data.error);\n// }\n// throw new Error(error.message || 'Failed to create payment');\n// }\n// }\n\n// async getPayment(paymentId) {\n// try {\n// const response = await this.api.get(`/api/payments/${paymentId}`);\n// return response.data;\n// } catch (error) {\n// if (error.response?.data?.error) {\n// throw new Error(error.response.data.error);\n// }\n// throw new Error(error.message || 'Failed to get payment details');\n// }\n// }\n\n// async getNetworks() {\n// try {\n// const response = await this.api.get('/api/networks');\n// return response.data;\n// } catch (error) {\n// console.error('Get networks failed:', error);\n \n// // Return fallback networks\n// return {\n// networks: [\n// {\n// id: 'ethereum',\n// name: 'Ethereum',\n// shortName: 'ethereum',\n// chainId: '1',\n// type: 'ethereum',\n// explorerUrl: 'https://etherscan.io',\n// isTestnet: false,\n// },\n// {\n// id: 'bsc',\n// name: 'Binance Smart Chain',\n// shortName: 'bsc',\n// chainId: '56',\n// type: 'bsc',\n// explorerUrl: 'https://bscscan.com',\n// isTestnet: false,\n// },\n// {\n// id: 'polygon',\n// name: 'Polygon',\n// shortName: 'polygon',\n// chainId: '137',\n// type: 'ethereum',\n// explorerUrl: 'https://polygonscan.com',\n// isTestnet: false,\n// },\n// ]\n// };\n// }\n// }\n\n// async getStablecoins() {\n// try {\n// const response = await this.api.get('/api/networks/stablecoins');\n// return response.data;\n// } catch (error) {\n// console.error('Get stablecoins failed:', error);\n \n// // Return fallback stablecoins\n// return {\n// stablecoins: [\n// {\n// id: 'usdt-eth',\n// name: 'Tether USD',\n// symbol: 'USDT',\n// contractAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\n// decimals: 6,\n// isStablecoin: true,\n// networkId: 'ethereum',\n// Network: {\n// id: 'ethereum',\n// name: 'Ethereum',\n// shortName: 'ethereum',\n// type: 'ethereum',\n// }\n// },\n// {\n// id: 'usdc-eth',\n// name: 'USD Coin',\n// symbol: 'USDC',\n// contractAddress: '0xA0b86a33E6441d81d0B93bF9EE0f74ca32F7e6f6',\n// decimals: 6,\n// isStablecoin: true,\n// networkId: 'ethereum',\n// Network: {\n// id: 'ethereum',\n// name: 'Ethereum',\n// shortName: 'ethereum',\n// type: 'ethereum',\n// }\n// }\n// ]\n// };\n// }\n// }\n\n// async verifyQRPayment(paymentId) {\n// try {\n// const response = await this.api.post('/api/payments/verify-qr', {\n// paymentId\n// });\n// return response.data;\n// } catch (error) {\n// if (error.response?.data?.error) {\n// throw new Error(error.response.data.error);\n// }\n// throw new Error(error.message || 'Failed to verify payment');\n// }\n// }\n\n// // ✅ CRITICAL FIX: Add the missing processPayment method\n// async processPayment(paymentId, transactionHash, network, senderAddress) {\n// try {\n// console.log('🔄 PaymentAPI: Processing payment with:', {\n// paymentId,\n// transactionHash,\n// network,\n// senderAddress\n// });\n\n// const response = await this.api.post('/api/payments/process', {\n// paymentId,\n// transactionHash,\n// network,\n// senderAddress\n// });\n\n// console.log('✅ PaymentAPI: Process payment response:', response.data);\n// return response.data;\n// } catch (error) {\n// console.error('❌ PaymentAPI: Process payment failed:', error);\n// if (error.response?.data?.error) {\n// throw new Error(error.response.data.error);\n// }\n// throw new Error(error.message || 'Failed to process payment');\n// }\n// }\n\n// async healthCheck() {\n// try {\n// const response = await this.api.get('/api/health');\n// return response.status === 200;\n// } catch (error) {\n// console.error('Health check failed:', error);\n// return false;\n// }\n// }\n// }\n\n\n\n\n\n\n// Updated PaymentAPI with enhanced methods and better error handling\nimport axios from 'axios';\n\nexport class PaymentAPI {\n constructor(baseURL, apiKey, apiSecret) {\n this.apiKey = apiKey;\n this.apiSecret = apiSecret;\n this.baseURL = baseURL.endsWith('/') ? baseURL.slice(0, -1) : baseURL;\n\n // Create axios instance with better defaults\n this.api = axios.create({\n baseURL: this.baseURL,\n timeout: 30000,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n // Enhanced request interceptor\n this.api.interceptors.request.use(\n (config) => {\n // Use lowercase headers to match backend expectations\n config.headers['x-api-key'] = this.apiKey;\n config.headers['x-api-secret'] = this.apiSecret;\n \n const token = this.generateMerchantToken();\n if (token) {\n config.headers['Authorization'] = `Bearer ${token}`;\n }\n\n // Add timestamp and user agent for mobile detection\n config.headers['x-timestamp'] = Date.now().toString();\n config.headers['x-user-agent'] = navigator.userAgent;\n config.headers['x-is-mobile'] = this.isMobile().toString();\n\n console.log('API Request:', {\n method: config.method?.toUpperCase(),\n url: config.url,\n data: config.data,\n isMobile: this.isMobile()\n });\n\n return config;\n },\n (error) => {\n console.error('Request interceptor error:', error);\n return Promise.reject(error);\n }\n );\n\n // Enhanced response interceptor\n this.api.interceptors.response.use(\n (response) => {\n console.log('API Response:', {\n status: response.status,\n url: response.config.url,\n data: response.data\n });\n return response;\n },\n (error) => {\n console.error('API Error:', {\n status: error.response?.status,\n data: error.response?.data,\n message: error.message\n });\n\n // Enhanced error messages\n if (error.response?.status === 401) {\n throw new Error('Authentication failed. Please check your API credentials.');\n } else if (error.response?.status === 404) {\n throw new Error('API endpoint not found. Please check your API URL.');\n } else if (error.response?.status === 429) {\n throw new Error('Rate limit exceeded. Please try again later.');\n } else if (error.response?.status >= 500) {\n throw new Error('Server error. Please try again later.');\n } else if (error.code === 'NETWORK_ERROR') {\n throw new Error('Network error. Please check your connection.');\n } else if (error.code === 'TIMEOUT') {\n throw new Error('Request timeout. Please try again.');\n }\n\n throw error;\n }\n );\n }\n\n generateMerchantToken() {\n try {\n const credentials = `${this.apiKey}:${this.apiSecret}`;\n return btoa(credentials);\n } catch (error) {\n console.error('Failed to generate token:', error);\n return null;\n }\n }\n\n isMobile() {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n }\n\n // Generic request method for internal use\n async request(endpoint, options = {}) {\n try {\n const response = await this.api({\n url: endpoint,\n method: options.method || 'GET',\n data: options.data || (options.body ? JSON.parse(options.body) : undefined),\n ...options\n });\n return response.data;\n } catch (error) {\n if (error.response?.data?.error) {\n throw new Error(error.response.data.error);\n }\n throw new Error(error.message || 'Request failed');\n }\n }\n\n // Enhanced payment creation with mobile support\n async createPayment(params) {\n try {\n // Add mobile-specific metadata\n const enhancedParams = {\n ...params,\n metadata: {\n ...params.metadata,\n isMobile: this.isMobile(),\n userAgent: navigator.userAgent,\n timestamp: Date.now(),\n sdkVersion: '0.0.26'\n }\n };\n\n const response = await this.api.post('/api/payments/create', enhancedParams);\n return response.data;\n } catch (error) {\n if (error.response?.data?.error) {\n throw new Error(error.response.data.error);\n }\n throw new Error(error.message || 'Failed to create payment');\n }\n }\n\n async getPayment(paymentId) {\n try {\n const response = await this.api.get(`/api/payments/${paymentId}`);\n return response.data;\n } catch (error) {\n if (error.response?.data?.error) {\n throw new Error(error.response.data.error);\n }\n throw new Error(error.message || 'Failed to get payment details');\n }\n }\n\n // Enhanced network fetching with caching\n async getNetworks() {\n try {\n const response = await this.api.get('/api/networks');\n return response.data;\n } catch (error) {\n console.error('Get networks failed:', error);\n \n // Return enhanced fallback networks\n return {\n networks: [\n {\n id: '1',\n name: 'Ethereum',\n shortName: 'ethereum',\n chainId: '0x1',\n type: 'ethereum',\n explorerUrl: 'https://etherscan.io',\n isTestnet: false,\n supportedWallets: ['metamask', 'coinbase', 'trust', 'rainbow']\n },\n {\n id: '56',\n name: 'BSC',\n shortName: 'bsc',\n chainId: '0x38',\n type: 'bsc',\n explorerUrl: 'https://bscscan.com',\n isTestnet: false,\n supportedWallets: ['metamask', 'trust', 'binance']\n },\n {\n id: '137',\n name: 'Polygon',\n shortName: 'polygon',\n chainId: '0x89',\n type: 'polygon',\n explorerUrl: 'https://polygonscan.com',\n isTestnet: false,\n supportedWallets: ['metamask', 'coinbase', 'trust']\n },\n {\n id: '42161',\n name: 'Arbitrum',\n shortName: 'arbitrum',\n chainId: '0xa4b1',\n type: 'arbitrum',\n explorerUrl: 'https://arbiscan.io',\n isTestnet: false,\n supportedWallets: ['metamask', 'coinbase']\n },\n {\n id: '10',\n name: 'Optimism',\n shortName: 'optimism',\n chainId: '0xa',\n type: 'optimism',\n explorerUrl: 'https://optimistic.etherscan.io',\n isTestnet: false,\n supportedWallets: ['metamask', 'coinbase']\n },\n {\n id: '43114',\n name: 'Avalanche',\n shortName: 'avalanche',\n chainId: '0xa86a',\n type: 'avalanche',\n explorerUrl: 'https://snowtrace.io',\n isTestnet: false,\n supportedWallets: ['metamask', 'coinbase']\n }\n ]\n };\n }\n }\n\n // Enhanced token fetching\n async getTokens() {\n try {\n const response = await this.api.get('/api/networks/stablecoins');\n return response.data;\n } catch (error) {\n console.error('Get tokens failed:', error);\n \n // Return enhanced fallback tokens\n return {\n stablecoins: [\n {\n id: '1',\n name: 'Tether USD',\n symbol: 'USDT',\n contractAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\n decimals: 6,\n isStablecoin: true,\n networkId: '1',\n Network: {\n id: '1',\n name: 'Ethereum',\n shortName: 'ethereum',\n type: 'ethereum'\n }\n },\n {\n id: '2',\n name: 'USD Coin',\n symbol: 'USDC',\n contractAddress: '0xA0b86a33E6441d81d0B93bF9EE0f74ca32F7e6f6',\n decimals: 6,\n isStablecoin: true,\n networkId: '1',\n Network: {\n id: '1',\n name: 'Ethereum',\n shortName: 'ethereum',\n type: 'ethereum'\n }\n },\n {\n id: '3',\n name: 'Binance USD',\n symbol: 'BUSD',\n contractAddress: '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56',\n decimals: 18,\n isStablecoin: true,\n networkId: '56',\n Network: {\n id: '56',\n name: 'BSC',\n shortName: 'bsc',\n type: 'bsc'\n }\n },\n {\n id: '4',\n name: 'USD Coin (Polygon)',\n symbol: 'USDC',\n contractAddress: '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174',\n decimals: 6,\n isStablecoin: true,\n networkId: '137',\n Network: {\n id: '137',\n name: 'Polygon',\n shortName: 'polygon',\n type: 'polygon'\n }\n }\n ]\n };\n }\n }\n\n // Enhanced QR payment verification with retry logic\n async verifyQRPayment(paymentId, retryCount = 0, maxRetries = 3) {\n try {\n const response = await this.api.post('/api/payments/verify-qr', {\n paymentId,\n timestamp: Date.now(),\n retryCount\n });\n return response.data;\n } catch (error) {\n // Retry logic for network errors\n if (retryCount < maxRetries && (\n error.code === 'NETWORK_ERROR' || \n error.response?.status >= 500\n )) {\n console.log(`Retrying QR verification (${retryCount + 1}/${maxRetries})...`);\n await new Promise(resolve => setTimeout(resolve, 1000 * (retryCount + 1)));\n return this.verifyQRPayment(paymentId, retryCount + 1, maxRetries);\n }\n\n if (error.response?.data?.error) {\n throw new Error(error.response.data.error);\n }\n throw new Error(error.message || 'Failed to verify payment');\n }\n }\n\n // CRITICAL: Enhanced processPayment method\n async processPayment(paymentId, transactionHash, network, senderAddress, additionalData = {}) {\n try {\n console.log('🔄 PaymentAPI: Processing payment with enhanced data:', {\n paymentId,\n transactionHash,\n network,\n senderAddress,\n additionalData\n });\n\n const requestData = {\n paymentId,\n transactionHash,\n network,\n senderAddress,\n timestamp: Date.now(),\n isMobile: this.isMobile(),\n ...additionalData\n };\n\n const response = await this.api.post('/api/payments/process', requestData);\n\n console.log('✅ PaymentAPI: Process payment response:', response.data);\n return response.data;\n } catch (error) {\n console.error('❌ PaymentAPI: Process payment failed:', error);\n \n // Enhanced error handling\n if (error.response?.data?.error) {\n throw new Error(error.response.data.error);\n } else if (error.response?.status === 404) {\n throw new Error('Payment not found or invalid payment ID');\n } else if (error.response?.status === 400) {\n throw new Error('Invalid transaction data provided');\n } else if (error.response?.status === 409) {\n throw new Error('Payment has already been processed');\n }\n \n throw new Error(error.message || 'Failed to process payment');\n }\n }\n\n // New method: Get payment status\n async getPaymentStatus(paymentId) {\n try {\n const response = await this.api.get(`/api/payments/${paymentId}/status`);\n return response.data;\n } catch (error) {\n if (error.response?.data?.error) {\n throw new Error(error.response.data.error);\n }\n throw new Error(error.message || 'Failed to get payment status');\n }\n }\n\n // New method: Cancel payment\n async cancelPayment(paymentId, reason = 'User cancelled') {\n try {\n const response = await this.api.post(`/api/payments/${paymentId}/cancel`, {\n reason,\n timestamp: Date.now()\n });\n return response.data;\n } catch (error) {\n if (error.response?.data?.error) {\n throw new Error(error.response.data.error);\n }\n throw new Error(error.message || 'Failed to cancel payment');\n }\n }\n\n // New method: Get supported wallets for a network\n async getSupportedWallets(networkId) {\n try {\n const response = await this.api.get(`/api/networks/${networkId}/wallets`);\n return response.data;\n } catch (error) {\n console.error('Get supported wallets failed:', error);\n \n // Return fallback based on network\n const fallbackWallets = {\n '1': ['metamask', 'coinbase', 'trust', 'rainbow'], // Ethereum\n '56': ['metamask', 'trust', 'binance'], // BSC\n '137': ['metamask', 'coinbase', 'trust'], // Polygon\n '42161': ['metamask', 'coinbase'], // Arbitrum\n '10': ['metamask', 'coinbase'], // Optimism\n '43114': ['metamask', 'coinbase'] // Avalanche\n };\n\n return {\n wallets: fallbackWallets[networkId] || ['metamask', 'coinbase', 'trust']\n };\n }\n }\n\n // Enhanced health check with more details\n async healthCheck() {\n try {\n const response = await this.api.get('/api/health');\n return {\n status: 'healthy',\n timestamp: Date.now(),\n responseTime: response.headers['x-response-time'] || 'unknown',\n ...response.data\n };\n } catch (error) {\n console.error('Health check failed:', error);\n return {\n status: 'unhealthy',\n error: error.message,\n timestamp: Date.now()\n };\n }\n }\n\n // New method: Get exchange rates\n async getExchangeRates(baseCurrency = 'USD') {\n try {\n const response = await this.api.get(`/api/exchange-rates?base=${baseCurrency}`);\n return response.data;\n } catch (error) {\n console.error('Get exchange rates failed:', error);\n \n // Return fallback rates\n return {\n rates: {\n USD: 1,\n USDT: 1,\n USDC: 1,\n BUSD: 1,\n DAI: 1\n },\n timestamp: Date.now(),\n source: 'fallback'\n };\n }\n }\n\n // New method: Estimate transaction fees\n async estimateTransactionFees(network, tokenAddress = null) {\n try {\n const response = await this.api.get(`/api/networks/${network}/fees`, {\n params: { tokenAddress }\n });\n return response.data;\n } catch (error) {\n console.error('Estimate fees failed:', error);\n \n // Return fallback fee estimates\n const fallbackFees = {\n ethereum: { slow: 20, standard: 40, fast: 60 },\n bsc: { slow: 5, standard: 10, fast: 15 },\n polygon: { slow: 1, standard: 5, fast: 10 },\n arbitrum: { slow: 0.5, standard: 1, fast: 2 },\n optimism: { slow: 0.5, standard: 1, fast: 2 },\n avalanche: { slow: 2, standard: 5, fast: 10 }\n };\n\n return {\n fees: fallbackFees[network] || { slow: 10, standard: 20, fast: 40 },\n currency: 'gwei',\n source: 'fallback'\n };\n }\n }\n}","//src/CoinleyPayment.jsx\nimport React, { useState, useEffect, useRef } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport {\n Wallet,\n QrCode,\n ChevronDown,\n Copy,\n Check,\n X,\n ArrowLeft,\n Loader2,\n ExternalLink,\n AlertCircle,\n CheckCircle2,\n Zap,\n Sparkles\n} from 'lucide-react';\n// import QRCodeLib from 'qrcode';\nimport {\n createCoinleyWalletConfig,\n CoinleyWalletProvider,\n ConnectButton,\n WalletModal,\n useWallet,\n useWalletConnect,\n useWalletTransaction,\n useWalletModal,\n useWalletDetection\n} from '@coinley/wallet-connect-core';\nimport { PaymentAPI } from './PaymentAPI';\n\n// Wallet Integration Component\nconst WalletIntegration = ({\n selectedNetwork,\n selectedToken,\n paymentData,\n config,\n onTransactionSent,\n onError,\n isConnecting,\n setIsConnecting\n}) => {\n const { isConnected, address, disconnect } = useWallet();\n const { connectWallet, isPending } = useWalletConnect();\n const { detectedWallets, hasWallets, walletCount } = useWalletDetection();\n const { sendTransaction } = useWalletTransaction();\n const { openModal } = useWalletModal();\n\n // Filter wallets to only show Ethereum-compatible ones\n const ethereumWallets = detectedWallets.filter(wallet => \n wallet.name.toLowerCase().includes('metamask') || \n wallet.provider === 'injected' ||\n wallet.name.toLowerCase().includes('coinbase') ||\n wallet.name.toLowerCase().includes('wallet connect')\n );\n\n const handleConnectSpecificWallet = async (walletType) => {\n try {\n setIsConnecting(true);\n \n // Disconnect any existing connections first\n if (isConnected) {\n await disconnect();\n // Wait a bit for disconnection to complete\n await new Promise(resolve => setTimeout(resolve, 1000));\n }\n\n // For MetaMask, try to connect directly to window.ethereum\n if (walletType === 'metamask' && window.ethereum && window.ethereum.isMetaMask) {\n try {\n // Direct MetaMask connection\n await window.ethereum.request({ method: 'eth_requestAccounts' });\n console.log('✅ Connected directly to MetaMask');\n } catch (error) {\n console.error('MetaMask connection failed:', error);\n throw error;\n }\n } else {\n // Use the library's connect function\n await connectWallet(walletType);\n }\n } catch (error) {\n console.error('Wallet connection failed:', error);\n onError(error.message || 'Failed to connect wallet');\n } finally {\n setIsConnecting(false);\n }\n };\n\n // Alternative: Try opening the modal directly\n const handleOpenModal = () => {\n try {\n console.log('Attempting to open wallet modal...');\n openModal();\n } catch (error) {\n console.error('Failed to open modal:', error);\n // Fallback: try direct wallet connection\n handleConnectSpecificWallet('injected');\n }\n };\n\n const handleSendPayment = async () => {\n if (!isConnected || !paymentData || !selectedToken) {\n onError('Wallet not connected or payment data missing');\n return;\n }\n\n try {\n setIsConnecting(true);\n\n console.log('🔍 Transaction Debug:');\n console.log('Connected wallet address:', address);\n console.log('Payment data:', paymentData);\n console.log('Selected token:', selectedToken);\n console.log('Selected network:', selectedNetwork);\n\n // Use the merchant's wallet address from the payment data as the recipient\n let recipientAddress = paymentData.metadata?.recipientWallet;\n\n console.log('Merchant recipient address:', recipientAddress);\n\n if (!recipientAddress || typeof recipientAddress !== 'string') {\n throw new Error('Merchant wallet address not found in payment data');\n }\n\n // Validate Ethereum address format\n if (!recipientAddress.match(/^0x[a-fA-F0-9]{40}$/)) {\n throw new Error(`Invalid merchant address format: ${recipientAddress}`);\n }\n\n let txHash;\n\n if (selectedToken.contractAddress) {\n // ERC-20 Token Transaction\n console.log('🔍 ERC-20 Transaction Details:');\n console.log('Token contract:', selectedToken.contractAddress);\n console.log('Token decimals:', selectedToken.decimals);\n console.log('Payment amount:', paymentData.totalAmount);\n\n const decimals = selectedToken.decimals || 6;\n const amount = Math.floor(paymentData.totalAmount * Math.pow(10, decimals));\n \n console.log('Calculated amount (with decimals):', amount);\n\n // ERC-20 transfer encoding\n const methodId = '0xa9059cbb';\n const addressWithoutPrefix = recipientAddress.slice(2);\n const recipientPadded = addressWithoutPrefix.toLowerCase().padStart(64, '0');\n const amountPadded = amount.toString(16).padStart(64, '0');\n \n const transferData = `${methodId}${recipientPadded}${amountPadded}`;\n\n console.log('🔍 Transaction Data:');\n console.log('Method ID:', methodId);\n console.log('Recipient (padded):', recipientPadded);\n console.log('Amount (padded):', amountPadded);\n console.log('Full data:', transferData);\n\n const txParams = {\n to: selectedToken.contractAddress,\n data: transferData,\n value: '0x0'\n };\n\n console.log('📤 Sending ERC-20 transaction:', txParams);\n txHash = await sendTransaction(txParams);\n } else {\n // Native Token Transaction\n const value = Math.floor(paymentData.totalAmount * Math.pow(10, 18));\n const valueHex = `0x${value.toString(16)}`;\n\n const txParams = {\n to: recipientAddress,\n value: valueHex\n };\n\n console.log('📤 Sending native transaction:', txParams);\n txHash = await sendTransaction(txParams);\n }\n\n if (txHash) {\n console.log('✅ Transaction sent successfully:', txHash);\n onTransactionSent(txHash);\n }\n } catch (error) {\n console.error('❌ Transaction failed:', error);\n onError(error.message || 'Transaction failed');\n } finally {\n setIsConnecting(false);\n }\n };\n\n const handleDisconnect = async () => {\n try {\n await disconnect();\n } catch (error) {\n console.error('Disconnect error:', error);\n }\n };\n\n return (\n <div className=\"text-center space-y-6\">\n <div className=\"space-y-4\">\n <div className=\"w-16 h-16 bg-[#7042D2] bg-opacity-20 rounded-full flex items-center justify-center mx-auto\">\n <Wallet className=\"w-8 h-8 text-[#7042D2]\" />\n </div>\n \n {!isConnected ? (\n <>\n <h3 className=\"text-lg font-semibold\">\n Connect Your Wallet\n </h3>\n <p className=\"text-gray-600 dark:text-gray-400 text-sm\">\n Choose your preferred wallet to complete the payment\n </p>\n \n <div className=\"space-y-3\">\n {/* MetaMask Button */}\n <button\n onClick={() => handleConnectSpecificWallet('metamask')}\n disabled={isPending || isConnecting}\n className=\"w-full p-3 border border-gray-300 rounded-lg hover:border-[#7042D2] flex items-center space-x-3 transition-colors disabled:opacity-50\"\n >\n <span className=\"text-xl\">🦊</span>\n <div className=\"text-left flex-1\">\n <div className=\"font-medium\">MetaMask</div>\n <div className=\"text-xs text-gray-500\">Connect with MetaMask</div>\n </div>\n </button>\n\n {/* Generic Wallet Button */}\n <button\n onClick={handleOpenModal}\n disabled={isPending || isConnecting}\n className=\"w-full p-3 border border-gray-300 rounded-lg hover:border-[#7042D2] flex items-center space-x-3 transition-colors disabled:opacity-50\"\n >\n <span className=\"text-xl\">💼</span>\n <div className=\"text-left flex-1\">\n <div className=\"font-medium\">Other Wallets</div>\n <div className=\"text-xs text-gray-500\">Choose from available wallets</div>\n </div>\n </button>\n\n {/* Manual Connection Fallback */}\n <button\n onClick={() => handleConnectSpecificWallet('injected')}\n disabled={isPending || isConnecting}\n className=\"w-full p-2 text-sm border border-dashed border-gray-300 rounded-lg hover:border-[#7042D2] transition-colors disabled:opacity-50\"\n >\n Try Direct Connection\n </button>\n </div>\n\n {isConnecting && (\n <div className=\"flex items-center justify-center space-x-2 text-gray-600\">\n <Loader2 className=\"w-4 h-4 animate-spin\" />\n <span>Connecting...</span>\n </div>\n )}\n </>\n ) : (\n <>\n <h3 className=\"text-lg font-semibold text-green-600\">\n Wallet Connected ✅\n </h3>\n \n <div className=\"bg-gray-50 dark:bg-gray-800 rounded-lg p-4 space-y-3\">\n <div className=\"flex justify-between items-center\">\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Address:</span>\n <div className=\"flex items-center space-x-2\">\n <span className=\"font-mono text-sm\">\n {address?.slice(0, 6)}...{address?.slice(-4)}\n </span>\n <button\n onClick={handleDisconnect}\n className=\"text-xs text-red-600 hover:text-red-800\"\n >\n Disconnect\n </button>\n </div>\n </div>\n \n {paymentData && (\n <>\n <div className=\"flex justify-between items-center\">\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Amount:</span>\n <span className=\"font-medium\">{paymentData.totalAmount} {selectedToken?.symbol}</span>\n </div>\n <div className=\"flex justify-between items-center\">\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Network:</span>\n <span className=\"font-medium\">{selectedNetwork?.name}</span>\n </div>\n </>\n )}\n </div>\n\n {/* Payment Button */}\n <button\n onClick={handleSendPayment}\n disabled={isConnecting}\n className=\"w-full bg-[#7042D2] text-white py-4 rounded-lg font-semibold hover:bg-[#7042D2]/90 transition-colors disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center space-x-2\"\n >\n {isConnecting ? (\n <>\n <Loader2 className=\"w-5 h-5 animate-spin\" />\n <span>Processing Payment...</span>\n </>\n ) : (\n <>\n <Zap className=\"w-5 h-5\" />\n <span>Send Payment</span>\n </>\n )}\n </button>\n\n <p className=\"text-xs text-gray-500\">\n Make sure you have enough {selectedToken?.symbol} and ETH for gas fees\n </p>\n </>\n )}\n </div>\n </div>\n );\n};\n\nconst CoinleyPayment = ({\n apiKey,\n apiSecret,\n apiUrl = 'http://localhost:9000',\n onSuccess,\n onError,\n onClose,\n isOpen,\n config,\n theme = 'light',\n merchantName,\n debug = false\n}) => {\n // State management\n const [currentStep, setCurrentStep] = useState('select-method');\n const [networks, setNetworks] = useState([]);\n const [tokens, setTokens] = useState([]);\n const [selectedNetwork, setSelectedNetwork] = useState(null);\n const [selectedToken, setSelectedToken] = useState(null);\n const [paymentMethod, setPaymentMethod] = useState(null);\n const [qrCode, setQrCode] = useState('');\n const [paymentData, setPaymentData] = useState(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n const [copied, setCopied] = useState(false);\n const [txHash, setTxHash] = useState('');\n const [isConnecting, setIsConnecting] = useState(false);\n\n // Services\n const paymentAPI = useRef(new PaymentAPI(apiUrl, apiKey, apiSecret));\n\n // Wallet configuration - Fixed to use proper chain configuration\n const walletConfig = createCoinleyWalletConfig({\n appName: merchantName || 'Coinley Payment',\n appDescription: 'Crypto payment processing',\n // Fix: Provide proper chain configurations instead of just IDs\n chains: [\n {\n id: 1,\n name: 'Ethereum',\n network: 'ethereum',\n rpcUrls: {\n default: { http: ['https://eth.llamarpc.com'] }\n },\n nativeCurrency: {\n name: 'Ethereum',\n symbol: 'ETH',\n decimals: 18\n }\n },\n {\n id: 56,\n name: 'BNB Smart Chain',\n network: 'bsc',\n rpcUrls: {\n default: { http: ['https://bsc-dataseed1.binance.org'] }\n },\n nativeCurrency: {\n name: 'BNB',\n symbol: 'BNB',\n decimals: 18\n }\n }\n ]\n });\n\n // Initialize\n useEffect(() => {\n if (isOpen) {\n initializePayment();\n }\n }, [isOpen]);\n\n const initializePayment = async () => {\n try {\n setLoading(true);\n setError('');\n\n const [networksRes, tokensRes] = await Promise.all([\n paymentAPI.current.getNetworks(),\n paymentAPI.current.getStablecoins()\n ]);\n\n setNetworks(networksRes.networks || []);\n setTokens(tokensRes.stablecoins || []);\n\n if (debug) {\n console.log('Initialized networks:', networksRes.networks);\n console.log('Initialized tokens:', tokensRes.stablecoins);\n }\n } catch (err) {\n console.error('Failed to initialize payment:', err);\n setError('Failed to load payment options. Please try again.');\n } finally {\n setLoading(false);\n }\n };\n\n const handleMethodSelect = (method) => {\n setPaymentMethod(method);\n setCurrentStep('select-network');\n };\n\n const handleNetworkSelect = async (network) => {\n setSelectedNetwork(network);\n\n // Get available tokens for this network\n const networkTokens = tokens.filter(token =>\n token.Network?.shortName === network.shortName || token.networkId === network.id\n );\n\n if (networkTokens.length > 1) {\n // Multiple tokens available - let user choose\n setCurrentStep('select-token');\n } else if (networkTokens.length === 1) {\n // Only one token available - auto-select and proceed\n const token = networkTokens[0];\n setSelectedToken(token);\n await initiatePayment(network, token);\n } else {\n // No tokens available for this network\n setError(`No supported tokens found for ${network.name}`);\n setCurrentStep('error');\n }\n };\n\n const handleTokenSelect = async (token) => {\n setSelectedToken(token);\n await initiatePayment(selectedNetwork, token);\n };\n\n const initiatePayment = async (network, token) => {\n try {\n setLoading(true);\n\n const paymentPayload = {\n amount: config.amount,\n currency: token.symbol,\n network: network.shortName,\n customerEmail: config.customerEmail,\n callbackUrl: config.callbackUrl,\n metadata: {\n ...config.metadata,\n paymentMethod,\n selectedNetwork: network.shortName,\n selectedToken: token.symbol,\n // Add the merchant wallet addresses to metadata\n merchantWalletAddresses: config.merchantWalletAddresses\n }\n };\n\n console.log('🔍 Payment payload with merchant wallets:', paymentPayload);\n\n const payment = await paymentAPI.current.createPayment(paymentPayload);\n setPaymentData(payment.payment);\n\n if (paymentMethod === 'wallet') {\n setCurrentStep('wallet-connect');\n } else {\n await generateQRCode(payment.payment);\n setCurrentStep('qr-code');\n }\n } catch (err) {\n console.error('Payment initiation failed:', err);\n setError(err.message || 'Failed to create payment');\n setCurrentStep('error');\n } finally {\n setLoading(false);\n }\n };\n\n const generateQRCode = async (payment) => {\n try {\n const recipientAddress = payment.metadata?.recipientWallet ||\n config.merchantWalletAddresses?.[selectedNetwork?.shortName || ''];\n\n if (!recipientAddress) {\n throw new Error('Recipient wallet address not found');\n }\n\n let qrData = '';\n\n if (selectedNetwork?.type === 'ethereum' || selectedNetwork?.type === 'bsc') {\n qrData = selectedToken?.contractAddress\n ? `ethereum:${selectedToken.contractAddress}/transfer?address=${recipientAddress}&uint256=${payment.totalAmount * Math.pow(10, selectedToken.decimals)}`\n : `ethereum:${recipientAddress}?value=${payment.totalAmount}e18`;\n } else if (selectedNetwork?.type === 'tron') {\n qrData = `tron:${recipientAddress}?amount=${payment.totalAmount}`;\n } else {\n qrData = `${selectedToken?.symbol}:${recipientAddress}?amount=${payment.totalAmount}`;\n }\n\n // For now, just set the recipient address since QRCodeLib is commented out\n setQrCode(recipientAddress);\n startPaymentVerification(payment.id);\n\n } catch (err) {\n console.error('QR code generation failed:', err);\n setError('Failed to generate QR code');\n setCurrentStep('error');\n }\n };\n\n const startPaymentVerification = async (paymentId) => {\n const maxAttempts = 60;\n let attempts = 0;\n\n const checkPayment = async () => {\n try {\n const result = await paymentAPI.current.verifyQRPayment(paymentId);\n\n if (result.verified && result.payment?.transactionHash) {\n setTxHash(result.payment.transactionHash);\n await handlePaymentSuccess(paymentId, result.payment.transactionHash);\n return true;\n }\n\n attempts++;\n if (attempts < maxAttempts) {\n setTimeout(checkPayment, 5000);\n } else {\n setError('Payment verification timeout. Please check your transaction.');\n setCurrentStep('error');\n }\n\n return false;\n } catch (err) {\n console.error('Payment verification error:', err);\n attempts++;\n if (attempts < maxAttempts) {\n setTimeout(checkPayment, 5000);\n } else {\n setError('Payment verification failed');\n setCurrentStep('error');\n }\n return false;\n }\n };\n\n setTimeout(checkPayment, 2000);\n };\n\n const handleTransactionSent = async (transactionHash) => {\n setTxHash(transactionHash);\n setCurrentStep('processing');\n\n try {\n await paymentAPI.current.processPayment(\n paymentData.id,\n transactionHash,\n selectedNetwork?.shortName || '',\n ''\n );\n\n await handlePaymentSuccess(paymentData.id, transactionHash);\n } catch (error) {\n console.error('Payment processing failed:', error);\n await handlePaymentSuccess(paymentData.id, transactionHash);\n }\n };\n\n const handlePaymentSuccess = async (paymentId, transactionHash) => {\n setCurrentStep('success');\n\n if (onSuccess) {\n onSuccess(paymentId, transactionHash, {\n network: selectedNetwork?.name,\n token: selectedToken?.symbol,\n amount: paymentData?.totalAmount,\n method: paymentMethod\n });\n }\n };\n\n const copyToClipboard = async (text) => {\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error('Failed to copy:', err);\n }\n };\n\n const handleClose = () => {\n setCurrentStep('select-method');\n setPaymentMethod(null);\n setSelectedNetwork(null);\n setSelectedToken(null);\n setQrCode('');\n setPaymentData(null);\n setError('');\n setTxHash('');\n\n if (onClose) {\n onClose();\n }\n };\n\n const goBack = () => {\n if (currentStep === 'select-network') {\n setCurrentStep('select-method');\n } else if (currentStep === 'select-token') {\n setCurrentStep('select-network');\n } else if (currentStep === 'wallet-connect' || currentStep === 'qr-code') {\n // Go back to token selection if multiple tokens, otherwise network selection\n const networkTokens = tokens.filter(token =>\n token.Network?.shortName === selectedNetwork?.shortName || token.networkId === selectedNetwork?.id\n );\n if (networkTokens.length > 1) {\n setCurrentStep('select-token');\n } else {\n setCurrentStep('select-network');\n }\n }\n };\n\n if (!isOpen) return null;\n\n return (\n <CoinleyWalletProvider config={walletConfig} walletConfig={{ appName: merchantName || 'Coinley Payment' }}>\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50 backdrop-blur-sm\">\n <motion.div\n initial={{ scale: 0.9, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0.9, opacity: 0 }}\n className={`relative w-full max-w-md mx-4 rounded-2xl shadow-2xl overflow-hidden ${theme === 'dark' ? 'bg-gray-900 text-white' : 'bg-white text-gray-900'\n }`}\n >\n {/* Header */}\n <div className=\"relative p-6 border-b border-gray-200 dark:border-gray-700\">\n {(currentStep !== 'select-method' && currentStep !== 'success' && currentStep !== 'error') && (\n <button\n onClick={goBack}\n className=\"absolute left-4 top-6 p-1 rounded-full hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors\"\n >\n <ArrowLeft className=\"w-5 h-5\" />\n </button>\n )}\n\n <button\n onClick={handleClose}\n className=\"absolute right-4 top-6 p-1 rounded-full hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors\"\n >\n <X className=\"w-5 h-5\" />\n </button>\n\n <div className=\"text-center\">\n <div className=\"flex items-center justify-center space-x-2 mb-2\">\n <Sparkles className=\"w-5 h-5 text-[#7042D2]\" />\n <h2 className=\"text-xl font-bold\">Pay with Crypto</h2>\n <Sparkles className=\"w-5 h-5 text-[#7042D2]\" />\n </div>\n {merchantName && (\n <p className=\"text-sm text-gray-600 dark:text-gray-400 mt-1\">\n {merchantName}\n </p>\n )}\n <div className=\"mt-2\">\n <span className=\"text-2xl font-bold text-[#7042D2]\">\n ${config.amount.toFixed(2)}\n </span>\n </div>\n </div>\n </div>\n\n {/* Content */}\n <div className=\"p-6 min-h-[400px]\">\n <AnimatePresence mode=\"wait\">\n {/* Step 1: Select Payment Method */}\n {currentStep === 'select-method' && (\n <motion.div\n key=\"select-method\"\n initial={{ x: 20, opacity: 0 }}\n animate={{ x: 0, opacity: 1 }}\n exit={{ x: -20, opacity: 0 }}\n className=\"space-y-4\"\n >\n <h3 className=\"text-lg font-semibold text-center mb-6\">\n Choose Payment Method\n </h3>\n\n <motion.button\n whileHover={{ scale: 1.02 }}\n whileTap={{ scale: 0.98 }}\n onClick={() => handleMethodSelect('wallet')}\n className=\"w-full p-4 border-2 border-gray-200 dark:border-gray-700 rounded-xl hover:border-[#7042D2] transition-colors group\"\n >\n <div className=\"flex items-center space-x-4\">\n <div className=\"p-3 bg-[#7042D2] bg-opacity-10 rounded-lg group-hover:bg-opacity-20 transition-colors\">\n <Wallet className=\"w-6 h-6 text-[#7042D2]\" />\n </div>\n <div className=\"text-left\">\n <div className=\"font-semibold\">Connect Wallet</div>\n <div className=\"text-sm text-gray-600 dark:text-gray-400\">\n MetaMask, WalletConnect & more\n </div>\n </div>\n <Zap className=\"w-5 h-5 text-[#7042D2] ml-auto\" />\n </div>\n </motion.button>\n\n <motion.button\n whileHover={{ scale: 1.02 }}\n whileTap={{ scale: 0.98 }}\n onClick={() => handleMethodSelect('qr')}\n className=\"w-full p-4 border-2 border-gray-200 dark:border-gray-700 rounded-xl hover:border-[#7042D2] transition-colors group\"\n >\n <div className=\"flex items-center space-x-4\">\n <div className=\"p-3 bg-[#7042D2] bg-opacity-10 rounded-lg group-hover:bg-opacity-20 transition-colors\">\n <QrCode className=\"w-6 h-6 text-[#7042D2]\" />\n </div>\n <div className=\"text-left\">\n <div className=\"font-semibold\">QR Code</div>\n <div className=\"text-sm text-gray-600 dark:text-gray-400\">\n Scan with mobile wallet\n </div>\n </div>\n </div>\n </motion.button>\n </motion.div>\n )}\n\n {/* Step 2: Select Network */}\n {currentStep === 'select-network' && (\n <motion.div\n key=\"select-network\"\n initial={{ x: 20, opacity: 0 }}\n animate={{ x: 0, opacity: 1 }}\n exit={{ x: -20, opacity: 0 }}\n className=\"space-y-4\"\n >\n <h3 className=\"text-lg font-semibold text-center mb-6\">\n Select Network\n </h3>\n\n {loading ? (\n <div className=\"flex justify-center py-8\">\n <Loader2 className=\"w-8 h-8 animate-spin text-[#7042D2]\" />\n </div>\n ) : (\n <div className=\"space-y-3\">\n {networks.map((network) => (\n <motion.button\n key={network.id}\n whileHover={{ scale: 1.02 }}\n whileTap={{ scale: 0.98 }}\n onClick={() => handleNetworkSelect(network)}\n className=\"w-full p-4 border-2 border-gray-200 dark:border-gray-700 rounded-xl hover:border-[#7042D2] transition-colors group\"\n >\n <div className=\"flex items-center space-x-4\">\n {network.logo ? (\n <img\n src={network.logo}\n alt={network.name}\n className=\"w-8 h-8 rounded-full\"\n />\n ) : (\n <div className=\"w-8 h-8 bg-[#7042D2] bg-opacity-20 rounded-full flex items-center justify-center\">\n <span className=\"text-sm font-bold text-[#7042D2]\">\n {network.shortName.charAt(0).toUpperCase()}\n </span>\n </div>\n )}\n <div className=\"text-left flex-1\">\n <div className=\"font-semibold\">{network.name}</div>\n <div className=\"text-sm text-gray-600 dark:text-gray-400\">\n {network.shortName.toUpperCase()}\n </div>\n </div>\n <ChevronDown className=\"w-5 h-5 text-gray-400 transform -rotate-90\" />\n </div>\n </motion.button>\n ))}\n </div>\n )}\n </motion.div>\n )}\n\n {/* Step 3: Select Token */}\n {currentStep === 'select-token' && (\n <motion.div\n key=\"select-token\"\n initial={{ x: 20, opacity: 0 }}\n animate={{ x: 0, opacity: 1 }}\n exit={{ x: -20, opacity: 0 }}\n className=\"space-y-4\"\n >\n <h3 className=\"text-lg font-semibold text-center mb-6\">\n Select Token on {selectedNetwork?.name}\n </h3>\n\n {loading ? (\n <div className=\"flex justify-center py-8\">\n <Loader2 className=\"w-8 h-8 animate-spin text-[#7042D2]\" />\n </div>\n ) : (\n <div className=\"space-y-3\">\n {tokens\n .filter(token =>\n token.Network?.shortName === selectedNetwork?.shortName || \n token.networkId === selectedNetwork?.id\n )\n .map((token) => (\n <motion.button\n key={token.id}\n whileHover={{ scale: 1.02 }}\n whileTap={{ scale: 0.98 }}\n onClick={() => handleTokenSelect(token)}\n className=\"w-full p-4 border-2 border-gray-200 dark:border-gray-700 rounded-xl hover:border-[#7042D2] transition-colors group\"\n >\n <div className=\"flex items-center space-x-4\">\n {token.logo ? (\n <img\n src={token.logo}\n alt={token.symbol}\n className=\"w-8 h-8 rounded-full\"\n />\n ) : (\n <div className=\"w-8 h-8 bg-[#7042D2] bg-opacity-20 rounded-full flex items-center justify-center\">\n <span className=\"text-sm font-bold text-[#7042D2]\">\n {token.symbol.charAt(0)}\n </span>\n </div>\n )}\n <div className=\"text-left flex-1\">\n <div className=\"font-semibold\">{token.name}</div>\n <div className=\"text-sm text-gray-600 dark:text-gray-400\">\n {token.symbol}\n {token.isStablecoin && (\n <span className=\"ml-2 px-2 py-0.5 bg-green-100 text-green-600 text-xs rounded-full\">\n Stablecoin\n </span>\n )}\n </div>\n </div>\n <ChevronDown className=\"w-5 h-5 text-gray-400 transform -rotate-90\" />\n </div>\n </motion.button>\n ))\n }\n </div>\n )}\n </motion.div>\n )}\n\n {/* Wallet Connect */}\n {currentStep === 'wallet-connect' && (\n <motion.div\n key=\"wallet-connect\"\n initial={{ x: 20, opacity: 0 }}\n animate={{ x: 0, opacity: 1 }}\n exit={{ x: -20, opacity: 0 }}\n >\n <WalletIntegration\n selectedNetwork={selectedNetwork}\n selectedToken={selectedToken}\n paymentData={paymentData}\n config={config} // Pass config to WalletIntegration\n onTransactionSent={handleTransactionSent}\n onError={setError}\n isConnecting={isConnecting}\n setIsConnecting={setIsConnecting}\n />\n </motion.div>\n )}\n\n {/* QR Code */}\n {currentStep === 'qr-code' && (\n <motion.div\n key=\"qr-code\"\n initial={{ x: 20, opacity: 0 }}\n animate={{ x: 0, opacity: 1 }}\n exit={{ x: -20, opacity: 0 }}\n className=\"text-center space-y-6\"\n >\n <div className=\"space-y-4\">\n <h3 className=\"text-lg font-semibold\">Scan QR Code</h3>\n <p className=\"text-gray-600 dark:text-gray-400\">\n Use your mobile wallet to scan and pay\n </p>\n </div>\n\n {qrCode && (\n <div className=\"bg-white p-4 rounded-xl mx-auto inline-block\">\n <div className=\"w-48 h-48 flex items-center justify-center text-gray-500\">\n QR Code: {qrCode.slice(0, 10)}...{qrCode.slice(-4)}\n </div>\n </div>\n )}\n\n {paymentData && (\n <div className=\"space-y-3\">\n <div className=\"bg-gray-50 dark:bg-gray-800 rounded-lg p-4 space-y-2\">\n <div className=\"flex justify-between items-center\">\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Network:</span>\n <span className=\"font-medium\">{selectedNetwork?.name}</span>\n </div>\n <div className=\"flex justify-between items-center\">\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Amount:</span>\n <span className=\"font-medium\">{paymentData.totalAmount} {selectedToken?.symbol}</span>\n </div>\n </div>\n\n <div className=\"flex items-center justify-center space-x-2 text-sm text-gray-600 dark:text-gray-400\">\n <Loader2 className=\"w-4 h-4 animate-spin\" />\n <span>Waiting for payment...</span>\n </div>\n </div>\n )}\n </motion.div>\n )}\n\n {/* Processing */}\n {currentStep === 'processing' && (\n <motion.div\n key=\"processing\"\n initial={{ scale: 0.8, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n className=\"text-center space-y-6\"\n >\n <div className=\"w-16 h-16 bg-[#7042D2] bg-opacity-20 rounded-full flex items-center justify-center mx-auto\">\n <Loader2 className=\"w-8 h-8 animate-spin text-[#7042D2]\" />\n </div>\n <div>\n <h3 className=\"text-lg font-semibold text-[#7042D2]\">Processing Payment...</h3>\n <p className=\"text-gray-600 dark:text-gray-400 mt-2\">\n Your transaction is being processed\n </p>\n </div>\n </motion.div>\n )}\n\n {/* Success */}\n {currentStep === 'success' && (\n <motion.div\n key=\"success\"\n initial={{ scale: 0.8, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n className=\"text-center space-y-6\"\n >\n <div className=\"w-16 h-16 bg-green-100 rounded-full flex items-center justify-center mx-auto\">\n <CheckCircle2 className=\"w-8 h-8 text-green-500\" />\n </div>\n <div>\n <h3 className=\"text-lg font-semibold text-green-600\">Payment Successful!</h3>\n <p className=\"text-gray-600 dark:text-gray-400 mt-2\">\n Your payment has been processed successfully\n </p>\n </div>\n\n {txHash && (\n <div className=\"bg-gray-50 dark:bg-gray-800 rounded-lg p-4\">\n <div className=\"flex justify-between items-center\">\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Transaction:</span>\n <div className=\"flex items-center space-x-2\">\n <span className=\"font-mono text-sm\">\n {txHash.slice(0, 6)}...{txHash.slice(-4)}\n </span>\n <button\n onClick={() => copyToClipboard(txHash)}\n className=\"p-1 hover:bg-gray-200 dark:hover:bg-gray-700 rounded\"\n >\n <Copy className=\"w-4 h-4\" />\n </button>\n {selectedNetwork?.explorerUrl && (\n <a\n href={`${selectedNetwork.explorerUrl}/tx/${txHash}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"p-1 hover:bg-gray-200 dark:hover:bg-gray-700 rounded\"\n >\n <ExternalLink className=\"w-4 h-4\" />\n </a>\n )}\n </div>\n </div>\n </div>\n )}\n\n <button\n onClick={handleClose}\n className=\"w-full bg-[#7042D2] text-white py-3 rounded-lg font-semibold hover:bg-[#7042D2]/90 transition-colors\"\n >\n Close\n </button>\n </motion.div>\n )}\n\n {/* Error */}\n {currentStep === 'error' && (\n <motion.div\n key=\"error\"\n initial={{ scale: 0.8, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n className=\"text-center space-y-6\"\n >\n <div className=\"w-16 h-16 bg-red-100 rounded-full flex items-center justify-center mx-auto\">\n <AlertCircle className=\"w-8 h-8 text-red-500\" />\n </div>\n <div>\n <h3 className=\"text-lg font-semibold text-red-600\">Payment Failed</h3>\n <p className=\"text-gray-600 dark:text-gray-400 mt-2\">\n {error || 'Something went wrong. Please try again.'}\n </p>\n </div>\n\n <div className=\"space-y-3\">\n <button\n onClick={() => {\n setCurrentStep('select-method');\n setError('');\n }}\n className=\"w-full bg-[#7042D2] text-white py-3 rounded-lg font-semibold hover:bg-[#7042D2]/90 transition-colors\"\n >\n Try Again\n </button>\n <button\n onClick={handleClose}\n className=\"w-full border border-gray-300 dark:border-gray-600 py-3 rounded-lg font-semibold hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors\"\n >\n Close\n </button>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n\n {/* Footer */}\n <div className=\"px-6 py-4 border-t border-gray-200 dark:border-gray-700 text-center\">\n <p className=\"text-xs text-gray-500\">\n Powered by <span className=\"font-semibold text-[#7042D2]\">Coinley</span>\n </p>\n </div>\n </motion.div>\n </div>\n\n <WalletModal />\n </CoinleyWalletProvider>\n );\n};\n\nexport default CoinleyPayment;","//src/components/SimpleCoinleyPayment.jsx - in my coinley-test SDK\nimport React, { useState, useEffect, useRef } from 'react';\n\n// Simple Payment API class (reuse your existing PaymentAPI structure)\nclass SimplePaymentAPI {\n constructor(baseURL, apiKey, apiSecret) {\n this.baseURL = baseURL.endsWith('/') ? baseURL.slice(0, -1) : baseURL;\n this.apiKey = apiKey;\n this.apiSecret = apiSecret;\n }\n\n async request(endpoint, options = {}) {\n const url = `${this.baseURL}${endpoint}`;\n const headers = {\n 'Content-Type': 'application/json',\n 'X-API-Key': this.apiKey,\n 'X-API-Secret': this.apiSecret,\n ...options.headers\n };\n\n const response = await fetch(url, {\n ...options,\n headers\n });\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || `HTTP ${response.status}`);\n }\n\n return response.json();\n }\n\n async getNetworks() {\n try {\n return await this.request('/api/networks');\n } catch (error) {\n console.error('Failed to fetch networks:', error);\n // Fallback networks\n return {\n networks: [\n { id: '1', name: 'Ethereum', shortName: 'ethereum', chainId: '0x1', type: 'ethereum' },\n { id: '56', name: 'BSC', shortName: 'bsc', chainId: '0x38', type: 'bsc' }\n ]\n };\n }\n }\n\n async getTokens() {\n try {\n return await this.request('/api/networks/stablecoins');\n } catch (error) {\n console.error('Failed to fetch tokens:', error);\n // Fallback tokens\n return {\n stablecoins: [\n {\n id: '1', name: 'Tether USD', symbol: 'USDT',\n contractAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\n decimals: 6, networkId: '1',\n Network: { shortName: 'ethereum', name: 'Ethereum' }\n }\n ]\n };\n }\n }\n\n async createPayment(data) {\n return await this.request('/api/payments/create', {\n method: 'POST',\n body: JSON.stringify(data)\n });\n }\n}\n\n// Simple MetaMask connector that actually works\nclass SimpleMetaMaskWallet {\n constructor() {\n this.account = null;\n this.chainId = null;\n }\n\n async connect() {\n // FORCE MetaMask connection by being very specific\n if (!window.ethereum) {\n throw new Error('MetaMask not installed. Please install MetaMask extension.');\n }\n\n // Check if we have multiple wallets installed\n if (window.ethereum.providers) {\n console.log('🔍 Multiple wallets detected:', window.ethereum.providers.length);\n \n // Find MetaMask specifically\n const metamaskProvider = window.ethereum.providers.find(provider => provider.isMetaMask);\n if (!metamaskProvider) {\n throw new Error('MetaMask not found among installed wallets');\n }\n \n console.log('🦊 Using MetaMask provider specifically');\n window.ethereum = metamaskProvider; // Force use MetaMask\n } else if (!window.ethereum.isMetaMask) {\n throw new Error('Please use MetaMask wallet');\n }\n\n try {\n console.log('🦊 Requesting MetaMask account access...');\n \n // Request account access with specific MetaMask method\n const accounts = await window.ethereum.request({\n method: 'eth_requestAccounts'\n });\n\n if (!accounts || accounts.length === 0) {\n throw new Error('No accounts found in MetaMask');\n }\n\n // Get current chain\n const chainId = await window.ethereum.request({\n method: 'eth_chainId'\n });\n\n this.account = accounts[0];\n this.chainId = chainId;\n\n console.log('✅ MetaMask connected successfully:');\n console.log(' Account:', this.account);\n console.log(' Chain ID:', this.chainId);\n \n // Verify this is the expected account\n if (this.account.toLowerCase() !== '0xa0419a048a1469b34a5245f08c0697ba956a56ab') {\n console.warn('⚠️ Connected to different account than expected');\n console.warn(' Expected: 0xa0419a048A1469B34a5245f08C0697Ba956a56Ab');\n console.warn(' Connected:', this.account);\n \n // Ask user to switch account\n throw new Error(`Please switch MetaMask to account 0xa041...56Ab. Currently connected to ${this.account.slice(0, 6)}...${this.account.slice(-4)}`);\n }\n\n return { account: this.account, chainId: this.chainId };\n\n } catch (error) {\n console.error('MetaMask connection failed:', error);\n throw new Error(error.message || 'Failed to connect to MetaMask');\n }\n }\n\n async sendTransaction(txParams) {\n if (!this.account) {\n throw new Error('Wallet not connected');\n }\n\n try {\n console.log('🦊 Sending MetaMask transaction:', txParams);\n \n // Make sure we're using MetaMask provider\n if (!window.ethereum.isMetaMask) {\n throw new Error('Not using MetaMask provider');\n }\n\n // Check if user has enough balance for the transaction\n if (txParams.data && txParams.data.includes('a9059cbb')) {\n // This is an ERC-20 transfer, check token balance\n console.log('🔍 Checking USDT balance...');\n \n try {\n // Get USDT balance\n const balanceHex = await window.ethereum.request({\n method: 'eth_call',\n params: [{\n to: txParams.to, // USDT contract\n data: `0x70a08231000000000000000000000000${this.account.slice(2)}` // balanceOf(address)\n }, 'latest']\n });\n \n const balance = parseInt(balanceHex, 16);\n const balanceUSDT = balance / 1000000; // USDT has 6 decimals\n \n console.log('💰 USDT Balance:', balanceUSDT);\n \n // Extract amount from transaction data\n const amountHex = txParams.data.slice(-64);\n const transactionAmount = parseInt(amountHex, 16);\n const transactionAmountUSDT = transactionAmount / 1000000;\n \n console.log('💸 Transaction Amount:', transactionAmountUSDT);\n \n if (balance < transactionAmount) {\n throw new Error(`Insufficient USDT balance. You have ${balanceUSDT} USDT but need ${transactionAmountUSDT} USDT`);\n }\n } catch (balanceError) {\n console.warn('Could not check balance:', balanceError);\n // Continue with transaction anyway\n }\n }\n\n // Check ETH balance for gas\n try {\n const ethBalanceHex = await window.ethereum.request({\n method: 'eth_getBalance',\n params: [this.account, 'latest']\n });\n \n const ethBalance = parseInt(ethBalanceHex, 16) / Math.pow(10, 18);\n console.log('⛽ ETH Balance for gas:', ethBalance);\n \n if (ethBalance < 0.001) {\n throw new Error(`Insufficient ETH for gas fees. You have ${ethBalance.toFixed(4)} ETH but need at least 0.001 ETH`);\n }\n } catch (gasError) {\n console.warn('Could not check ETH balance:', gasError);\n }\n\n // Prepare transaction with proper gas estimation\n const fullTxParams = {\n ...txParams,\n from: this.account\n };\n\n // Try to estimate gas\n try {\n const gasEstimate = await window.ethereum.request({\n method: 'eth_estimateGas',\n params: [fullTxParams]\n });\n \n // Add 20% buffer to gas estimate\n const gasLimit = Math.floor(parseInt(gasEstimate, 16) * 1.2);\n fullTxParams.gas = `0x${gasLimit.toString(16)}`;\n \n console.log('⛽ Gas estimate:', parseInt(gasEstimate, 16));\n console.log('⛽ Gas limit (with buffer):', gasLimit);\n \n } catch (gasError) {\n console.warn('Gas estimation failed:', gasError);\n // Set a reasonable default gas limit for USDT transfers\n fullTxParams.gas = '0x15F90'; // 90,000 gas\n }\n\n console.log('📤 Final transaction params:', fullTxParams);\n\n const txHash = await window.ethereum.request({\n method: 'eth_sendTransaction',\n params: [fullTxParams]\n });\n\n console.log('✅ Transaction sent successfully:', txHash);\n return txHash;\n\n } catch (error) {\n console.error('Transaction failed:', error);\n \n if (error.code === 4001) {\n throw new Error('Transaction cancelled by user');\n } else if (error.message.includes('insufficient funds')) {\n throw new Error('Insufficient funds in wallet');\n } else if (error.message.includes('gas')) {\n throw new Error('Gas estimation failed. You may not have enough ETH for gas fees.');\n } else if (error.message.includes('invalid opcode')) {\n throw new Error('Transaction failed - invalid operation. This usually means insufficient token balance or contract interaction failed.');\n } else {\n throw new Error(error.message || 'Transaction failed');\n }\n }\n }\n\n isConnected() {\n return !!this.account;\n }\n}\n\n// Main Simple Payment Component\nconst SimpleCoinleyPayment = ({ \n apiKey, \n apiSecret, \n apiUrl, \n config,\n onSuccess, \n onError, \n onClose,\n isOpen,\n theme = 'light'\n}) => {\n const [currentStep, setCurrentStep] = useState('method');\n const [networks, setNetworks] = useState([]);\n const [tokens, setTokens] = useState([]);\n const [selectedNetwork, setSelectedNetwork] = useState(null);\n const [selectedToken, setSelectedToken] = useState(null);\n const [paymentMethod, setPaymentMethod] = useState(null);\n const [paymentData, setPaymentData] = useState(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n const [wallet, setWallet] = useState(new SimpleMetaMaskWallet());\n const [walletConnected, setWalletConnected] = useState(false);\n const [processing, setProcessing] = useState(false);\n\n const api = useRef(new SimplePaymentAPI(apiUrl, apiKey, apiSecret));\n\n // Load networks and tokens when modal opens\n useEffect(() => {\n if (isOpen) {\n loadData();\n resetState();\n }\n }, [isOpen]);\n\n const resetState = () => {\n setCurrentStep('method');\n setSelectedNetwork(null);\n setSelectedToken(null);\n setPaymentMethod(null);\n setPaymentData(null);\n setError('');\n setWalletConnected(false);\n setProcessing(false);\n setWallet(new SimpleMetaMaskWallet());\n };\n\n const loadData = async () => {\n try {\n setLoading(true);\n setError('');\n \n console.log('🔄 Loading networks and tokens...');\n const [networksRes, tokensRes] = await Promise.all([\n api.current.getNetworks(),\n api.current.getTokens()\n ]);\n \n setNetworks(networksRes.networks || []);\n setTokens(tokensRes.stablecoins || []);\n \n console.log('✅ Loaded networks:', networksRes.networks?.length);\n console.log('✅ Loaded tokens:', tokensRes.stablecoins?.length);\n \n } catch (err) {\n console.error('Failed to load data:', err);\n setError('Failed to load payment options. Using fallback data.');\n } finally {\n setLoading(false);\n }\n };\n\n // Connect wallet\n const connectWallet = async () => {\n try {\n setLoading(true);\n setError('');\n \n const connection = await wallet.connect();\n setWalletConnected(true);\n \n console.log('✅ Wallet connected successfully:', connection.account);\n \n } catch (err) {\n console.error('Wallet connection failed:', err);\n setError(err.message);\n } finally {\n setLoading(false);\n }\n };\n\n // Create payment\n const createPayment = async () => {\n try {\n setLoading(true);\n setError('');\n \n const paymentPayload = {\n amount: config.amount,\n currency: selectedToken.symbol,\n network: selectedNetwork.shortName,\n customerEmail: config.customerEmail,\n callbackUrl: config.callbackUrl,\n metadata: {\n ...config.metadata,\n merchantWalletAddresses: config.merchantWalletAddresses,\n paymentMethod,\n selectedNetwork: selectedNetwork.shortName,\n selectedToken: selectedToken.symbol\n }\n };\n\n console.log('🔄 Creating payment:', paymentPayload);\n const payment = await api.current.createPayment(paymentPayload);\n setPaymentData(payment.payment);\n \n console.log('✅ Payment created:', payment.payment.id);\n \n if (paymentMethod === 'wallet') {\n setCurrentStep('wallet');\n } else {\n setCurrentStep('qr');\n }\n \n } catch (err) {\n console.error('Payment creation failed:', err);\n setError(err.message);\n } finally {\n setLoading(false);\n }\n };\n\n // Send transaction\n const sendTransaction = async () => {\n try {\n setProcessing(true);\n setError('');\n \n const recipientAddress = paymentData.metadata?.recipientWallet || \n config.merchantWalletAddresses?.[selectedNetwork.shortName];\n\n if (!recipientAddress) {\n throw new Error('Merchant wallet address not found');\n }\n\n console.log('🔄 Preparing transaction to:', recipientAddress);\n\n let txParams;\n\n if (selectedToken.contractAddress) {\n // ERC-20 transaction\n const decimals = selectedToken.decimals || 6;\n const amount = Math.floor(paymentData.totalAmount * Math.pow(10, decimals));\n \n const methodId = '0xa9059cbb'; // transfer(address,uint256)\n const recipientPadded = recipientAddress.slice(2).toLowerCase().padStart(64, '0');\n const amountPadded = amount.toString(16).padStart(64, '0');\n const data = `${methodId}${recipientPadded}${amountPadded}`;\n\n txParams = {\n to: selectedToken.contractAddress,\n data: data,\n value: '0x0'\n };\n \n console.log('🔄 ERC-20 Transaction:', {\n token: selectedToken.symbol,\n amount: paymentData.totalAmount,\n amountWithDecimals: amount,\n to: selectedToken.contractAddress,\n recipient: recipientAddress\n });\n \n } else {\n // Native transaction\n const value = Math.floor(paymentData.totalAmount * Math.pow(10, 18));\n txParams = {\n to: recipientAddress,\n value: `0x${value.toString(16)}`\n };\n \n console.log('🔄 Native Transaction:', {\n amount: paymentData.totalAmount,\n to: recipientAddress\n });\n }\n\n const txHash = await wallet.sendTransaction(txParams);\n \n console.log('✅ Transaction successful:', txHash);\n setCurrentStep('success');\n \n // Call success callback\n onSuccess?.(paymentData.id, txHash, {\n network: selectedNetwork.name,\n token: selectedToken.symbol,\n amount: paymentData.totalAmount,\n method: paymentMethod\n });\n\n } catch (err) {\n console.error('Transaction failed:', err);\n setError(err.message);\n } finally {\n setProcessing(false);\n }\n };\n\n if (!isOpen) return null;\n\n const isDark = theme === 'dark';\n\n return (\n <div className=\"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50\">\n <div className={`rounded-lg shadow-xl max-w-md w-full mx-4 ${isDark ? 'bg-gray-900 text-white' : 'bg-white text-gray-900'}`}>\n \n {/* Header */}\n <div className={`p-4 border-b flex justify-between items-center ${isDark ? 'border-gray-700' : 'border-gray-200'}`}>\n <div className=\"text-center flex-1\">\n <h2 className=\"text-lg font-semibold\">Pay with Crypto</h2>\n {config.amount && (\n <p className=\"text-2xl font-bold text-purple-600\">${config.amount.toFixed(2)}</p>\n )}\n </div>\n <button \n onClick={onClose} \n className={`ml-4 text-gray-500 hover:text-gray-700 ${isDark ? 'hover:text-gray-300' : ''}`}\n >\n ✕\n </button>\n </div>\n\n {/* Content */}\n <div className=\"p-4 min-h-[400px]\">\n {error && (\n <div className=\"mb-4 p-3 bg-red-100 text-red-700 rounded border border-red-200\">\n {error}\n <button \n onClick={() => setError('')}\n className=\"ml-2 text-red-500 hover:text-red-700\"\n >\n ✕\n </button>\n </div>\n )}\n\n {/* Step 1: Select Method */}\n {currentStep === 'method' && (\n <div className=\"\">\n <div className=\"space-y-1\">\n <button\n onClick={() => { setPaymentMethod('wallet'); setCurrentStep('network'); }}\n className={`w-full p-4 border-2 rounded-lg hover:border-purple-500 text-left flex items-center space-x-3 transition-colors ${isDark ? 'border-gray-600 hover:bg-gray-800' : 'border-gray-200 hover:bg-gray-50'}`}\n >\n <span className=\"text-2xl\">🦊</span>\n <div>\n <div className=\"font-medium\">MetaMask Wallet</div>\n <div className={`text-sm ${isDark ? 'text-gray-400' : 'text-gray-500'}`}>Connect and pay instantly</div>\n </div>\n </button>\n <button\n onClick={() => { setPaymentMethod('qr'); setCurrentStep('network'); }}\n className={`w-full p-4 border-2 rounded-lg hover:border-purple-500 text-left flex items-center space-x-3 transition-colors ${isDark ? 'border-gray-600 hover:bg-gray-800' : 'border-gray-200 hover:bg-gray-50'}`}\n >\n <span className=\"text-2xl\">📱</span>\n <div>\n <div className=\"font-medium\">QR Code</div>\n <div className={`text-sm ${isDark ? 'text-gray-400' : 'text-gray-500'}`}>Scan with mobile wallet</div>\n </div>\n </button>\n </div>\n </div>\n )}\n\n {/* Step 2: Select Network */}\n {currentStep === 'network' && (\n <div className=\"space-y-4\">\n <div className=\"flex items-center space-x-2\">\n <button \n onClick={() => setCurrentStep('method')} \n className={`${isDark ? 'text-gray-400 hover:text-gray-200' : 'text-gray-500 hover:text-gray-700'}`}\n >\n ←\n </button>\n <h3 className=\"font-medium\">Select Network</h3>\n </div>\n <div className=\"space-y-2\">\n {networks.map((network) => (\n <button\n key={network.id}\n onClick={() => { setSelectedNetwork(network); setCurrentStep('token'); }}\n className={`w-full p-3 border rounded-lg hover:border-purple-500 text-left transition-colors ${isDark ? 'border-gray-600 hover:bg-gray-800' : 'border-gray-200 hover:bg-gray-50'}`}\n >\n <div className=\"font-medium\">{network.name}</div>\n <div className={`text-sm ${isDark ? 'text-gray-400' : 'text-gray-500'}`}>{network.shortName.toUpperCase()}</div>\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/* Step 3: Select Token */}\n {currentStep === 'token' && (\n <div className=\"space-y-4\">\n <div className=\"flex items-center space-x-2\">\n <button \n onClick={() => setCurrentStep('network')} \n className={`${isDark ? 'text-gray-400 hover:text-gray-200' : 'text-gray-500 hover:text-gray-700'}`}\n >\n ←\n </button>\n <h3 className=\"font-medium\">Select Token on {selectedNetwork?.name}</h3>\n </div>\n <div className=\"space-y-2\">\n {tokens\n .filter(token => token.Network?.shortName === selectedNetwork?.shortName)\n .map((token) => (\n <button\n key={token.id}\n onClick={() => { setSelectedToken(token); createPayment(); }}\n disabled={loading}\n className={`w-full p-3 border rounded-lg hover:border-purple-500 text-left flex justify-between transition-colors disabled:opacity-50 ${isDark ? 'border-gray-600 hover:bg-gray-800' : 'border-gray-200 hover:bg-gray-50'}`}\n >\n <div>\n <div className=\"font-medium\">{token.name}</div>\n <div className={`text-sm ${isDark ? 'text-gray-400' : 'text-gray-500'}`}>{token.symbol}</div>\n </div>\n {token.isStablecoin && (\n <span className=\"px-2 py-1 bg-green-100 text-green-600 text-xs rounded\">\n Stablecoin\n </span>\n )}\n </button>\n ))\n }\n </div>\n </div>\n )}\n\n {/* Step 4: Wallet Connect & Pay */}\n {currentStep === 'wallet' && (\n <div className=\"space-y-4\">\n <h3 className=\"font-medium text-center\">Connect & Pay</h3>\n \n {!walletConnected ? (\n <div className=\"text-center space-y-4\">\n <div className=\"w-16 h-16 bg-purple-100 rounded-full flex items-center justify-center mx-auto\">\n <span className=\"text-2xl\">🦊</span>\n </div>\n <p className={`${isDark ? 'text-gray-300' : 'text-gray-600'}`}>Connect MetaMask to continue</p>\n <button\n onClick={connectWallet}\n disabled={loading}\n className=\"w-full bg-purple-600 text-white py-3 px-4 rounded-lg hover:bg-purple-700 disabled:opacity-50 font-medium\"\n >\n {loading ? 'Connecting...' : 'Connect MetaMask'}\n </button>\n </div>\n ) : (\n <div className=\"space-y-4\">\n <div className=\"p-3 bg-green-50 rounded-lg border border-green-200\">\n <p className=\"text-green-600 text-sm font-medium\">✅ Wallet Connected</p>\n <p className=\"font-mono text-xs text-green-700 mt-1\">{wallet.account?.slice(0, 6)}...{wallet.account?.slice(-4)}</p>\n </div>\n \n <div className={`p-4 rounded-lg space-y-2 ${isDark ? 'bg-gray-800' : 'bg-gray-50'}`}>\n <div className=\"flex justify-between text-sm\">\n <span>Amount:</span>\n <span className=\"font-medium\">{paymentData?.totalAmount} {selectedToken?.symbol}</span>\n </div>\n <div className=\"flex justify-between text-sm\">\n <span>Network:</span>\n <span className=\"font-medium\">{selectedNetwork?.name}</span>\n </div>\n <div className=\"flex justify-between text-sm\">\n <span>Token:</span>\n <span className=\"font-medium\">{selectedToken?.name}</span>\n </div>\n </div>\n\n <button\n onClick={sendTransaction}\n disabled={processing}\n className=\"w-full bg-green-600 text-white py-3 px-4 rounded-lg hover:bg-green-700 disabled:opacity-50 font-medium flex items-center justify-center space-x-2\"\n >\n {processing ? (\n <>\n <div className=\"animate-spin rounded-full h-4 w-4 border-b-2 border-white\"></div>\n <span>Sending Transaction...</span>\n </>\n ) : (\n <span>Send {paymentData?.totalAmount} {selectedToken?.symbol}</span>\n )}\n </button>\n </div>\n )}\n </div>\n )}\n\n {/* QR Code Step */}\n {currentStep === 'qr' && (\n <div className=\"text-center space-y-4\">\n <h3 className=\"font-medium\">Scan QR Code</h3>\n <div className={`p-8 rounded-lg ${isDark ? 'bg-gray-800' : 'bg-gray-100'}`}>\n <p className={`${isDark ? 'text-gray-400' : 'text-gray-500'}`}>QR Code will appear here</p>\n <p className=\"text-xs mt-2\">Send {paymentData?.totalAmount} {selectedToken?.symbol}</p>\n <p className=\"text-xs\">to merchant wallet</p>\n </div>\n <p className={`text-xs ${isDark ? 'text-gray-400' : 'text-gray-500'}`}>\n Waiting for payment confirmation...\n </p>\n </div>\n )}\n\n {/* Success */}\n {currentStep === 'success' && (\n <div className=\"text-center space-y-4\">\n <div className=\"w-16 h-16 bg-green-100 rounded-full flex items-center justify-center mx-auto\">\n <span className=\"text-2xl\">✅</span>\n </div>\n <h3 className=\"font-medium text-green-600\">Payment Successful!</h3>\n <p className={`text-sm ${isDark ? 'text-gray-300' : 'text-gray-600'}`}>\n Your transaction has been sent successfully\n </p>\n <button\n onClick={onClose}\n className=\"w-full bg-purple-600 text-white py-3 px-4 rounded-lg hover:bg-purple-700 font-medium\"\n >\n Close\n </button>\n </div>\n )}\n\n {/* Loading Spinner */}\n {loading && currentStep !== 'wallet' && (\n <div className=\"flex items-center justify-center py-8\">\n <div className=\"animate-spin rounded-full h-8 w-8 border-b-2 border-purple-600\"></div>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default SimpleCoinleyPayment;","'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n exports.createRoot = m.createRoot;\n exports.hydrateRoot = m.hydrateRoot;\n} else {\n var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n exports.createRoot = function(c, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.createRoot(c, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n exports.hydrateRoot = function(c, h, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.hydrateRoot(c, h, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n}\n","// src/vanilla/index.js\nimport React from 'react';\nimport { createRoot } from 'react-dom/client';\n\n// Use default import instead of named import\nimport EnhancedSimpleCoinleyPayment from '../components/EnhancedSimpleCoinleyPayment';\nimport '../styles/index.css';\n\nclass CoinleyVanilla {\n constructor(config = {}) {\n this.config = { ...config };\n this.isOpen = false;\n this.root = null;\n this.container = null;\n this.callbacks = {};\n }\n\n open(paymentConfig, callbacks = {}) {\n if (this.isOpen) return;\n \n this.callbacks = callbacks;\n this.container = document.createElement('div');\n this.container.id = 'coinley-payment-container';\n this.container.style.cssText = 'position:fixed;top:0;left:0;right:0;bottom:0;z-index:999999;';\n document.body.appendChild(this.container);\n\n this.root = createRoot(this.container);\n this.isOpen = true;\n\n this.root.render(\n React.createElement(EnhancedSimpleCoinleyPayment, {\n ...this.config,\n isOpen: true,\n config: paymentConfig,\n onSuccess: this.handleSuccess.bind(this),\n onError: this.handleError.bind(this),\n onClose: this.handleClose.bind(this)\n })\n );\n }\n\n close() {\n if (!this.isOpen) return;\n this.isOpen = false;\n if (this.root) { this.root.unmount(); this.root = null; }\n if (this.container) { this.container.remove(); this.container = null; }\n }\n\n handleSuccess(paymentId, txHash, details) {\n if (this.callbacks.onSuccess) this.callbacks.onSuccess(paymentId, txHash, details);\n }\n\n handleError(error) {\n if (this.callbacks.onError) this.callbacks.onError(error);\n }\n\n handleClose() {\n this.close();\n if (this.callbacks.onClose) this.callbacks.onClose();\n }\n}\n\nexport default CoinleyVanilla;\nif (typeof window !== 'undefined') window.CoinleyVanilla = CoinleyVanilla;","// // src/index.js \n\n// // Original exports (keep these for backward compatibility)\n// export {\n// CoinleyProvider,\n// CoinleyCheckout,\n// ThemeProvider,\n// useCoinley\n// } from './CoinleyProvider';\n\n// export { PaymentAPI } from './PaymentAPI';\n// export { default as CoinleyPayment } from './CoinleyPayment';\n\n// // Keep the original simple component (working version)\n// export { default as SimpleCoinleyPayment } from './components/SimpleCoinleyPayment';\n\n// // NEW: Enhanced component with modern design from coinley-checkout\n// export { default as EnhancedSimpleCoinleyPayment } from './components/EnhancedSimpleCoinleyPayment';\n\n// // NEW: Simple provider for both components\n// export const SimpleCoinleyProvider = ({ children, ...props }) => children;\n\n// // Import styles\n// import './styles/index.css';\n\n// // Version\n// export const VERSION = '0.0.2'; // Updated version\n\n// // Utils (keep your existing utils)\n// export const utils = {\n// formatAmount: (amount, decimals = 2) => amount.toFixed(decimals),\n \n// truncateAddress: (address, startChars = 6, endChars = 4) => {\n// if (!address) return '';\n// if (address.length <= startChars + endChars) return address;\n// return `${address.slice(0, startChars)}...${address.slice(-endChars)}`;\n// },\n \n// isValidAddress: (address, network) => {\n// if (!address) return false;\n \n// switch (network.toLowerCase()) {\n// case 'ethereum':\n// case 'bsc':\n// case 'polygon':\n// return /^0x[a-fA-F0-9]{40}$/.test(address);\n// case 'tron':\n// return /^T[a-zA-Z0-9]{33}$/.test(address);\n// case 'solana':\n// return /^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(address);\n// default:\n// return address.length > 0;\n// }\n// },\n \n// copyToClipboard: async (text) => {\n// try {\n// await navigator.clipboard.writeText(text);\n// return true;\n// } catch {\n// return false;\n// }\n// }\n// };\n\n// // Error classes (keep your existing error handling)\n// export class CoinleyError extends Error {\n// constructor(message, code) {\n// super(message);\n// this.name = 'CoinleyError';\n// this.code = code;\n// }\n// }\n\n// // Default config\n// export const DEFAULT_CONFIG = {\n// theme: 'light',\n// debug: false,\n// testMode: false,\n// autoOpen: false\n// };\n\n// // NEW: Quick usage examples for both components\n// export const USAGE_EXAMPLES = {\n// // Original simple component (still works)\n// simple: `\n// import { SimpleCoinleyPayment } from 'coinley-test';\n\n// <SimpleCoinleyPayment\n// apiKey=\"your-api-key\"\n// apiSecret=\"your-api-secret\"\n// apiUrl=\"https://your-api-url.com\"\n// isOpen={isOpen}\n// config={{\n// amount: 100,\n// customerEmail: \"customer@example.com\",\n// merchantWalletAddresses: {\n// ethereum: \"0x...\",\n// bsc: \"0x...\"\n// }\n// }}\n// onSuccess={(paymentId, txHash, details) => console.log('Success!')}\n// onError={(error) => console.error('Error:', error)}\n// onClose={() => setIsOpen(false)}\n// />\n// `,\n \n// // Enhanced component with modern design\n// enhanced: `\n// import { EnhancedSimpleCoinleyPayment } from 'coinley-test';\n\n// <EnhancedSimpleCoinleyPayment\n// apiKey=\"your-api-key\"\n// apiSecret=\"your-api-secret\"\n// apiUrl=\"https://your-api-url.com\"\n// isOpen={isOpen}\n// config={{\n// amount: 100,\n// customerEmail: \"customer@example.com\",\n// merchantName: \"Your Store\",\n// merchantWalletAddresses: {\n// ethereum: \"0x...\",\n// bsc: \"0x...\"\n// }\n// }}\n// onSuccess={(paymentId, txHash, details) => console.log('Success!')}\n// onError={(error) => console.error('Error:', error)}\n// onClose={() => setIsOpen(false)}\n// theme=\"light\" // or \"dark\"\n// />\n// `\n// };\n\n\n\n\n\n\n// src/index.js - Updated to include vanilla exports\n\n// Original React exports (keep these for backward compatibility)\nexport {\n CoinleyProvider,\n CoinleyCheckout,\n ThemeProvider,\n useCoinley\n} from './CoinleyProvider';\n\nexport { PaymentAPI } from './PaymentAPI';\nexport { default as CoinleyPayment } from './CoinleyPayment';\n\n// Keep the original simple component (working version)\nexport { default as SimpleCoinleyPayment } from './components/SimpleCoinleyPayment';\n\n// Enhanced component with modern design\nexport { default as EnhancedSimpleCoinleyPayment } from './components/EnhancedSimpleCoinleyPayment';\n\n// Simple provider for both components\nexport const SimpleCoinleyProvider = ({ children, ...props }) => children;\n\n// NEW: Vanilla JavaScript wrapper (for those who want to import it in React too)\nexport { default as CoinleyVanilla } from './vanilla/index';\n\n// Import styles\nimport './styles/index.css';\n\n// Version\nexport const VERSION = '0.0.26';\n\n// Utils (keep your existing utils)\nexport const utils = {\n formatAmount: (amount, decimals = 2) => amount.toFixed(decimals),\n \n truncateAddress: (address, startChars = 6, endChars = 4) => {\n if (!address) return '';\n if (address.length <= startChars + endChars) return address;\n return `${address.slice(0, startChars)}...${address.slice(-endChars)}`;\n },\n \n isValidAddress: (address, network) => {\n if (!address) return false;\n \n switch (network.toLowerCase()) {\n case 'ethereum':\n case 'bsc':\n case 'polygon':\n return /^0x[a-fA-F0-9]{40}$/.test(address);\n case 'tron':\n return /^T[a-zA-Z0-9]{33}$/.test(address);\n case 'solana':\n return /^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(address);\n default:\n return address.length > 0;\n }\n },\n \n copyToClipboard: async (text) => {\n try {\n await navigator.clipboard.writeText(text);\n return true;\n } catch {\n return false;\n }\n }\n};\n\n// Error classes\nexport class CoinleyError extends Error {\n constructor(message, code) {\n super(message);\n this.name = 'CoinleyError';\n this.code = code;\n }\n}\n\n// Default config\nexport const DEFAULT_CONFIG = {\n theme: 'light',\n debug: false,\n testMode: false,\n autoOpen: false\n};\n\n// Usage examples for documentation\nexport const USAGE_EXAMPLES = {\n // React usage (unchanged)\n react: `\nimport { EnhancedSimpleCoinleyPayment } from 'coinley-test';\n\n<EnhancedSimpleCoinleyPayment\n apiKey=\"your-api-key\"\n apiSecret=\"your-api-secret\"\n apiUrl=\"https://your-api-url.com\"\n isOpen={isOpen}\n config={{\n amount: 100,\n customerEmail: \"customer@example.com\",\n merchantName: \"Your Store\",\n merchantWalletAddresses: {\n ethereum: \"0x...\",\n bsc: \"0x...\"\n }\n }}\n onSuccess={(paymentId, txHash, details) => console.log('Success!')}\n onError={(error) => console.error('Error:', error)}\n onClose={() => setIsOpen(false)}\n theme=\"light\"\n/>\n `,\n \n // NEW: Vanilla JavaScript usage\n vanilla: `\n<!-- Include via CDN -->\n<script src=\"https://unpkg.com/coinley-test@latest/vanilla\"></script>\n<link rel=\"stylesheet\" href=\"https://unpkg.com/coinley-test@latest/vanilla/style.css\">\n\n<script>\n// Initialize\nconst coinley = new CoinleyVanilla({\n apiKey: \"your-api-key\",\n apiSecret: \"your-api-secret\",\n apiUrl: \"https://your-api-url.com\",\n theme: \"light\"\n});\n\n// Use in checkout\ncoinley.open({\n amount: 100,\n customerEmail: \"customer@example.com\",\n merchantName: \"Your Store\",\n merchantWalletAddresses: {\n ethereum: \"0x...\",\n bsc: \"0x...\"\n }\n}, {\n onSuccess: (paymentId, txHash, details) => console.log('Success!'),\n onError: (error) => console.error('Error:', error),\n onClose: () => console.log('Closed')\n});\n</script>\n `\n};"],"names":["require$$0","m","jsxRuntimeModule","jsx","_QrCode","k","n","_QrSegment","jsxs","Fragment","walletType","SimplePaymentAPI","error","token","CoinleyPayment","useWallet","_a","_b"],"mappings":";;;;;;;;;;;;;;;;;AASa,IAAI,IAAEA,OAAiB,IAAE,OAAO,IAAI,eAAe,GAAE,IAAE,OAAO,IAAI,gBAAgB,GAAEC,MAAE,OAAO,UAAU,gBAAe,IAAE,EAAE,mDAAmD,mBAAkB,IAAE,EAAC,KAAI,MAAG,KAAI,MAAG,QAAO,MAAG,UAAS,KAAE;AAClP,SAAS,EAAE,GAAE,GAAE,GAAE;AAAC,MAAI,GAAE,IAAE,IAAG,IAAE,MAAK,IAAE;AAAK,aAAS,MAAI,IAAE,KAAG;AAAG,aAAS,EAAE,QAAM,IAAE,KAAG,EAAE;AAAK,aAAS,EAAE,QAAM,IAAE,EAAE;AAAK,OAAI,KAAK,EAAEA,KAAE,KAAK,GAAE,CAAC,KAAG,CAAC,EAAE,eAAe,CAAC,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC;AAAG,MAAG,KAAG,EAAE,aAAa,MAAI,KAAK,IAAE,EAAE,cAAa,EAAE,YAAS,EAAE,CAAC,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC;AAAG,SAAM,EAAC,UAAS,GAAE,MAAK,GAAE,KAAI,GAAE,KAAI,GAAE,OAAM,GAAE,QAAO,EAAE,QAAO;AAAC;0CAAkB;AAAa,+BAAA,MAAC;AAAE,+BAAA,OAAa;ACR/T;AAClCC,aAAA,UAAUF;AACnB;;ACAA,MAAM,iBAAiB;AAAA,EACrB,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,WAAW;AAAA,EACX,uBAAuB;AAAA,EACvB,aAAa;AAAA,EACb,cAAc;AAAA,EACd,aAAa;AACf;AAGA,MAAM,eAAe;AAAA,EACnB,aAAa;AAAA,EACb,cAAc;AAAA,EACd,SAAS;AAAA,EACT,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,OAAO;AAAA,EACP,kBAAkB,CAAC;AACrB;AAGA,MAAM,gBAAgB,CAAC,OAAO,WAAW;AACvC,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK,eAAe;AACX,aAAA;AAAA,QACL,GAAG;AAAA,QACH,cAAc;AAAA,QACd,OAAO;AAAA,MAAA;AAAA,IAEX,KAAK,eAAe;AACX,aAAA;AAAA,QACL,GAAG;AAAA,QACH,aAAa;AAAA,QACb,cAAc;AAAA,QACd,SAAS,OAAO,QAAQ;AAAA,QACxB,SAAS,OAAO,QAAQ;AAAA,QACxB,YAAY,OAAO,QAAQ;AAAA,QAC3B,OAAO;AAAA,MAAA;AAAA,IAEX,KAAK,eAAe;AACX,aAAA;AAAA,QACL,GAAG;AAAA,QACH,kBAAkB,MAAM;AAAA,MAAA;AAAA,IAE5B,KAAK,eAAe;AACX,aAAA;AAAA,QACL,GAAG;AAAA,QACH,cAAc;AAAA,QACd,OAAO,OAAO;AAAA,MAAA;AAAA,IAElB,KAAK,eAAe;AACX,aAAA;AAAA,QACL,GAAG;AAAA,QACH,OAAO;AAAA,MAAA;AAAA,IAEX,KAAK,eAAe;AACX,aAAA;AAAA,QACL,GAAG;AAAA,QACH,kBAAkB,OAAO;AAAA,MAAA;AAAA,IAE7B,KAAK,eAAe;AACX,aAAA;AAAA,QACL,GAAG;AAAA,QACH,SAAS,OAAO;AAAA,MAAA;AAAA,IAEpB,KAAK,eAAe;AACX,aAAA;AAAA,QACL,GAAG;AAAA,QACH,SAAS,OAAO;AAAA,MAAA;AAAA,IAEpB;AACS,aAAA;AAAA,EACX;AACF;AAGA,MAAM,WAAW;AAAA,EACf,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,WAAW;AAAA,IACX,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,WAAW;AAAA,IACX,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,WAAW;AAAA,IACX,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,WAAW;AAAA,IACX,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,WAAW;AAAA,IACX,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,WAAW;AAAA,IACX,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,UAAU;AAAA,IACZ;AAAA,EACF;AACF;AAGA,MAAM,SAAS;AAAA,EACb,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,iBAAiB;AAAA,IACnB;AAAA,IACA,MAAM;AAAA,MACJ,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,iBAAiB;AAAA,IACnB;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH,MAAM;AAAA,MACJ,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,iBAAiB;AAAA,IACnB;AAAA,IACA,MAAM;AAAA,MACJ,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,iBAAiB;AAAA,IACnB;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,MACJ,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,iBAAiB;AAAA,IACnB;AAAA,IACA,MAAM;AAAA,MACJ,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,iBAAiB;AAAA,IACnB;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,iBAAiB;AAAA,IACnB;AAAA,IACA,MAAM;AAAA,MACJ,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,iBAAiB;AAAA,IACnB;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,iBAAiB;AAAA,IACnB;AAAA,IACA,MAAM;AAAA,MACJ,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,iBAAiB;AAAA,IACnB;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,MAAM;AAAA,MACJ,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,iBAAiB;AAAA,IACnB;AAAA,IACA,MAAM;AAAA,MACJ,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,iBAAiB;AAAA,IACnB;AAAA,EACF;AACF;AAGA,MAAM,oBAAoB;AAAA,EACxB,YAAY,UAAU;AACpB,SAAK,WAAW;AAChB,SAAK,WAAW;AAChB,SAAK,oBAAoB;AAAA,EAC3B;AAAA;AAAA,EAGA,gBAAgB;AACd,UAAM,UAAU,CAAA;AAEZ,QAAA,OAAO,WAAW,YAAoB,QAAA;AAG1C,QAAI,OAAO,YAAY,OAAO,SAAS,YAAY;AACjD,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,aAAa;AAAA,QACb,WAAW;AAAA,MAAA,CACZ;AAAA,IACH;AAGA,QAAI,OAAO,YAAY,OAAO,SAAS,kBAAkB;AACvD,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,aAAa;AAAA,QACb,WAAW;AAAA,MAAA,CACZ;AAAA,IACH;AAGA,QAAI,OAAO,YAAY,OAAO,SAAS,SAAS;AAC9C,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,aAAa;AAAA,QACb,WAAW;AAAA,MAAA,CACZ;AAAA,IACH;AAGA,QAAI,OAAO,aAAa,OAAO,SAAS,WAAW,OAAO,SAAS,gBAAgB;AACjF,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,aAAa;AAAA,QACb,WAAW;AAAA,MAAA,CACZ;AAAA,IACH;AAGA,QAAI,OAAO,YAAY,QAAQ,WAAW,GAAG;AAC3C,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,aAAa;AAAA,QACb,WAAW;AAAA,MAAA,CACZ;AAAA,IACH;AAEO,WAAA;AAAA,EACT;AAAA;AAAA,EAGA,MAAM,QAAQ,YAAY;AACpB,QAAA;AACF,WAAK,SAAS,EAAE,MAAM,eAAe,eAAgB,CAAA;AAEjD,UAAA,CAAC,OAAO,UAAU;AACd,cAAA,IAAI,MAAM,mDAAmD;AAAA,MACrE;AAGA,YAAM,WAAW,MAAM,OAAO,SAAS,QAAQ;AAAA,QAC7C,QAAQ;AAAA,MAAA,CACT;AAEG,UAAA,SAAS,WAAW,GAAG;AACnB,cAAA,IAAI,MAAM,+CAA+C;AAAA,MACjE;AAGA,YAAM,UAAU,MAAM,OAAO,SAAS,QAAQ;AAAA,QAC5C,QAAQ;AAAA,MAAA,CACT;AAED,WAAK,WAAW,OAAO;AACvB,WAAK,oBAAoB;AAGzB,WAAK,oBAAoB;AAEzB,WAAK,SAAS;AAAA,QACZ,MAAM,eAAe;AAAA,QACrB,SAAS;AAAA,UACP,SAAS,SAAS,CAAC;AAAA,UACnB;AAAA,UACA;AAAA,QACF;AAAA,MAAA,CACD;AAEM,aAAA;AAAA,QACL,SAAS,SAAS,CAAC;AAAA,QACnB;AAAA,QACA;AAAA,MAAA;AAAA,aAEK,OAAO;AACd,WAAK,SAAS;AAAA,QACZ,MAAM,eAAe;AAAA,QACrB,SAAS,MAAM;AAAA,MAAA,CAChB;AACK,YAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA,EAGA,sBAAsB;AAChB,QAAA,CAAC,KAAK,SAAU;AAEpB,SAAK,SAAS,GAAG,mBAAmB,CAAC,aAAa;AAC5C,UAAA,SAAS,WAAW,GAAG;AACzB,aAAK,WAAW;AAAA,MAAA,OACX;AACL,aAAK,SAAS;AAAA,UACZ,MAAM,eAAe;AAAA,UACrB,SAAS;AAAA,YACP,SAAS,SAAS,CAAC;AAAA,YACnB,SAAS,KAAK,SAAS;AAAA,YACvB,YAAY,KAAK;AAAA,UACnB;AAAA,QAAA,CACD;AAAA,MACH;AAAA,IAAA,CACD;AAED,SAAK,SAAS,GAAG,gBAAgB,CAAC,YAAY;AAC5C,WAAK,SAAS;AAAA,QACZ,MAAM,eAAe;AAAA,QACrB,SAAS;AAAA,MAAA,CACV;AAAA,IAAA,CACF;AAEI,SAAA,SAAS,GAAG,cAAc,MAAM;AACnC,WAAK,WAAW;AAAA,IAAA,CACjB;AAAA,EACH;AAAA;AAAA,EAGA,aAAa;AACX,QAAI,KAAK,YAAY,KAAK,SAAS,oBAAoB;AACrD,WAAK,SAAS;IAChB;AACA,SAAK,WAAW;AAChB,SAAK,oBAAoB;AACzB,SAAK,SAAS,EAAE,MAAM,eAAe,iBAAkB,CAAA;AAAA,EACzD;AAAA;AAAA,EAGA,MAAM,cAAc,eAAe;AAC7B,QAAA,CAAC,KAAK,UAAU;AACZ,YAAA,IAAI,MAAM,qBAAqB;AAAA,IACvC;AAEI,QAAA;AACI,YAAA,KAAK,SAAS,QAAQ;AAAA,QAC1B,QAAQ;AAAA,QACR,QAAQ,CAAC,EAAE,SAAS,cAAc,SAAS;AAAA,MAAA,CAC5C;AAAA,aACM,aAAa;AAEhB,UAAA,YAAY,SAAS,MAAM;AACvB,cAAA,KAAK,SAAS,QAAQ;AAAA,UAC1B,QAAQ;AAAA,UACR,QAAQ,CAAC;AAAA,YACP,SAAS,cAAc;AAAA,YACvB,WAAW,cAAc;AAAA,YACzB,gBAAgB,cAAc;AAAA,YAC9B,SAAS,CAAC,cAAc,MAAM;AAAA,YAC9B,mBAAmB,CAAC,cAAc,WAAW;AAAA,UAAA,CAC9C;AAAA,QAAA,CACF;AAAA,MAAA,OACI;AACC,cAAA;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,gBAAgB,UAAU;AAC1B,QAAA,CAAC,KAAK,UAAU;AACZ,YAAA,IAAI,MAAM,qBAAqB;AAAA,IACvC;AAEI,QAAA;AACF,YAAM,SAAS,MAAM,KAAK,SAAS,QAAQ;AAAA,QACzC,QAAQ;AAAA,QACR,QAAQ,CAAC,QAAQ;AAAA,MAAA,CAClB;AACM,aAAA;AAAA,aACA,OAAO;AACV,UAAA,MAAM,SAAS,MAAM;AACjB,cAAA,IAAI,MAAM,8BAA8B;AAAA,MAChD;AACM,YAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,WAAW,SAAS;AACpB,QAAA,CAAC,KAAK,UAAU;AACZ,YAAA,IAAI,MAAM,qBAAqB;AAAA,IACvC;AAEI,QAAA;AACF,YAAM,UAAU,MAAM,KAAK,SAAS,QAAQ;AAAA,QAC1C,QAAQ;AAAA,QACR,QAAQ,CAAC,SAAS,QAAQ;AAAA,MAAA,CAC3B;AACM,aAAA;AAAA,aACA,OAAO;AACN,cAAA,MAAM,0BAA0B,KAAK;AACtC,aAAA;AAAA,IACT;AAAA,EACF;AACF;AAGA,MAAM,gBAAgB,cAAc;AAG7B,MAAM,iBAAiB,CAAC,EAAE,eAAe;AAC9C,QAAM,CAAC,OAAO,QAAQ,IAAI,WAAW,eAAe,YAAY;AAChE,QAAM,gBAAgB,MAAM,OAAO,IAAI,oBAAoB,QAAQ,CAAC;AAGpE,QAAM,UAAU,MAAM;AACd,UAAA,mBAAmB,cAAc,QAAQ,cAAc;AACpD,aAAA;AAAA,MACP,MAAM,eAAe;AAAA,MACrB,SAAS;AAAA,IAAA,CACV;AAAA,EACH,GAAG,CAAE,CAAA;AAGC,QAAA,UAAU,YAAY,OAAO,eAAe;AAChD,WAAO,MAAM,cAAc,QAAQ,QAAQ,UAAU;AAAA,EACvD,GAAG,CAAE,CAAA;AAGC,QAAA,aAAa,YAAY,MAAM;AACnC,kBAAc,QAAQ;EACxB,GAAG,CAAE,CAAA;AAGC,QAAA,gBAAgB,YAAY,OAAO,kBAAkB;AACzD,WAAO,MAAM,cAAc,QAAQ,cAAc,aAAa;AAAA,EAChE,GAAG,CAAE,CAAA;AAGC,QAAA,kBAAkB,YAAY,OAAO,aAAa;AACtD,WAAO,MAAM,cAAc,QAAQ,gBAAgB,QAAQ;AAAA,EAC7D,GAAG,CAAE,CAAA;AAGC,QAAA,aAAa,YAAY,MAAM;AACnC,aAAS,EAAE,MAAM,eAAe,YAAa,CAAA;AAAA,EAC/C,GAAG,CAAE,CAAA;AAGC,QAAA,mBAAmB,YAAY,CAAC,qBAAqB;AACzD,WAAO,SAAS,gBAAgB;AAAA,EAClC,GAAG,CAAE,CAAA;AAGL,QAAM,iBAAiB,YAAY,CAAC,kBAAkB,gBAAgB;;AAC7D,YAAA,YAAO,gBAAgB,MAAvB,mBAA2B;AAAA,EACpC,GAAG,CAAE,CAAA;AAGL,QAAM,QAAQ;AAAA;AAAA,IAEZ,GAAG;AAAA;AAAA,IAGH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA;AAAA,IAGA,UAAU;AAAA,IACV,QAAQ;AAAA,EAAA;AAGV,SACGG,kCAAAA,IAAA,cAAc,UAAd,EAAuB,OACrB,SACH,CAAA;AAEJ;AAGO,MAAM,YAAY,MAAM;AACvB,QAAA,UAAU,WAAW,aAAa;AACxC,MAAI,CAAC,SAAS;AACN,UAAA,IAAI,MAAM,gDAAgD;AAAA,EAClE;AACO,SAAA;AACT;AC7jBA,IAAI,YAAY,OAAO;AACvB,IAAI,sBAAsB,OAAO;AACjC,IAAI,eAAe,OAAO,UAAU;AACpC,IAAI,eAAe,OAAO,UAAU;AACpC,IAAI,kBAAkB,CAAC,KAAK,KAAK,UAAU,OAAO,MAAM,UAAU,KAAK,KAAK,EAAE,YAAY,MAAM,cAAc,MAAM,UAAU,MAAM,MAAO,CAAA,IAAI,IAAI,GAAG,IAAI;AAC1J,IAAI,iBAAiB,CAAC,GAAG,MAAM;AACpB,WAAA,QAAQ,MAAM,IAAI,CAAA;AACrB,QAAA,aAAa,KAAK,GAAG,IAAI;AAC3B,sBAAgB,GAAG,MAAM,EAAE,IAAI,CAAC;AAChC,MAAA;AACO,aAAA,QAAQ,oBAAoB,CAAC,GAAG;AACnC,UAAA,aAAa,KAAK,GAAG,IAAI;AAC3B,wBAAgB,GAAG,MAAM,EAAE,IAAI,CAAC;AAAA,IACpC;AACK,SAAA;AACT;AACA,IAAI,YAAY,CAAC,QAAQ,YAAY;AACnC,MAAI,SAAS,CAAA;AACb,WAAS,QAAQ;AACX,QAAA,aAAa,KAAK,QAAQ,IAAI,KAAK,QAAQ,QAAQ,IAAI,IAAI;AACtD,aAAA,IAAI,IAAI,OAAO,IAAI;AAC9B,MAAI,UAAU,QAAQ;AACX,aAAA,QAAQ,oBAAoB,MAAM,GAAG;AACxC,UAAA,QAAQ,QAAQ,IAAI,IAAI,KAAK,aAAa,KAAK,QAAQ,IAAI;AACtD,eAAA,IAAI,IAAI,OAAO,IAAI;AAAA,IAC9B;AACK,SAAA;AACT;AAMA;AAAA;AAAA;AAAA;AAAA;AAKA,IAAI;AAAA,CACH,CAAC,eAAe;AACT,QAAA,UAAU,MAAMC,SAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAM5B,YAAY,SAAS,sBAAsB,eAAe,KAAK;AAC7D,WAAK,UAAU;AACf,WAAK,uBAAuB;AAG5B,WAAK,UAAU;AAEf,WAAK,aAAa;AAClB,UAAI,UAAUA,SAAQ,eAAe,UAAUA,SAAQ;AAC/C,cAAA,IAAI,WAAW,4BAA4B;AAC/C,UAAA,MAAM,MAAM,MAAM;AACd,cAAA,IAAI,WAAW,yBAAyB;AAC3C,WAAA,OAAO,UAAU,IAAI;AAC1B,UAAI,MAAM,CAAA;AACV,eAAS,IAAI,GAAG,IAAI,KAAK,MAAM;AAC7B,YAAI,KAAK,KAAK;AAChB,eAAS,IAAI,GAAG,IAAI,KAAK,MAAM,KAAK;AAClC,aAAK,QAAQ,KAAK,IAAI,MAAO,CAAA;AAC7B,aAAK,WAAW,KAAK,IAAI,MAAO,CAAA;AAAA,MAClC;AACA,WAAK,qBAAqB;AACpB,YAAA,eAAe,KAAK,oBAAoB,aAAa;AAC3D,WAAK,cAAc,YAAY;AAC/B,UAAI,OAAO,IAAI;AACb,YAAI,aAAa;AACjB,iBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,eAAK,UAAU,CAAC;AAChB,eAAK,eAAe,CAAC;AACf,gBAAA,UAAU,KAAK;AACrB,cAAI,UAAU,YAAY;AAClB,kBAAA;AACO,yBAAA;AAAA,UACf;AACA,eAAK,UAAU,CAAC;AAAA,QAClB;AAAA,MACF;AACO,aAAA,KAAK,OAAO,OAAO,CAAC;AAC3B,WAAK,OAAO;AACZ,WAAK,UAAU,GAAG;AAClB,WAAK,eAAe,GAAG;AACvB,WAAK,aAAa;IACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,OAAO,WAAW,MAAM,KAAK;AAC3B,YAAM,OAAO,WAAW,UAAU,aAAa,IAAI;AAC5CA,aAAAA,SAAQ,eAAe,MAAM,GAAG;AAAA,IACzC;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,OAAO,aAAa,MAAM,KAAK;AAC7B,YAAM,MAAM,WAAW,UAAU,UAAU,IAAI;AAC/C,aAAOA,SAAQ,eAAe,CAAC,GAAG,GAAG,GAAG;AAAA,IAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWA,OAAO,eAAe,MAAM,KAAK,aAAa,GAAG,aAAa,IAAI,OAAO,IAAI,WAAW,MAAM;AACxF,UAAA,EAAEA,SAAQ,eAAe,cAAc,cAAc,cAAc,cAAcA,SAAQ,gBAAgB,OAAO,MAAM,OAAO;AACzH,cAAA,IAAI,WAAW,eAAe;AAClC,UAAA;AACA,UAAA;AACC,WAAA,UAAU,cAAc,WAAW;AACtC,cAAM,oBAAoBA,SAAQ,oBAAoB,SAAS,GAAG,IAAI;AACtE,cAAM,WAAW,UAAU,aAAa,MAAM,OAAO;AACrD,YAAI,YAAY,mBAAmB;AAClB,yBAAA;AACf;AAAA,QACF;AACA,YAAI,WAAW;AACP,gBAAA,IAAI,WAAW,eAAe;AAAA,MACxC;AACW,iBAAA,UAAU,CAACA,SAAQ,IAAI,QAAQA,SAAQ,IAAI,UAAUA,SAAQ,IAAI,IAAI,GAAG;AACjF,YAAI,YAAY,gBAAgBA,SAAQ,oBAAoB,SAAS,MAAM,IAAI;AACvE,gBAAA;AAAA,MACV;AACA,UAAI,KAAK,CAAA;AACT,iBAAW,OAAO,MAAM;AACtB,mBAAW,IAAI,KAAK,UAAU,GAAG,EAAE;AACnC,mBAAW,IAAI,UAAU,IAAI,KAAK,iBAAiB,OAAO,GAAG,EAAE;AACpD,mBAAA,KAAK,IAAI,QAAQ;AAC1B,aAAG,KAAK,CAAC;AAAA,MACb;AACO,aAAA,GAAG,UAAU,YAAY;AAChC,YAAM,mBAAmBA,SAAQ,oBAAoB,SAAS,GAAG,IAAI;AAC9D,aAAA,GAAG,UAAU,gBAAgB;AACzB,iBAAA,GAAG,KAAK,IAAI,GAAG,mBAAmB,GAAG,MAAM,GAAG,EAAE;AAC3D,iBAAW,IAAI,IAAI,GAAG,SAAS,KAAK,GAAG,EAAE;AAClC,aAAA,GAAG,SAAS,KAAK,CAAC;AACzB,eAAS,UAAU,KAAK,GAAG,SAAS,kBAAkB,WAAW,MAAM;AAC1D,mBAAA,SAAS,GAAG,EAAE;AAC3B,UAAI,gBAAgB,CAAA;AACb,aAAA,cAAc,SAAS,IAAI,GAAG;AACnC,sBAAc,KAAK,CAAC;AACnB,SAAA,QAAQ,CAAC,GAAG,MAAM,cAAc,MAAM,CAAC,KAAK,KAAK,KAAK,IAAI,EAAE;AAC/D,aAAO,IAAIA,SAAQ,SAAS,KAAK,eAAe,IAAI;AAAA,IACtD;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,UAAU,GAAG,GAAG;AACd,aAAO,KAAK,KAAK,IAAI,KAAK,QAAQ,KAAK,KAAK,IAAI,KAAK,QAAQ,KAAK,QAAQ,CAAC,EAAE,CAAC;AAAA,IAChF;AAAA;AAAA,IAEA,aAAa;AACX,aAAO,KAAK;AAAA,IACd;AAAA;AAAA;AAAA,IAGA,uBAAuB;AACrB,eAAS,IAAI,GAAG,IAAI,KAAK,MAAM,KAAK;AAClC,aAAK,kBAAkB,GAAG,GAAG,IAAI,KAAK,CAAC;AACvC,aAAK,kBAAkB,GAAG,GAAG,IAAI,KAAK,CAAC;AAAA,MACzC;AACK,WAAA,kBAAkB,GAAG,CAAC;AAC3B,WAAK,kBAAkB,KAAK,OAAO,GAAG,CAAC;AACvC,WAAK,kBAAkB,GAAG,KAAK,OAAO,CAAC;AACjC,YAAA,cAAc,KAAK;AACzB,YAAM,WAAW,YAAY;AAC7B,eAAS,IAAI,GAAG,IAAI,UAAU,KAAK;AACjC,iBAAS,IAAI,GAAG,IAAI,UAAU,KAAK;AACjC,cAAI,EAAE,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,WAAW,KAAK,KAAK,WAAW,KAAK,KAAK;AACjF,iBAAK,qBAAqB,YAAY,CAAC,GAAG,YAAY,CAAC,CAAC;AAAA,QAC5D;AAAA,MACF;AACA,WAAK,eAAe,CAAC;AACrB,WAAK,YAAY;AAAA,IACnB;AAAA;AAAA;AAAA,IAGA,eAAe,MAAM;AACnB,YAAM,OAAO,KAAK,qBAAqB,cAAc,IAAI;AACzD,UAAI,MAAM;AACD,eAAA,IAAI,GAAG,IAAI,IAAI;AAChB,cAAA,OAAO,KAAK,QAAQ,KAAK;AAC3B,YAAA,QAAQ,QAAQ,KAAK,OAAO;AAC3B,aAAA,SAAS,MAAM,CAAC;AACd,eAAA,IAAI,GAAG,KAAK,GAAG;AACtB,aAAK,kBAAkB,GAAG,GAAG,OAAO,MAAM,CAAC,CAAC;AAC9C,WAAK,kBAAkB,GAAG,GAAG,OAAO,MAAM,CAAC,CAAC;AAC5C,WAAK,kBAAkB,GAAG,GAAG,OAAO,MAAM,CAAC,CAAC;AAC5C,WAAK,kBAAkB,GAAG,GAAG,OAAO,MAAM,CAAC,CAAC;AACnC,eAAA,IAAI,GAAG,IAAI,IAAI;AACtB,aAAK,kBAAkB,KAAK,GAAG,GAAG,OAAO,MAAM,CAAC,CAAC;AAC1C,eAAA,IAAI,GAAG,IAAI,GAAG;AAChB,aAAA,kBAAkB,KAAK,OAAO,IAAI,GAAG,GAAG,OAAO,MAAM,CAAC,CAAC;AACrD,eAAA,IAAI,GAAG,IAAI,IAAI;AACjB,aAAA,kBAAkB,GAAG,KAAK,OAAO,KAAK,GAAG,OAAO,MAAM,CAAC,CAAC;AAC/D,WAAK,kBAAkB,GAAG,KAAK,OAAO,GAAG,IAAI;AAAA,IAC/C;AAAA;AAAA;AAAA,IAGA,cAAc;AACZ,UAAI,KAAK,UAAU;AACjB;AACF,UAAI,MAAM,KAAK;AACN,eAAA,IAAI,GAAG,IAAI,IAAI;AAChB,cAAA,OAAO,KAAK,QAAQ,MAAM;AAC5B,YAAA,OAAO,KAAK,WAAW,KAAK;AAC3B,aAAA,SAAS,MAAM,CAAC;AACvB,eAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AACrB,cAAA,QAAQ,OAAO,MAAM,CAAC;AAC5B,cAAM,IAAI,KAAK,OAAO,KAAK,IAAI;AAC/B,cAAM,IAAI,KAAK,MAAM,IAAI,CAAC;AACrB,aAAA,kBAAkB,GAAG,GAAG,KAAK;AAC7B,aAAA,kBAAkB,GAAG,GAAG,KAAK;AAAA,MACpC;AAAA,IACF;AAAA;AAAA;AAAA,IAGA,kBAAkB,GAAG,GAAG;AACtB,eAAS,KAAK,IAAI,MAAM,GAAG,MAAM;AAC/B,iBAAS,KAAK,IAAI,MAAM,GAAG,MAAM;AACzB,gBAAA,OAAO,KAAK,IAAI,KAAK,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC;AAChD,gBAAM,KAAK,IAAI;AACf,gBAAM,KAAK,IAAI;AACX,cAAA,KAAK,MAAM,KAAK,KAAK,QAAQ,KAAK,MAAM,KAAK,KAAK;AACpD,iBAAK,kBAAkB,IAAI,IAAI,QAAQ,KAAK,QAAQ,CAAC;AAAA,QACzD;AAAA,MACF;AAAA,IACF;AAAA;AAAA;AAAA,IAGA,qBAAqB,GAAG,GAAG;AACzB,eAAS,KAAK,IAAI,MAAM,GAAG,MAAM;AACtB,iBAAA,KAAK,IAAI,MAAM,GAAG;AACzB,eAAK,kBAAkB,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC;AAAA,MACpF;AAAA,IACF;AAAA;AAAA;AAAA,IAGA,kBAAkB,GAAG,GAAG,QAAQ;AAC9B,WAAK,QAAQ,CAAC,EAAE,CAAC,IAAI;AACrB,WAAK,WAAW,CAAC,EAAE,CAAC,IAAI;AAAA,IAC1B;AAAA;AAAA;AAAA;AAAA,IAIA,oBAAoB,MAAM;AACxB,YAAM,MAAM,KAAK;AACjB,YAAM,MAAM,KAAK;AACjB,UAAI,KAAK,UAAUA,SAAQ,oBAAoB,KAAK,GAAG;AAC/C,cAAA,IAAI,WAAW,kBAAkB;AACzC,YAAM,YAAYA,SAAQ,4BAA4B,IAAI,OAAO,EAAE,GAAG;AACtE,YAAM,cAAcA,SAAQ,wBAAwB,IAAI,OAAO,EAAE,GAAG;AACpE,YAAM,eAAe,KAAK,MAAMA,SAAQ,qBAAqB,GAAG,IAAI,CAAC;AAC/D,YAAA,iBAAiB,YAAY,eAAe;AAClD,YAAM,gBAAgB,KAAK,MAAM,eAAe,SAAS;AACzD,UAAI,SAAS,CAAA;AACP,YAAA,QAAQA,SAAQ,0BAA0B,WAAW;AAC3D,eAAS,IAAI,GAAGC,KAAI,GAAG,IAAI,WAAW,KAAK;AACrC,YAAA,MAAM,KAAK,MAAMA,IAAGA,KAAI,gBAAgB,eAAe,IAAI,iBAAiB,IAAI,EAAE;AACtF,QAAAA,MAAK,IAAI;AACT,cAAM,MAAMD,SAAQ,4BAA4B,KAAK,KAAK;AAC1D,YAAI,IAAI;AACN,cAAI,KAAK,CAAC;AACZ,eAAO,KAAK,IAAI,OAAO,GAAG,CAAC;AAAA,MAC7B;AACA,UAAI,SAAS,CAAA;AACb,eAAS,IAAI,GAAG,IAAI,OAAO,CAAC,EAAE,QAAQ,KAAK;AAClC,eAAA,QAAQ,CAAC,OAAO,MAAM;AACvB,cAAA,KAAK,gBAAgB,eAAe,KAAK;AACpC,mBAAA,KAAK,MAAM,CAAC,CAAC;AAAA,QAAA,CACvB;AAAA,MACH;AACO,aAAA,OAAO,UAAU,YAAY;AAC7B,aAAA;AAAA,IACT;AAAA;AAAA;AAAA,IAGA,cAAc,MAAM;AACd,UAAA,KAAK,UAAU,KAAK,MAAMA,SAAQ,qBAAqB,KAAK,OAAO,IAAI,CAAC;AACpE,cAAA,IAAI,WAAW,kBAAkB;AACzC,UAAI,IAAI;AACR,eAAS,QAAQ,KAAK,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG;AACtD,YAAI,SAAS;AACH,kBAAA;AACV,iBAAS,OAAO,GAAG,OAAO,KAAK,MAAM,QAAQ;AAC3C,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,kBAAM,IAAI,QAAQ;AACZ,kBAAA,UAAU,QAAQ,IAAI,MAAM;AAClC,kBAAM,IAAI,SAAS,KAAK,OAAO,IAAI,OAAO;AACtC,gBAAA,CAAC,KAAK,WAAW,CAAC,EAAE,CAAC,KAAK,IAAI,KAAK,SAAS,GAAG;AACjD,mBAAK,QAAQ,CAAC,EAAE,CAAC,IAAI,OAAO,KAAK,MAAM,CAAC,GAAG,KAAK,IAAI,EAAE;AACtD;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACO,aAAA,KAAK,KAAK,SAAS,CAAC;AAAA,IAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,UAAU,MAAM;AACV,UAAA,OAAO,KAAK,OAAO;AACf,cAAA,IAAI,WAAW,yBAAyB;AAChD,eAAS,IAAI,GAAG,IAAI,KAAK,MAAM,KAAK;AAClC,iBAAS,IAAI,GAAG,IAAI,KAAK,MAAM,KAAK;AAC9B,cAAA;AACJ,kBAAQ,MAAM;AAAA,YACZ,KAAK;AACO,wBAAA,IAAI,KAAK,KAAK;AACxB;AAAA,YACF,KAAK;AACH,uBAAS,IAAI,KAAK;AAClB;AAAA,YACF,KAAK;AACH,uBAAS,IAAI,KAAK;AAClB;AAAA,YACF,KAAK;AACO,wBAAA,IAAI,KAAK,KAAK;AACxB;AAAA,YACF,KAAK;AACO,wBAAA,KAAK,MAAM,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,KAAK,KAAK;AACxD;AAAA,YACF,KAAK;AACH,uBAAS,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK;AAClC;AAAA,YACF,KAAK;AACH,wBAAU,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK;AACxC;AAAA,YACF,KAAK;AACH,yBAAW,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK;AAC1C;AAAA,YACF;AACQ,oBAAA,IAAI,MAAM,aAAa;AAAA,UACjC;AACA,cAAI,CAAC,KAAK,WAAW,CAAC,EAAE,CAAC,KAAK;AACvB,iBAAA,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;AAAA,QAC3C;AAAA,MACF;AAAA,IACF;AAAA;AAAA;AAAA,IAGA,kBAAkB;AAChB,UAAI,SAAS;AACb,eAAS,IAAI,GAAG,IAAI,KAAK,MAAM,KAAK;AAClC,YAAI,WAAW;AACf,YAAI,OAAO;AACP,YAAA,aAAa,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACrC,iBAAS,IAAI,GAAG,IAAI,KAAK,MAAM,KAAK;AAClC,cAAI,KAAK,QAAQ,CAAC,EAAE,CAAC,KAAK,UAAU;AAClC;AACA,gBAAI,QAAQ;AACV,wBAAUA,SAAQ;AAAA,qBACX,OAAO;AACd;AAAA,UAAA,OACG;AACA,iBAAA,wBAAwB,MAAM,UAAU;AAC7C,gBAAI,CAAC;AACH,wBAAU,KAAK,2BAA2B,UAAU,IAAIA,SAAQ;AAClE,uBAAW,KAAK,QAAQ,CAAC,EAAE,CAAC;AACrB,mBAAA;AAAA,UACT;AAAA,QACF;AACA,kBAAU,KAAK,+BAA+B,UAAU,MAAM,UAAU,IAAIA,SAAQ;AAAA,MACtF;AACA,eAAS,IAAI,GAAG,IAAI,KAAK,MAAM,KAAK;AAClC,YAAI,WAAW;AACf,YAAI,OAAO;AACP,YAAA,aAAa,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACrC,iBAAS,IAAI,GAAG,IAAI,KAAK,MAAM,KAAK;AAClC,cAAI,KAAK,QAAQ,CAAC,EAAE,CAAC,KAAK,UAAU;AAClC;AACA,gBAAI,QAAQ;AACV,wBAAUA,SAAQ;AAAA,qBACX,OAAO;AACd;AAAA,UAAA,OACG;AACA,iBAAA,wBAAwB,MAAM,UAAU;AAC7C,gBAAI,CAAC;AACH,wBAAU,KAAK,2BAA2B,UAAU,IAAIA,SAAQ;AAClE,uBAAW,KAAK,QAAQ,CAAC,EAAE,CAAC;AACrB,mBAAA;AAAA,UACT;AAAA,QACF;AACA,kBAAU,KAAK,+BAA+B,UAAU,MAAM,UAAU,IAAIA,SAAQ;AAAA,MACtF;AACA,eAAS,IAAI,GAAG,IAAI,KAAK,OAAO,GAAG,KAAK;AACtC,iBAAS,IAAI,GAAG,IAAI,KAAK,OAAO,GAAG,KAAK;AACtC,gBAAM,QAAQ,KAAK,QAAQ,CAAC,EAAE,CAAC;AAC3B,cAAA,SAAS,KAAK,QAAQ,CAAC,EAAE,IAAI,CAAC,KAAK,SAAS,KAAK,QAAQ,IAAI,CAAC,EAAE,CAAC,KAAK,SAAS,KAAK,QAAQ,IAAI,CAAC,EAAE,IAAI,CAAC;AAC1G,sBAAUA,SAAQ;AAAA,QACtB;AAAA,MACF;AACA,UAAI,OAAO;AACX,iBAAW,OAAO,KAAK;AACd,eAAA,IAAI,OAAO,CAAC,KAAK,UAAU,OAAO,QAAQ,IAAI,IAAI,IAAI;AACzD,YAAA,QAAQ,KAAK,OAAO,KAAK;AACzB,YAAAC,KAAI,KAAK,KAAK,KAAK,IAAI,OAAO,KAAK,QAAQ,EAAE,IAAI,KAAK,IAAI;AACzD,aAAA,KAAKA,MAAKA,MAAK,CAAC;AACvB,gBAAUA,KAAID,SAAQ;AACf,aAAA,KAAK,UAAU,UAAU,OAAO;AAChC,aAAA;AAAA,IACT;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,+BAA+B;AAC7B,UAAI,KAAK,WAAW;AAClB,eAAO;WACJ;AACH,cAAM,WAAW,KAAK,MAAM,KAAK,UAAU,CAAC,IAAI;AAChD,cAAM,OAAO,KAAK,WAAW,KAAK,KAAK,KAAK,MAAM,KAAK,UAAU,IAAI,MAAM,WAAW,IAAI,EAAE,IAAI;AAC5F,YAAA,SAAS,CAAC,CAAC;AACf,iBAAS,MAAM,KAAK,OAAO,GAAG,OAAO,SAAS,UAAU,OAAO;AACtD,iBAAA,OAAO,GAAG,GAAG,GAAG;AAClB,eAAA;AAAA,MACT;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAIA,OAAO,qBAAqB,KAAK;AAC/B,UAAI,MAAMA,SAAQ,eAAe,MAAMA,SAAQ;AACvC,cAAA,IAAI,WAAW,6BAA6B;AACpD,UAAI,UAAU,KAAK,MAAM,OAAO,MAAM;AACtC,UAAI,OAAO,GAAG;AACZ,cAAM,WAAW,KAAK,MAAM,MAAM,CAAC,IAAI;AAC5B,mBAAA,KAAK,WAAW,MAAM,WAAW;AAC5C,YAAI,OAAO;AACC,oBAAA;AAAA,MACd;AACO,aAAA,OAAO,UAAU,UAAU,KAAK;AAChC,aAAA;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAIA,OAAO,oBAAoB,KAAK,KAAK;AAC5B,aAAA,KAAK,MAAMA,SAAQ,qBAAqB,GAAG,IAAI,CAAC,IAAIA,SAAQ,wBAAwB,IAAI,OAAO,EAAE,GAAG,IAAIA,SAAQ,4BAA4B,IAAI,OAAO,EAAE,GAAG;AAAA,IACrK;AAAA;AAAA;AAAA,IAGA,OAAO,0BAA0B,QAAQ;AACnC,UAAA,SAAS,KAAK,SAAS;AACnB,cAAA,IAAI,WAAW,qBAAqB;AAC5C,UAAI,SAAS,CAAA;AACb,eAAS,IAAI,GAAG,IAAI,SAAS,GAAG;AAC9B,eAAO,KAAK,CAAC;AACf,aAAO,KAAK,CAAC;AACb,UAAI,OAAO;AACX,eAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,iBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,iBAAO,CAAC,IAAIA,SAAQ,oBAAoB,OAAO,CAAC,GAAG,IAAI;AACnD,cAAA,IAAI,IAAI,OAAO;AACjB,mBAAO,CAAC,KAAK,OAAO,IAAI,CAAC;AAAA,QAC7B;AACOA,eAAAA,SAAQ,oBAAoB,MAAM,CAAC;AAAA,MAC5C;AACO,aAAA;AAAA,IACT;AAAA;AAAA,IAEA,OAAO,4BAA4B,MAAM,SAAS;AAChD,UAAI,SAAS,QAAQ,IAAI,CAAC,MAAM,CAAC;AACjC,iBAAW,KAAK,MAAM;AACd,cAAA,SAAS,IAAI,OAAO,MAAM;AAChC,eAAO,KAAK,CAAC;AACL,gBAAA,QAAQ,CAAC,MAAM,MAAM,OAAO,CAAC,KAAKA,SAAQ,oBAAoB,MAAM,MAAM,CAAC;AAAA,MACrF;AACO,aAAA;AAAA,IACT;AAAA;AAAA;AAAA,IAGA,OAAO,oBAAoB,GAAG,GAAG;AAC/B,UAAI,MAAM,KAAK,KAAK,MAAM,KAAK;AACvB,cAAA,IAAI,WAAW,mBAAmB;AAC1C,UAAI,IAAI;AACR,eAAS,IAAI,GAAG,KAAK,GAAG,KAAK;AACvB,YAAA,KAAK,KAAK,MAAM,KAAK;AACnB,cAAA,MAAM,IAAI,KAAK;AAAA,MACvB;AACO,aAAA,MAAM,KAAK,CAAC;AACZ,aAAA;AAAA,IACT;AAAA;AAAA;AAAA,IAGA,2BAA2B,YAAY;AAC/B,YAAAE,KAAI,WAAW,CAAC;AACf,aAAAA,MAAK,KAAK,OAAO,CAAC;AACzB,YAAM,OAAOA,KAAI,KAAK,WAAW,CAAC,KAAKA,MAAK,WAAW,CAAC,KAAKA,KAAI,KAAK,WAAW,CAAC,KAAKA,MAAK,WAAW,CAAC,KAAKA;AACrG,cAAA,QAAQ,WAAW,CAAC,KAAKA,KAAI,KAAK,WAAW,CAAC,KAAKA,KAAI,IAAI,MAAM,QAAQ,WAAW,CAAC,KAAKA,KAAI,KAAK,WAAW,CAAC,KAAKA,KAAI,IAAI;AAAA,IACtI;AAAA;AAAA,IAEA,+BAA+B,iBAAiB,kBAAkB,YAAY;AAC5E,UAAI,iBAAiB;AACd,aAAA,wBAAwB,kBAAkB,UAAU;AACtC,2BAAA;AAAA,MACrB;AACA,0BAAoB,KAAK;AACpB,WAAA,wBAAwB,kBAAkB,UAAU;AAClD,aAAA,KAAK,2BAA2B,UAAU;AAAA,IACnD;AAAA;AAAA,IAEA,wBAAwB,kBAAkB,YAAY;AAChD,UAAA,WAAW,CAAC,KAAK;AACnB,4BAAoB,KAAK;AAC3B,iBAAW,IAAI;AACf,iBAAW,QAAQ,gBAAgB;AAAA,IACrC;AAAA,EAAA;AAIF,UAAQ,cAAc;AAEtB,UAAQ,cAAc;AAEtB,UAAQ,aAAa;AACrB,UAAQ,aAAa;AACrB,UAAQ,aAAa;AACrB,UAAQ,aAAa;AACrB,UAAQ,0BAA0B;AAAA;AAAA;AAAA,IAGhC,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,IAElK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,IAEnK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,IAEnK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,EAAA;AAGrK,UAAQ,8BAA8B;AAAA;AAAA;AAAA,IAGpC,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,IAE5I,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,IAErJ,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,IAExJ,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,EAAA;AAI3J,aAAW,SAAS;AACX,WAAA,WAAW,KAAK,KAAK,IAAI;AAChC,QAAI,MAAM,KAAK,MAAM,MAAM,QAAQ,OAAO;AAClC,YAAA,IAAI,WAAW,oBAAoB;AAC3C,aAAS,IAAI,MAAM,GAAG,KAAK,GAAG;AACzB,SAAA,KAAK,QAAQ,IAAI,CAAC;AAAA,EACzB;AACS,WAAA,OAAO,GAAG,GAAG;AACZ,YAAA,MAAM,IAAI,MAAM;AAAA,EAC1B;AACA,WAAS,OAAO,MAAM;AACpB,QAAI,CAAC;AACG,YAAA,IAAI,MAAM,iBAAiB;AAAA,EACrC;AACM,QAAA,aAAa,MAAMC,YAAW;AAAA;AAAA;AAAA;AAAA;AAAA,IAKlC,YAAY,MAAM,UAAU,SAAS;AACnC,WAAK,OAAO;AACZ,WAAK,WAAW;AAChB,WAAK,UAAU;AACf,UAAI,WAAW;AACP,cAAA,IAAI,WAAW,kBAAkB;AACpC,WAAA,UAAU,QAAQ;IACzB;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,OAAO,UAAU,MAAM;AACrB,UAAI,KAAK,CAAA;AACT,iBAAW,KAAK;AACH,mBAAA,GAAG,GAAG,EAAE;AACrB,aAAO,IAAIA,YAAWA,YAAW,KAAK,MAAM,KAAK,QAAQ,EAAE;AAAA,IAC7D;AAAA;AAAA,IAEA,OAAO,YAAY,QAAQ;AACrB,UAAA,CAACA,YAAW,UAAU,MAAM;AACxB,cAAA,IAAI,WAAW,wCAAwC;AAC/D,UAAI,KAAK,CAAA;AACT,eAAS,IAAI,GAAG,IAAI,OAAO,UAAU;AACnC,cAAMD,KAAI,KAAK,IAAI,OAAO,SAAS,GAAG,CAAC;AACvC,mBAAW,SAAS,OAAO,UAAU,GAAG,IAAIA,EAAC,GAAG,EAAE,GAAGA,KAAI,IAAI,GAAG,EAAE;AAC7D,aAAAA;AAAA,MACP;AACA,aAAO,IAAIC,YAAWA,YAAW,KAAK,SAAS,OAAO,QAAQ,EAAE;AAAA,IAClE;AAAA;AAAA;AAAA;AAAA,IAIA,OAAO,iBAAiB,MAAM;AACxB,UAAA,CAACA,YAAW,eAAe,IAAI;AAC3B,cAAA,IAAI,WAAW,6DAA6D;AACpF,UAAI,KAAK,CAAA;AACL,UAAA;AACJ,WAAK,IAAI,GAAG,IAAI,KAAK,KAAK,QAAQ,KAAK,GAAG;AACpC,YAAA,OAAOA,YAAW,qBAAqB,QAAQ,KAAK,OAAO,CAAC,CAAC,IAAI;AACrE,gBAAQA,YAAW,qBAAqB,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC;AACvD,mBAAA,MAAM,IAAI,EAAE;AAAA,MACzB;AACA,UAAI,IAAI,KAAK;AACAA,mBAAAA,YAAW,qBAAqB,QAAQ,KAAK,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE;AAC3E,aAAO,IAAIA,YAAWA,YAAW,KAAK,cAAc,KAAK,QAAQ,EAAE;AAAA,IACrE;AAAA;AAAA;AAAA,IAGA,OAAO,aAAa,MAAM;AACxB,UAAI,QAAQ;AACV,eAAO;eACAA,YAAW,UAAU,IAAI;AAChC,eAAO,CAACA,YAAW,YAAY,IAAI,CAAC;AAAA,eAC7BA,YAAW,eAAe,IAAI;AACrC,eAAO,CAACA,YAAW,iBAAiB,IAAI,CAAC;AAAA;AAEzC,eAAO,CAACA,YAAW,UAAUA,YAAW,gBAAgB,IAAI,CAAC,CAAC;AAAA,IAClE;AAAA;AAAA;AAAA,IAGA,OAAO,QAAQ,WAAW;AACxB,UAAI,KAAK,CAAA;AACT,UAAI,YAAY;AACR,cAAA,IAAI,WAAW,mCAAmC;AAAA,eACjD,YAAY,KAAK;AACb,mBAAA,WAAW,GAAG,EAAE;AAAA,eACpB,YAAY,KAAK,IAAI;AACjB,mBAAA,GAAG,GAAG,EAAE;AACR,mBAAA,WAAW,IAAI,EAAE;AAAA,MAAA,WACnB,YAAY,KAAK;AACf,mBAAA,GAAG,GAAG,EAAE;AACR,mBAAA,WAAW,IAAI,EAAE;AAAA,MAC9B;AACQ,cAAA,IAAI,WAAW,mCAAmC;AAC1D,aAAO,IAAIA,YAAWA,YAAW,KAAK,KAAK,GAAG,EAAE;AAAA,IAClD;AAAA;AAAA;AAAA,IAGA,OAAO,UAAU,MAAM;AACdA,aAAAA,YAAW,cAAc,KAAK,IAAI;AAAA,IAC3C;AAAA;AAAA;AAAA;AAAA,IAIA,OAAO,eAAe,MAAM;AACnBA,aAAAA,YAAW,mBAAmB,KAAK,IAAI;AAAA,IAChD;AAAA;AAAA;AAAA,IAGA,UAAU;AACD,aAAA,KAAK,QAAQ;IACtB;AAAA;AAAA;AAAA,IAGA,OAAO,aAAa,MAAM,SAAS;AACjC,UAAI,SAAS;AACb,iBAAW,OAAO,MAAM;AACtB,cAAM,SAAS,IAAI,KAAK,iBAAiB,OAAO;AAC5C,YAAA,IAAI,YAAY,KAAK;AAChB,iBAAA;AACC,kBAAA,IAAI,SAAS,IAAI,QAAQ;AAAA,MACrC;AACO,aAAA;AAAA,IACT;AAAA;AAAA,IAEA,OAAO,gBAAgB,KAAK;AAC1B,YAAM,UAAU,GAAG;AACnB,UAAI,SAAS,CAAA;AACb,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AAC/B,YAAA,IAAI,OAAO,CAAC,KAAK;AACnB,iBAAO,KAAK,IAAI,WAAW,CAAC,CAAC;AAAA,aAC1B;AACI,iBAAA,KAAK,SAAS,IAAI,UAAU,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAChD,eAAA;AAAA,QACP;AAAA,MACF;AACO,aAAA;AAAA,IACT;AAAA,EAAA;AAIF,aAAW,gBAAgB;AAE3B,aAAW,qBAAqB;AAGhC,aAAW,uBAAuB;AAClC,MAAI,YAAY;AAChB,aAAW,YAAY;AACzB,GAAG,cAAc,YAAY,CAAG,EAAA;AAAA,CAC/B,CAAC,eAAe;AAEf,GAAC,CAAC,YAAY;AACN,UAAA,OAAO,MAAM,KAAK;AAAA;AAAA;AAAA,MAGtB,YAAY,SAAS,YAAY;AAC/B,aAAK,UAAU;AACf,aAAK,aAAa;AAAA,MACpB;AAAA,IAAA;AAGF,SAAK,MAAM,IAAI,KAAK,GAAG,CAAC;AAExB,SAAK,SAAS,IAAI,KAAK,GAAG,CAAC;AAE3B,SAAK,WAAW,IAAI,KAAK,GAAG,CAAC;AAE7B,SAAK,OAAO,IAAI,KAAK,GAAG,CAAC;AAEzB,YAAQ,MAAM;AAAA,EAAA,GACJ,WAAW,WAAW,WAAW,SAAS,CAAA,EAAG;AAC3D,GAAG,cAAc,YAAY,CAAG,EAAA;AAAA,CAC/B,CAAC,eAAe;AAEf,GAAC,CAAC,eAAe;AACT,UAAA,QAAQ,MAAM,MAAM;AAAA;AAAA,MAExB,YAAY,UAAU,kBAAkB;AACtC,aAAK,WAAW;AAChB,aAAK,mBAAmB;AAAA,MAC1B;AAAA;AAAA;AAAA;AAAA,MAIA,iBAAiB,KAAK;AACpB,eAAO,KAAK,iBAAiB,KAAK,OAAO,MAAM,KAAK,EAAE,CAAC;AAAA,MACzD;AAAA,IAAA;AAGI,UAAA,UAAU,IAAI,MAAM,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;AACnC,UAAA,eAAe,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;AACvC,UAAA,OAAO,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;AAC/B,UAAA,QAAQ,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;AAChC,UAAA,MAAM,IAAI,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAElC,eAAW,OAAO;AAAA,EAAA,GACL,WAAW,cAAc,WAAW,YAAY,CAAA,EAAG;AACpE,GAAG,cAAc,YAAY,CAAG,EAAA;AAChC,IAAI,oBAAoB;AAGxB;AAAA;AAAA;AAAA;AAAA;AAKA,IAAI,kBAAkB;AAAA,EACpB,GAAG,kBAAkB,OAAO,IAAI;AAAA,EAChC,GAAG,kBAAkB,OAAO,IAAI;AAAA,EAChC,GAAG,kBAAkB,OAAO,IAAI;AAAA,EAChC,GAAG,kBAAkB,OAAO,IAAI;AAClC;AACA,IAAI,eAAe;AACnB,IAAI,gBAAgB;AACpB,IAAI,kBAAkB;AACtB,IAAI,kBAAkB;AACtB,IAAI,wBAAwB;AAC5B,IAAI,qBAAqB;AACzB,IAAI,mBAAmB;AACvB,IAAI,sBAAsB;AAC1B,IAAI,oBAAoB;AACxB,SAAS,aAAa,SAAS,SAAS,GAAG;AACzC,QAAM,MAAM,CAAA;AACJ,UAAA,QAAQ,SAAS,KAAK,GAAG;AAC/B,QAAI,QAAQ;AACR,QAAA,QAAQ,SAAS,MAAM,GAAG;AACxB,UAAA,CAAC,QAAQ,UAAU,MAAM;AACvB,YAAA;AAAA,UACF,IAAI,QAAQ,MAAM,IAAI,IAAI,MAAM,IAAI,IAAI,KAAK,MAAM,QAAQ,MAAM;AAAA,QAAA;AAE3D,gBAAA;AACR;AAAA,MACF;AACI,UAAA,MAAM,IAAI,SAAS,GAAG;AACxB,YAAI,CAAC,MAAM;AACT;AAAA,QACF;AACA,YAAI,UAAU,MAAM;AACd,cAAA,KAAK,IAAI,IAAI,MAAM,IAAI,IAAI,MAAM,SAAS,IAAI,MAAM,GAAG;AAAA,QAAA,OACtD;AACD,cAAA;AAAA,YACF,IAAI,QAAQ,MAAM,IAAI,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,MAAM,QAAQ,MAAM;AAAA,UAAA;AAAA,QAE1E;AACA;AAAA,MACF;AACI,UAAA,QAAQ,UAAU,MAAM;AAClB,gBAAA;AAAA,MACV;AAAA,IAAA,CACD;AAAA,EAAA,CACF;AACM,SAAA,IAAI,KAAK,EAAE;AACpB;AACA,SAAS,gBAAgB,SAAS,YAAY;AAC5C,SAAO,QAAQ,MAAM,EAAE,IAAI,CAAC,KAAK,MAAM;AACrC,QAAI,IAAI,WAAW,KAAK,KAAK,WAAW,IAAI,WAAW,GAAG;AACjD,aAAA;AAAA,IACT;AACA,WAAO,IAAI,IAAI,CAAC,MAAM,MAAM;AAC1B,UAAI,IAAI,WAAW,KAAK,KAAK,WAAW,IAAI,WAAW,GAAG;AACjD,eAAA;AAAA,MACT;AACO,aAAA;AAAA,IAAA,CACR;AAAA,EAAA,CACF;AACH;AACA,SAAS,iBAAiB,OAAO,MAAM,QAAQ,eAAe;AAC5D,MAAI,iBAAiB,MAAM;AAClB,WAAA;AAAA,EACT;AACM,QAAA,WAAW,MAAM,SAAS,SAAS;AACzC,QAAM,cAAc,KAAK,MAAM,OAAO,iBAAiB;AACvD,QAAM,QAAQ,WAAW;AACnB,QAAA,KAAK,cAAc,SAAS,eAAe;AAC3C,QAAA,KAAK,cAAc,UAAU,eAAe;AAC5C,QAAA,IAAI,cAAc,KAAK,OAAO,MAAM,SAAS,IAAI,IAAI,IAAI,cAAc,IAAI;AAC3E,QAAA,IAAI,cAAc,KAAK,OAAO,MAAM,SAAS,IAAI,IAAI,IAAI,cAAc,IAAI;AACjF,QAAM,UAAU,cAAc,WAAW,OAAO,IAAI,cAAc;AAClE,MAAI,aAAa;AACjB,MAAI,cAAc,UAAU;AACtB,QAAA,SAAS,KAAK,MAAM,CAAC;AACrB,QAAA,SAAS,KAAK,MAAM,CAAC;AACzB,QAAI,QAAQ,KAAK,KAAK,IAAI,IAAI,MAAM;AACpC,QAAI,QAAQ,KAAK,KAAK,IAAI,IAAI,MAAM;AACvB,iBAAA,EAAE,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG;EACpD;AACA,QAAM,cAAc,cAAc;AAClC,SAAO,EAAE,GAAG,GAAG,GAAG,GAAG,YAAY,SAAS;AAC5C;AACA,SAAS,cAAc,eAAe,YAAY;AAChD,MAAI,cAAc,MAAM;AACtB,WAAO,KAAK,IAAI,KAAK,MAAM,UAAU,GAAG,CAAC;AAAA,EAC3C;AACA,SAAO,gBAAgB,mBAAmB;AAC5C;AACA,SAAS,UAAU;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAG;AACG,MAAA,SAAS,MAAM,QAAQ,MAAM;AAC/B,UAAM,SAAS,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AACpD,UAAM,WAAW,OAAO,OAAO,CAAC,OAAO,MAAM;AAC3C,YAAM,KAAK,GAAG,kBAAkB,UAAU,aAAa,CAAC,CAAC;AAClD,aAAA;AAAA,IACT,GAAG,CAAE,CAAA;AACL,WAAO,kBAAkB,OAAO;AAAA,MAC9B;AAAA,MACA,gBAAgB,KAAK;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,KAED,CAAC,OAAO,OAAO,YAAY,UAAU,CAAC;AACnC,QAAA,EAAE,OAAO,QAAQ,UAAU,4BAA4B,MAAM,QAAQ,MAAM;AAC3E,QAAA,SAAS,OAAO;AACd,UAAA,UAAU,cAAc,eAAe,UAAU;AACjD,UAAA,YAAY,OAAO,SAAS,UAAU;AAC5C,UAAM,2BAA2B;AAAA,MAC/B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAEK,WAAA;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,yBAAyB;AAAA,IAAA;AAAA,EAC3B,GACC,CAAC,QAAQ,MAAM,eAAe,eAAe,UAAU,CAAC;AACpD,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AACA,IAAI,kBAAkB,WAAW;AAC3B,MAAA;AACF,QAAI,OAAO,EAAE,QAAQ,IAAI,OAAQ,CAAA;AAAA,WAC1B,GAAG;AACH,WAAA;AAAA,EACT;AACO,SAAA;AACT;AACA,IAAI,eAAe,MAAM;AAAA,EACvB,SAAS,cAAc,OAAO,cAAc;AAC1C,UAAM,KAAK,OAAO;AAAA,MAChB;AAAA,MACA,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,IACE,IAAA,IAAI,aAAa,UAAU,IAAI;AAAA,MACjC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AACK,UAAA,KAAK,YAAY,EAAE,UAAU,IAAI,aAAa,UAAU,IAAI,CAAC,OAAO,CAAC;AAC3E,UAAM,SAAS,iBAAiB,OAAO,SAAS,cAAc;AACxD,UAAA,UAAU,MAAM,OAAO,IAAI;AAC3B,UAAA,SAAS,MAAM,OAAO,IAAI;AAChC,UAAM,eAAe,MAAM;AAAA,MACzB,CAAC,SAAS;AACR,gBAAQ,UAAU;AACd,YAAA,OAAO,iBAAiB,YAAY;AACtC,uBAAa,IAAI;AAAA,mBACR,cAAc;AACvB,uBAAa,UAAU;AAAA,QACzB;AAAA,MACF;AAAA,MACA,CAAC,YAAY;AAAA,IAAA;AAEf,UAAM,CAAC,aAAa,gBAAgB,IAAI,MAAM,SAAS,KAAK;AAC5D,UAAM,EAAE,QAAQ,OAAO,UAAU,wBAAA,IAA4B,UAAU;AAAA,MACrE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AACD,UAAM,UAAU,MAAM;AAChB,UAAA,QAAQ,WAAW,MAAM;AAC3B,cAAM,SAAS,QAAQ;AACjB,cAAA,MAAM,OAAO,WAAW,IAAI;AAClC,YAAI,CAAC,KAAK;AACR;AAAA,QACF;AACA,YAAI,cAAc;AAClB,cAAM,QAAQ,OAAO;AACf,cAAA,oBAAoB,2BAA2B,QAAQ,UAAU,QAAQ,MAAM,YAAY,MAAM,kBAAkB,KAAK,MAAM,iBAAiB;AACrJ,YAAI,mBAAmB;AACjB,cAAA,wBAAwB,cAAc,MAAM;AAChC,0BAAA;AAAA,cACZ;AAAA,cACA,wBAAwB;AAAA,YAAA;AAAA,UAE5B;AAAA,QACF;AACM,cAAA,aAAa,OAAO,oBAAoB;AACvC,eAAA,SAAS,OAAO,QAAQ,OAAO;AAChC,cAAA,QAAQ,OAAO,WAAW;AAC5B,YAAA,MAAM,OAAO,KAAK;AACtB,YAAI,YAAY;AAChB,YAAI,SAAS,GAAG,GAAG,UAAU,QAAQ;AACrC,YAAI,YAAY;AAChB,YAAI,iBAAiB;AACnB,cAAI,KAAK,IAAI,OAAO,aAAa,aAAa,MAAM,CAAC,CAAC;AAAA,QAAA,OACjD;AACC,gBAAA,QAAQ,SAAS,KAAK,KAAK;AAC3B,gBAAA,QAAQ,SAAS,MAAM,KAAK;AAC9B,kBAAI,MAAM;AACR,oBAAI,SAAS,MAAM,QAAQ,MAAM,QAAQ,GAAG,CAAC;AAAA,cAC/C;AAAA,YAAA,CACD;AAAA,UAAA,CACF;AAAA,QACH;AACA,YAAI,yBAAyB;AAC3B,cAAI,cAAc,wBAAwB;AAAA,QAC5C;AACA,YAAI,mBAAmB;AACjB,cAAA;AAAA,YACF;AAAA,YACA,wBAAwB,IAAI;AAAA,YAC5B,wBAAwB,IAAI;AAAA,YAC5B,wBAAwB;AAAA,YACxB,wBAAwB;AAAA,UAAA;AAAA,QAE5B;AAAA,MACF;AAAA,IAAA,CACD;AACD,UAAM,UAAU,MAAM;AACpB,uBAAiB,KAAK;AAAA,IAAA,GACrB,CAAC,MAAM,CAAC;AACL,UAAA,cAAc,eAAe,EAAE,QAAQ,MAAM,OAAO,QAAQ,KAAK;AACvE,QAAI,MAAM;AACV,QAAI,UAAU,MAAM;AAClB,YAA4B,sBAAA;AAAA,QAC1B;AAAA,QACA;AAAA,UACE,KAAK;AAAA,UACL,KAAK;AAAA,UACL,OAAO,EAAE,SAAS,OAAO;AAAA,UACzB,QAAQ,MAAM;AACZ,6BAAiB,IAAI;AAAA,UACvB;AAAA,UACA,KAAK;AAAA,UACL,aAAa,2BAA2B,OAAO,SAAS,wBAAwB;AAAA,QAClF;AAAA,MAAA;AAAA,IAEJ;AACA,WAA6B,sBAAA,cAAc,MAAM,UAAU,MAA4B,sBAAA;AAAA,MACrF;AAAA,MACA,eAAe;AAAA,QACb,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,KAAK;AAAA,QACL,MAAM;AAAA,SACL,UAAU;AAAA,OACZ,GAAG;AAAA,EACR;AACF;AACA,aAAa,cAAc;AAC3B,IAAI,YAAY,MAAM;AAAA,EACpB,SAAS,WAAW,OAAO,cAAc;AACvC,UAAM,KAAK,OAAO;AAAA,MAChB;AAAA,MACA,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACE,IAAA,IAAI,aAAa,UAAU,IAAI;AAAA,MACjC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AACD,UAAM,EAAE,QAAQ,OAAO,UAAU,wBAAA,IAA4B,UAAU;AAAA,MACrE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AACD,QAAI,cAAc;AAClB,QAAI,QAAQ;AACR,QAAA,iBAAiB,QAAQ,2BAA2B,MAAM;AACxD,UAAA,wBAAwB,cAAc,MAAM;AAChC,sBAAA;AAAA,UACZ;AAAA,UACA,wBAAwB;AAAA,QAAA;AAAA,MAE5B;AACA,cAA8B,sBAAA;AAAA,QAC5B;AAAA,QACA;AAAA,UACE,MAAM,cAAc;AAAA,UACpB,QAAQ,wBAAwB;AAAA,UAChC,OAAO,wBAAwB;AAAA,UAC/B,GAAG,wBAAwB,IAAI;AAAA,UAC/B,GAAG,wBAAwB,IAAI;AAAA,UAC/B,qBAAqB;AAAA,UACrB,SAAS,wBAAwB;AAAA,UACjC,aAAa,wBAAwB;AAAA,QACvC;AAAA,MAAA;AAAA,IAEJ;AACM,UAAA,SAAS,aAAa,aAAa,MAAM;AAC/C,WAA6B,sBAAA;AAAA,MAC3B;AAAA,MACA,eAAe;AAAA,QACb,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,SAAS,OAAO,QAAQ,IAAI,QAAQ;AAAA,QACpC,KAAK;AAAA,QACL,MAAM;AAAA,SACL,UAAU;AAAA,MACb,CAAC,CAAC,+BAA+B,cAAc,SAAS,MAAM,KAAK;AAAA,MAC7C,sBAAA;AAAA,QACpB;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,GAAG,SAAS,QAAQ,IAAI,QAAQ;AAAA,UAChC,gBAAgB;AAAA,QAClB;AAAA,MACF;AAAA,MACgB,sBAAM,cAAc,QAAQ,EAAE,MAAM,SAAS,GAAG,QAAQ,gBAAgB,cAAc;AAAA,MACtG;AAAA,IAAA;AAAA,EAEJ;AACF;AACA,UAAU,cAAc;ACrmCxB,MAAM,cAAc;AAAA,EAClB,UAAU,MAAM;AACP,WAAA,iEAAiE,KAAK,UAAU,SAAS;AAAA,EAClG;AAAA,EAEA,iBAAiB,OAAO,SAAS;AAC3B,QAAA;AACF,UAAI,UAAU,aAAa,UAAU,UAAU,WAAW;AAClD,cAAA,UAAU,UAAU,UAAU,IAAI;AACjC,eAAA;AAAA,MAAA,OACF;AACC,cAAA,WAAW,SAAS,cAAc,UAAU;AAClD,iBAAS,QAAQ;AACjB,iBAAS,MAAM,WAAW;AAC1B,iBAAS,MAAM,OAAO;AACb,iBAAA,KAAK,YAAY,QAAQ;AAClC,iBAAS,OAAO;AAChB,iBAAS,YAAY,MAAM;AAClB,iBAAA,KAAK,YAAY,QAAQ;AAC3B,eAAA;AAAA,MACT;AAAA,aACO,KAAK;AACJ,cAAA,MAAM,gCAAgC,GAAG;AAC1C,aAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,SAAS,CAAC,UAAU,CAAC,GAAG,MAAM;AAC5B,QAAI,UAAU,SAAS;AACrB,gBAAU,QAAQ,OAAO;AAAA,IAC3B;AAAA,EACF;AACF;AAEA,MAAM,iBAAiB,CAAC;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AACF,MAAM;AACJ,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,EAAE;AACzC,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,IAAI;AACrD,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,KAAK;AAC1C,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,EAAE,gBAAgB,iBAAiB,IAAI,UAAU;AAGvD,YAAU,MAAM;AACd,UAAM,kBAAkB,MAAM;AAC5B,sBAAgB,IAAI;AAEhB,UAAA;AACI,cAAA,gBAAgB,iBAAiB,OAAO;AACxC,cAAA,cAAc,eAAe,SAAS,QAAQ;AAEpD,YAAI,MAAM;AAGV,gBAAQ,SAAS;AAAA,UACf,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AACC,gBAAA,eAAe,YAAY,iBAAiB;AAE9C,oBAAM,WAAW,YAAY;AAC7B,oBAAM,cAAc,KAAK,MAAM,WAAW,MAAM,IAAI,KAAK,IAAI,IAAI,QAAQ,CAAC,EAAE,SAAS;AAErF,oBAAM,YAAY,YAAY,eAAe,qBAAqB,aAAa,YAAY,WAAW,GAAG,cAAc,YAAY,QAAQ,IAAI,cAAc,EAAE,KAAK,EAAE;AAAA,YAAA,OACjK;AAEL,oBAAM,cAAc,KAAK,MAAM,WAAW,MAAM,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC,EAAE,SAAS;AAC/E,oBAAM,YAAY,aAAa,GAAG,cAAc,YAAY,QAAQ,IAAI,cAAc,EAAE,KAAK,EAAE,UAAU,WAAW;AAAA,YACtH;AACA;AAAA,UAEF;AAEQ,kBAAA;AAAA,QACV;AAEQ,gBAAA,IAAI,qBAAqB,GAAG;AACpC,mBAAW,GAAG;AAAA,eAEP,OAAO;AACN,gBAAA,MAAM,+BAA+B,KAAK;AAClD,mBAAW,aAAa;AAAA,MAC1B;AAEA,iBAAW,MAAM;AACf,wBAAgB,KAAK;AAAA,SACpB,GAAI;AAAA,IAAA;AAGL,QAAA,iBAAiB,UAAU,YAAY,SAAS;AAClC;IAClB;AAAA,EAAA,GACC,CAAC,eAAe,QAAQ,UAAU,SAAS,gBAAgB,gBAAgB,CAAC;AAE/E,QAAM,oBAAoB,YAAY;AACpC,UAAM,UAAU,MAAM,YAAY,gBAAgB,aAAa;AAC/D,QAAI,SAAS;AACX,gBAAU,IAAI;AACF,kBAAA,QAAQ,CAAC,EAAE,CAAC;AACxB,iBAAW,MAAM,UAAU,KAAK,GAAG,GAAI;AAAA,IACzC;AAAA,EAAA;AAGF,QAAM,gBAAgB,YAAY;AAChC,UAAM,UAAU,MAAM,YAAY,gBAAgB,OAAO;AACzD,QAAI,SAAS;AACX,mBAAa,IAAI;AACL,kBAAA,QAAQ,CAAC,EAAE,CAAC;AACxB,iBAAW,MAAM,aAAa,KAAK,GAAG,GAAI;AAAA,IAC5C;AAAA,EAAA;AAGI,QAAA,gBAAgB,CAAC,YAAY;AACjC,QAAI,CAAC,WAAW,QAAQ,UAAU,GAAW,QAAA;AACtC,WAAA,GAAG,QAAQ,MAAM,GAAG,CAAC,CAAC,MAAM,QAAQ,MAAM,EAAE,CAAC;AAAA,EAAA;AAGhD,QAAA,wBAAwB,CAAC,qBAAqB;AAC5C,UAAA,gBAAgB,iBAAiB,gBAAgB;AAChD,WAAA,gBAAgB,cAAc,OAAO;AAAA,EAAA;AAGxC,QAAA,uBAAuB,CAAC,qBAAqB;AACjD,YAAQ,kBAAkB;AAAA,MACxB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO,CAAC,YAAY,gBAAgB,mBAAmB,OAAO;AAAA,MAChE;AACE,eAAO,CAAC,mBAAmB;AAAA,IAC/B;AAAA,EAAA;AAIA,SAAAC,kCAAA,KAAC,OAAI,EAAA,WAAU,kCAEb,UAAA;AAAA,IAAAL,kCAAAA,IAAC,SAAI,WAAU,oEACZ,yBACEA,sCAAA,OAAA,EAAI,WAAU,oCAAmC,OAAO,EAAE,OAAO,KAAK,QAAQ,OAC7E,UAACK,kCAAA,KAAA,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,MAACL,kCAAAA,IAAA,OAAA,EAAI,WAAU,6EAA6E,CAAA;AAAA,MAC5FA,kCAAAA,IAAC,SAAI,WAAU,yBAAwB,OAAO,EAAE,YAAY,kCAAkC,GAAG,UAEjG,wBAAA,CAAA;AAAA,IAAA,GACF,EAAA,CACF,IACE,UACFA,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,QACP,MAAM;AAAA,QACN,OAAM;AAAA,QACN,eAAe;AAAA,QACf,UAAS;AAAA,QACT,SAAQ;AAAA,QACR,SAAQ;AAAA,MAAA;AAAA,IAAA,IAGVA,kCAAAA,IAAC,OAAI,EAAA,WAAU,2DAA0D,OAAO,EAAE,OAAO,KAAK,QAAQ,IAAI,GACxG,UAACK,kCAAA,KAAA,OAAA,EAAI,WAAU,mBACb,UAAA;AAAA,MAACL,kCAAA,IAAA,OAAA,EAAI,WAAU,iBAAgB,UAAE,MAAA;AAAA,MAChCA,kCAAA,IAAA,OAAA,EAAI,WAAU,yBAAwB,UAAqB,yBAAA;AAAA,IAAA,EAC9D,CAAA,EACF,CAAA,GAEJ;AAAA,IAGAK,kCAAAA,KAAC,OAAI,EAAA,WAAU,wBACb,UAAA;AAAA,MAACA,kCAAAA,KAAA,OAAA,EAAI,WAAU,oBACb,UAAA;AAAA,QAACA,kCAAAA,KAAA,OAAA,EAAI,WAAU,yCACb,UAAA;AAAA,UAACL,kCAAAA,IAAA,OAAA,EAAI,OAAM,8BAA6B,WAAU,+BAA8B,MAAK,QAAO,SAAQ,aAAY,QAAO,gBACrH,UAACA,kCAAAA,IAAA,QAAA,EAAK,eAAc,SAAQ,gBAAe,SAAQ,aAAa,GAAG,GAAE,4EAAA,CAA4E,EACnJ,CAAA;AAAA,UACAK,uCAAC,QAAG,WAAU,+BAA8B,OAAO,EAAE,YAAY,kCAAqC,GAAA,UAAA;AAAA,YAAA;AAAA,YACvF;AAAA,UAAA,GACf;AAAA,QAAA,GACF;AAAA,QACAA,uCAAC,OAAE,WAAU,yBAAwB,OAAO,EAAE,YAAY,kCAAqC,GAAA,UAAA;AAAA,UAAA;AAAA,UAC7E,sBAAsB,OAAO;AAAA,UAAE;AAAA,QAAA,GACjD;AAAA,MAAA,GACF;AAAA,4CAGC,OAAI,EAAA,WAAU,6FACb,UAACA,kCAAA,KAAA,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,QAACA,kCAAAA,KAAA,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,UAACL,kCAAA,IAAA,QAAA,EAAK,WAAU,qCAAoC,UAAO,WAAA;AAAA,UAC3DK,kCAAAA,KAAC,QAAK,EAAA,WAAU,oCAAoC,UAAA;AAAA,YAAA;AAAA,YAAO;AAAA,YAAE;AAAA,UAAA,GAAS;AAAA,QAAA,GACxE;AAAA,QACAA,kCAAAA,KAAC,OAAI,EAAA,WAAU,qCACb,UAAA;AAAA,UAACL,kCAAA,IAAA,QAAA,EAAK,WAAU,yBAAwB,UAAQ,YAAA;AAAA,gDAC/C,QAAK,EAAA,WAAU,qCAAqC,UAAA,sBAAsB,OAAO,GAAE;AAAA,QAAA,GACtF;AAAA,QACAK,kCAAAA,KAAC,OAAI,EAAA,WAAU,qCACb,UAAA;AAAA,UAACL,kCAAA,IAAA,QAAA,EAAK,WAAU,yBAAwB,UAAG,OAAA;AAAA,gDAC1C,QAAK,EAAA,WAAU,mCAAmC,UAAA,cAAc,aAAa,GAAE;AAAA,QAAA,GAClF;AAAA,MAAA,EAAA,CACF,EACF,CAAA;AAAA,IAAA,GACF;AAAA,IAGC,YAAY,SAAS,KACnBK,kCAAA,KAAA,OAAA,EAAI,WAAU,kCACb,UAAA;AAAA,MAAAL,kCAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,WAAW,4DACT,SACI,4BACA,6CACN;AAAA,UACA,OAAO,EAAE,YAAY,kCAAkC;AAAA,UAEtD,mBAAS,sBAAsB;AAAA,QAAA;AAAA,MAClC;AAAA,MAEC,YAAY,iBACXA,kCAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,WAAW,oEACT,YACI,4BACA,6CACN;AAAA,UACA,OAAO,EAAE,YAAY,kCAAkC;AAAA,UAEtD,sBAAY,0BAA0B;AAAA,QAAA;AAAA,MACzC;AAAA,IAAA,GAEJ;AAAA,0CAID,OAAI,EAAA,WAAU,mBACb,UAACK,kCAAA,KAAA,OAAA,EAAI,WAAU,oDACb,UAAA;AAAA,MAAAA,uCAAC,QAAG,WAAU,8DAA6D,OAAO,EAAE,YAAY,kCAC9F,GAAA,UAAA;AAAA,QAACL,kCAAAA,IAAA,OAAA,EAAI,OAAM,8BAA6B,WAAU,gBAAe,MAAK,QAAO,SAAQ,aAAY,QAAO,gBACtG,UAACA,kCAAAA,IAAA,QAAA,EAAK,eAAc,SAAQ,gBAAe,SAAQ,aAAa,GAAG,GAAE,4DAAA,CAA4D,EACnI,CAAA;AAAA,QAAM;AAAA,MAAA,GAER;AAAA,MACAK,uCAAC,QAAG,WAAU,mCAAkC,OAAO,EAAE,YAAY,kCACnE,GAAA,UAAA;AAAA,QAAAA,uCAAC,MAAG,EAAA,UAAA;AAAA,UAAA;AAAA,UAA6B,qBAAqB,OAAO,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,MAAM;AAAA,UAAE;AAAA,QAAA,GAAC;AAAA,QACzFL,kCAAAA,IAAC,QAAG,UAAsD,yDAAA,CAAA;AAAA,+CACzD,MAAG,EAAA,UAAA;AAAA,UAAA;AAAA,iDAAiB,UAAQ,EAAA,UAAA;AAAA,YAAA;AAAA,YAAO;AAAA,YAAE;AAAA,UAAA,GAAS;AAAA,UAAS;AAAA,UAAK,sBAAsB,OAAO;AAAA,QAAA,GAAE;AAAA,QAC5FA,kCAAAA,IAAC,QAAG,UAAgD,mDAAA,CAAA;AAAA,MAAA,GACtD;AAAA,MAECA,kCAAA,IAAA,OAAA,EAAI,WAAU,2DACb,UAACK,kCAAAA,KAAA,KAAA,EAAE,WAAU,0BAAyB,OAAO,EAAE,YAAY,kCACzD,GAAA,UAAA;AAAA,QAAAL,kCAAAA,IAAC,YAAO,UAAa,gBAAA,CAAA;AAAA,QAAS;AAAA,QAAgD,sBAAsB,OAAO;AAAA,QAAE;AAAA,MAAA,EAAA,CAC/G,EACF,CAAA;AAAA,IAAA,EAAA,CACF,EACF,CAAA;AAAA,IAGC,iBACCA,kCAAA,IAAC,OAAI,EAAA,WAAU,wBACb,UAAAA,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,WAAU;AAAA,QACV,OAAO,EAAE,YAAY,kCAAkC;AAAA,QACxD,UAAA;AAAA,MAAA;AAAA,IAAA,GAGH;AAAA,EAEJ,EAAA,CAAA;AAEJ;ACjSA,MAAe,OAAA;AC2Cf,IAAA,qBAAA,MAAM,iBAAiB;AAAA,EACrB,YAAY,SAAS,QAAQ,WAAW;AACjC,SAAA,UAAU,QAAQ,SAAS,GAAG,IAAI,QAAQ,MAAM,GAAG,EAAE,IAAI;AAC9D,SAAK,SAAS;AACd,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,MAAM,QAAQ,UAAU,UAAU,IAAI;AACpC,UAAM,MAAM,GAAG,KAAK,OAAO,GAAG,QAAQ;AAEtC,UAAM,UAAU;AAAA,MACd,gBAAgB;AAAA,MAChB,aAAa,KAAK;AAAA,MAClB,gBAAgB,KAAK;AAAA,MACrB,GAAG,QAAQ;AAAA,IAAA;AAGP,UAAA,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC,GAAG;AAAA,MACH;AAAA,IAAA,CACD;AAEG,QAAA,CAAC,SAAS,IAAI;AACV,YAAA,QAAQ,MAAM,SAAS,OAAO,MAAM,OAAO,CAAG,EAAA;AACpD,YAAM,IAAI,MAAM,MAAM,SAAS,QAAQ,SAAS,MAAM,EAAE;AAAA,IAC1D;AAEA,WAAO,SAAS;EAClB;AAAA,EAEA,MAAM,cAAc;AACd,QAAA;AACK,aAAA,MAAM,KAAK,QAAQ,eAAe;AAAA,aAClC,OAAO;AACN,cAAA,MAAM,6BAA6B,KAAK;AACzC,aAAA;AAAA,QACL,UAAU;AAAA,UACR,EAAE,IAAI,KAAK,MAAM,YAAY,WAAW,YAAY,SAAS,OAAO,MAAM,WAAW;AAAA,UACrF,EAAE,IAAI,MAAM,MAAM,OAAO,WAAW,OAAO,SAAS,QAAQ,MAAM,MAAM;AAAA,UACxE,EAAE,IAAI,OAAO,MAAM,WAAW,WAAW,WAAW,SAAS,QAAQ,MAAM,UAAU;AAAA,UACrF,EAAE,IAAI,SAAS,MAAM,YAAY,WAAW,YAAY,SAAS,UAAU,MAAM,WAAW;AAAA,UAC5F,EAAE,IAAI,MAAM,MAAM,YAAY,WAAW,YAAY,SAAS,OAAO,MAAM,WAAW;AAAA,UACtF,EAAE,IAAI,SAAS,MAAM,aAAa,WAAW,aAAa,SAAS,UAAU,MAAM,YAAY;AAAA,QACjG;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF;AAAA,EAEA,MAAM,YAAY;AACZ,QAAA;AACK,aAAA,MAAM,KAAK,QAAQ,2BAA2B;AAAA,aAC9C,OAAO;AACN,cAAA,MAAM,2BAA2B,KAAK;AACvC,aAAA;AAAA,QACL,aAAa;AAAA,UACX;AAAA,YACE,IAAI;AAAA,YAAK,MAAM;AAAA,YAAc,QAAQ;AAAA,YACrC,iBAAiB;AAAA,YACjB,UAAU;AAAA,YAAG,WAAW;AAAA,YACxB,SAAS,EAAE,WAAW,YAAY,MAAM,WAAW;AAAA,UACrD;AAAA,UACA;AAAA,YACE,IAAI;AAAA,YAAK,MAAM;AAAA,YAAY,QAAQ;AAAA,YACnC,iBAAiB;AAAA,YACjB,UAAU;AAAA,YAAG,WAAW;AAAA,YACxB,SAAS,EAAE,WAAW,YAAY,MAAM,WAAW;AAAA,UACrD;AAAA,QACF;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,MAAM;AACjB,WAAA,MAAM,KAAK,QAAQ,wBAAwB;AAAA,MAChD,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU,IAAI;AAAA,IAAA,CAC1B;AAAA,EACH;AAAA,EAEA,MAAM,gBAAgB,WAAW;AACxB,WAAA,MAAM,KAAK,QAAQ,2BAA2B;AAAA,MACnD,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU,EAAE,WAAW;AAAA,IAAA,CACnC;AAAA,EACH;AAAA,EAEA,MAAM,eAAe,WAAW,iBAAiB,SAAS,eAAe;AAChE,WAAA,MAAM,KAAK,QAAQ,yBAAyB;AAAA,MACjD,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,CACD;AAAA,IAAA,CACF;AAAA,EACH;AACF;AAGA,MAAM,oBAAoB;AAE1B,MAAM,SAAS;AAAA,EACb,MAAM;AAAA,EACN,MAAM;AAAA,EACN,UAAU;AAAA,EACV,KAAK;AAAA,EACL,SAAS;AAAA,EACT,UAAU;AAAA,EACV,UAAU;AAAA,EACV,WAAW;AACb;AAEA,MAAM,gBAAgB,CAAC,WAAW;AAC5B,MAAA,CAAC,OAAe,QAAA;AACpB,QAAM,WAAW,OAAO,OAAO,YAAa,CAAA;AAC5C,MAAI,UAAU;AACL,WAAA,GAAG,iBAAiB,IAAI,QAAQ;AAAA,EACzC;AACO,SAAA;AACT;AAEA,MAAM,eAAe;AAAA,EACnB,UAAU;AAAA,EACV,KAAK;AAAA,EACL,SAAS;AAAA,EACT,UAAU;AAAA,EACV,UAAU;AAAA,EACV,WAAW;AACb;AAGA,MAAM,iBAAiB,CAAC;AAAA,EACtB,UAAU,CAAC;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AACb,MAAM;AACJ,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,KAAK;AAC1C,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,EAAE;AAC/C,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAAS,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,KAAK,WAAW,IAAK,CAAA;AAClG,QAAA,cAAc,OAAO,IAAI;AACzB,QAAA,YAAY,OAAO,IAAI;AAEvB,QAAA,kBAAkB,QAAQ,OAAO,CAAU,WAAA;AAC/C,UAAM,iBAAiB,oBAAoB,kBAAkB,MAAM,IAAI;AACvE,WAAO,eAAe,YAAY,EAAE,SAAS,WAAW,aAAa;AAAA,EAAA,CACtE;AAED,QAAM,iBAAiB,QAAQ,KAAK,YAAU,eAAe,MAAM,MAAM,KAAK;AAE9E,QAAM,yBAAyB,MAAM;AACnC,QAAI,UAAU,SAAS;AACrB,YAAM,gBAAgB,OAAO;AAC7B,YAAM,iBAAiB,OAAO;AAC9B,YAAM,YAAY,OAAO,eAAe,SAAS,gBAAgB;AACjE,YAAM,aAAa,OAAO,eAAe,SAAS,gBAAgB;AAElE,YAAM,gBAAgB,KAAK,IAAI,KAAK,gBAAgB,EAAE;AACtD,YAAM,iBAAiB,KAAK,IAAI,KAAK,iBAAiB,GAAG;AAEzD,YAAM,UAAU,gBAAgB;AAChC,YAAM,UAAU,iBAAiB;AAE3B,YAAA,OAAO,UAAW,gBAAgB;AAClC,YAAA,MAAM,UAAW,iBAAiB;AAEpB,0BAAA;AAAA,QAClB,KAAK,MAAM;AAAA,QACX,MAAM,OAAO;AAAA,QACb,OAAO;AAAA,QACP,WAAW;AAAA,MAAA,CACZ;AAAA,IACH;AAAA,EAAA;AAGF,YAAU,MAAM;AACR,UAAA,qBAAqB,CAAC,UAAU;AACpC,UAAI,YAAY,WAAW,CAAC,YAAY,QAAQ,SAAS,MAAM,MAAM,KACjE,UAAU,WAAW,CAAC,UAAU,QAAQ,SAAS,MAAM,MAAM,GAAG;AAClE,kBAAU,KAAK;AACf,sBAAc,EAAE;AAAA,MAClB;AAAA,IAAA;AAGF,UAAM,eAAe,MAAM;AACzB,UAAI,QAAQ;AACa;MACzB;AAAA,IAAA;AAGF,UAAM,eAAe,MAAM;AACzB,UAAI,QAAQ;AACa;MACzB;AAAA,IAAA;AAGF,QAAI,QAAQ;AACa;AACd,eAAA,iBAAiB,aAAa,kBAAkB;AAClD,aAAA,iBAAiB,UAAU,cAAc,IAAI;AAC7C,aAAA,iBAAiB,UAAU,YAAY;AAAA,IAChD;AAEA,WAAO,MAAM;AACF,eAAA,oBAAoB,aAAa,kBAAkB;AACrD,aAAA,oBAAoB,UAAU,cAAc,IAAI;AAChD,aAAA,oBAAoB,UAAU,YAAY;AAAA,IAAA;AAAA,EACnD,GACC,CAAC,MAAM,CAAC;AAEX,QAAM,eAAe,MAAM;AACzB,QAAI,CAAC,UAAU;AACb,UAAI,CAAC,QAAQ;AACY;MACzB;AACA,gBAAU,CAAC,MAAM;AAAA,IACnB;AAAA,EAAA;AAGI,QAAA,kBAAkB,UAEpBK,kCAAA,KAAAC,kBAAA,UAAA,EAAA,UAAA;AAAA,IAAAN,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,QAAQ,OAAO;AAAA,QACxB,SAAS,MAAM;AACb,oBAAU,KAAK;AACf,wBAAc,EAAE;AAAA,QAClB;AAAA,MAAA;AAAA,IACF;AAAA,IAEAK,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAK;AAAA,QACL,WAAU;AAAA,QACV,OAAO;AAAA,UACL,KAAK,iBAAiB;AAAA,UACtB,MAAM,iBAAiB;AAAA,UACvB,OAAO,iBAAiB;AAAA,UACxB,WAAW,iBAAiB;AAAA,UAC5B,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,WAAW;AAAA,QACb;AAAA,QAEA,UAAA;AAAA,UAACA,kCAAAA,KAAA,OAAA,EAAI,WAAU,kHACb,UAAA;AAAA,YAACL,kCAAAA,IAAA,MAAA,EAAG,WAAU,wCAAuC,OAAO,EAAE,YAAY,kCAAA,GACvE,UAAA,eAAe,gBAClB,CAAA;AAAA,YACAA,kCAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAAS,MAAM;AACb,4BAAU,KAAK;AACf,gCAAc,EAAE;AAAA,gBAClB;AAAA,gBACA,WAAU;AAAA,gBAEV,UAAAA,kCAAAA,IAAC,SAAI,OAAM,8BAA6B,WAAU,WAAU,MAAK,QAAO,SAAQ,aAAY,QAAO,gBACjG,UAACA,kCAAA,IAAA,QAAA,EAAK,eAAc,SAAQ,gBAAe,SAAQ,aAAa,GAAG,GAAE,uBAAA,CAAuB,EAC9F,CAAA;AAAA,cAAA;AAAA,YACF;AAAA,UAAA,GACF;AAAA,UAEAA,kCAAAA,IAAC,OAAI,EAAA,WAAU,2CACb,UAAAA,kCAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,aAAY;AAAA,cACZ,OAAO;AAAA,cACP,UAAU,CAAC,MAAM,cAAc,EAAE,OAAO,KAAK;AAAA,cAC7C,WAAU;AAAA,cACV,OAAO,EAAE,YAAY,kCAAkC;AAAA,cACvD,WAAS;AAAA,YAAA;AAAA,UAAA,GAEb;AAAA,UAEAA,kCAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO;AAAA,gBACL,WAAW,IAAI,iBAAiB,aAAa,OAAO,GAAG;AAAA,gBACvD,WAAW;AAAA,cACb;AAAA,cAEC,UAAA,gBAAgB,WAAW,IACzBK,kCAAAA,KAAA,OAAA,EAAI,WAAU,iCAAgC,OAAO,EAAE,YAAY,kCAAA,GAClE,UAAA;AAAA,gBAACL,kCAAA,IAAA,OAAA,EAAI,WAAU,iBAAgB,UAAE,MAAA;AAAA,gBAChCA,kCAAA,IAAA,OAAA,EAAI,WAAU,gBAAe,UAAgB,oBAAA;AAAA,gBAC7CA,kCAAA,IAAA,OAAA,EAAI,WAAU,yBAAwB,UAA2B,+BAAA;AAAA,cAAA,EAAA,CACpE,IAGEK,kCAAAA,KAAAC,kBAAA,UAAA,EAAA,UAAA;AAAA,gBAAAD,uCAAC,SAAI,WAAU,uEAAsE,OAAO,EAAE,YAAY,kCACxG,GAAA,UAAA;AAAA,kBAAAL,kCAAA,IAAC,QAAK,EAAA,WAAU,iBAAiB,UAAA,gBAAgB,QAAO;AAAA,kBAAO;AAAA,kBAAQ,gBAAgB,WAAW,IAAI,MAAM;AAAA,kBAAG;AAAA,gBAAA,GACjH;AAAA,sDAEC,OAAI,EAAA,WAAU,OACZ,UAAgB,gBAAA,IAAI,CAAC,WACpBA,kCAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBAEC,MAAK;AAAA,oBACL,SAAS,MAAM;AACJ,+BAAA,eAAe,MAAM,CAAC;AAC/B,gCAAU,KAAK;AACf,oCAAc,EAAE;AAAA,oBAClB;AAAA,oBACA,WAAW,oGAAoG,eAAe,MAAM,MAAM,QACpI,gEACA,qEACJ;AAAA,oBACF,OAAO,EAAE,YAAY,kCAAkC;AAAA,oBAEtD,uBAAa,MAAM;AAAA,kBAAA;AAAA,kBAbf,aAAa,MAAM;AAAA,gBAe3B,CAAA,GACH;AAAA,cAAA,GACF;AAAA,YAAA;AAAA,UAEJ;AAAA,gDAEC,OAAI,EAAA,WAAU,sFACb,UAACA,kCAAAA,IAAA,OAAA,EAAI,WAAU,yBAAwB,OAAO,EAAE,YAAY,qCACzD,UAAA,gBAAgB,SAAS,IAAI,kCAAkC,iCAClE,CAAA,GACF;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EACF,EAAA,CAAA;AAGF,SAEIK,kCAAA,KAAAC,4BAAA,EAAA,UAAA;AAAA,IAACN,kCAAAA,IAAA,OAAA,EAAI,WAAU,YACb,UAAAA,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAK;AAAA,QACL,MAAK;AAAA,QACL,SAAS;AAAA,QACT;AAAA,QACA,WAAW,kOAAkO,WAAW,kCAAkC,0CACxR,IAAI,SAAS,8CAA8C,iBAAiB;AAAA,QAC9E,OAAO;AAAA,UACL,WAAW;AAAA,UACX,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,YAAY;AAAA,QACd;AAAA,QAEA,UAAAK,kCAAA,KAAC,OAAI,EAAA,WAAU,qCACb,UAAA;AAAA,UAAAL,kCAAA,IAAC,OAAI,EAAA,WAAU,+BACZ,UAAA,iBAAiB,aAAa,cAAc,IAC3CA,kCAAA,IAAC,QAAK,EAAA,WAAU,iBAAiB,UAAA,YAAY,CAAA,GAEjD;AAAA,UACCA,kCAAA,IAAA,OAAA,EAAI,WAAW,+CAA+C,SAAS,eAAe,EAAE,IACvF,UAACA,kCAAAA,IAAA,OAAA,EAAI,OAAM,8BAA6B,WAAU,0BAAyB,MAAK,QAAO,SAAQ,aAAY,QAAO,gBAChH,UAAAA,sCAAC,UAAK,eAAc,SAAQ,gBAAe,SAAQ,aAAa,GAAG,GAAE,iBAAiB,CAAA,EACxF,CAAA,GACF;AAAA,QAAA,GACF;AAAA,MAAA;AAAA,IAAA,GAEJ;AAAA,IAEC,OAAO,aAAa,eAAe,SAAS,QAC3C,SAAS,aAAa,iBAAiB,SAAS,IAAI;AAAA,IAGtDA,kCAAAA,IAAC,SAAM,EAAA,KAAG,MAAE,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAwBV;AAAA,EACJ,EAAA,CAAA;AAEJ;AAGA,MAAM,uBAAuB,CAAC;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;;AACJ,QAAM,EAAE,kBAAkB,aAAa,SAAS,YAAY,MAAA,IAAU;AAEtE,QAAM,uBAAuB,MAAM;AAC7B,QAAA,CAAC,gBAAiB,QAAO;AAG7B,UAAM,cAAc,CAAC,YAAY,OAAO,WAAW,YAAY,YAAY,WAAW;AACtF,QAAI,YAAY,SAAS,gBAAgB,SAAS,GAAG;AAC5C,aAAA;AAAA,IACT;AAEA,WAAO;EAAC;AAGV,QAAM,oBAAoB;AAEpB,QAAA,qBAAqB,CAAC,WAAW;AAEnC,WAAAK,kCAAA,KAAC,OAAI,EAAA,WAAU,+BACb,UAAA;AAAA,MAAAL,kCAAA,IAAC,OAAI,EAAA,WAAU,YAAY,UAAA,OAAO,MAAK;AAAA,MACvCK,kCAAAA,KAAC,OAAI,EAAA,WAAU,UACb,UAAA;AAAA,QAACA,kCAAAA,KAAA,OAAA,EAAI,WAAU,iDACZ,UAAA;AAAA,UAAO,OAAA;AAAA,UACP,eAAe,eAAe,OAAO,8CACnC,QAAK,EAAA,WAAU,mEAAkE,UAElF,YAAA,CAAA;AAAA,QAAA,GAEJ;AAAA,QACAL,kCAAAA,IAAC,SAAI,WAAU,yBACZ,yBAAe,eAAe,OAAO,OAClC,eAAe,mCAAS,MAAM,GAAG,EAAE,MAAM,mCAAS,MAAM,GAAG,KAC3D,OAAO,YAEb,CAAA;AAAA,MAAA,GACF;AAAA,MACC,WACCA,kCAAAA,IAAC,OAAI,EAAA,WAAU,gEAAgE,CAAA;AAAA,IAEnF,EAAA,CAAA;AAAA,EAAA;AAIE,QAAA,wBAAwB,OAAOO,gBAAe;AAClD,mBAAeA,WAAU;AACzB,UAAM,UAAUA,WAAU;AAAA,EAAA;AAG5B,MAAI,CAAC,iBAAiB;AAElB,WAAAP,kCAAAA,IAAC,SAAI,WAAU,mBACb,gDAAC,KAAE,EAAA,WAAU,iBAAgB,UAAA,gCAA6B,CAAA,EAC5D,CAAA;AAAA,EAEJ;AAEI,MAAA,kBAAkB,WAAW,GAAG;AAEhC,WAAAK,kCAAA,KAAC,OAAI,EAAA,WAAU,mBACb,UAAA;AAAA,MAACA,kCAAAA,KAAA,KAAA,EAAE,WAAU,sBAAqB,UAAA;AAAA,QAAA;AAAA,QAAiC,gBAAgB;AAAA,MAAA,GAAK;AAAA,MACvFL,kCAAA,IAAA,OAAA,EAAI,WAAU,sDACb,UAACK,kCAAAA,KAAA,OAAA,EAAI,WAAU,0BAAyB,OAAO,EAAE,YAAY,kCAC3D,GAAA,UAAA;AAAA,QAACL,kCAAA,IAAA,OAAA,EAAI,WAAU,oBAAmB,UAA4B,gCAAA;AAAA,QAC9DK,kCAAAA,KAAC,OAAI,EAAA,WAAU,qBACb,UAAA;AAAA,UAAAA,uCAAC,OAAI,EAAA,UAAA;AAAA,YAAA;AAAA,YAAEL,kCAAAA,IAAC,KAAE,EAAA,MAAK,uBAAsB,QAAO,UAAS,KAAI,uBAAsB,WAAU,iDAAgD,UAAgB,mBAAA,CAAA;AAAA,UAAA,GAAI;AAAA,iDAC5J,OAAI,EAAA,UAAA;AAAA,YAAA;AAAA,YAAEA,kCAAAA,IAAC,KAAE,EAAA,MAAK,oBAAmB,QAAO,UAAS,KAAI,uBAAsB,WAAU,iDAAgD,UAAoB,uBAAA,CAAA;AAAA,UAAA,GAAI;AAAA,iDAC7J,OAAI,EAAA,UAAA;AAAA,YAAA;AAAA,YAAEA,kCAAAA,IAAC,KAAE,EAAA,MAAK,gCAA+B,QAAO,UAAS,KAAI,uBAAsB,WAAU,iDAAgD,UAAuB,0BAAA,CAAA;AAAA,UAAA,GAAI;AAAA,QAAA,GAC/K;AAAA,MAAA,EAAA,CACF,EACF,CAAA;AAAA,IACF,EAAA,CAAA;AAAA,EAEJ;AAGE,SAAAK,kCAAA,KAAC,OAAI,EAAA,WAAU,aACb,UAAA;AAAA,IAAAA,uCAAC,WAAM,WAAU,2CAA0C,OAAO,EAAE,YAAY,kCAAqC,GAAA,UAAA;AAAA,MAAA;AAAA,MAChG,gBAAgB;AAAA,IAAA,GACrC;AAAA,IAEAL,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,OAAO,cAAc;AAAA,QACrB,UAAU;AAAA,QACV,aAAY;AAAA,QACZ,cAAc;AAAA,QACd,cAAc,CAAC,WAAW,OAAO;AAAA,QACjC,gBAAgB,CAAC,WAAW,OAAO;AAAA,QACnC,mBAAmB,CAAC,WAAW,GAAG,OAAO,IAAI,IAAI,OAAO,WAAW;AAAA,QACnE,UAAU;AAAA,MAAA;AAAA,IACZ;AAAA,IAEC,eACCA,kCAAA,IAAC,OAAI,EAAA,WAAU,sDACb,UAAAK,kCAAA,KAAC,OAAI,EAAA,WAAU,sCAAqC,OAAO,EAAE,YAAY,kCACvE,GAAA,UAAA;AAAA,MAACL,kCAAA,IAAA,OAAA,EAAI,WAAU,eAAc,UAAgB,oBAAA;AAAA,MAC7CK,kCAAAA,KAAC,OAAI,EAAA,WAAU,2DACb,UAAA;AAAA,QAACL,kCAAAA,IAAA,QAAA,EAAK,WAAU,YACb,WAAkB,uBAAA,KAAK,OAAK,EAAE,SAAS,UAAU,MAA/B,mBAAkC,KACvD,CAAA;AAAA,+CACC,QACE,EAAA,UAAA;AAAA,UAAS,mCAAA,MAAM,GAAG;AAAA,UAAG;AAAA,UAAI,mCAAS,MAAM;AAAA,UAAI;AAAA,WAC3C,uBAAkB,KAAK,CAAA,MAAK,EAAE,SAAS,UAAU,MAAjD,mBAAoD;AAAA,UAAK;AAAA,QAAA,GAC7D;AAAA,MAAA,GACF;AAAA,IAAA,EAAA,CACF,EACF,CAAA;AAAA,IAGD,SACCA,kCAAAA,IAAC,OAAI,EAAA,WAAU,kDACb,UAACA,kCAAA,IAAA,OAAA,EAAI,WAAU,wBAAuB,OAAO,EAAE,YAAY,kCAAkC,GAC1F,gBACH,CAAA,GACF;AAAA,EAEJ,EAAA,CAAA;AAEJ;AAGA,MAAM,wBAAwB,CAAC;AAAA,EAC7B;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,kBAAkB;AAAA,EAClB,wBAAwB;AAAA,EACxB,eAAe;AAAA,EACf,UAAU;AACZ,MAAM;AACJ,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,KAAK;AAClD,QAAM,CAAC,oBAAoB,qBAAqB,IAAI,SAAS,CAAC;AAE9D,YAAU,MAAM;AACd,QAAI,WAAW,cAAc;AACrB,YAAA,WAAW,YAAY,MAAM;AACjC,8BAAsB,CAAQ,SAAA;AACxB,cAAA,QAAQ,GAAW,QAAA;AAChB,iBAAA,OAAO,KAAK,OAAA,IAAW;AAAA,QAAA,CAC/B;AAAA,SACA,GAAG;AAEC,aAAA,MAAM,cAAc,QAAQ;AAAA,IACrC;AAAA,EAAA,GACC,CAAC,MAAM,CAAC;AAEX,QAAM,sBAAsB,YAAY;AACtC,QAAI,iBAAiB;AACf,UAAA;AACI,cAAA,UAAU,UAAU,UAAU,eAAe;AACnD,sBAAc,IAAI;AAClB,mBAAW,MAAM,cAAc,KAAK,GAAG,GAAI;AAAA,eACpC,KAAK;AACJ,gBAAA,MAAM,oCAAoC,GAAG;AAAA,MACvD;AAAA,IACF;AAAA,EAAA;AAGI,QAAA,wBAAwB,CAAC,SAAS;AAClC,QAAA,CAAC,KAAa,QAAA;AACd,QAAA,KAAK,UAAU,GAAW,QAAA;AACvB,WAAA,GAAG,KAAK,MAAM,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;AAAA,EAAA;AAGhD,QAAM,aAAa,MAAM;AACvB,YAAQ,QAAQ;AAAA,MACd,KAAK;AAED,eAAAK,kCAAA,KAAC,OAAI,EAAA,WAAU,YACb,UAAA;AAAA,UAACL,kCAAAA,IAAA,OAAA,EAAI,WAAU,qFAAqF,CAAA;AAAA,UACpGA,kCAAAA,IAAC,SAAI,WAAU,qDACb,gDAAC,OAAI,EAAA,WAAU,mDAAkD,EACnE,CAAA;AAAA,QACF,EAAA,CAAA;AAAA,MAEJ,KAAK;AAED,eAAAA,kCAAAA,IAAC,OAAI,EAAA,WAAU,uFACb,UAAAA,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAM;AAAA,YACN,WAAU;AAAA,YACV,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,QAAO;AAAA,YACP,aAAa;AAAA,YAEb,gDAAC,QAAK,EAAA,eAAc,SAAQ,gBAAe,SAAQ,GAAE,kBAAiB;AAAA,UAAA;AAAA,QAE1E,EAAA,CAAA;AAAA,MAEJ,KAAK;AAED,eAAAA,kCAAAA,IAAC,OAAI,EAAA,WAAU,sEACb,UAAAA,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAM;AAAA,YACN,WAAU;AAAA,YACV,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,QAAO;AAAA,YACP,aAAa;AAAA,YAEb,gDAAC,QAAK,EAAA,eAAc,SAAQ,gBAAe,SAAQ,GAAE,wBAAuB;AAAA,UAAA;AAAA,QAEhF,EAAA,CAAA;AAAA,MAEJ;AACS,eAAA;AAAA,IACX;AAAA,EAAA;AAGF,MAAI,WAAW,cAAc;AAEzB,WAAAK,kCAAA,KAAC,OAAI,EAAA,WAAU,uDACb,UAAA;AAAA,MAAAL,kCAAA,IAAC,OAAI,EAAA,WAAU,QAAQ,UAAA,WAAA,GAAa;AAAA,MAEpCA,kCAAAA,IAAC,QAAG,WAAU,wCAAuC,OAAO,EAAE,YAAY,kCAAkC,GAAG,UAE/G,qBAAA,CAAA;AAAA,MAEAA,kCAAAA,IAAC,OAAE,WAAU,kCAAiC,OAAO,EAAE,YAAY,kCAAkC,GAAG,UAExG,6EAAA,CAAA;AAAA,MAEAK,kCAAAA,KAAC,OAAI,EAAA,WAAU,wBACb,UAAA;AAAA,QAACL,kCAAAA,IAAA,OAAA,EAAI,WAAU,gCACb,UAAAA,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,OAAO,GAAG,kBAAkB,IAAI;AAAA,UAAA;AAAA,QAAA,GAE7C;AAAA,QACAK,uCAAC,SAAI,WAAU,0CAAyC,OAAO,EAAE,YAAY,kCAAqC,GAAA,UAAA;AAAA,UAAA;AAAA,UACjG,KAAK,MAAM,kBAAkB;AAAA,UAAE;AAAA,QAAA,GAChD;AAAA,MAAA,GACF;AAAA,4CAEC,OAAI,EAAA,WAAU,yBACb,UAACA,kCAAA,KAAA,OAAA,EAAI,WAAU,8CACb,UAAA;AAAA,QAACL,kCAAAA,IAAA,OAAA,EAAI,WAAU,mCAAmC,CAAA;AAAA,QACjDA,kCAAA,IAAA,QAAA,EAAK,WAAU,yBAAwB,UAAqB,yBAAA;AAAA,MAAA,EAAA,CAC/D,EACF,CAAA;AAAA,MAEAA,kCAAAA,IAAC,SAAI,WAAU,yDACb,gDAAC,KAAE,EAAA,WAAU,qCAAoC,UAAA,oEAAA,CAEjD,EACF,CAAA;AAAA,IACF,EAAA,CAAA;AAAA,EAEJ;AAEA,MAAI,WAAW,WAAW;AAEtB,WAAAK,kCAAA,KAAC,OAAI,EAAA,WAAU,uDACb,UAAA;AAAA,MAAAL,kCAAA,IAAC,OAAI,EAAA,WAAU,QAAQ,UAAA,WAAA,GAAa;AAAA,MAEpCA,kCAAAA,IAAC,QAAG,WAAU,yCAAwC,OAAO,EAAE,YAAY,kCAAkC,GAAG,UAEhH,sBAAA,CAAA;AAAA,MAEC,WAAW,yBACVK,uCAAC,KAAE,EAAA,WAAU,gDAA+C,OAAO,EAAE,YAAY,kCAAA,GAAqC,UAAA;AAAA,QAAA;AAAA,QACpGA,kCAAAA,KAAC,QAAK,EAAA,WAAU,gCAAgC,UAAA;AAAA,UAAA,QAAQ,eAAe,QAAQ;AAAA,UAAO;AAAA,UAAE,sBAAsB;AAAA,QAAA,GAAS;AAAA,QAAO;AAAA,MAAA,GAChJ;AAAA,MAGD,mBACCA,kCAAA,KAAC,OAAI,EAAA,WAAU,oBACb,UAAA;AAAA,QAACL,kCAAAA,IAAA,KAAA,EAAE,WAAU,0CAAyC,OAAO,EAAE,YAAY,kCAAA,GAAqC,UAEhH,mBAAA,CAAA;AAAA,QACAK,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,SAAS;AAAA,YAET,UAAA;AAAA,cAAAL,sCAAC,QAAK,EAAA,WAAU,mCACb,UAAA,sBAAsB,eAAe,GACxC;AAAA,cACAK,kCAAAA,KAAC,OAAI,EAAA,WAAU,qBACZ,UAAA;AAAA,gBAAA,aACEL,kCAAAA,IAAA,QAAA,EAAK,WAAU,2CAA0C,oBAAO,CAAA,IAC/D;AAAA,gBACJA,kCAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,OAAM;AAAA,oBACN,WAAU;AAAA,oBACV,MAAK;AAAA,oBACL,SAAQ;AAAA,oBACR,QAAO;AAAA,oBAEP,UAAAA,kCAAA,IAAC,UAAK,eAAc,SAAQ,gBAAe,SAAQ,aAAa,GAAG,GAAE,wHAAwH,CAAA;AAAA,kBAAA;AAAA,gBAC/L;AAAA,cAAA,GACF;AAAA,YAAA;AAAA,UAAA;AAAA,QACF;AAAA,MAAA,GACF;AAAA,MAGD,WACCA,kCAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,WAAU;AAAA,UACV,OAAO,EAAE,YAAY,kCAAkC;AAAA,UACxD,UAAA;AAAA,QAAA;AAAA,MAED;AAAA,IAEJ,EAAA,CAAA;AAAA,EAEJ;AAGE,SAAAK,kCAAA,KAAC,OAAI,EAAA,WAAU,kDACb,UAAA;AAAA,IAAAL,kCAAA,IAAC,OAAI,EAAA,WAAU,QAAQ,UAAA,WAAA,GAAa;AAAA,IACpCA,kCAAAA,IAAC,MAAG,EAAA,WAAU,wCACX,UAAA,WAAW,eAAe,uBAAuB,WAAW,UAAU,mBAAmB,iBAC5F,CAAA;AAAA,IACCA,kCAAA,IAAA,KAAA,EAAE,WAAU,6BAA6B,UAAQ,SAAA;AAAA,EACpD,EAAA,CAAA;AAEJ;AAGA,MAAM,mBAAmB,CAAC;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,WAAW;AACb,MAAM;AACJ,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,gBAAgB,UAAU;AACrE,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,gBAAgB,UAAU;AAE3E,YAAU,MAAM;AACd,QAAI,gBAAgB,YAAY;AAC9B,sBAAgB,IAAI;AACpB,iBAAW,MAAM,aAAa,IAAI,GAAG,EAAE;AAAA,IAAA,OAClC;AACL,mBAAa,KAAK;AAClB,iBAAW,MAAM,gBAAgB,KAAK,GAAG,QAAQ;AAAA,IACnD;AAAA,EACC,GAAA,CAAC,aAAa,YAAY,QAAQ,CAAC;AAElC,MAAA,CAAC,aAAqB,QAAA;AAGxB,SAAAA,kCAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA;AAAA,UAEP,YACE,wCACA,sCACJ;AAAA,UACE,SAAS;AAAA;AAAA,MAEb,OAAO;AAAA,QACL,oBAAoB,GAAG,QAAQ;AAAA,MACjC;AAAA,MAEC;AAAA,IAAA;AAAA,EAAA;AAGP;AAGA,MAAM,+BAA+B,CAAC;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AACV,MAAM;AACJ,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,QAAQ;AACvD,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,CAAE,CAAA;AAC3C,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,CAAE,CAAA;AACvC,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAS,IAAI;AAC3D,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,IAAI;AACvD,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,IAAI;AACnD,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,EAAE;AACrC,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,KAAK;AAClD,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,QAAQ;AACvD,QAAM,CAAC,uBAAuB,wBAAwB,IAAI,SAAS,IAAI;AAEvE,QAAM,MAAM,OAAO,IAAIQ,mBAAiB,QAAQ,QAAQ,SAAS,CAAC;AAC5D,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACE,UAAU;AAEd,YAAU,MAAM;AACd,QAAI,QAAQ;AACD;AACE;IACb;AAAA,EAAA,GACC,CAAC,MAAM,CAAC;AAEX,QAAM,aAAa,MAAM;AACvB,mBAAe,QAAQ;AACvB,uBAAmB,IAAI;AACvB,qBAAiB,IAAI;AACrB,mBAAe,IAAI;AACnB,aAAS,EAAE;AACX,kBAAc,KAAK;AACnB,6BAAyB,IAAI;AAC7B,mBAAe,QAAQ;AACZ;AACA;EAAA;AAGb,QAAM,WAAW,YAAY;;AACvB,QAAA;AACF,iBAAW,IAAI;AACf,eAAS,EAAE;AAEX,cAAQ,IAAI,gCAAgC;AAC5C,YAAM,CAAC,aAAa,SAAS,IAAI,MAAM,QAAQ,IAAI;AAAA,QACjD,IAAI,QAAQ,YAAY;AAAA,QACxB,IAAI,QAAQ,UAAU;AAAA,MAAA,CACvB;AAGK,YAAA,mBAAiB,eAAU,gBAAV,mBAAuB;AAAA,QAAO,CAAA,UACnD,CAAC,QAAQ,MAAM,EAAE,SAAS,MAAM,OAAO,aAAa;AAAA,YACjD;AAEO,kBAAA,YAAY,YAAY,CAAA,CAAE;AACtC,gBAAU,cAAc;AAExB,cAAQ,IAAI,sBAAoB,iBAAY,aAAZ,mBAAsB,WAAU,CAAC;AACzD,cAAA,IAAI,4CAA4C,eAAe,MAAM;AAAA,aAEtE,KAAK;AACJ,cAAA,MAAM,wBAAwB,GAAG;AACzC,eAAS,sDAAsD;AAAA,IAAA,UAC/D;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EAAA;AAGF,QAAM,gBAAgB,YAAY;AAC5B,QAAA;AACF,iBAAW,IAAI;AACf,eAAS,EAAE;AAEX,YAAM,iBAAiB;AAAA,QACrB,QAAQ,OAAO;AAAA,QACf,UAAU,cAAc;AAAA,QACxB,SAAS,gBAAgB;AAAA,QACzB,eAAe,OAAO;AAAA,QACtB,aAAa,OAAO;AAAA,QACpB,UAAU;AAAA,UACR,GAAG,OAAO;AAAA,UACV,yBAAyB,OAAO;AAAA,UAChC,iBAAiB,gBAAgB;AAAA,UACjC,eAAe,cAAc;AAAA,UAC7B,kBAAkB;AAAA,QACpB;AAAA,MAAA;AAGM,cAAA,IAAI,qBAAqB,cAAc;AAC/C,YAAM,UAAU,MAAM,IAAI,QAAQ,cAAc,cAAc;AAC9D,qBAAe,QAAQ,OAAO;AAE9B,cAAQ,IAAI,oBAAoB,QAAQ,QAAQ,EAAE;AAClD,qBAAe,SAAS;AAAA,aAEjB,KAAK;AACJ,cAAA,MAAM,4BAA4B,GAAG;AAC7C,eAAS,IAAI,OAAO;AAAA,IAAA,UACpB;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EAAA;AAGI,QAAA,sBAAsB,OAAOD,gBAAe;AAC5C,QAAA;AACF,iBAAW,IAAI;AACf,eAAS,EAAE;AAEX,YAAM,QAAQA,WAAU;AAGlB,YAAA,gBAAgB,iBAAiB,gBAAgB,SAAS;AAC5D,UAAA,iBAAiB,YAAY,cAAc,SAAS;AACtD,cAAM,cAAc,aAAa;AAAA,MACnC;AAAA,aAEO,KAAK;AACJ,cAAA,MAAM,6BAA6B,GAAG;AAC9C,eAAS,IAAI,OAAO;AAAA,IAAA,UACpB;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EAAA;AAGF,QAAM,wBAAwB,YAAY;;AACxC,QAAI,CAAC,aAAa;AAChB,eAAS,qBAAqB;AAC9B;AAAA,IACF;AAEI,QAAA;AACF,oBAAc,IAAI;AAClB,eAAS,EAAE;AAEX,YAAM,qBAAmB,iBAAY,aAAZ,mBAAsB,sBAC7C,YAAO,4BAAP,mBAAiC,gBAAgB;AAEnD,UAAI,CAAC,kBAAkB;AACf,cAAA,IAAI,MAAM,mCAAmC;AAAA,MACrD;AAEQ,cAAA,IAAI,6BAA6B,gBAAgB;AAErD,UAAA;AACJ,YAAM,cAAc,eAAe,gBAAgB,WAAW,cAAc,MAAM;AAE9E,UAAA,eAAe,YAAY,iBAAiB;AAExC,cAAA,WAAW,YAAY,YAAY;AACnC,cAAA,SAAS,KAAK,MAAM,YAAY,cAAc,KAAK,IAAI,IAAI,QAAQ,CAAC;AAE1E,cAAM,WAAW;AACX,cAAA,kBAAkB,iBAAiB,MAAM,CAAC,EAAE,YAAY,EAAE,SAAS,IAAI,GAAG;AAChF,cAAM,eAAe,OAAO,SAAS,EAAE,EAAE,SAAS,IAAI,GAAG;AACzD,cAAM,OAAO,GAAG,QAAQ,GAAG,eAAe,GAAG,YAAY;AAE9C,mBAAA;AAAA,UACT,IAAI,YAAY;AAAA,UAChB;AAAA,UACA,OAAO;AAAA,QAAA;AAAA,MACT,OAEK;AAEC,cAAA,QAAQ,KAAK,MAAM,YAAY,cAAc,KAAK,IAAI,IAAI,EAAE,CAAC;AACxD,mBAAA;AAAA,UACT,IAAI;AAAA,UACJ,OAAO,KAAK,MAAM,SAAS,EAAE,CAAC;AAAA,QAAA;AAAA,MAElC;AAEA,qBAAe,YAAY;AAErB,YAAA,SAAS,MAAM,gBAAgB,QAAQ;AACrC,cAAA,IAAI,kCAAkC,MAAM;AAEpD,+BAAyB,MAAM;AAG3B,UAAA;AACI,cAAA,gBAAgB,MAAM,IAAI,QAAQ;AAAA,UACtC,YAAY;AAAA,UACZ;AAAA,UACA,gBAAgB;AAAA,UAChB;AAAA,QAAA;AAEM,gBAAA,IAAI,gCAAgC,aAAa;AAAA,eAClD,cAAc;AACb,gBAAA,MAAM,oCAAoC,YAAY;AAAA,MAChE;AAEA,iBAAW,MAAM;AACf,uBAAe,SAAS;AACZ,+CAAA,YAAY,IAAI,QAAQ;AAAA,UAClC,SAAS,gBAAgB;AAAA,UACzB,UAAU,cAAc;AAAA,UACxB,QAAQ,YAAY;AAAA,UACpB,QAAQ;AAAA,UACR;AAAA,UACA,kBAAkB;AAAA,UAClB,qBAAqB;AAAA,QAAA;AAAA,SAEtB,GAAI;AAAA,aAEA,KAAK;AACJ,cAAA,MAAM,uBAAuB,GAAG;AACxC,eAAS,IAAI,OAAO;AACpB,qBAAe,SAAS;AACxB,yCAAU,IAAI;AAAA,IAAO,UACrB;AACA,oBAAc,KAAK;AAAA,IACrB;AAAA,EAAA;AAGF,QAAM,8BAA8B,YAAY;;AAC9C,QAAI,CAAC,aAAa;AAChB,eAAS,gCAAgC;AACzC;AAAA,IACF;AAEA,mBAAe,YAAY;AAC3B,aAAS,IAAI;AAET,QAAA;AACF,cAAQ,IAAI,qCAAqC;AAEjD,YAAM,qBAAqB,MAAM,IAAI,QAAQ,gBAAgB,YAAY,EAAE;AAE3E,UAAI,mBAAmB,UAAU;AACvB,gBAAA,IAAI,qCAAqC,kBAAkB;AAE/D,aAAA,wBAAmB,YAAnB,mBAA4B,iBAAiB;AACtB,mCAAA,mBAAmB,QAAQ,eAAe;AAAA,QACrE;AAEA,uBAAe,SAAS;AAExB,YAAI,WAAW;AACb,oBAAU,YAAY,IAAI,mBAAmB,QAAQ,iBAAiB;AAAA,YACpE,SAAS,gBAAgB;AAAA,YACzB,UAAU,cAAc;AAAA,YACxB,QAAQ,mBAAmB,QAAQ;AAAA,YACnC,kBAAkB;AAAA,UAAA,CACnB;AAAA,QACH;AAAA,MAAA,OACK;AACI,iBAAA,mBAAmB,WAAW,mEAAmE;AAC1G,uBAAe,SAAS;AAAA,MAC1B;AAAA,aACOE,QAAO;AACN,cAAA,MAAM,kCAAkCA,MAAK;AAC/C,YAAA,eAAeA,OAAM,WAAW;AACtC,eAAS,YAAY;AACrB,qBAAe,SAAS;AACpB,UAAA,iBAAiB,YAAY;AAAA,IACnC;AAAA,EAAA;AAGI,QAAA,eAAe,CAAC,WAAW;AAC/B,WAAO,WAAW,MAAM,EAAE,QAAQ,CAAC;AAAA,EAAA;AAGrC,QAAM,6BAA6B,MAAM;;AACnC,QAAA,CAAC,gBAAwB,QAAA;AAC7B,UAAM,kBAAiB,YAAO,4BAAP,mBAAiC,gBAAgB;AACxE,QAAI,eAAuB,QAAA;AACvB,QAAA,2CAAa,gBAAiB,QAAO,YAAY;AAC9C,WAAA;AAAA,EAAA;AAIH,QAAA,sBAAsB,CAAC,YAAY;;AACvC,UAAM,iBAAiB,cAAa,aAAQ,cAAR,mBAAmB,aAAa;AAGlE,WAAAJ,kCAAA,KAAC,OAAI,EAAA,WAAU,+BACZ,UAAA;AAAA,MACC,iBAAAL,kCAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAK;AAAA,UACL,KAAK,QAAQ;AAAA,UACb,WAAU;AAAA,UACV,SAAS,CAAC,MAAM;AACZ,cAAA,OAAO,MAAM,UAAU;AACvB,cAAA,OAAO,YAAY,MAAM,UAAU;AAAA,UACvC;AAAA,QAAA;AAAA,MAAA,IAEA;AAAA,MACJA,kCAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO,EAAE,SAAS,iBAAiB,SAAS,OAAO;AAAA,UAEnD,UAAAA,kCAAAA,IAAC,QAAK,EAAA,WAAU,mCAAmC,WAAA,aAAQ,cAAR,mBAAmB,MAAM,GAAG,GAAG,cAAc,CAAA;AAAA,QAAA;AAAA,MAClG;AAAA,6CACC,OACC,EAAA,UAAA;AAAA,QAAAA,kCAAA,IAAC,OAAI,EAAA,WAAU,+BAA+B,UAAA,QAAQ,MAAK;AAAA,8CAC1D,OAAI,EAAA,WAAU,yBAAyB,WAAQ,aAAA,cAAA,mBAAW,eAAc;AAAA,MAAA,GAC3E;AAAA,IACF,EAAA,CAAA;AAAA,EAAA;AAIE,QAAA,oBAAoB,CAAC,UAAU;;AAC7B,UAAA,eAAe,cAAc,MAAM,MAAM;AAG7C,WAAAK,kCAAA,KAAC,OAAI,EAAA,WAAU,+BACZ,UAAA;AAAA,MACC,eAAAL,kCAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAK;AAAA,UACL,KAAK,MAAM;AAAA,UACX,WAAU;AAAA,UACV,SAAS,CAAC,MAAM;AACZ,cAAA,OAAO,MAAM,UAAU;AACvB,cAAA,OAAO,YAAY,MAAM,UAAU;AAAA,UACvC;AAAA,QAAA;AAAA,MAAA,IAEA;AAAA,MACJA,kCAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO,EAAE,SAAS,eAAe,SAAS,OAAO;AAAA,UAEjD,UAAAA,kCAAAA,IAAC,UAAK,WAAU,mCAAmC,sBAAM,8BAAQ,MAAM,GAAG,GAAG,CAAA;AAAA,QAAA;AAAA,MAC/E;AAAA,6CACC,OACC,EAAA,UAAA;AAAA,QAACK,kCAAAA,KAAA,OAAA,EAAI,WAAU,+BAA+B,UAAA;AAAA,UAAM,MAAA;AAAA,UAAK;AAAA,UAAG,MAAM;AAAA,UAAO;AAAA,QAAA,GAAC;AAAA,QAC1EA,kCAAAA,KAAC,OAAI,EAAA,WAAU,yBACZ,UAAA;AAAA,YAAA,WAAM,YAAN,mBAAe,SAAQ;AAAA,UACvBL,kCAAA,IAAA,QAAA,EAAK,WAAU,uBAAsB,UAAY,gBAAA;AAAA,QAAA,GACpD;AAAA,MAAA,GACF;AAAA,IACF,EAAA,CAAA;AAAA,EAAA;AAIA,MAAA,CAAC,OAAe,QAAA;AAGlB,SAAAK,kCAAA,KAAC,OAAI,EAAA,WAAU,sBACb,UAAA;AAAA,IAAAL,sCAAC,SAAI,WAAU,2DAA0D,SAAS,SAAS,eAAY,QAAO;AAAA,IAC9GA,kCAAAA,IAAC,SAAI,WAAU,iCAAgC,OAAO,EAAE,QAAQ,GAC9D,GAAA,UAAAA,kCAAAA,IAAC,SAAI,WAAU,qDACb,iDAAC,OAAI,EAAA,WAAU,2FAA0F,OAAO,EAAE,QAAQ,GAAA,GAGxH,UAAA;AAAA,MAACK,kCAAAA,KAAA,OAAA,EAAI,WAAU,oFACb,UAAA;AAAA,QAACA,kCAAAA,KAAA,OAAA,EAAI,WAAU,uCACb,UAAA;AAAA,UAACL,kCAAAA,IAAA,OAAA,EAAI,WAAU,yDACb,UAAAA,kCAAA,IAAC,SAAI,KAAK,MAAM,KAAI,UAAA,CAAU,EAChC,CAAA;AAAA,UACAA,kCAAAA,IAAC,UAAK,WAAU,uCAAsC,OAAO,EAAE,YAAY,kCAAkC,GAAG,UAAe,kBAAA,CAAA;AAAA,QAAA,GACjI;AAAA,QACC,gBAAgB,aAAa,gBAAgB,gBAC5CA,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,WAAU;AAAA,YAEV,UAAAA,kCAAAA,IAAC,SAAI,OAAM,8BAA6B,WAAU,gBAAe,MAAK,QAAO,SAAQ,aAAY,QAAO,gBACtG,UAACA,kCAAA,IAAA,QAAA,EAAK,eAAc,SAAQ,gBAAe,SAAQ,aAAa,GAAG,GAAE,uBAAA,CAAuB,EAC9F,CAAA;AAAA,UAAA;AAAA,QACF;AAAA,MAAA,GAEJ;AAAA,MAGC,UAAU,gBAAgB,aACxBA,kCAAAA,IAAA,OAAA,EAAI,WAAU,QACb,UAAAK,kCAAA,KAAC,OAAI,EAAA,WAAU,eACb,UAAA;AAAA,QAACL,kCAAA,IAAA,OAAA,EAAI,WAAU,yBAAwB,UAAY,gBAAA;AAAA,QACnDK,uCAAC,SAAI,WAAU,mFAAkF,OAAO,EAAE,YAAY,kCAAqC,GAAA,UAAA;AAAA,UAAA;AAAA,UACvJ,aAAa,OAAO,MAAM;AAAA,QAAA,GAC9B;AAAA,QAECL,kCAAA,IAAA,OAAA,EAAI,WAAU,8BAA6B,UAE5C,sBAAA;AAAA,QAECA,kCAAA,IAAA,OAAA,EAAI,WAAU,8BAA6B,UAAW,eAAA;AAAA,QACvDK,uCAAC,SAAI,WAAU,uEAAsE,OAAO,EAAE,YAAY,kCACxG,GAAA,UAAA;AAAA,UAAAL,sCAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAChE,UAACA,kCAAA,IAAA,QAAA,EAAK,GAAE,0QAAyQ,MAAK,UAAU,CAAA,GAClS;AAAA,UACC,OAAO,gBAAgB;AAAA,QAAA,GAC1B;AAAA,MAAA,EAAA,CACF,EACF,CAAA;AAAA,MAIFK,kCAAAA,KAAC,OAAI,EAAA,WAAU,YAGb,UAAA;AAAA,QAAAL,kCAAAA,IAAC,oBAAiB,aAA0B,YAAW,UACrD,UAACK,kCAAAA,KAAA,OAAA,EAAI,WAAU,yCACb,UAAA;AAAA,UAACL,kCAAAA,IAAA,MAAA,EAAG,WAAU,kCAAiC,OAAO,EAAE,YAAY,kCAAA,GAAqC,UAAqB,wBAAA,CAAA;AAAA,UAG9HK,kCAAAA,KAAC,OAAI,EAAA,WAAU,kBACb,UAAA;AAAA,YAACL,kCAAAA,IAAA,SAAA,EAAM,WAAU,2CAA0C,OAAO,EAAE,YAAY,kCAAA,GAAqC,UAAc,iBAAA,CAAA;AAAA,YACnIA,kCAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAAS;AAAA,gBACT,QAAO,mDAAiB,OAAM;AAAA,gBAC9B,UAAU,CAAC,cAAc;AACvB,wBAAM,UAAU,SAAS,KAAK,CAAKG,OAAAA,GAAE,OAAO,SAAS;AACrD,qCAAmB,OAAO;AAC1B,mCAAiB,IAAI;AACV;gBACb;AAAA,gBACA,aAAY;AAAA,gBACZ,cAAc;AAAA,gBACd,cAAc,CAAC,YAAY,QAAQ;AAAA,gBACnC,gBAAgB,CAAC,YAAY,QAAQ;AAAA,gBACrC,mBAAmB,CAAC,YAAY,GAAG,QAAQ,IAAI,IAAI,QAAQ,SAAS;AAAA,gBACpE,UAAU;AAAA,cAAA;AAAA,YACZ;AAAA,UAAA,GACF;AAAA,UAGC,mBACCE,kCAAA,KAAC,OAAI,EAAA,WAAU,kBACb,UAAA;AAAA,YAACL,kCAAAA,IAAA,SAAA,EAAM,WAAU,2CAA0C,OAAO,EAAE,YAAY,kCAAA,GAAqC,UAAiB,oBAAA,CAAA;AAAA,YACtIA,kCAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAAS,OAAO;AAAA,kBAAO,CAAA,UAAA;;AACrB,wCAAM,YAAN,mBAAe,gBAAc,mDAAiB,cAC9C,MAAM,eAAc,mDAAiB;AAAA;AAAA,gBACvC;AAAA,gBACA,QAAO,+CAAe,OAAM;AAAA,gBAC5B,UAAU,CAAC,YAAY;AACrB,wBAAM,QAAQ,OACX;AAAA,oBAAO,CAAAU;;AACNA,2CAAM,YAANA,mBAAe,gBAAc,mDAAiB,cAC9CA,OAAM,eAAc,mDAAiB;AAAA;AAAA,kBAAA,EAEtC,KAAK,CAAK,MAAA,EAAE,OAAO,OAAO;AAC7B,mCAAiB,KAAK;AAAA,gBACxB;AAAA,gBACA,aAAY;AAAA,gBACZ,cAAc;AAAA,gBACd,cAAc,CAAC,UAAU,MAAM;AAAA,gBAC/B,gBAAgB,CAAC,UAAU,MAAM;AAAA,gBACjC,mBAAmB,CAAC,UAAU,GAAG,MAAM,IAAI,IAAI,MAAM,MAAM;AAAA,gBAC3D,UAAU;AAAA,cAAA;AAAA,YACZ;AAAA,UAAA,GACF;AAAA,UAID,mBAAmB,iBACjBV,kCAAAA,IAAA,OAAA,EAAI,WAAU,kEACb,UAAAK,kCAAA,KAAC,OAAI,EAAA,WAAU,qCACb,UAAA;AAAA,YAACA,kCAAAA,KAAA,OAAA,EAAI,WAAU,+BACZ,UAAA;AAAA,cAAa,aAAA,gBAAgB,SAAS,KACrCL,kCAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,KAAK,aAAa,gBAAgB,SAAS;AAAA,kBAC3C,KAAK,gBAAgB;AAAA,kBACrB,WAAU;AAAA,gBAAA;AAAA,cACZ;AAAA,cAED,cAAc,cAAc,MAAM,KACjCA,kCAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,KAAK,cAAc,cAAc,MAAM;AAAA,kBACvC,KAAK,cAAc;AAAA,kBACnB,WAAU;AAAA,gBAAA;AAAA,cACZ;AAAA,qDAED,OACC,EAAA,UAAA;AAAA,gBAAAK,uCAAC,OAAE,WAAU,wCAAuC,OAAO,EAAE,YAAY,kCACtE,GAAA,UAAA;AAAA,kBAAgB,gBAAA;AAAA,kBAAK;AAAA,kBAAI,cAAc;AAAA,gBAAA,GAC1C;AAAA,gBACAL,kCAAAA,IAAC,KAAE,EAAA,WAAU,6BAA4B,OAAO,EAAE,YAAY,kCAAA,GAAsC,UAAA,cAAc,KAAK,CAAA;AAAA,cAAA,GACzH;AAAA,YAAA,GACF;AAAA,YACAA,kCAAAA,IAAC,UAAK,WAAU,0EAAyE,OAAO,EAAE,YAAY,kCAAkC,GAAG,UAEnJ,aAAA,CAAA;AAAA,UAAA,EAAA,CACF,EACF,CAAA;AAAA,UAGD,mBAAmB,iBAClBA,kCAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT,UAAU;AAAA,cACV,WAAU;AAAA,cACV,OAAO,EAAE,YAAY,kCAAkC;AAAA,cAEtD,UACC,UAAAK,uCAAC,QAAK,EAAA,WAAU,oCACd,UAAA;AAAA,gBAACA,kCAAAA,KAAA,OAAA,EAAI,WAAU,8CAA6C,OAAM,8BAA6B,MAAK,QAAO,SAAQ,aACjH,UAAA;AAAA,kBAAAL,kCAAA,IAAC,UAAO,EAAA,WAAU,cAAa,IAAG,MAAK,IAAG,MAAK,GAAE,MAAK,QAAO,gBAAe,aAAY,KAAI;AAAA,wDAC3F,QAAK,EAAA,WAAU,cAAa,MAAK,gBAAe,GAAE,mHAAkH;AAAA,gBAAA,GACvK;AAAA,gBAAM;AAAA,cAAA,EAAA,CAER,IAEA;AAAA,YAAA;AAAA,UAEJ;AAAA,UAGD,SACCA,kCAAA,IAAC,OAAI,EAAA,WAAU,sDACZ,UACH,OAAA;AAAA,QAAA,EAAA,CAEJ,EACF,CAAA;AAAA,QAGAA,kCAAAA,IAAC,oBAAiB,aAA0B,YAAW,WACpD,UAAmB,mBAAA,iBAAiB,eACnCK,kCAAA,KAAC,OAEC,EAAA,UAAA;AAAA,UAAAL,kCAAAA,IAAC,SAAI,WAAU,aACb,UAACK,kCAAA,KAAA,OAAA,EAAI,WAAU,iCACb,UAAA;AAAA,YAAAL,kCAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAAS,MAAM,eAAe,QAAQ;AAAA,gBACtC,WAAW,+DAA+D,gBAAgB,WACpF,+CACA,mCACJ;AAAA,gBACF,OAAO,EAAE,YAAY,kCAAkC;AAAA,gBACxD,UAAA;AAAA,cAAA;AAAA,YAED;AAAA,YACAA,kCAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAAS,MAAM,eAAe,QAAQ;AAAA,gBACtC,WAAW,+DAA+D,gBAAgB,WACpF,+CACA,mCACJ;AAAA,gBACF,OAAO,EAAE,YAAY,kCAAkC;AAAA,gBACxD,UAAA;AAAA,cAAA;AAAA,YAED;AAAA,UAAA,EAAA,CACF,EACF,CAAA;AAAA,UAGC,gBAAgB,WACdA,sCAAA,OAAA,EAAI,WAAU,QACb,UAAAA,kCAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,eAAe,2BAA2B;AAAA,cAC1C,QAAQ,YAAY,eAAe,YAAY;AAAA,cAC/C,UAAU,cAAc;AAAA,cACxB,SAAS,gBAAgB;AAAA,cACzB;AAAA,cACA,eAAe;AAAA,YAAA;AAAA,UACjB,EAAA,CACF,IAEAK,kCAAAA,KAAC,OAEC,EAAA,UAAA;AAAA,YAACA,kCAAAA,KAAA,OAAA,EAAI,WAAU,iCACb,UAAA;AAAA,cAACL,kCAAAA,IAAA,MAAA,EAAG,WAAU,4CAA2C,OAAO,EAAE,YAAY,kCAAA,GAAqC,UAAe,kBAAA,CAAA;AAAA,cAClIK,uCAAC,SAAI,WAAU,4CAA2C,OAAO,EAAE,YAAY,kCAC7E,GAAA,UAAA;AAAA,gBAACA,kCAAAA,KAAA,OAAA,EAAI,WAAU,wBACb,UAAA;AAAA,kBAACL,kCAAA,IAAA,QAAA,EAAK,WAAU,+BAA8B,UAAS,aAAA;AAAA,kBACvDK,kCAAAA,KAAC,QAAK,EAAA,WAAU,kDACb,UAAA;AAAA,oBAAA,cAAc,cAAc,MAAM,KACjCL,kCAAAA,IAAC,SAAI,KAAK,cAAc,cAAc,MAAM,GAAG,KAAK,cAAc,QAAQ,WAAU,6BAA4B;AAAA,oBAEjH,cAAc;AAAA,kBAAA,GACjB;AAAA,gBAAA,GACF;AAAA,gBACAA,kCAAAA,IAAC,OAAI,EAAA,WAAU,2BAA2B,CAAA;AAAA,gBAC1CK,kCAAAA,KAAC,OAAI,EAAA,WAAU,wBACb,UAAA;AAAA,kBAACL,kCAAA,IAAA,QAAA,EAAK,WAAU,+BAA8B,UAAQ,YAAA;AAAA,kBACtDK,kCAAAA,KAAC,QAAK,EAAA,WAAU,kDACb,UAAA;AAAA,oBAAA,aAAa,gBAAgB,SAAS,KACrCL,kCAAAA,IAAC,SAAI,KAAK,aAAa,gBAAgB,SAAS,GAAG,KAAK,gBAAgB,MAAM,WAAU,6BAA4B;AAAA,oBAErH,gBAAgB;AAAA,kBAAA,GACnB;AAAA,gBAAA,GACF;AAAA,gBACAA,kCAAAA,IAAC,OAAI,EAAA,WAAU,2BAA2B,CAAA;AAAA,gBAC1CK,kCAAAA,KAAC,OAAI,EAAA,WAAU,2DACb,UAAA;AAAA,kBAACL,kCAAA,IAAA,QAAA,EAAK,WAAU,2BAA0B,UAAM,UAAA;AAAA,kBAChDK,kCAAAA,KAAC,QAAK,EAAA,WAAU,oCAAmC,UAAA;AAAA,oBAAA;AAAA,oBAAE,aAAa,YAAY,WAAW;AAAA,kBAAA,GAAE;AAAA,gBAAA,GAC7F;AAAA,cAAA,GACF;AAAA,YAAA,GACF;AAAA,YAGAL,kCAAAA,IAAC,OAAI,EAAA,WAAU,uBACb,UAAAA,kCAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC;AAAA,gBACA,gBAAgB,MAAM;AAAA,gBAAC;AAAA,gBACvB,WAAW;AAAA,gBACX;AAAA,cAAA;AAAA,YAAA,GAEJ;AAAA,UAAA,GACF;AAAA,UAID,SACCA,kCAAA,IAAC,OAAI,EAAA,WAAU,2DACZ,UACH,OAAA;AAAA,UAID,gBAAgB,YACdK,uCAAA,OAAA,EAAI,WAAU,oCACb,UAAA;AAAA,YAAAL,kCAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAS,MAAM,eAAe,QAAQ;AAAA,gBACtC,WAAU;AAAA,gBACV,OAAO,EAAE,YAAY,kCAAkC;AAAA,gBACxD,UAAA;AAAA,cAAA;AAAA,YAED;AAAA,YACAA,kCAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAS;AAAA,gBACT,WAAU;AAAA,gBACV,UAAU,CAAC;AAAA,gBACX,OAAO,EAAE,YAAY,kCAAkC;AAAA,gBACxD,UAAA;AAAA,cAAA;AAAA,YAED;AAAA,UAAA,GACF;AAAA,QAAA,EAAA,CAEJ,EAEJ,CAAA;AAAA,QAGCA,kCAAA,IAAA,kBAAA,EAAiB,aAA0B,YAAW,cACrD,UAAAA,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,QAAO;AAAA,YACP;AAAA,YACA,SAAQ;AAAA,UAAA;AAAA,QAAA,GAEZ;AAAA,QAGCA,kCAAA,IAAA,kBAAA,EAAiB,aAA0B,YAAW,WACrD,UAAAA,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,QAAO;AAAA,YACP;AAAA,YACA,SAAQ;AAAA,YACR,SAAS;AAAA,YACT,iBAAiB;AAAA,YACjB,uBAAuB,EAAE,UAAU,+CAAe,OAAO;AAAA,YACzD,cAAc,OAAO,gBAAgB;AAAA,YACrC;AAAA,UAAA;AAAA,QAAA,GAEJ;AAAA,MAAA,GAEF;AAAA,MAGC,gBAAgB,aACfK,uCAAC,OAAI,EAAA,WAAU,wGAAuG,OAAO,EAAE,YAAY,kCAAA,GACzI,UAAA;AAAA,QAAAA,uCAAC,KAAE,EAAA,UAAA;AAAA,UAAA;AAAA,UAAYL,kCAAA,IAAA,QAAA,EAAK,WAAU,gCAA+B,UAAO,WAAA;AAAA,UAAO;AAAA,QAAA,GAAoB;AAAA,QAC/FK,kCAAAA,KAAC,OAAI,EAAA,WAAU,sCAAqC,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,SAAQ,aAC5G,UAAA;AAAA,UAAAL,kCAAA,IAAC,UAAO,EAAA,IAAG,MAAK,IAAG,MAAK,GAAE,MAAK,QAAO,gBAAe,aAAY,KAAI,MAAK,QAAO;AAAA,UACjFA,kCAAAA,IAAC,QAAK,EAAA,GAAE,iBAAgB,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,QAAQ,CAAA;AAAA,QAAA,GAC7G;AAAA,MAAA,GACF;AAAA,IAAA,EAEJ,CAAA,EACF,CAAA,GACF;AAAA,EACF,EAAA,CAAA;AAEJ;ACxyCA,MAAM,iBAAiB,cAAc,IAAI;AAElC,MAAM,kBAAkB,CAAC;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR;AACF,MAAM;AACJ,QAAM,CAAC,QAAQ,SAAS,IAAI,MAAM,SAAS,KAAK;AAChD,QAAM,CAAC,eAAe,gBAAgB,IAAI,MAAM,SAAS,IAAI;AAC7D,QAAM,CAAC,WAAW,YAAY,IAAI,MAAM,SAAS,CAAA,CAAE;AACnD,QAAM,CAAC,cAAc,eAAe,IAAI,MAAM,SAAS,EAAE;AAEnD,QAAA,cAAc,CAAC,QAAQ,sBAAsB;AACjD,qBAAiB,MAAM;AACvB,QAAI,mBAAmB;AACrB,mBAAa,iBAAiB;AAAA,IAChC;AACA,cAAU,IAAI;AAAA,EAAA;AAGhB,QAAM,eAAe,MAAM;AACzB,cAAU,KAAK;AACf,qBAAiB,IAAI;AACrB,iBAAa,CAAE,CAAA;AAAA,EAAA;AAGjB,QAAM,gBAAgB,CAAC,WAAW,iBAAiB,YAAY;AAC7D,QAAI,OAAO;AACT,cAAQ,IAAI,oBAAoB,EAAE,WAAW,iBAAiB,SAAS;AAAA,IACzE;AACA,QAAI,UAAU,WAAW;AACb,gBAAA,UAAU,WAAW,iBAAiB,OAAO;AAAA,IACzD;AAAA,EAAA;AAGI,QAAA,cAAc,CAAC,UAAU;AAC7B,QAAI,OAAO;AACD,cAAA,MAAM,kBAAkB,KAAK;AAAA,IACvC;AACA,QAAI,UAAU,SAAS;AACrB,gBAAU,QAAQ,KAAK;AAAA,IACzB;AAAA,EAAA;AAGF,QAAM,cAAc,MAAM;AACxB,QAAI,UAAU,SAAS;AACrB,gBAAU,QAAQ;AAAA,IACpB;AACa;EAAA;AAGf,QAAM,eAAe;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAGF,+CACG,gBACC,EAAA,UAAAK,kCAAA,KAAC,eAAe,UAAf,EAAwB,OAAO,cAC7B,UAAA;AAAA,IAAA;AAAA,IACA,UAAU,iBACTL,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,SAAS;AAAA,QACT,SAAS;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA,EAEJ,CAAA,EACF,CAAA;AAEJ;AAEO,MAAM,aAAa,MAAM;AACxB,QAAA,UAAU,WAAW,cAAc;AACzC,MAAI,CAAC,SAAS;AACN,UAAA,IAAI,MAAM,kDAAkD;AAAA,EACpE;AACO,SAAA;AACT;AAGA,MAAM,eAAe,cAAc,OAAO;AAEnC,MAAM,gBAAgB,CAAC,EAAE,QAAQ,SAAS,eAAe;AAC9D,+CACG,aAAa,UAAb,EAAsB,OAAO,OAC3B,SACH,CAAA;AAEJ;AAOa,MAAA,kBAAkB,WAAW,CAAC;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAG,QAAQ;AACT,QAAM,CAAC,QAAQ,SAAS,IAAI,MAAM,SAAS,KAAK;AAChD,QAAM,CAAC,eAAe,gBAAgB,IAAI,MAAM,SAAS,IAAI;AAE7D,QAAM,cAAc,MAAM,YAAY,CAAC,QAAQ,YAAY,OAAO;AAC/C,qBAAA;AAAA,MACf,GAAG;AAAA,MACH,WAAW,UAAU,aAAa;AAAA,MAClC,SAAS,UAAU,WAAW;AAAA,MAC9B,SAAS,UAAU,WAAW;AAAA,IAAA,CAC/B;AACD,cAAU,IAAI;AAAA,EACb,GAAA,CAAC,WAAW,SAAS,OAAO,CAAC;AAE1B,QAAA,eAAe,MAAM,YAAY,MAAM;AAC3C,cAAU,KAAK;AACf,qBAAiB,IAAI;AAAA,EACvB,GAAG,CAAE,CAAA;AAEC,QAAA,oBAAoB,KAAK,OAAO;AAAA,IACpC;AAAA,IACA;AAAA,EACE,IAAA,CAAC,aAAa,YAAY,CAAC;AAE/B,QAAM,gBAAgB,CAAC,WAAW,iBAAiB,YAAY;AAC7D,QAAI,OAAO;AACT,cAAQ,IAAI,oBAAoB,EAAE,WAAW,iBAAiB,SAAS;AAAA,IACzE;AACA,QAAI,+CAAe,WAAW;AACd,oBAAA,UAAU,WAAW,iBAAiB,OAAO;AAAA,IAC7D;AAAA,EAAA;AAGI,QAAA,cAAc,CAAC,UAAU;AAC7B,QAAI,OAAO;AACD,cAAA,MAAM,kBAAkB,KAAK;AAAA,IACvC;AACA,QAAI,+CAAe,SAAS;AAC1B,oBAAc,QAAQ,KAAK;AAAA,IAC7B;AAAA,EAAA;AAGF,QAAM,cAAc,MAAM;AACxB,QAAI,+CAAe,SAAS;AAC1B,oBAAc,QAAQ;AAAA,IACxB;AACa;EAAA;AAIb,SAAAA,kCAAAA,IAAC,gBACE,EAAA,UAAA,UAAU,iBACTA,kCAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,SAAS;AAAA,MACT,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACC,GAAG;AAAA,IAAA;AAAA,EAGV,EAAA,CAAA;AAEJ,CAAC;AAED,gBAAgB,cAAc;AAG9B,MAAMW,mBAAiB,WAAW,CAAC,OAAO,QAAQ;AAChD,QAAM,aAAa;AAEnB,sBAAoB,KAAK,OAAO;AAAA,IAC9B,aAAa,CAAC,QAAQ,cAAc;AAClC,UAAI,WAAW,SAAS;AACX,mBAAA,QAAQ,YAAY,QAAQ,SAAS;AAAA,MAClD;AAAA,IACF;AAAA,IACA,cAAc,MAAM;AAClB,UAAI,WAAW,SAAS;AACtB,mBAAW,QAAQ;MACrB;AAAA,IACF;AAAA,EACA,EAAA;AAGA,SAAAX,sCAAC,mBAAiB,GAAG,OACnB,gDAAC,OAAI,EAAA,KAAK,WAAY,CAAA,EACxB,CAAA;AAEJ,CAAC;AAEDW,iBAAe,cAAc;ACxHtB,MAAM,WAAW;AAAA,EACtB,YAAY,SAAS,QAAQ,WAAW;AACtC,SAAK,SAAS;AACd,SAAK,YAAY;AACjB,SAAK,UAAU,QAAQ,SAAS,GAAG,IAAI,QAAQ,MAAM,GAAG,EAAE,IAAI;AAG9D,SAAK,MAAM,MAAM,OAAO;AAAA,MACtB,SAAS,KAAK;AAAA,MACd,SAAS;AAAA,MACT,SAAS;AAAA,QACP,gBAAgB;AAAA,MACjB;AAAA,IACP,CAAK;AAGD,SAAK,IAAI,aAAa,QAAQ;AAAA,MAC5B,CAAC,WAAW;;AAEV,eAAO,QAAQ,WAAW,IAAI,KAAK;AACnC,eAAO,QAAQ,cAAc,IAAI,KAAK;AAEtC,cAAM,QAAQ,KAAK;AACnB,YAAI,OAAO;AACT,iBAAO,QAAQ,eAAe,IAAI,UAAU,KAAK;AAAA,QAClD;AAGD,eAAO,QAAQ,aAAa,IAAI,KAAK,IAAG,EAAG;AAC3C,eAAO,QAAQ,cAAc,IAAI,UAAU;AAC3C,eAAO,QAAQ,aAAa,IAAI,KAAK,SAAQ,EAAG;AAEhD,gBAAQ,IAAI,gBAAgB;AAAA,UAC1B,SAAQ,YAAO,WAAP,mBAAe;AAAA,UACvB,KAAK,OAAO;AAAA,UACZ,MAAM,OAAO;AAAA,UACb,UAAU,KAAK,SAAU;AAAA,QACnC,CAAS;AAED,eAAO;AAAA,MACR;AAAA,MACD,CAAC,UAAU;AACT,gBAAQ,MAAM,8BAA8B,KAAK;AACjD,eAAO,QAAQ,OAAO,KAAK;AAAA,MAC5B;AAAA,IACP;AAGI,SAAK,IAAI,aAAa,SAAS;AAAA,MAC7B,CAAC,aAAa;AACZ,gBAAQ,IAAI,iBAAiB;AAAA,UAC3B,QAAQ,SAAS;AAAA,UACjB,KAAK,SAAS,OAAO;AAAA,UACrB,MAAM,SAAS;AAAA,QACzB,CAAS;AACD,eAAO;AAAA,MACR;AAAA,MACD,CAAC,UAAU;;AACT,gBAAQ,MAAM,cAAc;AAAA,UAC1B,SAAQ,WAAM,aAAN,mBAAgB;AAAA,UACxB,OAAM,WAAM,aAAN,mBAAgB;AAAA,UACtB,SAAS,MAAM;AAAA,QACzB,CAAS;AAGD,cAAI,WAAM,aAAN,mBAAgB,YAAW,KAAK;AAClC,gBAAM,IAAI,MAAM,2DAA2D;AAAA,QAC5E,aAAU,WAAM,aAAN,mBAAgB,YAAW,KAAK;AACzC,gBAAM,IAAI,MAAM,oDAAoD;AAAA,QACrE,aAAU,WAAM,aAAN,mBAAgB,YAAW,KAAK;AACzC,gBAAM,IAAI,MAAM,8CAA8C;AAAA,QAC/D,aAAU,WAAM,aAAN,mBAAgB,WAAU,KAAK;AACxC,gBAAM,IAAI,MAAM,uCAAuC;AAAA,QACjE,WAAmB,MAAM,SAAS,iBAAiB;AACzC,gBAAM,IAAI,MAAM,8CAA8C;AAAA,QACxE,WAAmB,MAAM,SAAS,WAAW;AACnC,gBAAM,IAAI,MAAM,oCAAoC;AAAA,QACrD;AAED,cAAM;AAAA,MACP;AAAA,IACP;AAAA,EACG;AAAA,EAED,wBAAwB;AACtB,QAAI;AACF,YAAM,cAAc,GAAG,KAAK,MAAM,IAAI,KAAK,SAAS;AACpD,aAAO,KAAK,WAAW;AAAA,IACxB,SAAQ,OAAO;AACd,cAAQ,MAAM,6BAA6B,KAAK;AAChD,aAAO;AAAA,IACR;AAAA,EACF;AAAA,EAED,WAAW;AACT,WAAO,iEAAiE,KAAK,UAAU,SAAS;AAAA,EACjG;AAAA;AAAA,EAGD,MAAM,QAAQ,UAAU,UAAU,IAAI;;AACpC,QAAI;AACF,YAAM,WAAW,MAAM,KAAK,IAAI;AAAA,QAC9B,KAAK;AAAA,QACL,QAAQ,QAAQ,UAAU;AAAA,QAC1B,MAAM,QAAQ,SAAS,QAAQ,OAAO,KAAK,MAAM,QAAQ,IAAI,IAAI;AAAA,QACjE,GAAG;AAAA,MACX,CAAO;AACD,aAAO,SAAS;AAAA,IACjB,SAAQ,OAAO;AACd,WAAI,iBAAM,aAAN,mBAAgB,SAAhB,mBAAsB,OAAO;AAC/B,cAAM,IAAI,MAAM,MAAM,SAAS,KAAK,KAAK;AAAA,MAC1C;AACD,YAAM,IAAI,MAAM,MAAM,WAAW,gBAAgB;AAAA,IAClD;AAAA,EACF;AAAA;AAAA,EAGD,MAAM,cAAc,QAAQ;;AAC1B,QAAI;AAEF,YAAM,iBAAiB;AAAA,QACrB,GAAG;AAAA,QACH,UAAU;AAAA,UACR,GAAG,OAAO;AAAA,UACV,UAAU,KAAK,SAAU;AAAA,UACzB,WAAW,UAAU;AAAA,UACrB,WAAW,KAAK,IAAK;AAAA,UACrB,YAAY;AAAA,QACb;AAAA,MACT;AAEM,YAAM,WAAW,MAAM,KAAK,IAAI,KAAK,wBAAwB,cAAc;AAC3E,aAAO,SAAS;AAAA,IACjB,SAAQ,OAAO;AACd,WAAI,iBAAM,aAAN,mBAAgB,SAAhB,mBAAsB,OAAO;AAC/B,cAAM,IAAI,MAAM,MAAM,SAAS,KAAK,KAAK;AAAA,MAC1C;AACD,YAAM,IAAI,MAAM,MAAM,WAAW,0BAA0B;AAAA,IAC5D;AAAA,EACF;AAAA,EAED,MAAM,WAAW,WAAW;;AAC1B,QAAI;AACF,YAAM,WAAW,MAAM,KAAK,IAAI,IAAI,iBAAiB,SAAS,EAAE;AAChE,aAAO,SAAS;AAAA,IACjB,SAAQ,OAAO;AACd,WAAI,iBAAM,aAAN,mBAAgB,SAAhB,mBAAsB,OAAO;AAC/B,cAAM,IAAI,MAAM,MAAM,SAAS,KAAK,KAAK;AAAA,MAC1C;AACD,YAAM,IAAI,MAAM,MAAM,WAAW,+BAA+B;AAAA,IACjE;AAAA,EACF;AAAA;AAAA,EAGD,MAAM,cAAc;AAClB,QAAI;AACF,YAAM,WAAW,MAAM,KAAK,IAAI,IAAI,eAAe;AACnD,aAAO,SAAS;AAAA,IACjB,SAAQ,OAAO;AACd,cAAQ,MAAM,wBAAwB,KAAK;AAG3C,aAAO;AAAA,QACL,UAAU;AAAA,UACR;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,WAAW;AAAA,YACX,SAAS;AAAA,YACT,MAAM;AAAA,YACN,aAAa;AAAA,YACb,WAAW;AAAA,YACX,kBAAkB,CAAC,YAAY,YAAY,SAAS,SAAS;AAAA,UAC9D;AAAA,UACD;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,WAAW;AAAA,YACX,SAAS;AAAA,YACT,MAAM;AAAA,YACN,aAAa;AAAA,YACb,WAAW;AAAA,YACX,kBAAkB,CAAC,YAAY,SAAS,SAAS;AAAA,UAClD;AAAA,UACD;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,WAAW;AAAA,YACX,SAAS;AAAA,YACT,MAAM;AAAA,YACN,aAAa;AAAA,YACb,WAAW;AAAA,YACX,kBAAkB,CAAC,YAAY,YAAY,OAAO;AAAA,UACnD;AAAA,UACD;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,WAAW;AAAA,YACX,SAAS;AAAA,YACT,MAAM;AAAA,YACN,aAAa;AAAA,YACb,WAAW;AAAA,YACX,kBAAkB,CAAC,YAAY,UAAU;AAAA,UAC1C;AAAA,UACD;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,WAAW;AAAA,YACX,SAAS;AAAA,YACT,MAAM;AAAA,YACN,aAAa;AAAA,YACb,WAAW;AAAA,YACX,kBAAkB,CAAC,YAAY,UAAU;AAAA,UAC1C;AAAA,UACD;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,WAAW;AAAA,YACX,SAAS;AAAA,YACT,MAAM;AAAA,YACN,aAAa;AAAA,YACb,WAAW;AAAA,YACX,kBAAkB,CAAC,YAAY,UAAU;AAAA,UAC1C;AAAA,QACF;AAAA,MACT;AAAA,IACK;AAAA,EACF;AAAA;AAAA,EAGD,MAAM,YAAY;AAChB,QAAI;AACF,YAAM,WAAW,MAAM,KAAK,IAAI,IAAI,2BAA2B;AAC/D,aAAO,SAAS;AAAA,IACjB,SAAQ,OAAO;AACd,cAAQ,MAAM,sBAAsB,KAAK;AAGzC,aAAO;AAAA,QACL,aAAa;AAAA,UACX;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,iBAAiB;AAAA,YACjB,UAAU;AAAA,YACV,cAAc;AAAA,YACd,WAAW;AAAA,YACX,SAAS;AAAA,cACP,IAAI;AAAA,cACJ,MAAM;AAAA,cACN,WAAW;AAAA,cACX,MAAM;AAAA,YACP;AAAA,UACF;AAAA,UACD;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,iBAAiB;AAAA,YACjB,UAAU;AAAA,YACV,cAAc;AAAA,YACd,WAAW;AAAA,YACX,SAAS;AAAA,cACP,IAAI;AAAA,cACJ,MAAM;AAAA,cACN,WAAW;AAAA,cACX,MAAM;AAAA,YACP;AAAA,UACF;AAAA,UACD;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,iBAAiB;AAAA,YACjB,UAAU;AAAA,YACV,cAAc;AAAA,YACd,WAAW;AAAA,YACX,SAAS;AAAA,cACP,IAAI;AAAA,cACJ,MAAM;AAAA,cACN,WAAW;AAAA,cACX,MAAM;AAAA,YACP;AAAA,UACF;AAAA,UACD;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,iBAAiB;AAAA,YACjB,UAAU;AAAA,YACV,cAAc;AAAA,YACd,WAAW;AAAA,YACX,SAAS;AAAA,cACP,IAAI;AAAA,cACJ,MAAM;AAAA,cACN,WAAW;AAAA,cACX,MAAM;AAAA,YACP;AAAA,UACF;AAAA,QACF;AAAA,MACT;AAAA,IACK;AAAA,EACF;AAAA;AAAA,EAGD,MAAM,gBAAgB,WAAW,aAAa,GAAG,aAAa,GAAG;;AAC/D,QAAI;AACF,YAAM,WAAW,MAAM,KAAK,IAAI,KAAK,2BAA2B;AAAA,QAC9D;AAAA,QACA,WAAW,KAAK,IAAK;AAAA,QACrB;AAAA,MACR,CAAO;AACD,aAAO,SAAS;AAAA,IACjB,SAAQ,OAAO;AAEd,UAAI,aAAa,eACf,MAAM,SAAS,qBACf,WAAM,aAAN,mBAAgB,WAAU,MACzB;AACD,gBAAQ,IAAI,6BAA6B,aAAa,CAAC,IAAI,UAAU,MAAM;AAC3E,cAAM,IAAI,QAAQ,aAAW,WAAW,SAAS,OAAQ,aAAa,EAAE,CAAC;AACzE,eAAO,KAAK,gBAAgB,WAAW,aAAa,GAAG,UAAU;AAAA,MAClE;AAED,WAAI,iBAAM,aAAN,mBAAgB,SAAhB,mBAAsB,OAAO;AAC/B,cAAM,IAAI,MAAM,MAAM,SAAS,KAAK,KAAK;AAAA,MAC1C;AACD,YAAM,IAAI,MAAM,MAAM,WAAW,0BAA0B;AAAA,IAC5D;AAAA,EACF;AAAA;AAAA,EAGD,MAAM,eAAe,WAAW,iBAAiB,SAAS,eAAe,iBAAiB,IAAI;;AAC5F,QAAI;AACF,cAAQ,IAAI,yDAAyD;AAAA,QACnE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACR,CAAO;AAED,YAAM,cAAc;AAAA,QAClB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,KAAK,IAAK;AAAA,QACrB,UAAU,KAAK,SAAU;AAAA,QACzB,GAAG;AAAA,MACX;AAEM,YAAM,WAAW,MAAM,KAAK,IAAI,KAAK,yBAAyB,WAAW;AAEzE,cAAQ,IAAI,2CAA2C,SAAS,IAAI;AACpE,aAAO,SAAS;AAAA,IACjB,SAAQ,OAAO;AACd,cAAQ,MAAM,yCAAyC,KAAK;AAG5D,WAAI,iBAAM,aAAN,mBAAgB,SAAhB,mBAAsB,OAAO;AAC/B,cAAM,IAAI,MAAM,MAAM,SAAS,KAAK,KAAK;AAAA,MAC1C,aAAU,WAAM,aAAN,mBAAgB,YAAW,KAAK;AACzC,cAAM,IAAI,MAAM,yCAAyC;AAAA,MAC1D,aAAU,WAAM,aAAN,mBAAgB,YAAW,KAAK;AACzC,cAAM,IAAI,MAAM,mCAAmC;AAAA,MACpD,aAAU,WAAM,aAAN,mBAAgB,YAAW,KAAK;AACzC,cAAM,IAAI,MAAM,oCAAoC;AAAA,MACrD;AAED,YAAM,IAAI,MAAM,MAAM,WAAW,2BAA2B;AAAA,IAC7D;AAAA,EACF;AAAA;AAAA,EAGD,MAAM,iBAAiB,WAAW;;AAChC,QAAI;AACF,YAAM,WAAW,MAAM,KAAK,IAAI,IAAI,iBAAiB,SAAS,SAAS;AACvE,aAAO,SAAS;AAAA,IACjB,SAAQ,OAAO;AACd,WAAI,iBAAM,aAAN,mBAAgB,SAAhB,mBAAsB,OAAO;AAC/B,cAAM,IAAI,MAAM,MAAM,SAAS,KAAK,KAAK;AAAA,MAC1C;AACD,YAAM,IAAI,MAAM,MAAM,WAAW,8BAA8B;AAAA,IAChE;AAAA,EACF;AAAA;AAAA,EAGD,MAAM,cAAc,WAAW,SAAS,kBAAkB;;AACxD,QAAI;AACF,YAAM,WAAW,MAAM,KAAK,IAAI,KAAK,iBAAiB,SAAS,WAAW;AAAA,QACxE;AAAA,QACA,WAAW,KAAK,IAAK;AAAA,MAC7B,CAAO;AACD,aAAO,SAAS;AAAA,IACjB,SAAQ,OAAO;AACd,WAAI,iBAAM,aAAN,mBAAgB,SAAhB,mBAAsB,OAAO;AAC/B,cAAM,IAAI,MAAM,MAAM,SAAS,KAAK,KAAK;AAAA,MAC1C;AACD,YAAM,IAAI,MAAM,MAAM,WAAW,0BAA0B;AAAA,IAC5D;AAAA,EACF;AAAA;AAAA,EAGD,MAAM,oBAAoB,WAAW;AACnC,QAAI;AACF,YAAM,WAAW,MAAM,KAAK,IAAI,IAAI,iBAAiB,SAAS,UAAU;AACxE,aAAO,SAAS;AAAA,IACjB,SAAQ,OAAO;AACd,cAAQ,MAAM,iCAAiC,KAAK;AAGpD,YAAM,kBAAkB;AAAA,QACtB,KAAK,CAAC,YAAY,YAAY,SAAS,SAAS;AAAA;AAAA,QAChD,MAAM,CAAC,YAAY,SAAS,SAAS;AAAA;AAAA,QACrC,OAAO,CAAC,YAAY,YAAY,OAAO;AAAA;AAAA,QACvC,SAAS,CAAC,YAAY,UAAU;AAAA;AAAA,QAChC,MAAM,CAAC,YAAY,UAAU;AAAA;AAAA,QAC7B,SAAS,CAAC,YAAY,UAAU;AAAA;AAAA,MACxC;AAEM,aAAO;AAAA,QACL,SAAS,gBAAgB,SAAS,KAAK,CAAC,YAAY,YAAY,OAAO;AAAA,MAC/E;AAAA,IACK;AAAA,EACF;AAAA;AAAA,EAGD,MAAM,cAAc;AAClB,QAAI;AACF,YAAM,WAAW,MAAM,KAAK,IAAI,IAAI,aAAa;AACjD,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,WAAW,KAAK,IAAK;AAAA,QACrB,cAAc,SAAS,QAAQ,iBAAiB,KAAK;AAAA,QACrD,GAAG,SAAS;AAAA,MACpB;AAAA,IACK,SAAQ,OAAO;AACd,cAAQ,MAAM,wBAAwB,KAAK;AAC3C,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,OAAO,MAAM;AAAA,QACb,WAAW,KAAK,IAAK;AAAA,MAC7B;AAAA,IACK;AAAA,EACF;AAAA;AAAA,EAGD,MAAM,iBAAiB,eAAe,OAAO;AAC3C,QAAI;AACF,YAAM,WAAW,MAAM,KAAK,IAAI,IAAI,4BAA4B,YAAY,EAAE;AAC9E,aAAO,SAAS;AAAA,IACjB,SAAQ,OAAO;AACd,cAAQ,MAAM,8BAA8B,KAAK;AAGjD,aAAO;AAAA,QACL,OAAO;AAAA,UACL,KAAK;AAAA,UACL,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM;AAAA,UACN,KAAK;AAAA,QACN;AAAA,QACD,WAAW,KAAK,IAAK;AAAA,QACrB,QAAQ;AAAA,MAChB;AAAA,IACK;AAAA,EACF;AAAA;AAAA,EAGD,MAAM,wBAAwB,SAAS,eAAe,MAAM;AAC1D,QAAI;AACF,YAAM,WAAW,MAAM,KAAK,IAAI,IAAI,iBAAiB,OAAO,SAAS;AAAA,QACnE,QAAQ,EAAE,aAAc;AAAA,MAChC,CAAO;AACD,aAAO,SAAS;AAAA,IACjB,SAAQ,OAAO;AACd,cAAQ,MAAM,yBAAyB,KAAK;AAG5C,YAAM,eAAe;AAAA,QACnB,UAAU,EAAE,MAAM,IAAI,UAAU,IAAI,MAAM,GAAI;AAAA,QAC9C,KAAK,EAAE,MAAM,GAAG,UAAU,IAAI,MAAM,GAAI;AAAA,QACxC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,GAAI;AAAA,QAC3C,UAAU,EAAE,MAAM,KAAK,UAAU,GAAG,MAAM,EAAG;AAAA,QAC7C,UAAU,EAAE,MAAM,KAAK,UAAU,GAAG,MAAM,EAAG;AAAA,QAC7C,WAAW,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,GAAI;AAAA,MACrD;AAEM,aAAO;AAAA,QACL,MAAM,aAAa,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,IAAI,MAAM,GAAI;AAAA,QACnE,UAAU;AAAA,QACV,QAAQ;AAAA,MAChB;AAAA,IACK;AAAA,EACF;AACH;ACjuBA,MAAM,oBAAoB,CAAC;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,MAAM;AACF,QAAM,EAAE,aAAa,SAAS,eAAeC,YAAU;AACvD,QAAM,EAAE,eAAe,UAAU,IAAI,iBAAiB;AACtD,QAAM,EAAE,iBAAiB,YAAY,gBAAgB,mBAAmB;AAClE,QAAA,EAAE,oBAAoB;AACtB,QAAA,EAAE,cAAc;AAGE,kBAAgB;AAAA,IAAO,CAAA,WAC3C,OAAO,KAAK,YAAA,EAAc,SAAS,UAAU,KAC7C,OAAO,aAAa,cACpB,OAAO,KAAK,YAAA,EAAc,SAAS,UAAU,KAC7C,OAAO,KAAK,YAAA,EAAc,SAAS,gBAAgB;AAAA,EACvD;AAEM,QAAA,8BAA8B,OAAO,eAAe;AAClD,QAAA;AACA,sBAAgB,IAAI;AAGpB,UAAI,aAAa;AACb,cAAM,WAAW;AAEjB,cAAM,IAAI,QAAQ,CAAA,YAAW,WAAW,SAAS,GAAI,CAAC;AAAA,MAC1D;AAGA,UAAI,eAAe,cAAc,OAAO,YAAY,OAAO,SAAS,YAAY;AACxE,YAAA;AAEA,gBAAM,OAAO,SAAS,QAAQ,EAAE,QAAQ,uBAAuB;AAC/D,kBAAQ,IAAI,kCAAkC;AAAA,iBACzC,OAAO;AACJ,kBAAA,MAAM,+BAA+B,KAAK;AAC5C,gBAAA;AAAA,QACV;AAAA,MAAA,OACG;AAEH,cAAM,cAAc,UAAU;AAAA,MAClC;AAAA,aACK,OAAO;AACJ,cAAA,MAAM,6BAA6B,KAAK;AACxC,cAAA,MAAM,WAAW,0BAA0B;AAAA,IAAA,UACrD;AACE,sBAAgB,KAAK;AAAA,IACzB;AAAA,EAAA;AAIJ,QAAM,kBAAkB,MAAM;AACtB,QAAA;AACA,cAAQ,IAAI,oCAAoC;AACtC;aACL,OAAO;AACJ,cAAA,MAAM,yBAAyB,KAAK;AAE5C,kCAA4B,UAAU;AAAA,IAC1C;AAAA,EAAA;AAGJ,QAAM,oBAAoB,YAAY;;AAClC,QAAI,CAAC,eAAe,CAAC,eAAe,CAAC,eAAe;AAChD,cAAQ,8CAA8C;AACtD;AAAA,IACJ;AAEI,QAAA;AACA,sBAAgB,IAAI;AAEpB,cAAQ,IAAI,uBAAuB;AAC3B,cAAA,IAAI,6BAA6B,OAAO;AACxC,cAAA,IAAI,iBAAiB,WAAW;AAChC,cAAA,IAAI,mBAAmB,aAAa;AACpC,cAAA,IAAI,qBAAqB,eAAe;AAG5C,UAAA,oBAAmB,iBAAY,aAAZ,mBAAsB;AAErC,cAAA,IAAI,+BAA+B,gBAAgB;AAE3D,UAAI,CAAC,oBAAoB,OAAO,qBAAqB,UAAU;AACrD,cAAA,IAAI,MAAM,mDAAmD;AAAA,MACvE;AAGA,UAAI,CAAC,iBAAiB,MAAM,qBAAqB,GAAG;AAChD,cAAM,IAAI,MAAM,oCAAoC,gBAAgB,EAAE;AAAA,MAC1E;AAEI,UAAA;AAEJ,UAAI,cAAc,iBAAiB;AAE/B,gBAAQ,IAAI,gCAAgC;AACpC,gBAAA,IAAI,mBAAmB,cAAc,eAAe;AACpD,gBAAA,IAAI,mBAAmB,cAAc,QAAQ;AAC7C,gBAAA,IAAI,mBAAmB,YAAY,WAAW;AAEhD,cAAA,WAAW,cAAc,YAAY;AACrC,cAAA,SAAS,KAAK,MAAM,YAAY,cAAc,KAAK,IAAI,IAAI,QAAQ,CAAC;AAElE,gBAAA,IAAI,sCAAsC,MAAM;AAGxD,cAAM,WAAW;AACX,cAAA,uBAAuB,iBAAiB,MAAM,CAAC;AACrD,cAAM,kBAAkB,qBAAqB,YAAA,EAAc,SAAS,IAAI,GAAG;AAC3E,cAAM,eAAe,OAAO,SAAS,EAAE,EAAE,SAAS,IAAI,GAAG;AAEzD,cAAM,eAAe,GAAG,QAAQ,GAAG,eAAe,GAAG,YAAY;AAEjE,gBAAQ,IAAI,sBAAsB;AAC1B,gBAAA,IAAI,cAAc,QAAQ;AAC1B,gBAAA,IAAI,uBAAuB,eAAe;AAC1C,gBAAA,IAAI,oBAAoB,YAAY;AACpC,gBAAA,IAAI,cAAc,YAAY;AAEtC,cAAM,WAAW;AAAA,UACb,IAAI,cAAc;AAAA,UAClB,MAAM;AAAA,UACN,OAAO;AAAA,QAAA;AAGH,gBAAA,IAAI,kCAAkC,QAAQ;AAC7C,iBAAA,MAAM,gBAAgB,QAAQ;AAAA,MAAA,OACpC;AAEG,cAAA,QAAQ,KAAK,MAAM,YAAY,cAAc,KAAK,IAAI,IAAI,EAAE,CAAC;AACnE,cAAM,WAAW,KAAK,MAAM,SAAS,EAAE,CAAC;AAExC,cAAM,WAAW;AAAA,UACb,IAAI;AAAA,UACJ,OAAO;AAAA,QAAA;AAGH,gBAAA,IAAI,kCAAkC,QAAQ;AAC7C,iBAAA,MAAM,gBAAgB,QAAQ;AAAA,MAC3C;AAEA,UAAI,QAAQ;AACA,gBAAA,IAAI,oCAAoC,MAAM;AACtD,0BAAkB,MAAM;AAAA,MAC5B;AAAA,aACK,OAAO;AACJ,cAAA,MAAM,yBAAyB,KAAK;AACpC,cAAA,MAAM,WAAW,oBAAoB;AAAA,IAAA,UAC/C;AACE,sBAAgB,KAAK;AAAA,IACzB;AAAA,EAAA;AAGJ,QAAM,mBAAmB,YAAY;AAC7B,QAAA;AACA,YAAM,WAAW;AAAA,aACZ,OAAO;AACJ,cAAA,MAAM,qBAAqB,KAAK;AAAA,IAC5C;AAAA,EAAA;AAGJ,+CACK,OAAI,EAAA,WAAU,yBACX,UAACP,kCAAA,KAAA,OAAA,EAAI,WAAU,aACX,UAAA;AAAA,IAAAL,kCAAAA,IAAC,SAAI,WAAU,8FACX,gDAAC,QAAO,EAAA,WAAU,0BAAyB,EAC/C,CAAA;AAAA,IAEC,CAAC,cAEMK,kCAAAA,KAAAC,kBAAA,UAAA,EAAA,UAAA;AAAA,MAACN,kCAAA,IAAA,MAAA,EAAG,WAAU,yBAAwB,UAEtC,uBAAA;AAAA,MACCA,kCAAA,IAAA,KAAA,EAAE,WAAU,4CAA2C,UAExD,wDAAA;AAAA,MAEAK,kCAAAA,KAAC,OAAI,EAAA,WAAU,aAEX,UAAA;AAAA,QAAAA,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,SAAS,MAAM,4BAA4B,UAAU;AAAA,YACrD,UAAU,aAAa;AAAA,YACvB,WAAU;AAAA,YAEV,UAAA;AAAA,cAACL,kCAAA,IAAA,QAAA,EAAK,WAAU,WAAU,UAAE,MAAA;AAAA,cAC5BK,kCAAAA,KAAC,OAAI,EAAA,WAAU,oBACX,UAAA;AAAA,gBAACL,kCAAA,IAAA,OAAA,EAAI,WAAU,eAAc,UAAQ,YAAA;AAAA,gBACpCA,kCAAA,IAAA,OAAA,EAAI,WAAU,yBAAwB,UAAqB,yBAAA;AAAA,cAAA,GAChE;AAAA,YAAA;AAAA,UAAA;AAAA,QACJ;AAAA,QAGAK,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,SAAS;AAAA,YACT,UAAU,aAAa;AAAA,YACvB,WAAU;AAAA,YAEV,UAAA;AAAA,cAACL,kCAAA,IAAA,QAAA,EAAK,WAAU,WAAU,UAAE,MAAA;AAAA,cAC5BK,kCAAAA,KAAC,OAAI,EAAA,WAAU,oBACX,UAAA;AAAA,gBAACL,kCAAA,IAAA,OAAA,EAAI,WAAU,eAAc,UAAa,iBAAA;AAAA,gBACzCA,kCAAA,IAAA,OAAA,EAAI,WAAU,yBAAwB,UAA6B,iCAAA;AAAA,cAAA,GACxE;AAAA,YAAA;AAAA,UAAA;AAAA,QACJ;AAAA,QAGAA,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,SAAS,MAAM,4BAA4B,UAAU;AAAA,YACrD,UAAU,aAAa;AAAA,YACvB,WAAU;AAAA,YACb,UAAA;AAAA,UAAA;AAAA,QAED;AAAA,MAAA,GACJ;AAAA,MAEC,gBACGK,kCAAA,KAAC,OAAI,EAAA,WAAU,4DACX,UAAA;AAAA,QAACL,kCAAAA,IAAA,SAAA,EAAQ,WAAU,uBAAuB,CAAA;AAAA,QAC1CA,kCAAAA,IAAC,UAAK,UAAa,gBAAA,CAAA;AAAA,MAAA,GACvB;AAAA,IAAA,EAAA,CAER,IAGIK,kCAAAA,KAAAC,kBAAA,UAAA,EAAA,UAAA;AAAA,MAACN,kCAAA,IAAA,MAAA,EAAG,WAAU,wCAAuC,UAErD,sBAAA;AAAA,MAEAK,kCAAAA,KAAC,OAAI,EAAA,WAAU,wDACX,UAAA;AAAA,QAACA,kCAAAA,KAAA,OAAA,EAAI,WAAU,qCACX,UAAA;AAAA,UAACL,kCAAA,IAAA,QAAA,EAAK,WAAU,4CAA2C,UAAQ,YAAA;AAAA,UACnEK,kCAAAA,KAAC,OAAI,EAAA,WAAU,+BACX,UAAA;AAAA,YAACA,kCAAAA,KAAA,QAAA,EAAK,WAAU,qBACX,UAAA;AAAA,cAAS,mCAAA,MAAM,GAAG;AAAA,cAAG;AAAA,cAAI,mCAAS,MAAM;AAAA,YAAE,GAC/C;AAAA,YACAL,kCAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACG,SAAS;AAAA,gBACT,WAAU;AAAA,gBACb,UAAA;AAAA,cAAA;AAAA,YAED;AAAA,UAAA,GACJ;AAAA,QAAA,GACJ;AAAA,QAEC,eAEOK,kCAAA,KAAAC,4BAAA,EAAA,UAAA;AAAA,UAACD,kCAAAA,KAAA,OAAA,EAAI,WAAU,qCACX,UAAA;AAAA,YAACL,kCAAA,IAAA,QAAA,EAAK,WAAU,4CAA2C,UAAO,WAAA;AAAA,YAClEK,kCAAAA,KAAC,QAAK,EAAA,WAAU,eAAe,UAAA;AAAA,cAAY,YAAA;AAAA,cAAY;AAAA,cAAE,+CAAe;AAAA,YAAA,GAAO;AAAA,UAAA,GACnF;AAAA,UACAA,kCAAAA,KAAC,OAAI,EAAA,WAAU,qCACX,UAAA;AAAA,YAACL,kCAAA,IAAA,QAAA,EAAK,WAAU,4CAA2C,UAAQ,YAAA;AAAA,YAClEA,kCAAA,IAAA,QAAA,EAAK,WAAU,eAAe,6DAAiB,MAAK;AAAA,UAAA,GACzD;AAAA,QAAA,GACJ;AAAA,MAAA,GAER;AAAA,MAGAA,kCAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,SAAS;AAAA,UACT,UAAU;AAAA,UACV,WAAU;AAAA,UAET,yBAEOK,kCAAAA,KAAAC,kBAAA,UAAA,EAAA,UAAA;AAAA,YAACN,kCAAAA,IAAA,SAAA,EAAQ,WAAU,uBAAuB,CAAA;AAAA,YAC1CA,kCAAAA,IAAC,UAAK,UAAqB,wBAAA,CAAA;AAAA,UAAA,EAAA,CAC/B,IAGIK,kCAAAA,KAAAC,kBAAA,UAAA,EAAA,UAAA;AAAA,YAACN,kCAAAA,IAAA,KAAA,EAAI,WAAU,UAAU,CAAA;AAAA,YACzBA,kCAAAA,IAAC,UAAK,UAAY,eAAA,CAAA;AAAA,UAAA,GACtB;AAAA,QAAA;AAAA,MAER;AAAA,MAEAK,kCAAAA,KAAC,KAAE,EAAA,WAAU,yBAAwB,UAAA;AAAA,QAAA;AAAA,QACN,+CAAe;AAAA,QAAO;AAAA,MAAA,GACrD;AAAA,IAAA,GACJ;AAAA,EAAA,EAER,CAAA,EACJ,CAAA;AAER;AAEA,MAAM,iBAAiB,CAAC;AAAA,EACpB;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,QAAQ;AACZ,MAAM;AAEF,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,eAAe;AAC9D,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,CAAE,CAAA;AAC3C,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,CAAE,CAAA;AACvC,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAS,IAAI;AAC3D,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,IAAI;AACvD,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,IAAI;AACvD,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,EAAE;AACvC,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,IAAI;AACnD,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,EAAE;AACrC,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,KAAK;AAC1C,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,EAAE;AACvC,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,KAAK;AAGtD,QAAM,aAAa,OAAO,IAAI,WAAW,QAAQ,QAAQ,SAAS,CAAC;AAGnE,QAAM,eAAe,0BAA0B;AAAA,IAC3C,SAAS,gBAAgB;AAAA,IACzB,gBAAgB;AAAA;AAAA,IAEhB,QAAQ;AAAA,MACJ;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,UACL,SAAS,EAAE,MAAM,CAAC,0BAA0B,EAAE;AAAA,QAClD;AAAA,QACA,gBAAgB;AAAA,UACZ,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,UAAU;AAAA,QACd;AAAA,MACJ;AAAA,MACA;AAAA,QACI,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,UACL,SAAS,EAAE,MAAM,CAAC,mCAAmC,EAAE;AAAA,QAC3D;AAAA,QACA,gBAAgB;AAAA,UACZ,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,UAAU;AAAA,QACd;AAAA,MACJ;AAAA,IACJ;AAAA,EAAA,CACH;AAGD,YAAU,MAAM;AACZ,QAAI,QAAQ;AACU;IACtB;AAAA,EAAA,GACD,CAAC,MAAM,CAAC;AAEX,QAAM,oBAAoB,YAAY;AAC9B,QAAA;AACA,iBAAW,IAAI;AACf,eAAS,EAAE;AAEX,YAAM,CAAC,aAAa,SAAS,IAAI,MAAM,QAAQ,IAAI;AAAA,QAC/C,WAAW,QAAQ,YAAY;AAAA,QAC/B,WAAW,QAAQ,eAAe;AAAA,MAAA,CACrC;AAEW,kBAAA,YAAY,YAAY,CAAA,CAAE;AAC5B,gBAAA,UAAU,eAAe,CAAA,CAAE;AAErC,UAAI,OAAO;AACC,gBAAA,IAAI,yBAAyB,YAAY,QAAQ;AACjD,gBAAA,IAAI,uBAAuB,UAAU,WAAW;AAAA,MAC5D;AAAA,aACK,KAAK;AACF,cAAA,MAAM,iCAAiC,GAAG;AAClD,eAAS,mDAAmD;AAAA,IAAA,UAC9D;AACE,iBAAW,KAAK;AAAA,IACpB;AAAA,EAAA;AAGE,QAAA,qBAAqB,CAAC,WAAW;AACnC,qBAAiB,MAAM;AACvB,mBAAe,gBAAgB;AAAA,EAAA;AAG7B,QAAA,sBAAsB,OAAO,YAAY;AAC3C,uBAAmB,OAAO;AAG1B,UAAM,gBAAgB,OAAO;AAAA,MAAO,CAAA,UAAA;;AAChC,4BAAM,YAAN,mBAAe,eAAc,QAAQ,aAAa,MAAM,cAAc,QAAQ;AAAA;AAAA,IAAA;AAG9E,QAAA,cAAc,SAAS,GAAG;AAE1B,qBAAe,cAAc;AAAA,IAAA,WACtB,cAAc,WAAW,GAAG;AAE7B,YAAA,QAAQ,cAAc,CAAC;AAC7B,uBAAiB,KAAK;AAChB,YAAA,gBAAgB,SAAS,KAAK;AAAA,IAAA,OACjC;AAEM,eAAA,iCAAiC,QAAQ,IAAI,EAAE;AACxD,qBAAe,OAAO;AAAA,IAC1B;AAAA,EAAA;AAGE,QAAA,oBAAoB,OAAO,UAAU;AACvC,qBAAiB,KAAK;AAChB,UAAA,gBAAgB,iBAAiB,KAAK;AAAA,EAAA;AAG1C,QAAA,kBAAkB,OAAO,SAAS,UAAU;AAC1C,QAAA;AACA,iBAAW,IAAI;AAEf,YAAM,iBAAiB;AAAA,QACnB,QAAQ,OAAO;AAAA,QACf,UAAU,MAAM;AAAA,QAChB,SAAS,QAAQ;AAAA,QACjB,eAAe,OAAO;AAAA,QACtB,aAAa,OAAO;AAAA,QACpB,UAAU;AAAA,UACN,GAAG,OAAO;AAAA,UACV;AAAA,UACA,iBAAiB,QAAQ;AAAA,UACzB,eAAe,MAAM;AAAA;AAAA,UAErB,yBAAyB,OAAO;AAAA,QACpC;AAAA,MAAA;AAGI,cAAA,IAAI,6CAA6C,cAAc;AAEvE,YAAM,UAAU,MAAM,WAAW,QAAQ,cAAc,cAAc;AACrE,qBAAe,QAAQ,OAAO;AAE9B,UAAI,kBAAkB,UAAU;AAC5B,uBAAe,gBAAgB;AAAA,MAAA,OAC5B;AACG,cAAA,eAAe,QAAQ,OAAO;AACpC,uBAAe,SAAS;AAAA,MAC5B;AAAA,aACK,KAAK;AACF,cAAA,MAAM,8BAA8B,GAAG;AACtC,eAAA,IAAI,WAAW,0BAA0B;AAClD,qBAAe,OAAO;AAAA,IAAA,UACxB;AACE,iBAAW,KAAK;AAAA,IACpB;AAAA,EAAA;AAGE,QAAA,iBAAiB,OAAO,YAAY;;AAClC,QAAA;AACM,YAAA,qBAAmB,aAAQ,aAAR,mBAAkB,sBACvC,YAAO,4BAAP,oBAAiC,mDAAiB,cAAa;AAEnE,UAAI,CAAC,kBAAkB;AACb,cAAA,IAAI,MAAM,oCAAoC;AAAA,MACxD;AAEA,UAAI,SAAS;AAEb,WAAI,mDAAiB,UAAS,eAAc,mDAAiB,UAAS,OAAO;AAChE,kBAAA,+CAAe,mBAClB,YAAY,cAAc,eAAe,qBAAqB,gBAAgB,YAAY,QAAQ,cAAc,KAAK,IAAI,IAAI,cAAc,QAAQ,CAAC,KACpJ,YAAY,gBAAgB,UAAU,QAAQ,WAAW;AAAA,MAAA,YACxD,mDAAiB,UAAS,QAAQ;AACzC,iBAAS,QAAQ,gBAAgB,WAAW,QAAQ,WAAW;AAAA,MAAA,OAC5D;AACH,iBAAS,GAAG,+CAAe,MAAM,IAAI,gBAAgB,WAAW,QAAQ,WAAW;AAAA,MACvF;AAGA,gBAAU,gBAAgB;AAC1B,+BAAyB,QAAQ,EAAE;AAAA,aAE9B,KAAK;AACF,cAAA,MAAM,8BAA8B,GAAG;AAC/C,eAAS,4BAA4B;AACrC,qBAAe,OAAO;AAAA,IAC1B;AAAA,EAAA;AAGE,QAAA,2BAA2B,OAAO,cAAc;AAClD,UAAM,cAAc;AACpB,QAAI,WAAW;AAEf,UAAM,eAAe,YAAY;;AACzB,UAAA;AACA,cAAM,SAAS,MAAM,WAAW,QAAQ,gBAAgB,SAAS;AAEjE,YAAI,OAAO,cAAY,YAAO,YAAP,mBAAgB,kBAAiB;AAC1C,oBAAA,OAAO,QAAQ,eAAe;AACxC,gBAAM,qBAAqB,WAAW,OAAO,QAAQ,eAAe;AAC7D,iBAAA;AAAA,QACX;AAEA;AACA,YAAI,WAAW,aAAa;AACxB,qBAAW,cAAc,GAAI;AAAA,QAAA,OAC1B;AACH,mBAAS,8DAA8D;AACvE,yBAAe,OAAO;AAAA,QAC1B;AAEO,eAAA;AAAA,eACF,KAAK;AACF,gBAAA,MAAM,+BAA+B,GAAG;AAChD;AACA,YAAI,WAAW,aAAa;AACxB,qBAAW,cAAc,GAAI;AAAA,QAAA,OAC1B;AACH,mBAAS,6BAA6B;AACtC,yBAAe,OAAO;AAAA,QAC1B;AACO,eAAA;AAAA,MACX;AAAA,IAAA;AAGJ,eAAW,cAAc,GAAI;AAAA,EAAA;AAG3B,QAAA,wBAAwB,OAAO,oBAAoB;AACrD,cAAU,eAAe;AACzB,mBAAe,YAAY;AAEvB,QAAA;AACA,YAAM,WAAW,QAAQ;AAAA,QACrB,YAAY;AAAA,QACZ;AAAA,SACA,mDAAiB,cAAa;AAAA,QAC9B;AAAA,MAAA;AAGE,YAAA,qBAAqB,YAAY,IAAI,eAAe;AAAA,aACrDI,QAAO;AACJ,cAAA,MAAM,8BAA8BA,MAAK;AAC3C,YAAA,qBAAqB,YAAY,IAAI,eAAe;AAAA,IAC9D;AAAA,EAAA;AAGE,QAAA,uBAAuB,OAAO,WAAW,oBAAoB;AAC/D,mBAAe,SAAS;AAExB,QAAI,WAAW;AACX,gBAAU,WAAW,iBAAiB;AAAA,QAClC,SAAS,mDAAiB;AAAA,QAC1B,OAAO,+CAAe;AAAA,QACtB,QAAQ,2CAAa;AAAA,QACrB,QAAQ;AAAA,MAAA,CACX;AAAA,IACL;AAAA,EAAA;AAGE,QAAA,kBAAkB,OAAO,SAAS;AAChC,QAAA;AACM,YAAA,UAAU,UAAU,UAAU,IAAI;AACxC,gBAAU,IAAI;AACd,iBAAW,MAAM,UAAU,KAAK,GAAG,GAAI;AAAA,aAClC,KAAK;AACF,cAAA,MAAM,mBAAmB,GAAG;AAAA,IACxC;AAAA,EAAA;AAGJ,QAAM,cAAc,MAAM;AACtB,mBAAe,eAAe;AAC9B,qBAAiB,IAAI;AACrB,uBAAmB,IAAI;AACvB,qBAAiB,IAAI;AACrB,cAAU,EAAE;AACZ,mBAAe,IAAI;AACnB,aAAS,EAAE;AACX,cAAU,EAAE;AAEZ,QAAI,SAAS;AACD;IACZ;AAAA,EAAA;AAGJ,QAAM,SAAS,MAAM;AACjB,QAAI,gBAAgB,kBAAkB;AAClC,qBAAe,eAAe;AAAA,IAAA,WACvB,gBAAgB,gBAAgB;AACvC,qBAAe,gBAAgB;AAAA,IACxB,WAAA,gBAAgB,oBAAoB,gBAAgB,WAAW;AAEtE,YAAM,gBAAgB,OAAO;AAAA,QAAO,CAAA,UAAA;;AAChC,8BAAM,YAAN,mBAAe,gBAAc,mDAAiB,cAAa,MAAM,eAAc,mDAAiB;AAAA;AAAA,MAAA;AAEhG,UAAA,cAAc,SAAS,GAAG;AAC1B,uBAAe,cAAc;AAAA,MAAA,OAC1B;AACH,uBAAe,gBAAgB;AAAA,MACnC;AAAA,IACJ;AAAA,EAAA;AAGA,MAAA,CAAC,OAAe,QAAA;AAGhB,SAAAJ,uCAAC,yBAAsB,QAAQ,cAAc,cAAc,EAAE,SAAS,gBAAgB,kBAAA,GAClF,UAAA;AAAA,IAACL,kCAAAA,IAAA,OAAA,EAAI,WAAU,+FACX,UAAAK,kCAAA;AAAA,MAAC,OAAO;AAAA,MAAP;AAAA,QACG,SAAS,EAAE,OAAO,KAAK,SAAS,EAAE;AAAA,QAClC,SAAS,EAAE,OAAO,GAAG,SAAS,EAAE;AAAA,QAChC,MAAM,EAAE,OAAO,KAAK,SAAS,EAAE;AAAA,QAC/B,WAAW,wEAAwE,UAAU,SAAS,2BAA2B,wBAC7H;AAAA,QAGJ,UAAA;AAAA,UAACA,kCAAAA,KAAA,OAAA,EAAI,WAAU,8DACT,UAAA;AAAA,YAAA,gBAAgB,mBAAmB,gBAAgB,aAAa,gBAAgB,WAC9EL,kCAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACG,SAAS;AAAA,gBACT,WAAU;AAAA,gBAEV,UAAAA,kCAAAA,IAAC,WAAU,EAAA,WAAU,UAAU,CAAA;AAAA,cAAA;AAAA,YACnC;AAAA,YAGJA,kCAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACG,SAAS;AAAA,gBACT,WAAU;AAAA,gBAEV,UAAAA,kCAAAA,IAAC,GAAE,EAAA,WAAU,UAAU,CAAA;AAAA,cAAA;AAAA,YAC3B;AAAA,YAEAK,kCAAAA,KAAC,OAAI,EAAA,WAAU,eACX,UAAA;AAAA,cAACA,kCAAAA,KAAA,OAAA,EAAI,WAAU,mDACX,UAAA;AAAA,gBAACL,kCAAAA,IAAA,UAAA,EAAS,WAAU,yBAAyB,CAAA;AAAA,gBAC5CA,kCAAA,IAAA,MAAA,EAAG,WAAU,qBAAoB,UAAe,mBAAA;AAAA,gBACjDA,kCAAAA,IAAC,UAAS,EAAA,WAAU,yBAAyB,CAAA;AAAA,cAAA,GACjD;AAAA,cACC,gBACGA,kCAAA,IAAC,KAAE,EAAA,WAAU,iDACR,UACL,cAAA;AAAA,oDAEH,OAAI,EAAA,WAAU,QACX,UAACK,kCAAA,KAAA,QAAA,EAAK,WAAU,qCAAoC,UAAA;AAAA,gBAAA;AAAA,gBAC9C,OAAO,OAAO,QAAQ,CAAC;AAAA,cAAA,EAAA,CAC7B,EACJ,CAAA;AAAA,YAAA,GACJ;AAAA,UAAA,GACJ;AAAA,gDAGC,OAAI,EAAA,WAAU,qBACX,UAACA,kCAAA,KAAA,iBAAA,EAAgB,MAAK,QAEjB,UAAA;AAAA,YAAA,gBAAgB,mBACbA,kCAAA;AAAA,cAAC,OAAO;AAAA,cAAP;AAAA,gBAEG,SAAS,EAAE,GAAG,IAAI,SAAS,EAAE;AAAA,gBAC7B,SAAS,EAAE,GAAG,GAAG,SAAS,EAAE;AAAA,gBAC5B,MAAM,EAAE,GAAG,KAAK,SAAS,EAAE;AAAA,gBAC3B,WAAU;AAAA,gBAEV,UAAA;AAAA,kBAACL,kCAAA,IAAA,MAAA,EAAG,WAAU,0CAAyC,UAEvD,yBAAA;AAAA,kBAEAA,kCAAA;AAAA,oBAAC,OAAO;AAAA,oBAAP;AAAA,sBACG,YAAY,EAAE,OAAO,KAAK;AAAA,sBAC1B,UAAU,EAAE,OAAO,KAAK;AAAA,sBACxB,SAAS,MAAM,mBAAmB,QAAQ;AAAA,sBAC1C,WAAU;AAAA,sBAEV,UAAAK,kCAAA,KAAC,OAAI,EAAA,WAAU,+BACX,UAAA;AAAA,wBAAAL,kCAAAA,IAAC,SAAI,WAAU,yFACX,gDAAC,QAAO,EAAA,WAAU,0BAAyB,EAC/C,CAAA;AAAA,wBACAK,kCAAAA,KAAC,OAAI,EAAA,WAAU,aACX,UAAA;AAAA,0BAACL,kCAAA,IAAA,OAAA,EAAI,WAAU,iBAAgB,UAAc,kBAAA;AAAA,0BAC5CA,kCAAA,IAAA,OAAA,EAAI,WAAU,4CAA2C,UAE1D,kCAAA;AAAA,wBAAA,GACJ;AAAA,wBACAA,kCAAAA,IAAC,KAAI,EAAA,WAAU,iCAAiC,CAAA;AAAA,sBAAA,GACpD;AAAA,oBAAA;AAAA,kBACJ;AAAA,kBAEAA,kCAAA;AAAA,oBAAC,OAAO;AAAA,oBAAP;AAAA,sBACG,YAAY,EAAE,OAAO,KAAK;AAAA,sBAC1B,UAAU,EAAE,OAAO,KAAK;AAAA,sBACxB,SAAS,MAAM,mBAAmB,IAAI;AAAA,sBACtC,WAAU;AAAA,sBAEV,UAAAK,kCAAA,KAAC,OAAI,EAAA,WAAU,+BACX,UAAA;AAAA,wBAAAL,kCAAAA,IAAC,SAAI,WAAU,yFACX,gDAAC,QAAO,EAAA,WAAU,0BAAyB,EAC/C,CAAA;AAAA,wBACAK,kCAAAA,KAAC,OAAI,EAAA,WAAU,aACX,UAAA;AAAA,0BAACL,kCAAA,IAAA,OAAA,EAAI,WAAU,iBAAgB,UAAO,WAAA;AAAA,0BACrCA,kCAAA,IAAA,OAAA,EAAI,WAAU,4CAA2C,UAE1D,2BAAA;AAAA,wBAAA,GACJ;AAAA,sBAAA,GACJ;AAAA,oBAAA;AAAA,kBACJ;AAAA,gBAAA;AAAA,cAAA;AAAA,cA/CI;AAAA,YAgDR;AAAA,YAIH,gBAAgB,oBACbK,kCAAA;AAAA,cAAC,OAAO;AAAA,cAAP;AAAA,gBAEG,SAAS,EAAE,GAAG,IAAI,SAAS,EAAE;AAAA,gBAC7B,SAAS,EAAE,GAAG,GAAG,SAAS,EAAE;AAAA,gBAC5B,MAAM,EAAE,GAAG,KAAK,SAAS,EAAE;AAAA,gBAC3B,WAAU;AAAA,gBAEV,UAAA;AAAA,kBAACL,kCAAA,IAAA,MAAA,EAAG,WAAU,0CAAyC,UAEvD,kBAAA;AAAA,kBAEC,UACIA,kCAAA,IAAA,OAAA,EAAI,WAAU,4BACX,UAAAA,sCAAC,WAAQ,WAAU,sCAAA,CAAsC,EAC7D,CAAA,0CAEC,OAAI,EAAA,WAAU,aACV,UAAS,SAAA,IAAI,CAAC,YACXA,kCAAA;AAAA,oBAAC,OAAO;AAAA,oBAAP;AAAA,sBAEG,YAAY,EAAE,OAAO,KAAK;AAAA,sBAC1B,UAAU,EAAE,OAAO,KAAK;AAAA,sBACxB,SAAS,MAAM,oBAAoB,OAAO;AAAA,sBAC1C,WAAU;AAAA,sBAEV,UAAAK,kCAAA,KAAC,OAAI,EAAA,WAAU,+BACV,UAAA;AAAA,wBAAA,QAAQ,OACLL,kCAAA;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACG,KAAK,QAAQ;AAAA,4BACb,KAAK,QAAQ;AAAA,4BACb,WAAU;AAAA,0BAAA;AAAA,wBAAA,IAGbA,kCAAA,IAAA,OAAA,EAAI,WAAU,oFACX,gDAAC,QAAK,EAAA,WAAU,oCACX,UAAA,QAAQ,UAAU,OAAO,CAAC,EAAE,cACjC,CAAA,GACJ;AAAA,wBAEJK,kCAAAA,KAAC,OAAI,EAAA,WAAU,oBACX,UAAA;AAAA,0BAAAL,kCAAA,IAAC,OAAI,EAAA,WAAU,iBAAiB,UAAA,QAAQ,MAAK;AAAA,gEAC5C,OAAI,EAAA,WAAU,4CACV,UAAQ,QAAA,UAAU,eACvB;AAAA,wBAAA,GACJ;AAAA,wBACAA,kCAAAA,IAAC,aAAY,EAAA,WAAU,6CAA6C,CAAA;AAAA,sBAAA,GACxE;AAAA,oBAAA;AAAA,oBA3BK,QAAQ;AAAA,kBA6BpB,CAAA,GACL;AAAA,gBAAA;AAAA,cAAA;AAAA,cAhDA;AAAA,YAkDR;AAAA,YAIH,gBAAgB,kBACbK,kCAAA;AAAA,cAAC,OAAO;AAAA,cAAP;AAAA,gBAEG,SAAS,EAAE,GAAG,IAAI,SAAS,EAAE;AAAA,gBAC7B,SAAS,EAAE,GAAG,GAAG,SAAS,EAAE;AAAA,gBAC5B,MAAM,EAAE,GAAG,KAAK,SAAS,EAAE;AAAA,gBAC3B,WAAU;AAAA,gBAEV,UAAA;AAAA,kBAACA,kCAAAA,KAAA,MAAA,EAAG,WAAU,0CAAyC,UAAA;AAAA,oBAAA;AAAA,oBAClC,mDAAiB;AAAA,kBAAA,GACtC;AAAA,kBAEC,UACGL,kCAAAA,IAAC,OAAI,EAAA,WAAU,4BACX,UAACA,sCAAA,SAAA,EAAQ,WAAU,uCAAsC,GAC7D,IAEAA,kCAAAA,IAAC,OAAI,EAAA,WAAU,aACV,UACI,OAAA;AAAA,oBAAO,CAAA,UAAA;;AACJ,0CAAM,YAAN,mBAAe,gBAAc,mDAAiB,cAC9C,MAAM,eAAc,mDAAiB;AAAA;AAAA,kBAAA,EAExC,IAAI,CAAC,UACFA,kCAAA;AAAA,oBAAC,OAAO;AAAA,oBAAP;AAAA,sBAEG,YAAY,EAAE,OAAO,KAAK;AAAA,sBAC1B,UAAU,EAAE,OAAO,KAAK;AAAA,sBACxB,SAAS,MAAM,kBAAkB,KAAK;AAAA,sBACtC,WAAU;AAAA,sBAEV,UAAAK,kCAAA,KAAC,OAAI,EAAA,WAAU,+BACV,UAAA;AAAA,wBAAA,MAAM,OACHL,kCAAA;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACG,KAAK,MAAM;AAAA,4BACX,KAAK,MAAM;AAAA,4BACX,WAAU;AAAA,0BAAA;AAAA,wBAAA,IAGdA,kCAAAA,IAAC,OAAI,EAAA,WAAU,oFACX,UAACA,kCAAA,IAAA,QAAA,EAAK,WAAU,oCACX,UAAM,MAAA,OAAO,OAAO,CAAC,EAC1B,CAAA,GACJ;AAAA,wBAEJK,kCAAAA,KAAC,OAAI,EAAA,WAAU,oBACX,UAAA;AAAA,0BAAAL,kCAAA,IAAC,OAAI,EAAA,WAAU,iBAAiB,UAAA,MAAM,MAAK;AAAA,0BAC3CK,kCAAAA,KAAC,OAAI,EAAA,WAAU,4CACV,UAAA;AAAA,4BAAM,MAAA;AAAA,4BACN,MAAM,gBACHL,kCAAAA,IAAC,QAAK,EAAA,WAAU,qEAAoE,UAEpF,cAAA;AAAA,0BAAA,GAER;AAAA,wBAAA,GACJ;AAAA,wBACAA,kCAAAA,IAAC,aAAY,EAAA,WAAU,6CAA6C,CAAA;AAAA,sBAAA,GACxE;AAAA,oBAAA;AAAA,oBAhCK,MAAM;AAAA,kBAkClB,CAAA,GAET;AAAA,gBAAA;AAAA,cAAA;AAAA,cA3DA;AAAA,YA6DR;AAAA,YAIH,gBAAgB,oBACbA,kCAAA;AAAA,cAAC,OAAO;AAAA,cAAP;AAAA,gBAEG,SAAS,EAAE,GAAG,IAAI,SAAS,EAAE;AAAA,gBAC7B,SAAS,EAAE,GAAG,GAAG,SAAS,EAAE;AAAA,gBAC5B,MAAM,EAAE,GAAG,KAAK,SAAS,EAAE;AAAA,gBAE3B,UAAAA,kCAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACG;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA,mBAAmB;AAAA,oBACnB,SAAS;AAAA,oBACT;AAAA,oBACA;AAAA,kBAAA;AAAA,gBACJ;AAAA,cAAA;AAAA,cAdI;AAAA,YAeR;AAAA,YAIH,gBAAgB,aACbK,kCAAA;AAAA,cAAC,OAAO;AAAA,cAAP;AAAA,gBAEG,SAAS,EAAE,GAAG,IAAI,SAAS,EAAE;AAAA,gBAC7B,SAAS,EAAE,GAAG,GAAG,SAAS,EAAE;AAAA,gBAC5B,MAAM,EAAE,GAAG,KAAK,SAAS,EAAE;AAAA,gBAC3B,WAAU;AAAA,gBAEV,UAAA;AAAA,kBAACA,kCAAAA,KAAA,OAAA,EAAI,WAAU,aACX,UAAA;AAAA,oBAACL,kCAAA,IAAA,MAAA,EAAG,WAAU,yBAAwB,UAAY,gBAAA;AAAA,oBACjDA,kCAAA,IAAA,KAAA,EAAE,WAAU,oCAAmC,UAEhD,0CAAA;AAAA,kBAAA,GACJ;AAAA,kBAEC,gDACI,OAAI,EAAA,WAAU,gDACX,UAACK,kCAAAA,KAAA,OAAA,EAAI,WAAU,4DAA2D,UAAA;AAAA,oBAAA;AAAA,oBAC5D,OAAO,MAAM,GAAG,EAAE;AAAA,oBAAE;AAAA,oBAAI,OAAO,MAAM,EAAE;AAAA,kBAAA,EAAA,CACrD,EACJ,CAAA;AAAA,kBAGH,eACGA,kCAAA,KAAC,OAAI,EAAA,WAAU,aACX,UAAA;AAAA,oBAACA,kCAAAA,KAAA,OAAA,EAAI,WAAU,wDACX,UAAA;AAAA,sBAACA,kCAAAA,KAAA,OAAA,EAAI,WAAU,qCACX,UAAA;AAAA,wBAACL,kCAAA,IAAA,QAAA,EAAK,WAAU,4CAA2C,UAAQ,YAAA;AAAA,wBAClEA,kCAAA,IAAA,QAAA,EAAK,WAAU,eAAe,6DAAiB,MAAK;AAAA,sBAAA,GACzD;AAAA,sBACAK,kCAAAA,KAAC,OAAI,EAAA,WAAU,qCACX,UAAA;AAAA,wBAACL,kCAAA,IAAA,QAAA,EAAK,WAAU,4CAA2C,UAAO,WAAA;AAAA,wBAClEK,kCAAAA,KAAC,QAAK,EAAA,WAAU,eAAe,UAAA;AAAA,0BAAY,YAAA;AAAA,0BAAY;AAAA,0BAAE,+CAAe;AAAA,wBAAA,GAAO;AAAA,sBAAA,GACnF;AAAA,oBAAA,GACJ;AAAA,oBAEAA,kCAAAA,KAAC,OAAI,EAAA,WAAU,uFACX,UAAA;AAAA,sBAACL,kCAAAA,IAAA,SAAA,EAAQ,WAAU,uBAAuB,CAAA;AAAA,sBAC1CA,kCAAAA,IAAC,UAAK,UAAsB,yBAAA,CAAA;AAAA,oBAAA,GAChC;AAAA,kBAAA,GACJ;AAAA,gBAAA;AAAA,cAAA;AAAA,cAtCA;AAAA,YAwCR;AAAA,YAIH,gBAAgB,gBACbK,kCAAA;AAAA,cAAC,OAAO;AAAA,cAAP;AAAA,gBAEG,SAAS,EAAE,OAAO,KAAK,SAAS,EAAE;AAAA,gBAClC,SAAS,EAAE,OAAO,GAAG,SAAS,EAAE;AAAA,gBAChC,WAAU;AAAA,gBAEV,UAAA;AAAA,kBAAAL,kCAAAA,IAAC,SAAI,WAAU,8FACX,gDAAC,SAAQ,EAAA,WAAU,uCAAsC,EAC7D,CAAA;AAAA,yDACC,OACG,EAAA,UAAA;AAAA,oBAACA,kCAAA,IAAA,MAAA,EAAG,WAAU,wCAAuC,UAAqB,yBAAA;AAAA,oBACzEA,kCAAA,IAAA,KAAA,EAAE,WAAU,yCAAwC,UAErD,uCAAA;AAAA,kBAAA,GACJ;AAAA,gBAAA;AAAA,cAAA;AAAA,cAbI;AAAA,YAcR;AAAA,YAIH,gBAAgB,aACbK,kCAAA;AAAA,cAAC,OAAO;AAAA,cAAP;AAAA,gBAEG,SAAS,EAAE,OAAO,KAAK,SAAS,EAAE;AAAA,gBAClC,SAAS,EAAE,OAAO,GAAG,SAAS,EAAE;AAAA,gBAChC,WAAU;AAAA,gBAEV,UAAA;AAAA,kBAAAL,kCAAAA,IAAC,SAAI,WAAU,gFACX,gDAAC,cAAa,EAAA,WAAU,0BAAyB,EACrD,CAAA;AAAA,yDACC,OACG,EAAA,UAAA;AAAA,oBAACA,kCAAA,IAAA,MAAA,EAAG,WAAU,wCAAuC,UAAmB,uBAAA;AAAA,oBACvEA,kCAAA,IAAA,KAAA,EAAE,WAAU,yCAAwC,UAErD,gDAAA;AAAA,kBAAA,GACJ;AAAA,kBAEC,gDACI,OAAI,EAAA,WAAU,8CACX,UAACK,kCAAAA,KAAA,OAAA,EAAI,WAAU,qCACX,UAAA;AAAA,oBAACL,kCAAA,IAAA,QAAA,EAAK,WAAU,4CAA2C,UAAY,gBAAA;AAAA,oBACvEK,kCAAAA,KAAC,OAAI,EAAA,WAAU,+BACX,UAAA;AAAA,sBAACA,kCAAAA,KAAA,QAAA,EAAK,WAAU,qBACX,UAAA;AAAA,wBAAO,OAAA,MAAM,GAAG,CAAC;AAAA,wBAAE;AAAA,wBAAI,OAAO,MAAM,EAAE;AAAA,sBAAA,GAC3C;AAAA,sBACAL,kCAAA;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACG,SAAS,MAAM,gBAAgB,MAAM;AAAA,0BACrC,WAAU;AAAA,0BAEV,UAAAA,kCAAAA,IAAC,MAAK,EAAA,WAAU,UAAU,CAAA;AAAA,wBAAA;AAAA,sBAC9B;AAAA,uBACC,mDAAiB,gBACdA,kCAAA;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACG,MAAM,GAAG,gBAAgB,WAAW,OAAO,MAAM;AAAA,0BACjD,QAAO;AAAA,0BACP,KAAI;AAAA,0BACJ,WAAU;AAAA,0BAEV,UAAAA,kCAAAA,IAAC,cAAa,EAAA,WAAU,UAAU,CAAA;AAAA,wBAAA;AAAA,sBACtC;AAAA,oBAAA,GAER;AAAA,kBAAA,EAAA,CACJ,EACJ,CAAA;AAAA,kBAGJA,kCAAA;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACG,SAAS;AAAA,sBACT,WAAU;AAAA,sBACb,UAAA;AAAA,oBAAA;AAAA,kBAED;AAAA,gBAAA;AAAA,cAAA;AAAA,cAjDI;AAAA,YAkDR;AAAA,YAIH,gBAAgB,WACbK,kCAAA;AAAA,cAAC,OAAO;AAAA,cAAP;AAAA,gBAEG,SAAS,EAAE,OAAO,KAAK,SAAS,EAAE;AAAA,gBAClC,SAAS,EAAE,OAAO,GAAG,SAAS,EAAE;AAAA,gBAChC,WAAU;AAAA,gBAEV,UAAA;AAAA,kBAAAL,kCAAAA,IAAC,SAAI,WAAU,8EACX,gDAAC,aAAY,EAAA,WAAU,wBAAuB,EAClD,CAAA;AAAA,yDACC,OACG,EAAA,UAAA;AAAA,oBAACA,kCAAA,IAAA,MAAA,EAAG,WAAU,sCAAqC,UAAc,kBAAA;AAAA,oBAChEA,kCAAA,IAAA,KAAA,EAAE,WAAU,yCACR,mBAAS,2CACd;AAAA,kBAAA,GACJ;AAAA,kBAEAK,kCAAAA,KAAC,OAAI,EAAA,WAAU,aACX,UAAA;AAAA,oBAAAL,kCAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACG,SAAS,MAAM;AACX,yCAAe,eAAe;AAC9B,mCAAS,EAAE;AAAA,wBACf;AAAA,wBACA,WAAU;AAAA,wBACb,UAAA;AAAA,sBAAA;AAAA,oBAED;AAAA,oBACAA,kCAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACG,SAAS;AAAA,wBACT,WAAU;AAAA,wBACb,UAAA;AAAA,sBAAA;AAAA,oBAED;AAAA,kBAAA,GACJ;AAAA,gBAAA;AAAA,cAAA;AAAA,cA/BI;AAAA,YAgCR;AAAA,UAAA,EAAA,CAER,EACJ,CAAA;AAAA,gDAGC,OAAI,EAAA,WAAU,uEACX,UAACK,kCAAA,KAAA,KAAA,EAAE,WAAU,yBAAwB,UAAA;AAAA,YAAA;AAAA,YACrBL,kCAAA,IAAA,QAAA,EAAK,WAAU,gCAA+B,UAAO,WAAA;AAAA,UAAA,EAAA,CACrE,EACJ,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAER;AAAA,0CAEC,aAAY,EAAA;AAAA,EACjB,EAAA,CAAA;AAER;ACviCA,MAAMQ,kBAAiB;AAAA,EACrB,YAAY,SAAS,QAAQ,WAAW;AACjC,SAAA,UAAU,QAAQ,SAAS,GAAG,IAAI,QAAQ,MAAM,GAAG,EAAE,IAAI;AAC9D,SAAK,SAAS;AACd,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,MAAM,QAAQ,UAAU,UAAU,IAAI;AACpC,UAAM,MAAM,GAAG,KAAK,OAAO,GAAG,QAAQ;AACtC,UAAM,UAAU;AAAA,MACd,gBAAgB;AAAA,MAChB,aAAa,KAAK;AAAA,MAClB,gBAAgB,KAAK;AAAA,MACrB,GAAG,QAAQ;AAAA,IAAA;AAGP,UAAA,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC,GAAG;AAAA,MACH;AAAA,IAAA,CACD;AAEG,QAAA,CAAC,SAAS,IAAI;AACV,YAAA,QAAQ,MAAM,SAAS,OAAO,MAAM,OAAO,CAAG,EAAA;AACpD,YAAM,IAAI,MAAM,MAAM,SAAS,QAAQ,SAAS,MAAM,EAAE;AAAA,IAC1D;AAEA,WAAO,SAAS;EAClB;AAAA,EAEA,MAAM,cAAc;AACd,QAAA;AACK,aAAA,MAAM,KAAK,QAAQ,eAAe;AAAA,aAClC,OAAO;AACN,cAAA,MAAM,6BAA6B,KAAK;AAEzC,aAAA;AAAA,QACL,UAAU;AAAA,UACR,EAAE,IAAI,KAAK,MAAM,YAAY,WAAW,YAAY,SAAS,OAAO,MAAM,WAAW;AAAA,UACrF,EAAE,IAAI,MAAM,MAAM,OAAO,WAAW,OAAO,SAAS,QAAQ,MAAM,MAAM;AAAA,QAC1E;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF;AAAA,EAEA,MAAM,YAAY;AACZ,QAAA;AACK,aAAA,MAAM,KAAK,QAAQ,2BAA2B;AAAA,aAC9C,OAAO;AACN,cAAA,MAAM,2BAA2B,KAAK;AAEvC,aAAA;AAAA,QACL,aAAa;AAAA,UACX;AAAA,YACE,IAAI;AAAA,YAAK,MAAM;AAAA,YAAc,QAAQ;AAAA,YACrC,iBAAiB;AAAA,YACjB,UAAU;AAAA,YAAG,WAAW;AAAA,YACxB,SAAS,EAAE,WAAW,YAAY,MAAM,WAAW;AAAA,UACrD;AAAA,QACF;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,MAAM;AACjB,WAAA,MAAM,KAAK,QAAQ,wBAAwB;AAAA,MAChD,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU,IAAI;AAAA,IAAA,CAC1B;AAAA,EACH;AACF;AAGA,MAAM,qBAAqB;AAAA,EACzB,cAAc;AACZ,SAAK,UAAU;AACf,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,MAAM,UAAU;AAEV,QAAA,CAAC,OAAO,UAAU;AACd,YAAA,IAAI,MAAM,4DAA4D;AAAA,IAC9E;AAGI,QAAA,OAAO,SAAS,WAAW;AAC7B,cAAQ,IAAI,iCAAiC,OAAO,SAAS,UAAU,MAAM;AAG7E,YAAM,mBAAmB,OAAO,SAAS,UAAU,KAAK,CAAA,aAAY,SAAS,UAAU;AACvF,UAAI,CAAC,kBAAkB;AACf,cAAA,IAAI,MAAM,4CAA4C;AAAA,MAC9D;AAEA,cAAQ,IAAI,yCAAyC;AACrD,aAAO,WAAW;AAAA,IACT,WAAA,CAAC,OAAO,SAAS,YAAY;AAChC,YAAA,IAAI,MAAM,4BAA4B;AAAA,IAC9C;AAEI,QAAA;AACF,cAAQ,IAAI,0CAA0C;AAGtD,YAAM,WAAW,MAAM,OAAO,SAAS,QAAQ;AAAA,QAC7C,QAAQ;AAAA,MAAA,CACT;AAED,UAAI,CAAC,YAAY,SAAS,WAAW,GAAG;AAChC,cAAA,IAAI,MAAM,+BAA+B;AAAA,MACjD;AAGA,YAAM,UAAU,MAAM,OAAO,SAAS,QAAQ;AAAA,QAC5C,QAAQ;AAAA,MAAA,CACT;AAEI,WAAA,UAAU,SAAS,CAAC;AACzB,WAAK,UAAU;AAEf,cAAQ,IAAI,oCAAoC;AACxC,cAAA,IAAI,cAAc,KAAK,OAAO;AAC9B,cAAA,IAAI,eAAe,KAAK,OAAO;AAGvC,UAAI,KAAK,QAAQ,YAAY,MAAM,8CAA8C;AAC/E,gBAAQ,KAAK,iDAAiD;AAC9D,gBAAQ,KAAK,wDAAwD;AAC7D,gBAAA,KAAK,gBAAgB,KAAK,OAAO;AAGzC,cAAM,IAAI,MAAM,2EAA2E,KAAK,QAAQ,MAAM,GAAG,CAAC,CAAC,MAAM,KAAK,QAAQ,MAAM,EAAE,CAAC,EAAE;AAAA,MACnJ;AAEA,aAAO,EAAE,SAAS,KAAK,SAAS,SAAS,KAAK;aAEvC,OAAO;AACN,cAAA,MAAM,+BAA+B,KAAK;AAClD,YAAM,IAAI,MAAM,MAAM,WAAW,+BAA+B;AAAA,IAClE;AAAA,EACF;AAAA,EAEA,MAAM,gBAAgB,UAAU;AAC1B,QAAA,CAAC,KAAK,SAAS;AACX,YAAA,IAAI,MAAM,sBAAsB;AAAA,IACxC;AAEI,QAAA;AACM,cAAA,IAAI,oCAAoC,QAAQ;AAGpD,UAAA,CAAC,OAAO,SAAS,YAAY;AACzB,cAAA,IAAI,MAAM,6BAA6B;AAAA,MAC/C;AAGA,UAAI,SAAS,QAAQ,SAAS,KAAK,SAAS,UAAU,GAAG;AAEvD,gBAAQ,IAAI,6BAA6B;AAErC,YAAA;AAEF,gBAAM,aAAa,MAAM,OAAO,SAAS,QAAQ;AAAA,YAC/C,QAAQ;AAAA,YACR,QAAQ,CAAC;AAAA,cACP,IAAI,SAAS;AAAA;AAAA,cACb,MAAM,qCAAqC,KAAK,QAAQ,MAAM,CAAC,CAAC;AAAA;AAAA,eAC/D,QAAQ;AAAA,UAAA,CACZ;AAEK,gBAAA,UAAU,SAAS,YAAY,EAAE;AACvC,gBAAM,cAAc,UAAU;AAEtB,kBAAA,IAAI,oBAAoB,WAAW;AAG3C,gBAAM,YAAY,SAAS,KAAK,MAAM,GAAG;AACnC,gBAAA,oBAAoB,SAAS,WAAW,EAAE;AAChD,gBAAM,wBAAwB,oBAAoB;AAE1C,kBAAA,IAAI,0BAA0B,qBAAqB;AAE3D,cAAI,UAAU,mBAAmB;AAC/B,kBAAM,IAAI,MAAM,uCAAuC,WAAW,kBAAkB,qBAAqB,OAAO;AAAA,UAClH;AAAA,iBACO,cAAc;AACb,kBAAA,KAAK,4BAA4B,YAAY;AAAA,QAEvD;AAAA,MACF;AAGI,UAAA;AACF,cAAM,gBAAgB,MAAM,OAAO,SAAS,QAAQ;AAAA,UAClD,QAAQ;AAAA,UACR,QAAQ,CAAC,KAAK,SAAS,QAAQ;AAAA,QAAA,CAChC;AAEK,cAAA,aAAa,SAAS,eAAe,EAAE,IAAI,KAAK,IAAI,IAAI,EAAE;AACxD,gBAAA,IAAI,0BAA0B,UAAU;AAEhD,YAAI,aAAa,MAAO;AACtB,gBAAM,IAAI,MAAM,2CAA2C,WAAW,QAAQ,CAAC,CAAC,kCAAkC;AAAA,QACpH;AAAA,eACO,UAAU;AACT,gBAAA,KAAK,gCAAgC,QAAQ;AAAA,MACvD;AAGA,YAAM,eAAe;AAAA,QACnB,GAAG;AAAA,QACH,MAAM,KAAK;AAAA,MAAA;AAIT,UAAA;AACF,cAAM,cAAc,MAAM,OAAO,SAAS,QAAQ;AAAA,UAChD,QAAQ;AAAA,UACR,QAAQ,CAAC,YAAY;AAAA,QAAA,CACtB;AAGD,cAAM,WAAW,KAAK,MAAM,SAAS,aAAa,EAAE,IAAI,GAAG;AAC3D,qBAAa,MAAM,KAAK,SAAS,SAAS,EAAE,CAAC;AAE7C,gBAAQ,IAAI,mBAAmB,SAAS,aAAa,EAAE,CAAC;AAChD,gBAAA,IAAI,8BAA8B,QAAQ;AAAA,eAE3C,UAAU;AACT,gBAAA,KAAK,0BAA0B,QAAQ;AAE/C,qBAAa,MAAM;AAAA,MACrB;AAEQ,cAAA,IAAI,gCAAgC,YAAY;AAExD,YAAM,SAAS,MAAM,OAAO,SAAS,QAAQ;AAAA,QAC3C,QAAQ;AAAA,QACR,QAAQ,CAAC,YAAY;AAAA,MAAA,CACtB;AAEO,cAAA,IAAI,oCAAoC,MAAM;AAC/C,aAAA;AAAA,aAEA,OAAO;AACN,cAAA,MAAM,uBAAuB,KAAK;AAEtC,UAAA,MAAM,SAAS,MAAM;AACjB,cAAA,IAAI,MAAM,+BAA+B;AAAA,MACtC,WAAA,MAAM,QAAQ,SAAS,oBAAoB,GAAG;AACjD,cAAA,IAAI,MAAM,8BAA8B;AAAA,MACrC,WAAA,MAAM,QAAQ,SAAS,KAAK,GAAG;AAClC,cAAA,IAAI,MAAM,kEAAkE;AAAA,MACzE,WAAA,MAAM,QAAQ,SAAS,gBAAgB,GAAG;AAC7C,cAAA,IAAI,MAAM,uHAAuH;AAAA,MAAA,OAClI;AACL,cAAM,IAAI,MAAM,MAAM,WAAW,oBAAoB;AAAA,MACvD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,cAAc;AACL,WAAA,CAAC,CAAC,KAAK;AAAA,EAChB;AACF;AAGA,MAAM,uBAAuB,CAAC;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AACV,MAAM;;AACJ,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,QAAQ;AACvD,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,CAAE,CAAA;AAC3C,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,CAAE,CAAA;AACvC,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAS,IAAI;AAC3D,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,IAAI;AACvD,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,IAAI;AACvD,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,IAAI;AACnD,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,EAAE;AACrC,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,IAAI,sBAAsB;AAC/D,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAS,KAAK;AAC5D,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,KAAK;AAElD,QAAM,MAAM,OAAO,IAAIA,kBAAiB,QAAQ,QAAQ,SAAS,CAAC;AAGlE,YAAU,MAAM;AACd,QAAI,QAAQ;AACD;AACE;IACb;AAAA,EAAA,GACC,CAAC,MAAM,CAAC;AAEX,QAAM,aAAa,MAAM;AACvB,mBAAe,QAAQ;AACvB,uBAAmB,IAAI;AACvB,qBAAiB,IAAI;AACrB,qBAAiB,IAAI;AACrB,mBAAe,IAAI;AACnB,aAAS,EAAE;AACX,uBAAmB,KAAK;AACxB,kBAAc,KAAK;AACT,cAAA,IAAI,sBAAsB;AAAA,EAAA;AAGtC,QAAM,WAAW,YAAY;;AACvB,QAAA;AACF,iBAAW,IAAI;AACf,eAAS,EAAE;AAEX,cAAQ,IAAI,mCAAmC;AAC/C,YAAM,CAAC,aAAa,SAAS,IAAI,MAAM,QAAQ,IAAI;AAAA,QACjD,IAAI,QAAQ,YAAY;AAAA,QACxB,IAAI,QAAQ,UAAU;AAAA,MAAA,CACvB;AAEW,kBAAA,YAAY,YAAY,CAAA,CAAE;AAC5B,gBAAA,UAAU,eAAe,CAAA,CAAE;AAErC,cAAQ,IAAI,uBAAsBK,MAAA,YAAY,aAAZ,gBAAAA,IAAsB,MAAM;AAC9D,cAAQ,IAAI,qBAAoBC,MAAA,UAAU,gBAAV,gBAAAA,IAAuB,MAAM;AAAA,aAEtD,KAAK;AACJ,cAAA,MAAM,wBAAwB,GAAG;AACzC,eAAS,sDAAsD;AAAA,IAAA,UAC/D;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EAAA;AAIF,QAAM,gBAAgB,YAAY;AAC5B,QAAA;AACF,iBAAW,IAAI;AACf,eAAS,EAAE;AAEL,YAAA,aAAa,MAAM,OAAO;AAChC,yBAAmB,IAAI;AAEf,cAAA,IAAI,oCAAoC,WAAW,OAAO;AAAA,aAE3D,KAAK;AACJ,cAAA,MAAM,6BAA6B,GAAG;AAC9C,eAAS,IAAI,OAAO;AAAA,IAAA,UACpB;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EAAA;AAIF,QAAM,gBAAgB,YAAY;AAC5B,QAAA;AACF,iBAAW,IAAI;AACf,eAAS,EAAE;AAEX,YAAM,iBAAiB;AAAA,QACrB,QAAQ,OAAO;AAAA,QACf,UAAU,cAAc;AAAA,QACxB,SAAS,gBAAgB;AAAA,QACzB,eAAe,OAAO;AAAA,QACtB,aAAa,OAAO;AAAA,QACpB,UAAU;AAAA,UACR,GAAG,OAAO;AAAA,UACV,yBAAyB,OAAO;AAAA,UAChC;AAAA,UACA,iBAAiB,gBAAgB;AAAA,UACjC,eAAe,cAAc;AAAA,QAC/B;AAAA,MAAA;AAGM,cAAA,IAAI,wBAAwB,cAAc;AAClD,YAAM,UAAU,MAAM,IAAI,QAAQ,cAAc,cAAc;AAC9D,qBAAe,QAAQ,OAAO;AAE9B,cAAQ,IAAI,sBAAsB,QAAQ,QAAQ,EAAE;AAEpD,UAAI,kBAAkB,UAAU;AAC9B,uBAAe,QAAQ;AAAA,MAAA,OAClB;AACL,uBAAe,IAAI;AAAA,MACrB;AAAA,aAEO,KAAK;AACJ,cAAA,MAAM,4BAA4B,GAAG;AAC7C,eAAS,IAAI,OAAO;AAAA,IAAA,UACpB;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EAAA;AAIF,QAAM,kBAAkB,YAAY;;AAC9B,QAAA;AACF,oBAAc,IAAI;AAClB,eAAS,EAAE;AAEX,YAAM,qBAAmBD,MAAA,YAAY,aAAZ,gBAAAA,IAAsB,sBACxBC,MAAA,OAAO,4BAAP,gBAAAA,IAAiC,gBAAgB;AAExE,UAAI,CAAC,kBAAkB;AACf,cAAA,IAAI,MAAM,mCAAmC;AAAA,MACrD;AAEQ,cAAA,IAAI,gCAAgC,gBAAgB;AAExD,UAAA;AAEJ,UAAI,cAAc,iBAAiB;AAE3B,cAAA,WAAW,cAAc,YAAY;AACrC,cAAA,SAAS,KAAK,MAAM,YAAY,cAAc,KAAK,IAAI,IAAI,QAAQ,CAAC;AAE1E,cAAM,WAAW;AACX,cAAA,kBAAkB,iBAAiB,MAAM,CAAC,EAAE,YAAY,EAAE,SAAS,IAAI,GAAG;AAChF,cAAM,eAAe,OAAO,SAAS,EAAE,EAAE,SAAS,IAAI,GAAG;AACzD,cAAM,OAAO,GAAG,QAAQ,GAAG,eAAe,GAAG,YAAY;AAE9C,mBAAA;AAAA,UACT,IAAI,cAAc;AAAA,UAClB;AAAA,UACA,OAAO;AAAA,QAAA;AAGT,gBAAQ,IAAI,0BAA0B;AAAA,UACpC,OAAO,cAAc;AAAA,UACrB,QAAQ,YAAY;AAAA,UACpB,oBAAoB;AAAA,UACpB,IAAI,cAAc;AAAA,UAClB,WAAW;AAAA,QAAA,CACZ;AAAA,MAAA,OAEI;AAEC,cAAA,QAAQ,KAAK,MAAM,YAAY,cAAc,KAAK,IAAI,IAAI,EAAE,CAAC;AACxD,mBAAA;AAAA,UACT,IAAI;AAAA,UACJ,OAAO,KAAK,MAAM,SAAS,EAAE,CAAC;AAAA,QAAA;AAGhC,gBAAQ,IAAI,0BAA0B;AAAA,UACpC,QAAQ,YAAY;AAAA,UACpB,IAAI;AAAA,QAAA,CACL;AAAA,MACH;AAEA,YAAM,SAAS,MAAM,OAAO,gBAAgB,QAAQ;AAE5C,cAAA,IAAI,6BAA6B,MAAM;AAC/C,qBAAe,SAAS;AAGZ,6CAAA,YAAY,IAAI,QAAQ;AAAA,QAClC,SAAS,gBAAgB;AAAA,QACzB,OAAO,cAAc;AAAA,QACrB,QAAQ,YAAY;AAAA,QACpB,QAAQ;AAAA,MAAA;AAAA,aAGH,KAAK;AACJ,cAAA,MAAM,uBAAuB,GAAG;AACxC,eAAS,IAAI,OAAO;AAAA,IAAA,UACpB;AACA,oBAAc,KAAK;AAAA,IACrB;AAAA,EAAA;AAGE,MAAA,CAAC,OAAe,QAAA;AAEpB,QAAM,SAAS,UAAU;AAGvB,SAAAd,kCAAAA,IAAC,OAAI,EAAA,WAAU,8EACb,UAAAK,uCAAC,OAAI,EAAA,WAAW,6CAA6C,SAAS,2BAA2B,wBAAwB,IAGvH,UAAA;AAAA,IAAAA,uCAAC,SAAI,WAAW,kDAAkD,SAAS,oBAAoB,iBAAiB,IAC9G,UAAA;AAAA,MAACA,kCAAAA,KAAA,OAAA,EAAI,WAAU,sBACb,UAAA;AAAA,QAACL,kCAAA,IAAA,MAAA,EAAG,WAAU,yBAAwB,UAAe,mBAAA;AAAA,QACpD,OAAO,UACLK,uCAAA,KAAA,EAAE,WAAU,sCAAqC,UAAA;AAAA,UAAA;AAAA,UAAE,OAAO,OAAO,QAAQ,CAAC;AAAA,QAAA,GAAE;AAAA,MAAA,GAEjF;AAAA,MACAL,kCAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,WAAW,0CAA0C,SAAS,wBAAwB,EAAE;AAAA,UACzF,UAAA;AAAA,QAAA;AAAA,MAED;AAAA,IAAA,GACF;AAAA,IAGAK,kCAAAA,KAAC,OAAI,EAAA,WAAU,qBACZ,UAAA;AAAA,MACC,SAAAA,kCAAA,KAAC,OAAI,EAAA,WAAU,kEACZ,UAAA;AAAA,QAAA;AAAA,QACDL,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAS,MAAM,SAAS,EAAE;AAAA,YAC1B,WAAU;AAAA,YACX,UAAA;AAAA,UAAA;AAAA,QAED;AAAA,MAAA,GACF;AAAA,MAID,gBAAgB,YACdA,kCAAAA,IAAA,OAAA,EAAI,WAAU,IACb,UAAAK,kCAAA,KAAC,OAAI,EAAA,WAAU,aACb,UAAA;AAAA,QAAAA,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAS,MAAM;AAAE,+BAAiB,QAAQ;AAAG,6BAAe,SAAS;AAAA,YAAG;AAAA,YACxE,WAAW,kHAAkH,SAAS,sCAAsC,kCAAkC;AAAA,YAE9M,UAAA;AAAA,cAACL,kCAAA,IAAA,QAAA,EAAK,WAAU,YAAW,UAAE,MAAA;AAAA,qDAC5B,OACC,EAAA,UAAA;AAAA,gBAACA,kCAAA,IAAA,OAAA,EAAI,WAAU,eAAc,UAAe,mBAAA;AAAA,gBAC5CA,kCAAAA,IAAC,SAAI,WAAW,WAAW,SAAS,kBAAkB,eAAe,IAAI,UAAyB,4BAAA,CAAA;AAAA,cAAA,GACpG;AAAA,YAAA;AAAA,UAAA;AAAA,QACF;AAAA,QACAK,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAS,MAAM;AAAE,+BAAiB,IAAI;AAAG,6BAAe,SAAS;AAAA,YAAG;AAAA,YACpE,WAAW,kHAAkH,SAAS,sCAAsC,kCAAkC;AAAA,YAE9M,UAAA;AAAA,cAACL,kCAAA,IAAA,QAAA,EAAK,WAAU,YAAW,UAAE,MAAA;AAAA,qDAC5B,OACC,EAAA,UAAA;AAAA,gBAACA,kCAAA,IAAA,OAAA,EAAI,WAAU,eAAc,UAAO,WAAA;AAAA,gBACpCA,kCAAAA,IAAC,SAAI,WAAW,WAAW,SAAS,kBAAkB,eAAe,IAAI,UAAuB,0BAAA,CAAA;AAAA,cAAA,GAClG;AAAA,YAAA;AAAA,UAAA;AAAA,QACF;AAAA,MAAA,EAAA,CACF,EACF,CAAA;AAAA,MAID,gBAAgB,aACdK,uCAAA,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,QAACA,kCAAAA,KAAA,OAAA,EAAI,WAAU,+BACb,UAAA;AAAA,UAAAL,kCAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAAS,MAAM,eAAe,QAAQ;AAAA,cACtC,WAAW,GAAG,SAAS,sCAAsC,mCAAmC;AAAA,cACjG,UAAA;AAAA,YAAA;AAAA,UAED;AAAA,UACCA,kCAAA,IAAA,MAAA,EAAG,WAAU,eAAc,UAAc,kBAAA;AAAA,QAAA,GAC5C;AAAA,8CACC,OAAI,EAAA,WAAU,aACZ,UAAS,SAAA,IAAI,CAAC,YACbK,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,SAAS,MAAM;AAAE,iCAAmB,OAAO;AAAG,6BAAe,OAAO;AAAA,YAAG;AAAA,YACvE,WAAW,oFAAoF,SAAS,sCAAsC,kCAAkC;AAAA,YAEhL,UAAA;AAAA,cAAAL,kCAAA,IAAC,OAAI,EAAA,WAAU,eAAe,UAAA,QAAQ,MAAK;AAAA,cAC3CA,kCAAAA,IAAC,OAAI,EAAA,WAAW,WAAW,SAAS,kBAAkB,eAAe,IAAK,UAAA,QAAQ,UAAU,YAAc,EAAA,CAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UALrG,QAAQ;AAAA,QAOhB,CAAA,GACH;AAAA,MAAA,GACF;AAAA,MAID,gBAAgB,WACdK,uCAAA,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,QAACA,kCAAAA,KAAA,OAAA,EAAI,WAAU,+BACb,UAAA;AAAA,UAAAL,kCAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAAS,MAAM,eAAe,SAAS;AAAA,cACvC,WAAW,GAAG,SAAS,sCAAsC,mCAAmC;AAAA,cACjG,UAAA;AAAA,YAAA;AAAA,UAED;AAAA,UACAK,kCAAAA,KAAC,MAAG,EAAA,WAAU,eAAc,UAAA;AAAA,YAAA;AAAA,YAAiB,mDAAiB;AAAA,UAAA,GAAK;AAAA,QAAA,GACrE;AAAA,QACCL,kCAAA,IAAA,OAAA,EAAI,WAAU,aACZ,iBACE,OAAO,CAAA,UAAS;;AAAA,mBAAAa,MAAA,MAAM,YAAN,gBAAAA,IAAe,gBAAc,mDAAiB;AAAA,SAAS,EACvE,IAAI,CAAC,UACJR,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,SAAS,MAAM;AAAE,+BAAiB,KAAK;AAAiB;YAAG;AAAA,YAC3D,UAAU;AAAA,YACV,WAAW,6HAA6H,SAAS,sCAAsC,kCAAkC;AAAA,YAEzN,UAAA;AAAA,cAAAA,uCAAC,OACC,EAAA,UAAA;AAAA,gBAAAL,kCAAA,IAAC,OAAI,EAAA,WAAU,eAAe,UAAA,MAAM,MAAK;AAAA,gBACzCA,kCAAAA,IAAC,SAAI,WAAW,WAAW,SAAS,kBAAkB,eAAe,IAAK,UAAA,MAAM,OAAO,CAAA;AAAA,cAAA,GACzF;AAAA,cACC,MAAM,gBACLA,kCAAAA,IAAC,QAAK,EAAA,WAAU,yDAAwD,UAExE,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAZG,MAAM;AAAA,QAed,CAAA,GAEL;AAAA,MAAA,GACF;AAAA,MAID,gBAAgB,YACdK,uCAAA,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,QAACL,kCAAA,IAAA,MAAA,EAAG,WAAU,2BAA0B,UAAa,iBAAA;AAAA,QAEpD,CAAC,kBACCK,kCAAAA,KAAA,OAAA,EAAI,WAAU,yBACb,UAAA;AAAA,UAACL,kCAAAA,IAAA,OAAA,EAAI,WAAU,iFACb,UAAAA,kCAAA,IAAC,UAAK,WAAU,YAAW,gBAAE,EAC/B,CAAA;AAAA,UACAA,kCAAAA,IAAC,OAAE,WAAW,GAAG,SAAS,kBAAkB,eAAe,IAAI,UAA4B,+BAAA,CAAA;AAAA,UAC3FA,kCAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT,UAAU;AAAA,cACV,WAAU;AAAA,cAET,oBAAU,kBAAkB;AAAA,YAAA;AAAA,UAC/B;AAAA,QAAA,EACF,CAAA,IAEAK,kCAAAA,KAAC,OAAI,EAAA,WAAU,aACb,UAAA;AAAA,UAACA,kCAAAA,KAAA,OAAA,EAAI,WAAU,sDACb,UAAA;AAAA,YAACL,kCAAA,IAAA,KAAA,EAAE,WAAU,sCAAqC,UAAkB,sBAAA;AAAA,YACpEK,kCAAAA,KAAC,KAAE,EAAA,WAAU,yCAAyC,UAAA;AAAA,eAAO,YAAA,YAAA,mBAAS,MAAM,GAAG;AAAA,cAAG;AAAA,eAAI,YAAO,YAAP,mBAAgB,MAAM;AAAA,YAAE,GAAE;AAAA,UAAA,GAClH;AAAA,iDAEC,OAAI,EAAA,WAAW,4BAA4B,SAAS,gBAAgB,YAAY,IAC/E,UAAA;AAAA,YAACA,kCAAAA,KAAA,OAAA,EAAI,WAAU,gCACb,UAAA;AAAA,cAAAL,kCAAAA,IAAC,UAAK,UAAO,UAAA,CAAA;AAAA,cACbK,kCAAAA,KAAC,QAAK,EAAA,WAAU,eAAe,UAAA;AAAA,gBAAa,2CAAA;AAAA,gBAAY;AAAA,gBAAE,+CAAe;AAAA,cAAA,GAAO;AAAA,YAAA,GAClF;AAAA,YACAA,kCAAAA,KAAC,OAAI,EAAA,WAAU,gCACb,UAAA;AAAA,cAAAL,kCAAAA,IAAC,UAAK,UAAQ,WAAA,CAAA;AAAA,cACbA,kCAAA,IAAA,QAAA,EAAK,WAAU,eAAe,6DAAiB,MAAK;AAAA,YAAA,GACvD;AAAA,YACAK,kCAAAA,KAAC,OAAI,EAAA,WAAU,gCACb,UAAA;AAAA,cAAAL,kCAAAA,IAAC,UAAK,UAAM,SAAA,CAAA;AAAA,cACXA,kCAAA,IAAA,QAAA,EAAK,WAAU,eAAe,yDAAe,MAAK;AAAA,YAAA,GACrD;AAAA,UAAA,GACF;AAAA,UAEAA,kCAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAAS;AAAA,cACT,UAAU;AAAA,cACV,WAAU;AAAA,cAET,uBAEGK,kCAAAA,KAAAC,kBAAA,UAAA,EAAA,UAAA;AAAA,gBAACN,kCAAAA,IAAA,OAAA,EAAI,WAAU,4DAA4D,CAAA;AAAA,gBAC3EA,kCAAAA,IAAC,UAAK,UAAsB,yBAAA,CAAA;AAAA,cAC9B,EAAA,CAAA,2CAEC,QAAK,EAAA,UAAA;AAAA,gBAAA;AAAA,gBAAM,2CAAa;AAAA,gBAAY;AAAA,gBAAE,+CAAe;AAAA,cAAA,GAAO;AAAA,YAAA;AAAA,UAEjE;AAAA,QAAA,GACF;AAAA,MAAA,GAEJ;AAAA,MAID,gBAAgB,QACdK,uCAAA,OAAA,EAAI,WAAU,yBACb,UAAA;AAAA,QAACL,kCAAA,IAAA,MAAA,EAAG,WAAU,eAAc,UAAY,gBAAA;AAAA,+CACvC,OAAI,EAAA,WAAW,kBAAkB,SAAS,gBAAgB,aAAa,IACtE,UAAA;AAAA,UAAAA,kCAAAA,IAAC,OAAE,WAAW,GAAG,SAAS,kBAAkB,eAAe,IAAI,UAAwB,2BAAA,CAAA;AAAA,UACvFK,kCAAAA,KAAC,KAAE,EAAA,WAAU,gBAAe,UAAA;AAAA,YAAA;AAAA,YAAM,2CAAa;AAAA,YAAY;AAAA,YAAE,+CAAe;AAAA,UAAA,GAAO;AAAA,UAClFL,kCAAA,IAAA,KAAA,EAAE,WAAU,WAAU,UAAkB,sBAAA;AAAA,QAAA,GAC3C;AAAA,QACAA,kCAAAA,IAAC,OAAE,WAAW,WAAW,SAAS,kBAAkB,eAAe,IAAI,UAEvE,sCAAA,CAAA;AAAA,MAAA,GACF;AAAA,MAID,gBAAgB,aACdK,uCAAA,OAAA,EAAI,WAAU,yBACb,UAAA;AAAA,QAACL,kCAAAA,IAAA,OAAA,EAAI,WAAU,gFACb,UAAAA,kCAAA,IAAC,UAAK,WAAU,YAAW,eAAC,EAC9B,CAAA;AAAA,QACCA,kCAAA,IAAA,MAAA,EAAG,WAAU,8BAA6B,UAAmB,uBAAA;AAAA,QAC9DA,kCAAAA,IAAC,OAAE,WAAW,WAAW,SAAS,kBAAkB,eAAe,IAAI,UAEvE,8CAAA,CAAA;AAAA,QACAA,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,WAAU;AAAA,YACX,UAAA;AAAA,UAAA;AAAA,QAED;AAAA,MAAA,GACF;AAAA,MAID,WAAW,gBAAgB,YACzBA,kCAAA,IAAA,OAAA,EAAI,WAAU,yCACb,UAACA,kCAAAA,IAAA,OAAA,EAAI,WAAU,iEAAA,CAAiE,EAClF,CAAA;AAAA,IAAA,GAEJ;AAAA,EAAA,EACF,CAAA,EACF,CAAA;AAEJ;;ACvsBA,IAAI,IAAIH;AACmC;AACzC,eAAqB,EAAE;AACD,IAAE;AAC1B;ACEA,MAAM,eAAe;AAAA,EACnB,YAAY,SAAS,IAAI;AACvB,SAAK,SAAS,EAAE,GAAG;AACnB,SAAK,SAAS;AACd,SAAK,OAAO;AACZ,SAAK,YAAY;AACjB,SAAK,YAAY;EAClB;AAAA,EAED,KAAK,eAAe,YAAY,IAAI;AAClC,QAAI,KAAK,OAAQ;AAEjB,SAAK,YAAY;AACjB,SAAK,YAAY,SAAS,cAAc,KAAK;AAC7C,SAAK,UAAU,KAAK;AACpB,SAAK,UAAU,MAAM,UAAU;AAC/B,aAAS,KAAK,YAAY,KAAK,SAAS;AAExC,SAAK,OAAO,WAAW,KAAK,SAAS;AACrC,SAAK,SAAS;AAEd,SAAK,KAAK;AAAA,MACR,MAAM,cAAc,8BAA8B;AAAA,QAChD,GAAG,KAAK;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,WAAW,KAAK,cAAc,KAAK,IAAI;AAAA,QACvC,SAAS,KAAK,YAAY,KAAK,IAAI;AAAA,QACnC,SAAS,KAAK,YAAY,KAAK,IAAI;AAAA,MAC3C,CAAO;AAAA,IACP;AAAA,EACG;AAAA,EAED,QAAQ;AACN,QAAI,CAAC,KAAK,OAAQ;AAClB,SAAK,SAAS;AACd,QAAI,KAAK,MAAM;AAAE,WAAK,KAAK,QAAS;AAAE,WAAK,OAAO;AAAA,IAAO;AACzD,QAAI,KAAK,WAAW;AAAE,WAAK,UAAU,OAAQ;AAAE,WAAK,YAAY;AAAA,IAAO;AAAA,EACxE;AAAA,EAED,cAAc,WAAW,QAAQ,SAAS;AACxC,QAAI,KAAK,UAAU,UAAW,MAAK,UAAU,UAAU,WAAW,QAAQ,OAAO;AAAA,EAClF;AAAA,EAED,YAAY,OAAO;AACjB,QAAI,KAAK,UAAU,QAAS,MAAK,UAAU,QAAQ,KAAK;AAAA,EACzD;AAAA,EAED,cAAc;AACZ,SAAK,MAAK;AACV,QAAI,KAAK,UAAU,QAAS,MAAK,UAAU;EAC5C;AACH;AAGA,IAAI,OAAO,WAAW,YAAa,QAAO,iBAAiB;AC+F/C,MAAC,wBAAwB,CAAC,EAAE,UAAU,GAAG,MAAO,MAAK;AASrD,MAAC,UAAU;AAGX,MAAC,QAAQ;AAAA,EACnB,cAAc,CAAC,QAAQ,WAAW,MAAM,OAAO,QAAQ,QAAQ;AAAA,EAE/D,iBAAiB,CAAC,SAAS,aAAa,GAAG,WAAW,MAAM;AAC1D,QAAI,CAAC,QAAS,QAAO;AACrB,QAAI,QAAQ,UAAU,aAAa,SAAU,QAAO;AACpD,WAAO,GAAG,QAAQ,MAAM,GAAG,UAAU,CAAC,MAAM,QAAQ,MAAM,CAAC,QAAQ,CAAC;AAAA,EACrE;AAAA,EAED,gBAAgB,CAAC,SAAS,YAAY;AACpC,QAAI,CAAC,QAAS,QAAO;AAErB,YAAQ,QAAQ,YAAa,GAAA;AAAA,MAC3B,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO,sBAAsB,KAAK,OAAO;AAAA,MAC3C,KAAK;AACH,eAAO,qBAAqB,KAAK,OAAO;AAAA,MAC1C,KAAK;AACH,eAAO,gCAAgC,KAAK,OAAO;AAAA,MACrD;AACE,eAAO,QAAQ,SAAS;AAAA,IAC3B;AAAA,EACF;AAAA,EAED,iBAAiB,OAAO,SAAS;AAC/B,QAAI;AACF,YAAM,UAAU,UAAU,UAAU,IAAI;AACxC,aAAO;AAAA,IACb,QAAY;AACN,aAAO;AAAA,IACR;AAAA,EACF;AACH;AAGO,MAAM,qBAAqB,MAAM;AAAA,EACtC,YAAY,SAAS,MAAM;AACzB,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,OAAO;AAAA,EACb;AACH;AAGY,MAAC,iBAAiB;AAAA,EAC5B,OAAO;AAAA,EACP,OAAO;AAAA,EACP,UAAU;AAAA,EACV,UAAU;AACZ;AAGY,MAAC,iBAAiB;AAAA;AAAA,EAE5B,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBP,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8BX;","x_google_ignoreList":[0,1,3,11]}