{"version":3,"file":"Username-Dk_q_MSK.js","sources":["../../src/assets/webp_converted/createProfileHeader.webp","../../src/contracts/L1NSPaymentCollector.ts","../../src/assets/webp_converted/identity.webp","../../src/contracts/utils.ts","../../src/hooks/useClaimFreeHandle.tsx","../../src/components/Modals/Usernames/ConfirmFreeUsername.tsx","../../src/components/Modals/Usernames/ConfirmPremiumUsername.tsx","../../src/components/Identity/Username/free.tsx","../../src/components/Identity/Username/premium.tsx","../../src/components/Identity/Username/Username.tsx"],"sourcesContent":["export default \"__VITE_ASSET__BsJ8PVTS__\"","const abi = [\n {\n inputs: [\n {\n internalType: 'uint256',\n name: '_price1',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: '_price2',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: '_price3',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: '_price4',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: '_price5',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: '_price6',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'constructor',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'previousOwner',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'OwnershipTransferred',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'payer',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'string',\n name: 'handle',\n type: 'string',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'price',\n type: 'uint256',\n },\n {\n indexed: false,\n internalType: 'bool',\n name: 'renewal',\n type: 'bool',\n },\n ],\n name: 'Purchased',\n type: 'event',\n },\n {\n inputs: [],\n name: 'owner',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'string',\n name: 'handle',\n type: 'string',\n },\n ],\n name: 'price',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'price1',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'price2',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'price3',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'price4',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'price5',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'price6',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'string',\n name: 'handle',\n type: 'string',\n },\n ],\n name: 'purchase',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'string',\n name: 'handle',\n type: 'string',\n },\n ],\n name: 'renew',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'renounceOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: '_price1',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: '_price2',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: '_price3',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: '_price4',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: '_price5',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: '_price6',\n type: 'uint256',\n },\n ],\n name: 'setPrices',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'dest',\n type: 'address',\n },\n ],\n name: 'withdraw',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const\n\nexport default abi\n","export default \"__VITE_ASSET___JEjh67e__\"","/* eslint-disable no-bitwise */\nimport { keccak256, toBytes } from 'viem'\nimport { normalize } from 'viem/ens'\n\nexport function concatenateUint8Arrays(arrays: Uint8Array[]): Uint8Array {\n let totalLength = 0\n\n for (let i = 0; i < arrays.length; i++) {\n totalLength += arrays[i].length\n }\n\n const concatenatedArray = new Uint8Array(totalLength)\n let offset = 0\n\n for (let i = 0; i < arrays.length; i++) {\n concatenatedArray.set(arrays[i], offset)\n offset += arrays[i].length\n }\n\n return concatenatedArray\n}\n\nexport function bitwiseIsZero(hex1: string, hex2: string): boolean {\n // Parse the hexadecimal strings into BigInt\n const num1 = BigInt(hex1)\n const num2 = BigInt(hex2)\n\n // Perform the bitwise AND operation\n return (num1 & num2) === 0n\n}\n\nfunction bytesToHex(bytes: Uint8Array): string {\n return `0x${Array.from(bytes)\n .map(byte => byte.toString(16).padStart(2, '0'))\n .join('')}`\n}\n\nfunction generateRandomString(length: number): string {\n const characters = '0123456789'\n let result = ''\n\n // Use better random generator if available\n for (let i = 0; i < length; i++) {\n const randomIndex = Math.floor(Math.random() * characters.length)\n result += characters.charAt(randomIndex)\n }\n\n return result\n}\n\nconst mineNonce = async (addr: string, handle: string, difficulty: string): Promise => {\n // Encode strings\n const addrBytes = toBytes(addr)\n const handleBytes = toBytes(handle)\n\n // Start nonce at 0\n let nonce = 0\n let hash = '0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'\n const nonceBytes = new Uint8Array(4)\n\n while (!bitwiseIsZero(hash, difficulty)) {\n // Set nonce bytes\n nonceBytes[0] = (nonce >> 24) & 0xff\n nonceBytes[1] = (nonce >> 16) & 0xff\n nonceBytes[2] = (nonce >> 8) & 0xff\n nonceBytes[3] = nonce & 0xff\n // Hash\n hash = keccak256(concatenateUint8Arrays([addrBytes, handleBytes, nonceBytes]))\n // Increment nonce\n nonce++\n }\n return bytesToHex(nonceBytes)\n}\n\n/* -------------------------------------------------------------------------- */\n/* Exported Functions */\n/* -------------------------------------------------------------------------- */\nconst claimFreeLogic = async (addr: string, handle: string, difficulty: string) => {\n // Normalize handle\n const normalizedHandle = normalize(handle)\n\n // Generate random 4 digit code\n const code = generateRandomString(4)\n const fullHandle = normalizedHandle + code\n\n // Mine the nonce\n const nonceHex = await mineNonce(addr, fullHandle, difficulty)\n\n return { fullHandle, nonceHex, code }\n}\n\nexport default claimFreeLogic\n","import * as Sentry from '@sentry/react'\nimport { useCallback, useEffect, useRef, useState } from 'react'\n\nimport claimFreeLogic from '../contracts/utils'\nimport useL1NS from './useL1NS'\n\ninterface RetvalProps {\n code: string\n fullHandle: string\n nonceHex: string\n}\n\nconst useClaimFreeHandle = (address: string, handle: string) => {\n const [retval, setRetval] = useState({\n code: '',\n fullHandle: '',\n nonceHex: '',\n })\n const hasFetched = useRef(false)\n\n const { confirmHandleAvailability, getDifficulty } = useL1NS()\n const [errorPow, setErrorPow] = useState('')\n\n const executePow = async (): Promise => {\n try {\n // Read difficulty from contract\n const difficulty = await getDifficulty()\n\n // Calculate nonce and Execute PoW with given difficulty\n const res = await claimFreeLogic(address, handle, difficulty)\n setRetval(res)\n\n // Check if handle is available\n let available = await confirmHandleAvailability(res.fullHandle)\n\n // If handle is not available, recompute PoW\n if (!available) {\n available = await executePow()\n }\n return available\n } catch (e: any) {\n console.error('Error:', e)\n Sentry.withScope(scope => {\n scope.setTag('free_username', 'pow')\n })\n setErrorPow(`Error executing PoW: ${e.message}`)\n throw new Error(`Error executing PoW: ${e.message}`)\n }\n }\n\n useEffect(() => {\n if (!hasFetched.current && address) {\n executePow()\n hasFetched.current = true\n }\n }, [handle, address])\n\n const refetch = useCallback(async () => {\n if (address) {\n await executePow()\n hasFetched.current = true\n }\n }, [])\n\n return { retval, refetch, errorPow }\n}\n\nexport default useClaimFreeHandle\n","import { Stack, Text, useMantineTheme } from '@mantine/core'\nimport { useMediaQuery } from '@mantine/hooks'\nimport { IconExclamationCircle } from '@tabler/icons-react'\nimport React, { useCallback, useEffect, useState } from 'react'\nimport { Trans, useTranslation } from 'react-i18next'\nimport { normalize } from 'viem/ens'\n\nimport { useChainFunctions } from '@/hooks/useChain'\nimport useClaimFreeHandle from '@/hooks/useClaimFreeHandle'\nimport useLocalStorage from '@/hooks/useLocalStorage'\nimport { l1IdSubnetWagmiConfig } from '@/plugins/auth/config'\n\nimport { CONTRACT_CONTROLLER_ADDRESS } from '../../../constants/blockchain'\nimport L1Controller from '../../../contracts/L1NSController'\nimport { UserIdentity } from '../../../utils/utils'\nimport RootButton from '../../Buttons/RootButton'\nimport ErrorMessage from '../../ErrorMessage'\nimport { ConfirmationLoading, ConfirmationReady } from '../../Identity/ConfirmModals/utils'\nimport { AtIcon } from '../../SpecialInputText'\nimport classes from './ConfirmUsername.module.css'\n\ninterface ConfirmFreeUsernameSetupProps {\n close: () => void\n success: () => void\n address: string\n handle: string\n handleConfirmation: (confirmed: boolean) => void\n}\n\nconst ConfirmFreeUsername: React.FC = ({\n close,\n success,\n address,\n handle,\n handleConfirmation,\n}) => {\n const { t } = useTranslation()\n const { writeContract } = useChainFunctions(l1IdSubnetWagmiConfig)\n const theme = useMantineTheme()\n\n const [isLoading, setIsLoading] = useState(false)\n const isMobile = useMediaQuery(`(max-width: ${theme.breakpoints.sm})`)\n const [isReady, setIsReady] = useState(false)\n const [errorMessage, setErrorMessage] = useState('')\n const [loadingNewCode, setLoadingNewCode] = useState(false)\n const [dnsErrorMessage, setDnsErrorMessage] = useState('')\n const [userIdentity, setUserIdentity] = useLocalStorage(`userIdentity-${address}`)\n\n // Normalize handle\n const normalizedHandle = normalize(handle)\n\n useEffect(() => {\n // check if handle complies with DNS rules\n setDnsErrorMessage('')\n const dnsRegex =\n /^(?=.{1,253}$)(?!-)[A-Za-z0-9-]{1,63}(?!\\.)(?:\\.(?!-)[A-Za-z0-9-]{1,63}(?!\\.))*$/\n const isValid = dnsRegex.test(handle)\n if (!isValid) {\n setDnsErrorMessage(\n \n \n This username may not be DNS compatible. This could limit the interoperability of your\n metaverse identity in the future. For more info, see{' '}\n \n L1 Usernames Guidelines & Recommendations\n \n \n \n )\n }\n }, [handle])\n\n const {\n retval: { fullHandle, nonceHex, code },\n refetch,\n errorPow,\n } = useClaimFreeHandle(address, normalizedHandle)\n\n const newCode = useCallback(() => {\n setLoadingNewCode(true)\n refetch().then(() => setLoadingNewCode(false))\n }, [refetch])\n\n const claimHandle = useCallback(async () => {\n setErrorMessage('')\n if (!userIdentity) return\n setIsLoading(true)\n handleConfirmation(true)\n try {\n // Register free username\n await writeContract({\n address: CONTRACT_CONTROLLER_ADDRESS,\n abi: L1Controller,\n functionName: 'registerFree',\n args: [fullHandle, nonceHex],\n })\n\n setIsLoading(false)\n setIsReady(true)\n setUserIdentity({\n ...userIdentity,\n username: fullHandle.split('.')[0],\n })\n } catch (error: any) {\n setIsLoading(false)\n setIsReady(false)\n handleConfirmation(false)\n setErrorMessage(error.message)\n }\n }, [userIdentity, fullHandle, nonceHex, code, errorPow])\n\n return (\n \n {errorMessage && !isLoading && (\n \n )}\n {errorPow && !isLoading && (\n \n )}\n {isLoading && (\n \n )}\n {isReady && (\n \n )}\n {!isReady && !errorPow && !isLoading && (\n <>\n \n \n Please confirm this is the username you’d like to use for your LAMINA1 Hub account.\n You can change this username via the Profile Page.\n \n \n \n \n \n \n \n {normalizedHandle}\n {normalizedHandle.length < 26 && (\n \n {!code || loadingNewCode ? '#PoW' : `${code}`}\n \n )}\n \n {normalizedHandle.length >= 26 && (\n \n {!code || loadingNewCode ? '#PoW' : `${code}`}\n \n )}\n \n {dnsErrorMessage && (\n \n \n {dnsErrorMessage}\n \n )}\n \n {!isMobile && (\n \n {t('buttons.cancel', 'Cancel')}\n \n )}\n \n {t('components.identity.confirmModal.orderNewCode', 'New Code')}\n \n {errorMessage ? (\n \n {t('components.identity.confirmModal.orderRetry', 'Try Again')}\n \n ) : (\n \n {t('buttons.confirm', 'Confirm')}\n \n )}\n \n \n )}\n \n )\n}\n\nexport default ConfirmFreeUsername\n","import { Stack, Text, useMantineTheme } from '@mantine/core'\nimport { IconExclamationCircle } from '@tabler/icons-react'\nimport React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport { Trans, useTranslation } from 'react-i18next'\nimport { parseEther } from 'viem'\nimport { normalize } from 'viem/ens'\n\nimport TransactionSummary from '@/components/Transfer/TransactionSummary'\nimport { CONTRACT_COLLECTOR_ADDRESS } from '@/constants/blockchain'\nimport L1PaymentCollector from '@/contracts/L1NSPaymentCollector'\nimport { ContractCall, useChainFunctions } from '@/hooks/useChain'\nimport useL1NS from '@/hooks/useL1NS'\nimport useLocalStorage from '@/hooks/useLocalStorage'\nimport { l1NativeWagmiConfig } from '@/plugins/auth/config'\n\nimport { UserIdentity } from '../../../utils/utils'\nimport RootButton from '../../Buttons/RootButton'\nimport ErrorMessage from '../../ErrorMessage'\nimport { ConfirmationLoading, ConfirmationReady } from '../../Identity/ConfirmModals/utils'\nimport { AtIcon } from '../../SpecialInputText'\nimport classes from './ConfirmUsername.module.css'\n\ninterface ConfirmPremiumUsernameSetupProps {\n close: () => void\n success: () => void\n address: string\n handle: string\n handleConfirmation: (confirmed: boolean) => void\n price: number\n}\n\nconst ConfirmPremiumUsername: React.FC = ({\n close,\n success,\n address,\n handle,\n handleConfirmation,\n price,\n}) => {\n const { t } = useTranslation()\n const theme = useMantineTheme()\n\n const [isLoading, setIsLoading] = useState(false)\n const [isReady, setIsReady] = useState(false)\n const [isError, setIsError] = useState(false)\n const [errorMessage, setErrorMessage] = useState('')\n const [dnsErrorMessage, setDnsErrorMessage] = useState('')\n const [userIdentity, setUserIdentity] = useLocalStorage(`userIdentity-${address}`)\n\n const { writeContract } = useChainFunctions(l1NativeWagmiConfig)\n\n const { confirmHandleAvailability } = useL1NS()\n\n // Normalize handle\n const normalizedHandle = normalize(handle)\n\n // DNS Rules check\n useEffect(() => {\n // check if handle complies with DNS rules\n setDnsErrorMessage('')\n const dnsRegex =\n /^(?=.{1,253}$)(?!-)[A-Za-z0-9-]{1,63}(?!\\.)(?:\\.(?!-)[A-Za-z0-9-]{1,63}(?!\\.))*$/\n const isValid = dnsRegex.test(handle)\n if (!isValid) {\n setDnsErrorMessage(\n \n \n This username may not be DNS compatible. This could limit the interoperability of your\n metaverse identity in the future. For more info, see{' '}\n \n L1 Usernames Guidelines & Recommendations\n \n \n \n )\n }\n }, [handle])\n\n const contractCalls: ContractCall[] | undefined = useMemo(() => {\n if (!normalizedHandle || !price) {\n return undefined\n }\n return [\n {\n args: {\n address: CONTRACT_COLLECTOR_ADDRESS as `0x${string}`,\n abi: L1PaymentCollector,\n functionName: 'purchase',\n args: [normalizedHandle],\n value: parseEther(String(price)),\n },\n },\n ]\n }, [normalizedHandle, price])\n\n // Write to contract - purchase username\n const claimPaidHandle = useCallback(async () => {\n setErrorMessage('')\n if (\n !normalizedHandle ||\n !address ||\n !userIdentity ||\n !(contractCalls && contractCalls.length > 0)\n )\n return\n\n setIsLoading(true)\n handleConfirmation(true)\n try {\n // Write to contract\n await writeContract(contractCalls[0].args)\n\n // Verify if username was purchased and already on ID subnet\n const checkPurchaseCompletion = setInterval(async () => {\n const available = await confirmHandleAvailability(normalizedHandle)\n if (!available) {\n setIsLoading(false)\n setIsReady(true)\n setIsError(false)\n clearInterval(checkPurchaseCompletion)\n }\n }, 1000)\n setUserIdentity({\n ...userIdentity,\n username: normalizedHandle,\n })\n } catch (error: any) {\n setIsLoading(false)\n setIsReady(false)\n handleConfirmation(false)\n setIsError(true)\n setErrorMessage(error.message)\n }\n }, [normalizedHandle, address, userIdentity, contractCalls, writeContract])\n\n return (\n \n {errorMessage && isLoading && (\n \n )}\n {isLoading && (\n \n )}\n {isReady && (\n \n )}\n {!isReady && !isLoading && (\n <>\n \n \n Purchasing this premium username costs {{ price }} L1. Once confirmed, this purchase\n is non-refundable.\n \n \n \n \n \n \n \n \n \n {normalizedHandle}\n \n \n \n \n {dnsErrorMessage && (\n \n \n {dnsErrorMessage}\n \n )}\n \n \n {t('buttons.cancel', 'Cancel')}\n \n {isError ? (\n \n {t('components.identity.confirmModal.orderRetry', 'Try Again')}\n \n ) : (\n \n {t('components.identity.confirmModal.orderPurchase', 'Purchase')}\n \n )}\n \n \n \n )}\n \n )\n}\n\nexport default ConfirmPremiumUsername\n","import { Text } from '@mantine/core'\nimport { TFunction } from 'i18next'\nimport React from 'react'\nimport { Trans, useTranslation } from 'react-i18next'\n\n// export const freeMinBalance = Number(process.env.IDENTITY_MIN_BALANCE || '0.05')\n\nconst getFreeUsernameText = (t: TFunction) => ({\n freeLabel: t('components.identity.freeUserLabel', 'Type in a username you want to use'),\n freeModalTitle: t('components.identity.freeUserModalTitle', 'Confirm Your Username'),\n freeTitleArea: t('components.identity.freeUserTitleArea', 'Set Your Username'),\n freeCheckAvailabilityButtonText: t(\n 'components.identity.freeUserAvailabilityBtn',\n 'Check Availability'\n ),\n})\n\nexport function useFreeUsernameText() {\n const { t } = useTranslation()\n return getFreeUsernameText(t)\n}\n\ninterface FreeTextAreaProps {\n className: any\n createProfile?: boolean\n}\nexport const FreeTextArea: React.FC = ({ className, createProfile }) => (\n \n {createProfile ? (\n \n On LAMINA1, every account has a public Profile. Yours is identified by the alphanumeric\n address below:\n \n ) : (\n \n Your username is a unique, public identifier that will be linked to your Profile and\n activity across LAMINA1.\n \n )}\n \n)\n","import { Stack, Text, useMantineTheme } from '@mantine/core'\nimport { TFunction } from 'i18next'\nimport React from 'react'\nimport { Trans, useTranslation } from 'react-i18next'\n\nconst getPremiumUsernameText = (t: TFunction) => ({\n premiumLabel: t(\n 'components.identity.premiumUserLabel',\n \"Type in a Premium Username you'd like to purchase\"\n ),\n premiumModalTitle: t('components.identity.premiumUserModalTitle', 'Purchase Premium Username'),\n premiumTitleArea: t('components.identity.premiumUserTitleArea', 'Purchase Premium Username'),\n premiumCheckAvailabilityButtonText: t(\n 'components.identity.premiumUserAvailabilityBtn',\n 'Check Availability & Cost'\n ),\n})\n\nexport function usePremiumUsernameText() {\n const { t } = useTranslation()\n return getPremiumUsernameText(t)\n}\n\ninterface PremiumDetailsProps {\n detailsBox: any\n details: any\n minBalance: number | undefined\n displayBalance: string\n enoughBalance: boolean\n}\nexport const PremiumDetails: React.FC = ({\n detailsBox,\n details,\n minBalance,\n displayBalance,\n enoughBalance,\n}) => {\n const { t } = useTranslation()\n const theme = useMantineTheme()\n return (\n \n \n {t('common.cost', 'Cost')}: {minBalance ? minBalance.toFixed(2) : '-'} L1\n \n \n {t('common.balance', 'Balance')}: {displayBalance} L1\n \n \n )\n}\n\ninterface PremiumTextAreaProps {\n className: any\n}\nexport const PremiumTextArea: React.FC = ({ className }) => (\n \n \n For a one-time fee, you can purchase a Premium Username. This username has no number hash\n attached to it and is totally unique to you.
\n
For more information, see:\n
\n \n What is a Premium Username? Why get one?\n \n
\n
\n)\n","import { Grid, List, Modal, Stack, Text, Title, useMantineTheme } from '@mantine/core'\nimport { useDisclosure, useMediaQuery } from '@mantine/hooks'\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { Trans, useTranslation } from 'react-i18next'\nimport { useLocation, useNavigate } from 'react-router-dom'\nimport { isAddress } from 'viem'\nimport { normalize } from 'viem/ens'\n\nimport profileSetup from '@/assets/webp_converted/createProfileHeader.webp'\nimport Lamina1Logo from '@/components/Lamina1Logo'\nimport ModalSkeleton from '@/components/Modals/ModalSkeleton'\nimport AddressDisplay from '@/components/User/AddressDisplay'\nimport { CONTRACT_COLLECTOR_ADDRESS, FREE_MIN_BALANCE, ID_BOT } from '@/constants/blockchain'\nimport L1PaymentCollector from '@/contracts/L1NSPaymentCollector'\nimport { useChainFunctions, useChainValues } from '@/hooks/useChain'\nimport useL1NS from '@/hooks/useL1NS'\nimport useLocalStorage from '@/hooks/useLocalStorage'\nimport { useAuth } from '@/plugins/auth'\nimport { l1IdSubnetWagmiConfig, l1NativeWagmiConfig } from '@/plugins/auth/config'\nimport { getAuthedRedirectPath } from '@/plugins/auth/RouteRedirectors/utils'\n\nimport identitygif from '../../../assets/webp_converted/identity.webp'\nimport { useErrorMessages } from '../../../constants/content'\nimport {\n convertToEpochSeconds,\n ErrorMessageDisplay,\n formatBalance,\n post,\n UserIdentity,\n} from '../../../utils/utils'\nimport BackButton from '../../Buttons/BackButton'\nimport RootButton from '../../Buttons/RootButton'\nimport ErrorMessage from '../../ErrorMessage'\nimport ConfirmFreeUsername from '../../Modals/Usernames/ConfirmFreeUsername'\nimport ConfirmPremiumUsername from '../../Modals/Usernames/ConfirmPremiumUsername'\nimport { AtIcon, CheckedIcon, InvalidIcon } from '../../SpecialInputText'\nimport SpecialInputTile from '../../SpecialInputTile'\nimport Timer from '../../Timer'\nimport { MAX_HANDLE_LENGTH, MIN_HANDLE_LENGTH } from '../rules'\nimport { FreeTextArea, useFreeUsernameText } from './free'\nimport { PremiumDetails, PremiumTextArea, usePremiumUsernameText } from './premium'\nimport classes from './Username.module.css'\n\nconst IdentityNameRules: React.FC = () => {\n const theme = useMantineTheme()\n return (\n \n \n \n \n All L1 usernames must be between {{ min: MIN_HANDLE_LENGTH }} and{' '}\n {{ max: MAX_HANDLE_LENGTH - 4 }} characters long\n \n \n \n \n Limited support for special characters (!, ;, *, etc.)\n \n \n \n \n For more information, see \n \n L1 Username Guidelines & Recommendations\n \n \n \n \n \n )\n}\n\nconst IdentityStringSizeRule: React.FC<{ countChars: number }> = ({ countChars }) => {\n const theme = useMantineTheme()\n return (\n \n MAX_HANDLE_LENGTH - 4 || countChars < MIN_HANDLE_LENGTH\n ? theme.colors.notification[0]\n : theme.colors.title[0],\n }}\n >\n {countChars}\n \n MAX_HANDLE_LENGTH - 4\n ? theme.colors.notification[0]\n : theme.colors.textAndIcon[0],\n }}\n >\n /{MAX_HANDLE_LENGTH - 4}\n \n \n )\n}\n\nconst Component: React.FC = () => {\n const theme = useMantineTheme()\n const isMobile = useMediaQuery(`(max-width: ${theme.breakpoints.sm})`)\n const { t } = useTranslation()\n const navigate = useNavigate()\n const { state, pathname } = useLocation()\n const premium = useMemo(() => pathname === '/premiumusername', [pathname])\n const { address } = useAuth()\n const errorMessages = useErrorMessages()\n const { premiumLabel, premiumModalTitle, premiumTitleArea, premiumCheckAvailabilityButtonText } =\n usePremiumUsernameText()\n const { freeLabel, freeModalTitle, freeTitleArea, freeCheckAvailabilityButtonText } =\n useFreeUsernameText()\n\n const { readContract } = useChainFunctions(l1NativeWagmiConfig)\n const { balance } = useChainValues(l1NativeWagmiConfig.id)\n const { balance: balanceId } = useChainValues(l1IdSubnetWagmiConfig.id)\n\n const { confirmHandleAvailability } = useL1NS()\n\n const [identityUsername, setIdentityUsername] = useState('')\n const [tested, setTested] = useState('')\n const label = premium ? premiumLabel : freeLabel\n const [message, setMessage] = useState(label)\n const submitting = useRef(false)\n const [isConfirming, setIsConfirming] = useState(false)\n const [isChecking, setIsChecking] = useState(false)\n const usernameAvailable = useRef(false)\n const [countChars, setCountChars] = useState(0)\n const [borderStatus, setBorderStatus] = useState<'default' | 'success' | 'error'>('default')\n const [displayUsernameRules, setDisplayUsernameRules] = useState(false)\n const [isTimerOn, setIsTimerOn] = useState(false)\n const enoughBalance = useRef(true)\n const [minBalance, setMinBalance] = useState()\n const [expiryTimestamp, setExpiryTimestamp] = useState(10)\n const [userIdentity] = useLocalStorage(`userIdentity-${address}`)\n const [createProfile, setCreateProfile] = useState(!premium)\n const [, setFirstLogin] = useLocalStorage(`firstLogin-${address}`)\n\n // Confirm Identity Modal\n const [opened, { open, close }] = useDisclosure(false)\n const [isConfirmed, setIsConfirmed] = useState(false)\n\n // Error Message Modal\n const [openedErrorModal, { open: openErrorModal, close: closeErrorModal }] = useDisclosure(false)\n const [errorMessage, setErrorMessage] = useState({\n message: '',\n details: '',\n report: true,\n })\n\n // if username already setup redirect to premium username\n useEffect(() => {\n if (state) {\n if (state.pathname === '/profile' || state.pathname === '/wallet') {\n navigate('/freeusername')\n } else navigate('/premiumusername')\n } else navigate('/premiumusername')\n }, [navigate])\n\n // Display balance - premium\n const displayBalance = useMemo(() => {\n if (balance) {\n return parseFloat(balance.fullValue).toFixed(4)\n }\n return '0'\n }, [balance])\n\n // if pathname is /usersettings change buttons\n const isUserSettings = useMemo(() => {\n if (state) {\n return state.pathname === '/usersettings' || state.pathname === '/profile'\n }\n return false\n }, [state])\n\n const skip = useCallback(() => {\n setFirstLogin(false)\n if (state)\n navigate(state.pathname, {\n state: {\n from: 'username',\n },\n })\n else navigate(getAuthedRedirectPath({ restoreOldRoute: false, profileAddr: address }))\n }, [navigate])\n\n const setAUsername = useCallback(() => {\n setFirstLogin(false)\n setCreateProfile(false)\n }, [])\n\n const success = useCallback(() => {\n close()\n if (state)\n navigate(state.pathname, {\n state: {\n from: 'username',\n },\n })\n else navigate(getAuthedRedirectPath({ restoreOldRoute: false, profileAddr: address }))\n }, [close, skip])\n\n const closeModal = useCallback(() => {\n submitting.current = false\n setIsConfirmed(false)\n close()\n }, [close])\n\n const handleConfirmation = (confirmed: boolean) => {\n setIsConfirmed(confirmed)\n // timer is off when user confirms identity\n setIsTimerOn(false)\n }\n\n // Timer timeout\n const timeout = useCallback(() => {\n // if timer resets, closes modals\n closeErrorModal()\n close()\n }, [close, closeErrorModal])\n\n // premium\n const checkBalance = useCallback(async () => {\n if (!identityUsername) {\n return false\n }\n\n // Get price from contract\n try {\n const price = await readContract({\n address: CONTRACT_COLLECTOR_ADDRESS as `0x${string}`,\n abi: L1PaymentCollector,\n functionName: 'price',\n args: [normalize(identityUsername)],\n })\n const premiumMinBalance = parseFloat(formatBalance(price))\n setMinBalance(premiumMinBalance)\n\n // Check if user has enough balance\n return parseFloat(balance.fullValue) >= premiumMinBalance\n } catch (error: any) {\n setErrorMessage({\n message: errorMessages.rpcConnection,\n details: `${t(\n 'components.identity.errorMessageCheckBalance',\n 'To check if you have enough balance, we need to read the price to pay from the Lamina1 blockchain. Please try again later.'\n )}\\n${t('components.identity.errorDetails', 'Error details: {{error}}', {\n error: error.message,\n })}`,\n })\n openErrorModal()\n return false\n }\n }, [balance, errorMessages.rpcConnection, readContract, identityUsername, openErrorModal])\n\n // submit username to L1ns\n const submitFree = useCallback(async () => {\n submitting.current = true\n\n // Check if address has enough balance on L1ID. If not request to faucet.\n if (!address) {\n setMessage(t('components.identity.noAddrReconnect', 'No address found. Reconnect to hub.'))\n setBorderStatus('error')\n submitting.current = false\n return\n }\n if (parseFloat(balanceId.fullValue) < FREE_MIN_BALANCE) {\n // Post Faucet to request L1ID tokens\n try {\n const retval = await post(`${ID_BOT}/faucet`, JSON.stringify({ address }))\n if (retval?.txHash === '') {\n // assume the time string is of the time \"23h50m15s\"\n const time = (retval.ttl as string)\n .replace('s', ' seconds')\n .replace('h', ' hours ')\n .replace('m', ' minutes ')\n\n setErrorMessage({\n message: errorMessages.idBotRateLimit(time),\n details: retval.error,\n report: false,\n })\n openErrorModal()\n submitting.current = false\n return\n }\n } catch (error: any) {\n setErrorMessage({\n message: errorMessages.idBotConnection,\n details: `${t(\n 'components.identity.errorMessageFree',\n 'The Lamina1 ID Bot is being used to request tokens from the faucet. Until you have enough balance to pay the transaction fee cost, you cannot set a username. Please try again later.'\n )}\\n${t('components.identity.errorDetails', 'Error details: {{error}}', {\n error: error.message,\n })}`,\n })\n openErrorModal()\n submitting.current = false\n return\n }\n }\n\n // Open Confirm Identity Modal\n open()\n }, [\n t,\n address,\n balanceId,\n errorMessages.idBotConnection,\n errorMessages.idBotRateLimit,\n errorMessages.rpcIdentityConnection,\n open,\n openErrorModal,\n ])\n\n const submitPremium = useCallback(async () => {\n submitting.current = true\n let canRegister = false\n // Check status of registration\n try {\n const retval = await post(\n `${ID_BOT}/status`,\n `{ \"address\": \"${address}\", \"handle\": \"${normalize(identityUsername)}\" }`\n )\n if (retval?.address === '') {\n canRegister = true\n }\n if (retval?.address !== '' && retval?.address !== address) {\n setMessage(\n t(\n 'components.identity.usernameBeingClaimed',\n 'Username is pending registration with another user'\n )\n )\n setBorderStatus('error')\n submitting.current = false\n return\n }\n if (retval?.expiry) {\n setExpiryTimestamp(convertToEpochSeconds(retval.expiry))\n }\n } catch (error: any) {\n setErrorMessage({\n message: errorMessages.idBotConnection,\n details: `${t(\n 'components.identity.errorMessagePremium',\n 'The Lamina1 ID Bot is used to check and hold (for 10 minutes) your username before you complete its purchase. This helps prevent front running. Please try again later.'\n )}\\n${t('components.identity.errorDetails', 'Error details: {{error}}', {\n error: error.message,\n })}`,\n })\n openErrorModal()\n submitting.current = false\n return\n }\n\n if (canRegister) {\n // Reserve username on ID Bot and get timer\n try {\n const retval = await post(\n `${ID_BOT}/register`,\n JSON.stringify({ address, handle: normalize(identityUsername) })\n )\n if (retval?.expiry) {\n setExpiryTimestamp(convertToEpochSeconds(retval.expiry))\n }\n if (!retval?.success) {\n setMessage(\n t('components.identity.usernameJustClaimed', 'Username is no longer available')\n )\n setBorderStatus('error')\n submitting.current = false\n return\n }\n } catch (error: any) {\n setErrorMessage({\n message: errorMessages.idBotConnection,\n details: `${t(\n 'components.identity.errorMessagePremium',\n 'The Lamina1 ID Bot is used to check and hold (for 10 minutes) your username before you complete its purchase. This helps prevent front running. Please try again later.'\n )}\\n${t('components.identity.errorDetails', 'Error details: {{error}}', {\n error: error.message,\n })}`,\n })\n openErrorModal()\n submitting.current = false\n return\n }\n }\n setIsTimerOn(true)\n\n // Open Confirm Identity Modal\n open()\n }, [address, errorMessages.idBotConnection, identityUsername, open, openErrorModal, t])\n\n const handleSubmit = (submit: () => Promise) => {\n setIsConfirming(true)\n submit().then(() => {\n setIsConfirming(false)\n })\n }\n\n // Check error messages on username input\n const setErrorMessages = useCallback(() => {\n setMessage('')\n setDisplayUsernameRules(false)\n\n // Check if username follows ENSIP-15 rules\n try {\n normalize(identityUsername)\n } catch (error) {\n setDisplayUsernameRules(true)\n setMessage(t('components.identity.userValidation.invalid'))\n setBorderStatus('error')\n return\n }\n\n // Check if identity has dots in it\n if (identityUsername.includes('.')) {\n setDisplayUsernameRules(true)\n setMessage(\n t('components.identity.userValidation.noDotsError', 'Username cannot contain dots')\n )\n setBorderStatus('error')\n return\n }\n\n // If no errors, set success message\n usernameAvailable.current = true\n }, [identityUsername, t])\n\n // Check availability of username\n const checkAvailabilityFree = useCallback(() => {\n setTested(identityUsername)\n setErrorMessages()\n if (!usernameAvailable.current) {\n return\n }\n setMessage(t('components.identity.usernameAvailable', 'Username is available!'))\n setBorderStatus('success')\n }, [identityUsername, setErrorMessages, t])\n\n const checkAvailabilityPremium = useCallback(async () => {\n // Trigger changes on input\n setTested(identityUsername)\n\n // Set error messages\n setErrorMessages()\n if (!usernameAvailable.current) {\n return\n }\n\n // Check with ID Bot if username is valid\n try {\n const retval = await post(\n `${ID_BOT}/check`,\n JSON.stringify({ handle: normalize(identityUsername) })\n )\n if (!retval?.valid) {\n usernameAvailable.current = false\n setDisplayUsernameRules(true)\n setMessage(t('components.identity.userValidation.invalid'))\n setBorderStatus('error')\n return\n }\n } catch (error: any) {\n usernameAvailable.current = false\n setErrorMessage({\n message: errorMessages.idBotConnection,\n details: `${t(\n 'components.identity.errorMessagePremium',\n 'The Lamina1 ID Bot is used to check and hold (for 10 minutes) your username before you complete its purchase. This helps prevent front running. Please try again later.'\n )}\\n${t('components.identity.errorDetails', 'Error details: {{error}}', {\n error: error.message,\n })}`,\n })\n openErrorModal()\n return\n }\n\n // Check if username is available on chain\n try {\n const available = await confirmHandleAvailability(normalize(identityUsername))\n if (available) {\n usernameAvailable.current = true\n setMessage(t('components.identity.usernameAvailable'))\n setBorderStatus('success')\n } else {\n usernameAvailable.current = false\n setMessage(t('components.identity.usernameNotAvailable', 'Username is not available'))\n setBorderStatus('error')\n return\n }\n } catch (error: any) {\n usernameAvailable.current = false\n setErrorMessage({\n message: errorMessages.rpcIdentityConnection,\n details: `${t(\n 'components.identity.errorMessageCheckOnChain',\n 'To check if your username is available, we need to read from the Lamina1 blockchain. Please try again later.'\n )}\\n${t('components.identity.errorDetails', 'Error details: {{error}}', {\n error: error.message,\n })}`,\n })\n openErrorModal()\n return\n }\n\n // Check if user has enough balance\n enoughBalance.current = await checkBalance()\n }, [\n checkBalance,\n errorMessages.rpcIdentityConnection,\n identityUsername,\n openErrorModal,\n setErrorMessages,\n t,\n ])\n\n const handleCheckAvailability = (check: () => Promise) => {\n setIsChecking(true)\n check().then(() => {\n setIsChecking(false)\n })\n }\n\n // Define icon left display on username input\n const iconLeft = useCallback(() => {\n if (tested && !usernameAvailable.current) {\n return \n }\n if (tested && message) {\n return \n }\n return \n }, [tested, message])\n\n // Process username input\n const onChangeIdentityUsername = useCallback(\n (value: string) => {\n setIdentityUsername(value.toLowerCase())\n setCountChars(value.length)\n setTested('')\n setIsTimerOn(false)\n setBorderStatus('default')\n setMessage(label)\n if (isAddress(value)) {\n setMessage(\n t(\n 'components.identity.userValidation.address',\n 'You cannot make a username that looks like an account address. Please adjust your username.'\n )\n )\n setBorderStatus('error')\n }\n if (value.length < MIN_HANDLE_LENGTH) {\n setMessage(t('components.identity.userValidation.short', { count: MIN_HANDLE_LENGTH }))\n setBorderStatus('error')\n }\n if (value.length > MAX_HANDLE_LENGTH - 4) {\n setMessage(t('components.identity.userValidation.long', { count: MAX_HANDLE_LENGTH - 4 }))\n setBorderStatus('error')\n }\n usernameAvailable.current = false\n },\n [label, t]\n )\n\n return (\n \n {address && (\n \n {premium ? (\n minBalance && (\n \n )\n ) : (\n \n )}\n \n )}\n \n \n \n \n {premium && isTimerOn && }\n \n \n \n \n \n \n \n \n {isUserSettings && }\n \n {premium\n ? premiumTitleArea\n : createProfile\n ? t('components.identity.createProfile', 'Create Your Profile')\n : freeTitleArea}\n \n {premium ? (\n \n ) : (\n \n )}\n {createProfile && address && (\n \n \n \n {t(\n 'components.identity.createProfileDescription',\n 'Start personalizing this Profile by setting a username.'\n )}\n \n \n \n {t('buttons.skip', 'Skip')}\n \n\n \n {t('buttons.setAUsername', 'Set a Username')}\n \n \n \n )}\n {!createProfile && (\n \n {userIdentity?.username && (\n \n \n {t('components.identity.currentUsername', 'Current Username')}:\n \n \n {userIdentity.username ? `@${userIdentity.username}` : ''}\n \n \n )}\n }\n errorMessage={message}\n success={borderStatus === 'success'}\n onChange={e => onChangeIdentityUsername(e.target.value)}\n />\n {premium && (\n \n )}\n {displayUsernameRules && }\n \n {isUserSettings ? null : (\n \n {t('buttons.skip', 'Skip')}\n \n )}\n {usernameAvailable.current ? (\n handleSubmit(submitPremium) : () => handleSubmit(submitFree)\n }\n expand\n >\n {!isConfirming\n ? t('buttons.confirm', 'Confirm')\n : t('buttons.confirming', 'Confirming...')}\n \n ) : (\n MAX_HANDLE_LENGTH - 4 ||\n borderStatus === 'error' ||\n isChecking\n }\n onClick={\n premium\n ? () => handleCheckAvailability(checkAvailabilityPremium)\n : checkAvailabilityFree\n }\n expand\n >\n {premium\n ? isChecking\n ? t('buttons.checking', 'Checking...')\n : premiumCheckAvailabilityButtonText\n : freeCheckAvailabilityButtonText}\n \n )}\n \n \n )}\n \n \n \n \n )\n}\n\nComponent.displayName = 'Username'\n\n// eslint-disable-next-line import/prefer-default-export\nexport { Component }\n"],"names":["profileSetup","abi","identitygif","concatenateUint8Arrays","arrays","totalLength","i","concatenatedArray","offset","bitwiseIsZero","hex1","hex2","num1","num2","bytesToHex","bytes","byte","generateRandomString","length","characters","result","randomIndex","mineNonce","addr","handle","difficulty","addrBytes","toBytes","handleBytes","nonce","hash","nonceBytes","keccak256","claimFreeLogic","normalizedHandle","normalize","code","fullHandle","nonceHex","useClaimFreeHandle","address","retval","setRetval","useState","hasFetched","useRef","confirmHandleAvailability","getDifficulty","useL1NS","errorPow","setErrorPow","executePow","res","available","e","Sentry.withScope","scope","useEffect","refetch","useCallback","ConfirmFreeUsername","close","success","handleConfirmation","t","useTranslation","writeContract","useChainFunctions","l1IdSubnetWagmiConfig","theme","useMantineTheme","isLoading","setIsLoading","isMobile","useMediaQuery","isReady","setIsReady","errorMessage","setErrorMessage","loadingNewCode","setLoadingNewCode","dnsErrorMessage","setDnsErrorMessage","userIdentity","setUserIdentity","useLocalStorage","jsx","Text","jsxs","Trans","newCode","claimHandle","CONTRACT_CONTROLLER_ADDRESS","L1Controller","error","Stack","classes","ErrorMessage","ConfirmationLoading","ConfirmationReady","Fragment","AtIcon","IconExclamationCircle","RootButton","ConfirmPremiumUsername","price","isError","setIsError","l1NativeWagmiConfig","contractCalls","useMemo","CONTRACT_COLLECTOR_ADDRESS","L1PaymentCollector","parseEther","claimPaidHandle","checkPurchaseCompletion","TransactionSummary","getFreeUsernameText","useFreeUsernameText","FreeTextArea","className","createProfile","getPremiumUsernameText","usePremiumUsernameText","PremiumDetails","detailsBox","details","minBalance","displayBalance","enoughBalance","PremiumTextArea","IdentityNameRules","List","MIN_HANDLE_LENGTH","MAX_HANDLE_LENGTH","IdentityStringSizeRule","countChars","Component","navigate","useNavigate","state","pathname","useLocation","premium","useAuth","errorMessages","useErrorMessages","premiumLabel","premiumModalTitle","premiumTitleArea","premiumCheckAvailabilityButtonText","freeLabel","freeModalTitle","freeTitleArea","freeCheckAvailabilityButtonText","readContract","balance","useChainValues","balanceId","identityUsername","setIdentityUsername","tested","setTested","label","message","setMessage","submitting","isConfirming","setIsConfirming","isChecking","setIsChecking","usernameAvailable","setCountChars","borderStatus","setBorderStatus","displayUsernameRules","setDisplayUsernameRules","isTimerOn","setIsTimerOn","setMinBalance","expiryTimestamp","setExpiryTimestamp","setCreateProfile","setFirstLogin","opened","open","useDisclosure","isConfirmed","setIsConfirmed","openedErrorModal","openErrorModal","closeErrorModal","isUserSettings","skip","getAuthedRedirectPath","setAUsername","closeModal","confirmed","timeout","checkBalance","premiumMinBalance","formatBalance","submitFree","FREE_MIN_BALANCE","post","ID_BOT","time","submitPremium","canRegister","convertToEpochSeconds","handleSubmit","submit","setErrorMessages","checkAvailabilityFree","checkAvailabilityPremium","handleCheckAvailability","check","iconLeft","InvalidIcon","CheckedIcon","onChangeIdentityUsername","value","isAddress","ModalSkeleton","Modal","Timer","Grid","Lamina1Logo","BackButton","Title","AddressDisplay","SpecialInputTile"],"mappings":"09BAAA,MAAeA,GAAA,4CCATC,GAAM,CACV,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,CACF,EACA,gBAAiB,aACjB,KAAM,aACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,gBACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,WACN,KAAM,SACR,CACF,EACA,KAAM,uBACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,QACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,SACd,KAAM,SACN,KAAM,QACR,EACA,CACE,QAAS,GACT,aAAc,UACd,KAAM,QACN,KAAM,SACR,EACA,CACE,QAAS,GACT,aAAc,OACd,KAAM,UACN,KAAM,MACR,CACF,EACA,KAAM,YACN,KAAM,OACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,QACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,SACN,KAAM,QACR,CACF,EACA,KAAM,QACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,SACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,SACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,SACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,SACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,SACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,SACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,SACR,CACF,EACA,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,SACN,KAAM,QACR,CACF,EACA,KAAM,WACN,QAAS,CAAC,EACV,gBAAiB,UACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,SACd,KAAM,SACN,KAAM,QACR,CACF,EACA,KAAM,QACN,QAAS,CAAC,EACV,gBAAiB,UACjB,KAAM,UACR,EACA,CACE,OAAQ,CAAC,EACT,KAAM,oBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,EACA,CACE,aAAc,UACd,KAAM,UACN,KAAM,SACR,CACF,EACA,KAAM,YACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,WACN,KAAM,SACR,CACF,EACA,KAAM,oBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACR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"}