{"version":3,"sources":["style/Global.ts","connectors/NetworkConnector.ts","connectors/index.ts","constants/index.ts","hooks/index.ts","state/application/actions.ts","state/application/hooks.ts","components/Column/index.tsx","state/lists/actions.ts","utils/listVersionLabel.ts","components/Row/index.tsx","components/Popups/ListUpdatePopup.tsx","utils/index.ts","components/Shared/Common.tsx","components/Popups/TransactionPopup.tsx","components/Popups/PopupItem.tsx","components/Popups/index.tsx","components/Loader/index.tsx","components/Web3ReactManager/index.tsx","components/Card/index.tsx","components/Modal/index.tsx","components/TransactionConfirmationModal/helpers.tsx","components/TransactionConfirmationModal/ConfirmationPendingContent.tsx","components/TransactionConfirmationModal/TransactionSubmittedContent.tsx","components/TransactionConfirmationModal/TransactionConfirmationModal.tsx","components/TransactionConfirmationModal/ConfirmationModalContent.tsx","components/TransactionConfirmationModal/TransactionErrorContent.tsx","components/TransactionConfirmationModal/index.tsx","hooks/TranslationsContext.ts","utils/translateTextHelpers.ts","hooks/useI18n.ts","components/CardNav/index.tsx","constants/abis/erc20.ts","state/lists/hooks.ts","state/multicall/actions.ts","state/multicall/hooks.ts","state/user/actions.ts","utils/theme.ts","state/user/hooks.tsx","constants/multicall/index.ts","hooks/useContract.ts","hooks/Tokens.ts","state/wallet/hooks.ts","hooks/useLast.ts","utils/contenthashToUri.ts","utils/parseENSAddress.ts","utils/uriToHttp.ts","utils/isZero.ts","hooks/useHttpLocations.ts","hooks/useENSContentHash.ts","components/Logo/index.tsx","components/ListLogo/index.tsx","hooks/useInterval.ts","components/Popover/index.tsx","components/Tooltip/index.tsx","components/QuestionHelper/index.tsx","components/pancake/CoinLogo.ts","components/CurrencyLogo/index.tsx","components/SearchModal/CommonBases.tsx","components/SearchModal/styleds.tsx","components/SearchModal/CurrencyList.tsx","components/SearchModal/filtering.ts","components/SearchModal/SortButton.tsx","components/SearchModal/sorting.ts","components/SearchModal/CurrencySearch.tsx","constants/lists.ts","utils/getTokenList.ts","utils/resolveENSContentHash.ts","hooks/useFetchListCallback.ts","hooks/useOnClickOutside.tsx","components/SearchModal/ListSelect.tsx","hooks/useToggle.ts","components/SearchModal/CurrencySearchModal.tsx","components/DoubleLogo/index.tsx","components/NumericalInput/index.tsx","components/CurrencyInputPanel/index.tsx","components/NavigationTabs/index.tsx","data/TotalSupply.ts","utils/currencyId.ts","utils/wrappedCurrency.ts","components/swap/styleds.tsx","components/PositionCard/index.tsx","data/Reserves.ts","data/Allowances.ts","state/swap/actions.ts","state/transactions/actions.ts","state/transactions/hooks.tsx","utils/prices.ts","hooks/useApproveCallback.ts","state/mint/actions.ts","hooks/useDebounce.ts","hooks/useENS.ts","hooks/useENSName.ts","hooks/useENSAddress.ts","hooks/Trades.ts","state/swap/hooks.ts","hooks/useParsedQueryString.ts","state/mint/hooks.ts","utils/maxAmountSpend.ts","components/Pane/index.tsx","state/toasts/index.ts","hooks/useToast.ts","hooks/useAuth.ts","components/ConnectWalletButton/index.tsx","pages/AppBody.tsx","pages/Pool/styleds.tsx","pages/AddLiquidity/ConfirmAddModalBottom.tsx","pages/AddLiquidity/PoolPriceBar.tsx","pages/AddLiquidity/index.tsx","pages/AddLiquidity/redirects.tsx","pages/RemoveLiquidity/redirects.tsx","components/PageHeader/SlippageToleranceSetting.tsx","components/PageHeader/TransactionDeadlineSetting.tsx","components/PageHeader/SettingsModal.tsx","components/PageHeader/RecentTransactionsModal.tsx","components/PageHeader/index.tsx","pages/PoolFinder/index.tsx","pages/Pool/index.tsx","components/Slider/index.tsx","state/burn/actions.ts","state/burn/hooks.ts","pages/RemoveLiquidity/index.tsx","utils/useDebouncedChangeHandler.ts","components/AddressInputPanel/index.tsx","components/swap/FormattedPriceImpact.tsx","components/swap/SwapModalFooter.tsx","components/swap/SwapModalHeader.tsx","components/swap/ConfirmSwapModal.tsx","components/swap/SwapRoute.tsx","components/swap/AdvancedSwapDetails.tsx","components/swap/AdvancedSwapDetailsDropdown.tsx","components/swap/TradePrice.tsx","components/TokenWarningModal/index.tsx","components/SyrupWarningModal/index.tsx","components/ProgressSteps/index.tsx","hooks/useSwapCallback.ts","hooks/useWrapCallback.ts","pages/Swap/index.tsx","components/swap/confirmPriceImpactWithoutFee.ts","pages/Swap/redirects.tsx","constants/localisation/languageCodes.ts","hooks/LanguageContext.ts","ThemeContext.tsx","hooks/useTheme.ts","hooks/useGetPriceData.ts","hooks/useGetLocalProfile.ts","components/Menu/config.ts","components/Menu/index.tsx","hooks/useGetDocumentTitlePrice.ts","pages/App.tsx","hooks/useIsWindowVisible.ts","state/application/updater.ts","state/lists/updater.ts","utils/retry.ts","state/multicall/updater.tsx","utils/chunkArray.ts","state/transactions/updater.tsx","components/ToastListener/index.tsx","state/application/reducer.ts","state/global/actions.ts","state/user/reducer.ts","state/transactions/reducer.ts","state/swap/reducer.ts","state/mint/reducer.ts","state/lists/reducer.ts","state/burn/reducer.ts","state/multicall/reducer.ts","state/index.ts","utils/getLibrary.ts","Providers.tsx","i18n.ts","index.tsx"],"names":["GlobalStyle","createGlobalStyle","theme","colors","background","RequestError","message","code","data","Error","MiniRpcProvider","chainId","url","batchWaitTimeMs","isMetaMask","host","path","nextId","batchTimeoutId","batch","clearBatch","a","console","info","fetch","method","headers","accept","body","JSON","stringify","map","item","request","response","forEach","reject","ok","status","statusText","json","byKey","reduce","memo","current","id","result","resolve","error","sendAsync","callback","params","then","jsonrpc","catch","toString","promise","Promise","push","setTimeout","this","parsed","URL","pathname","NetworkConnector","urls","defaultChainId","invariant","Object","keys","length","supportedChainIds","k","Number","providers","currentChainId","accumulator","provider","account","AbstractConnector","NETWORK_URL","process","NETWORK_CHAIN_ID","parseInt","networkLibrary","network","injected","InjectedConnector","bscConnector","BscConnector","walletconnect","WalletConnectConnector","rpc","bridge","qrcode","pollingInterval","connectorsByName","WalletLinkConnector","appName","appLogoUrl","ConnectorNames","Injected","WalletConnect","BSC","ROUTER_ADDRESS","DAI","Token","ChainId","MAINNET","BUSD","BTCB","USDT","UST","ETH","WETH_ONLY","WETH","BSCTESTNET","BASES_TO_CHECK_TRADES_AGAINST","CUSTOM_BASES","SUGGESTED_BASES","BASES_TO_TRACK_LIQUIDITY_FOR","PINNED_PAIRS","NetworkContextName","INITIAL_ALLOWED_SLIPPAGE","DEFAULT_DEADLINE_FROM_NOW","ONE_BIPS","Percent","JSBI","BigInt","BIPS_BASE","ALLOWED_PRICE_IMPACT_LOW","ALLOWED_PRICE_IMPACT_MEDIUM","ALLOWED_PRICE_IMPACT_HIGH","PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN","BLOCKED_PRICE_IMPACT_NON_EXPERT","MIN_ETH","exponentiate","useActiveWeb3React","context","useWeb3ReactCore","contextNetwork","active","updateBlockNumber","createAction","toggleWalletModal","toggleSettingsMenu","addPopup","removePopup","useBlockNumber","useSelector","state","application","blockNumber","useRemovePopup","dispatch","useDispatch","useCallback","key","Column","styled","div","ColumnCenter","AutoColumn","gap","justify","fetchTokenList","pending","fulfilled","rejected","acceptListUpdate","addList","removeList","selectList","listVersionLabel","version","major","minor","patch","Row","Box","align","padding","border","borderRadius","RowBetween","RowFlat","AutoRow","RowFixed","ListUpdatePopup","popKey","listUrl","oldList","newList","auto","removeThisPopup","handleAcceptUpdate","useMemo","diffTokenLists","tokens","tokensAdded","added","tokensChanged","changed","tokensRemoved","removed","numTokensChanged","style","flex","name","fontSize","token","i","Fragment","title","address","symbol","flexGrow","marginRight","onClick","isAddress","value","getAddress","BSCSCAN_PREFIXES","56","97","getBscScanLink","type","prefix","shortenAddress","chars","substring","calculateGasMargin","mul","BigNumber","from","add","calculateSlippageAmount","slippage","divide","multiply","raw","getContract","ABI","library","AddressZero","Contract","getSigner","connectUnchecked","getProviderOrSigner","getRouterContract","_","IUniswapV2Router02ABI","LinkStyledButton","button","disabled","textSubtle","primary","StyledInternalLink","Link","StyledLink","ExternalLink","target","href","rel","rest","handleClick","event","ctrlKey","metaKey","preventDefault","rotate","keyframes","Spinner","img","RowNoFlex","TransactionPopup","hash","success","summary","useContext","ThemeContext","paddingRight","color","size","failure","slice","StyledClose","X","Popup","invertedContrast","mediaQueries","sm","Fader","tertiary","AnimatedFader","animated","PopupItem","removeAfterMs","content","useEffect","timeout","clearTimeout","popupContent","txn","listUpdate","faderStyle","useSpring","width","to","config","duration","undefined","MobilePopupWrapper","height","MobilePopupInner","FixedPopupColumn","Popups","activePopups","list","popupList","filter","show","useActivePopups","reverse","StyledSVG","svg","stroke","Loader","viewBox","fill","xmlns","d","strokeWidth","strokeLinecap","strokeLinejoin","MessageWrapper","Message","h2","primaryDark","Web3ReactManager","children","t","useTranslation","useWeb3React","networkActive","networkError","activateNetwork","activate","triedEager","useState","tried","setTried","isAuthorized","hasSignedIn","window","localStorage","getItem","connectorLocalStorageKey","isMobile","ethereum","useEagerConnect","suppress","on","handleChainChanged","e","handleAccountsChanged","accounts","removeListener","useInactiveListener","showLoader","setShowLoader","Card","LightCard","GreyCard","AnimatedDialogOverlay","DialogOverlay","StyledDialogOverlay","AnimatedDialogContent","DialogContent","StyledDialogContent","minHeight","maxHeight","mobile","isOpen","attrs","transparentize","css","lg","Modal","onDismiss","initialFocusRef","fadeTransition","useTransition","opacity","enter","leave","props","aria-label","tabIndex","Wrapper","Section","ConfirmedIcon","BottomSection","StyledContentHeader","Heading","ContentHeader","variant","CustomLightSpinner","ConfirmationPendingContent","pendingText","src","alt","TransactionSubmittedContent","mt","TransactionConfirmationModal","attemptingTxn","ConfirmationModalContent","bottomContent","topContent","TransactionErrorContent","marginTop","textAlign","defaultTranslationState","translations","setTranslations","TranslationsContext","createContext","variableRegex","getTranslation","translationId","fallback","foundTranslation","find","translation","stringId","translatedString","text","includes","stringToReplace","exec","indexToReplace","split","indexOf","fallbackValueAtIndex","replace","replaceDynamicString","TranslateString","useI18n","StyledNav","Nav","activeIndex","scale","as","ERC20_INTERFACE","Interface","ERC20_ABI","WrappedTokenInfo","tokenInfo","tags","decimals","logoURI","EMPTY_LIST","listCache","WeakMap","useTokenList","lists","byUrl","get","tokenMap","tagId","x","Boolean","set","listToTokenMap","useSelectedListUrl","selectedListUrl","useSelectedTokenList","ADDRESS_REGEX","LOWER_HEX_REGEX","toCallKey","call","test","callData","parseCallKey","callKey","pcs","addMulticallListeners","removeMulticallListeners","fetchingMulticallResults","errorFetchingMulticallResults","updateMulticallResults","isMethodArg","isValidMethodArgs","Array","isArray","every","xi","INVALID_RESULT","valid","NEVER_RELOAD","blocksPerFetch","Infinity","useCallsData","calls","options","callResults","multicall","serializedCallKeys","c","sort","callKeys","parse","INVALID_CALL_STATE","loading","syncing","LOADING_CALL_STATE","toCallState","callResult","contractInterface","fragment","latestBlockNumber","decodeFunctionResult","useMultipleContractSingleData","addresses","methodName","callInputs","getFunction","encodeFunctionData","results","useSingleCallResult","contract","inputs","interface","updateMatchesDarkMode","updateUserDarkMode","updateUserExpertMode","updateUserSlippageTolerance","updateUserDeadline","addSerializedToken","removeSerializedToken","addSerializedPair","removeSerializedPair","muteAudio","unmuteAudio","CACHE_KEY","serializeToken","deserializeToken","serializedToken","useIsExpertMode","user","userExpertMode","useUserSlippageTolerance","userSlippageTolerance","slippageTolerance","useUserDeadline","userDeadline","deadline","useUserAddedTokens","serializedTokensMap","values","serializePair","pair","token0","token1","toV2LiquidityToken","tokenA","tokenB","Pair","MULTICALL_NETWORKS","useContract","withSignerIfPossible","useTokenContract","tokenAddress","useENSRegistrarContract","ENS_ABI","useENSResolverContract","ENS_PUBLIC_RESOLVER_ABI","useMulticallContract","MULTICALL_ABI","useAllTokens","userAddedTokens","allTokens","BYTES32_REGEX","parseStringOrBytes32","str","bytes32","defaultValue","parseBytes32String","useToken","tokenContract","tokenContractBytes32","ERC20_BYTES32_ABI","useBytes32TokenContract","tokenName","tokenNameBytes32","symbolBytes32","useCurrency","currencyId","isBNB","toUpperCase","ETHER","useETHBalances","uncheckedAddresses","multicallContract","useSingleContractMultipleData","CurrencyAmount","ether","useTokenBalancesWithLoadingIndicator","validatedTokens","balances","vt","anyLoading","some","callState","amount","TokenAmount","useTokenBalances","useTokenBalance","tokenBalances","useCurrencyBalances","currencies","currency","ethBalance","useCurrencyBalance","useLast","filterFn","last","setLast","prev","isDefined","UTF_8_DECODER","TextDecoder","contenthashToUri","contenthash","buff","hex","startsWith","substr","arr","Uint8Array","hexToUint8Array","codec","getCodec","rmPrefix","cid","CID","toB58String","multihash","decode","digest","trim","ENS_NAME_REGEX","parseENSAddress","ensAddress","match","ensName","toLowerCase","ensPath","uriToHttp","uri","isZero","hexNumberString","useHttpLocations","ens","resolvedContentHash","ensNodeArgument","namehash","resolverAddressResult","resolverAddress","useENSContentHash","BAD_SRCS","Logo","srcs","refresh","s","onError","StyledListLogo","ListLogo","useInterval","delay","leading","savedCallback","useRef","tick","setInterval","clearInterval","PopoverContainer","ReferenceElement","Arrow","Popover","placement","referenceElement","setReferenceElement","popperElement","setPopperElement","arrowElement","setArrowElement","usePopper","strategy","modifiers","offset","element","styles","update","attributes","ref","popper","className","arrow","TooltipContainer","Tooltip","MouseoverTooltip","setShow","open","close","onMouseEnter","onMouseLeave","QuestionWrapper","QuestionHelper","marginLeft","CoinLogo","getTokenLogoURL","StyledBnbLogo","StyledLogo","CurrencyLogo","uriLocations","BaseWrapper","disable","CommonBases","onSelect","selectedCurrency","currencyEquals","selected","FadedSpan","PaddedColumn","MenuItem","SearchInput","input","textDisabled","Separator","SeparatorDark","currencyKey","StyledBalanceText","Text","Tag","Balance","balance","toExact","toSignificant","TagContainer","TokenTags","tag","description","join","CurrencyRow","isSelected","otherSelected","isOnSelectedList","defaultTokens","isTokenOnList","customAdded","useIsUserAddedToken","removeToken","useRemoveUserAddedToken","addToken","useAddUserToken","stopPropagation","justifySelf","CurrencyList","onCurrencySelect","otherCurrency","fixedListRef","showETH","itemData","Currency","index","itemKey","itemCount","itemSize","filterTokens","search","searchingAddress","lowerSearchParts","matchesSearch","sParts","p","sp","endsWith","FilterWrapper","SortButton","toggleSortOrder","ascending","useTokenComparator","inverted","useAllTokenBalances","comparator","balanceA","balanceB","balanceComp","greaterThan","equalTo","getTokenComparator","CurrencySearch","otherSelectedCurrency","showCommonBases","onChangeList","fixedList","searchQuery","setSearchQuery","invertSearchOrder","setInvertSearchOrder","isAddressSearch","searchToken","tokenComparator","audioPlay","filteredTokens","filteredSortedTokens","sorted","symbolMatch","handleCurrencySelect","audio","document","getElementById","play","inputRef","handleInput","checksummedInput","scrollTo","handleEnter","selectedUrl","listsByUrl","pendingUpdate","loadingRequestId","useSelectedListInfo","placeholder","onChange","onKeyDown","iso","disableWidth","DEFAULT_TOKEN_LIST_URL","DEFAULT_LIST_OF_LISTS","tokenListValidator","Ajv","allErrors","compile","schema","getTokenList","resolveENSContentHash","defaultTokenJson","parsedENS","contentHashUri","translatedUri","isLast","validationErrors","errors","dataPath","REGISTRAR_ABI","constant","outputs","payable","stateMutability","REGISTRAR_ADDRESS","RESOLVER_ABI","internalType","resolverContract","ensRegistrarContract","resolver","useFetchListCallback","ensResolver","Web3Provider","getNetworkLibrary","requestId","nanoid","tokenList","errorMessage","useOnClickOutside","node","handler","handlerRef","handleClickOutside","contains","addEventListener","removeEventListener","UnpaddedLinkStyledButton","StyledMenu","StyledListUrlText","ListOrigin","lowerListUrl","listUrlRowHTMLId","ListRow","onBack","initialState","setState","toggle","useToggle","selectThisList","handleAcceptListUpdate","handleRemoveList","prompt","bold","overflow","textOverflow","display","minWidth","ListContainer","ListSelect","listUrlInput","setListUrlInput","adding","addError","setAddError","fetchList","handleAddList","validUrl","handleEnterKey","sortedLists","u1","u2","l1","l2","cursor","maxWidth","CurrencySearchModal","listView","setListView","lastOpen","handleClickChangeList","handleClickBack","noListSelected","sizeraw","margin","HigherLogo","CoveredLogo","DoubleCurrencyLogo","currency0","currency1","StyledInput","inputRegex","RegExp","Input","React","onUserInput","nextUserInput","inputMode","autoComplete","autoCorrect","pattern","minLength","maxLength","spellCheck","InputRow","CurrencySelect","darken","LabelRow","Aligner","span","InputPanel","hideInput","Container","shadows","inset","CurrencyInputPanel","onMax","showMaxButton","label","disableCurrencySelect","hideBalance","modalOpen","setModalOpen","selectedCurrencyBalance","translatedLabel","handleDismissSearch","val","Tabs","ActiveText","StyledArrowLeft","ArrowLeft","FindPoolTabs","AddRemoveTabs","useTotalSupply","totalSupply","wrappedCurrency","wrappedCurrencyAmount","currencyAmount","unwrappedToken","equals","ArrowWrapper","clickable","SectionBreak","BottomGrouping","ErrorText","severity","binance","StyledBalanceMaxMini","Dots","SwapCallbackErrorInner","SwapCallbackErrorInnerAlertTriangle","SwapCallbackError","SwapShowAcceptChanges","FixedHeightRow","HoverCard","MinimalPositionCard","showUnwrapped","showMore","setShowMore","userPoolBalance","liquidityToken","totalPoolTokens","greaterThanOrEqual","getLiquidityValue","token0Deposited","token1Deposited","textTransform","fontWeight","ml","FullPositionCard","poolTokenPercentage","toFixed","PairState","PAIR_INTERFACE","IUniswapV2PairABI","usePairs","currencyA","currencyB","reserves","LOADING","INVALID","NOT_EXISTS","reserve0","reserve1","sortsBefore","EXISTS","usePair","useTokenAllowance","owner","spender","allowance","Field","selectCurrency","switchCurrencies","typeInput","replaceSwapState","setRecipient","addTransaction","clearAllTransactions","finalizeTransaction","checkedTransaction","useTransactionAdder","approval","useAllTransactions","transactions","isTransactionRecent","tx","Date","getTime","addedTime","ApprovalState","BASE_FEE","ONE_HUNDRED_PERCENT","INPUT_FRACTION_AFTER_FEE","subtract","computeTradePriceBreakdown","trade","realizedLPFee","route","pairs","currentFee","priceImpactWithoutFeeFraction","priceImpact","priceImpactWithoutFee","numerator","denominator","inputAmount","quotient","computeSlippageAdjustedAmounts","allowedSlippage","num","pct","Math","floor","INPUT","maximumAmountIn","OUTPUT","minimumAmountOut","warningSeverity","lessThan","formatExecutionPrice","executionPrice","invert","outputAmount","useApproveCallback","amountToApprove","currentAllowance","pendingApproval","allTransactions","receipt","useHasPendingApproval","approvalState","APPROVED","PENDING","NOT_APPROVED","UNKNOWN","approve","useExact","estimateGas","MaxUint256","estimatedGas","gasLimit","resetMintState","useDebounce","debouncedValue","setDebouncedValue","useENS","nameOrAddress","validated","reverseLookup","debouncedAddress","ENSName","useENSName","lookup","debouncedName","addr","useENSAddress","useAllCommonPairs","bases","basePairs","flatMap","base","otherBase","t0","t1","allPairs","customBases","customBasesA","customBasesB","curr","useSwapState","swap","tryParseAmount","typedValueParsed","parseUnits","BAD_RECIPIENT_ADDRESSES","involvesAddress","checksummedAddress","useDerivedSwapInfo","inputError","independentField","typedValue","inputCurrencyId","outputCurrencyId","recipient","inputCurrency","outputCurrency","recipientLookup","relevantTokenBalances","isExactIn","parsedAmount","bestTradeExactIn","currencyAmountIn","currencyOut","allowedPairs","Trade","maxHops","maxNumResults","useTradeExactIn","bestTradeExactOut","currencyIn","currencyAmountOut","useTradeExactOut","v2Trade","currencyBalances","formattedTo","slippageAdjustedAmounts","balanceIn","amountIn","parseCurrencyFromURLParameter","urlParam","queryParametersToSwapState","parsedQs","validatedRecipient","exactAmount","isNaN","parseFloat","parseIndependentFieldURLParameter","exactField","useDefaultsFromURLSearch","useLocation","parseArrays","ignoreQueryPrefix","useParsedQueryString","setResult","field","ZERO","useMintState","mint","maxAmountSpend","Pane","borderColor","toastsSlice","createSlice","reducers","action","payload","toastIndex","findIndex","toast","splice","unshift","remove","clear","actions","useToast","pushToast","toastError","kebabCase","toastTypes","DANGER","toastInfo","INFO","toastSuccess","SUCCESS","toastWarning","WARNING","removeToast","clearToast","useAuth","deactivate","login","connectorID","connector","removeItem","UnsupportedChainIdError","NoEthereumProviderError","NoBscProviderError","UserRejectedRequestErrorInjected","UserRejectedRequestErrorWalletConnect","walletConnectProvider","logout","UnlockButton","onPresentConnectModal","useWalletModal","BodyWrapper","AppBody","ClickableText","ConfirmAddModalBottom","noLiquidity","price","parsedAmounts","onAdd","CURRENCY_A","CURRENCY_B","justifyContent","PoolPriceBar","pt","AddLiquidity","currencyIdA","currencyIdB","history","oneCurrencyIsWBNB","expertMode","otherTypedValue","dependentField","pairState","equal","independentAmount","dependentAmount","wrappedIndependentAmount","dependentCurrency","dependentTokenAmount","priceOf","quote","currencyAAmount","currencyBAmount","Price","wrappedCurrencyA","liquidityMinted","tokenAmountA","tokenAmountB","getLiquidityMinted","useDerivedMintInfo","onFieldAInput","onFieldBInput","useMintActionHandlers","isValid","showConfirm","setShowConfirm","setAttemptingTxn","txHash","setTxHash","formattedAmounts","maxAmounts","atMaxAmounts","approvalA","approveACallback","approvalB","approveBCallback","router","parsedAmountA","parsedAmountB","amountsMin","deadlineFromNow","ceil","now","tokenBIsBNB","estimate","addLiquidityETH","args","addLiquidity","estimatedGasLimit","modalHeader","mr","small","fontStyle","modalBottom","handleCurrencyASelect","currA","newCurrencyIdA","handleCurrencyBSelect","currB","newCurrencyIdB","handleDismissConfirmation","CardNav","mb","ConnectWalletButton","OLD_PATH_STRUCTURE","RedirectOldAddLiquidityPathStructure","RedirectDuplicateTokenIds","RedirectOldRemoveLiquidityPathStructure","StyledSlippageToleranceSettings","Option","Options","Label","predefinedValues","SlippageToleranceSettings","translateString","setUserslippageTolerance","setValue","setError","rawValue","predefinedValue","alignItems","step","min","evt","inputValue","isWarning","StyledTransactionDeadlineSetting","TransactionDeadlineSetting","setDeadline","defaultOnDismiss","SettingsModal","SlippageToleranceSetting","newTransactionsFirst","b","RecentTransactionsModal","sortedRecentTransactions","flexDirection","sortedRecentTransaction","icon","getRowStatus","Fields","HistoryIcon","StyledPageHeader","Details","PageHeader","useModal","onPresentSettings","onPresentRecentTransactions","Pool","trackedTokenPairs","pinnedPairs","generatedPairs","savedSerializedPairs","userPairs","forChain","pairId","combinedList","concat","keyed","useTrackedTokenPairs","tokenPairsWithLiquidityTokens","tpwlt","v2PairsBalances","fetchingV2PairBalances","liquidityTokensWithBalances","v2Pairs","v2IsLoading","V2Pair","allV2PairsWithLiquidity","v2Pair","PoolFinder","showSearch","setShowSearch","TOKEN1","activeField","setActiveField","setCurrency0","setCurrency1","addPair","serializedPair","usePairAdder","validPairNoLiquidity","position","hasPosition","TOKEN0","handleSearchDismiss","prerequisiteMessage","startIcon","endIcon","justifyItems","backgroundColor","StyledRangeInput","Slider","max","changeCallback","aria-labelledby","useBurnState","burn","OutlineCard","Body","RemoveLiquidity","userLiquidity","LIQUIDITY","liquidityValueA","liquidityValueB","liquidityValues","percentToRemove","LIQUIDITY_PERCENT","liquidityValue","useDerivedBurnInfo","_onUserInput","useBurnActionHandlers","showDetailed","setShowDetailed","atMaxAmount","pairContract","signatureData","setSignatureData","approveCallback","liquidityAmount","nonces","nonce","deadlineForSignature","EIP712Domain","domain","verifyingContract","Permit","toHexString","types","primaryType","send","splitSignature","signature","v","r","onLiquidityInput","onCurrencyAInput","onCurrencyBInput","onRemove","currencyAmountA","currencyAmountB","currencyBIsETH","oneCurrencyIsETH","methodNames","all","safeGasEstimates","indexOfSuccessfulEstimation","safeGasEstimate","isBigNumber","liquidityPercentChangeCallback","oneCurrencyIsWETH","handleSelectCurrencyA","handleSelectCurrencyB","debouncedMs","inner","setInner","timer","onChangeInner","newValue","useDebouncedChangeHandler","innerLiquidityPercentage","setInnerLiquidityPercentage","paddingBottom","ContainerRow","InputContainer","AddressInputPanel","withoutSpaces","autoCapitalize","FormattedPriceImpact","SwapModalFooter","onConfirm","swapErrorMessage","disabledConfirm","showInverted","setShowInverted","paddingLeft","tradeType","TradeType","EXACT_INPUT","PriceInfoText","SwapModalHeader","showAcceptChanges","onAcceptChanges","priceImpactSeverity","EXACT_OUTPUT","ConfirmSwapModal","originalTrade","tradeB","tradeA","confirmationContent","px","py","my","flexWrap","isLastItem","flexShrink","TradeSummary","AdvancedSwapDetails","showRoute","AdvancedDetailsFooter","AdvancedSwapDetailsDropdown","lastTrade","TradePrice","formattedPrice","baseCurrency","quoteCurrency","WarningContainer","StyledWarningIcon","AlertTriangle","TokenWarningCard","tokenSymbol","duplicateNameOrSymbol","userToken","TokenWarningModal","understandChecked","setUnderstandChecked","toggleUnderstand","uc","handleDismiss","htmlFor","userSelect","checked","SyrupWarningModal","transactionType","SwapCallbackState","Grouping","Circle","confirmed","backgroundDisabled","CircleRow","Connector","prevConfirmed","ProgressCircles","steps","useSwapCallArguments","recipientAddressOrName","recipientAddress","swapMethods","Router","swapCallParameters","feeOnTransfer","ttl","parameters","useSwapCallback","swapCalls","VALID","gasEstimate","gasError","callStatic","callError","reason","estimatedCalls","successfulEstimation","el","ix","errorCalls","inputSymbol","outputSymbol","withRecipient","WrapType","NOT_APPLICABLE","wrapType","useWrapCallback","wethContract","WETH_ABI","useWETHContract","sufficientBalance","WRAP","execute","deposit","txReceipt","UNWRAP","withdraw","Swap","loadedUrlParams","loadedInputCurrency","loadedOutputCurrency","dismissTokenWarning","setDismissTokenWarning","isSyrup","setIsSyrup","syrupTransactionType","setSyrupTransactionType","urlLoadedTokens","handleConfirmTokenWarning","handleConfirmSyrupWarning","toggleSetExpertMode","useExpertModeManager","isExpertMode","swapInputError","onWrap","wrapInputError","showWrap","onCurrencySelection","onSwitchTokens","onChangeRecipient","useSwapActionHandlers","handleTypeInput","handleTypeOutput","tradeToConfirm","setSwapState","userHasSpecifiedInputOutput","noRoute","useApproveCallbackFromTrade","approvalSubmitted","setApprovalSubmitted","maxAmountInput","atMaxAmountInput","swapCallback","swapCallbackError","handleSwap","confirm","confirmPriceImpactWithoutFee","prevState","showApproveFlow","handleConfirmDismiss","handleAcceptChanges","checkForSyrup","purchaseType","handleInputSelect","handleMaxInput","handleOutputSelect","RedirectPathToSwapOnly","location","EN","language","allLanguages","defaultLanguageState","selectedLanguage","setSelectedLanguage","translatedLanguage","setTranslatedLanguage","LanguageContext","isDark","toggleTheme","ThemeContextProvider","isDarkUserSetting","setIsDark","Provider","setItem","dark","light","useTheme","StyledThemeCopntext","useGetPriceData","setData","res","fetchData","profileLink","noProfileLink","useGetLocalProfile","profile","setProfile","localData","Cookies","localProfile","prevProfile","username","image","avatar","items","Menu","priceData","cakePriceUsd","prices","PIANO","links","currentLang","langs","setLang","useGetDocumentTitlePrice","cakePriceUsdString","toLocaleString","minimumFractionDigits","maximumFractionDigits","AppWrapper","xs","Marginer","App","apiKey","REACT_APP_CROWDIN_APIKEY","projectId","REACT_APP_CROWDIN_PROJECTID","credentials","stringTranslationsApi","StringTranslations","storedLangCode","storedLang","getStoredLang","fetchTranslationsForSelectedLanguage","listLanguageTranslations","translationApiResponse","exact","strict","component","VISIBILITY_STATE_SUPPORTED","isWindowVisible","visibilityState","useIsWindowVisible","focused","setFocused","listener","Updater","windowVisible","blockNumberCallback","getBlockNumber","debouncedState","bump","getVersionUpgrade","VersionUpgrade","NONE","PATCH","MINOR","minVersionBump","MAJOR","waitRandom","ms","round","random","CancelledError","RetryableError","chunk","minBlockNumber","aggregate","obj","resultsBlockNumber","returnData","toNumber","debouncedListeners","callListeners","cancellations","listeningKeys","allListeners","listeners","keyListeners","previousMin","activeListeningKeys","unserializedOutdatedCallKeys","minDataBlockNumber","fetchingBlockNumber","outdatedListeningKeys","serializedOutdatedCallKeys","outdatedCallKeys","chunkedCalls","maxChunkSize","numChunks","chunkSize","chunkArray","fn","rejectCancelled","n","minWait","maxWait","completed","cancel","retry","fetchChunk","fetchBlockNumber","firstCallKeyIndex","lastCallKeyIndex","lastBlockNumber","useAddPopup","lastCheckedBlockNumber","blocksSinceCheck","minutesPending","shouldCheck","getTransactionReceipt","blockHash","contractAddress","transactionHash","transactionIndex","ToastListener","toasts","createReducer","walletModalOpen","settingsMenuOpen","builder","addCase","popup","updateVersion","currentTimestamp","pairKey","token0Address","token1Address","userDarkMode","matchesDarkMode","timestamp","lastUpdateVersionTimestamp","tokenAAddress","tokenBAddress","txs","confirmedTime","otherField","NEW_LIST_STATE","lastInitializedDefaultListOfLists","DEFAULT_LIST","lastInitializedSet","l","Set","newListOfListsSet","has","PERSISTED_KEYS","loadedState","load","states","cache","rawCache","getThemeCache","store","configureStore","reducer","middleware","getDefaultMiddleware","thunk","save","preloadedState","getLibrary","Web3ProviderNetwork","createWeb3ReactRoot","Providers","i18next","use","XHR","LanguageDetector","initReactI18next","init","backend","loadPath","react","useSuspense","fallbackLng","preload","keySeparator","interpolation","escapeValue","autoRefreshOnNetworkChange","ReactDOM","render","Global"],"mappings":"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","file":"static/js/main.637b766d.chunk.js","sourcesContent":["import { createGlobalStyle } from 'styled-components'\n\nconst GlobalStyle = createGlobalStyle`\n body {\n background-color: ${({ theme }) => theme.colors.background};\n\n img {\n height: auto;\n max-width: 100%;\n }\n }\n`\n\nexport default GlobalStyle\n","import { ConnectorUpdate } from '@web3-react/types'\nimport { AbstractConnector } from '@web3-react/abstract-connector'\nimport invariant from 'tiny-invariant'\n\ninterface NetworkConnectorArguments {\n urls: { [chainId: number]: string }\n defaultChainId?: number\n}\n\n// taken from ethers.js, compatible interface with web3 provider\ntype AsyncSendable = {\n isMetaMask?: boolean\n host?: string\n path?: string\n sendAsync?: (request: any, callback: (error: any, response: any) => void) => void\n send?: (request: any, callback: (error: any, response: any) => void) => void\n}\n\nclass RequestError extends Error {\n constructor(message: string, public code: number, public data?: unknown) {\n super(message)\n }\n}\n\ninterface BatchItem {\n request: { jsonrpc: '2.0'; id: number; method: string; params: unknown }\n resolve: (result: any) => void\n reject: (error: Error) => void\n}\n\nclass MiniRpcProvider implements AsyncSendable {\n public readonly isMetaMask: false = false\n\n public readonly chainId: number\n\n public readonly url: string\n\n public readonly host: string\n\n public readonly path: string\n\n public readonly batchWaitTimeMs: number\n\n private nextId = 1\n\n private batchTimeoutId: ReturnType | null = null\n\n private batch: BatchItem[] = []\n\n constructor(chainId: number, url: string, batchWaitTimeMs?: number) {\n this.chainId = chainId\n this.url = url\n const parsed = new URL(url)\n this.host = parsed.host\n this.path = parsed.pathname\n // how long to wait to batch calls\n this.batchWaitTimeMs = batchWaitTimeMs ?? 50\n }\n\n public readonly clearBatch = async () => {\n console.info('Clearing batch', this.batch)\n const { batch } = this\n this.batch = []\n this.batchTimeoutId = null\n let response: Response\n try {\n response = await fetch(this.url, {\n method: 'POST',\n headers: { 'content-type': 'application/json', accept: 'application/json' },\n body: JSON.stringify(batch.map((item) => item.request)),\n })\n } catch (error) {\n batch.forEach(({ reject }) => reject(new Error('Failed to send batch call')))\n return\n }\n\n if (!response.ok) {\n batch.forEach(({ reject }) => reject(new RequestError(`${response.status}: ${response.statusText}`, -32000)))\n return\n }\n\n let json\n try {\n json = await response.json()\n } catch (error) {\n batch.forEach(({ reject }) => reject(new Error('Failed to parse JSON response')))\n return\n }\n const byKey = batch.reduce<{ [id: number]: BatchItem }>((memo, current) => {\n memo[current.request.id] = current\n return memo\n }, {})\n // eslint-disable-next-line no-restricted-syntax\n for (const result of json) {\n const {\n resolve,\n reject,\n request: { method },\n } = byKey[result.id]\n // @ts-ignore\n if (resolve && reject) {\n if ('error' in result) {\n reject(new RequestError(result?.error?.message, result?.error?.code, result?.error?.data))\n } else if ('result' in result) {\n resolve(result.result)\n } else {\n reject(new RequestError(`Received unexpected JSON-RPC response to ${method} request.`, -32000, result))\n }\n }\n }\n }\n\n public readonly sendAsync = (\n request: { jsonrpc: '2.0'; id: number | string | null; method: string; params?: any },\n callback: (error: any, response: any) => void\n ): void => {\n this.request(request.method, request.params)\n .then((result) => callback(null, { jsonrpc: '2.0', id: request.id, result }))\n .catch((error) => callback(error, null))\n }\n\n public readonly request = async (\n method: string | { method: string; params: unknown[] },\n params?: any\n ): Promise => {\n if (typeof method !== 'string') {\n return this.request(method.method, method.params)\n }\n if (method === 'eth_chainId') {\n return `0x${this.chainId.toString(16)}`\n }\n const promise = new Promise((resolve, reject) => {\n this.batch.push({\n request: {\n jsonrpc: '2.0',\n id: this.nextId++,\n method,\n params,\n },\n resolve,\n reject,\n })\n })\n this.batchTimeoutId = this.batchTimeoutId ?? setTimeout(this.clearBatch, this.batchWaitTimeMs)\n return promise\n }\n}\n\nexport class NetworkConnector extends AbstractConnector {\n private readonly providers: { [chainId: number]: MiniRpcProvider }\n\n private currentChainId: number\n\n constructor({ urls, defaultChainId }: NetworkConnectorArguments) {\n invariant(defaultChainId || Object.keys(urls).length === 1, 'defaultChainId is a required argument with >1 url')\n super({ supportedChainIds: Object.keys(urls).map((k): number => Number(k)) })\n\n this.currentChainId = defaultChainId || Number(Object.keys(urls)[0])\n this.providers = Object.keys(urls).reduce<{ [chainId: number]: MiniRpcProvider }>((accumulator, chainId) => {\n accumulator[Number(chainId)] = new MiniRpcProvider(Number(chainId), urls[Number(chainId)])\n return accumulator\n }, {})\n }\n\n public get provider(): MiniRpcProvider {\n return this.providers[this.currentChainId]\n }\n\n public async activate(): Promise {\n return { provider: this.providers[this.currentChainId], chainId: this.currentChainId, account: null }\n }\n\n public async getProvider(): Promise {\n return this.providers[this.currentChainId]\n }\n\n public async getChainId(): Promise {\n return this.currentChainId\n }\n\n public async getAccount(): Promise {\n return null\n }\n\n public deactivate() {\n return null\n }\n}\n\nexport default NetworkConnector\n","import { ConnectorNames } from '@mozartfinance/uikit'\nimport { Web3Provider } from '@ethersproject/providers'\nimport { InjectedConnector } from '@web3-react/injected-connector'\nimport { WalletConnectConnector } from '@web3-react/walletconnect-connector'\nimport { WalletLinkConnector } from '@web3-react/walletlink-connector'\nimport { BscConnector } from '@binance-chain/bsc-connector'\nimport { NetworkConnector } from './NetworkConnector'\n\nconst NETWORK_URL = process.env.REACT_APP_NETWORK_URL\n\nexport const NETWORK_CHAIN_ID: number = parseInt(process.env.REACT_APP_CHAIN_ID ?? '56')\n\nif (typeof NETWORK_URL === 'undefined') {\n throw new Error(`REACT_APP_NETWORK_URL must be a defined environment variable`)\n}\n\nexport const network = new NetworkConnector({\n urls: { [NETWORK_CHAIN_ID]: NETWORK_URL },\n})\n\nlet networkLibrary: Web3Provider | undefined\nexport function getNetworkLibrary(): Web3Provider {\n // eslint-disable-next-line no-return-assign\n return (networkLibrary = networkLibrary ?? new Web3Provider(network.provider as any))\n}\n\nexport const injected = new InjectedConnector({\n supportedChainIds: [56, 97],\n})\n\nexport const bscConnector = new BscConnector({ supportedChainIds: [56] })\n\n// mainnet only\nexport const walletconnect = new WalletConnectConnector({\n rpc: { [NETWORK_CHAIN_ID]: NETWORK_URL },\n bridge: 'https://bridge.walletconnect.org',\n qrcode: true,\n pollingInterval: 15000,\n})\n\n// mainnet only\nexport const walletlink = new WalletLinkConnector({\n url: NETWORK_URL,\n appName: 'Uniswap',\n appLogoUrl:\n 'https://mpng.pngfly.com/20181202/bex/kisspng-emoji-domain-unicorn-pin-badges-sticker-unicorn-tumblr-emoji-unicorn-iphoneemoji-5c046729264a77.5671679315437924251569.jpg',\n})\n\nexport const connectorsByName: { [connectorName in ConnectorNames]: any } = {\n [ConnectorNames.Injected]: injected,\n [ConnectorNames.WalletConnect]: walletconnect,\n [ConnectorNames.BSC]: bscConnector,\n}\n","import { ChainId, JSBI, Percent, Token, WETH } from '@pancakeswap-libs/sdk'\n\nexport const ROUTER_ADDRESS = '0xa53ff84a28144f52894c2d07e207a95a8691dd5e'\n\n// a list of tokens by chain\ntype ChainTokenList = {\n readonly [chainId in ChainId]: Token[]\n}\n\nexport const DAI = new Token(ChainId.MAINNET, '0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3', 18, 'DAI', 'Dai Stablecoin')\nexport const BUSD = new Token(ChainId.MAINNET, '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56', 18, 'BUSD', 'Binance USD')\nexport const BTCB = new Token(ChainId.MAINNET, '0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c', 18, 'BTCB', 'Binance BTC')\nexport const USDT = new Token(ChainId.MAINNET, '0x55d398326f99059fF775485246999027B3197955', 18, 'USDT', 'Tether USD')\nexport const UST = new Token(\n ChainId.MAINNET,\n '0x23396cF899Ca06c4472205fC903bDB4de249D6fC',\n 18,\n 'UST',\n 'Wrapped UST Token'\n)\nexport const ETH = new Token(\n ChainId.MAINNET,\n '0x2170Ed0880ac9A755fd29B2688956BD959F933F8',\n 18,\n 'ETH',\n 'Binance-Peg Ethereum Token'\n)\n\nconst WETH_ONLY: ChainTokenList = {\n [ChainId.MAINNET]: [WETH[ChainId.MAINNET]],\n [ChainId.BSCTESTNET]: [WETH[ChainId.BSCTESTNET]],\n}\n\n// used to construct intermediary pairs for trading\nexport const BASES_TO_CHECK_TRADES_AGAINST: ChainTokenList = {\n ...WETH_ONLY,\n [ChainId.MAINNET]: [...WETH_ONLY[ChainId.MAINNET], DAI, BUSD, BTCB, USDT, UST, ETH],\n}\n\n/**\n * Some tokens can only be swapped via certain pairs, so we override the list of bases that are considered for these\n * tokens.\n */\nexport const CUSTOM_BASES: { [chainId in ChainId]?: { [tokenAddress: string]: Token[] } } = {\n [ChainId.MAINNET]: {},\n}\n\n// used for display in the default list when adding liquidity\nexport const SUGGESTED_BASES: ChainTokenList = {\n ...WETH_ONLY,\n [ChainId.MAINNET]: [...WETH_ONLY[ChainId.MAINNET], DAI, BUSD, USDT],\n}\n\n// used to construct the list of all pairs we consider by default in the frontend\nexport const BASES_TO_TRACK_LIQUIDITY_FOR: ChainTokenList = {\n ...WETH_ONLY,\n [ChainId.MAINNET]: [...WETH_ONLY[ChainId.MAINNET], DAI, BUSD, BTCB, USDT],\n}\n\nexport const PINNED_PAIRS: { readonly [chainId in ChainId]?: [Token, Token][] } = {\n [ChainId.MAINNET]: [\n [\n new Token(ChainId.MAINNET, '0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82', 18, 'CAKE', 'PancakeSwap Token'),\n new Token(ChainId.MAINNET, '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', 18, 'WBNB', 'Wrapped BNB'),\n ],\n [BUSD, USDT],\n [DAI, USDT],\n ],\n}\n\nexport const NetworkContextName = 'NETWORK'\n\n// default allowed slippage, in bips\nexport const INITIAL_ALLOWED_SLIPPAGE = 80\n// 20 minutes, denominated in seconds\nexport const DEFAULT_DEADLINE_FROM_NOW = 60 * 20\n\n// one basis point\nexport const ONE_BIPS = new Percent(JSBI.BigInt(1), JSBI.BigInt(10000))\nexport const BIPS_BASE = JSBI.BigInt(10000)\n// used for warning states\nexport const ALLOWED_PRICE_IMPACT_LOW: Percent = new Percent(JSBI.BigInt(100), BIPS_BASE) // 1%\nexport const ALLOWED_PRICE_IMPACT_MEDIUM: Percent = new Percent(JSBI.BigInt(300), BIPS_BASE) // 3%\nexport const ALLOWED_PRICE_IMPACT_HIGH: Percent = new Percent(JSBI.BigInt(500), BIPS_BASE) // 5%\n// if the price slippage exceeds this number, force the user to type 'confirm' to execute\nexport const PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN: Percent = new Percent(JSBI.BigInt(1000), BIPS_BASE) // 10%\n// for non expert mode disable swaps above this\nexport const BLOCKED_PRICE_IMPACT_NON_EXPERT: Percent = new Percent(JSBI.BigInt(1500), BIPS_BASE) // 15%\n\n// used to ensure the user doesn't send so much ETH so they end up with <.01\nexport const MIN_ETH: JSBI = JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(16)) // .01 ETH\n","import { Web3Provider } from '@ethersproject/providers'\nimport { ChainId } from '@pancakeswap-libs/sdk'\nimport { connectorLocalStorageKey } from '@mozartfinance/uikit'\nimport { useWeb3React as useWeb3ReactCore } from '@web3-react/core'\n// eslint-disable-next-line import/no-unresolved\nimport { Web3ReactContextInterface } from '@web3-react/core/dist/types'\nimport { useEffect, useState } from 'react'\nimport { isMobile } from 'react-device-detect'\nimport { injected } from '../connectors'\nimport { NetworkContextName } from '../constants'\n\nexport function useActiveWeb3React(): Web3ReactContextInterface & { chainId?: ChainId } {\n const context = useWeb3ReactCore()\n const contextNetwork = useWeb3ReactCore(NetworkContextName)\n return context.active ? context : contextNetwork\n}\n\nexport function useEagerConnect() {\n const { activate, active } = useWeb3ReactCore() // specifically using useWeb3ReactCore because of what this hook does\n const [tried, setTried] = useState(false)\n\n useEffect(() => {\n injected.isAuthorized().then((isAuthorized) => {\n const hasSignedIn = window.localStorage.getItem(connectorLocalStorageKey)\n if (isAuthorized && hasSignedIn) {\n activate(injected, undefined, true).catch(() => {\n setTried(true)\n })\n } else if (isMobile && window.ethereum && hasSignedIn) {\n activate(injected, undefined, true).catch(() => {\n setTried(true)\n })\n } else {\n setTried(true)\n }\n })\n }, [activate]) // intentionally only running on mount (make sure it's only mounted once :))\n\n // if the connection worked, wait until we get confirmation of that to flip the flag\n useEffect(() => {\n if (active) {\n setTried(true)\n }\n }, [active])\n\n return tried\n}\n\n/**\n * Use for network and injected - logs user in\n * and out after checking what network theyre on\n */\nexport function useInactiveListener(suppress = false) {\n const { active, error, activate } = useWeb3ReactCore() // specifically using useWeb3React because of what this hook does\n\n useEffect(() => {\n const { ethereum } = window\n\n if (ethereum && ethereum.on && !active && !error && !suppress) {\n const handleChainChanged = () => {\n // eat errors\n activate(injected, undefined, true).catch((e) => {\n console.error('Failed to activate after chain changed', e)\n })\n }\n\n const handleAccountsChanged = (accounts: string[]) => {\n if (accounts.length > 0) {\n // eat errors\n activate(injected, undefined, true).catch((e) => {\n console.error('Failed to activate after accounts changed', e)\n })\n }\n }\n\n ethereum.on('chainChanged', handleChainChanged)\n ethereum.on('accountsChanged', handleAccountsChanged)\n\n return () => {\n if (ethereum.removeListener) {\n ethereum.removeListener('chainChanged', handleChainChanged)\n ethereum.removeListener('accountsChanged', handleAccountsChanged)\n }\n }\n }\n return undefined\n }, [active, error, suppress, activate])\n}\n","import { createAction } from '@reduxjs/toolkit'\nimport { TokenList } from '@uniswap/token-lists'\n\nexport type PopupContent =\n | {\n txn: {\n hash: string\n success: boolean\n summary?: string\n }\n }\n | {\n listUpdate: {\n listUrl: string\n oldList: TokenList\n newList: TokenList\n auto: boolean\n }\n }\n\nexport const updateBlockNumber = createAction<{ chainId: number; blockNumber: number }>('app/updateBlockNumber')\nexport const toggleWalletModal = createAction('app/toggleWalletModal')\nexport const toggleSettingsMenu = createAction('app/toggleSettingsMenu')\nexport const addPopup = createAction<{ key?: string; removeAfterMs?: number | null; content: PopupContent }>(\n 'app/addPopup'\n)\nexport const removePopup = createAction<{ key: string }>('app/removePopup')\n","import { useCallback, useMemo } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { useActiveWeb3React } from '../../hooks'\nimport { addPopup, PopupContent, removePopup, toggleWalletModal, toggleSettingsMenu } from './actions'\nimport { AppState } from '../index'\n\nexport function useBlockNumber(): number | undefined {\n const { chainId } = useActiveWeb3React()\n\n return useSelector((state: AppState) => state.application.blockNumber[chainId ?? -1])\n}\n\nexport function useWalletModalOpen(): boolean {\n return useSelector((state: AppState) => state.application.walletModalOpen)\n}\n\nexport function useWalletModalToggle(): () => void {\n const dispatch = useDispatch()\n return useCallback(() => dispatch(toggleWalletModal()), [dispatch])\n}\n\nexport function useSettingsMenuOpen(): boolean {\n return useSelector((state: AppState) => state.application.settingsMenuOpen)\n}\n\nexport function useToggleSettingsMenu(): () => void {\n const dispatch = useDispatch()\n return useCallback(() => dispatch(toggleSettingsMenu()), [dispatch])\n}\n\n// returns a function that allows adding a popup\nexport function useAddPopup(): (content: PopupContent, key?: string) => void {\n const dispatch = useDispatch()\n\n return useCallback(\n (content: PopupContent, key?: string) => {\n dispatch(addPopup({ content, key }))\n },\n [dispatch]\n )\n}\n\n// returns a function that allows removing a popup via its key\nexport function useRemovePopup(): (key: string) => void {\n const dispatch = useDispatch()\n return useCallback(\n (key: string) => {\n dispatch(removePopup({ key }))\n },\n [dispatch]\n )\n}\n\n// get the list of active popups\nexport function useActivePopups(): AppState['application']['popupList'] {\n const list = useSelector((state: AppState) => state.application.popupList)\n return useMemo(() => list.filter(item => item.show), [list])\n}\n","import styled from 'styled-components'\n\nconst Column = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n`\nexport const ColumnCenter = styled(Column)`\n width: 100%;\n align-items: center;\n`\n\nexport const AutoColumn = styled.div<{\n gap?: 'sm' | 'md' | 'lg' | string\n justify?: 'stretch' | 'center' | 'start' | 'end' | 'flex-start' | 'flex-end' | 'space-between'\n}>`\n display: grid;\n grid-auto-rows: auto;\n grid-row-gap: ${({ gap }) => (gap === 'sm' && '8px') || (gap === 'md' && '12px') || (gap === 'lg' && '24px') || gap};\n justify-items: ${({ justify }) => justify && justify};\n`\n\nexport default Column\n","import { ActionCreatorWithPayload, createAction } from '@reduxjs/toolkit'\nimport { TokenList, Version } from '@uniswap/token-lists'\n\nexport const fetchTokenList: Readonly<{\n pending: ActionCreatorWithPayload<{ url: string; requestId: string }>\n fulfilled: ActionCreatorWithPayload<{ url: string; tokenList: TokenList; requestId: string }>\n rejected: ActionCreatorWithPayload<{ url: string; errorMessage: string; requestId: string }>\n}> = {\n pending: createAction('lists/fetchTokenList/pending'),\n fulfilled: createAction('lists/fetchTokenList/fulfilled'),\n rejected: createAction('lists/fetchTokenList/rejected')\n}\n\nexport const acceptListUpdate = createAction('lists/acceptListUpdate')\nexport const addList = createAction('lists/addList')\nexport const removeList = createAction('lists/removeList')\nexport const selectList = createAction('lists/selectList')\nexport const rejectVersionUpdate = createAction('lists/rejectVersionUpdate')\n","import { Version } from '@uniswap/token-lists'\n\nexport default function listVersionLabel(version: Version): string {\n return `v${version.major}.${version.minor}.${version.patch}`\n}\n","import styled from 'styled-components'\nimport { Box } from 'rebass/styled-components'\n\nconst Row = styled(Box)<{ align?: string; padding?: string; border?: string; borderRadius?: string }>`\n width: 100%;\n display: flex;\n padding: 0;\n align-items: ${({ align }) => (align || 'center')};\n padding: ${({ padding }) => padding};\n border: ${({ border }) => border};\n border-radius: ${({ borderRadius }) => borderRadius};\n`\n\nexport const RowBetween = styled(Row)`\n justify-content: space-between;\n`\n\nexport const RowFlat = styled.div`\n display: flex;\n align-items: flex-end;\n`\n\nexport const AutoRow = styled(Row)<{ gap?: string; justify?: string }>`\n flex-wrap: wrap;\n margin: ${({ gap }) => gap && `-${gap}`};\n justify-content: ${({ justify }) => justify && justify};\n\n & > * {\n margin: ${({ gap }) => gap} !important;\n }\n`\n\nexport const RowFixed = styled(Row)<{ gap?: string; justify?: string }>`\n width: fit-content;\n margin: ${({ gap }) => gap && `-${gap}`};\n`\n\nexport default Row\n","import React, { useCallback, useMemo } from 'react'\nimport { diffTokenLists, TokenList } from '@uniswap/token-lists'\nimport { Button, Text } from '@mozartfinance/uikit'\nimport { useDispatch } from 'react-redux'\nimport { AppDispatch } from '../../state'\nimport { useRemovePopup } from '../../state/application/hooks'\nimport { acceptListUpdate } from '../../state/lists/actions'\nimport listVersionLabel from '../../utils/listVersionLabel'\nimport { AutoColumn } from '../Column'\nimport { AutoRow } from '../Row'\n\nexport default function ListUpdatePopup({\n popKey,\n listUrl,\n oldList,\n newList,\n auto,\n}: {\n popKey: string\n listUrl: string\n oldList: TokenList\n newList: TokenList\n auto: boolean\n}) {\n const removePopup = useRemovePopup()\n const removeThisPopup = useCallback(() => removePopup(popKey), [popKey, removePopup])\n const dispatch = useDispatch()\n\n const handleAcceptUpdate = useCallback(() => {\n if (auto) return\n dispatch(acceptListUpdate(listUrl))\n removeThisPopup()\n }, [auto, dispatch, listUrl, removeThisPopup])\n\n const { added: tokensAdded, changed: tokensChanged, removed: tokensRemoved } = useMemo(() => {\n return diffTokenLists(oldList.tokens, newList.tokens)\n }, [newList.tokens, oldList.tokens])\n const numTokensChanged = useMemo(\n () =>\n Object.keys(tokensChanged).reduce((memo, chainId: any) => memo + Object.keys(tokensChanged[chainId]).length, 0),\n [tokensChanged]\n )\n\n return (\n \n \n {auto ? (\n \n The token list "{oldList.name}" has been updated to{' '}\n {listVersionLabel(newList.version)}.\n \n ) : (\n <>\n
\n \n An update is available for the token list "{oldList.name}" (\n {listVersionLabel(oldList.version)} to {listVersionLabel(newList.version)}).\n \n
    \n {tokensAdded.length > 0 ? (\n
  • \n {tokensAdded.map((token, i) => (\n \n {token.symbol}\n {i === tokensAdded.length - 1 ? null : ', '}\n \n ))}{' '}\n added\n
  • \n ) : null}\n {tokensRemoved.length > 0 ? (\n
  • \n {tokensRemoved.map((token, i) => (\n \n {token.symbol}\n {i === tokensRemoved.length - 1 ? null : ', '}\n \n ))}{' '}\n removed\n
  • \n ) : null}\n {numTokensChanged > 0 ?
  • {numTokensChanged} tokens updated
  • : null}\n
\n
\n \n
\n \n
\n
\n \n
\n
\n \n )}\n
\n
\n )\n}\n","import { Contract } from '@ethersproject/contracts'\nimport { getAddress } from '@ethersproject/address'\nimport { AddressZero } from '@ethersproject/constants'\nimport { JsonRpcSigner, Web3Provider } from '@ethersproject/providers'\nimport { BigNumber } from '@ethersproject/bignumber'\nimport { abi as IUniswapV2Router02ABI } from '@uniswap/v2-periphery/build/IUniswapV2Router02.json'\nimport { ChainId, JSBI, Percent, Token, CurrencyAmount, Currency, ETHER } from '@pancakeswap-libs/sdk'\nimport { ROUTER_ADDRESS } from '../constants'\nimport { TokenAddressMap } from '../state/lists/hooks'\n\n// returns the checksummed address if the address is valid, otherwise returns false\nexport function isAddress(value: any): string | false {\n try {\n return getAddress(value)\n } catch {\n return false\n }\n}\n\nconst BSCSCAN_PREFIXES: { [chainId in ChainId]: string } = {\n 56: '',\n 97: 'testnet.'\n}\n\nexport function getBscScanLink(chainId: ChainId, data: string, type: 'transaction' | 'token' | 'address'): string {\n const prefix = `https://${BSCSCAN_PREFIXES[chainId] || BSCSCAN_PREFIXES[ChainId.MAINNET]}bscscan.com`\n\n switch (type) {\n case 'transaction': {\n return `${prefix}/tx/${data}`\n }\n case 'token': {\n return `${prefix}/token/${data}`\n }\n case 'address':\n default: {\n return `${prefix}/address/${data}`\n }\n }\n}\n\n// shorten the checksummed version of the input address to have 0x + 4 characters at start and end\nexport function shortenAddress(address: string, chars = 4): string {\n const parsed = isAddress(address)\n if (!parsed) {\n throw Error(`Invalid 'address' parameter '${address}'.`)\n }\n return `${parsed.substring(0, chars + 2)}...${parsed.substring(42 - chars)}`\n}\n\n// add 10%\nexport function calculateGasMargin(value: BigNumber): BigNumber {\n return value.mul(BigNumber.from(10000).add(BigNumber.from(1000))).div(BigNumber.from(10000))\n}\n\n// converts a basis points value to a sdk percent\nexport function basisPointsToPercent(num: number): Percent {\n return new Percent(JSBI.BigInt(Math.floor(num)), JSBI.BigInt(10000))\n}\n\nexport function calculateSlippageAmount(value: CurrencyAmount, slippage: number): [JSBI, JSBI] {\n if (slippage < 0 || slippage > 10000) {\n throw Error(`Unexpected slippage value: ${slippage}`)\n }\n return [\n JSBI.divide(JSBI.multiply(value.raw, JSBI.BigInt(10000 - slippage)), JSBI.BigInt(10000)),\n JSBI.divide(JSBI.multiply(value.raw, JSBI.BigInt(10000 + slippage)), JSBI.BigInt(10000))\n ]\n}\n\n// account is not optional\nexport function getSigner(library: Web3Provider, account: string): JsonRpcSigner {\n return library.getSigner(account).connectUnchecked()\n}\n\n// account is optional\nexport function getProviderOrSigner(library: Web3Provider, account?: string): Web3Provider | JsonRpcSigner {\n return account ? getSigner(library, account) : library\n}\n\n// account is optional\nexport function getContract(address: string, ABI: any, library: Web3Provider, account?: string): Contract {\n if (!isAddress(address) || address === AddressZero) {\n throw Error(`Invalid 'address' parameter '${address}'.`)\n }\n\n return new Contract(address, ABI, getProviderOrSigner(library, account) as any)\n}\n\n// account is optional\nexport function getRouterContract(_: number, library: Web3Provider, account?: string): Contract {\n return getContract(ROUTER_ADDRESS, IUniswapV2Router02ABI, library, account)\n}\n\nexport function escapeRegExp(string: string): string {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&') // $& means the whole matched string\n}\n\nexport function isTokenOnList(defaultTokens: TokenAddressMap, currency?: Currency): boolean {\n if (currency === ETHER) return true\n return Boolean(currency instanceof Token && defaultTokens[currency.chainId]?.[currency.address])\n}\n","import React, { HTMLProps, useCallback } from 'react'\nimport { Link } from 'react-router-dom'\nimport styled, { keyframes } from 'styled-components'\n\n// A button that triggers some onClick result, but looks like a link.\nexport const LinkStyledButton = styled.button<{ disabled?: boolean }>`\n border: none;\n text-decoration: none;\n background: none;\n\n cursor: ${({ disabled }) => (disabled ? 'default' : 'pointer')};\n color: ${({ theme, disabled }) => (disabled ? theme.colors.textSubtle : theme.colors.primary)};\n font-weight: 500;\n\n :hover {\n text-decoration: ${({ disabled }) => (disabled ? null : 'underline')};\n }\n\n :focus {\n outline: none;\n text-decoration: ${({ disabled }) => (disabled ? null : 'underline')};\n }\n\n :active {\n text-decoration: none;\n }\n`\n\n// An internal link from the react-router-dom library that is correctly styled\nexport const StyledInternalLink = styled(Link)`\n text-decoration: none;\n cursor: pointer;\n color: ${({ theme }) => theme.colors.primary};\n font-weight: 500;\n\n :hover {\n text-decoration: underline;\n }\n\n :focus {\n outline: none;\n text-decoration: underline;\n }\n\n :active {\n text-decoration: none;\n }\n`\n\nconst StyledLink = styled.a`\n text-decoration: none;\n cursor: pointer;\n color: ${({ theme }) => theme.colors.primary};\n font-weight: 500;\n\n :hover {\n text-decoration: underline;\n }\n\n :focus {\n outline: none;\n text-decoration: underline;\n }\n\n :active {\n text-decoration: none;\n }\n`\n\n/**\n * Outbound link that handles firing google analytics events\n */\nexport function ExternalLink({\n target = '_blank',\n href,\n rel = 'noopener noreferrer',\n ...rest\n}: Omit, 'as' | 'ref' | 'onClick'> & { href: string }) {\n const handleClick = useCallback(\n (event: React.MouseEvent) => {\n if (!(target === '_blank' || event.ctrlKey || event.metaKey)) {\n event.preventDefault()\n }\n },\n [target]\n )\n return \n}\n\nconst rotate = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`\n\nexport const Spinner = styled.img`\n animation: 2s ${rotate} linear infinite;\n width: 16px;\n height: 16px;\n`\n","import React, { useContext } from 'react'\nimport { AlertCircle, CheckCircle } from 'react-feather'\nimport { Text } from '@mozartfinance/uikit'\nimport styled, { ThemeContext } from 'styled-components'\nimport { useActiveWeb3React } from '../../hooks'\nimport { getBscScanLink } from '../../utils'\nimport { ExternalLink } from '../Shared'\nimport { AutoColumn } from '../Column'\nimport { AutoRow } from '../Row'\n\nconst RowNoFlex = styled(AutoRow)`\n flex-wrap: nowrap;\n`\n\nexport default function TransactionPopup({\n hash,\n success,\n summary,\n}: {\n hash: string\n success?: boolean\n summary?: string\n}) {\n const { chainId } = useActiveWeb3React()\n\n const theme = useContext(ThemeContext)\n\n return (\n \n
\n {success ? (\n \n ) : (\n \n )}\n
\n \n {summary ?? `Hash: ${hash.slice(0, 8)}...${hash.slice(58, 65)}`}\n {chainId && View on bscscan}\n \n
\n )\n}\n","import React, { useCallback, useContext, useEffect } from 'react'\nimport { X } from 'react-feather'\nimport { useSpring } from 'react-spring/web'\nimport styled, { ThemeContext } from 'styled-components'\nimport { animated } from 'react-spring'\nimport { PopupContent } from '../../state/application/actions'\nimport { useRemovePopup } from '../../state/application/hooks'\nimport ListUpdatePopup from './ListUpdatePopup'\nimport TransactionPopup from './TransactionPopup'\n\nexport const StyledClose = styled(X)`\n position: absolute;\n right: 10px;\n top: 10px;\n\n :hover {\n cursor: pointer;\n }\n`\nexport const Popup = styled.div`\n display: inline-block;\n width: 100%;\n padding: 1em;\n background-color: ${({ theme }) => theme.colors.invertedContrast};\n position: relative;\n border-radius: 10px;\n padding: 20px;\n padding-right: 35px;\n overflow: hidden;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n min-width: 290px;\n }\n`\nconst Fader = styled.div`\n position: absolute;\n bottom: 0px;\n left: 0px;\n width: 100%;\n height: 2px;\n background-color: ${({ theme }) => theme.colors.tertiary};\n`\n\nconst AnimatedFader = animated(Fader)\n\nexport default function PopupItem({\n removeAfterMs,\n content,\n popKey\n}: {\n removeAfterMs: number | null\n content: PopupContent\n popKey: string\n}) {\n const removePopup = useRemovePopup()\n const removeThisPopup = useCallback(() => removePopup(popKey), [popKey, removePopup])\n useEffect(() => {\n if (removeAfterMs === null) return undefined\n\n const timeout = setTimeout(() => {\n removeThisPopup()\n }, removeAfterMs)\n\n return () => {\n clearTimeout(timeout)\n }\n }, [removeAfterMs, removeThisPopup])\n\n const theme = useContext(ThemeContext)\n\n let popupContent\n if ('txn' in content) {\n const {\n txn: { hash, success, summary }\n } = content\n popupContent = \n } else if ('listUpdate' in content) {\n const {\n listUpdate: { listUrl, oldList, newList, auto }\n } = content\n popupContent = \n }\n\n const faderStyle = useSpring({\n from: { width: '100%' },\n to: { width: '0%' },\n config: { duration: removeAfterMs ?? undefined }\n })\n\n return (\n \n \n {popupContent}\n {removeAfterMs !== null ? : null}\n \n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\nimport { useActivePopups } from '../../state/application/hooks'\nimport { AutoColumn } from '../Column'\nimport PopupItem from './PopupItem'\n\nconst MobilePopupWrapper = styled.div<{ height: string | number }>`\n position: relative;\n max-width: 100%;\n height: ${({ height }) => height};\n margin: ${({ height }) => (height ? '0 auto;' : 0)};\n margin-bottom: ${({ height }) => (height ? '20px' : 0)}};\n display: none;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n display: block;\n }\n`\n\nconst MobilePopupInner = styled.div`\n height: 99%;\n overflow-x: auto;\n overflow-y: hidden;\n display: flex;\n flex-direction: row;\n -webkit-overflow-scrolling: touch;\n ::-webkit-scrollbar {\n display: none;\n }\n`\n\nconst FixedPopupColumn = styled(AutoColumn)`\n position: fixed;\n top: 64px;\n right: 1rem;\n max-width: 355px !important;\n width: 100%;\n z-index: 2;\n\n ${({ theme }) => theme.mediaQueries.sm} {\n display: none;\n }\n`\n\nexport default function Popups() {\n // get all popups\n const activePopups = useActivePopups()\n\n return (\n <>\n \n {activePopups.map((item) => (\n \n ))}\n \n 0 ? 'fit-content' : 0}>\n \n {activePopups // reverse so new items up front\n .slice(0)\n .reverse()\n .map((item) => (\n \n ))}\n \n \n \n )\n}\n","import React from 'react'\n\nimport styled, { keyframes } from 'styled-components'\n\nconst rotate = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`\n\nconst StyledSVG = styled.svg<{ size: string; stroke?: string }>`\n animation: 2s ${rotate} linear infinite;\n height: ${({ size }) => size};\n width: ${({ size }) => size};\n path {\n stroke: ${({ stroke, theme }) => stroke ?? theme.colors.primary};\n }\n`\n\n/**\n * Takes in custom size and stroke for circle color, default to primary color as fill,\n * need ...rest for layered styles on top\n */\nexport default function Loader({ size = '16px', stroke, ...rest }: { size?: string; stroke?: string }) {\n return (\n \n \n \n )\n}\n","import React, { useState, useEffect } from 'react'\nimport { useWeb3React } from '@web3-react/core'\nimport styled from 'styled-components'\nimport { useTranslation } from 'react-i18next'\n\nimport { network } from '../../connectors'\nimport { useEagerConnect, useInactiveListener } from '../../hooks'\nimport { NetworkContextName } from '../../constants'\nimport Loader from '../Loader'\n\nconst MessageWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 20rem;\n`\n\nconst Message = styled.h2`\n color: ${({ theme }) => theme.colors.primaryDark};\n`\n\nexport default function Web3ReactManager({ children }: { children: JSX.Element }) {\n const { t } = useTranslation()\n const { active } = useWeb3React()\n const { active: networkActive, error: networkError, activate: activateNetwork } = useWeb3React(NetworkContextName)\n\n // try to eagerly connect to an injected provider, if it exists and has granted access already\n const triedEager = useEagerConnect()\n\n // after eagerly trying injected, if the network connect ever isn't active or in an error state, activate itd\n useEffect(() => {\n if (triedEager && !networkActive && !networkError && !active) {\n activateNetwork(network)\n }\n }, [triedEager, networkActive, networkError, activateNetwork, active])\n\n // when there's no account connected, react to logins (broadly speaking) on the injected provider, if it exists\n useInactiveListener(!triedEager)\n\n // handle delayed loader state\n const [showLoader, setShowLoader] = useState(false)\n useEffect(() => {\n const timeout = setTimeout(() => {\n setShowLoader(true)\n }, 600)\n\n return () => {\n clearTimeout(timeout)\n }\n }, [])\n\n // on page load, do nothing until we've tried to connect to the injected connector\n if (!triedEager) {\n return null\n }\n\n // if the account context isn't active, and there's an error on the network context, it's an irrecoverable error\n if (!active && networkError) {\n return (\n \n {t('unknownError')}\n \n )\n }\n\n // if neither context is active, spin\n if (!active && !networkActive) {\n return showLoader ? (\n \n \n \n ) : null\n }\n\n return children\n}\n","import styled from 'styled-components'\n\nconst Card = styled.div`\n width: 100%;\n border-radius: 16px;\n padding: 1.25rem;\n padding: ${({ padding }) => padding};\n border: ${({ border }) => border};\n border-radius: ${({ borderRadius }) => borderRadius};\n`\nexport default Card\n\nexport const LightCard = styled(Card)`\n border: 1px solid ${({ theme }) => theme.colors.invertedContrast};\n background-color: ${({ theme }) => theme.colors.invertedContrast};\n`\n\nexport const GreyCard = styled(Card)`\n background-color: ${({ theme }) => theme.colors.tertiary};\n`\n","import React from 'react'\nimport styled, { css } from 'styled-components'\nimport { animated, useTransition } from 'react-spring'\nimport { DialogOverlay, DialogContent } from '@reach/dialog'\nimport { isMobile } from 'react-device-detect'\nimport '@reach/dialog/styles.css'\nimport { transparentize } from 'polished'\n\nconst AnimatedDialogOverlay = animated(DialogOverlay)\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst StyledDialogOverlay = styled(AnimatedDialogOverlay)`\n &[data-reach-dialog-overlay] {\n z-index: 2;\n background-color: transparent;\n overflow: hidden;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n background-color: rgba(0, 0, 0, 0.3);\n }\n`\n\nconst AnimatedDialogContent = animated(DialogContent)\n// destructure to not pass custom props to Dialog DOM element\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst StyledDialogContent = styled(({ minHeight, maxHeight, mobile, isOpen, ...rest }) => (\n \n)).attrs({\n 'aria-label': 'dialog',\n})`\n &[data-reach-dialog-content] {\n margin: 0 0 2rem 0;\n border: 1px solid ${({ theme }) => theme.colors.invertedContrast};\n background-color: ${({ theme }) => theme.colors.invertedContrast};\n box-shadow: 0 4px 8px 0 ${transparentize(0.95, '#191326')};\n padding: 0px;\n width: 80%;\n overflow: hidden;\n\n align-self: ${({ mobile }) => (mobile ? 'flex-end' : 'center')};\n\n max-width: 420px;\n ${({ maxHeight }) =>\n maxHeight &&\n css`\n max-height: ${maxHeight}vh;\n `}\n ${({ minHeight }) =>\n minHeight &&\n css`\n min-height: ${minHeight}vh;\n `}\n display: flex;\n border-radius: 20px;\n\n ${({ theme }) => theme.mediaQueries.lg} {\n width: 65vw;\n }\n ${({ theme }) => theme.mediaQueries.sm} {\n width: 85vw;\n }\n }\n`\n\ninterface ModalProps {\n isOpen: boolean\n onDismiss: () => void\n minHeight?: number | false\n maxHeight?: number\n initialFocusRef?: React.RefObject\n children?: React.ReactNode\n}\n\nexport default function Modal({\n isOpen,\n onDismiss,\n minHeight = false,\n maxHeight = 50,\n initialFocusRef,\n children,\n}: ModalProps) {\n const fadeTransition = useTransition(isOpen, null, {\n config: { duration: 200 },\n from: { opacity: 0 },\n enter: { opacity: 1 },\n leave: { opacity: 0 },\n })\n\n return (\n <>\n {fadeTransition.map(\n ({ item, key, props }) =>\n item && (\n \n \n {/* prevents the automatic focusing of inputs on mobile by the reach dialog */}\n {/* eslint-disable */}\n {!initialFocusRef && isMobile ?
: null}\n {/* eslint-enable */}\n {children}\n \n \n )\n )}\n \n )\n}\n","import React, { ReactNode } from 'react'\nimport styled from 'styled-components'\nimport { Heading, IconButton, CloseIcon } from '@mozartfinance/uikit'\nimport { AutoColumn, ColumnCenter } from '../Column'\n\n\nexport const Wrapper = styled.div`\n width: 100%;\n overflow-y: auto;\n`\nexport const Section = styled(AutoColumn)`\n padding: 24px;\n`\n\nexport const ConfirmedIcon = styled(ColumnCenter)`\n padding: 40px 0;\n`\n\nexport const BottomSection = styled(Section)`\n background-color: ${({ theme }) => theme.colors.invertedContrast};\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n`\n\n/**\n * TODO: Remove this when modal system from the UI Kit is implemented\n */\nconst StyledContentHeader = styled.div`\n align-items: center;\n display: flex;\n\n & > ${Heading} {\n flex: 1;\n }\n`\n\ntype ContentHeaderProps = {\n children: ReactNode\n onDismiss: () => void\n}\n\nexport const ContentHeader = ({ children, onDismiss }: ContentHeaderProps) => (\n \n {children}\n \n \n \n \n)\n","import React from 'react'\nimport styled from 'styled-components'\nimport { Text } from '@mozartfinance/uikit'\nimport { Spinner } from '../Shared'\nimport { AutoColumn } from '../Column'\nimport { Wrapper, Section, ConfirmedIcon, ContentHeader } from './helpers'\n\ntype ConfirmationPendingContentProps = { onDismiss: () => void; pendingText: string }\n\nconst CustomLightSpinner = styled(Spinner)<{ size: string }>`\n height: ${({ size }) => size};\n width: ${({ size }) => size};\n`\n\nconst ConfirmationPendingContent = ({ onDismiss, pendingText }: ConfirmationPendingContentProps) => {\n return (\n \n
\n Waiting for confirmation\n \n \n \n \n \n \n {pendingText}\n \n \n Confirm this transaction in your wallet\n \n
\n
\n )\n}\n\nexport default ConfirmationPendingContent\n","import { ChainId } from '@pancakeswap-libs/sdk'\nimport React, { useContext } from 'react'\nimport { ThemeContext } from 'styled-components'\nimport { Button, LinkExternal } from '@mozartfinance/uikit'\nimport { ArrowUpCircle } from 'react-feather'\nimport { AutoColumn } from '../Column'\nimport { getBscScanLink } from '../../utils'\nimport { Wrapper, Section, ConfirmedIcon, ContentHeader } from './helpers'\n\ntype TransactionSubmittedContentProps = {\n onDismiss: () => void\n hash: string | undefined\n chainId: ChainId\n}\n\nconst TransactionSubmittedContent = ({ onDismiss, chainId, hash }: TransactionSubmittedContentProps) => {\n const theme = useContext(ThemeContext)\n\n return (\n \n
\n Transaction submitted\n \n \n \n \n {chainId && hash && (\n View on BscScan\n )}\n \n \n
\n
\n )\n}\n\nexport default TransactionSubmittedContent\n","import React from 'react'\nimport Modal from '../Modal'\nimport { useActiveWeb3React } from '../../hooks'\nimport ConfirmationPendingContent from './ConfirmationPendingContent'\nimport TransactionSubmittedContent from './TransactionSubmittedContent'\n\ninterface ConfirmationModalProps {\n isOpen: boolean\n onDismiss: () => void\n hash: string | undefined\n content: () => React.ReactNode\n attemptingTxn: boolean\n pendingText: string\n}\n\nconst TransactionConfirmationModal = ({\n isOpen,\n onDismiss,\n attemptingTxn,\n hash,\n pendingText,\n content\n}: ConfirmationModalProps) => {\n const { chainId } = useActiveWeb3React()\n\n if (!chainId) return null\n\n // confirmation screen\n return (\n \n {attemptingTxn ? (\n \n ) : hash ? (\n \n ) : (\n content()\n )}\n \n )\n}\n\nexport default TransactionConfirmationModal\n","import React from 'react'\nimport { Wrapper, Section, BottomSection, ContentHeader } from './helpers'\n\ntype ConfirmationModalContentProps = {\n title: string\n onDismiss: () => void\n topContent: () => React.ReactNode\n bottomContent: () => React.ReactNode\n}\n\nconst ConfirmationModalContent = ({ title, bottomContent, onDismiss, topContent }: ConfirmationModalContentProps) => {\n return (\n \n
\n {title}\n {topContent()}\n
\n {bottomContent()}\n
\n )\n}\n\nexport default ConfirmationModalContent\n","import React, { useContext } from 'react'\nimport { ThemeContext } from 'styled-components'\nimport { Button, Text } from '@mozartfinance/uikit'\nimport { AlertTriangle } from 'react-feather'\nimport { AutoColumn } from '../Column'\nimport { Wrapper, Section, BottomSection, ContentHeader } from './helpers'\n\ntype TransactionErrorContentProps = { message: string; onDismiss: () => void }\n\nconst TransactionErrorContent = ({ message, onDismiss }: TransactionErrorContentProps) => {\n const theme = useContext(ThemeContext)\n return (\n \n
\n Error\n \n \n \n {message}\n \n \n
\n \n \n \n
\n )\n}\n\nexport default TransactionErrorContent\n","import TransactionConfirmationModal from './TransactionConfirmationModal'\n\nexport { default as ConfirmationModalContent } from './ConfirmationModalContent'\nexport { default as ConfirmationPendingContent } from './ConfirmationPendingContent'\nexport { default as TransactionErrorContent } from './TransactionErrorContent'\nexport { default as TransactionSubmittedContent } from './TransactionSubmittedContent'\n\nexport default TransactionConfirmationModal\n","import React, { createContext } from 'react'\n\ninterface TranslationState {\n translations: Array\n setTranslations: React.Dispatch>>\n}\n\nconst defaultTranslationState: TranslationState = {\n translations: [],\n setTranslations: (): void => undefined,\n}\n\nexport const TranslationsContext = createContext(defaultTranslationState as TranslationState)\n\nexport default TranslationsContext\n","import { useContext } from 'react'\nimport { TranslationsContext } from '../hooks/TranslationsContext'\n\nconst variableRegex = /%(.*?)%/\n\nconst replaceDynamicString = (foundTranslation: string, fallback: string) => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const stringToReplace = variableRegex.exec(foundTranslation)![0]\n const indexToReplace = foundTranslation.split(' ').indexOf(stringToReplace)\n const fallbackValueAtIndex = fallback.split(' ')[indexToReplace]\n return foundTranslation.replace(stringToReplace, fallbackValueAtIndex)\n}\n\nexport const getTranslation = (translations: Array, translationId: number, fallback: string) => {\n const foundTranslation = translations.find((translation) => {\n return translation.data.stringId === translationId\n })\n if (foundTranslation) {\n const translatedString = foundTranslation.data.text\n const includesVariable = translatedString.includes('%')\n if (includesVariable) {\n return replaceDynamicString(translatedString, fallback)\n }\n return translatedString\n }\n return fallback\n}\n\nexport const TranslateString = (translationId: number, fallback: string) => {\n const { translations } = useContext(TranslationsContext)\n if (translations[0] === 'error') {\n return fallback\n }\n if (translations.length > 0) {\n return getTranslation(translations, translationId, fallback)\n }\n return null\n}\n","import { useCallback, useContext } from 'react'\nimport { TranslationsContext } from 'hooks/TranslationsContext'\nimport { getTranslation } from 'utils/translateTextHelpers'\n\nconst useI18n = () => {\n const { translations } = useContext(TranslationsContext)\n\n /**\n * As a temporary fix memoize the translation function so it can be used in an effect.\n * It appears the TranslationsContext is always empty and is not currently used\n * TODO: Figure out if the context is used and if not, remove it.\n */\n return useCallback(\n (translationId: number, fallback: string) => {\n if (translations[0] === 'error') {\n return fallback\n }\n if (translations.length > 0) {\n return getTranslation(translations, translationId, fallback)\n }\n return fallback\n },\n [translations]\n )\n}\n\nexport default useI18n\n","import React from 'react'\nimport styled from 'styled-components'\nimport { Link } from 'react-router-dom'\nimport { ButtonMenu, ButtonMenuItem } from '@mozartfinance/uikit'\nimport useI18n from 'hooks/useI18n'\n\nconst StyledNav = styled.div`\n margin-bottom: 40px;\n`\n\nfunction Nav({ activeIndex = 0 }: { activeIndex?: number }) {\n const TranslateString = useI18n()\n return (\n \n \n \n {TranslateString(1142, 'Swap')}\n \n \n {TranslateString(262, 'Liquidity')}\n \n \n \n )\n}\n\nexport default Nav\n","import { Interface } from '@ethersproject/abi'\nimport ERC20_ABI from './erc20.json'\nimport ERC20_BYTES32_ABI from './erc20_bytes32.json'\n\nconst ERC20_INTERFACE = new Interface(ERC20_ABI)\n\nexport default ERC20_INTERFACE\nexport { ERC20_ABI, ERC20_BYTES32_ABI }\n","import { ChainId, Token } from '@pancakeswap-libs/sdk'\nimport { Tags, TokenInfo, TokenList } from '@uniswap/token-lists'\nimport { useMemo } from 'react'\nimport { useSelector } from 'react-redux'\nimport { AppState } from '../index'\n\ntype TagDetails = Tags[keyof Tags]\nexport interface TagInfo extends TagDetails {\n id: string\n}\n\n/**\n * Token instances created from token info.\n */\nexport class WrappedTokenInfo extends Token {\n public readonly tokenInfo: TokenInfo\n\n public readonly tags: TagInfo[]\n\n constructor(tokenInfo: TokenInfo, tags: TagInfo[]) {\n super(tokenInfo.chainId, tokenInfo.address, tokenInfo.decimals, tokenInfo.symbol, tokenInfo.name)\n this.tokenInfo = tokenInfo\n this.tags = tags\n }\n\n public get logoURI(): string | undefined {\n return this.tokenInfo.logoURI\n }\n}\n\nexport type TokenAddressMap = Readonly<{ [chainId in ChainId]: Readonly<{ [tokenAddress: string]: WrappedTokenInfo }> }>\n\n/**\n * An empty result, useful as a default.\n */\nconst EMPTY_LIST: TokenAddressMap = {\n [ChainId.MAINNET]: {},\n [ChainId.BSCTESTNET]: {}\n}\n\nconst listCache: WeakMap | null =\n typeof WeakMap !== 'undefined' ? new WeakMap() : null\n\nexport function listToTokenMap(list: TokenList): TokenAddressMap {\n const result = listCache?.get(list)\n if (result) return result\n\n const map = list.tokens.reduce(\n (tokenMap, tokenInfo) => {\n const tags: TagInfo[] =\n tokenInfo.tags\n ?.map(tagId => {\n if (!list.tags?.[tagId]) return undefined\n return { ...list.tags[tagId], id: tagId }\n })\n ?.filter((x): x is TagInfo => Boolean(x)) ?? []\n const token = new WrappedTokenInfo(tokenInfo, tags)\n if (tokenMap[token.chainId][token.address] !== undefined) throw Error('Duplicate tokens.')\n return {\n ...tokenMap,\n [token.chainId]: {\n ...tokenMap[token.chainId],\n [token.address]: token\n }\n }\n },\n { ...EMPTY_LIST }\n )\n listCache?.set(list, map)\n return map\n}\n\nexport function useTokenList(url: string | undefined): TokenAddressMap {\n const lists = useSelector(state => state.lists.byUrl)\n return useMemo(() => {\n if (!url) return EMPTY_LIST\n const current = lists[url]?.current\n if (!current) return EMPTY_LIST\n try {\n return listToTokenMap(current)\n } catch (error) {\n console.error('Could not show token list due to error', error)\n return EMPTY_LIST\n }\n }, [lists, url])\n}\n\nexport function useSelectedListUrl(): string | undefined {\n return useSelector(state => state.lists.selectedListUrl)\n}\n\nexport function useSelectedTokenList(): TokenAddressMap {\n return useTokenList(useSelectedListUrl())\n}\n\nexport function useSelectedListInfo(): { current: TokenList | null; pending: TokenList | null; loading: boolean } {\n const selectedUrl = useSelectedListUrl()\n const listsByUrl = useSelector(state => state.lists.byUrl)\n const list = selectedUrl ? listsByUrl[selectedUrl] : undefined\n return {\n current: list?.current ?? null,\n pending: list?.pendingUpdate ?? null,\n loading: list?.loadingRequestId !== null\n }\n}\n\n// returns all downloaded current lists\nexport function useAllLists(): TokenList[] {\n const lists = useSelector(state => state.lists.byUrl)\n\n return useMemo(\n () =>\n Object.keys(lists)\n .map(url => lists[url].current)\n .filter((l): l is TokenList => Boolean(l)),\n [lists]\n )\n}\n","import { createAction } from '@reduxjs/toolkit'\n\nexport interface Call {\n address: string\n callData: string\n}\n\nconst ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/\nconst LOWER_HEX_REGEX = /^0x[a-f0-9]*$/\nexport function toCallKey(call: Call): string {\n if (!ADDRESS_REGEX.test(call.address)) {\n throw new Error(`Invalid address: ${call.address}`)\n }\n if (!LOWER_HEX_REGEX.test(call.callData)) {\n throw new Error(`Invalid hex: ${call.callData}`)\n }\n return `${call.address}-${call.callData}`\n}\n\nexport function parseCallKey(callKey: string): Call {\n const pcs = callKey.split('-')\n if (pcs.length !== 2) {\n throw new Error(`Invalid call key: ${callKey}`)\n }\n return {\n address: pcs[0],\n callData: pcs[1]\n }\n}\n\nexport interface ListenerOptions {\n // how often this data should be fetched, by default 1\n readonly blocksPerFetch?: number\n}\n\nexport const addMulticallListeners = createAction<{ chainId: number; calls: Call[]; options?: ListenerOptions }>(\n 'multicall/addMulticallListeners'\n)\nexport const removeMulticallListeners = createAction<{ chainId: number; calls: Call[]; options?: ListenerOptions }>(\n 'multicall/removeMulticallListeners'\n)\nexport const fetchingMulticallResults = createAction<{ chainId: number; calls: Call[]; fetchingBlockNumber: number }>(\n 'multicall/fetchingMulticallResults'\n)\nexport const errorFetchingMulticallResults = createAction<{\n chainId: number\n calls: Call[]\n fetchingBlockNumber: number\n}>('multicall/errorFetchingMulticallResults')\nexport const updateMulticallResults = createAction<{\n chainId: number\n blockNumber: number\n results: {\n [callKey: string]: string | null\n }\n}>('multicall/updateMulticallResults')\n","import { Interface, FunctionFragment } from '@ethersproject/abi'\nimport { BigNumber } from '@ethersproject/bignumber'\nimport { Contract } from '@ethersproject/contracts'\nimport { useEffect, useMemo } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { useActiveWeb3React } from '../../hooks'\nimport { useBlockNumber } from '../application/hooks'\nimport { AppDispatch, AppState } from '../index'\nimport {\n addMulticallListeners,\n Call,\n removeMulticallListeners,\n parseCallKey,\n toCallKey,\n ListenerOptions,\n} from './actions'\n\nexport interface Result extends ReadonlyArray {\n readonly [key: string]: any\n}\n\ntype MethodArg = string | number | BigNumber\ntype MethodArgs = Array\n\ntype OptionalMethodInputs = Array | undefined\n\nfunction isMethodArg(x: unknown): x is MethodArg {\n return ['string', 'number'].indexOf(typeof x) !== -1\n}\n\nfunction isValidMethodArgs(x: unknown): x is MethodArgs | undefined {\n return (\n x === undefined ||\n (Array.isArray(x) && x.every((xi) => isMethodArg(xi) || (Array.isArray(xi) && xi.every(isMethodArg))))\n )\n}\n\ninterface CallResult {\n readonly valid: boolean\n readonly data: string | undefined\n readonly blockNumber: number | undefined\n}\n\nconst INVALID_RESULT: CallResult = { valid: false, blockNumber: undefined, data: undefined }\n\n// use this options object\nexport const NEVER_RELOAD: ListenerOptions = {\n blocksPerFetch: Infinity,\n}\n\n// the lowest level call for subscribing to contract data\nfunction useCallsData(calls: (Call | undefined)[], options?: ListenerOptions): CallResult[] {\n const { chainId } = useActiveWeb3React()\n const callResults = useSelector(\n (state) => state.multicall.callResults\n )\n const dispatch = useDispatch()\n\n const serializedCallKeys: string = useMemo(\n () =>\n JSON.stringify(\n calls\n ?.filter((c): c is Call => Boolean(c))\n ?.map(toCallKey)\n ?.sort() ?? []\n ),\n [calls]\n )\n\n // update listeners when there is an actual change that persists for at least 100ms\n useEffect(() => {\n const callKeys: string[] = JSON.parse(serializedCallKeys)\n if (!chainId || callKeys.length === 0) return undefined\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const calls = callKeys.map((key) => parseCallKey(key))\n dispatch(\n addMulticallListeners({\n chainId,\n calls,\n options,\n })\n )\n\n return () => {\n dispatch(\n removeMulticallListeners({\n chainId,\n calls,\n options,\n })\n )\n }\n }, [chainId, dispatch, options, serializedCallKeys])\n\n return useMemo(\n () =>\n // @ts-ignore\n calls.map((call) => {\n if (!chainId || !call) return INVALID_RESULT\n\n const result = callResults[chainId]?.[toCallKey(call)]\n const data = result?.data && result?.data !== '0x' ? result.data : null\n\n return { valid: true, data, blockNumber: result?.blockNumber }\n }),\n [callResults, calls, chainId]\n )\n}\n\ninterface CallState {\n readonly valid: boolean\n // the result, or undefined if loading or errored/no data\n readonly result: Result | undefined\n // true if the result has never been fetched\n readonly loading: boolean\n // true if the result is not for the latest block\n readonly syncing: boolean\n // true if the call was made and is synced, but the return data is invalid\n readonly error: boolean\n}\n\nconst INVALID_CALL_STATE: CallState = { valid: false, result: undefined, loading: false, syncing: false, error: false }\nconst LOADING_CALL_STATE: CallState = { valid: true, result: undefined, loading: true, syncing: true, error: false }\n\nfunction toCallState(\n callResult: CallResult | undefined,\n contractInterface: Interface | undefined,\n fragment: FunctionFragment | undefined,\n latestBlockNumber: number | undefined\n): CallState {\n if (!callResult) return INVALID_CALL_STATE\n const { valid, data, blockNumber } = callResult\n if (!valid) return INVALID_CALL_STATE\n if (valid && !blockNumber) return LOADING_CALL_STATE\n if (!contractInterface || !fragment || !latestBlockNumber) return LOADING_CALL_STATE\n const success = data && data.length > 2\n const syncing = (blockNumber ?? 0) < latestBlockNumber\n let result: Result | undefined\n if (success && data) {\n try {\n result = contractInterface.decodeFunctionResult(fragment, data)\n } catch (error) {\n console.error('Result data parsing failed', fragment, data)\n return {\n valid: true,\n loading: false,\n error: true,\n syncing,\n result,\n }\n }\n }\n return {\n valid: true,\n loading: false,\n syncing,\n result,\n error: !success,\n }\n}\n\nexport function useSingleContractMultipleData(\n contract: Contract | null | undefined,\n methodName: string,\n callInputs: OptionalMethodInputs[],\n options?: ListenerOptions\n): CallState[] {\n const fragment = useMemo(() => contract?.interface?.getFunction(methodName), [contract, methodName])\n\n const calls = useMemo(\n () =>\n contract && fragment && callInputs && callInputs.length > 0\n ? callInputs.map((inputs) => {\n return {\n address: contract.address,\n callData: contract.interface.encodeFunctionData(fragment, inputs),\n }\n })\n : [],\n [callInputs, contract, fragment]\n )\n\n const results = useCallsData(calls, options)\n\n const latestBlockNumber = useBlockNumber()\n\n return useMemo(() => {\n return results.map((result) => toCallState(result, contract?.interface, fragment, latestBlockNumber))\n }, [fragment, contract, results, latestBlockNumber])\n}\n\nexport function useMultipleContractSingleData(\n addresses: (string | undefined)[],\n contractInterface: Interface,\n methodName: string,\n callInputs?: OptionalMethodInputs,\n options?: ListenerOptions\n): CallState[] {\n const fragment = useMemo(() => contractInterface.getFunction(methodName), [contractInterface, methodName])\n const callData: string | undefined = useMemo(\n () =>\n fragment && isValidMethodArgs(callInputs)\n ? contractInterface.encodeFunctionData(fragment, callInputs)\n : undefined,\n [callInputs, contractInterface, fragment]\n )\n\n const calls = useMemo(\n () =>\n fragment && addresses && addresses.length > 0 && callData\n ? addresses.map((address) => {\n return address && callData\n ? {\n address,\n callData,\n }\n : undefined\n })\n : [],\n [addresses, callData, fragment]\n )\n\n const results = useCallsData(calls, options)\n\n const latestBlockNumber = useBlockNumber()\n\n return useMemo(() => {\n return results.map((result) => toCallState(result, contractInterface, fragment, latestBlockNumber))\n }, [fragment, results, contractInterface, latestBlockNumber])\n}\n\nexport function useSingleCallResult(\n contract: Contract | null | undefined,\n methodName: string,\n inputs?: OptionalMethodInputs,\n options?: ListenerOptions\n): CallState {\n const fragment = useMemo(() => contract?.interface?.getFunction(methodName), [contract, methodName])\n\n const calls = useMemo(() => {\n return contract && fragment && isValidMethodArgs(inputs)\n ? [\n {\n address: contract.address,\n callData: contract.interface.encodeFunctionData(fragment, inputs),\n },\n ]\n : []\n }, [contract, fragment, inputs])\n\n const result = useCallsData(calls, options)[0]\n const latestBlockNumber = useBlockNumber()\n\n return useMemo(() => {\n return toCallState(result, contract?.interface, fragment, latestBlockNumber)\n }, [result, contract, fragment, latestBlockNumber])\n}\n","import { createAction } from '@reduxjs/toolkit'\n\nexport interface SerializedToken {\n chainId: number\n address: string\n decimals: number\n symbol?: string\n name?: string\n}\n\nexport interface SerializedPair {\n token0: SerializedToken\n token1: SerializedToken\n}\n\nexport const updateMatchesDarkMode = createAction<{ matchesDarkMode: boolean }>('user/updateMatchesDarkMode')\nexport const updateUserDarkMode = createAction<{ userDarkMode: boolean }>('user/updateUserDarkMode')\nexport const updateUserExpertMode = createAction<{ userExpertMode: boolean }>('user/updateUserExpertMode')\nexport const updateUserSlippageTolerance = createAction<{ userSlippageTolerance: number }>(\n 'user/updateUserSlippageTolerance'\n)\nexport const updateUserDeadline = createAction<{ userDeadline: number }>('user/updateUserDeadline')\nexport const addSerializedToken = createAction<{ serializedToken: SerializedToken }>('user/addSerializedToken')\nexport const removeSerializedToken = createAction<{ chainId: number; address: string }>('user/removeSerializedToken')\nexport const addSerializedPair = createAction<{ serializedPair: SerializedPair }>('user/addSerializedPair')\nexport const removeSerializedPair = createAction<{ chainId: number; tokenAAddress: string; tokenBAddress: string }>(\n 'user/removeSerializedPair'\n)\nexport const muteAudio = createAction('user/muteAudio')\nexport const unmuteAudio = createAction('user/unmuteAudio')\n","const CACHE_KEY = 'IS_DARK'\n\nexport function getThemeCache(): boolean | null {\n let cache = null\n try {\n const rawCache = localStorage.getItem(CACHE_KEY)\n if (rawCache) {\n cache = JSON.parse(rawCache)\n }\n } catch (error) {\n console.error(error)\n }\n\n return cache\n}\n\nexport function setThemeCache(isDark: boolean) {\n try {\n localStorage.setItem(CACHE_KEY, JSON.stringify(isDark))\n } catch (error) {\n console.error(error)\n }\n}\n","import { ChainId, Pair, Token } from '@pancakeswap-libs/sdk'\nimport flatMap from 'lodash.flatmap'\nimport { useCallback, useMemo } from 'react'\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux'\nimport { BASES_TO_TRACK_LIQUIDITY_FOR, PINNED_PAIRS } from '../../constants'\n\nimport { useActiveWeb3React } from '../../hooks'\n// eslint-disable-next-line import/no-cycle\nimport { useAllTokens } from '../../hooks/Tokens'\nimport { AppDispatch, AppState } from '../index'\nimport {\n addSerializedPair,\n addSerializedToken,\n removeSerializedToken,\n SerializedPair,\n SerializedToken,\n updateUserDarkMode,\n updateUserDeadline,\n updateUserExpertMode,\n updateUserSlippageTolerance,\n muteAudio,\n unmuteAudio,\n} from './actions'\nimport { setThemeCache } from '../../utils/theme'\n\nfunction serializeToken(token: Token): SerializedToken {\n return {\n chainId: token.chainId,\n address: token.address,\n decimals: token.decimals,\n symbol: token.symbol,\n name: token.name,\n }\n}\n\nfunction deserializeToken(serializedToken: SerializedToken): Token {\n return new Token(\n serializedToken.chainId,\n serializedToken.address,\n serializedToken.decimals,\n serializedToken.symbol,\n serializedToken.name\n )\n}\n\nexport function useIsDarkMode(): boolean {\n const { userDarkMode, matchesDarkMode } = useSelector<\n AppState,\n { userDarkMode: boolean | null; matchesDarkMode: boolean }\n >(\n // eslint-disable-next-line @typescript-eslint/no-shadow\n ({ user: { matchesDarkMode, userDarkMode } }) => ({\n userDarkMode,\n matchesDarkMode,\n }),\n shallowEqual\n )\n return userDarkMode === null ? matchesDarkMode : userDarkMode\n}\n\nexport function useDarkModeManager(): [boolean, () => void] {\n const dispatch = useDispatch()\n const { userDarkMode } = useSelector(\n // eslint-disable-next-line @typescript-eslint/no-shadow\n ({ user: { userDarkMode } }) => ({\n userDarkMode,\n }),\n shallowEqual\n )\n const darkMode = useIsDarkMode()\n\n const toggleSetDarkMode = useCallback(() => {\n setThemeCache(!userDarkMode)\n dispatch(updateUserDarkMode({ userDarkMode: !userDarkMode }))\n }, [userDarkMode, dispatch])\n\n return [darkMode, toggleSetDarkMode]\n}\n\nexport function useAudioModeManager(): [boolean, () => void] {\n const dispatch = useDispatch()\n const audioPlay = useSelector((state) => state.user.audioPlay)\n const toggleSetAudioMode = useCallback(() => {\n if (audioPlay) {\n dispatch(muteAudio())\n } else {\n dispatch(unmuteAudio())\n }\n }, [audioPlay, dispatch])\n\n return [audioPlay, toggleSetAudioMode]\n}\n\nexport function useIsExpertMode(): boolean {\n return useSelector((state) => state.user.userExpertMode)\n}\n\nexport function useExpertModeManager(): [boolean, () => void] {\n const dispatch = useDispatch()\n const expertMode = useIsExpertMode()\n\n const toggleSetExpertMode = useCallback(() => {\n dispatch(updateUserExpertMode({ userExpertMode: !expertMode }))\n }, [expertMode, dispatch])\n\n return [expertMode, toggleSetExpertMode]\n}\n\nexport function useUserSlippageTolerance(): [number, (slippage: number) => void] {\n const dispatch = useDispatch()\n const userSlippageTolerance = useSelector((state) => {\n return state.user.userSlippageTolerance\n })\n\n const setUserSlippageTolerance = useCallback(\n (slippageTolerance: number) => {\n dispatch(updateUserSlippageTolerance({ userSlippageTolerance: slippageTolerance }))\n },\n [dispatch]\n )\n\n return [userSlippageTolerance, setUserSlippageTolerance]\n}\n\nexport function useUserDeadline(): [number, (slippage: number) => void] {\n const dispatch = useDispatch()\n const userDeadline = useSelector((state) => {\n return state.user.userDeadline\n })\n\n const setUserDeadline = useCallback(\n (deadline: number) => {\n dispatch(updateUserDeadline({ userDeadline: deadline }))\n },\n [dispatch]\n )\n\n return [userDeadline, setUserDeadline]\n}\n\nexport function useAddUserToken(): (token: Token) => void {\n const dispatch = useDispatch()\n return useCallback(\n (token: Token) => {\n dispatch(addSerializedToken({ serializedToken: serializeToken(token) }))\n },\n [dispatch]\n )\n}\n\nexport function useRemoveUserAddedToken(): (chainId: number, address: string) => void {\n const dispatch = useDispatch()\n return useCallback(\n (chainId: number, address: string) => {\n dispatch(removeSerializedToken({ chainId, address }))\n },\n [dispatch]\n )\n}\n\nexport function useUserAddedTokens(): Token[] {\n const { chainId } = useActiveWeb3React()\n const serializedTokensMap = useSelector(({ user: { tokens } }) => tokens)\n\n return useMemo(() => {\n if (!chainId) return []\n return Object.values(serializedTokensMap[chainId as ChainId] ?? {}).map(deserializeToken)\n }, [serializedTokensMap, chainId])\n}\n\nfunction serializePair(pair: Pair): SerializedPair {\n return {\n token0: serializeToken(pair.token0),\n token1: serializeToken(pair.token1),\n }\n}\n\nexport function usePairAdder(): (pair: Pair) => void {\n const dispatch = useDispatch()\n\n return useCallback(\n (pair: Pair) => {\n dispatch(addSerializedPair({ serializedPair: serializePair(pair) }))\n },\n [dispatch]\n )\n}\n\n/**\n * Given two tokens return the liquidity token that represents its liquidity shares\n * @param tokenA one of the two tokens\n * @param tokenB the other token\n */\nexport function toV2LiquidityToken([tokenA, tokenB]: [Token, Token]): Token {\n return new Token(tokenA.chainId, Pair.getAddress(tokenA, tokenB), 18, 'Cake-LP', 'Pancake LPs')\n}\n\n/**\n * Returns all the pairs of tokens that are tracked by the user for the current chain ID.\n */\nexport function useTrackedTokenPairs(): [Token, Token][] {\n const { chainId } = useActiveWeb3React()\n const tokens = useAllTokens()\n\n // pinned pairs\n const pinnedPairs = useMemo(() => (chainId ? PINNED_PAIRS[chainId] ?? [] : []), [chainId])\n\n // pairs for every token against every base\n const generatedPairs: [Token, Token][] = useMemo(\n () =>\n chainId\n ? flatMap(Object.keys(tokens), (tokenAddress) => {\n const token = tokens[tokenAddress]\n // for each token on the current chain,\n return (\n // loop though all bases on the current chain\n (BASES_TO_TRACK_LIQUIDITY_FOR[chainId] ?? [])\n // to construct pairs of the given token with each base\n .map((base) => {\n if (base.address === token.address) {\n return null\n }\n return [base, token]\n })\n .filter((p): p is [Token, Token] => p !== null)\n )\n })\n : [],\n [tokens, chainId]\n )\n\n // pairs saved by users\n const savedSerializedPairs = useSelector(({ user: { pairs } }) => pairs)\n\n const userPairs: [Token, Token][] = useMemo(() => {\n if (!chainId || !savedSerializedPairs) return []\n const forChain = savedSerializedPairs[chainId]\n if (!forChain) return []\n\n return Object.keys(forChain).map((pairId) => {\n return [deserializeToken(forChain[pairId].token0), deserializeToken(forChain[pairId].token1)]\n })\n }, [savedSerializedPairs, chainId])\n\n const combinedList = useMemo(() => userPairs.concat(generatedPairs).concat(pinnedPairs), [\n generatedPairs,\n pinnedPairs,\n userPairs,\n ])\n\n return useMemo(() => {\n // dedupes pairs of tokens in the combined list\n const keyed = combinedList.reduce<{ [key: string]: [Token, Token] }>((memo, [tokenA, tokenB]) => {\n const sorted = tokenA.sortsBefore(tokenB)\n const key = sorted ? `${tokenA.address}:${tokenB.address}` : `${tokenB.address}:${tokenA.address}`\n if (memo[key]) return memo\n memo[key] = sorted ? [tokenA, tokenB] : [tokenB, tokenA]\n return memo\n }, {})\n\n return Object.keys(keyed).map((key) => keyed[key])\n }, [combinedList])\n}\n","import { ChainId } from '@pancakeswap-libs/sdk'\nimport MULTICALL_ABI from './abi.json'\n\nconst MULTICALL_NETWORKS: { [chainId in ChainId]: string } = {\n [ChainId.MAINNET]: '0x1Ee38d535d541c55C9dae27B12edf090C608E6Fb', // TODO\n [ChainId.BSCTESTNET]: '0x301907b5835a2d723Fe3e9E8C5Bc5375d5c1236A'\n}\n\nexport { MULTICALL_ABI, MULTICALL_NETWORKS }\n","import { Contract } from '@ethersproject/contracts'\nimport { ChainId, WETH } from '@pancakeswap-libs/sdk'\nimport { abi as IUniswapV2PairABI } from '@uniswap/v2-core/build/IUniswapV2Pair.json'\nimport { useMemo } from 'react'\nimport ENS_ABI from '../constants/abis/ens-registrar.json'\nimport ENS_PUBLIC_RESOLVER_ABI from '../constants/abis/ens-public-resolver.json'\nimport { ERC20_BYTES32_ABI } from '../constants/abis/erc20'\nimport ERC20_ABI from '../constants/abis/erc20.json'\nimport WETH_ABI from '../constants/abis/weth.json'\nimport { MULTICALL_ABI, MULTICALL_NETWORKS } from '../constants/multicall'\nimport { getContract } from '../utils'\nimport { useActiveWeb3React } from './index'\n\n// returns null on errors\nfunction useContract(address: string | undefined, ABI: any, withSignerIfPossible = true): Contract | null {\n const { library, account } = useActiveWeb3React()\n\n return useMemo(() => {\n if (!address || !ABI || !library) return null\n try {\n return getContract(address, ABI, library, withSignerIfPossible && account ? account : undefined)\n } catch (error) {\n console.error('Failed to get contract', error)\n return null\n }\n }, [address, ABI, library, withSignerIfPossible, account])\n}\n\nexport function useTokenContract(tokenAddress?: string, withSignerIfPossible?: boolean): Contract | null {\n return useContract(tokenAddress, ERC20_ABI, withSignerIfPossible)\n}\n\nexport function useWETHContract(withSignerIfPossible?: boolean): Contract | null {\n const { chainId } = useActiveWeb3React()\n return useContract(chainId ? WETH[chainId].address : undefined, WETH_ABI, withSignerIfPossible)\n}\n\nexport function useENSRegistrarContract(withSignerIfPossible?: boolean): Contract | null {\n const { chainId } = useActiveWeb3React()\n let address: string | undefined\n if (chainId) {\n switch (chainId) {\n case ChainId.MAINNET:\n case ChainId.BSCTESTNET:\n }\n }\n return useContract(address, ENS_ABI, withSignerIfPossible)\n}\n\nexport function useENSResolverContract(address: string | undefined, withSignerIfPossible?: boolean): Contract | null {\n return useContract(address, ENS_PUBLIC_RESOLVER_ABI, withSignerIfPossible)\n}\n\nexport function useBytes32TokenContract(tokenAddress?: string, withSignerIfPossible?: boolean): Contract | null {\n return useContract(tokenAddress, ERC20_BYTES32_ABI, withSignerIfPossible)\n}\n\nexport function usePairContract(pairAddress?: string, withSignerIfPossible?: boolean): Contract | null {\n return useContract(pairAddress, IUniswapV2PairABI, withSignerIfPossible)\n}\n\nexport function useMulticallContract(): Contract | null {\n const { chainId } = useActiveWeb3React()\n return useContract(chainId && MULTICALL_NETWORKS[chainId], MULTICALL_ABI, false)\n}\n","import { parseBytes32String } from '@ethersproject/strings'\nimport { Currency, ETHER, Token, currencyEquals } from '@pancakeswap-libs/sdk'\nimport { useMemo } from 'react'\nimport { useSelectedTokenList } from '../state/lists/hooks'\nimport { NEVER_RELOAD, useSingleCallResult } from '../state/multicall/hooks'\n// eslint-disable-next-line import/no-cycle\nimport { useUserAddedTokens } from '../state/user/hooks'\nimport { isAddress } from '../utils'\n\nimport { useActiveWeb3React } from './index'\nimport { useBytes32TokenContract, useTokenContract } from './useContract'\n\nexport function useAllTokens(): { [address: string]: Token } {\n const { chainId } = useActiveWeb3React()\n const userAddedTokens = useUserAddedTokens()\n const allTokens = useSelectedTokenList()\n\n return useMemo(() => {\n if (!chainId) return {}\n return (\n userAddedTokens\n // reduce into all ALL_TOKENS filtered by the current chain\n .reduce<{ [address: string]: Token }>(\n (tokenMap, token) => {\n tokenMap[token.address] = token\n return tokenMap\n },\n // must make a copy because reduce modifies the map, and we do not\n // want to make a copy in every iteration\n { ...allTokens[chainId] }\n )\n )\n }, [chainId, userAddedTokens, allTokens])\n}\n\n// Check if currency is included in custom list from user storage\nexport function useIsUserAddedToken(currency: Currency): boolean {\n const userAddedTokens = useUserAddedTokens()\n return !!userAddedTokens.find((token) => currencyEquals(currency, token))\n}\n\n// parse a name or symbol from a token response\nconst BYTES32_REGEX = /^0x[a-fA-F0-9]{64}$/\nfunction parseStringOrBytes32(str: string | undefined, bytes32: string | undefined, defaultValue: string): string {\n return str && str.length > 0\n ? str\n : bytes32 && BYTES32_REGEX.test(bytes32)\n ? parseBytes32String(bytes32)\n : defaultValue\n}\n\n// undefined if invalid or does not exist\n// null if loading\n// otherwise returns the token\nexport function useToken(tokenAddress?: string): Token | undefined | null {\n const { chainId } = useActiveWeb3React()\n const tokens = useAllTokens()\n\n const address = isAddress(tokenAddress)\n\n const tokenContract = useTokenContract(address || undefined, false)\n const tokenContractBytes32 = useBytes32TokenContract(address || undefined, false)\n const token: Token | undefined = address ? tokens[address] : undefined\n\n const tokenName = useSingleCallResult(token ? undefined : tokenContract, 'name', undefined, NEVER_RELOAD)\n const tokenNameBytes32 = useSingleCallResult(\n token ? undefined : tokenContractBytes32,\n 'name',\n undefined,\n NEVER_RELOAD\n )\n const symbol = useSingleCallResult(token ? undefined : tokenContract, 'symbol', undefined, NEVER_RELOAD)\n const symbolBytes32 = useSingleCallResult(token ? undefined : tokenContractBytes32, 'symbol', undefined, NEVER_RELOAD)\n const decimals = useSingleCallResult(token ? undefined : tokenContract, 'decimals', undefined, NEVER_RELOAD)\n\n return useMemo(() => {\n if (token) return token\n if (!chainId || !address) return undefined\n if (decimals.loading || symbol.loading || tokenName.loading) return null\n if (decimals.result) {\n return new Token(\n chainId,\n address,\n decimals.result[0],\n parseStringOrBytes32(symbol.result?.[0], symbolBytes32.result?.[0], 'UNKNOWN'),\n parseStringOrBytes32(tokenName.result?.[0], tokenNameBytes32.result?.[0], 'Unknown Token')\n )\n }\n return undefined\n }, [\n address,\n chainId,\n decimals.loading,\n decimals.result,\n symbol.loading,\n symbol.result,\n symbolBytes32.result,\n token,\n tokenName.loading,\n tokenName.result,\n tokenNameBytes32.result,\n ])\n}\n\nexport function useCurrency(currencyId: string | undefined): Currency | null | undefined {\n const isBNB = currencyId?.toUpperCase() === 'BNB'\n const token = useToken(isBNB ? undefined : currencyId)\n return isBNB ? ETHER : token\n}\n","import { Currency, CurrencyAmount, ETHER, JSBI, Token, TokenAmount } from '@pancakeswap-libs/sdk'\nimport { useMemo } from 'react'\nimport ERC20_INTERFACE from '../../constants/abis/erc20'\nimport { useAllTokens } from '../../hooks/Tokens'\nimport { useActiveWeb3React } from '../../hooks'\nimport { useMulticallContract } from '../../hooks/useContract'\nimport { isAddress } from '../../utils'\nimport { useSingleContractMultipleData, useMultipleContractSingleData } from '../multicall/hooks'\n\n/**\n * Returns a map of the given addresses to their eventually consistent ETH balances.\n */\nexport function useETHBalances(\n uncheckedAddresses?: (string | undefined)[]\n): { [address: string]: CurrencyAmount | undefined } {\n const multicallContract = useMulticallContract()\n\n const addresses: string[] = useMemo(\n () =>\n uncheckedAddresses\n ? uncheckedAddresses\n .map(isAddress)\n .filter((a): a is string => a !== false)\n .sort()\n : [],\n [uncheckedAddresses]\n )\n\n const results = useSingleContractMultipleData(\n multicallContract,\n 'getEthBalance',\n addresses.map(address => [address])\n )\n\n return useMemo(\n () =>\n addresses.reduce<{ [address: string]: CurrencyAmount }>((memo, address, i) => {\n const value = results?.[i]?.result?.[0]\n if (value) memo[address] = CurrencyAmount.ether(JSBI.BigInt(value.toString()))\n return memo\n }, {}),\n [addresses, results]\n )\n}\n\n/**\n * Returns a map of token addresses to their eventually consistent token balances for a single account.\n */\nexport function useTokenBalancesWithLoadingIndicator(\n address?: string,\n tokens?: (Token | undefined)[]\n): [{ [tokenAddress: string]: TokenAmount | undefined }, boolean] {\n const validatedTokens: Token[] = useMemo(\n () => tokens?.filter((t?: Token): t is Token => isAddress(t?.address) !== false) ?? [],\n [tokens]\n )\n\n const validatedTokenAddresses = useMemo(() => validatedTokens.map(vt => vt.address), [validatedTokens])\n\n const balances = useMultipleContractSingleData(validatedTokenAddresses, ERC20_INTERFACE, 'balanceOf', [address])\n\n const anyLoading: boolean = useMemo(() => balances.some(callState => callState.loading), [balances])\n\n return [\n useMemo(\n () =>\n address && validatedTokens.length > 0\n ? validatedTokens.reduce<{ [tokenAddress: string]: TokenAmount | undefined }>((memo, token, i) => {\n const value = balances?.[i]?.result?.[0]\n const amount = value ? JSBI.BigInt(value.toString()) : undefined\n if (amount) {\n memo[token.address] = new TokenAmount(token, amount)\n }\n return memo\n }, {})\n : {},\n [address, validatedTokens, balances]\n ),\n anyLoading\n ]\n}\n\nexport function useTokenBalances(\n address?: string,\n tokens?: (Token | undefined)[]\n): { [tokenAddress: string]: TokenAmount | undefined } {\n return useTokenBalancesWithLoadingIndicator(address, tokens)[0]\n}\n\n// get the balance for a single token/account combo\nexport function useTokenBalance(account?: string, token?: Token): TokenAmount | undefined {\n const tokenBalances = useTokenBalances(account, [token])\n if (!token) return undefined\n return tokenBalances[token.address]\n}\n\nexport function useCurrencyBalances(\n account?: string,\n currencies?: (Currency | undefined)[]\n): (CurrencyAmount | undefined)[] {\n const tokens = useMemo(() => currencies?.filter((currency): currency is Token => currency instanceof Token) ?? [], [\n currencies\n ])\n\n const tokenBalances = useTokenBalances(account, tokens)\n const containsETH: boolean = useMemo(() => currencies?.some(currency => currency === ETHER) ?? false, [currencies])\n const ethBalance = useETHBalances(containsETH ? [account] : [])\n\n return useMemo(\n () =>\n currencies?.map(currency => {\n if (!account || !currency) return undefined\n if (currency instanceof Token) return tokenBalances[currency.address]\n if (currency === ETHER) return ethBalance[account]\n return undefined\n }) ?? [],\n [account, currencies, ethBalance, tokenBalances]\n )\n}\n\nexport function useCurrencyBalance(account?: string, currency?: Currency): CurrencyAmount | undefined {\n return useCurrencyBalances(account, [currency])[0]\n}\n\n// mimics useAllBalances\nexport function useAllTokenBalances(): { [tokenAddress: string]: TokenAmount | undefined } {\n const { account } = useActiveWeb3React()\n const allTokens = useAllTokens()\n const allTokensArray = useMemo(() => Object.values(allTokens ?? {}), [allTokens])\n const balances = useTokenBalances(account ?? undefined, allTokensArray)\n return balances ?? {}\n}\n","import { useEffect, useState } from 'react'\n\n/**\n * Returns the last value of type T that passes a filter function\n * @param value changing value\n * @param filterFn function that determines whether a given value should be considered for the last value\n */\nexport default function useLast(\n value: T | undefined | null,\n filterFn?: (value: T | null | undefined) => boolean\n): T | null | undefined {\n const [last, setLast] = useState(filterFn && filterFn(value) ? value : undefined)\n useEffect(() => {\n setLast((prev) => {\n const shouldUse: boolean = filterFn ? filterFn(value) : true\n if (shouldUse) return value\n return prev\n })\n }, [filterFn, value])\n return last\n}\n\nfunction isDefined(x: T | null | undefined): x is T {\n return x !== null && x !== undefined\n}\n\n/**\n * Returns the last truthy value of type T\n * @param value changing value\n */\nexport function useLastTruthy(value: T | undefined | null): T | null | undefined {\n return useLast(value, isDefined)\n}\n","import CID from 'cids'\nimport { getCodec, rmPrefix } from 'multicodec'\nimport { decode, toB58String } from 'multihashes'\n\nexport function hexToUint8Array(hex: string): Uint8Array {\n hex = hex.startsWith('0x') ? hex.substr(2) : hex\n if (hex.length % 2 !== 0) throw new Error('hex must have length that is multiple of 2')\n const arr = new Uint8Array(hex.length / 2)\n for (let i = 0; i < arr.length; i++) {\n arr[i] = parseInt(hex.substr(i * 2, 2), 16)\n }\n return arr\n}\n\nconst UTF_8_DECODER = new TextDecoder()\n\n/**\n * Returns the URI representation of the content hash for supported codecs\n * @param contenthash to decode\n */\nexport default function contenthashToUri(contenthash: string): string {\n const buff = hexToUint8Array(contenthash)\n const codec = getCodec(buff as Buffer) // the typing is wrong for @types/multicodec\n switch (codec) {\n case 'ipfs-ns': {\n const data = rmPrefix(buff as Buffer)\n const cid = new CID(data)\n return `ipfs://${toB58String(cid.multihash)}`\n }\n case 'ipns-ns': {\n const data = rmPrefix(buff as Buffer)\n const cid = new CID(data)\n const multihash = decode(cid.multihash)\n if (multihash.name === 'identity') {\n return `ipns://${UTF_8_DECODER.decode(multihash.digest).trim()}`\n } \n return `ipns://${toB58String(cid.multihash)}`\n \n }\n default:\n throw new Error(`Unrecognized codec: ${codec}`)\n }\n}\n","const ENS_NAME_REGEX = /^(([a-zA-Z0-9]+\\.)+)eth(\\/.*)?$/\n\nexport function parseENSAddress(ensAddress: string): { ensName: string; ensPath: string | undefined } | undefined {\n const match = ensAddress.match(ENS_NAME_REGEX)\n if (!match) return undefined\n return { ensName: `${match[1].toLowerCase()}eth`, ensPath: match[3] }\n}\n\nexport default parseENSAddress\n","/**\n * Given a URI that may be ipfs, ipns, http, or https protocol, return the fetch-able http(s) URLs for the same content\n * @param uri to convert to fetch-able http url\n */\nexport default function uriToHttp(uri: string): string[] {\n const protocol = uri.split(':')[0].toLowerCase()\n switch (protocol) {\n case 'https':\n return [uri]\n case 'http':\n return [`https${ uri.substr(4)}`, uri]\n case 'ipfs':\n const hash = uri.match(/^ipfs:(\\/\\/)?(.*)$/i)?.[2]\n return [`https://cloudflare-ipfs.com/ipfs/${hash}/`, `https://ipfs.io/ipfs/${hash}/`]\n case 'ipns':\n const name = uri.match(/^ipns:(\\/\\/)?(.*)$/i)?.[2]\n return [`https://cloudflare-ipfs.com/ipns/${name}/`, `https://ipfs.io/ipns/${name}/`]\n default:\n return []\n }\n}\n","/**\n * Returns true if the string value is zero in hex\n * @param hexNumberString\n */\nexport default function isZero(hexNumberString: string) {\n return /^0x0*$/.test(hexNumberString)\n}\n","import { useMemo } from 'react'\nimport contenthashToUri from '../utils/contenthashToUri'\nimport { parseENSAddress } from '../utils/parseENSAddress'\nimport uriToHttp from '../utils/uriToHttp'\nimport useENSContentHash from './useENSContentHash'\n\nexport default function useHttpLocations(uri: string | undefined): string[] {\n const ens = useMemo(() => (uri ? parseENSAddress(uri) : undefined), [uri])\n const resolvedContentHash = useENSContentHash(ens?.ensName)\n return useMemo(() => {\n if (ens) {\n return resolvedContentHash.contenthash ? uriToHttp(contenthashToUri(resolvedContentHash.contenthash)) : []\n } \n return uri ? uriToHttp(uri) : []\n \n }, [ens, resolvedContentHash.contenthash, uri])\n}\n","import { namehash } from 'ethers/lib/utils'\nimport { useMemo } from 'react'\nimport { useSingleCallResult } from '../state/multicall/hooks'\nimport isZero from '../utils/isZero'\nimport { useENSRegistrarContract, useENSResolverContract } from './useContract'\n\n/**\n * Does a lookup for an ENS name to find its contenthash.\n */\nexport default function useENSContentHash(ensName?: string | null): { loading: boolean; contenthash: string | null } {\n const ensNodeArgument = useMemo(() => {\n if (!ensName) return [undefined]\n try {\n return ensName ? [namehash(ensName)] : [undefined]\n } catch (error) {\n return [undefined]\n }\n }, [ensName])\n const registrarContract = useENSRegistrarContract(false)\n const resolverAddressResult = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument)\n const resolverAddress = resolverAddressResult.result?.[0]\n const resolverContract = useENSResolverContract(\n resolverAddress && isZero(resolverAddress) ? undefined : resolverAddress,\n false\n )\n const contenthash = useSingleCallResult(resolverContract, 'contenthash', ensNodeArgument)\n\n return {\n contenthash: contenthash.result?.[0] ?? null,\n loading: resolverAddressResult.loading || contenthash.loading\n }\n}\n","import React, { useState } from 'react'\nimport { HelpCircle } from 'react-feather'\n\nconst BAD_SRCS: { [tokenAddress: string]: true } = {}\n\nexport interface LogoProps {\n alt?: string\n style?: any\n className?: string\n srcs: string[]\n}\n\n/**\n * Renders an image by sequentially trying a list of URIs, and then eventually a fallback triangle alert\n */\nexport default function Logo({ srcs, alt, ...rest }: LogoProps) {\n const [, refresh] = useState(0)\n\n const src: string | undefined = srcs.find((s) => !BAD_SRCS[s])\n\n if (src) {\n return (\n {\n if (src) BAD_SRCS[src] = true\n refresh((i) => i + 1)\n }}\n />\n )\n }\n\n return \n}\n","import React from 'react'\nimport styled from 'styled-components'\nimport useHttpLocations from '../../hooks/useHttpLocations'\n\nimport Logo from '../Logo'\n\nconst StyledListLogo = styled(Logo)<{ size: string }>`\n width: ${({ size }) => size};\n height: ${({ size }) => size};\n`\n\nexport default function ListLogo({\n logoURI,\n style,\n size = '24px',\n alt\n}: {\n logoURI: string\n size?: string\n style?: React.CSSProperties\n alt?: string\n}) {\n const srcs: string[] = useHttpLocations(logoURI)\n\n return \n}\n","import { useEffect, useRef } from 'react'\n\nexport default function useInterval(callback: () => void, delay: null | number, leading = true) {\n const savedCallback = useRef<() => void>()\n\n // Remember the latest callback.\n useEffect(() => {\n savedCallback.current = callback\n }, [callback])\n\n // Set up the interval.\n useEffect(() => {\n function tick() {\n const { current } = savedCallback\n if (current) {\n current()\n }\n }\n\n if (delay !== null) {\n if (leading) tick()\n const id = setInterval(tick, delay)\n return () => clearInterval(id)\n }\n return undefined\n }, [delay, leading])\n}\n","import { Placement } from '@popperjs/core'\nimport { transparentize } from 'polished'\nimport React, { useCallback, useState } from 'react'\nimport { usePopper } from 'react-popper'\nimport styled from 'styled-components'\nimport Portal from '@reach/portal'\nimport useInterval from '../../hooks/useInterval'\n\nconst PopoverContainer = styled.div<{ show: boolean }>`\n z-index: 9999;\n\n visibility: ${(props) => (props.show ? 'visible' : 'hidden')};\n opacity: ${(props) => (props.show ? 1 : 0)};\n transition: visibility 150ms linear, opacity 150ms linear;\n\n background: ${({ theme }) => theme.colors.invertedContrast};\n border: 1px solid ${({ theme }) => theme.colors.tertiary};\n box-shadow: 0 4px 8px 0 ${transparentize(0.9, '#2F80ED')};\n color: ${({ theme }) => theme.colors.textSubtle};\n border-radius: 8px;\n`\n\nconst ReferenceElement = styled.div`\n display: inline-block;\n`\n\nconst Arrow = styled.div`\n width: 8px;\n height: 8px;\n z-index: 9998;\n\n ::before {\n position: absolute;\n width: 8px;\n height: 8px;\n z-index: 9998;\n\n content: '';\n border: 1px solid ${({ theme }) => theme.colors.tertiary};\n transform: rotate(45deg);\n background: ${({ theme }) => theme.colors.invertedContrast};\n }\n\n &.arrow-top {\n bottom: -5px;\n ::before {\n border-top: none;\n border-left: none;\n }\n }\n\n &.arrow-bottom {\n top: -5px;\n ::before {\n border-bottom: none;\n border-right: none;\n }\n }\n\n &.arrow-left {\n right: -5px;\n\n ::before {\n border-bottom: none;\n border-left: none;\n }\n }\n\n &.arrow-right {\n left: -5px;\n ::before {\n border-right: none;\n border-top: none;\n }\n }\n`\n\nexport interface PopoverProps {\n content: React.ReactNode\n show: boolean\n children: React.ReactNode\n placement?: Placement\n}\n\nexport default function Popover({ content, show, children, placement = 'auto' }: PopoverProps) {\n const [referenceElement, setReferenceElement] = useState(null)\n const [popperElement, setPopperElement] = useState(null)\n const [arrowElement, setArrowElement] = useState(null)\n const { styles, update, attributes } = usePopper(referenceElement, popperElement, {\n placement,\n strategy: 'fixed',\n modifiers: [\n { name: 'offset', options: { offset: [8, 8] } },\n { name: 'arrow', options: { element: arrowElement } },\n ],\n })\n const updateCallback = useCallback(() => {\n if (update) {\n update()\n }\n }, [update])\n useInterval(updateCallback, show ? 100 : null)\n\n return (\n <>\n {children}\n \n \n {content}\n \n \n \n \n )\n}\n","import React, { useCallback, useState } from 'react'\nimport styled from 'styled-components'\nimport Popover, { PopoverProps } from '../Popover'\n\nconst TooltipContainer = styled.div`\n width: 228px;\n padding: 0.6rem 1rem;\n line-height: 150%;\n font-weight: 400;\n`\n\ninterface TooltipProps extends Omit {\n text: string\n}\n\nexport default function Tooltip({ text, ...rest }: TooltipProps) {\n return {text}} {...rest} />\n}\n\nexport function MouseoverTooltip({ children, ...rest }: Omit) {\n const [show, setShow] = useState(false)\n const open = useCallback(() => setShow(true), [setShow])\n const close = useCallback(() => setShow(false), [setShow])\n return (\n \n
\n {children}\n
\n
\n )\n}\n","import React, { useCallback, useState } from 'react'\nimport { HelpCircle as Question } from 'react-feather'\nimport styled from 'styled-components'\nimport Tooltip from '../Tooltip'\n\nconst QuestionWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0.2rem;\n border: none;\n background: none;\n outline: none;\n cursor: default;\n border-radius: 36px;\n background-color: ${({ theme }) => theme.colors.invertedContrast};\n color: ${({ theme }) => theme.colors.textSubtle};\n\n :hover,\n :focus {\n opacity: 0.7;\n }\n`\n\nexport default function QuestionHelper({ text }: { text: string }) {\n const [show, setShow] = useState(false)\n\n const open = useCallback(() => setShow(true), [setShow])\n const close = useCallback(() => setShow(false), [setShow])\n\n return (\n \n \n \n \n \n \n \n )\n}\n","import styled from 'styled-components'\nimport Logo from '../Logo'\n\nconst CoinLogo = styled(Logo)<{ size: string }>`\n width: ${({ size }) => size};\n height: ${({ size }) => size};\n`\n\nexport default CoinLogo\n","import { Currency, ETHER, Token } from '@pancakeswap-libs/sdk'\nimport React, { useMemo } from 'react'\nimport styled from 'styled-components'\nimport useHttpLocations from '../../hooks/useHttpLocations'\nimport { WrappedTokenInfo } from '../../state/lists/hooks'\nimport Logo from '../Logo'\nimport CoinLogo from '../pancake/CoinLogo'\n\nconst getTokenLogoURL = (address: string) =>\n `https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/smartchain/assets/${address}/logo.png`\n\nconst StyledBnbLogo = styled.img<{ size: string }>`\n width: ${({ size }) => size};\n height: ${({ size }) => size};\n box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.075);\n border-radius: 24px;\n`\n\nconst StyledLogo = styled(Logo)<{ size: string }>`\n width: ${({ size }) => size};\n height: ${({ size }) => size};\n`\n\nexport default function CurrencyLogo({\n currency,\n size = '24px',\n style,\n}: {\n currency?: Currency\n size?: string\n style?: React.CSSProperties\n}) {\n const uriLocations = useHttpLocations(currency instanceof WrappedTokenInfo ? currency.logoURI : undefined)\n\n const srcs: string[] = useMemo(() => {\n if (currency === ETHER) return []\n\n if (currency instanceof Token) {\n if (currency instanceof WrappedTokenInfo) {\n return [...uriLocations, `/images/coins/${currency?.address ?? 'token'}.png`, getTokenLogoURL(currency.address)]\n }\n\n return [`/images/coins/${currency?.address ?? 'token'}.png`, getTokenLogoURL(currency.address)]\n }\n return []\n }, [currency, uriLocations])\n\n if (currency === ETHER) {\n return \n }\n\n return (currency as any)?.symbol ? (\n \n ) : (\n \n )\n}\n","import React from 'react'\nimport { Text } from '@mozartfinance/uikit'\nimport { ChainId, Currency, currencyEquals, ETHER, Token } from '@pancakeswap-libs/sdk'\nimport styled from 'styled-components'\n\nimport useI18n from 'hooks/useI18n'\nimport { SUGGESTED_BASES } from '../../constants'\nimport { AutoColumn } from '../Column'\nimport QuestionHelper from '../QuestionHelper'\nimport { AutoRow } from '../Row'\nimport CurrencyLogo from '../CurrencyLogo'\n\nconst BaseWrapper = styled.div<{ disable?: boolean }>`\n border: 1px solid ${({ theme, disable }) => (disable ? 'transparent' : theme.colors.tertiary)};\n border-radius: 10px;\n display: flex;\n padding: 6px;\n\n align-items: center;\n :hover {\n cursor: ${({ disable }) => !disable && 'pointer'};\n background-color: ${({ theme, disable }) => !disable && theme.colors.invertedContrast};\n }\n\n background-color: ${({ theme, disable }) => disable && theme.colors.tertiary};\n opacity: ${({ disable }) => disable && '0.4'};\n`\n\nexport default function CommonBases({\n chainId,\n onSelect,\n selectedCurrency,\n}: {\n chainId?: ChainId\n selectedCurrency?: Currency | null\n onSelect: (currency: Currency) => void\n}) {\n const TranslateString = useI18n()\n return (\n \n \n Common bases\n \n \n \n {\n if (!selectedCurrency || !currencyEquals(selectedCurrency, ETHER)) {\n onSelect(ETHER)\n }\n }}\n disable={selectedCurrency === ETHER}\n >\n \n BNB\n \n {(chainId ? SUGGESTED_BASES[chainId] : []).map((token: Token) => {\n const selected = selectedCurrency instanceof Token && selectedCurrency.address === token.address\n return (\n !selected && onSelect(token)} disable={selected} key={token.address}>\n \n {token.symbol}\n \n )\n })}\n \n \n )\n}\n","import styled from 'styled-components'\nimport { AutoColumn } from '../Column'\nimport { RowBetween, RowFixed } from '../Row'\n\nexport const FadedSpan = styled(RowFixed)`\n color: ${({ theme }) => theme.colors.primary};\n font-size: 14px;\n`\n\nexport const PaddedColumn = styled(AutoColumn)`\n padding: 20px;\n padding-bottom: 12px;\n`\n\nexport const MenuItem = styled(RowBetween)`\n padding: 4px 20px;\n height: 56px;\n display: grid;\n grid-template-columns: auto minmax(auto, 1fr) auto minmax(0, 72px);\n grid-gap: 16px;\n cursor: ${({ disabled }) => !disabled && 'pointer'};\n pointer-events: ${({ disabled }) => disabled && 'none'};\n :hover {\n background-color: ${({ theme, disabled }) => !disabled && theme.colors.invertedContrast};\n }\n opacity: ${({ disabled, selected }) => (disabled || selected ? 0.5 : 1)};\n`\n\nexport const SearchInput = styled.input`\n position: relative;\n display: flex;\n padding: 16px;\n align-items: center;\n width: 100%;\n white-space: nowrap;\n background: none;\n border: none;\n outline: none;\n border-radius: 20px;\n color: ${({ theme }) => theme.colors.text};\n border-style: solid;\n border: 1px solid ${({ theme }) => theme.colors.tertiary};\n -webkit-appearance: none;\n\n font-size: 18px;\n\n ::placeholder {\n color: ${({ theme }) => theme.colors.textDisabled};\n }\n transition: border 100ms;\n :focus {\n border: 1px solid ${({ theme }) => theme.colors.primary};\n outline: none;\n }\n`\nexport const Separator = styled.div`\n width: 100%;\n height: 1px;\n background-color: ${({ theme }) => theme.colors.invertedContrast};\n`\n\nexport const SeparatorDark = styled.div`\n width: 100%;\n height: 1px;\n background-color: ${({ theme }) => theme.colors.tertiary};\n`\n","import { Currency, CurrencyAmount, currencyEquals, ETHER, Token } from '@pancakeswap-libs/sdk'\nimport React, { CSSProperties, MutableRefObject, useCallback, useMemo } from 'react'\nimport { FixedSizeList } from 'react-window'\nimport styled from 'styled-components'\nimport { Text } from '@mozartfinance/uikit'\nimport { useActiveWeb3React } from '../../hooks'\nimport { useSelectedTokenList, WrappedTokenInfo } from '../../state/lists/hooks'\nimport { useAddUserToken, useRemoveUserAddedToken } from '../../state/user/hooks'\nimport { useCurrencyBalance } from '../../state/wallet/hooks'\nimport { LinkStyledButton } from '../Shared'\nimport { useIsUserAddedToken } from '../../hooks/Tokens'\nimport Column from '../Column'\nimport { RowFixed } from '../Row'\nimport CurrencyLogo from '../CurrencyLogo'\nimport { MouseoverTooltip } from '../Tooltip'\nimport { FadedSpan, MenuItem } from './styleds'\nimport Loader from '../Loader'\nimport { isTokenOnList } from '../../utils'\n\nfunction currencyKey(currency: Currency): string {\n return currency instanceof Token ? currency.address : currency === ETHER ? 'ETHER' : ''\n}\n\nconst StyledBalanceText = styled(Text)`\n white-space: nowrap;\n overflow: hidden;\n max-width: 5rem;\n text-overflow: ellipsis;\n`\n\nconst Tag = styled.div`\n background-color: ${({ theme }) => theme.colors.tertiary};\n color: ${({ theme }) => theme.colors.textSubtle};\n font-size: 14px;\n border-radius: 4px;\n padding: 0.25rem 0.3rem 0.25rem 0.3rem;\n max-width: 6rem;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n justify-self: flex-end;\n margin-right: 4px;\n`\n\nfunction Balance({ balance }: { balance: CurrencyAmount }) {\n return {balance.toSignificant(4)}\n}\n\nconst TagContainer = styled.div`\n display: flex;\n justify-content: flex-end;\n`\n\nfunction TokenTags({ currency }: { currency: Currency }) {\n if (!(currency instanceof WrappedTokenInfo)) {\n return \n }\n\n const { tags } = currency\n if (!tags || tags.length === 0) return \n\n const tag = tags[0]\n\n return (\n \n \n {tag.name}\n \n {tags.length > 1 ? (\n `${name}: ${description}`)\n .join('; \\n')}\n >\n ...\n \n ) : null}\n \n )\n}\n\nfunction CurrencyRow({\n currency,\n onSelect,\n isSelected,\n otherSelected,\n style,\n}: {\n currency: Currency\n onSelect: () => void\n isSelected: boolean\n otherSelected: boolean\n style: CSSProperties\n}) {\n const { account, chainId } = useActiveWeb3React()\n const key = currencyKey(currency)\n const selectedTokenList = useSelectedTokenList()\n const isOnSelectedList = isTokenOnList(selectedTokenList, currency)\n const customAdded = useIsUserAddedToken(currency)\n const balance = useCurrencyBalance(account ?? undefined, currency)\n\n const removeToken = useRemoveUserAddedToken()\n const addToken = useAddUserToken()\n\n // only show add or remove buttons if not on selected list\n return (\n (isSelected ? null : onSelect())}\n disabled={isSelected}\n selected={otherSelected}\n >\n \n \n {currency.symbol}\n \n {!isOnSelectedList && customAdded && !(currency instanceof WrappedTokenInfo) ? (\n \n Added by user\n {\n event.stopPropagation()\n if (chainId && currency instanceof Token) removeToken(chainId, currency.address)\n }}\n >\n (Remove)\n \n \n ) : null}\n {!isOnSelectedList && !customAdded && !(currency instanceof WrappedTokenInfo) ? (\n \n Found by address\n {\n event.stopPropagation()\n if (currency instanceof Token) addToken(currency)\n }}\n >\n (Add)\n \n \n ) : null}\n \n \n \n \n {balance ? : account ? : null}\n \n \n )\n}\n\nexport default function CurrencyList({\n height,\n currencies,\n selectedCurrency,\n onCurrencySelect,\n otherCurrency,\n fixedListRef,\n showETH,\n}: {\n height: number\n currencies: Currency[]\n selectedCurrency?: Currency | null\n onCurrencySelect: (currency: Currency) => void\n otherCurrency?: Currency | null\n fixedListRef?: MutableRefObject\n showETH: boolean\n}) {\n const itemData = useMemo(() => (showETH ? [Currency.ETHER, ...currencies] : [...currencies]), [currencies, showETH])\n\n const Row = useCallback(\n ({ data, index, style }) => {\n const currency: Currency = data[index]\n const isSelected = Boolean(selectedCurrency && currencyEquals(selectedCurrency, currency))\n const otherSelected = Boolean(otherCurrency && currencyEquals(otherCurrency, currency))\n const handleSelect = () => onCurrencySelect(currency)\n return (\n \n )\n },\n [onCurrencySelect, otherCurrency, selectedCurrency]\n )\n\n const itemKey = useCallback((index: number, data: any) => currencyKey(data[index]), [])\n\n return (\n \n {Row}\n \n )\n}\n","import { Token } from '@pancakeswap-libs/sdk'\nimport { isAddress } from '../../utils'\n\nexport function filterTokens(tokens: Token[], search: string): Token[] {\n if (search.length === 0) return tokens\n\n const searchingAddress = isAddress(search)\n\n if (searchingAddress) {\n return tokens.filter((token) => token.address === searchingAddress)\n }\n\n const lowerSearchParts = search\n .toLowerCase()\n .split(/\\s+/)\n .filter((s) => s.length > 0)\n\n if (lowerSearchParts.length === 0) {\n return tokens\n }\n\n const matchesSearch = (s: string): boolean => {\n const sParts = s\n .toLowerCase()\n .split(/\\s+/)\n .filter((str) => str.length > 0)\n\n return lowerSearchParts.every((p) => p.length === 0 || sParts.some((sp) => sp.startsWith(p) || sp.endsWith(p)))\n }\n\n return tokens.filter((token) => {\n const { symbol, name } = token\n\n return (symbol && matchesSearch(symbol)) || (name && matchesSearch(name))\n })\n}\n\nexport default filterTokens\n","import React from 'react'\nimport { Text } from '@mozartfinance/uikit'\nimport styled from 'styled-components'\nimport { RowFixed } from '../Row'\n\nexport const FilterWrapper = styled(RowFixed)`\n padding: 8px;\n background-color: ${({ theme }) => theme.colors.invertedContrast};\n color: ${({ theme }) => theme.colors.text};\n border-radius: 8px;\n user-select: none;\n & > * {\n user-select: none;\n }\n :hover {\n cursor: pointer;\n }\n`\n\nexport default function SortButton({\n toggleSortOrder,\n ascending\n}: {\n toggleSortOrder: () => void\n ascending: boolean\n}) {\n return (\n \n {ascending ? '↑' : '↓'}\n \n )\n}\n","import { Token, TokenAmount } from '@pancakeswap-libs/sdk'\nimport { useMemo } from 'react'\nimport { useAllTokenBalances } from '../../state/wallet/hooks'\n\n// compare two token amounts with highest one coming first\nfunction balanceComparator(balanceA?: TokenAmount, balanceB?: TokenAmount) {\n if (balanceA && balanceB) {\n return balanceA.greaterThan(balanceB) ? -1 : balanceA.equalTo(balanceB) ? 0 : 1\n }\n if (balanceA && balanceA.greaterThan('0')) {\n return -1\n }\n if (balanceB && balanceB.greaterThan('0')) {\n return 1\n }\n return 0\n}\n\nfunction getTokenComparator(balances: {\n [tokenAddress: string]: TokenAmount | undefined\n}): (tokenA: Token, tokenB: Token) => number {\n return function sortTokens(tokenA: Token, tokenB: Token): number {\n // -1 = a is first\n // 1 = b is first\n\n // sort by balances\n const balanceA = balances[tokenA.address]\n const balanceB = balances[tokenB.address]\n\n const balanceComp = balanceComparator(balanceA, balanceB)\n if (balanceComp !== 0) return balanceComp\n\n if (tokenA.symbol && tokenB.symbol) {\n // sort by symbol\n return tokenA.symbol.toLowerCase() < tokenB.symbol.toLowerCase() ? -1 : 1\n }\n return tokenA.symbol ? -1 : tokenB.symbol ? -1 : 0\n }\n}\n\nexport function useTokenComparator(inverted: boolean): (tokenA: Token, tokenB: Token) => number {\n const balances = useAllTokenBalances()\n const comparator = useMemo(() => getTokenComparator(balances ?? {}), [balances])\n return useMemo(() => {\n if (inverted) {\n return (tokenA: Token, tokenB: Token) => comparator(tokenA, tokenB) * -1\n }\n return comparator\n }, [inverted, comparator])\n}\n\nexport default useTokenComparator\n","import { Currency, ETHER, Token } from '@pancakeswap-libs/sdk'\nimport React, { KeyboardEvent, RefObject, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react'\nimport { Text, CloseIcon } from '@mozartfinance/uikit'\nimport { useSelector } from 'react-redux'\nimport { useTranslation } from 'react-i18next'\nimport { FixedSizeList } from 'react-window'\nimport { ThemeContext } from 'styled-components'\nimport AutoSizer from 'react-virtualized-auto-sizer'\nimport useI18n from 'hooks/useI18n'\nimport { useActiveWeb3React } from '../../hooks'\nimport { AppState } from '../../state'\nimport { useAllTokens, useToken } from '../../hooks/Tokens'\nimport { useSelectedListInfo } from '../../state/lists/hooks'\nimport { LinkStyledButton } from '../Shared'\nimport { isAddress } from '../../utils'\nimport Card from '../Card'\nimport Column from '../Column'\nimport ListLogo from '../ListLogo'\nimport QuestionHelper from '../QuestionHelper'\nimport Row, { RowBetween } from '../Row'\nimport CommonBases from './CommonBases'\nimport CurrencyList from './CurrencyList'\nimport { filterTokens } from './filtering'\nimport SortButton from './SortButton'\nimport { useTokenComparator } from './sorting'\nimport { PaddedColumn, SearchInput, Separator } from './styleds'\n\ninterface CurrencySearchProps {\n isOpen: boolean\n onDismiss: () => void\n selectedCurrency?: Currency | null\n onCurrencySelect: (currency: Currency) => void\n otherSelectedCurrency?: Currency | null\n showCommonBases?: boolean\n onChangeList: () => void\n}\n\nexport function CurrencySearch({\n selectedCurrency,\n onCurrencySelect,\n otherSelectedCurrency,\n showCommonBases,\n onDismiss,\n isOpen,\n onChangeList,\n}: CurrencySearchProps) {\n const { t } = useTranslation()\n const { chainId } = useActiveWeb3React()\n const theme = useContext(ThemeContext)\n\n const fixedList = useRef()\n const [searchQuery, setSearchQuery] = useState('')\n const [invertSearchOrder, setInvertSearchOrder] = useState(false)\n const allTokens = useAllTokens()\n\n // if they input an address, use it\n const isAddressSearch = isAddress(searchQuery)\n const searchToken = useToken(searchQuery)\n\n const showETH: boolean = useMemo(() => {\n const s = searchQuery.toLowerCase().trim()\n return s === '' || s === 'b' || s === 'bn' || s === 'bnb'\n }, [searchQuery])\n\n const tokenComparator = useTokenComparator(invertSearchOrder)\n\n const audioPlay = useSelector((state) => state.user.audioPlay)\n\n const filteredTokens: Token[] = useMemo(() => {\n if (isAddressSearch) return searchToken ? [searchToken] : []\n return filterTokens(Object.values(allTokens), searchQuery)\n }, [isAddressSearch, searchToken, allTokens, searchQuery])\n\n const filteredSortedTokens: Token[] = useMemo(() => {\n if (searchToken) return [searchToken]\n const sorted = filteredTokens.sort(tokenComparator)\n const symbolMatch = searchQuery\n .toLowerCase()\n .split(/\\s+/)\n .filter((s) => s.length > 0)\n if (symbolMatch.length > 1) return sorted\n\n return [\n ...(searchToken ? [searchToken] : []),\n // sort any exact symbol matches first\n ...sorted.filter((token) => token.symbol?.toLowerCase() === symbolMatch[0]),\n ...sorted.filter((token) => token.symbol?.toLowerCase() !== symbolMatch[0]),\n ]\n }, [filteredTokens, searchQuery, searchToken, tokenComparator])\n\n const handleCurrencySelect = useCallback(\n (currency: Currency) => {\n onCurrencySelect(currency)\n onDismiss()\n if (audioPlay) {\n const audio = document.getElementById('bgMusic') as HTMLAudioElement\n if (audio) {\n audio.play()\n }\n }\n },\n [onDismiss, onCurrencySelect, audioPlay]\n )\n\n // clear the input on open\n useEffect(() => {\n if (isOpen) setSearchQuery('')\n }, [isOpen])\n\n // manage focus on modal show\n const inputRef = useRef()\n const handleInput = useCallback((event) => {\n const input = event.target.value\n const checksummedInput = isAddress(input)\n setSearchQuery(checksummedInput || input)\n fixedList.current?.scrollTo(0)\n }, [])\n\n const handleEnter = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n const s = searchQuery.toLowerCase().trim()\n if (s === 'bnb') {\n handleCurrencySelect(ETHER)\n } else if (filteredSortedTokens.length > 0) {\n if (\n filteredSortedTokens[0].symbol?.toLowerCase() === searchQuery.trim().toLowerCase() ||\n filteredSortedTokens.length === 1\n ) {\n handleCurrencySelect(filteredSortedTokens[0])\n }\n }\n }\n },\n [filteredSortedTokens, handleCurrencySelect, searchQuery]\n )\n\n const selectedListInfo = useSelectedListInfo()\n const TranslateString = useI18n()\n return (\n \n \n \n \n {TranslateString(82, 'Select a token')}\n \n \n \n \n }\n onChange={handleInput}\n onKeyDown={handleEnter}\n />\n {showCommonBases && (\n \n )}\n \n {TranslateString(126, 'Token name')}\n setInvertSearchOrder((iso) => !iso)} />\n \n \n\n \n\n
\n \n {({ height }) => (\n \n )}\n \n
\n\n {null && (\n <>\n \n \n \n {selectedListInfo.current ? (\n \n {selectedListInfo.current.logoURI ? (\n \n ) : null}\n {selectedListInfo.current.name}\n \n ) : null}\n \n {selectedListInfo.current ? TranslateString(180, 'Change') : TranslateString(1152, 'Select a list')}\n \n \n \n \n )}\n
\n )\n}\n\nexport default CurrencySearch\n","export const DEFAULT_TOKEN_LIST_URL = 'pancakeswap'\n\nexport const DEFAULT_LIST_OF_LISTS: string[] = [DEFAULT_TOKEN_LIST_URL]\n","import { TokenList } from '@uniswap/token-lists'\nimport schema from '@uniswap/token-lists/src/tokenlist.schema.json'\nimport Ajv from 'ajv'\nimport contenthashToUri from './contenthashToUri'\nimport { parseENSAddress } from './parseENSAddress'\nimport uriToHttp from './uriToHttp'\n\n// bakeryswap defaultTokenJson\nimport { DEFAULT_TOKEN_LIST_URL } from '../constants/lists'\nimport defaultTokenJson from '../constants/token/pancakeswap.json'\n\nconst tokenListValidator = new Ajv({ allErrors: true }).compile(schema)\n\n/**\n * Contains the logic for resolving a list URL to a validated token list\n * @param listUrl list url\n * @param resolveENSContentHash resolves an ens name to a contenthash\n */\nexport default async function getTokenList(\n listUrl: string,\n resolveENSContentHash: (ensName: string) => Promise\n): Promise {\n if (listUrl === DEFAULT_TOKEN_LIST_URL) {\n return defaultTokenJson\n }\n const parsedENS = parseENSAddress(listUrl)\n\n let urls: string[]\n if (parsedENS) {\n let contentHashUri\n try {\n contentHashUri = await resolveENSContentHash(parsedENS.ensName)\n } catch (error) {\n console.error(`Failed to resolve ENS name: ${parsedENS.ensName}`, error)\n throw new Error(`Failed to resolve ENS name: ${parsedENS.ensName}`)\n }\n let translatedUri\n try {\n translatedUri = contenthashToUri(contentHashUri)\n } catch (error) {\n console.error('Failed to translate contenthash to URI', contentHashUri)\n throw new Error(`Failed to translate contenthash to URI: ${contentHashUri}`)\n }\n urls = uriToHttp(`${translatedUri}${parsedENS.ensPath ?? ''}`)\n } else {\n urls = uriToHttp(listUrl)\n }\n for (let i = 0; i < urls.length; i++) {\n const url = urls[i]\n const isLast = i === urls.length - 1\n let response\n try {\n response = await fetch(url)\n } catch (error) {\n console.error('Failed to fetch list', listUrl, error)\n if (isLast) throw new Error(`Failed to download list ${listUrl}`)\n // eslint-disable-next-line no-continue\n continue\n }\n\n if (!response.ok) {\n if (isLast) throw new Error(`Failed to download list ${listUrl}`)\n // eslint-disable-next-line no-continue\n continue\n }\n\n const json = await response.json()\n if (!tokenListValidator(json)) {\n const validationErrors: string =\n tokenListValidator.errors?.reduce((memo, error) => {\n const add = `${error.dataPath} ${error.message ?? ''}`\n return memo.length > 0 ? `${memo}; ${add}` : `${add}`\n }, '') ?? 'unknown error'\n throw new Error(`Token list failed validation: ${validationErrors}`)\n }\n return json\n }\n throw new Error('Unrecognized list URL protocol.')\n}\n","import { Contract } from '@ethersproject/contracts'\nimport { Provider } from '@ethersproject/abstract-provider'\nimport { namehash } from 'ethers/lib/utils'\n\nconst REGISTRAR_ABI = [\n {\n constant: true,\n inputs: [\n {\n name: 'node',\n type: 'bytes32'\n }\n ],\n name: 'resolver',\n outputs: [\n {\n name: 'resolverAddress',\n type: 'address'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n }\n]\nconst REGISTRAR_ADDRESS = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'\n\nconst RESOLVER_ABI = [\n {\n constant: true,\n inputs: [\n {\n internalType: 'bytes32',\n name: 'node',\n type: 'bytes32'\n }\n ],\n name: 'contenthash',\n outputs: [\n {\n internalType: 'bytes',\n name: '',\n type: 'bytes'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n }\n]\n\n// cache the resolver contracts since most of them are the public resolver\nfunction resolverContract(resolverAddress: string, provider: Provider): Contract {\n return new Contract(resolverAddress, RESOLVER_ABI, provider)\n}\n\n/**\n * Fetches and decodes the result of an ENS contenthash lookup on mainnet to a URI\n * @param ensName to resolve\n * @param provider provider to use to fetch the data\n */\nexport default async function resolveENSContentHash(ensName: string, provider: Provider): Promise {\n const ensRegistrarContract = new Contract(REGISTRAR_ADDRESS, REGISTRAR_ABI, provider)\n const hash = namehash(ensName)\n const resolverAddress = await ensRegistrarContract.resolver(hash)\n return resolverContract(resolverAddress, provider).contenthash(hash)\n}\n","import { nanoid } from '@reduxjs/toolkit'\nimport { ChainId } from '@pancakeswap-libs/sdk'\nimport { TokenList } from '@uniswap/token-lists'\nimport { useCallback } from 'react'\nimport { useDispatch } from 'react-redux'\nimport { getNetworkLibrary, NETWORK_CHAIN_ID } from '../connectors'\nimport { AppDispatch } from '../state'\nimport { fetchTokenList } from '../state/lists/actions'\nimport getTokenList from '../utils/getTokenList'\nimport resolveENSContentHash from '../utils/resolveENSContentHash'\nimport { useActiveWeb3React } from './index'\n\nexport function useFetchListCallback(): (listUrl: string) => Promise {\n const { chainId, library } = useActiveWeb3React()\n const dispatch = useDispatch()\n\n const ensResolver = useCallback(\n (ensName: string) => {\n if (!library || chainId !== ChainId.MAINNET) {\n if (NETWORK_CHAIN_ID === ChainId.MAINNET) {\n const networkLibrary = getNetworkLibrary()\n if (networkLibrary) {\n return resolveENSContentHash(ensName, networkLibrary)\n }\n }\n throw new Error('Could not construct mainnet ENS resolver')\n }\n return resolveENSContentHash(ensName, library)\n },\n [chainId, library]\n )\n\n return useCallback(\n async (listUrl: string) => {\n const requestId = nanoid()\n dispatch(fetchTokenList.pending({ requestId, url: listUrl }))\n return getTokenList(listUrl, ensResolver)\n .then((tokenList) => {\n dispatch(fetchTokenList.fulfilled({ url: listUrl, tokenList, requestId }))\n return tokenList\n })\n .catch((error) => {\n console.error(`Failed to get list at url ${listUrl}`, error)\n dispatch(fetchTokenList.rejected({ url: listUrl, requestId, errorMessage: error.message }))\n throw error\n })\n },\n [dispatch, ensResolver]\n )\n}\n\nexport default useFetchListCallback\n","import { RefObject, useEffect, useRef } from 'react'\n\nexport function useOnClickOutside(\n node: RefObject,\n handler: undefined | (() => void)\n) {\n const handlerRef = useRef void)>(handler)\n useEffect(() => {\n handlerRef.current = handler\n }, [handler])\n\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (node.current?.contains(e.target as Node) ?? false) {\n return\n }\n if (handlerRef.current) handlerRef.current()\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [node])\n}\n\nexport default useOnClickOutside\n","import React, { memo, useCallback, useMemo, useRef, useState } from 'react'\nimport { ArrowLeft } from 'react-feather'\nimport { usePopper } from 'react-popper'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Button, Text, ChevronDownIcon, CloseIcon } from '@mozartfinance/uikit'\nimport styled from 'styled-components'\nimport useI18n from 'hooks/useI18n'\nimport { useFetchListCallback } from '../../hooks/useFetchListCallback'\nimport { useOnClickOutside } from '../../hooks/useOnClickOutside'\nimport useToggle from '../../hooks/useToggle'\nimport { AppDispatch, AppState } from '../../state'\nimport { acceptListUpdate, removeList, selectList } from '../../state/lists/actions'\nimport { useSelectedListUrl } from '../../state/lists/hooks'\nimport { ExternalLink, LinkStyledButton } from '../Shared'\nimport listVersionLabel from '../../utils/listVersionLabel'\nimport { parseENSAddress } from '../../utils/parseENSAddress'\nimport uriToHttp from '../../utils/uriToHttp'\nimport Column from '../Column'\nimport ListLogo from '../ListLogo'\nimport QuestionHelper from '../QuestionHelper'\nimport Row, { RowBetween } from '../Row'\nimport { PaddedColumn, SearchInput, Separator, SeparatorDark } from './styleds'\n\nconst UnpaddedLinkStyledButton = styled(LinkStyledButton)`\n padding: 0;\n font-size: 1rem;\n opacity: ${({ disabled }) => (disabled ? '0.4' : '1')};\n`\n\nconst PopoverContainer = styled.div<{ show: boolean }>`\n z-index: 100;\n visibility: ${(props) => (props.show ? 'visible' : 'hidden')};\n opacity: ${(props) => (props.show ? 1 : 0)};\n transition: visibility 150ms linear, opacity 150ms linear;\n background: ${({ theme }) => theme.colors.invertedContrast};\n border: 1px solid ${({ theme }) => theme.colors.tertiary};\n box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.01), 0px 4px 8px rgba(0, 0, 0, 0.04), 0px 16px 24px rgba(0, 0, 0, 0.04),\n 0px 24px 32px rgba(0, 0, 0, 0.01);\n color: ${({ theme }) => theme.colors.textSubtle};\n border-radius: 0.5rem;\n padding: 1rem;\n display: grid;\n grid-template-rows: 1fr;\n grid-gap: 8px;\n font-size: 1rem;\n text-align: left;\n`\n\nconst StyledMenu = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n border: none;\n`\n\nconst StyledListUrlText = styled.div`\n max-width: 160px;\n opacity: 0.6;\n margin-right: 0.5rem;\n font-size: 14px;\n overflow: hidden;\n text-overflow: ellipsis;\n`\n\nfunction ListOrigin({ listUrl }: { listUrl: string }) {\n const ensName = useMemo(() => parseENSAddress(listUrl)?.ensName, [listUrl])\n const host = useMemo(() => {\n if (ensName) return undefined\n const lowerListUrl = listUrl.toLowerCase()\n if (lowerListUrl.startsWith('ipfs://') || lowerListUrl.startsWith('ipns://')) {\n return listUrl\n }\n try {\n const url = new URL(listUrl)\n return url.host\n } catch (error) {\n return undefined\n }\n }, [listUrl, ensName])\n return <>{ensName ?? host}\n}\n\nfunction listUrlRowHTMLId(listUrl: string) {\n return `list-row-${listUrl.replace(/\\./g, '-')}`\n}\n\nconst ListRow = memo(function ListRow({ listUrl, onBack }: { listUrl: string; onBack: () => void }) {\n const listsByUrl = useSelector((state) => state.lists.byUrl)\n const selectedListUrl = useSelectedListUrl()\n const dispatch = useDispatch()\n const { current: list, pendingUpdate: pending } = listsByUrl[listUrl]\n\n const isSelected = listUrl === selectedListUrl\n\n const [open, toggle] = useToggle(false)\n const node = useRef()\n const [referenceElement, setReferenceElement] = useState()\n const [popperElement, setPopperElement] = useState()\n\n const { styles, attributes } = usePopper(referenceElement, popperElement, {\n placement: 'auto',\n strategy: 'fixed',\n modifiers: [{ name: 'offset', options: { offset: [8, 8] } }],\n })\n\n useOnClickOutside(node, open ? toggle : undefined)\n\n const selectThisList = useCallback(() => {\n if (isSelected) return\n\n dispatch(selectList(listUrl))\n onBack()\n }, [dispatch, isSelected, listUrl, onBack])\n\n const handleAcceptListUpdate = useCallback(() => {\n if (!pending) return\n dispatch(acceptListUpdate(listUrl))\n }, [dispatch, listUrl, pending])\n\n const handleRemoveList = useCallback(() => {\n if (window.prompt(`Please confirm you would like to remove this list by typing REMOVE`) === `REMOVE`) {\n dispatch(removeList(listUrl))\n }\n }, [dispatch, listUrl])\n const TranslateString = useI18n()\n if (!list) return null\n\n return (\n \n {list.logoURI ? (\n \n ) : (\n
\n )}\n \n \n \n {list.name}\n \n \n \n \n \n \n \n \n \n
\n \n \n \n
\n\n {open && (\n \n
{list && listVersionLabel(list.version)}
\n \n \n {TranslateString(1206, 'View list')}\n \n \n Remove list\n \n {pending && (\n Update list\n )}\n
\n )}\n
\n {isSelected ? (\n \n ) : (\n <>\n \n Select\n \n \n )}\n \n )\n})\n\nconst ListContainer = styled.div`\n flex: 1;\n overflow: auto;\n`\n\nexport function ListSelect({ onDismiss, onBack }: { onDismiss: () => void; onBack: () => void }) {\n const [listUrlInput, setListUrlInput] = useState('')\n\n const dispatch = useDispatch()\n const lists = useSelector((state) => state.lists.byUrl)\n const adding = Boolean(lists[listUrlInput]?.loadingRequestId)\n const [addError, setAddError] = useState(null)\n\n const handleInput = useCallback((e) => {\n setListUrlInput(e.target.value)\n setAddError(null)\n }, [])\n const fetchList = useFetchListCallback()\n\n const handleAddList = useCallback(() => {\n if (adding) return\n setAddError(null)\n fetchList(listUrlInput)\n .then(() => {\n setListUrlInput('')\n })\n .catch((error) => {\n setAddError(error.message)\n dispatch(removeList(listUrlInput))\n })\n }, [adding, dispatch, fetchList, listUrlInput])\n\n const validUrl: boolean = useMemo(() => {\n return uriToHttp(listUrlInput).length > 0 || Boolean(parseENSAddress(listUrlInput))\n }, [listUrlInput])\n\n const handleEnterKey = useCallback(\n (e) => {\n if (validUrl && e.key === 'Enter') {\n handleAddList()\n }\n },\n [handleAddList, validUrl]\n )\n\n const sortedLists = useMemo(() => {\n const listUrls = Object.keys(lists)\n return listUrls\n .filter((listUrl) => {\n return Boolean(lists[listUrl].current)\n })\n .sort((u1, u2) => {\n const { current: l1 } = lists[u1]\n const { current: l2 } = lists[u2]\n if (l1 && l2) {\n return l1.name.toLowerCase() < l2.name.toLowerCase()\n ? -1\n : l1.name.toLowerCase() === l2.name.toLowerCase()\n ? 0\n : 1\n }\n if (l1) return -1\n if (l2) return 1\n return 0\n })\n }, [lists])\n const TranslateString = useI18n()\n return (\n \n \n \n
\n \n
\n {TranslateString(1208, 'Manage Lists')}\n \n
\n
\n\n \n\n \n \n Add a list{' '}\n \n \n \n \n \n \n {addError ? (\n \n {addError}\n \n ) : null}\n \n\n \n\n \n {sortedLists.map((listUrl) => (\n \n ))}\n \n \n\n
\n Browse lists\n
\n
\n )\n}\n\nexport default ListSelect\n","import { useCallback, useState } from 'react'\n\nexport default function useToggle(initialState = false): [boolean, () => void] {\n const [state, setState] = useState(initialState)\n const toggle = useCallback(() => setState((prev) => !prev), [])\n return [state, toggle]\n}\n","import { Currency } from '@pancakeswap-libs/sdk'\nimport React, { useCallback, useEffect, useState } from 'react'\nimport useLast from '../../hooks/useLast'\nimport { useSelectedListUrl } from '../../state/lists/hooks'\nimport Modal from '../Modal'\nimport { CurrencySearch } from './CurrencySearch'\nimport { ListSelect } from './ListSelect'\n\ninterface CurrencySearchModalProps {\n isOpen: boolean\n onDismiss: () => void\n selectedCurrency?: Currency | null\n onCurrencySelect: (currency: Currency) => void\n otherSelectedCurrency?: Currency | null\n // eslint-disable-next-line react/no-unused-prop-types\n showCommonBases?: boolean\n}\n\nexport default function CurrencySearchModal({\n isOpen,\n onDismiss,\n onCurrencySelect,\n selectedCurrency,\n otherSelectedCurrency,\n}: CurrencySearchModalProps) {\n const [listView, setListView] = useState(false)\n const lastOpen = useLast(isOpen)\n\n useEffect(() => {\n if (isOpen && !lastOpen) {\n setListView(false)\n }\n }, [isOpen, lastOpen])\n\n const handleCurrencySelect = useCallback(\n (currency: Currency) => {\n onCurrencySelect(currency)\n onDismiss()\n },\n [onDismiss, onCurrencySelect]\n )\n\n const handleClickChangeList = useCallback(() => {\n setListView(true)\n }, [])\n const handleClickBack = useCallback(() => {\n setListView(false)\n }, [])\n\n const selectedListUrl = useSelectedListUrl()\n const noListSelected = !selectedListUrl\n\n return (\n \n {listView ? (\n \n ) : noListSelected ? (\n \n ) : (\n \n )}\n \n )\n}\n","import { Currency } from '@pancakeswap-libs/sdk'\nimport React from 'react'\nimport styled from 'styled-components'\nimport CurrencyLogo from '../CurrencyLogo'\n\nconst Wrapper = styled.div<{ margin: boolean; sizeraw: number }>`\n position: relative;\n display: flex;\n flex-direction: row;\n margin-right: ${({ sizeraw, margin }) => margin && `${(sizeraw / 3 + 8).toString() }px`};\n`\n\ninterface DoubleCurrencyLogoProps {\n margin?: boolean\n size?: number\n currency0?: Currency\n currency1?: Currency\n}\n\nconst HigherLogo = styled(CurrencyLogo)`\n z-index: 2;\n`\nconst CoveredLogo = styled(CurrencyLogo)<{ sizeraw: number }>`\n position: absolute;\n left: ${({ sizeraw }) => `${(sizeraw / 2).toString() }px`};\n`\n\nexport default function DoubleCurrencyLogo({\n currency0,\n currency1,\n size = 16,\n margin = false\n}: DoubleCurrencyLogoProps) {\n return (\n \n {currency0 && }\n {currency1 && }\n \n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\nimport { escapeRegExp } from '../../utils'\n\nconst StyledInput = styled.input<{ error?: boolean; fontSize?: string; align?: string }>`\n color: ${({ error, theme }) => (error ? theme.colors.failure : theme.colors.text)};\n width: 0;\n position: relative;\n font-weight: 500;\n outline: none;\n border: none;\n flex: 1 1 auto;\n background-color: transparent;\n font-size: 16px;\n text-align: ${({ align }) => align && align};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0px;\n -webkit-appearance: textfield;\n\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n\n [type='number'] {\n -moz-appearance: textfield;\n }\n\n ::-webkit-outer-spin-button,\n ::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n\n ::placeholder {\n color: ${({ theme }) => theme.colors.textSubtle};\n }\n`\n\nconst inputRegex = RegExp(`^\\\\d*(?:\\\\\\\\[.])?\\\\d*$`) // match escaped \".\" characters via in a non-capturing group\n\nexport const Input = React.memo(function InnerInput({\n value,\n onUserInput,\n placeholder,\n ...rest\n}: {\n value: string | number\n onUserInput: (input: string) => void\n error?: boolean\n fontSize?: string\n align?: 'right' | 'left'\n} & Omit, 'ref' | 'onChange' | 'as'>) {\n const enforcer = (nextUserInput: string) => {\n if (nextUserInput === '' || inputRegex.test(escapeRegExp(nextUserInput))) {\n onUserInput(nextUserInput)\n }\n }\n\n return (\n {\n // replace commas with periods, because uniswap exclusively uses period as the decimal separator\n enforcer(event.target.value.replace(/,/g, '.'))\n }}\n // universal input options\n inputMode=\"decimal\"\n title=\"Token Amount\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n // text-specific options\n type=\"text\"\n pattern=\"^[0-9]*[.,]?[0-9]*$\"\n placeholder={placeholder || '0.0'}\n minLength={1}\n maxLength={79}\n spellCheck=\"false\"\n />\n )\n})\n\nexport default Input\n","import React, { useState, useCallback } from 'react'\nimport { Currency, Pair } from '@pancakeswap-libs/sdk'\nimport { Button, ChevronDownIcon, Text } from '@mozartfinance/uikit'\nimport styled from 'styled-components'\nimport { darken } from 'polished'\nimport useI18n from 'hooks/useI18n'\nimport { useCurrencyBalance } from '../../state/wallet/hooks'\nimport CurrencySearchModal from '../SearchModal/CurrencySearchModal'\nimport CurrencyLogo from '../CurrencyLogo'\nimport DoubleCurrencyLogo from '../DoubleLogo'\nimport { RowBetween } from '../Row'\nimport { Input as NumericalInput } from '../NumericalInput'\nimport { useActiveWeb3React } from '../../hooks'\n\nconst InputRow = styled.div<{ selected: boolean }>`\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n padding: ${({ selected }) => (selected ? '0.75rem 0.5rem 0.75rem 1rem' : '0.75rem 0.75rem 0.75rem 1rem')};\n`\nconst CurrencySelect = styled.button<{ selected: boolean }>`\n align-items: center;\n height: 34px;\n font-size: 16px;\n font-weight: 500;\n background-color: transparent;\n color: ${({ selected, theme }) => (selected ? theme.colors.text : '#FFFFFF')};\n border-radius: 12px;\n outline: none;\n cursor: pointer;\n user-select: none;\n border: none;\n padding: 0 0.5rem;\n :focus,\n :hover {\n background-color: ${({ theme }) => darken(0.05, theme.colors.input)};\n }\n`\nconst LabelRow = styled.div`\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n color: ${({ theme }) => theme.colors.text};\n font-size: 0.75rem;\n line-height: 1rem;\n padding: 0.75rem 1rem 0 1rem;\n span:hover {\n cursor: pointer;\n color: ${({ theme }) => darken(0.2, theme.colors.textSubtle)};\n }\n`\nconst Aligner = styled.span`\n display: flex;\n align-items: center;\n justify-content: space-between;\n`\nconst InputPanel = styled.div<{ hideInput?: boolean }>`\n display: flex;\n flex-flow: column nowrap;\n position: relative;\n border-radius: ${({ hideInput }) => (hideInput ? '8px' : '20px')};\n background-color: ${({ theme }) => theme.colors.background};\n z-index: 1;\n`\nconst Container = styled.div<{ hideInput: boolean }>`\n border-radius: 16px;\n background-color: ${({ theme }) => theme.colors.input};\n box-shadow: ${({ theme }) => theme.shadows.inset};\n`\ninterface CurrencyInputPanelProps {\n value: string\n onUserInput: (value: string) => void\n onMax?: () => void\n showMaxButton: boolean\n label?: string\n onCurrencySelect?: (currency: Currency) => void\n currency?: Currency | null\n disableCurrencySelect?: boolean\n hideBalance?: boolean\n pair?: Pair | null\n hideInput?: boolean\n otherCurrency?: Currency | null\n id: string\n showCommonBases?: boolean\n}\nexport default function CurrencyInputPanel({\n value,\n onUserInput,\n onMax,\n showMaxButton,\n label,\n onCurrencySelect,\n currency,\n disableCurrencySelect = false,\n hideBalance = false,\n pair = null, // used for double token logo\n hideInput = false,\n otherCurrency,\n id,\n showCommonBases,\n}: CurrencyInputPanelProps) {\n const [modalOpen, setModalOpen] = useState(false)\n const { account } = useActiveWeb3React()\n const selectedCurrencyBalance = useCurrencyBalance(account ?? undefined, currency ?? undefined)\n const TranslateString = useI18n()\n const translatedLabel = label || TranslateString(132, 'Input')\n const handleDismissSearch = useCallback(() => {\n setModalOpen(false)\n }, [setModalOpen])\n return (\n \n \n {!hideInput && (\n \n \n {translatedLabel}\n {account && (\n \n {!hideBalance && !!currency && selectedCurrencyBalance\n ? `Balance: ${selectedCurrencyBalance?.toSignificant(6)}`\n : ' -'}\n \n )}\n \n \n )}\n \n {!hideInput && (\n <>\n {\n onUserInput(val)\n }}\n />\n {account && currency && showMaxButton && label !== 'To' && (\n \n )}\n \n )}\n {\n if (!disableCurrencySelect) {\n setModalOpen(true)\n }\n }}\n >\n \n {pair ? (\n \n ) : currency ? (\n \n ) : null}\n {pair ? (\n \n {pair?.token0.symbol}:{pair?.token1.symbol}\n \n ) : (\n \n {(currency && currency.symbol && currency.symbol.length > 20\n ? `${currency.symbol.slice(0, 4)}...${currency.symbol.slice(\n currency.symbol.length - 5,\n currency.symbol.length\n )}`\n : currency?.symbol) || TranslateString(1196, 'Select a currency')}\n \n )}\n {!disableCurrencySelect && }\n \n \n \n \n {!disableCurrencySelect && onCurrencySelect && (\n \n )}\n \n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\nimport { Link as HistoryLink } from 'react-router-dom'\nimport { ArrowLeft } from 'react-feather'\nimport { RowBetween } from 'components/Row'\nimport QuestionHelper from 'components/QuestionHelper'\nimport useI18n from 'hooks/useI18n'\n\nconst Tabs = styled.div`\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n border-radius: 3rem;\n justify-content: space-evenly;\n`\n\nconst ActiveText = styled.div`\n font-weight: 500;\n font-size: 20px;\n`\n\nconst StyledArrowLeft = styled(ArrowLeft)`\n color: ${({ theme }) => theme.colors.text};\n`\n\nexport function FindPoolTabs() {\n const TranslateString = useI18n()\n return (\n \n \n \n \n \n Import Pool\n \n \n \n )\n}\n\nexport function AddRemoveTabs({ adding }: { adding: boolean }) {\n const TranslateString = useI18n()\n return (\n \n \n \n \n \n {adding ? TranslateString(258, 'Add') : TranslateString(260, 'Remove')} Liquidity\n \n \n \n )\n}\n","import { BigNumber } from '@ethersproject/bignumber'\nimport { Token, TokenAmount } from '@pancakeswap-libs/sdk'\nimport { useTokenContract } from '../hooks/useContract'\nimport { useSingleCallResult } from '../state/multicall/hooks'\n\n// returns undefined if input token is undefined, or fails to get token contract,\n// or contract total supply cannot be fetched\nexport function useTotalSupply(token?: Token): TokenAmount | undefined {\n const contract = useTokenContract(token?.address, false)\n\n const totalSupply: BigNumber = useSingleCallResult(contract, 'totalSupply')?.result?.[0]\n\n return token && totalSupply ? new TokenAmount(token, totalSupply.toString()) : undefined\n}\n\nexport default useTotalSupply\n","import { Currency, ETHER, Token } from '@pancakeswap-libs/sdk'\n\nexport function currencyId(currency: Currency): string {\n if (currency === ETHER) return 'BNB'\n if (currency instanceof Token) return currency.address\n throw new Error('invalid currency')\n}\n\nexport default currencyId\n","import { ChainId, Currency, CurrencyAmount, ETHER, Token, TokenAmount, WETH } from '@pancakeswap-libs/sdk'\n\nexport function wrappedCurrency(currency: Currency | undefined, chainId: ChainId | undefined): Token | undefined {\n // eslint-disable-next-line no-nested-ternary\n return chainId && currency === ETHER ? WETH[chainId] : currency instanceof Token ? currency : undefined\n}\n\nexport function wrappedCurrencyAmount(\n currencyAmount: CurrencyAmount | undefined,\n chainId: ChainId | undefined\n): TokenAmount | undefined {\n const token = currencyAmount && chainId ? wrappedCurrency(currencyAmount.currency, chainId) : undefined\n return token && currencyAmount ? new TokenAmount(token, currencyAmount.raw) : undefined\n}\n\nexport function unwrappedToken(token: Token): Currency {\n if (token.equals(WETH[token.chainId])) return ETHER\n return token\n}\n","import { transparentize } from 'polished'\nimport React from 'react'\nimport { AlertTriangle } from 'react-feather'\nimport { Text } from '@mozartfinance/uikit'\nimport styled, { css } from 'styled-components'\nimport { AutoColumn } from '../Column'\n\nexport const Wrapper = styled.div`\n position: relative;\n`\n\nexport const ArrowWrapper = styled.div<{ clickable: boolean }>`\n padding: 2px;\n\n ${({ clickable }) =>\n clickable\n ? css`\n :hover {\n cursor: pointer;\n opacity: 0.8;\n }\n `\n : null}\n`\n\nexport const SectionBreak = styled.div`\n height: 1px;\n width: 100%;\n background-color: ${({ theme }) => theme.colors.tertiary};\n`\n\nexport const BottomGrouping = styled.div`\n margin-top: 1rem;\n`\n\nexport const ErrorText = styled(Text)<{ severity?: 0 | 1 | 2 | 3 | 4 }>`\n color: ${({ theme, severity }) =>\n severity === 3 || severity === 4\n ? theme.colors.failure\n : severity === 2\n ? theme.colors.binance\n : severity === 1\n ? theme.colors.text\n : theme.colors.success};\n`\n\nexport const StyledBalanceMaxMini = styled.button`\n height: 22px;\n width: 22px;\n background-color: ${({ theme }) => theme.colors.invertedContrast};\n border: none;\n border-radius: 50%;\n padding: 0.2rem;\n font-size: 0.875rem;\n font-weight: 400;\n margin-left: 0.4rem;\n cursor: pointer;\n color: ${({ theme }) => theme.colors.textSubtle};\n display: flex;\n justify-content: center;\n align-items: center;\n float: right;\n\n :hover {\n background-color: ${({ theme }) => theme.colors.tertiary};\n }\n :focus {\n background-color: ${({ theme }) => theme.colors.tertiary};\n outline: none;\n }\n`\n\n// styles\nexport const Dots = styled.span`\n &::after {\n display: inline-block;\n animation: ellipsis 1.25s infinite;\n content: '.';\n width: 1em;\n text-align: left;\n }\n @keyframes ellipsis {\n 0% {\n content: '.';\n }\n 33% {\n content: '..';\n }\n 66% {\n content: '...';\n }\n }\n`\n\nconst SwapCallbackErrorInner = styled.div`\n background-color: ${({ theme }) => transparentize(0.9, theme.colors.failure)};\n border-radius: 1rem;\n display: flex;\n align-items: center;\n font-size: 0.825rem;\n width: 100%;\n padding: 3rem 1.25rem 1rem 1rem;\n margin-top: -2rem;\n color: ${({ theme }) => theme.colors.failure};\n z-index: -1;\n p {\n padding: 0;\n margin: 0;\n font-weight: 500;\n }\n`\n\nconst SwapCallbackErrorInnerAlertTriangle = styled.div`\n background-color: ${({ theme }) => transparentize(0.9, theme.colors.failure)};\n display: flex;\n align-items: center;\n justify-content: center;\n margin-right: 12px;\n border-radius: 12px;\n min-width: 48px;\n height: 48px;\n`\n\nexport function SwapCallbackError({ error }: { error: string }) {\n return (\n \n \n \n \n

{error}

\n
\n )\n}\n\nexport const SwapShowAcceptChanges = styled(AutoColumn)`\n background-color: ${({ theme }) => transparentize(0.9, theme.colors.primary)};\n color: ${({ theme }) => theme.colors.primary};\n padding: 0.5rem;\n border-radius: 12px;\n margin-top: 8px;\n`\n","import React, { useState } from 'react'\nimport { JSBI, Pair, Percent } from '@pancakeswap-libs/sdk'\nimport { Button, Card as UIKitCard, CardBody, Text } from '@mozartfinance/uikit'\nimport { darken } from 'polished'\nimport { ChevronDown, ChevronUp } from 'react-feather'\nimport { Link } from 'react-router-dom'\nimport styled from 'styled-components'\nimport { useTotalSupply } from '../../data/TotalSupply'\n\nimport { useActiveWeb3React } from '../../hooks'\nimport { useTokenBalance } from '../../state/wallet/hooks'\nimport { currencyId } from '../../utils/currencyId'\nimport { unwrappedToken } from '../../utils/wrappedCurrency'\nimport Card from '../Card'\nimport { AutoColumn } from '../Column'\nimport CurrencyLogo from '../CurrencyLogo'\nimport DoubleCurrencyLogo from '../DoubleLogo'\nimport { RowBetween, RowFixed } from '../Row'\nimport { Dots } from '../swap/styleds'\n\nexport const FixedHeightRow = styled(RowBetween)`\n height: 24px;\n`\n\nexport const HoverCard = styled(Card)`\n border: 1px solid ${({ theme }) => theme.colors.invertedContrast};\n :hover {\n border: 1px solid ${({ theme }) => darken(0.06, theme.colors.invertedContrast)};\n }\n`\n\ninterface PositionCardProps {\n pair: Pair\n // eslint-disable-next-line react/no-unused-prop-types\n showUnwrapped?: boolean\n}\n\nexport function MinimalPositionCard({ pair, showUnwrapped = false }: PositionCardProps) {\n const { account } = useActiveWeb3React()\n\n const currency0 = showUnwrapped ? pair.token0 : unwrappedToken(pair.token0)\n const currency1 = showUnwrapped ? pair.token1 : unwrappedToken(pair.token1)\n\n const [showMore, setShowMore] = useState(false)\n\n const userPoolBalance = useTokenBalance(account ?? undefined, pair.liquidityToken)\n const totalPoolTokens = useTotalSupply(pair.liquidityToken)\n\n const [token0Deposited, token1Deposited] =\n !!pair &&\n !!totalPoolTokens &&\n !!userPoolBalance &&\n // this condition is a short-circuit in the case where useTokenBalance updates sooner than useTotalSupply\n JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)\n ? [\n pair.getLiquidityValue(pair.token0, totalPoolTokens, userPoolBalance, false),\n pair.getLiquidityValue(pair.token1, totalPoolTokens, userPoolBalance, false),\n ]\n : [undefined, undefined]\n\n return (\n <>\n {userPoolBalance && (\n \n \n \n \n \n \n LP Tokens in your Wallet\n \n \n \n setShowMore(!showMore)}>\n \n \n \n {currency0.symbol}/{currency1.symbol}\n \n \n \n {userPoolBalance ? userPoolBalance.toSignificant(4) : '-'}\n \n \n \n \n {currency0.symbol}:\n {token0Deposited ? (\n \n \n {token0Deposited?.toSignificant(6)}\n \n \n ) : (\n '-'\n )}\n \n \n {currency1.symbol}:\n {token1Deposited ? (\n \n \n {token1Deposited?.toSignificant(6)}\n \n \n ) : (\n '-'\n )}\n \n \n \n \n \n )}\n \n )\n}\n\nexport default function FullPositionCard({ pair }: PositionCardProps) {\n const { account } = useActiveWeb3React()\n\n const currency0 = unwrappedToken(pair.token0)\n const currency1 = unwrappedToken(pair.token1)\n\n const [showMore, setShowMore] = useState(false)\n\n const userPoolBalance = useTokenBalance(account ?? undefined, pair.liquidityToken)\n const totalPoolTokens = useTotalSupply(pair.liquidityToken)\n\n const poolTokenPercentage =\n !!userPoolBalance && !!totalPoolTokens && JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)\n ? new Percent(userPoolBalance.raw, totalPoolTokens.raw)\n : undefined\n\n const [token0Deposited, token1Deposited] =\n !!pair &&\n !!totalPoolTokens &&\n !!userPoolBalance &&\n // this condition is a short-circuit in the case where useTokenBalance updates sooner than useTotalSupply\n JSBI.greaterThanOrEqual(totalPoolTokens.raw, userPoolBalance.raw)\n ? [\n pair.getLiquidityValue(pair.token0, totalPoolTokens, userPoolBalance, false),\n pair.getLiquidityValue(pair.token1, totalPoolTokens, userPoolBalance, false),\n ]\n : [undefined, undefined]\n\n return (\n \n \n setShowMore(!showMore)} style={{ cursor: 'pointer' }}>\n \n \n {!currency0 || !currency1 ? Loading : `${currency0.symbol}/${currency1.symbol}`}\n \n \n {showMore ? (\n \n ) : (\n \n )}\n \n \n {showMore && (\n \n \n \n Pooled {currency0.symbol}:\n \n {token0Deposited ? (\n \n {token0Deposited?.toSignificant(6)}\n \n \n ) : (\n '-'\n )}\n \n\n \n \n Pooled {currency1.symbol}:\n \n {token1Deposited ? (\n \n {token1Deposited?.toSignificant(6)}\n \n \n ) : (\n '-'\n )}\n \n \n Your pool tokens:\n {userPoolBalance ? userPoolBalance.toSignificant(4) : '-'}\n \n \n Your pool share:\n {poolTokenPercentage ? `${poolTokenPercentage.toFixed(2)}%` : '-'}\n \n\n \n \n \n Remove\n \n \n \n )}\n \n \n )\n}\n","import { TokenAmount, Pair, Currency } from '@pancakeswap-libs/sdk'\nimport { useMemo } from 'react'\nimport { abi as IUniswapV2PairABI } from '@uniswap/v2-core/build/IUniswapV2Pair.json'\nimport { Interface } from '@ethersproject/abi'\nimport { useActiveWeb3React } from '../hooks'\n\nimport { useMultipleContractSingleData } from '../state/multicall/hooks'\nimport { wrappedCurrency } from '../utils/wrappedCurrency'\n\nconst PAIR_INTERFACE = new Interface(IUniswapV2PairABI)\n\nexport enum PairState {\n LOADING,\n NOT_EXISTS,\n EXISTS,\n INVALID\n}\n\nexport function usePairs(currencies: [Currency | undefined, Currency | undefined][]): [PairState, Pair | null][] {\n const { chainId } = useActiveWeb3React()\n\n const tokens = useMemo(\n () =>\n currencies.map(([currencyA, currencyB]) => [\n wrappedCurrency(currencyA, chainId),\n wrappedCurrency(currencyB, chainId)\n ]),\n [chainId, currencies]\n )\n\n const pairAddresses = useMemo(\n () =>\n tokens.map(([tokenA, tokenB]) => {\n return tokenA && tokenB && !tokenA.equals(tokenB) ? Pair.getAddress(tokenA, tokenB) : undefined\n }),\n [tokens]\n )\n\n const results = useMultipleContractSingleData(pairAddresses, PAIR_INTERFACE, 'getReserves')\n\n return useMemo(() => {\n return results.map((result, i) => {\n const { result: reserves, loading } = result\n const tokenA = tokens[i][0]\n const tokenB = tokens[i][1]\n\n if (loading) return [PairState.LOADING, null]\n if (!tokenA || !tokenB || tokenA.equals(tokenB)) return [PairState.INVALID, null]\n if (!reserves) return [PairState.NOT_EXISTS, null]\n const { reserve0, reserve1 } = reserves\n const [token0, token1] = tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA]\n return [\n PairState.EXISTS,\n new Pair(new TokenAmount(token0, reserve0.toString()), new TokenAmount(token1, reserve1.toString()))\n ]\n })\n }, [results, tokens])\n}\n\nexport function usePair(tokenA?: Currency, tokenB?: Currency): [PairState, Pair | null] {\n return usePairs([[tokenA, tokenB]])[0]\n}\n","import { Token, TokenAmount } from '@pancakeswap-libs/sdk'\nimport { useMemo } from 'react'\n\nimport { useTokenContract } from '../hooks/useContract'\nimport { useSingleCallResult } from '../state/multicall/hooks'\n\nexport function useTokenAllowance(token?: Token, owner?: string, spender?: string): TokenAmount | undefined {\n const contract = useTokenContract(token?.address, false)\n\n const inputs = useMemo(() => [owner, spender], [owner, spender])\n const allowance = useSingleCallResult(contract, 'allowance', inputs).result\n\n return useMemo(() => (token && allowance ? new TokenAmount(token, allowance.toString()) : undefined), [\n token,\n allowance,\n ])\n}\n\nexport default useTokenAllowance\n","import { createAction } from '@reduxjs/toolkit'\n\nexport enum Field {\n INPUT = 'INPUT',\n OUTPUT = 'OUTPUT'\n}\n\nexport const selectCurrency = createAction<{ field: Field; currencyId: string }>('swap/selectCurrency')\nexport const switchCurrencies = createAction('swap/switchCurrencies')\nexport const typeInput = createAction<{ field: Field; typedValue: string }>('swap/typeInput')\nexport const replaceSwapState = createAction<{\n field: Field\n typedValue: string\n inputCurrencyId?: string\n outputCurrencyId?: string\n recipient: string | null\n}>('swap/replaceSwapState')\nexport const setRecipient = createAction<{ recipient: string | null }>('swap/setRecipient')\n","import { createAction } from '@reduxjs/toolkit'\nimport { ChainId } from '@pancakeswap-libs/sdk'\n\nexport interface SerializableTransactionReceipt {\n to: string\n from: string\n contractAddress: string\n transactionIndex: number\n blockHash: string\n transactionHash: string\n blockNumber: number\n status?: number\n}\n\nexport const addTransaction = createAction<{\n chainId: ChainId\n hash: string\n from: string\n approval?: { tokenAddress: string; spender: string }\n summary?: string\n}>('transactions/addTransaction')\nexport const clearAllTransactions = createAction<{ chainId: ChainId }>('transactions/clearAllTransactions')\nexport const finalizeTransaction = createAction<{\n chainId: ChainId\n hash: string\n receipt: SerializableTransactionReceipt\n}>('transactions/finalizeTransaction')\nexport const checkedTransaction = createAction<{\n chainId: ChainId\n hash: string\n blockNumber: number\n}>('transactions/checkedTransaction')\n","import { TransactionResponse } from '@ethersproject/providers'\nimport { useCallback, useMemo } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\n\nimport { useActiveWeb3React } from '../../hooks'\nimport { AppDispatch, AppState } from '../index'\nimport { addTransaction } from './actions'\nimport { TransactionDetails } from './reducer'\n\n// helper that can take a ethers library transaction response and add it to the list of transactions\nexport function useTransactionAdder(): (\n response: TransactionResponse,\n customData?: { summary?: string; approval?: { tokenAddress: string; spender: string } }\n) => void {\n const { chainId, account } = useActiveWeb3React()\n const dispatch = useDispatch()\n\n return useCallback(\n (\n response: TransactionResponse,\n { summary, approval }: { summary?: string; approval?: { tokenAddress: string; spender: string } } = {}\n ) => {\n if (!account) return\n if (!chainId) return\n\n const { hash } = response\n if (!hash) {\n throw Error('No transaction hash found.')\n }\n dispatch(addTransaction({ hash, from: account, chainId, approval, summary }))\n },\n [dispatch, chainId, account]\n )\n}\n\n// returns all the transactions for the current chain\nexport function useAllTransactions(): { [txHash: string]: TransactionDetails } {\n const { chainId } = useActiveWeb3React()\n\n const state = useSelector((s) => s.transactions)\n\n return chainId ? state[chainId] ?? {} : {}\n}\n\nexport function useIsTransactionPending(transactionHash?: string): boolean {\n const transactions = useAllTransactions()\n\n if (!transactionHash || !transactions[transactionHash]) return false\n\n return !transactions[transactionHash].receipt\n}\n\n/**\n * Returns whether a transaction happened in the last day (86400 seconds * 1000 milliseconds / second)\n * @param tx to check for recency\n */\nexport function isTransactionRecent(tx: TransactionDetails): boolean {\n return new Date().getTime() - tx.addedTime < 86_400_000\n}\n\n// returns whether a token has a pending approval transaction\nexport function useHasPendingApproval(tokenAddress: string | undefined, spender: string | undefined): boolean {\n const allTransactions = useAllTransactions()\n return useMemo(\n () =>\n typeof tokenAddress === 'string' &&\n typeof spender === 'string' &&\n Object.keys(allTransactions).some((hash) => {\n const tx = allTransactions[hash]\n if (!tx) return false\n if (tx.receipt) {\n return false\n }\n const { approval } = tx\n if (!approval) return false\n return approval.spender === spender && approval.tokenAddress === tokenAddress && isTransactionRecent(tx)\n }),\n [allTransactions, spender, tokenAddress]\n )\n}\n","import { CurrencyAmount, Fraction, JSBI, Percent, TokenAmount, Trade } from '@pancakeswap-libs/sdk'\nimport {\n BLOCKED_PRICE_IMPACT_NON_EXPERT,\n ALLOWED_PRICE_IMPACT_HIGH,\n ALLOWED_PRICE_IMPACT_LOW,\n ALLOWED_PRICE_IMPACT_MEDIUM,\n} from '../constants'\n\nimport { Field } from '../state/swap/actions'\nimport { basisPointsToPercent } from './index'\n\nconst BASE_FEE = new Percent(JSBI.BigInt(20), JSBI.BigInt(10000))\nconst ONE_HUNDRED_PERCENT = new Percent(JSBI.BigInt(10000), JSBI.BigInt(10000))\nconst INPUT_FRACTION_AFTER_FEE = ONE_HUNDRED_PERCENT.subtract(BASE_FEE)\n\n// computes price breakdown for the trade\nexport function computeTradePriceBreakdown(\n trade?: Trade\n): { priceImpactWithoutFee?: Percent; realizedLPFee?: CurrencyAmount } {\n // for each hop in our trade, take away the x*y=k price impact from 0.2% fees\n // e.g. for 3 tokens/2 hops: 1 - ((1 - .02) * (1-.02))\n const realizedLPFee = !trade\n ? undefined\n : ONE_HUNDRED_PERCENT.subtract(\n trade.route.pairs.reduce(\n (currentFee: Fraction): Fraction => currentFee.multiply(INPUT_FRACTION_AFTER_FEE),\n ONE_HUNDRED_PERCENT\n )\n )\n\n // remove lp fees from price impact\n const priceImpactWithoutFeeFraction = trade && realizedLPFee ? trade.priceImpact.subtract(realizedLPFee) : undefined\n\n // the x*y=k impact\n const priceImpactWithoutFeePercent = priceImpactWithoutFeeFraction\n ? new Percent(priceImpactWithoutFeeFraction?.numerator, priceImpactWithoutFeeFraction?.denominator)\n : undefined\n\n // the amount of the input that accrues to LPs\n const realizedLPFeeAmount =\n realizedLPFee &&\n trade &&\n (trade.inputAmount instanceof TokenAmount\n ? new TokenAmount(trade.inputAmount.token, realizedLPFee.multiply(trade.inputAmount.raw).quotient)\n : CurrencyAmount.ether(realizedLPFee.multiply(trade.inputAmount.raw).quotient))\n\n return { priceImpactWithoutFee: priceImpactWithoutFeePercent, realizedLPFee: realizedLPFeeAmount }\n}\n\n// computes the minimum amount out and maximum amount in for a trade given a user specified allowed slippage in bips\nexport function computeSlippageAdjustedAmounts(\n trade: Trade | undefined,\n allowedSlippage: number\n): { [field in Field]?: CurrencyAmount } {\n const pct = basisPointsToPercent(allowedSlippage)\n return {\n [Field.INPUT]: trade?.maximumAmountIn(pct),\n [Field.OUTPUT]: trade?.minimumAmountOut(pct),\n }\n}\n\nexport function warningSeverity(priceImpact: Percent | undefined): 0 | 1 | 2 | 3 | 4 {\n if (!priceImpact?.lessThan(BLOCKED_PRICE_IMPACT_NON_EXPERT)) return 4\n if (!priceImpact?.lessThan(ALLOWED_PRICE_IMPACT_HIGH)) return 3\n if (!priceImpact?.lessThan(ALLOWED_PRICE_IMPACT_MEDIUM)) return 2\n if (!priceImpact?.lessThan(ALLOWED_PRICE_IMPACT_LOW)) return 1\n return 0\n}\n\nexport function formatExecutionPrice(trade?: Trade, inverted?: boolean): string {\n if (!trade) {\n return ''\n }\n return inverted\n ? `${trade.executionPrice.invert().toSignificant(6)} ${trade.inputAmount.currency.symbol} / ${\n trade.outputAmount.currency.symbol\n }`\n : `${trade.executionPrice.toSignificant(6)} ${trade.outputAmount.currency.symbol} / ${\n trade.inputAmount.currency.symbol\n }`\n}\n","import { MaxUint256 } from '@ethersproject/constants'\nimport { TransactionResponse } from '@ethersproject/providers'\nimport { Trade, TokenAmount, CurrencyAmount, ETHER } from '@pancakeswap-libs/sdk'\nimport { useCallback, useMemo } from 'react'\nimport { ROUTER_ADDRESS } from '../constants'\nimport { useTokenAllowance } from '../data/Allowances'\nimport { Field } from '../state/swap/actions'\nimport { useTransactionAdder, useHasPendingApproval } from '../state/transactions/hooks'\nimport { computeSlippageAdjustedAmounts } from '../utils/prices'\nimport { calculateGasMargin } from '../utils'\nimport { useTokenContract } from './useContract'\nimport { useActiveWeb3React } from './index'\n\nexport enum ApprovalState {\n UNKNOWN,\n NOT_APPROVED,\n PENDING,\n APPROVED,\n}\n\n// returns a variable indicating the state of the approval and a function which approves if necessary or early returns\nexport function useApproveCallback(\n amountToApprove?: CurrencyAmount,\n spender?: string\n): [ApprovalState, () => Promise] {\n const { account } = useActiveWeb3React()\n const token = amountToApprove instanceof TokenAmount ? amountToApprove.token : undefined\n const currentAllowance = useTokenAllowance(token, account ?? undefined, spender)\n const pendingApproval = useHasPendingApproval(token?.address, spender)\n\n // check the current approval status\n const approvalState: ApprovalState = useMemo(() => {\n if (!amountToApprove || !spender) return ApprovalState.UNKNOWN\n if (amountToApprove.currency === ETHER) return ApprovalState.APPROVED\n // we might not have enough data to know whether or not we need to approve\n if (!currentAllowance) return ApprovalState.UNKNOWN\n\n // amountToApprove will be defined if currentAllowance is\n return currentAllowance.lessThan(amountToApprove)\n ? pendingApproval\n ? ApprovalState.PENDING\n : ApprovalState.NOT_APPROVED\n : ApprovalState.APPROVED\n }, [amountToApprove, currentAllowance, pendingApproval, spender])\n\n const tokenContract = useTokenContract(token?.address)\n const addTransaction = useTransactionAdder()\n\n const approve = useCallback(async (): Promise => {\n if (approvalState !== ApprovalState.NOT_APPROVED) {\n console.error('approve was called unnecessarily')\n return\n }\n if (!token) {\n console.error('no token')\n return\n }\n\n if (!tokenContract) {\n console.error('tokenContract is null')\n return\n }\n\n if (!amountToApprove) {\n console.error('missing amount to approve')\n return\n }\n\n if (!spender) {\n console.error('no spender')\n return\n }\n\n let useExact = false\n const estimatedGas = await tokenContract.estimateGas.approve(spender, MaxUint256).catch(() => {\n // general fallback for tokens who restrict approval amounts\n useExact = true\n return tokenContract.estimateGas.approve(spender, amountToApprove.raw.toString())\n })\n\n // eslint-disable-next-line consistent-return\n return tokenContract\n .approve(spender, useExact ? amountToApprove.raw.toString() : MaxUint256, {\n gasLimit: calculateGasMargin(estimatedGas),\n })\n .then((response: TransactionResponse) => {\n addTransaction(response, {\n summary: `Approve ${amountToApprove.currency.symbol}`,\n approval: { tokenAddress: token.address, spender },\n })\n })\n .catch((error: Error) => {\n console.error('Failed to approve token', error)\n throw error\n })\n }, [approvalState, token, tokenContract, amountToApprove, spender, addTransaction])\n\n return [approvalState, approve]\n}\n\n// wraps useApproveCallback in the context of a swap\nexport function useApproveCallbackFromTrade(trade?: Trade, allowedSlippage = 0) {\n const amountToApprove = useMemo(\n () => (trade ? computeSlippageAdjustedAmounts(trade, allowedSlippage)[Field.INPUT] : undefined),\n [trade, allowedSlippage]\n )\n return useApproveCallback(amountToApprove, ROUTER_ADDRESS)\n}\n","import { createAction } from '@reduxjs/toolkit'\n\nexport enum Field {\n CURRENCY_A = 'CURRENCY_A',\n CURRENCY_B = 'CURRENCY_B'\n}\n\nexport const typeInput = createAction<{ field: Field; typedValue: string; noLiquidity: boolean }>('mint/typeInputMint')\nexport const resetMintState = createAction('mint/resetMintState')\n","import { useEffect, useState } from 'react'\n\n// modified from https://usehooks.com/useDebounce/\nexport default function useDebounce(value: T, delay: number): T {\n const [debouncedValue, setDebouncedValue] = useState(value)\n\n useEffect(() => {\n // Update debounced value after delay\n const handler = setTimeout(() => {\n setDebouncedValue(value)\n }, delay)\n\n // Cancel the timeout if value changes (also on delay change or unmount)\n // This is how we prevent debounced value from updating if value is changed ...\n // .. within the delay period. Timeout gets cleared and restarted.\n return () => {\n clearTimeout(handler)\n }\n }, [value, delay])\n\n return debouncedValue\n}\n","import { isAddress } from '../utils'\nimport useENSAddress from './useENSAddress'\nimport useENSName from './useENSName'\n\n/**\n * Given a name or address, does a lookup to resolve to an address and name\n * @param nameOrAddress ENS name or address\n */\nexport default function useENS(\n nameOrAddress?: string | null\n): { loading: boolean; address: string | null; name: string | null } {\n const validated = isAddress(nameOrAddress)\n const reverseLookup = useENSName(validated || undefined)\n const lookup = useENSAddress(nameOrAddress)\n\n return {\n loading: reverseLookup.loading || lookup.loading,\n address: validated || lookup.address,\n name: reverseLookup.ENSName ? reverseLookup.ENSName : !validated && lookup.address ? nameOrAddress || null : null\n }\n}\n","import { namehash } from 'ethers/lib/utils'\nimport { useMemo } from 'react'\nimport { useSingleCallResult } from '../state/multicall/hooks'\nimport { isAddress } from '../utils'\nimport isZero from '../utils/isZero'\nimport { useENSRegistrarContract, useENSResolverContract } from './useContract'\nimport useDebounce from './useDebounce'\n\n/**\n * Does a reverse lookup for an address to find its ENS name.\n * Note this is not the same as looking up an ENS name to find an address.\n */\nexport default function useENSName(address?: string): { ENSName: string | null; loading: boolean } {\n const debouncedAddress = useDebounce(address, 200)\n const ensNodeArgument = useMemo(() => {\n if (!debouncedAddress || !isAddress(debouncedAddress)) return [undefined]\n try {\n return debouncedAddress ? [namehash(`${debouncedAddress.toLowerCase().substr(2)}.addr.reverse`)] : [undefined]\n } catch (error) {\n return [undefined]\n }\n }, [debouncedAddress])\n const registrarContract = useENSRegistrarContract(false)\n const resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument)\n const resolverAddressResult = resolverAddress.result?.[0]\n const resolverContract = useENSResolverContract(\n resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined,\n false\n )\n const name = useSingleCallResult(resolverContract, 'name', ensNodeArgument)\n\n const changed = debouncedAddress !== address\n return {\n ENSName: changed ? null : name.result?.[0] ?? null,\n loading: changed || resolverAddress.loading || name.loading\n }\n}\n","import { namehash } from 'ethers/lib/utils'\nimport { useMemo } from 'react'\nimport { useSingleCallResult } from '../state/multicall/hooks'\nimport isZero from '../utils/isZero'\nimport { useENSRegistrarContract, useENSResolverContract } from './useContract'\nimport useDebounce from './useDebounce'\n\n/**\n * Does a lookup for an ENS name to find its address.\n */\nexport default function useENSAddress(ensName?: string | null): { loading: boolean; address: string | null } {\n const debouncedName = useDebounce(ensName, 200)\n const ensNodeArgument = useMemo(() => {\n if (!debouncedName) return [undefined]\n try {\n return debouncedName ? [namehash(debouncedName)] : [undefined]\n } catch (error) {\n return [undefined]\n }\n }, [debouncedName])\n const registrarContract = useENSRegistrarContract(false)\n const resolverAddress = useSingleCallResult(registrarContract, 'resolver', ensNodeArgument)\n const resolverAddressResult = resolverAddress.result?.[0]\n const resolverContract = useENSResolverContract(\n resolverAddressResult && !isZero(resolverAddressResult) ? resolverAddressResult : undefined,\n false\n )\n const addr = useSingleCallResult(resolverContract, 'addr', ensNodeArgument)\n\n const changed = debouncedName !== ensName\n return {\n address: changed ? null : addr.result?.[0] ?? null,\n loading: changed || resolverAddress.loading || addr.loading\n }\n}\n","import { Currency, CurrencyAmount, Pair, Token, Trade } from '@pancakeswap-libs/sdk'\nimport flatMap from 'lodash.flatmap'\nimport { useMemo } from 'react'\n\nimport { BASES_TO_CHECK_TRADES_AGAINST, CUSTOM_BASES } from '../constants'\nimport { PairState, usePairs } from '../data/Reserves'\nimport { wrappedCurrency } from '../utils/wrappedCurrency'\n\nimport { useActiveWeb3React } from './index'\n\nfunction useAllCommonPairs(currencyA?: Currency, currencyB?: Currency): Pair[] {\n const { chainId } = useActiveWeb3React()\n\n // Base tokens for building intermediary trading routes\n const bases: Token[] = useMemo(() => (chainId ? BASES_TO_CHECK_TRADES_AGAINST[chainId] : []), [chainId])\n\n // All pairs from base tokens\n const basePairs: [Token, Token][] = useMemo(\n () =>\n flatMap(bases, (base): [Token, Token][] => bases.map((otherBase) => [base, otherBase])).filter(\n ([t0, t1]) => t0.address !== t1.address\n ),\n [bases]\n )\n\n const [tokenA, tokenB] = chainId\n ? [wrappedCurrency(currencyA, chainId), wrappedCurrency(currencyB, chainId)]\n : [undefined, undefined]\n\n const allPairCombinations: [Token, Token][] = useMemo(\n () =>\n tokenA && tokenB\n ? [\n // the direct pair\n [tokenA, tokenB],\n // token A against all bases\n ...bases.map((base): [Token, Token] => [tokenA, base]),\n // token B against all bases\n ...bases.map((base): [Token, Token] => [tokenB, base]),\n // each base against all bases\n ...basePairs,\n ]\n .filter((tokens): tokens is [Token, Token] => Boolean(tokens[0] && tokens[1]))\n .filter(([t0, t1]) => t0.address !== t1.address)\n // This filter will remove all the pairs that are not supported by the CUSTOM_BASES settings\n // This option is currently not used on Pancake swap\n .filter(([t0, t1]) => {\n if (!chainId) return true\n const customBases = CUSTOM_BASES[chainId]\n if (!customBases) return true\n\n const customBasesA: Token[] | undefined = customBases[t0.address]\n const customBasesB: Token[] | undefined = customBases[t1.address]\n\n if (!customBasesA && !customBasesB) return true\n if (customBasesA && !customBasesA.find((base) => t1.equals(base))) return false\n if (customBasesB && !customBasesB.find((base) => t0.equals(base))) return false\n\n return true\n })\n : [],\n [tokenA, tokenB, bases, basePairs, chainId]\n )\n\n const allPairs = usePairs(allPairCombinations)\n\n // only pass along valid pairs, non-duplicated pairs\n return useMemo(\n () =>\n Object.values(\n allPairs\n // filter out invalid pairs\n .filter((result): result is [PairState.EXISTS, Pair] => Boolean(result[0] === PairState.EXISTS && result[1]))\n // filter out duplicated pairs\n .reduce<{ [pairAddress: string]: Pair }>((memo, [, curr]) => {\n memo[curr.liquidityToken.address] = memo[curr.liquidityToken.address] ?? curr\n return memo\n }, {})\n ),\n [allPairs]\n )\n}\n\n/**\n * Returns the best trade for the exact amount of tokens in to the given token out\n */\nexport function useTradeExactIn(currencyAmountIn?: CurrencyAmount, currencyOut?: Currency): Trade | null {\n const allowedPairs = useAllCommonPairs(currencyAmountIn?.currency, currencyOut)\n\n return useMemo(() => {\n if (currencyAmountIn && currencyOut && allowedPairs.length > 0) {\n return (\n Trade.bestTradeExactIn(allowedPairs, currencyAmountIn, currencyOut, { maxHops: 3, maxNumResults: 1 })[0] ?? null\n )\n }\n return null\n }, [allowedPairs, currencyAmountIn, currencyOut])\n}\n\n/**\n * Returns the best trade for the token in to the exact amount of token out\n */\nexport function useTradeExactOut(currencyIn?: Currency, currencyAmountOut?: CurrencyAmount): Trade | null {\n const allowedPairs = useAllCommonPairs(currencyIn, currencyAmountOut?.currency)\n\n return useMemo(() => {\n if (currencyIn && currencyAmountOut && allowedPairs.length > 0) {\n return (\n Trade.bestTradeExactOut(allowedPairs, currencyIn, currencyAmountOut, { maxHops: 3, maxNumResults: 1 })[0] ??\n null\n )\n }\n return null\n }, [allowedPairs, currencyIn, currencyAmountOut])\n}\n","import { parseUnits } from '@ethersproject/units'\nimport { Currency, CurrencyAmount, ETHER, JSBI, Token, TokenAmount, Trade } from '@pancakeswap-libs/sdk'\nimport { ParsedQs } from 'qs'\nimport { useCallback, useEffect, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport useENS from '../../hooks/useENS'\nimport { useActiveWeb3React } from '../../hooks'\nimport { useCurrency } from '../../hooks/Tokens'\nimport { useTradeExactIn, useTradeExactOut } from '../../hooks/Trades'\nimport useParsedQueryString from '../../hooks/useParsedQueryString'\nimport { isAddress } from '../../utils'\nimport { AppDispatch, AppState } from '../index'\nimport { useCurrencyBalances } from '../wallet/hooks'\nimport { Field, replaceSwapState, selectCurrency, setRecipient, switchCurrencies, typeInput } from './actions'\nimport { SwapState } from './reducer'\n\nimport { useUserSlippageTolerance } from '../user/hooks'\nimport { computeSlippageAdjustedAmounts } from '../../utils/prices'\n\nexport function useSwapState(): AppState['swap'] {\n return useSelector((state) => state.swap)\n}\n\nexport function useSwapActionHandlers(): {\n onCurrencySelection: (field: Field, currency: Currency) => void\n onSwitchTokens: () => void\n onUserInput: (field: Field, typedValue: string) => void\n onChangeRecipient: (recipient: string | null) => void\n} {\n const dispatch = useDispatch()\n const onCurrencySelection = useCallback(\n (field: Field, currency: Currency) => {\n dispatch(\n selectCurrency({\n field,\n currencyId: currency instanceof Token ? currency.address : currency === ETHER ? 'BNB' : '',\n })\n )\n },\n [dispatch]\n )\n\n const onSwitchTokens = useCallback(() => {\n dispatch(switchCurrencies())\n }, [dispatch])\n\n const onUserInput = useCallback(\n (field: Field, typedValue: string) => {\n dispatch(typeInput({ field, typedValue }))\n },\n [dispatch]\n )\n\n const onChangeRecipient = useCallback(\n (recipient: string | null) => {\n dispatch(setRecipient({ recipient }))\n },\n [dispatch]\n )\n\n return {\n onSwitchTokens,\n onCurrencySelection,\n onUserInput,\n onChangeRecipient,\n }\n}\n\n// try to parse a user entered amount for a given token\nexport function tryParseAmount(value?: string, currency?: Currency): CurrencyAmount | undefined {\n if (!value || !currency) {\n return undefined\n }\n try {\n const typedValueParsed = parseUnits(value, currency.decimals).toString()\n if (typedValueParsed !== '0') {\n return currency instanceof Token\n ? new TokenAmount(currency, JSBI.BigInt(typedValueParsed))\n : CurrencyAmount.ether(JSBI.BigInt(typedValueParsed))\n }\n } catch (error) {\n // should fail if the user specifies too many decimal places of precision (or maybe exceed max uint?)\n console.info(`Failed to parse input amount: \"${value}\"`, error)\n }\n // necessary for all paths to return a value\n return undefined\n}\n\nconst BAD_RECIPIENT_ADDRESSES: string[] = [\n '0xBCfCcbde45cE874adCB698cC183deBcF17952812', // v2 factory\n '0xf164fC0Ec4E93095b804a4795bBe1e041497b92a', // v2 router 01\n '0x05fF2B0DB69458A0750badebc4f9e13aDd608C7F', // v2 router 02\n]\n\n/**\n * Returns true if any of the pairs or tokens in a trade have the given checksummed address\n * @param trade to check for the given address\n * @param checksummedAddress address to check in the pairs and tokens\n */\nfunction involvesAddress(trade: Trade, checksummedAddress: string): boolean {\n return (\n trade.route.path.some((token) => token.address === checksummedAddress) ||\n trade.route.pairs.some((pair) => pair.liquidityToken.address === checksummedAddress)\n )\n}\n\n// from the current swap inputs, compute the best trade and return it.\nexport function useDerivedSwapInfo(): {\n currencies: { [field in Field]?: Currency }\n currencyBalances: { [field in Field]?: CurrencyAmount }\n parsedAmount: CurrencyAmount | undefined\n v2Trade: Trade | undefined\n inputError?: string\n} {\n const { account } = useActiveWeb3React()\n\n const {\n independentField,\n typedValue,\n [Field.INPUT]: { currencyId: inputCurrencyId },\n [Field.OUTPUT]: { currencyId: outputCurrencyId },\n recipient,\n } = useSwapState()\n\n const inputCurrency = useCurrency(inputCurrencyId)\n const outputCurrency = useCurrency(outputCurrencyId)\n const recipientLookup = useENS(recipient ?? undefined)\n const to: string | null = (recipient === null ? account : recipientLookup.address) ?? null\n\n const relevantTokenBalances = useCurrencyBalances(account ?? undefined, [\n inputCurrency ?? undefined,\n outputCurrency ?? undefined,\n ])\n\n const isExactIn: boolean = independentField === Field.INPUT\n const parsedAmount = tryParseAmount(typedValue, (isExactIn ? inputCurrency : outputCurrency) ?? undefined)\n\n const bestTradeExactIn = useTradeExactIn(isExactIn ? parsedAmount : undefined, outputCurrency ?? undefined)\n const bestTradeExactOut = useTradeExactOut(inputCurrency ?? undefined, !isExactIn ? parsedAmount : undefined)\n\n const v2Trade = isExactIn ? bestTradeExactIn : bestTradeExactOut\n\n const currencyBalances = {\n [Field.INPUT]: relevantTokenBalances[0],\n [Field.OUTPUT]: relevantTokenBalances[1],\n }\n\n const currencies: { [field in Field]?: Currency } = {\n [Field.INPUT]: inputCurrency ?? undefined,\n [Field.OUTPUT]: outputCurrency ?? undefined,\n }\n\n let inputError: string | undefined\n if (!account) {\n inputError = 'Connect Wallet'\n }\n\n if (!parsedAmount) {\n inputError = inputError ?? 'Enter an amount'\n }\n\n if (!currencies[Field.INPUT] || !currencies[Field.OUTPUT]) {\n inputError = inputError ?? 'Select a token'\n }\n\n const formattedTo = isAddress(to)\n if (!to || !formattedTo) {\n inputError = inputError ?? 'Enter a recipient'\n } else if (\n BAD_RECIPIENT_ADDRESSES.indexOf(formattedTo) !== -1 ||\n (bestTradeExactIn && involvesAddress(bestTradeExactIn, formattedTo)) ||\n (bestTradeExactOut && involvesAddress(bestTradeExactOut, formattedTo))\n ) {\n inputError = inputError ?? 'Invalid recipient'\n }\n\n const [allowedSlippage] = useUserSlippageTolerance()\n\n const slippageAdjustedAmounts = v2Trade && allowedSlippage && computeSlippageAdjustedAmounts(v2Trade, allowedSlippage)\n\n // compare input balance to max input based on version\n const [balanceIn, amountIn] = [\n currencyBalances[Field.INPUT],\n slippageAdjustedAmounts ? slippageAdjustedAmounts[Field.INPUT] : null,\n ]\n\n if (balanceIn && amountIn && balanceIn.lessThan(amountIn)) {\n inputError = `Insufficient ${amountIn.currency.symbol} balance`\n }\n\n return {\n currencies,\n currencyBalances,\n parsedAmount,\n v2Trade: v2Trade ?? undefined,\n inputError,\n }\n}\n\nfunction parseCurrencyFromURLParameter(urlParam: any): string {\n if (typeof urlParam === 'string') {\n const valid = isAddress(urlParam)\n if (valid) return valid\n if (urlParam.toUpperCase() === 'BNB') return 'BNB'\n if (valid === false) return 'BNB'\n }\n return 'BNB' ?? ''\n}\n\nfunction parseTokenAmountURLParameter(urlParam: any): string {\n // eslint-disable-next-line no-restricted-globals\n return typeof urlParam === 'string' && !isNaN(parseFloat(urlParam)) ? urlParam : ''\n}\n\nfunction parseIndependentFieldURLParameter(urlParam: any): Field {\n return typeof urlParam === 'string' && urlParam.toLowerCase() === 'output' ? Field.OUTPUT : Field.INPUT\n}\n\nconst ENS_NAME_REGEX = /^[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)?$/\nconst ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/\nfunction validatedRecipient(recipient: any): string | null {\n if (typeof recipient !== 'string') return null\n const address = isAddress(recipient)\n if (address) return address\n if (ENS_NAME_REGEX.test(recipient)) return recipient\n if (ADDRESS_REGEX.test(recipient)) return recipient\n return null\n}\n\nexport function queryParametersToSwapState(parsedQs: ParsedQs): SwapState {\n let inputCurrency = parseCurrencyFromURLParameter(parsedQs.inputCurrency)\n let outputCurrency = parseCurrencyFromURLParameter(parsedQs.outputCurrency)\n if (inputCurrency === outputCurrency) {\n if (typeof parsedQs.outputCurrency === 'string') {\n inputCurrency = ''\n } else {\n outputCurrency = ''\n }\n }\n\n const recipient = validatedRecipient(parsedQs.recipient)\n\n return {\n [Field.INPUT]: {\n currencyId: inputCurrency,\n },\n [Field.OUTPUT]: {\n currencyId: outputCurrency,\n },\n typedValue: parseTokenAmountURLParameter(parsedQs.exactAmount),\n independentField: parseIndependentFieldURLParameter(parsedQs.exactField),\n recipient,\n }\n}\n\n// updates the swap state to use the defaults for a given network\nexport function useDefaultsFromURLSearch():\n | { inputCurrencyId: string | undefined; outputCurrencyId: string | undefined }\n | undefined {\n const { chainId } = useActiveWeb3React()\n const dispatch = useDispatch()\n const parsedQs = useParsedQueryString()\n const [result, setResult] = useState<\n { inputCurrencyId: string | undefined; outputCurrencyId: string | undefined } | undefined\n >()\n\n useEffect(() => {\n if (!chainId) return\n const parsed = queryParametersToSwapState(parsedQs)\n\n dispatch(\n replaceSwapState({\n typedValue: parsed.typedValue,\n field: parsed.independentField,\n inputCurrencyId: parsed[Field.INPUT].currencyId,\n outputCurrencyId: parsed[Field.OUTPUT].currencyId,\n recipient: parsed.recipient,\n })\n )\n\n setResult({ inputCurrencyId: parsed[Field.INPUT].currencyId, outputCurrencyId: parsed[Field.OUTPUT].currencyId })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dispatch, chainId])\n\n return result\n}\n","import { parse, ParsedQs } from 'qs'\nimport { useMemo } from 'react'\nimport { useLocation } from 'react-router-dom'\n\nexport default function useParsedQueryString(): ParsedQs {\n const { search } = useLocation()\n return useMemo(\n () => (search && search.length > 1 ? parse(search, { parseArrays: false, ignoreQueryPrefix: true }) : {}),\n [search]\n )\n}\n","import { Currency, CurrencyAmount, ETHER, JSBI, Pair, Percent, Price, TokenAmount } from '@pancakeswap-libs/sdk'\nimport { useCallback, useMemo } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { PairState, usePair } from '../../data/Reserves'\nimport { useTotalSupply } from '../../data/TotalSupply'\n\nimport { useActiveWeb3React } from '../../hooks'\nimport { TranslateString } from '../../utils/translateTextHelpers'\nimport { wrappedCurrency, wrappedCurrencyAmount } from '../../utils/wrappedCurrency'\nimport { AppDispatch, AppState } from '../index'\nimport { tryParseAmount } from '../swap/hooks'\nimport { useCurrencyBalances } from '../wallet/hooks'\nimport { Field, typeInput } from './actions'\n\nconst ZERO = JSBI.BigInt(0)\n\nexport function useMintState(): AppState['mint'] {\n return useSelector((state) => state.mint)\n}\n\nexport function useDerivedMintInfo(\n currencyA: Currency | undefined,\n currencyB: Currency | undefined\n): {\n dependentField: Field\n currencies: { [field in Field]?: Currency }\n pair?: Pair | null\n pairState: PairState\n currencyBalances: { [field in Field]?: CurrencyAmount }\n parsedAmounts: { [field in Field]?: CurrencyAmount }\n price?: Price\n noLiquidity?: boolean\n liquidityMinted?: TokenAmount\n poolTokenPercentage?: Percent\n error?: string\n} {\n const { account, chainId } = useActiveWeb3React()\n\n const { independentField, typedValue, otherTypedValue } = useMintState()\n\n const dependentField = independentField === Field.CURRENCY_A ? Field.CURRENCY_B : Field.CURRENCY_A\n\n // tokens\n const currencies: { [field in Field]?: Currency } = useMemo(\n () => ({\n [Field.CURRENCY_A]: currencyA ?? undefined,\n [Field.CURRENCY_B]: currencyB ?? undefined,\n }),\n [currencyA, currencyB]\n )\n\n // pair\n const [pairState, pair] = usePair(currencies[Field.CURRENCY_A], currencies[Field.CURRENCY_B])\n const totalSupply = useTotalSupply(pair?.liquidityToken)\n\n const noLiquidity: boolean =\n pairState === PairState.NOT_EXISTS || Boolean(totalSupply && JSBI.equal(totalSupply.raw, ZERO))\n\n // balances\n const balances = useCurrencyBalances(account ?? undefined, [\n currencies[Field.CURRENCY_A],\n currencies[Field.CURRENCY_B],\n ])\n const currencyBalances: { [field in Field]?: CurrencyAmount } = {\n [Field.CURRENCY_A]: balances[0],\n [Field.CURRENCY_B]: balances[1],\n }\n\n // amounts\n const independentAmount: CurrencyAmount | undefined = tryParseAmount(typedValue, currencies[independentField])\n const dependentAmount: CurrencyAmount | undefined = useMemo(() => {\n if (noLiquidity) {\n if (otherTypedValue && currencies[dependentField]) {\n return tryParseAmount(otherTypedValue, currencies[dependentField])\n }\n return undefined\n }\n if (independentAmount) {\n // we wrap the currencies just to get the price in terms of the other token\n const wrappedIndependentAmount = wrappedCurrencyAmount(independentAmount, chainId)\n const [tokenA, tokenB] = [wrappedCurrency(currencyA, chainId), wrappedCurrency(currencyB, chainId)]\n if (tokenA && tokenB && wrappedIndependentAmount && pair) {\n const dependentCurrency = dependentField === Field.CURRENCY_B ? currencyB : currencyA\n const dependentTokenAmount =\n dependentField === Field.CURRENCY_B\n ? pair.priceOf(tokenA).quote(wrappedIndependentAmount)\n : pair.priceOf(tokenB).quote(wrappedIndependentAmount)\n return dependentCurrency === ETHER ? CurrencyAmount.ether(dependentTokenAmount.raw) : dependentTokenAmount\n }\n return undefined\n }\n return undefined\n }, [noLiquidity, otherTypedValue, currencies, dependentField, independentAmount, currencyA, chainId, currencyB, pair])\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const parsedAmounts: { [field in Field]: CurrencyAmount | undefined } = {\n [Field.CURRENCY_A]: independentField === Field.CURRENCY_A ? independentAmount : dependentAmount,\n [Field.CURRENCY_B]: independentField === Field.CURRENCY_A ? dependentAmount : independentAmount,\n }\n\n const price = useMemo(() => {\n if (noLiquidity) {\n const { [Field.CURRENCY_A]: currencyAAmount, [Field.CURRENCY_B]: currencyBAmount } = parsedAmounts\n if (currencyAAmount && currencyBAmount) {\n return new Price(currencyAAmount.currency, currencyBAmount.currency, currencyAAmount.raw, currencyBAmount.raw)\n }\n return undefined\n }\n const wrappedCurrencyA = wrappedCurrency(currencyA, chainId)\n return pair && wrappedCurrencyA ? pair.priceOf(wrappedCurrencyA) : undefined\n }, [chainId, currencyA, noLiquidity, pair, parsedAmounts])\n\n // liquidity minted\n const liquidityMinted = useMemo(() => {\n const { [Field.CURRENCY_A]: currencyAAmount, [Field.CURRENCY_B]: currencyBAmount } = parsedAmounts\n const [tokenAmountA, tokenAmountB] = [\n wrappedCurrencyAmount(currencyAAmount, chainId),\n wrappedCurrencyAmount(currencyBAmount, chainId),\n ]\n if (pair && totalSupply && tokenAmountA && tokenAmountB) {\n return pair.getLiquidityMinted(totalSupply, tokenAmountA, tokenAmountB)\n }\n return undefined\n }, [parsedAmounts, chainId, pair, totalSupply])\n\n const poolTokenPercentage = useMemo(() => {\n if (liquidityMinted && totalSupply) {\n return new Percent(liquidityMinted.raw, totalSupply.add(liquidityMinted).raw)\n }\n return undefined\n }, [liquidityMinted, totalSupply])\n\n let error: string | undefined\n if (!account) {\n error = 'Connect Wallet'\n }\n\n if (pairState === PairState.INVALID) {\n error = error ?? TranslateString(136, 'Invalid pair')\n }\n\n if (!parsedAmounts[Field.CURRENCY_A] || !parsedAmounts[Field.CURRENCY_B]) {\n error = error ?? TranslateString(84, 'Enter an amount')\n }\n\n const { [Field.CURRENCY_A]: currencyAAmount, [Field.CURRENCY_B]: currencyBAmount } = parsedAmounts\n\n if (currencyAAmount && currencyBalances?.[Field.CURRENCY_A]?.lessThan(currencyAAmount)) {\n error = `Insufficient ${currencies[Field.CURRENCY_A]?.symbol} balance`\n }\n\n if (currencyBAmount && currencyBalances?.[Field.CURRENCY_B]?.lessThan(currencyBAmount)) {\n error = `Insufficient ${currencies[Field.CURRENCY_B]?.symbol} balance`\n }\n\n return {\n dependentField,\n currencies,\n pair,\n pairState,\n currencyBalances,\n parsedAmounts,\n price,\n noLiquidity,\n liquidityMinted,\n poolTokenPercentage,\n error,\n }\n}\n\nexport function useMintActionHandlers(\n noLiquidity: boolean | undefined\n): {\n onFieldAInput: (typedValue: string) => void\n onFieldBInput: (typedValue: string) => void\n} {\n const dispatch = useDispatch()\n\n const onFieldAInput = useCallback(\n (typedValue: string) => {\n dispatch(typeInput({ field: Field.CURRENCY_A, typedValue, noLiquidity: noLiquidity === true }))\n },\n [dispatch, noLiquidity]\n )\n const onFieldBInput = useCallback(\n (typedValue: string) => {\n dispatch(typeInput({ field: Field.CURRENCY_B, typedValue, noLiquidity: noLiquidity === true }))\n },\n [dispatch, noLiquidity]\n )\n\n return {\n onFieldAInput,\n onFieldBInput,\n }\n}\n","import { CurrencyAmount, ETHER, JSBI } from '@pancakeswap-libs/sdk'\nimport { MIN_ETH } from '../constants'\n\n/**\n * Given some token amount, return the max that can be spent of it\n * @param currencyAmount to return max of\n */\nexport function maxAmountSpend(currencyAmount?: CurrencyAmount): CurrencyAmount | undefined {\n if (!currencyAmount) return undefined\n if (currencyAmount.currency === ETHER) {\n if (JSBI.greaterThan(currencyAmount.raw, MIN_ETH)) {\n return CurrencyAmount.ether(JSBI.subtract(currencyAmount.raw, MIN_ETH))\n }\n return CurrencyAmount.ether(JSBI.BigInt(0))\n }\n return currencyAmount\n}\n\nexport default maxAmountSpend\n","import styled from 'styled-components'\n\nconst Pane = styled.div`\n border: 2px solid ${({ theme }) => theme.colors.borderColor};\n border-radius: 16px;\n padding: 16px;\n`\n\nexport default Pane\n","/* eslint-disable no-param-reassign */\nimport { Toast } from '@mozartfinance/uikit'\nimport { createSlice, PayloadAction } from '@reduxjs/toolkit'\n\nconst initialState: ToastsState = {\n data: [],\n}\n\nexport interface ToastsState {\n data: Toast[]\n}\n\nexport const toastsSlice = createSlice({\n name: 'toasts',\n initialState,\n reducers: {\n push: (state: ToastsState, action: PayloadAction) => {\n const { payload } = action\n const toastIndex = state.data.findIndex((toast) => toast.id === action.payload.id)\n\n // If id already matches remove it before adding it to the top of the stack\n if (toastIndex >= 0) {\n state.data.splice(toastIndex, 1)\n }\n\n state.data.unshift(payload)\n },\n remove: (state: ToastsState, action: PayloadAction) => {\n const toastIndex = state.data.findIndex((toast) => toast.id === action.payload)\n\n if (toastIndex >= 0) {\n state.data.splice(toastIndex, 1)\n }\n },\n clear: (state: ToastsState) => {\n state.data = []\n },\n },\n})\n\n// Actions\nexport const { clear, remove, push } = toastsSlice.actions\n\nexport default toastsSlice.reducer\n","import { useMemo } from 'react'\nimport { kebabCase } from 'lodash'\nimport { Toast, toastTypes } from '@mozartfinance/uikit'\nimport { useDispatch } from 'react-redux'\n\nimport {\n push as pushToast,\n remove as removeToast,\n clear as clearToast\n} from 'state/actions'\n\n// Toasts\nconst useToast = () => {\n const dispatch = useDispatch()\n const helpers = useMemo(() => {\n const push = (toast: Toast) => dispatch(pushToast(toast))\n\n return {\n toastError: (title: string, description?: string) => {\n return push({ id: kebabCase(title), type: toastTypes.DANGER, title, description })\n },\n toastInfo: (title: string, description?: string) => {\n return push({ id: kebabCase(title), type: toastTypes.INFO, title, description })\n },\n toastSuccess: (title: string, description?: string) => {\n return push({ id: kebabCase(title), type: toastTypes.SUCCESS, title, description })\n },\n toastWarning: (title: string, description?: string) => {\n return push({ id: kebabCase(title), type: toastTypes.WARNING, title, description })\n },\n push,\n remove: (id: string) => dispatch(removeToast(id)),\n clear: () => dispatch(clearToast()),\n }\n }, [dispatch])\n\n return helpers\n}\n\nexport default useToast","import { useCallback } from 'react'\nimport { useWeb3React, UnsupportedChainIdError } from '@web3-react/core'\nimport { NoBscProviderError } from '@binance-chain/bsc-connector'\nimport {\n NoEthereumProviderError,\n UserRejectedRequestError as UserRejectedRequestErrorInjected,\n} from '@web3-react/injected-connector'\nimport {\n UserRejectedRequestError as UserRejectedRequestErrorWalletConnect,\n WalletConnectConnector,\n} from '@web3-react/walletconnect-connector'\nimport { connectorLocalStorageKey, ConnectorNames } from '@mozartfinance/uikit'\nimport useToast from 'hooks/useToast'\nimport { connectorsByName } from 'connectors'\n\nconst useAuth = () => {\n const { activate, deactivate } = useWeb3React()\n const { toastError } = useToast()\n\n const login = useCallback((connectorID: ConnectorNames) => {\n const connector = connectorsByName[connectorID]\n if (connector) {\n activate(connector, async (error: Error) => {\n window.localStorage.removeItem(connectorLocalStorageKey)\n if (error instanceof UnsupportedChainIdError) {\n toastError('Unsupported Chain Id', 'Unsupported Chain Id Error. Check your chain Id.')\n } else if (error instanceof NoEthereumProviderError || error instanceof NoBscProviderError) {\n toastError('Provider Error', 'No provider was found')\n } else if (\n error instanceof UserRejectedRequestErrorInjected ||\n error instanceof UserRejectedRequestErrorWalletConnect\n ) {\n if (connector instanceof WalletConnectConnector) {\n const walletConnector = connector as WalletConnectConnector\n walletConnector.walletConnectProvider = null\n }\n toastError('Authorization Error', 'Please authorize to access your account')\n } else {\n toastError(error.name, error.message)\n }\n })\n } else {\n toastError(\"Can't find connector\", 'The connector config is wrong')\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n return { login, logout: deactivate }\n}\n\nexport default useAuth\n","import React from 'react'\nimport { Button, ButtonProps, useWalletModal} from '@mozartfinance/uikit'\nimport useI18n from 'hooks/useI18n'\nimport useAuth from 'hooks/useAuth'\n\nconst UnlockButton: React.FC = (props) => {\n const TranslateString = useI18n()\n const { login, logout } = useAuth()\n const { onPresentConnectModal } = useWalletModal(login, logout)\n\n return (\n \n )\n}\n\nexport default UnlockButton\n","import React from 'react'\nimport styled from 'styled-components'\nimport { Card } from '@mozartfinance/uikit'\n\nexport const BodyWrapper = styled(Card)`\n position: relative;\n max-width: 436px;\n width: 100%;\n z-index: 5;\n`\n\n/**\n * The styled container element that wraps the content of most pages and the tabs.\n */\nexport default function AppBody({ children }: { children: React.ReactNode }) {\n return {children}\n}\n","import { Text } from '@mozartfinance/uikit'\nimport styled from 'styled-components'\n\nexport const Wrapper = styled.div`\n position: relative;\n`\n\nexport const ClickableText = styled(Text)`\n :hover {\n cursor: pointer;\n }\n color: ${({ theme }) => theme.colors.primary};\n`\n\nexport const Dots = styled.span`\n &::after {\n display: inline-block;\n animation: ellipsis 1.25s infinite;\n content: '.';\n width: 1em;\n text-align: left;\n }\n @keyframes ellipsis {\n 0% {\n content: '.';\n }\n 33% {\n content: '..';\n }\n 66% {\n content: '...';\n }\n }\n`\n","import { Currency, CurrencyAmount, Fraction, Percent } from '@pancakeswap-libs/sdk'\nimport React from 'react'\nimport { Button, Text } from '@mozartfinance/uikit'\nimport { TranslateString } from 'utils/translateTextHelpers'\nimport { RowBetween, RowFixed } from '../../components/Row'\nimport CurrencyLogo from '../../components/CurrencyLogo'\nimport { Field } from '../../state/mint/actions'\n\nexport function ConfirmAddModalBottom({\n noLiquidity,\n price,\n currencies,\n parsedAmounts,\n poolTokenPercentage,\n onAdd,\n}: {\n noLiquidity?: boolean\n price?: Fraction\n currencies: { [field in Field]?: Currency }\n parsedAmounts: { [field in Field]?: CurrencyAmount }\n poolTokenPercentage?: Percent\n onAdd: () => void\n}) {\n return (\n <>\n \n {currencies[Field.CURRENCY_A]?.symbol} Deposited\n \n \n {parsedAmounts[Field.CURRENCY_A]?.toSignificant(6)}\n \n \n \n {currencies[Field.CURRENCY_B]?.symbol} Deposited\n \n \n {parsedAmounts[Field.CURRENCY_B]?.toSignificant(6)}\n \n \n \n Rates\n \n {`1 ${currencies[Field.CURRENCY_A]?.symbol} = ${price?.toSignificant(4)} ${\n currencies[Field.CURRENCY_B]?.symbol\n }`}\n \n \n \n \n {`1 ${currencies[Field.CURRENCY_B]?.symbol} = ${price?.invert().toSignificant(4)} ${\n currencies[Field.CURRENCY_A]?.symbol\n }`}\n \n \n \n Share of Pool:\n {noLiquidity ? '100' : poolTokenPercentage?.toSignificant(4)}%\n \n \n \n )\n}\n\nexport default ConfirmAddModalBottom\n","import React from 'react'\nimport { Currency, Percent, Price } from '@pancakeswap-libs/sdk'\nimport { Text } from '@mozartfinance/uikit'\nimport { AutoColumn } from '../../components/Column'\nimport { AutoRow } from '../../components/Row'\nimport { ONE_BIPS } from '../../constants'\nimport { Field } from '../../state/mint/actions'\n\nexport function PoolPriceBar({\n currencies,\n noLiquidity,\n poolTokenPercentage,\n price,\n}: {\n currencies: { [field in Field]?: Currency }\n noLiquidity?: boolean\n poolTokenPercentage?: Percent\n price?: Price\n}) {\n return (\n \n \n \n {price?.toSignificant(6) ?? '-'}\n \n {currencies[Field.CURRENCY_B]?.symbol} per {currencies[Field.CURRENCY_A]?.symbol}\n \n \n \n {price?.invert()?.toSignificant(6) ?? '-'}\n \n {currencies[Field.CURRENCY_A]?.symbol} per {currencies[Field.CURRENCY_B]?.symbol}\n \n \n \n \n {noLiquidity && price\n ? '100'\n : (poolTokenPercentage?.lessThan(ONE_BIPS) ? '<0.01' : poolTokenPercentage?.toFixed(2)) ?? '0'}\n %\n \n \n Share of Pool\n \n \n \n \n )\n}\n\nexport default PoolPriceBar\n","import React, { useCallback, useState } from 'react'\nimport { BigNumber } from '@ethersproject/bignumber'\nimport { TransactionResponse } from '@ethersproject/providers'\nimport { Currency, currencyEquals, ETHER, TokenAmount, WETH } from '@pancakeswap-libs/sdk'\nimport { Button, CardBody, AddIcon, Text as UIKitText } from '@mozartfinance/uikit'\nimport { RouteComponentProps } from 'react-router-dom'\nimport { LightCard } from 'components/Card'\nimport { AutoColumn, ColumnCenter } from 'components/Column'\nimport TransactionConfirmationModal, { ConfirmationModalContent } from 'components/TransactionConfirmationModal'\nimport CardNav from 'components/CardNav'\nimport CurrencyInputPanel from 'components/CurrencyInputPanel'\nimport DoubleCurrencyLogo from 'components/DoubleLogo'\nimport { AddRemoveTabs } from 'components/NavigationTabs'\nimport { MinimalPositionCard } from 'components/PositionCard'\nimport Row, { RowBetween, RowFlat } from 'components/Row'\n\nimport { PairState } from 'data/Reserves'\nimport { useActiveWeb3React } from 'hooks'\nimport { useCurrency } from 'hooks/Tokens'\nimport { ApprovalState, useApproveCallback } from 'hooks/useApproveCallback'\nimport { Field } from 'state/mint/actions'\nimport { useDerivedMintInfo, useMintActionHandlers, useMintState } from 'state/mint/hooks'\n\nimport { useTransactionAdder } from 'state/transactions/hooks'\nimport { useIsExpertMode, useUserDeadline, useUserSlippageTolerance } from 'state/user/hooks'\nimport { calculateGasMargin, calculateSlippageAmount, getRouterContract } from 'utils'\nimport { maxAmountSpend } from 'utils/maxAmountSpend'\nimport { wrappedCurrency } from 'utils/wrappedCurrency'\nimport { currencyId } from 'utils/currencyId'\nimport Pane from 'components/Pane'\nimport ConnectWalletButton from 'components/ConnectWalletButton'\nimport useI18n from 'hooks/useI18n'\nimport AppBody from '../AppBody'\nimport { Dots, Wrapper } from '../Pool/styleds'\nimport { ConfirmAddModalBottom } from './ConfirmAddModalBottom'\nimport { PoolPriceBar } from './PoolPriceBar'\nimport { ROUTER_ADDRESS } from '../../constants'\n\nexport default function AddLiquidity({\n match: {\n params: { currencyIdA, currencyIdB },\n },\n history,\n}: RouteComponentProps<{ currencyIdA?: string; currencyIdB?: string }>) {\n const { account, chainId, library } = useActiveWeb3React()\n const currencyA = useCurrency(currencyIdA)\n const currencyB = useCurrency(currencyIdB)\n const TranslateString = useI18n()\n\n const oneCurrencyIsWBNB = Boolean(\n chainId &&\n ((currencyA && currencyEquals(currencyA, WETH[chainId])) ||\n (currencyB && currencyEquals(currencyB, WETH[chainId])))\n )\n const expertMode = useIsExpertMode()\n\n // mint state\n const { independentField, typedValue, otherTypedValue } = useMintState()\n const {\n dependentField,\n currencies,\n pair,\n pairState,\n currencyBalances,\n parsedAmounts,\n price,\n noLiquidity,\n liquidityMinted,\n poolTokenPercentage,\n error,\n } = useDerivedMintInfo(currencyA ?? undefined, currencyB ?? undefined)\n const { onFieldAInput, onFieldBInput } = useMintActionHandlers(noLiquidity)\n\n const isValid = !error\n\n // modal and loading\n const [showConfirm, setShowConfirm] = useState(false)\n const [attemptingTxn, setAttemptingTxn] = useState(false) // clicked confirm\n\n // txn values\n const [deadline] = useUserDeadline() // custom from users settings\n const [allowedSlippage] = useUserSlippageTolerance() // custom from users\n const [txHash, setTxHash] = useState('')\n\n // get formatted amounts\n const formattedAmounts = {\n [independentField]: typedValue,\n [dependentField]: noLiquidity ? otherTypedValue : parsedAmounts[dependentField]?.toSignificant(6) ?? '',\n }\n\n // get the max amounts user can add\n const maxAmounts: { [field in Field]?: TokenAmount } = [Field.CURRENCY_A, Field.CURRENCY_B].reduce(\n (accumulator, field) => {\n return {\n ...accumulator,\n [field]: maxAmountSpend(currencyBalances[field]),\n }\n },\n {}\n )\n\n const atMaxAmounts: { [field in Field]?: TokenAmount } = [Field.CURRENCY_A, Field.CURRENCY_B].reduce(\n (accumulator, field) => {\n return {\n ...accumulator,\n [field]: maxAmounts[field]?.equalTo(parsedAmounts[field] ?? '0'),\n }\n },\n {}\n )\n\n // check whether the user has approved the router on the tokens\n const [approvalA, approveACallback] = useApproveCallback(parsedAmounts[Field.CURRENCY_A], ROUTER_ADDRESS)\n const [approvalB, approveBCallback] = useApproveCallback(parsedAmounts[Field.CURRENCY_B], ROUTER_ADDRESS)\n\n const addTransaction = useTransactionAdder()\n\n async function onAdd() {\n if (!chainId || !library || !account) return\n const router = getRouterContract(chainId, library, account)\n\n const { [Field.CURRENCY_A]: parsedAmountA, [Field.CURRENCY_B]: parsedAmountB } = parsedAmounts\n if (!parsedAmountA || !parsedAmountB || !currencyA || !currencyB) {\n return\n }\n\n const amountsMin = {\n [Field.CURRENCY_A]: calculateSlippageAmount(parsedAmountA, noLiquidity ? 0 : allowedSlippage)[0],\n [Field.CURRENCY_B]: calculateSlippageAmount(parsedAmountB, noLiquidity ? 0 : allowedSlippage)[0],\n }\n\n const deadlineFromNow = Math.ceil(Date.now() / 1000) + deadline\n\n let estimate\n let method: (...args: any) => Promise\n let args: Array\n let value: BigNumber | null\n if (currencyA === ETHER || currencyB === ETHER) {\n const tokenBIsBNB = currencyB === ETHER\n estimate = router.estimateGas.addLiquidityETH\n method = router.addLiquidityETH\n args = [\n wrappedCurrency(tokenBIsBNB ? currencyA : currencyB, chainId)?.address ?? '', // token\n (tokenBIsBNB ? parsedAmountA : parsedAmountB).raw.toString(), // token desired\n amountsMin[tokenBIsBNB ? Field.CURRENCY_A : Field.CURRENCY_B].toString(), // token min\n amountsMin[tokenBIsBNB ? Field.CURRENCY_B : Field.CURRENCY_A].toString(), // eth min\n account,\n deadlineFromNow,\n ]\n value = BigNumber.from((tokenBIsBNB ? parsedAmountB : parsedAmountA).raw.toString())\n } else {\n estimate = router.estimateGas.addLiquidity\n method = router.addLiquidity\n args = [\n wrappedCurrency(currencyA, chainId)?.address ?? '',\n wrappedCurrency(currencyB, chainId)?.address ?? '',\n parsedAmountA.raw.toString(),\n parsedAmountB.raw.toString(),\n amountsMin[Field.CURRENCY_A].toString(),\n amountsMin[Field.CURRENCY_B].toString(),\n account,\n deadlineFromNow,\n ]\n value = null\n }\n\n setAttemptingTxn(true)\n // const aa = await estimate(...args, value ? { value } : {})\n await estimate(...args, value ? { value } : {})\n .then((estimatedGasLimit) =>\n method(...args, {\n ...(value ? { value } : {}),\n gasLimit: calculateGasMargin(estimatedGasLimit),\n }).then((response) => {\n setAttemptingTxn(false)\n\n addTransaction(response, {\n summary: `Add ${parsedAmounts[Field.CURRENCY_A]?.toSignificant(3)} ${\n currencies[Field.CURRENCY_A]?.symbol\n } and ${parsedAmounts[Field.CURRENCY_B]?.toSignificant(3)} ${currencies[Field.CURRENCY_B]?.symbol}`,\n })\n\n setTxHash(response.hash)\n })\n )\n .catch((e) => {\n setAttemptingTxn(false)\n // we only care if the error is something _other_ than the user rejected the tx\n if (e?.code !== 4001) {\n console.error(e)\n }\n })\n }\n\n const modalHeader = () => {\n return noLiquidity ? (\n \n \n \n \n {`${currencies[Field.CURRENCY_A]?.symbol}/${currencies[Field.CURRENCY_B]?.symbol}`}\n \n \n \n \n \n ) : (\n \n \n \n {liquidityMinted?.toSignificant(6)}\n \n \n \n \n \n {`${currencies[Field.CURRENCY_A]?.symbol}/${currencies[Field.CURRENCY_B]?.symbol} Pool Tokens`}\n \n \n \n {`Output is estimated. If the price changes by more than ${\n allowedSlippage / 100\n }% your transaction will revert.`}\n \n \n )\n }\n\n const modalBottom = () => {\n return (\n \n )\n }\n\n const pendingText = `Supplying ${parsedAmounts[Field.CURRENCY_A]?.toSignificant(6)} ${\n currencies[Field.CURRENCY_A]?.symbol\n } and ${parsedAmounts[Field.CURRENCY_B]?.toSignificant(6)} ${currencies[Field.CURRENCY_B]?.symbol}`\n\n const handleCurrencyASelect = useCallback(\n (currA: Currency) => {\n const newCurrencyIdA = currencyId(currA)\n if (newCurrencyIdA === currencyIdB) {\n history.push(`/add/${currencyIdB}/${currencyIdA}`)\n } else {\n history.push(`/add/${newCurrencyIdA}/${currencyIdB}`)\n }\n },\n [currencyIdB, history, currencyIdA]\n )\n const handleCurrencyBSelect = useCallback(\n (currB: Currency) => {\n const newCurrencyIdB = currencyId(currB)\n if (currencyIdA === newCurrencyIdB) {\n if (currencyIdB) {\n history.push(`/add/${currencyIdB}/${newCurrencyIdB}`)\n } else {\n history.push(`/add/${newCurrencyIdB}`)\n }\n } else {\n history.push(`/add/${currencyIdA || 'BNB'}/${newCurrencyIdB}`)\n }\n },\n [currencyIdA, history, currencyIdB]\n )\n\n const handleDismissConfirmation = useCallback(() => {\n setShowConfirm(false)\n // if there was a tx hash, we want to clear the input\n if (txHash) {\n onFieldAInput('')\n }\n setTxHash('')\n }, [onFieldAInput, txHash])\n\n return (\n <>\n \n \n \n \n (\n \n )}\n pendingText={pendingText}\n />\n \n \n {noLiquidity && (\n \n \n \n {TranslateString(1158, 'You are the first liquidity provider.')}\n \n {TranslateString(1160, 'The ratio of tokens you add will set the price of this pool.')}\n \n \n {TranslateString(1162, 'Once you are happy with the rate click supply to review.')}\n \n \n \n \n )}\n {\n onFieldAInput(maxAmounts[Field.CURRENCY_A]?.toExact() ?? '')\n }}\n onCurrencySelect={handleCurrencyASelect}\n showMaxButton={!atMaxAmounts[Field.CURRENCY_A]}\n currency={currencies[Field.CURRENCY_A]}\n id=\"add-liquidity-input-tokena\"\n showCommonBases={false}\n />\n \n \n \n {\n onFieldBInput(maxAmounts[Field.CURRENCY_B]?.toExact() ?? '')\n }}\n showMaxButton={!atMaxAmounts[Field.CURRENCY_B]}\n currency={currencies[Field.CURRENCY_B]}\n id=\"add-liquidity-input-tokenb\"\n showCommonBases={false}\n />\n {currencies[Field.CURRENCY_A] && currencies[Field.CURRENCY_B] && pairState !== PairState.INVALID && (\n
\n \n {noLiquidity\n ? TranslateString(1164, 'Initial prices and pool share')\n : TranslateString(1166, 'Prices and pool share')}\n \n \n \n \n
\n )}\n\n {!account ? (\n \n ) : (\n \n {(approvalA === ApprovalState.NOT_APPROVED ||\n approvalA === ApprovalState.PENDING ||\n approvalB === ApprovalState.NOT_APPROVED ||\n approvalB === ApprovalState.PENDING) &&\n isValid && (\n \n {approvalA !== ApprovalState.APPROVED && (\n \n {approvalA === ApprovalState.PENDING ? (\n Approving {currencies[Field.CURRENCY_A]?.symbol}\n ) : (\n `Approve ${currencies[Field.CURRENCY_A]?.symbol}`\n )}\n \n )}\n {approvalB !== ApprovalState.APPROVED && (\n \n {approvalB === ApprovalState.PENDING ? (\n Approving {currencies[Field.CURRENCY_B]?.symbol}\n ) : (\n `Approve ${currencies[Field.CURRENCY_B]?.symbol}`\n )}\n \n )}\n \n )}\n {\n if (expertMode) {\n onAdd()\n } else {\n setShowConfirm(true)\n }\n }}\n disabled={!isValid || approvalA !== ApprovalState.APPROVED || approvalB !== ApprovalState.APPROVED}\n variant={\n !isValid && !!parsedAmounts[Field.CURRENCY_A] && !!parsedAmounts[Field.CURRENCY_B]\n ? 'danger'\n : 'primary'\n }\n width=\"100%\"\n >\n {error ?? 'Supply'}\n \n \n )}\n
\n
\n
\n
\n {pair && !noLiquidity && pairState !== PairState.INVALID ? (\n \n \n \n ) : null}\n \n )\n}\n","import React from 'react'\nimport { Redirect, RouteComponentProps } from 'react-router-dom'\nimport AddLiquidity from './index'\n\nconst OLD_PATH_STRUCTURE = /^(0x[a-fA-F0-9]{40})-(0x[a-fA-F0-9]{40})$/\nexport function RedirectOldAddLiquidityPathStructure(props: RouteComponentProps<{ currencyIdA: string }>) {\n const {\n match: {\n params: { currencyIdA },\n },\n } = props\n const match = currencyIdA.match(OLD_PATH_STRUCTURE)\n if (match?.length) {\n return \n }\n\n return \n}\n\nexport function RedirectDuplicateTokenIds(props: RouteComponentProps<{ currencyIdA: string; currencyIdB: string }>) {\n const {\n match: {\n params: { currencyIdA, currencyIdB },\n },\n } = props\n if (currencyIdA.toLowerCase() === currencyIdB.toLowerCase()) {\n return \n }\n return \n}\n","import React from 'react'\nimport { RouteComponentProps, Redirect } from 'react-router-dom'\n\nconst OLD_PATH_STRUCTURE = /^(0x[a-fA-F0-9]{40})-(0x[a-fA-F0-9]{40})$/\n\nexport function RedirectOldRemoveLiquidityPathStructure({\n match: {\n params: { tokens },\n },\n}: RouteComponentProps<{ tokens: string }>) {\n if (!OLD_PATH_STRUCTURE.test(tokens)) {\n return \n }\n const [currency0, currency1] = tokens.split('-')\n\n return \n}\n\nexport default RedirectOldRemoveLiquidityPathStructure\n","import React, { useEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport { Button, Flex, Input, Text } from '@mozartfinance/uikit'\nimport { useUserSlippageTolerance } from 'state/user/hooks'\nimport QuestionHelper from '../QuestionHelper'\n\nconst MAX_SLIPPAGE = 5000\nconst RISKY_SLIPPAGE_LOW = 50\nconst RISKY_SLIPPAGE_HIGH = 500\n\nconst StyledSlippageToleranceSettings = styled.div`\n margin-bottom: 16px;\n`\n\nconst Option = styled.div`\n padding: 0 4px;\n`\n\nconst Options = styled.div`\n align-items: center;\n display: flex;\n flex-direction: column;\n\n ${Option}:first-child {\n padding-left: 0;\n }\n\n ${Option}:last-child {\n padding-right: 0;\n }\n\n ${({ theme }) => theme.mediaQueries.sm} {\n flex-direction: row;\n }\n`\n\nconst Label = styled.div`\n align-items: center;\n display: flex;\n margin-bottom: 8px;\n`\n\nconst predefinedValues = [\n { label: '0.1%', value: 0.1 },\n { label: '0.5%', value: 0.5 },\n { label: '1%', value: 1 },\n]\n\ntype SlippageToleranceSettingsModalProps = {\n translateString: (translationId: number, fallback: string) => (string)\n}\n\nconst SlippageToleranceSettings = ({ translateString }: SlippageToleranceSettingsModalProps) => {\n const TranslateString = translateString\n const [userSlippageTolerance, setUserslippageTolerance] = useUserSlippageTolerance()\n const [value, setValue] = useState(userSlippageTolerance / 100)\n const [error, setError] = useState(null)\n const handleChange = (evt: React.ChangeEvent) => {\n const { value: inputValue } = evt.target\n setValue(parseFloat(inputValue))\n }\n\n // Updates local storage if value is valid\n useEffect(() => {\n try {\n const rawValue = value * 100\n if (!Number.isNaN(rawValue) && rawValue > 0 && rawValue < MAX_SLIPPAGE) {\n setUserslippageTolerance(rawValue)\n setError(null)\n } else {\n setError(TranslateString(1144, 'Enter a valid slippage percentage'))\n }\n } catch {\n setError(TranslateString(1144, 'Enter a valid slippage percentage'))\n }\n }, [value, setError, setUserslippageTolerance, TranslateString])\n\n // Notify user if slippage is risky\n useEffect(() => {\n if (userSlippageTolerance < RISKY_SLIPPAGE_LOW) {\n setError(TranslateString(1146, 'Your transaction may fail'))\n } else if (userSlippageTolerance > RISKY_SLIPPAGE_HIGH) {\n setError(TranslateString(1148, 'Your transaction may be frontrun'))\n }\n }, [userSlippageTolerance, setError, TranslateString])\n\n return (\n \n \n \n \n {predefinedValues.map(({ label, value: predefinedValue }) => {\n const handleClick = () => setValue(predefinedValue)\n\n return (\n \n )\n })}\n \n \n \n \n \n \n {error && (\n \n {error}\n \n )}\n \n )\n}\n\nexport default SlippageToleranceSettings\n","import React, { useEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport { Input, Text } from '@mozartfinance/uikit'\nimport { useUserDeadline } from 'state/user/hooks'\nimport QuestionHelper from '../QuestionHelper'\n\nconst StyledTransactionDeadlineSetting = styled.div`\n margin-bottom: 16px;\n`\n\nconst Label = styled.div`\n align-items: center;\n display: flex;\n margin-bottom: 8px;\n`\n\nconst Field = styled.div`\n align-items: center;\n display: inline-flex;\n\n & > ${Input} {\n max-width: 100px;\n }\n\n & > ${Text} {\n font-size: 14px;\n margin-left: 8px;\n }\n`\n\ntype TransactionDeadlineSettingModalProps = {\n translateString: (translationId: number, fallback: string) => (string)\n}\n\nconst TransactionDeadlineSetting = ({ translateString }: TransactionDeadlineSettingModalProps) => {\n const TranslateString = translateString\n const [deadline, setDeadline] = useUserDeadline()\n const [value, setValue] = useState(deadline / 60) // deadline in minutes\n const [error, setError] = useState(null)\n\n const handleChange = (evt: React.ChangeEvent) => {\n const { value: inputValue } = evt.target\n setValue(parseInt(inputValue, 10))\n }\n\n // Updates local storage if value is valid\n useEffect(() => {\n try {\n const rawValue = value * 60\n if (!Number.isNaN(rawValue) && rawValue > 0) {\n setDeadline(rawValue)\n setError(null)\n } else {\n setError(TranslateString(1150, 'Enter a valid deadline'))\n }\n } catch {\n setError(TranslateString(1150, 'Enter a valid deadline'))\n }\n }, [value, setError, setDeadline, TranslateString])\n\n return (\n \n \n \n \n Minutes\n \n {error && (\n \n {error}\n \n )}\n \n )\n}\n\nexport default TransactionDeadlineSetting\n","import React from 'react'\nimport { Modal } from '@mozartfinance/uikit'\nimport SlippageToleranceSetting from './SlippageToleranceSetting'\nimport TransactionDeadlineSetting from './TransactionDeadlineSetting'\n\ntype SettingsModalProps = {\n onDismiss?: () => void,\n translateString: (translationId: number, fallback: string) => (string)\n}\n\n// TODO: Fix UI Kit typings\nconst defaultOnDismiss = () => null\n\nconst SettingsModal = ({ onDismiss = defaultOnDismiss, translateString }: SettingsModalProps) => {\n return (\n \n \n \n \n )\n}\n\nexport default SettingsModal\n","import React, { useMemo } from 'react'\nimport { CheckmarkCircleIcon, ErrorIcon, Flex, LinkExternal, Text, Modal, Button } from '@mozartfinance/uikit'\nimport { useActiveWeb3React } from 'hooks'\nimport { getBscScanLink } from 'utils'\nimport { isTransactionRecent, useAllTransactions } from 'state/transactions/hooks'\nimport { TransactionDetails } from 'state/transactions/reducer'\nimport Loader from 'components/Loader'\n\ntype RecentTransactionsModalProps = {\n onDismiss?: () => void\n translateString: (translationId: number, fallback: string) => (string)\n}\n\n// TODO: Fix UI Kit typings\nconst defaultOnDismiss = () => null\n\nconst newTransactionsFirst = (a: TransactionDetails, b: TransactionDetails) => b.addedTime - a.addedTime\n\nconst getRowStatus = (sortedRecentTransaction: TransactionDetails) => {\n const { hash, receipt } = sortedRecentTransaction\n\n if (!hash) {\n return { icon: , color: 'text' }\n }\n\n if (hash && receipt?.status === 1) {\n return { icon: , color: 'success' }\n }\n\n return { icon: , color: 'failure' }\n}\n\nconst RecentTransactionsModal = ({ onDismiss = defaultOnDismiss, translateString }: RecentTransactionsModalProps) => {\n const TranslateString = translateString\n const { account, chainId } = useActiveWeb3React()\n const allTransactions = useAllTransactions()\n\n // Logic taken from Web3Status/index.tsx line 175\n const sortedRecentTransactions = useMemo(() => {\n const txs = Object.values(allTransactions)\n return txs.filter(isTransactionRecent).sort(newTransactionsFirst)\n }, [allTransactions])\n\n return (\n \n {!account && (\n \n \n Please connect your wallet to view your recent transactions\n \n \n \n )}\n {account && chainId && sortedRecentTransactions.length === 0 && (\n \n \n No recent transactions\n \n \n \n )}\n {account &&\n chainId &&\n sortedRecentTransactions.map((sortedRecentTransaction) => {\n const { hash, summary } = sortedRecentTransaction\n const { icon, color } = getRowStatus(sortedRecentTransaction)\n\n return (\n <>\n \n \n {summary ?? hash}\n \n {icon}\n \n \n )\n })}\n \n )\n}\n\nexport default RecentTransactionsModal\n","import React, { ReactNode } from 'react'\nimport styled from 'styled-components'\nimport { Heading, IconButton, Text, Flex, useModal, CogIcon, Svg } from '@mozartfinance/uikit'\nimport useI18n from 'hooks/useI18n'\nimport SettingsModal from './SettingsModal'\nimport RecentTransactionsModal from './RecentTransactionsModal'\n\ninterface PageHeaderProps {\n title: ReactNode\n description?: ReactNode\n children?: ReactNode\n}\n\nconst HistoryIcon = () => (\n \n \n \n)\n\nconst StyledPageHeader = styled.div`\n border-bottom: 1px solid ${({ theme }) => theme.colors.borderColor};\n padding: 24px;\n`\n\nconst Details = styled.div`\n flex: 1;\n`\n\nconst PageHeader = ({ title, description, children }: PageHeaderProps) => {\n const TranslateString = useI18n()\n const [onPresentSettings] = useModal()\n const [onPresentRecentTransactions] = useModal()\n\n return (\n \n \n
\n {title}\n {description && (\n \n {description}\n \n )}\n
\n \n \n \n \n \n \n
\n {children && {children}}\n
\n )\n}\n\nexport default PageHeader\n","import { Currency, ETHER, JSBI, TokenAmount } from '@pancakeswap-libs/sdk'\nimport React, { useCallback, useEffect, useState } from 'react'\nimport { Button, ChevronDownIcon, AddIcon, CardBody, Text } from '@mozartfinance/uikit'\nimport CardNav from 'components/CardNav'\nimport { LightCard } from 'components/Card'\nimport { AutoColumn, ColumnCenter } from 'components/Column'\nimport CurrencyLogo from 'components/CurrencyLogo'\nimport { FindPoolTabs } from 'components/NavigationTabs'\nimport { MinimalPositionCard } from 'components/PositionCard'\nimport CurrencySearchModal from 'components/SearchModal/CurrencySearchModal'\nimport { PairState, usePair } from 'data/Reserves'\nimport { useActiveWeb3React } from 'hooks'\nimport { usePairAdder } from 'state/user/hooks'\nimport { useTokenBalance } from 'state/wallet/hooks'\nimport { StyledInternalLink } from 'components/Shared'\nimport { currencyId } from 'utils/currencyId'\nimport useI18n from 'hooks/useI18n'\nimport AppBody from '../AppBody'\nimport { Dots } from '../Pool/styleds'\n\nenum Fields {\n TOKEN0 = 0,\n TOKEN1 = 1,\n}\n\nexport default function PoolFinder() {\n const { account } = useActiveWeb3React()\n\n const [showSearch, setShowSearch] = useState(false)\n const [activeField, setActiveField] = useState(Fields.TOKEN1)\n\n const [currency0, setCurrency0] = useState(ETHER)\n const [currency1, setCurrency1] = useState(null)\n\n const [pairState, pair] = usePair(currency0 ?? undefined, currency1 ?? undefined)\n const addPair = usePairAdder()\n\n const TranslateString = useI18n()\n useEffect(() => {\n if (pair) {\n addPair(pair)\n }\n }, [pair, addPair])\n\n const validPairNoLiquidity: boolean =\n pairState === PairState.NOT_EXISTS ||\n Boolean(\n pairState === PairState.EXISTS &&\n pair &&\n JSBI.equal(pair.reserve0.raw, JSBI.BigInt(0)) &&\n JSBI.equal(pair.reserve1.raw, JSBI.BigInt(0))\n )\n\n const position: TokenAmount | undefined = useTokenBalance(account ?? undefined, pair?.liquidityToken)\n const hasPosition = Boolean(position && JSBI.greaterThan(position.raw, JSBI.BigInt(0)))\n\n const handleCurrencySelect = useCallback(\n (currency: Currency) => {\n if (activeField === Fields.TOKEN0) {\n setCurrency0(currency)\n } else {\n setCurrency1(currency)\n }\n },\n [activeField]\n )\n\n const handleSearchDismiss = useCallback(() => {\n setShowSearch(false)\n }, [setShowSearch])\n\n const prerequisiteMessage = (\n \n \n {!account\n ? TranslateString(1174, 'Connect to a wallet to find pools')\n : TranslateString(208, 'Select a token to find your liquidity.')}\n \n \n )\n\n return (\n <>\n \n \n \n \n \n {\n setShowSearch(true)\n setActiveField(Fields.TOKEN0)\n }}\n startIcon={currency0 ? : null}\n endIcon={}\n width=\"100%\"\n >\n {currency0 ? currency0.symbol : TranslateString(82, 'Select a Token')}\n \n\n \n \n \n\n {\n setShowSearch(true)\n setActiveField(Fields.TOKEN1)\n }}\n startIcon={currency1 ? : null}\n endIcon={}\n width=\"100%\"\n >\n {currency1 ? currency1.symbol : TranslateString(82, 'Select a Token')}\n \n\n {hasPosition && (\n \n {TranslateString(210, 'Pool found!')}\n \n )}\n\n {currency0 && currency1 ? (\n pairState === PairState.EXISTS ? (\n hasPosition && pair ? (\n \n ) : (\n \n \n \n {TranslateString(212, 'You don’t have liquidity in this pool yet.')}\n \n \n {TranslateString(168, 'Add Liquidity')}\n \n \n \n )\n ) : validPairNoLiquidity ? (\n \n \n {TranslateString(214, 'No pool found.')}\n \n Create pool.\n \n \n \n ) : pairState === PairState.INVALID ? (\n \n \n {TranslateString(136, 'Invalid pair.')}\n \n \n ) : pairState === PairState.LOADING ? (\n \n \n \n Loading\n \n \n \n \n ) : null\n ) : (\n prerequisiteMessage\n )}\n \n\n \n \n \n \n )\n}\n","import React, { useContext, useMemo } from 'react'\nimport { ThemeContext } from 'styled-components'\nimport { Pair } from '@pancakeswap-libs/sdk'\nimport { Button, CardBody, Text } from '@mozartfinance/uikit'\nimport { Link } from 'react-router-dom'\nimport CardNav from 'components/CardNav'\nimport Question from 'components/QuestionHelper'\nimport FullPositionCard from 'components/PositionCard'\nimport { useTokenBalancesWithLoadingIndicator } from 'state/wallet/hooks'\nimport { StyledInternalLink } from 'components/Shared'\nimport { LightCard } from 'components/Card'\nimport { RowBetween } from 'components/Row'\nimport { AutoColumn } from 'components/Column'\n\nimport { useActiveWeb3React } from 'hooks'\nimport { usePairs } from 'data/Reserves'\nimport { toV2LiquidityToken, useTrackedTokenPairs } from 'state/user/hooks'\nimport { Dots } from 'components/swap/styleds'\nimport useI18n from 'hooks/useI18n'\nimport PageHeader from 'components/PageHeader'\nimport AppBody from '../AppBody'\n\nexport default function Pool() {\n const theme = useContext(ThemeContext)\n const { account } = useActiveWeb3React()\n const TranslateString = useI18n()\n\n // fetch the user's balances of all tracked V2 LP tokens\n const trackedTokenPairs = useTrackedTokenPairs()\n const tokenPairsWithLiquidityTokens = useMemo(\n () => trackedTokenPairs.map((tokens) => ({ liquidityToken: toV2LiquidityToken(tokens), tokens })),\n [trackedTokenPairs]\n )\n const liquidityTokens = useMemo(() => tokenPairsWithLiquidityTokens.map((tpwlt) => tpwlt.liquidityToken), [\n tokenPairsWithLiquidityTokens,\n ])\n const [v2PairsBalances, fetchingV2PairBalances] = useTokenBalancesWithLoadingIndicator(\n account ?? undefined,\n liquidityTokens\n )\n\n // fetch the reserves for all V2 pools in which the user has a balance\n const liquidityTokensWithBalances = useMemo(\n () =>\n tokenPairsWithLiquidityTokens.filter(({ liquidityToken }) =>\n v2PairsBalances[liquidityToken.address]?.greaterThan('0')\n ),\n [tokenPairsWithLiquidityTokens, v2PairsBalances]\n )\n\n const v2Pairs = usePairs(liquidityTokensWithBalances.map(({ tokens }) => tokens))\n const v2IsLoading =\n fetchingV2PairBalances || v2Pairs?.length < liquidityTokensWithBalances.length || v2Pairs?.some((V2Pair) => !V2Pair)\n\n const allV2PairsWithLiquidity = v2Pairs.map(([, pair]) => pair).filter((v2Pair): v2Pair is Pair => Boolean(v2Pair))\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n {TranslateString(107, 'Your Liquidity')}\n \n \n\n {!account ? (\n \n \n {TranslateString(156, 'Connect to a wallet to view your liquidity.')}\n \n \n ) : v2IsLoading ? (\n \n \n Loading\n \n \n ) : allV2PairsWithLiquidity?.length > 0 ? (\n <>\n {allV2PairsWithLiquidity.map((v2Pair) => (\n \n ))}\n \n ) : (\n \n \n {TranslateString(104, 'No liquidity found.')}\n \n \n )}\n\n
\n \n {TranslateString(106, \"Don't see a pool you joined?\")}{' '}\n \n {TranslateString(108, 'Import it.')}\n \n \n \n {TranslateString(1172, 'Or, if you staked your LP tokens in a farm, unstake them to see them here.')}\n \n
\n
\n
\n
\n
\n \n )\n}\n","import React, { useCallback } from 'react'\nimport styled from 'styled-components'\n\nconst StyledRangeInput = styled.input<{ size: number }>`\n -webkit-appearance: none; /* Hides the slider so that custom slider can be made */\n width: 100%; /* Specific width is required for Firefox. */\n background: transparent; /* Otherwise white in Chrome */\n cursor: pointer;\n\n &:focus {\n outline: none;\n }\n\n &::-moz-focus-outer {\n border: 0;\n }\n\n &::-webkit-slider-thumb {\n -webkit-appearance: none;\n height: ${({ size }) => size}px;\n width: ${({ size }) => size}px;\n background-color: #565a69;\n border-radius: 100%;\n border: none;\n transform: translateY(-50%);\n color: ${({ theme }) => theme.colors.invertedContrast};\n\n &:hover,\n &:focus {\n box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.1), 0px 4px 8px rgba(0, 0, 0, 0.08), 0px 16px 24px rgba(0, 0, 0, 0.06),\n 0px 24px 32px rgba(0, 0, 0, 0.04);\n }\n }\n\n &::-moz-range-thumb {\n height: ${({ size }) => size}px;\n width: ${({ size }) => size}px;\n background-color: #565a69;\n border-radius: 100%;\n border: none;\n color: ${({ theme }) => theme.colors.invertedContrast};\n\n &:hover,\n &:focus {\n box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.1), 0px 4px 8px rgba(0, 0, 0, 0.08), 0px 16px 24px rgba(0, 0, 0, 0.06),\n 0px 24px 32px rgba(0, 0, 0, 0.04);\n }\n }\n\n &::-ms-thumb {\n height: ${({ size }) => size}px;\n width: ${({ size }) => size}px;\n background-color: #565a69;\n border-radius: 100%;\n color: ${({ theme }) => theme.colors.invertedContrast};\n\n &:hover,\n &:focus {\n box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.1), 0px 4px 8px rgba(0, 0, 0, 0.08), 0px 16px 24px rgba(0, 0, 0, 0.06),\n 0px 24px 32px rgba(0, 0, 0, 0.04);\n }\n }\n\n &::-webkit-slider-runnable-track {\n background: linear-gradient(\n 90deg,\n ${({ theme }) => theme.colors.primaryDark},\n ${({ theme }) => theme.colors.tertiary}\n );\n height: 2px;\n }\n\n &::-moz-range-track {\n background: linear-gradient(\n 90deg,\n ${({ theme }) => theme.colors.primaryDark},\n ${({ theme }) => theme.colors.tertiary}\n );\n height: 2px;\n }\n\n &::-ms-track {\n width: 100%;\n border-color: transparent;\n color: transparent;\n\n background: ${({ theme }) => theme.colors.primaryDark};\n height: 2px;\n }\n &::-ms-fill-lower {\n background: ${({ theme }) => theme.colors.primaryDark};\n }\n &::-ms-fill-upper {\n background: ${({ theme }) => theme.colors.tertiary};\n }\n`\n\ninterface InputSliderProps {\n value: number\n onChange: (value: number) => void\n step?: number\n min?: number\n max?: number\n size?: number\n}\n\nexport default function Slider({ value, onChange, min = 0, step = 1, max = 100, size = 28 }: InputSliderProps) {\n const changeCallback = useCallback(\n e => {\n onChange(parseInt(e.target.value))\n },\n [onChange]\n )\n\n return (\n \n )\n}\n","import { createAction } from '@reduxjs/toolkit'\n\nexport enum Field {\n LIQUIDITY_PERCENT = 'LIQUIDITY_PERCENT',\n LIQUIDITY = 'LIQUIDITY',\n CURRENCY_A = 'CURRENCY_A',\n CURRENCY_B = 'CURRENCY_B'\n}\n\nexport const typeInput = createAction<{ field: Field; typedValue: string }>('burn/typeInputBurn')\n","import { Currency, CurrencyAmount, JSBI, Pair, Percent, TokenAmount } from '@pancakeswap-libs/sdk'\nimport { useCallback } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { usePair } from '../../data/Reserves'\nimport { useTotalSupply } from '../../data/TotalSupply'\n\nimport { useActiveWeb3React } from '../../hooks'\nimport { wrappedCurrency } from '../../utils/wrappedCurrency'\nimport { AppDispatch, AppState } from '../index'\nimport { tryParseAmount } from '../swap/hooks'\nimport { useTokenBalances } from '../wallet/hooks'\nimport { Field, typeInput } from './actions'\n\nexport function useBurnState(): AppState['burn'] {\n return useSelector(state => state.burn)\n}\n\nexport function useDerivedBurnInfo(\n currencyA: Currency | undefined,\n currencyB: Currency | undefined\n): {\n pair?: Pair | null\n parsedAmounts: {\n [Field.LIQUIDITY_PERCENT]: Percent\n [Field.LIQUIDITY]?: TokenAmount\n [Field.CURRENCY_A]?: CurrencyAmount\n [Field.CURRENCY_B]?: CurrencyAmount\n }\n error?: string\n} {\n const { account, chainId } = useActiveWeb3React()\n\n const { independentField, typedValue } = useBurnState()\n\n // pair + totalsupply\n const [, pair] = usePair(currencyA, currencyB)\n\n // balances\n const relevantTokenBalances = useTokenBalances(account ?? undefined, [pair?.liquidityToken])\n const userLiquidity: undefined | TokenAmount = relevantTokenBalances?.[pair?.liquidityToken?.address ?? '']\n\n const [tokenA, tokenB] = [wrappedCurrency(currencyA, chainId), wrappedCurrency(currencyB, chainId)]\n const tokens = {\n [Field.CURRENCY_A]: tokenA,\n [Field.CURRENCY_B]: tokenB,\n [Field.LIQUIDITY]: pair?.liquidityToken\n }\n\n // liquidity values\n const totalSupply = useTotalSupply(pair?.liquidityToken)\n const liquidityValueA =\n pair &&\n totalSupply &&\n userLiquidity &&\n tokenA &&\n // this condition is a short-circuit in the case where useTokenBalance updates sooner than useTotalSupply\n JSBI.greaterThanOrEqual(totalSupply.raw, userLiquidity.raw)\n ? new TokenAmount(tokenA, pair.getLiquidityValue(tokenA, totalSupply, userLiquidity, false).raw)\n : undefined\n const liquidityValueB =\n pair &&\n totalSupply &&\n userLiquidity &&\n tokenB &&\n // this condition is a short-circuit in the case where useTokenBalance updates sooner than useTotalSupply\n JSBI.greaterThanOrEqual(totalSupply.raw, userLiquidity.raw)\n ? new TokenAmount(tokenB, pair.getLiquidityValue(tokenB, totalSupply, userLiquidity, false).raw)\n : undefined\n const liquidityValues: { [Field.CURRENCY_A]?: TokenAmount; [Field.CURRENCY_B]?: TokenAmount } = {\n [Field.CURRENCY_A]: liquidityValueA,\n [Field.CURRENCY_B]: liquidityValueB\n }\n\n let percentToRemove: Percent = new Percent('0', '100')\n // user specified a %\n if (independentField === Field.LIQUIDITY_PERCENT) {\n percentToRemove = new Percent(typedValue, '100')\n }\n // user specified a specific amount of liquidity tokens\n else if (independentField === Field.LIQUIDITY) {\n if (pair?.liquidityToken) {\n const independentAmount = tryParseAmount(typedValue, pair.liquidityToken)\n if (independentAmount && userLiquidity && !independentAmount.greaterThan(userLiquidity)) {\n percentToRemove = new Percent(independentAmount.raw, userLiquidity.raw)\n }\n }\n }\n // user specified a specific amount of token a or b\n else if (tokens[independentField]) {\n const independentAmount = tryParseAmount(typedValue, tokens[independentField])\n const liquidityValue = liquidityValues[independentField]\n if (independentAmount && liquidityValue && !independentAmount.greaterThan(liquidityValue)) {\n percentToRemove = new Percent(independentAmount.raw, liquidityValue.raw)\n }\n }\n\n const parsedAmounts: {\n [Field.LIQUIDITY_PERCENT]: Percent\n [Field.LIQUIDITY]?: TokenAmount\n [Field.CURRENCY_A]?: TokenAmount\n [Field.CURRENCY_B]?: TokenAmount\n } = {\n [Field.LIQUIDITY_PERCENT]: percentToRemove,\n [Field.LIQUIDITY]:\n userLiquidity && percentToRemove && percentToRemove.greaterThan('0')\n ? new TokenAmount(userLiquidity.token, percentToRemove.multiply(userLiquidity.raw).quotient)\n : undefined,\n [Field.CURRENCY_A]:\n tokenA && percentToRemove && percentToRemove.greaterThan('0') && liquidityValueA\n ? new TokenAmount(tokenA, percentToRemove.multiply(liquidityValueA.raw).quotient)\n : undefined,\n [Field.CURRENCY_B]:\n tokenB && percentToRemove && percentToRemove.greaterThan('0') && liquidityValueB\n ? new TokenAmount(tokenB, percentToRemove.multiply(liquidityValueB.raw).quotient)\n : undefined\n }\n\n let error: string | undefined\n if (!account) {\n error = 'Connect Wallet'\n }\n\n if (!parsedAmounts[Field.LIQUIDITY] || !parsedAmounts[Field.CURRENCY_A] || !parsedAmounts[Field.CURRENCY_B]) {\n error = error ?? 'Enter an amount'\n }\n\n return { pair, parsedAmounts, error }\n}\n\nexport function useBurnActionHandlers(): {\n onUserInput: (field: Field, typedValue: string) => void\n} {\n const dispatch = useDispatch()\n\n const onUserInput = useCallback(\n (field: Field, typedValue: string) => {\n dispatch(typeInput({ field, typedValue }))\n },\n [dispatch]\n )\n\n return {\n onUserInput\n }\n}\n","import React, { useCallback, useContext, useMemo, useState } from 'react'\nimport styled, { ThemeContext } from 'styled-components'\nimport { splitSignature } from '@ethersproject/bytes'\nimport { Contract } from '@ethersproject/contracts'\nimport { TransactionResponse } from '@ethersproject/providers'\nimport { Currency, currencyEquals, ETHER, Percent, WETH } from '@pancakeswap-libs/sdk'\nimport { Button, Flex, Text } from '@mozartfinance/uikit'\nimport { ArrowDown, Plus } from 'react-feather'\nimport { RouteComponentProps } from 'react-router'\n\nimport { BigNumber } from '@ethersproject/bignumber'\nimport ConnectWalletButton from 'components/ConnectWalletButton'\nimport useI18n from 'hooks/useI18n'\nimport { AutoColumn, ColumnCenter } from '../../components/Column'\nimport TransactionConfirmationModal, { ConfirmationModalContent } from '../../components/TransactionConfirmationModal'\nimport CurrencyInputPanel from '../../components/CurrencyInputPanel'\nimport DoubleCurrencyLogo from '../../components/DoubleLogo'\nimport { AddRemoveTabs } from '../../components/NavigationTabs'\nimport { MinimalPositionCard } from '../../components/PositionCard'\nimport { RowBetween, RowFixed } from '../../components/Row'\n\nimport Slider from '../../components/Slider'\nimport CurrencyLogo from '../../components/CurrencyLogo'\nimport { ROUTER_ADDRESS } from '../../constants'\nimport { useActiveWeb3React } from '../../hooks'\nimport { useCurrency } from '../../hooks/Tokens'\nimport { usePairContract } from '../../hooks/useContract'\n\nimport { useTransactionAdder } from '../../state/transactions/hooks'\nimport { StyledInternalLink } from '../../components/Shared'\nimport { calculateGasMargin, calculateSlippageAmount, getRouterContract } from '../../utils'\nimport { currencyId } from '../../utils/currencyId'\nimport useDebouncedChangeHandler from '../../utils/useDebouncedChangeHandler'\nimport { wrappedCurrency } from '../../utils/wrappedCurrency'\nimport AppBody from '../AppBody'\nimport { ClickableText, Wrapper } from '../Pool/styleds'\nimport { useApproveCallback, ApprovalState } from '../../hooks/useApproveCallback'\nimport { Dots } from '../../components/swap/styleds'\nimport { useBurnActionHandlers, useDerivedBurnInfo, useBurnState } from '../../state/burn/hooks'\n\nimport { Field } from '../../state/burn/actions'\nimport { useUserDeadline, useUserSlippageTolerance } from '../../state/user/hooks'\n\nconst OutlineCard = styled.div`\n border: 1px solid ${({ theme }) => theme.colors.borderColor};\n border-radius: 16px;\n padding: 24px;\n`\n\nconst Body = styled.div`\n padding-left: 24px;\n padding-right: 24px;\n`\n\nexport default function RemoveLiquidity({\n history,\n match: {\n params: { currencyIdA, currencyIdB },\n },\n}: RouteComponentProps<{ currencyIdA: string; currencyIdB: string }>) {\n const [currencyA, currencyB] = [useCurrency(currencyIdA) ?? undefined, useCurrency(currencyIdB) ?? undefined]\n const { account, chainId, library } = useActiveWeb3React()\n const TranslateString = useI18n()\n const [tokenA, tokenB] = useMemo(() => [wrappedCurrency(currencyA, chainId), wrappedCurrency(currencyB, chainId)], [\n currencyA,\n currencyB,\n chainId,\n ])\n\n const theme = useContext(ThemeContext)\n\n // burn state\n const { independentField, typedValue } = useBurnState()\n const { pair, parsedAmounts, error } = useDerivedBurnInfo(currencyA ?? undefined, currencyB ?? undefined)\n const { onUserInput: _onUserInput } = useBurnActionHandlers()\n const isValid = !error\n\n // modal and loading\n const [showConfirm, setShowConfirm] = useState(false)\n const [showDetailed, setShowDetailed] = useState(false)\n const [attemptingTxn, setAttemptingTxn] = useState(false) // clicked confirm\n\n // txn values\n const [txHash, setTxHash] = useState('')\n const [deadline] = useUserDeadline()\n const [allowedSlippage] = useUserSlippageTolerance()\n\n const formattedAmounts = {\n [Field.LIQUIDITY_PERCENT]: parsedAmounts[Field.LIQUIDITY_PERCENT].equalTo('0')\n ? '0'\n : parsedAmounts[Field.LIQUIDITY_PERCENT].lessThan(new Percent('1', '100'))\n ? '<1'\n : parsedAmounts[Field.LIQUIDITY_PERCENT].toFixed(0),\n [Field.LIQUIDITY]:\n independentField === Field.LIQUIDITY ? typedValue : parsedAmounts[Field.LIQUIDITY]?.toSignificant(6) ?? '',\n [Field.CURRENCY_A]:\n independentField === Field.CURRENCY_A ? typedValue : parsedAmounts[Field.CURRENCY_A]?.toSignificant(6) ?? '',\n [Field.CURRENCY_B]:\n independentField === Field.CURRENCY_B ? typedValue : parsedAmounts[Field.CURRENCY_B]?.toSignificant(6) ?? '',\n }\n\n const atMaxAmount = parsedAmounts[Field.LIQUIDITY_PERCENT]?.equalTo(new Percent('1'))\n\n // pair contract\n const pairContract: Contract | null = usePairContract(pair?.liquidityToken?.address)\n\n // allowance handling\n const [signatureData, setSignatureData] = useState<{ v: number; r: string; s: string; deadline: number } | null>(null)\n const [approval, approveCallback] = useApproveCallback(parsedAmounts[Field.LIQUIDITY], ROUTER_ADDRESS)\n async function onAttemptToApprove() {\n if (!pairContract || !pair || !library) throw new Error('missing dependencies')\n const liquidityAmount = parsedAmounts[Field.LIQUIDITY]\n if (!liquidityAmount) throw new Error('missing liquidity amount')\n // try to gather a signature for permission\n const nonce = await pairContract.nonces(account)\n\n const deadlineForSignature: number = Math.ceil(Date.now() / 1000) + deadline\n\n const EIP712Domain = [\n { name: 'name', type: 'string' },\n { name: 'version', type: 'string' },\n { name: 'chainId', type: 'uint256' },\n { name: 'verifyingContract', type: 'address' },\n ]\n const domain = {\n name: 'Pancake LPs',\n version: '1',\n chainId,\n verifyingContract: pair.liquidityToken.address,\n }\n const Permit = [\n { name: 'owner', type: 'address' },\n { name: 'spender', type: 'address' },\n { name: 'value', type: 'uint256' },\n { name: 'nonce', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n ]\n const message = {\n owner: account,\n spender: ROUTER_ADDRESS,\n value: liquidityAmount.raw.toString(),\n nonce: nonce.toHexString(),\n deadline: deadlineForSignature,\n }\n const data = JSON.stringify({\n types: {\n EIP712Domain,\n Permit,\n },\n domain,\n primaryType: 'Permit',\n message,\n })\n\n library\n .send('eth_signTypedData_v4', [account, data])\n .then(splitSignature)\n .then((signature) => {\n setSignatureData({\n v: signature.v,\n r: signature.r,\n s: signature.s,\n deadline: deadlineForSignature,\n })\n })\n .catch((e) => {\n // for all errors other than 4001 (EIP-1193 user rejected request), fall back to manual approve\n if (e?.code !== 4001) {\n approveCallback()\n }\n })\n }\n\n // wrapped onUserInput to clear signatures\n const onUserInput = useCallback(\n (field: Field, val: string) => {\n setSignatureData(null)\n return _onUserInput(field, val)\n },\n [_onUserInput]\n )\n\n const onLiquidityInput = useCallback((val: string): void => onUserInput(Field.LIQUIDITY, val), [onUserInput])\n const onCurrencyAInput = useCallback((val: string): void => onUserInput(Field.CURRENCY_A, val), [onUserInput])\n const onCurrencyBInput = useCallback((val: string): void => onUserInput(Field.CURRENCY_B, val), [onUserInput])\n\n // tx sending\n const addTransaction = useTransactionAdder()\n async function onRemove() {\n if (!chainId || !library || !account) throw new Error('missing dependencies')\n const { [Field.CURRENCY_A]: currencyAmountA, [Field.CURRENCY_B]: currencyAmountB } = parsedAmounts\n if (!currencyAmountA || !currencyAmountB) {\n throw new Error('missing currency amounts')\n }\n const router = getRouterContract(chainId, library, account)\n\n const amountsMin = {\n [Field.CURRENCY_A]: calculateSlippageAmount(currencyAmountA, allowedSlippage)[0],\n [Field.CURRENCY_B]: calculateSlippageAmount(currencyAmountB, allowedSlippage)[0],\n }\n\n if (!currencyA || !currencyB) throw new Error('missing tokens')\n const liquidityAmount = parsedAmounts[Field.LIQUIDITY]\n if (!liquidityAmount) throw new Error('missing liquidity amount')\n\n const currencyBIsETH = currencyB === ETHER\n const oneCurrencyIsETH = currencyA === ETHER || currencyBIsETH\n const deadlineFromNow = Math.ceil(Date.now() / 1000) + deadline\n\n if (!tokenA || !tokenB) throw new Error('could not wrap')\n\n let methodNames: string[]\n let args: Array\n // we have approval, use normal remove liquidity\n if (approval === ApprovalState.APPROVED) {\n // removeLiquidityETH\n if (oneCurrencyIsETH) {\n methodNames = ['removeLiquidityETH', 'removeLiquidityETHSupportingFeeOnTransferTokens']\n args = [\n currencyBIsETH ? tokenA.address : tokenB.address,\n liquidityAmount.raw.toString(),\n amountsMin[currencyBIsETH ? Field.CURRENCY_A : Field.CURRENCY_B].toString(),\n amountsMin[currencyBIsETH ? Field.CURRENCY_B : Field.CURRENCY_A].toString(),\n account,\n deadlineFromNow,\n ]\n }\n // removeLiquidity\n else {\n methodNames = ['removeLiquidity']\n args = [\n tokenA.address,\n tokenB.address,\n liquidityAmount.raw.toString(),\n amountsMin[Field.CURRENCY_A].toString(),\n amountsMin[Field.CURRENCY_B].toString(),\n account,\n deadlineFromNow,\n ]\n }\n }\n // we have a signataure, use permit versions of remove liquidity\n else if (signatureData !== null) {\n // removeLiquidityETHWithPermit\n if (oneCurrencyIsETH) {\n methodNames = ['removeLiquidityETHWithPermit', 'removeLiquidityETHWithPermitSupportingFeeOnTransferTokens']\n args = [\n currencyBIsETH ? tokenA.address : tokenB.address,\n liquidityAmount.raw.toString(),\n amountsMin[currencyBIsETH ? Field.CURRENCY_A : Field.CURRENCY_B].toString(),\n amountsMin[currencyBIsETH ? Field.CURRENCY_B : Field.CURRENCY_A].toString(),\n account,\n signatureData.deadline,\n false,\n signatureData.v,\n signatureData.r,\n signatureData.s,\n ]\n }\n // removeLiquidityETHWithPermit\n else {\n methodNames = ['removeLiquidityWithPermit']\n args = [\n tokenA.address,\n tokenB.address,\n liquidityAmount.raw.toString(),\n amountsMin[Field.CURRENCY_A].toString(),\n amountsMin[Field.CURRENCY_B].toString(),\n account,\n signatureData.deadline,\n false,\n signatureData.v,\n signatureData.r,\n signatureData.s,\n ]\n }\n } else {\n throw new Error('Attempting to confirm without approval or a signature. Please contact support.')\n }\n const safeGasEstimates: (BigNumber | undefined)[] = await Promise.all(\n methodNames.map((methodName, index) =>\n router.estimateGas[methodName](...args)\n .then(calculateGasMargin)\n .catch((e) => {\n console.error(`estimateGas failed`, index, methodName, args, e)\n return undefined\n })\n )\n )\n\n const indexOfSuccessfulEstimation = safeGasEstimates.findIndex((safeGasEstimate) =>\n BigNumber.isBigNumber(safeGasEstimate)\n )\n\n // all estimations failed...\n if (indexOfSuccessfulEstimation === -1) {\n console.error('This transaction would fail. Please contact support.')\n } else {\n const methodName = methodNames[indexOfSuccessfulEstimation]\n const safeGasEstimate = safeGasEstimates[indexOfSuccessfulEstimation]\n\n setAttemptingTxn(true)\n await router[methodName](...args, {\n gasLimit: safeGasEstimate,\n })\n .then((response: TransactionResponse) => {\n setAttemptingTxn(false)\n\n addTransaction(response, {\n summary: `Remove ${parsedAmounts[Field.CURRENCY_A]?.toSignificant(3)} ${\n currencyA?.symbol\n } and ${parsedAmounts[Field.CURRENCY_B]?.toSignificant(3)} ${currencyB?.symbol}`,\n })\n\n setTxHash(response.hash)\n })\n .catch((e: Error) => {\n setAttemptingTxn(false)\n // we only care if the error is something _other_ than the user rejected the tx\n console.error(e)\n })\n }\n }\n\n function modalHeader() {\n return (\n \n \n {parsedAmounts[Field.CURRENCY_A]?.toSignificant(6)}\n \n \n \n {currencyA?.symbol}\n \n \n \n \n \n \n \n {parsedAmounts[Field.CURRENCY_B]?.toSignificant(6)}\n \n \n \n {currencyB?.symbol}\n \n \n \n\n \n {`Output is estimated. If the price changes by more than ${\n allowedSlippage / 100\n }% your transaction will revert.`}\n \n \n )\n }\n\n function modalBottom() {\n return (\n <>\n \n {`LP ${currencyA?.symbol}/${currencyB?.symbol}`} Burned\n \n \n {parsedAmounts[Field.LIQUIDITY]?.toSignificant(6)}\n \n \n {pair && (\n <>\n \n {TranslateString(1182, 'Price')}\n \n 1 {currencyA?.symbol} = {tokenA ? pair.priceOf(tokenA).toSignificant(6) : '-'} {currencyB?.symbol}\n \n \n \n
\n \n 1 {currencyB?.symbol} = {tokenB ? pair.priceOf(tokenB).toSignificant(6) : '-'} {currencyA?.symbol}\n \n \n \n )}\n \n \n )\n }\n\n const pendingText = `Removing ${parsedAmounts[Field.CURRENCY_A]?.toSignificant(6)} ${\n currencyA?.symbol\n } and ${parsedAmounts[Field.CURRENCY_B]?.toSignificant(6)} ${currencyB?.symbol}`\n\n const liquidityPercentChangeCallback = useCallback(\n (value: number) => {\n onUserInput(Field.LIQUIDITY_PERCENT, value.toString())\n },\n [onUserInput]\n )\n\n const oneCurrencyIsETH = currencyA === ETHER || currencyB === ETHER\n const oneCurrencyIsWETH = Boolean(\n chainId &&\n ((currencyA && currencyEquals(WETH[chainId], currencyA)) ||\n (currencyB && currencyEquals(WETH[chainId], currencyB)))\n )\n\n const handleSelectCurrencyA = useCallback(\n (currency: Currency) => {\n if (currencyIdB && currencyId(currency) === currencyIdB) {\n history.push(`/remove/${currencyId(currency)}/${currencyIdA}`)\n } else {\n history.push(`/remove/${currencyId(currency)}/${currencyIdB}`)\n }\n },\n [currencyIdA, currencyIdB, history]\n )\n const handleSelectCurrencyB = useCallback(\n (currency: Currency) => {\n if (currencyIdA && currencyId(currency) === currencyIdA) {\n history.push(`/remove/${currencyIdB}/${currencyId(currency)}`)\n } else {\n history.push(`/remove/${currencyIdA}/${currencyId(currency)}`)\n }\n },\n [currencyIdA, currencyIdB, history]\n )\n\n const handleDismissConfirmation = useCallback(() => {\n setShowConfirm(false)\n setSignatureData(null) // important that we clear signature data to avoid bad sigs\n // if there was a tx hash, we want to clear the input\n if (txHash) {\n onUserInput(Field.LIQUIDITY_PERCENT, '0')\n }\n setTxHash('')\n }, [onUserInput, txHash])\n\n const [innerLiquidityPercentage, setInnerLiquidityPercentage] = useDebouncedChangeHandler(\n Number.parseInt(parsedAmounts[Field.LIQUIDITY_PERCENT].toFixed(0)),\n liquidityPercentChangeCallback\n )\n\n return (\n <>\n \n \n \n (\n \n )}\n pendingText={pendingText}\n />\n \n \n \n \n \n Amount\n {\n setShowDetailed(!showDetailed)\n }}\n >\n {showDetailed ? TranslateString(1184, 'Simple') : TranslateString(1186, 'Detailed')}\n \n \n \n {formattedAmounts[Field.LIQUIDITY_PERCENT]}%\n \n {!showDetailed && (\n <>\n \n \n \n \n onUserInput(Field.LIQUIDITY_PERCENT, '25')}\n >\n 25%\n \n onUserInput(Field.LIQUIDITY_PERCENT, '50')}\n >\n 50%\n \n onUserInput(Field.LIQUIDITY_PERCENT, '75')}\n >\n 75%\n \n onUserInput(Field.LIQUIDITY_PERCENT, '100')}\n >\n {TranslateString(166, 'Max')}\n \n \n \n )}\n \n \n \n {!showDetailed && (\n <>\n \n \n \n \n \n \n \n {formattedAmounts[Field.CURRENCY_A] || '-'}\n \n \n \n {currencyA?.symbol}\n \n \n \n \n {formattedAmounts[Field.CURRENCY_B] || '-'}\n \n \n \n {currencyB?.symbol}\n \n \n \n {chainId && (oneCurrencyIsWETH || oneCurrencyIsETH) ? (\n \n {oneCurrencyIsETH ? (\n \n {TranslateString(1188, 'Receive WBNB')}\n \n ) : oneCurrencyIsWETH ? (\n \n {TranslateString(1190, 'Receive BNB')}\n \n ) : null}\n \n ) : null}\n \n \n \n \n )}\n \n {showDetailed && (\n <>\n {\n onUserInput(Field.LIQUIDITY_PERCENT, '100')\n }}\n showMaxButton={!atMaxAmount}\n disableCurrencySelect\n currency={pair?.liquidityToken}\n pair={pair}\n id=\"liquidity-amount\"\n />\n \n \n \n onUserInput(Field.LIQUIDITY_PERCENT, '100')}\n showMaxButton={!atMaxAmount}\n currency={currencyA}\n label=\"Output\"\n onCurrencySelect={handleSelectCurrencyA}\n id=\"remove-liquidity-tokena\"\n />\n \n \n \n onUserInput(Field.LIQUIDITY_PERCENT, '100')}\n showMaxButton={!atMaxAmount}\n currency={currencyB}\n label=\"Output\"\n onCurrencySelect={handleSelectCurrencyB}\n id=\"remove-liquidity-tokenb\"\n />\n \n )}\n {pair && (\n
\n \n Price:\n
\n 1 {currencyA?.symbol} = {tokenA ? pair.priceOf(tokenA).toSignificant(6) : '-'} {currencyB?.symbol}\n
\n
\n \n
\n
\n 1 {currencyB?.symbol} = {tokenB ? pair.priceOf(tokenB).toSignificant(6) : '-'} {currencyA?.symbol}\n
\n \n
\n )}\n
\n {!account ? (\n \n ) : (\n \n \n {approval === ApprovalState.PENDING ? (\n Approving\n ) : approval === ApprovalState.APPROVED || signatureData !== null ? (\n 'Approved'\n ) : (\n 'Approve'\n )}\n \n {\n setShowConfirm(true)\n }}\n disabled={!isValid || (signatureData === null && approval !== ApprovalState.APPROVED)}\n variant={\n !isValid && !!parsedAmounts[Field.CURRENCY_A] && !!parsedAmounts[Field.CURRENCY_B]\n ? 'danger'\n : 'primary'\n }\n >\n {error || 'Remove'}\n \n \n )}\n
\n \n \n \n \n\n {pair ? (\n \n \n \n ) : null}\n \n )\n}\n","import { useCallback, useEffect, useRef, useState } from 'react'\n\n/**\n * Easy way to debounce the handling of a rapidly changing value, e.g. a changing slider input\n * @param value value that is rapidly changing\n * @param onChange change handler that should receive the debounced updates to the value\n * @param debouncedMs how long we should wait for changes to be applied\n */\nexport default function useDebouncedChangeHandler(\n value: T,\n onChange: (newValue: T) => void,\n debouncedMs = 100\n): [T, (value: T) => void] {\n const [inner, setInner] = useState(() => value)\n const timer = useRef>()\n\n const onChangeInner = useCallback(\n (newValue: T) => {\n setInner(newValue)\n if (timer.current) {\n clearTimeout(timer.current)\n }\n timer.current = setTimeout(() => {\n onChange(newValue)\n timer.current = undefined\n }, debouncedMs)\n },\n [debouncedMs, onChange]\n )\n\n useEffect(() => {\n if (timer.current) {\n clearTimeout(timer.current)\n timer.current = undefined\n }\n setInner(value)\n }, [value])\n\n return [inner, onChangeInner]\n}\n","import React, { useCallback } from 'react'\nimport styled from 'styled-components'\nimport { Text } from '@mozartfinance/uikit'\nimport useI18n from 'hooks/useI18n'\nimport useENS from '../../hooks/useENS'\nimport { useActiveWeb3React } from '../../hooks'\nimport { ExternalLink } from '../Shared'\nimport { AutoColumn } from '../Column'\nimport { RowBetween } from '../Row'\nimport { getBscScanLink } from '../../utils'\n\nconst InputPanel = styled.div`\n display: flex;\n flex-flow: column nowrap;\n position: relative;\n border-radius: 1.25rem;\n background-color: ${({ theme }) => theme.colors.invertedContrast};\n z-index: 1;\n width: 100%;\n`\n\nconst ContainerRow = styled.div<{ error: boolean }>`\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 1.25rem;\n border: 1px solid ${({ error, theme }) => (error ? theme.colors.failure : theme.colors.invertedContrast)};\n transition: border-color 300ms ${({ error }) => (error ? 'step-end' : 'step-start')},\n color 500ms ${({ error }) => (error ? 'step-end' : 'step-start')};\n background-color: ${({ theme }) => theme.colors.invertedContrast};\n`\n\nconst InputContainer = styled.div`\n flex: 1;\n padding: 1rem;\n`\n\nconst Input = styled.input<{ error?: boolean }>`\n font-size: 1.25rem;\n outline: none;\n border: none;\n flex: 1 1 auto;\n width: 0;\n background-color: ${({ theme }) => theme.colors.invertedContrast};\n transition: color 300ms ${({ error }) => (error ? 'step-end' : 'step-start')};\n color: ${({ error, theme }) => (error ? theme.colors.failure : theme.colors.primary)};\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 500;\n width: 100%;\n ::placeholder {\n color: ${({ theme }) => theme.colors.textDisabled};\n }\n padding: 0px;\n -webkit-appearance: textfield;\n\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n\n ::-webkit-outer-spin-button,\n ::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n\n ::placeholder {\n color: ${({ theme }) => theme.colors.textDisabled};\n }\n`\n\nexport default function AddressInputPanel({\n id,\n value,\n onChange,\n}: {\n id?: string\n // the typed string value\n value: string\n // triggers whenever the typed value changes\n onChange: (value: string) => void\n}) {\n const { chainId } = useActiveWeb3React()\n const TranslateString = useI18n()\n const { address, loading, name } = useENS(value)\n\n const handleInput = useCallback(\n (event) => {\n const input = event.target.value\n const withoutSpaces = input.replace(/\\s+/g, '')\n onChange(withoutSpaces)\n },\n [onChange]\n )\n\n const error = Boolean(value.length > 0 && !loading && !address)\n\n return (\n \n \n \n \n \n \n {TranslateString(1138, 'Recipient')}\n \n {address && chainId && (\n \n {TranslateString(116, '(View on BscScan)')}\n \n )}\n \n \n \n \n \n \n )\n}\n","import { Percent } from '@pancakeswap-libs/sdk'\nimport React from 'react'\nimport { ONE_BIPS } from '../../constants'\nimport { warningSeverity } from '../../utils/prices'\nimport { ErrorText } from './styleds'\n\n/**\n * Formatted version of price impact text with warning colors\n */\nexport default function FormattedPriceImpact({ priceImpact }: { priceImpact?: Percent }) {\n return (\n \n {priceImpact ? (priceImpact.lessThan(ONE_BIPS) ? '<0.01%' : `${priceImpact.toFixed(2)}%`) : '-'}\n \n )\n}\n","import { Trade, TradeType } from '@pancakeswap-libs/sdk'\nimport React, { useMemo, useState } from 'react'\nimport { Text, Button } from '@mozartfinance/uikit'\nimport { Repeat } from 'react-feather'\n\nimport useI18n from 'hooks/useI18n'\nimport { Field } from '../../state/swap/actions'\nimport {\n computeSlippageAdjustedAmounts,\n computeTradePriceBreakdown,\n formatExecutionPrice,\n warningSeverity,\n} from '../../utils/prices'\nimport { AutoColumn } from '../Column'\nimport QuestionHelper from '../QuestionHelper'\nimport { AutoRow, RowBetween, RowFixed } from '../Row'\nimport FormattedPriceImpact from './FormattedPriceImpact'\nimport { StyledBalanceMaxMini, SwapCallbackError } from './styleds'\n\nexport default function SwapModalFooter({\n trade,\n onConfirm,\n allowedSlippage,\n swapErrorMessage,\n disabledConfirm,\n}: {\n trade: Trade\n allowedSlippage: number\n onConfirm: () => void\n swapErrorMessage: string | undefined\n disabledConfirm: boolean\n}) {\n const [showInverted, setShowInverted] = useState(false)\n const slippageAdjustedAmounts = useMemo(() => computeSlippageAdjustedAmounts(trade, allowedSlippage), [\n allowedSlippage,\n trade,\n ])\n const { priceImpactWithoutFee, realizedLPFee } = useMemo(() => computeTradePriceBreakdown(trade), [trade])\n const severity = warningSeverity(priceImpactWithoutFee)\n const TranslateString = useI18n()\n\n return (\n <>\n \n \n Price\n \n {formatExecutionPrice(trade, showInverted)}\n setShowInverted(!showInverted)}>\n \n \n \n \n\n \n \n \n {trade.tradeType === TradeType.EXACT_INPUT\n ? TranslateString(1210, 'Minimum received')\n : TranslateString(220, 'Maximum sold')}\n \n \n \n \n \n {trade.tradeType === TradeType.EXACT_INPUT\n ? slippageAdjustedAmounts[Field.OUTPUT]?.toSignificant(4) ?? '-'\n : slippageAdjustedAmounts[Field.INPUT]?.toSignificant(4) ?? '-'}\n \n \n {trade.tradeType === TradeType.EXACT_INPUT\n ? trade.outputAmount.currency.symbol\n : trade.inputAmount.currency.symbol}\n \n \n \n \n \n {TranslateString(226, 'Price Impact')}\n \n \n \n \n \n \n {TranslateString(228, 'Liquidity Provider Fee')}\n \n \n \n {realizedLPFee ? `${realizedLPFee?.toSignificant(6)} ${trade.inputAmount.currency.symbol}` : '-'}\n \n \n \n\n \n 2 ? 'danger' : 'primary'}\n mt=\"10px\"\n id=\"confirm-swap-or-send\"\n width=\"100%\"\n >\n {severity > 2 ? 'Swap Anyway' : 'Confirm Swap'}\n \n\n {swapErrorMessage ? : null}\n \n \n )\n}\n","import React, { useContext, useMemo } from 'react'\nimport styled, { ThemeContext } from 'styled-components'\nimport { Trade, TradeType } from '@pancakeswap-libs/sdk'\nimport { Button, Text } from '@mozartfinance/uikit'\nimport { ArrowDown, AlertTriangle } from 'react-feather'\nimport { Field } from '../../state/swap/actions'\nimport { isAddress, shortenAddress } from '../../utils'\nimport { computeSlippageAdjustedAmounts, computeTradePriceBreakdown, warningSeverity } from '../../utils/prices'\nimport { AutoColumn } from '../Column'\nimport CurrencyLogo from '../CurrencyLogo'\nimport { RowBetween, RowFixed } from '../Row'\nimport { SwapShowAcceptChanges } from './styleds'\n\nconst PriceInfoText = styled(Text)`\n font-style: italic;\n line-height: 1.3;\n\n span {\n color: ${({ theme }) => theme.colors.primary};\n font-weight: 600;\n }\n`\n\nexport default function SwapModalHeader({\n trade,\n allowedSlippage,\n recipient,\n showAcceptChanges,\n onAcceptChanges,\n}: {\n trade: Trade\n allowedSlippage: number\n recipient: string | null\n showAcceptChanges: boolean\n onAcceptChanges: () => void\n}) {\n const slippageAdjustedAmounts = useMemo(() => computeSlippageAdjustedAmounts(trade, allowedSlippage), [\n trade,\n allowedSlippage,\n ])\n const { priceImpactWithoutFee } = useMemo(() => computeTradePriceBreakdown(trade), [trade])\n const priceImpactSeverity = warningSeverity(priceImpactWithoutFee)\n\n const theme = useContext(ThemeContext)\n\n return (\n \n \n \n \n \n {trade.inputAmount.toSignificant(6)}\n \n \n \n \n {trade.inputAmount.currency.symbol}\n \n \n \n \n \n \n \n \n \n 2\n ? theme.colors.failure\n : showAcceptChanges && trade.tradeType === TradeType.EXACT_INPUT\n ? theme.colors.primary\n : 'text'\n }\n >\n {trade.outputAmount.toSignificant(6)}\n \n \n \n \n {trade.outputAmount.currency.symbol}\n \n \n \n {showAcceptChanges ? (\n \n \n \n \n Price Updated\n \n \n \n \n ) : null}\n \n {trade.tradeType === TradeType.EXACT_INPUT ? (\n \n {`Output is estimated. You will receive at least `}\n \n {slippageAdjustedAmounts[Field.OUTPUT]?.toSignificant(6)} {trade.outputAmount.currency.symbol}\n \n {' or the transaction will revert.'}\n \n ) : (\n \n {`Input is estimated. You will sell at most `}\n \n {slippageAdjustedAmounts[Field.INPUT]?.toSignificant(6)} {trade.inputAmount.currency.symbol}\n \n {' or the transaction will revert.'}\n \n )}\n \n {recipient !== null ? (\n \n \n Output will be sent to{' '}\n {isAddress(recipient) ? shortenAddress(recipient) : recipient}\n \n \n ) : null}\n \n )\n}\n","import { currencyEquals, Trade } from '@pancakeswap-libs/sdk'\nimport React, { useCallback, useMemo } from 'react'\nimport TransactionConfirmationModal, {\n ConfirmationModalContent,\n TransactionErrorContent\n} from '../TransactionConfirmationModal'\nimport SwapModalFooter from './SwapModalFooter'\nimport SwapModalHeader from './SwapModalHeader'\n\n/**\n * Returns true if the trade requires a confirmation of details before we can submit it\n * @param tradeA trade A\n * @param tradeB trade B\n */\nfunction tradeMeaningfullyDiffers(tradeA: Trade, tradeB: Trade): boolean {\n return (\n tradeA.tradeType !== tradeB.tradeType ||\n !currencyEquals(tradeA.inputAmount.currency, tradeB.inputAmount.currency) ||\n !tradeA.inputAmount.equalTo(tradeB.inputAmount) ||\n !currencyEquals(tradeA.outputAmount.currency, tradeB.outputAmount.currency) ||\n !tradeA.outputAmount.equalTo(tradeB.outputAmount)\n )\n}\n\nexport default function ConfirmSwapModal({\n trade,\n originalTrade,\n onAcceptChanges,\n allowedSlippage,\n onConfirm,\n onDismiss,\n recipient,\n swapErrorMessage,\n isOpen,\n attemptingTxn,\n txHash\n}: {\n isOpen: boolean\n trade: Trade | undefined\n originalTrade: Trade | undefined\n attemptingTxn: boolean\n txHash: string | undefined\n recipient: string | null\n allowedSlippage: number\n onAcceptChanges: () => void\n onConfirm: () => void\n swapErrorMessage: string | undefined\n onDismiss: () => void\n}) {\n const showAcceptChanges = useMemo(\n () => Boolean(trade && originalTrade && tradeMeaningfullyDiffers(trade, originalTrade)),\n [originalTrade, trade]\n )\n\n const modalHeader = useCallback(() => {\n return trade ? (\n \n ) : null\n }, [allowedSlippage, onAcceptChanges, recipient, showAcceptChanges, trade])\n\n const modalBottom = useCallback(() => {\n return trade ? (\n \n ) : null\n }, [allowedSlippage, onConfirm, showAcceptChanges, swapErrorMessage, trade])\n\n // text to show while loading\n const pendingText = `Swapping ${trade?.inputAmount?.toSignificant(6)} ${\n trade?.inputAmount?.currency?.symbol\n } for ${trade?.outputAmount?.toSignificant(6)} ${trade?.outputAmount?.currency?.symbol}`\n\n const confirmationContent = useCallback(\n () =>\n swapErrorMessage ? (\n \n ) : (\n \n ),\n [onDismiss, modalBottom, modalHeader, swapErrorMessage]\n )\n\n return (\n \n )\n}\n","import { Trade } from '@pancakeswap-libs/sdk'\nimport React, { Fragment, memo, useContext } from 'react'\nimport { ChevronRight } from 'react-feather'\nimport { Flex, Text } from '@mozartfinance/uikit'\nimport { ThemeContext } from 'styled-components'\nimport CurrencyLogo from '../CurrencyLogo'\n\nexport default memo(function SwapRoute({ trade }: { trade: Trade }) {\n const theme = useContext(ThemeContext)\n return (\n \n {trade.route.path.map((token, i, path) => {\n const isLastItem: boolean = i === path.length - 1\n return (\n // eslint-disable-next-line react/no-array-index-key\n \n \n \n \n {token.symbol}\n \n \n {isLastItem ? null : }\n \n )\n })}\n
\n )\n})\n","import React from 'react'\nimport { Trade, TradeType } from '@pancakeswap-libs/sdk'\nimport { Card, CardBody, Text } from '@mozartfinance/uikit'\nimport useI18n from 'hooks/useI18n'\nimport { Field } from '../../state/swap/actions'\nimport { useUserSlippageTolerance } from '../../state/user/hooks'\nimport { computeSlippageAdjustedAmounts, computeTradePriceBreakdown } from '../../utils/prices'\nimport { AutoColumn } from '../Column'\nimport QuestionHelper from '../QuestionHelper'\nimport { RowBetween, RowFixed } from '../Row'\nimport FormattedPriceImpact from './FormattedPriceImpact'\nimport { SectionBreak } from './styleds'\nimport SwapRoute from './SwapRoute'\n\nfunction TradeSummary({ trade, allowedSlippage }: { trade: Trade; allowedSlippage: number }) {\n const { priceImpactWithoutFee, realizedLPFee } = computeTradePriceBreakdown(trade)\n const isExactIn = trade.tradeType === TradeType.EXACT_INPUT\n const slippageAdjustedAmounts = computeSlippageAdjustedAmounts(trade, allowedSlippage)\n const TranslateString = useI18n()\n\n return (\n \n \n \n \n \n {isExactIn ? TranslateString(1210, 'Minimum received') : TranslateString(220, 'Maximum sold')}\n \n \n \n \n \n {isExactIn\n ? `${slippageAdjustedAmounts[Field.OUTPUT]?.toSignificant(4)} ${trade.outputAmount.currency.symbol}` ??\n '-'\n : `${slippageAdjustedAmounts[Field.INPUT]?.toSignificant(4)} ${trade.inputAmount.currency.symbol}` ??\n '-'}\n \n \n \n \n \n {TranslateString(226, 'Price Impact')}\n \n \n \n \n\n \n \n {TranslateString(228, 'Liquidity Provider Fee')}\n \n \n \n {realizedLPFee ? `${realizedLPFee.toSignificant(4)} ${trade.inputAmount.currency.symbol}` : '-'}\n \n \n \n \n )\n}\n\nexport interface AdvancedSwapDetailsProps {\n trade?: Trade\n}\n\nexport function AdvancedSwapDetails({ trade }: AdvancedSwapDetailsProps) {\n const [allowedSlippage] = useUserSlippageTolerance()\n const TranslateString = useI18n()\n const showRoute = Boolean(trade && trade.route.path.length > 2)\n\n return (\n \n {trade && (\n <>\n \n {showRoute && (\n <>\n \n \n \n Route\n \n \n \n \n \n )}\n \n )}\n \n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\nimport { useLastTruthy } from '../../hooks/useLast'\nimport { AdvancedSwapDetails, AdvancedSwapDetailsProps } from './AdvancedSwapDetails'\n\nconst AdvancedDetailsFooter = styled.div<{ show: boolean }>`\n padding-top: calc(16px + 2rem);\n padding-bottom: 20px;\n margin-top: -2rem;\n width: 100%;\n max-width: 400px;\n border-bottom-left-radius: 20px;\n border-bottom-right-radius: 20px;\n color: ${({ theme }) => theme.colors.textSubtle};\n z-index: 1;\n\n transform: ${({ show }) => (show ? 'translateY(0%)' : 'translateY(-100%)')};\n transition: transform 300ms ease-in-out;\n`\n\nexport default function AdvancedSwapDetailsDropdown({ trade, ...rest }: AdvancedSwapDetailsProps) {\n const lastTrade = useLastTruthy(trade)\n\n return (\n \n \n \n )\n}\n","import React from 'react'\nimport { Price } from '@pancakeswap-libs/sdk'\nimport { SyncAltIcon, Text } from '@mozartfinance/uikit'\nimport { StyledBalanceMaxMini } from './styleds'\n\ninterface TradePriceProps {\n price?: Price\n showInverted: boolean\n setShowInverted: (showInverted: boolean) => void\n}\n\nexport default function TradePrice({ price, showInverted, setShowInverted }: TradePriceProps) {\n const formattedPrice = showInverted ? price?.toSignificant(6) : price?.invert()?.toSignificant(6)\n\n const show = Boolean(price?.baseCurrency && price?.quoteCurrency)\n const label = showInverted\n ? `${price?.quoteCurrency?.symbol} per ${price?.baseCurrency?.symbol}`\n : `${price?.baseCurrency?.symbol} per ${price?.quoteCurrency?.symbol}`\n\n return (\n \n {show ? (\n <>\n {formattedPrice ?? '-'} {label}\n setShowInverted(!showInverted)}>\n \n \n \n ) : (\n '-'\n )}\n \n )\n}\n","import { Token } from '@pancakeswap-libs/sdk'\nimport { transparentize } from 'polished'\nimport { Button, Text } from '@mozartfinance/uikit'\nimport React, { useCallback, useMemo, useState } from 'react'\nimport styled from 'styled-components'\nimport { AlertTriangle } from 'react-feather'\nimport useI18n from 'hooks/useI18n'\nimport { useActiveWeb3React } from '../../hooks'\nimport { useAllTokens } from '../../hooks/Tokens'\nimport { getBscScanLink, shortenAddress } from '../../utils'\nimport { ExternalLink } from '../Shared'\nimport CurrencyLogo from '../CurrencyLogo'\nimport Modal from '../Modal'\nimport { AutoRow, RowBetween } from '../Row'\nimport { AutoColumn } from '../Column'\n\nconst Wrapper = styled.div<{ error: boolean }>`\n background: ${({ theme }) => transparentize(0.6, theme.colors.tertiary)};\n padding: 0.75rem;\n border-radius: 20px;\n`\n\nconst WarningContainer = styled.div`\n max-width: 420px;\n width: 100%;\n padding: 1rem;\n background: rgba(242, 150, 2, 0.05);\n border: 1px solid #f3841e;\n border-radius: 20px;\n overflow: auto;\n`\n\nconst StyledWarningIcon = styled(AlertTriangle)`\n stroke: ${({ theme }) => theme.colors.failure};\n`\n\ninterface TokenWarningCardProps {\n token?: Token\n}\n\nfunction TokenWarningCard({ token }: TokenWarningCardProps) {\n const { chainId } = useActiveWeb3React()\n const TranslateString = useI18n()\n const tokenSymbol = token?.symbol?.toLowerCase() ?? ''\n const tokenName = token?.name?.toLowerCase() ?? ''\n\n const allTokens = useAllTokens()\n\n const duplicateNameOrSymbol = useMemo(() => {\n if (!token || !chainId) return false\n\n return Object.keys(allTokens).some((tokenAddress) => {\n const userToken = allTokens[tokenAddress]\n if (userToken.equals(token)) {\n return false\n }\n return userToken.symbol?.toLowerCase() === tokenSymbol || userToken.name?.toLowerCase() === tokenName\n })\n }, [token, chainId, allTokens, tokenSymbol, tokenName])\n\n if (!token) return null\n\n return (\n \n \n \n \n
\n
\n \n \n {token && token.name && token.symbol && token.name !== token.symbol\n ? `${token.name} (${token.symbol})`\n : token.name || token.symbol}{' '}\n \n {chainId && (\n \n \n {shortenAddress(token.address)} {TranslateString(116, '(View on BscScan)')}\n \n \n )}\n \n
\n
\n )\n}\n\nexport default function TokenWarningModal({\n isOpen,\n tokens,\n onConfirm,\n}: {\n isOpen: boolean\n tokens: Token[]\n onConfirm: () => void\n}) {\n const [understandChecked, setUnderstandChecked] = useState(false)\n const toggleUnderstand = useCallback(() => setUnderstandChecked((uc) => !uc), [])\n const TranslateString = useI18n()\n\n const handleDismiss = useCallback(() => null, [])\n return (\n \n \n \n \n \n {TranslateString(1128, 'Token imported')}\n \n \n {TranslateString(\n 1130,\n 'Anyone can create a BEP20 token on BSC with any name, including creating fake versions of existing tokens and tokens that claim to represent projects that do not have a token.'\n )}\n \n \n {TranslateString(\n 1132,\n 'This interface can load arbitrary tokens by token addresses. Please take extra caution and do your research when interacting with arbitrary BEP20 tokens.'\n )}\n \n {TranslateString(1134, 'If you purchase an arbitrary token, you may be unable to sell it back.')}\n {tokens.map((token) => {\n return \n })}\n \n
\n \n
\n {\n onConfirm()\n }}\n >\n {TranslateString(150, 'Continue')}\n \n
\n
\n
\n
\n )\n}\n","import React, { useCallback, useState } from 'react'\nimport styled from 'styled-components'\nimport { Button, Text } from '@mozartfinance/uikit'\nimport { AlertTriangle } from 'react-feather'\nimport Modal from '../Modal'\nimport { AutoRow, RowBetween } from '../Row'\nimport { AutoColumn } from '../Column'\n\nconst WarningContainer = styled.div`\n max-width: 420px;\n width: 100%;\n padding: 1rem;\n background: rgba(242, 150, 2, 0.05);\n border: 1px solid #f3841e;\n border-radius: 20px;\n overflow: auto;\n`\n\nconst StyledWarningIcon = styled(AlertTriangle)`\n stroke: ${({ theme }) => theme.colors.failure};\n`\n\nexport default function SyrupWarningModal({\n isOpen,\n transactionType,\n onConfirm,\n}: {\n isOpen: boolean\n transactionType: string\n onConfirm: () => void\n}) {\n const [understandChecked, setUnderstandChecked] = useState(false)\n const toggleUnderstand = useCallback(() => setUnderstandChecked((uc) => !uc), [])\n\n const handleDismiss = useCallback(() => null, [])\n return (\n \n \n \n \n \n Syrup Warning\n \n {transactionType !== '' && (\n <>\n \n Please be careful when {transactionType} SYRUP.\n \n \n {transactionType === 'Buying'\n ? 'You will not receive CAKE rewards for holding purchased SYRUP.'\n : 'You will need to buy back the same amount of SYRUP to be able to convert back to CAKE.'}\n \n \n )}\n \n
\n \n
\n {\n setUnderstandChecked(false)\n onConfirm()\n }}\n >\n Continue\n \n
\n
\n
\n
\n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\nimport { transparentize } from 'polished'\nimport { RowBetween } from '../Row'\nimport { AutoColumn } from '../Column'\n\nconst Wrapper = styled(AutoColumn)`\n margin-top: 1.25rem;\n`\n\nconst Grouping = styled(RowBetween)`\n width: 50%;\n`\n\nconst Circle = styled.div<{ confirmed?: boolean; disabled?: boolean }>`\n min-width: 20px;\n min-height: 20px;\n background-color: ${({ theme, confirmed, disabled }) =>\n disabled ? theme.colors.backgroundDisabled : confirmed ? theme.colors.success : theme.colors.primary};\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n line-height: 8px;\n font-size: 12px;\n color: ${({ theme, confirmed, disabled }) =>\n disabled ? theme.colors.text : confirmed ? theme.colors.success : '#FFFFFF'};\n`\n\nconst CircleRow = styled.div`\n width: calc(100% - 20px);\n display: flex;\n align-items: center;\n`\n\nconst Connector = styled.div<{ prevConfirmed?: boolean }>`\n width: 100%;\n height: 2px;\n background-color: ;\n background: linear-gradient(\n 90deg,\n ${({ theme, prevConfirmed }) => transparentize(0.5, prevConfirmed ? theme.colors.success : theme.colors.primary)} 0%,\n ${({ theme, prevConfirmed }) => (prevConfirmed ? theme.colors.primary : theme.colors.backgroundDisabled)} 80%\n );\n opacity: 0.6;\n`\n\ninterface ProgressCirclesProps {\n steps: boolean[]\n}\n\n/**\n * Based on array of steps, create a step counter of circles.\n * A circle can be enabled, disabled, or confirmed. States are derived\n * from previous step.\n *\n * An extra circle is added to represent the ability to swap, add, or remove.\n * This step will never be marked as complete (because no 'txn done' state in body ui).\n *\n * @param steps array of booleans where true means step is complete\n */\nexport default function ProgressCircles({ steps }: ProgressCirclesProps) {\n return (\n \n \n {steps.map((step, i) => {\n return (\n // eslint-disable-next-line react/no-array-index-key\n \n \n {step ? '✓' : i + 1}\n \n \n \n )\n })}\n {steps.length + 1}\n \n \n )\n}\n","import { BigNumber } from '@ethersproject/bignumber'\nimport { Contract } from '@ethersproject/contracts'\nimport { JSBI, Percent, Router, SwapParameters, Trade, TradeType } from '@pancakeswap-libs/sdk'\nimport { useMemo } from 'react'\nimport { BIPS_BASE, DEFAULT_DEADLINE_FROM_NOW, INITIAL_ALLOWED_SLIPPAGE } from '../constants'\nimport { useTransactionAdder } from '../state/transactions/hooks'\nimport { calculateGasMargin, getRouterContract, isAddress, shortenAddress } from '../utils'\nimport isZero from '../utils/isZero'\nimport { useActiveWeb3React } from './index'\nimport useENS from './useENS'\n\n enum SwapCallbackState {\n INVALID,\n LOADING,\n VALID,\n}\n\ninterface SwapCall {\n contract: Contract\n parameters: SwapParameters\n}\n\ninterface SuccessfulCall {\n call: SwapCall\n gasEstimate: BigNumber\n}\n\ninterface FailedCall {\n call: SwapCall\n error: Error\n}\n\ntype EstimatedSwapCall = SuccessfulCall | FailedCall\n\n/**\n * Returns the swap calls that can be used to make the trade\n * @param trade trade to execute\n * @param allowedSlippage user allowed slippage\n * @param deadline the deadline for the trade\n * @param recipientAddressOrName\n */\nfunction useSwapCallArguments(\n trade: Trade | undefined, // trade to execute, required\n allowedSlippage: number = INITIAL_ALLOWED_SLIPPAGE, // in bips\n deadline: number = DEFAULT_DEADLINE_FROM_NOW, // in seconds from now\n recipientAddressOrName: string | null // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender\n): SwapCall[] {\n const { account, chainId, library } = useActiveWeb3React()\n\n const { address: recipientAddress } = useENS(recipientAddressOrName)\n const recipient = recipientAddressOrName === null ? account : recipientAddress\n\n return useMemo(() => {\n if (!trade || !recipient || !library || !account || !chainId) return []\n\n const contract: Contract | null = getRouterContract(chainId, library, account)\n if (!contract) {\n return []\n }\n\n const swapMethods = []\n\n swapMethods.push(\n // @ts-ignore\n Router.swapCallParameters(trade, {\n feeOnTransfer: false,\n allowedSlippage: new Percent(JSBI.BigInt(Math.floor(allowedSlippage)), BIPS_BASE),\n recipient,\n ttl: deadline,\n })\n )\n\n if (trade.tradeType === TradeType.EXACT_INPUT) {\n swapMethods.push(\n // @ts-ignore\n Router.swapCallParameters(trade, {\n feeOnTransfer: true,\n allowedSlippage: new Percent(JSBI.BigInt(Math.floor(allowedSlippage)), BIPS_BASE),\n recipient,\n ttl: deadline,\n })\n )\n }\n\n return swapMethods.map((parameters) => ({ parameters, contract }))\n }, [account, allowedSlippage, chainId, deadline, library, recipient, trade])\n}\n\n// returns a function that will execute a swap, if the parameters are all valid\n// and the user has approved the slippage adjusted input amount for the trade\nexport function useSwapCallback(\n trade: Trade | undefined, // trade to execute, required\n allowedSlippage: number = INITIAL_ALLOWED_SLIPPAGE, // in bips\n deadline: number = DEFAULT_DEADLINE_FROM_NOW, // in seconds from now\n recipientAddressOrName: string | null // the ENS name or address of the recipient of the trade, or null if swap should be returned to sender\n): { state: SwapCallbackState; callback: null | (() => Promise); error: string | null } {\n const { account, chainId, library } = useActiveWeb3React()\n\n const swapCalls = useSwapCallArguments(trade, allowedSlippage, deadline, recipientAddressOrName)\n\n const addTransaction = useTransactionAdder()\n\n const { address: recipientAddress } = useENS(recipientAddressOrName)\n const recipient = recipientAddressOrName === null ? account : recipientAddress\n\n return useMemo(() => {\n if (!trade || !library || !account || !chainId) {\n return { state: SwapCallbackState.INVALID, callback: null, error: 'Missing dependencies' }\n }\n if (!recipient) {\n if (recipientAddressOrName !== null) {\n return { state: SwapCallbackState.INVALID, callback: null, error: 'Invalid recipient' }\n }\n return { state: SwapCallbackState.LOADING, callback: null, error: null }\n }\n\n return {\n state: SwapCallbackState.VALID,\n callback: async function onSwap(): Promise {\n const estimatedCalls: EstimatedSwapCall[] = await Promise.all(\n swapCalls.map((call) => {\n const {\n parameters: { methodName, args, value },\n contract,\n } = call\n const options = !value || isZero(value) ? {} : { value }\n\n return contract.estimateGas[methodName](...args, options)\n .then((gasEstimate) => {\n return {\n call,\n gasEstimate,\n }\n })\n .catch((gasError) => {\n console.info('Gas estimate failed, trying eth_call to extract error', call)\n\n return contract.callStatic[methodName](...args, options)\n .then((result) => {\n console.info('Unexpected successful call after failed estimate gas', call, gasError, result)\n return { call, error: new Error('Unexpected issue with estimating the gas. Please try again.') }\n })\n .catch((callError) => {\n console.info('Call threw error', call, callError)\n let errorMessage: string\n switch (callError.reason) {\n case 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT':\n case 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT':\n errorMessage =\n 'This transaction will not succeed either due to price movement or fee on transfer. Try increasing your slippage tolerance.'\n break\n default:\n errorMessage = `The transaction cannot succeed due to error: ${callError.reason}. This is probably an issue with one of the tokens you are swapping.`\n }\n return { call, error: new Error(errorMessage) }\n })\n })\n })\n )\n\n // a successful estimation is a bignumber gas estimate and the next call is also a bignumber gas estimate\n const successfulEstimation = estimatedCalls.find(\n (el, ix, list): el is SuccessfulCall =>\n 'gasEstimate' in el && (ix === list.length - 1 || 'gasEstimate' in list[ix + 1])\n )\n\n if (!successfulEstimation) {\n const errorCalls = estimatedCalls.filter((call): call is FailedCall => 'error' in call)\n if (errorCalls.length > 0) throw errorCalls[errorCalls.length - 1].error\n throw new Error('Unexpected error. Please contact support: none of the calls threw an error')\n }\n\n const {\n call: {\n contract,\n parameters: { methodName, args, value },\n },\n gasEstimate,\n } = successfulEstimation\n\n return contract[methodName](...args, {\n gasLimit: calculateGasMargin(gasEstimate),\n ...(value && !isZero(value) ? { value, from: account } : { from: account }),\n })\n .then((response: any) => {\n const inputSymbol = trade.inputAmount.currency.symbol\n const outputSymbol = trade.outputAmount.currency.symbol\n const inputAmount = trade.inputAmount.toSignificant(3)\n const outputAmount = trade.outputAmount.toSignificant(3)\n\n const base = `Swap ${inputAmount} ${inputSymbol} for ${outputAmount} ${outputSymbol}`\n const withRecipient =\n recipient === account\n ? base\n : `${base} to ${\n recipientAddressOrName && isAddress(recipientAddressOrName)\n ? shortenAddress(recipientAddressOrName)\n : recipientAddressOrName\n }`\n\n addTransaction(response, {\n summary: withRecipient,\n })\n\n return response.hash\n })\n .catch((error: any) => {\n // if the user rejected the tx, pass this along\n if (error?.code === 4001) {\n throw new Error('Transaction rejected.')\n } else {\n // otherwise, the error was unexpected and we need to convey that\n console.error(`Swap failed`, error, methodName, args, value)\n throw new Error(`Swap failed: ${error.message}`)\n }\n })\n },\n error: null,\n }\n }, [trade, library, account, chainId, recipient, recipientAddressOrName, swapCalls, addTransaction])\n}\n\nexport default useSwapCallback","import { Currency, currencyEquals, ETHER, WETH } from '@pancakeswap-libs/sdk'\nimport { useMemo } from 'react'\nimport { tryParseAmount } from '../state/swap/hooks'\nimport { useTransactionAdder } from '../state/transactions/hooks'\nimport { useCurrencyBalance } from '../state/wallet/hooks'\nimport { useActiveWeb3React } from './index'\nimport { useWETHContract } from './useContract'\n\nexport enum WrapType {\n NOT_APPLICABLE,\n WRAP,\n UNWRAP\n}\n\nconst NOT_APPLICABLE = { wrapType: WrapType.NOT_APPLICABLE }\n/**\n * Given the selected input and output currency, return a wrap callback\n * @param inputCurrency the selected input currency\n * @param outputCurrency the selected output currency\n * @param typedValue the user input value\n */\nexport default function useWrapCallback(\n inputCurrency: Currency | undefined,\n outputCurrency: Currency | undefined,\n typedValue: string | undefined\n): { wrapType: WrapType; execute?: undefined | (() => Promise); inputError?: string } {\n const { chainId, account } = useActiveWeb3React()\n const wethContract = useWETHContract()\n const balance = useCurrencyBalance(account ?? undefined, inputCurrency)\n // we can always parse the amount typed as the input currency, since wrapping is 1:1\n const inputAmount = useMemo(() => tryParseAmount(typedValue, inputCurrency), [inputCurrency, typedValue])\n const addTransaction = useTransactionAdder()\n\n return useMemo(() => {\n if (!wethContract || !chainId || !inputCurrency || !outputCurrency) return NOT_APPLICABLE\n\n const sufficientBalance = inputAmount && balance && !balance.lessThan(inputAmount)\n\n if (inputCurrency === ETHER && currencyEquals(WETH[chainId], outputCurrency)) {\n return {\n wrapType: WrapType.WRAP,\n execute:\n sufficientBalance && inputAmount\n ? async () => {\n try {\n const txReceipt = await wethContract.deposit({ value: `0x${inputAmount.raw.toString(16)}` })\n addTransaction(txReceipt, { summary: `Wrap ${inputAmount.toSignificant(6)} BNB to WBNB` })\n } catch (error) {\n console.error('Could not deposit', error)\n }\n }\n : undefined,\n inputError: sufficientBalance ? undefined : 'Insufficient BNB balance'\n }\n } if (currencyEquals(WETH[chainId], inputCurrency) && outputCurrency === ETHER) {\n return {\n wrapType: WrapType.UNWRAP,\n execute:\n sufficientBalance && inputAmount\n ? async () => {\n try {\n const txReceipt = await wethContract.withdraw(`0x${inputAmount.raw.toString(16)}`)\n addTransaction(txReceipt, { summary: `Unwrap ${inputAmount.toSignificant(6)} WBNB to BNB` })\n } catch (error) {\n console.error('Could not withdraw', error)\n }\n }\n : undefined,\n inputError: sufficientBalance ? undefined : 'Insufficient WBNB balance'\n }\n } \n return NOT_APPLICABLE\n \n }, [wethContract, chainId, inputCurrency, outputCurrency, inputAmount, balance, addTransaction])\n}\n","import { CurrencyAmount, JSBI, Token, Trade } from '@pancakeswap-libs/sdk'\nimport React, { useCallback, useContext, useEffect, useMemo, useState } from 'react'\nimport { ArrowDown } from 'react-feather'\nimport { CardBody, ArrowDownIcon, Button, IconButton, Text } from '@mozartfinance/uikit'\nimport { ThemeContext } from 'styled-components'\nimport AddressInputPanel from 'components/AddressInputPanel'\nimport Card, { GreyCard } from 'components/Card'\nimport { AutoColumn } from 'components/Column'\nimport ConfirmSwapModal from 'components/swap/ConfirmSwapModal'\nimport CurrencyInputPanel from 'components/CurrencyInputPanel'\nimport CardNav from 'components/CardNav'\nimport { AutoRow, RowBetween } from 'components/Row'\nimport AdvancedSwapDetailsDropdown from 'components/swap/AdvancedSwapDetailsDropdown'\nimport confirmPriceImpactWithoutFee from 'components/swap/confirmPriceImpactWithoutFee'\nimport { ArrowWrapper, BottomGrouping, SwapCallbackError, Wrapper } from 'components/swap/styleds'\nimport TradePrice from 'components/swap/TradePrice'\nimport TokenWarningModal from 'components/TokenWarningModal'\nimport SyrupWarningModal from 'components/SyrupWarningModal'\nimport ProgressSteps from 'components/ProgressSteps'\n\nimport { INITIAL_ALLOWED_SLIPPAGE } from 'constants/index'\nimport { useActiveWeb3React } from 'hooks'\nimport { useCurrency } from 'hooks/Tokens'\nimport { ApprovalState, useApproveCallbackFromTrade } from 'hooks/useApproveCallback'\nimport { useSwapCallback } from 'hooks/useSwapCallback'\nimport useWrapCallback, { WrapType } from 'hooks/useWrapCallback'\nimport { Field } from 'state/swap/actions'\nimport { useDefaultsFromURLSearch, useDerivedSwapInfo, useSwapActionHandlers, useSwapState } from 'state/swap/hooks'\nimport { useExpertModeManager, useUserDeadline, useUserSlippageTolerance } from 'state/user/hooks'\nimport { LinkStyledButton } from 'components/Shared'\nimport { maxAmountSpend } from 'utils/maxAmountSpend'\nimport { computeTradePriceBreakdown, warningSeverity } from 'utils/prices'\nimport Loader from 'components/Loader'\nimport useI18n from 'hooks/useI18n'\nimport PageHeader from 'components/PageHeader'\nimport ConnectWalletButton from 'components/ConnectWalletButton'\nimport AppBody from '../AppBody'\n\nconst Swap = () => {\n const loadedUrlParams = useDefaultsFromURLSearch()\n const TranslateString = useI18n()\n\n // token warning stuff\n const [loadedInputCurrency, loadedOutputCurrency] = [\n useCurrency(loadedUrlParams?.inputCurrencyId),\n useCurrency(loadedUrlParams?.outputCurrencyId),\n ]\n const [dismissTokenWarning, setDismissTokenWarning] = useState(false)\n const [isSyrup, setIsSyrup] = useState(false)\n const [syrupTransactionType, setSyrupTransactionType] = useState('')\n const urlLoadedTokens: Token[] = useMemo(\n () => [loadedInputCurrency, loadedOutputCurrency]?.filter((c): c is Token => c instanceof Token) ?? [],\n [loadedInputCurrency, loadedOutputCurrency]\n )\n const handleConfirmTokenWarning = useCallback(() => {\n setDismissTokenWarning(true)\n }, [])\n\n const handleConfirmSyrupWarning = useCallback(() => {\n setIsSyrup(false)\n setSyrupTransactionType('')\n }, [])\n\n const { account } = useActiveWeb3React()\n const theme = useContext(ThemeContext)\n\n const [isExpertMode] = useExpertModeManager()\n\n // get custom setting values for user\n const [deadline] = useUserDeadline()\n const [allowedSlippage] = useUserSlippageTolerance()\n\n // swap state\n const { independentField, typedValue, recipient } = useSwapState()\n const { v2Trade, currencyBalances, parsedAmount, currencies, inputError: swapInputError } = useDerivedSwapInfo()\n const { wrapType, execute: onWrap, inputError: wrapInputError } = useWrapCallback(\n currencies[Field.INPUT],\n currencies[Field.OUTPUT],\n typedValue\n )\n const showWrap: boolean = wrapType !== WrapType.NOT_APPLICABLE\n const trade = showWrap ? undefined : v2Trade\n\n const parsedAmounts = showWrap\n ? {\n [Field.INPUT]: parsedAmount,\n [Field.OUTPUT]: parsedAmount,\n }\n : {\n [Field.INPUT]: independentField === Field.INPUT ? parsedAmount : trade?.inputAmount,\n [Field.OUTPUT]: independentField === Field.OUTPUT ? parsedAmount : trade?.outputAmount,\n }\n\n const { onSwitchTokens, onCurrencySelection, onUserInput, onChangeRecipient } = useSwapActionHandlers()\n const isValid = !swapInputError\n const dependentField: Field = independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT\n\n const handleTypeInput = useCallback(\n (value: string) => {\n onUserInput(Field.INPUT, value)\n },\n [onUserInput]\n )\n const handleTypeOutput = useCallback(\n (value: string) => {\n onUserInput(Field.OUTPUT, value)\n },\n [onUserInput]\n )\n\n // modal and loading\n const [{ showConfirm, tradeToConfirm, swapErrorMessage, attemptingTxn, txHash }, setSwapState] = useState<{\n showConfirm: boolean\n tradeToConfirm: Trade | undefined\n attemptingTxn: boolean\n swapErrorMessage: string | undefined\n txHash: string | undefined\n }>({\n showConfirm: false,\n tradeToConfirm: undefined,\n attemptingTxn: false,\n swapErrorMessage: undefined,\n txHash: undefined,\n })\n\n const formattedAmounts = {\n [independentField]: typedValue,\n [dependentField]: showWrap\n ? parsedAmounts[independentField]?.toExact() ?? ''\n : parsedAmounts[dependentField]?.toSignificant(6) ?? '',\n }\n\n const route = trade?.route\n const userHasSpecifiedInputOutput = Boolean(\n currencies[Field.INPUT] && currencies[Field.OUTPUT] && parsedAmounts[independentField]?.greaterThan(JSBI.BigInt(0))\n )\n const noRoute = !route\n\n // check whether the user has approved the router on the input token\n const [approval, approveCallback] = useApproveCallbackFromTrade(trade, allowedSlippage)\n\n // check if user has gone through approval process, used to show two step buttons, reset on token change\n const [approvalSubmitted, setApprovalSubmitted] = useState(false)\n\n // mark when a user has submitted an approval, reset onTokenSelection for input field\n useEffect(() => {\n if (approval === ApprovalState.PENDING) {\n setApprovalSubmitted(true)\n }\n }, [approval, approvalSubmitted])\n\n const maxAmountInput: CurrencyAmount | undefined = maxAmountSpend(currencyBalances[Field.INPUT])\n const atMaxAmountInput = Boolean(maxAmountInput && parsedAmounts[Field.INPUT]?.equalTo(maxAmountInput))\n\n // the callback to execute the swap\n const { callback: swapCallback, error: swapCallbackError } = useSwapCallback(\n trade,\n allowedSlippage,\n deadline,\n recipient\n )\n\n const { priceImpactWithoutFee } = computeTradePriceBreakdown(trade)\n\n const handleSwap = useCallback(() => {\n if (priceImpactWithoutFee && !confirmPriceImpactWithoutFee(priceImpactWithoutFee)) {\n return\n }\n if (!swapCallback) {\n return\n }\n setSwapState((prevState) => ({ ...prevState, attemptingTxn: true, swapErrorMessage: undefined, txHash: undefined }))\n swapCallback()\n .then((hash) => {\n setSwapState((prevState) => ({\n ...prevState,\n attemptingTxn: false,\n swapErrorMessage: undefined,\n txHash: hash,\n }))\n })\n .catch((error) => {\n setSwapState((prevState) => ({\n ...prevState,\n attemptingTxn: false,\n swapErrorMessage: error.message,\n txHash: undefined,\n }))\n })\n }, [priceImpactWithoutFee, swapCallback, setSwapState])\n\n // errors\n const [showInverted, setShowInverted] = useState(false)\n\n // warnings on slippage\n const priceImpactSeverity = warningSeverity(priceImpactWithoutFee)\n\n // show approve flow when: no error on inputs, not approved or pending, or approved in current session\n // never show if price impact is above threshold in non expert mode\n const showApproveFlow =\n !swapInputError &&\n (approval === ApprovalState.NOT_APPROVED ||\n approval === ApprovalState.PENDING ||\n (approvalSubmitted && approval === ApprovalState.APPROVED)) &&\n !(priceImpactSeverity > 3 && !isExpertMode)\n\n const handleConfirmDismiss = useCallback(() => {\n setSwapState((prevState) => ({ ...prevState, showConfirm: false }))\n\n // if there was a tx hash, we want to clear the input\n if (txHash) {\n onUserInput(Field.INPUT, '')\n }\n }, [onUserInput, txHash, setSwapState])\n\n const handleAcceptChanges = useCallback(() => {\n setSwapState((prevState) => ({ ...prevState, tradeToConfirm: trade }))\n }, [trade])\n\n // This will check to see if the user has selected Syrup to either buy or sell.\n // If so, they will be alerted with a warning message.\n const checkForSyrup = useCallback(\n (selected: string, purchaseType: string) => {\n if (selected === 'syrup') {\n setIsSyrup(true)\n setSyrupTransactionType(purchaseType)\n }\n },\n [setIsSyrup, setSyrupTransactionType]\n )\n\n const handleInputSelect = useCallback(\n (inputCurrency) => {\n setApprovalSubmitted(false) // reset 2 step UI for approvals\n onCurrencySelection(Field.INPUT, inputCurrency)\n if (inputCurrency.symbol.toLowerCase() === 'syrup') {\n checkForSyrup(inputCurrency.symbol.toLowerCase(), 'Selling')\n }\n },\n [onCurrencySelection, setApprovalSubmitted, checkForSyrup]\n )\n\n const handleMaxInput = useCallback(() => {\n if (maxAmountInput) {\n onUserInput(Field.INPUT, maxAmountInput.toExact())\n }\n }, [maxAmountInput, onUserInput])\n\n const handleOutputSelect = useCallback(\n (outputCurrency) => {\n onCurrencySelection(Field.OUTPUT, outputCurrency)\n if (outputCurrency.symbol.toLowerCase() === 'syrup') {\n checkForSyrup(outputCurrency.symbol.toLowerCase(), 'Buying')\n }\n },\n [onCurrencySelection, checkForSyrup]\n )\n\n return (\n <>\n 0 && !dismissTokenWarning}\n tokens={urlLoadedTokens}\n onConfirm={handleConfirmTokenWarning}\n />\n \n \n \n \n \n \n \n \n \n \n \n \n {\n setApprovalSubmitted(false) // reset 2 step UI for approvals\n onSwitchTokens()\n }}\n style={{ borderRadius: '50%' }}\n scale=\"sm\"\n >\n \n \n \n {recipient === null && !showWrap && isExpertMode ? (\n onChangeRecipient('')}>\n + Add a send (optional)\n \n ) : null}\n \n \n \n\n {recipient !== null && !showWrap ? (\n <>\n \n \n \n \n onChangeRecipient(null)}>\n - Remove send\n \n \n \n \n ) : null}\n\n {showWrap ? null : (\n \n \n {Boolean(trade) && (\n \n {TranslateString(1182, 'Price')}\n \n \n )}\n {allowedSlippage !== INITIAL_ALLOWED_SLIPPAGE && (\n \n {TranslateString(88, 'Slippage Tolerance')}\n {allowedSlippage / 100}%\n \n )}\n \n \n )}\n \n \n {!account ? (\n \n ) : showWrap ? (\n \n ) : noRoute && userHasSpecifiedInputOutput ? (\n \n {TranslateString(1194, 'Insufficient liquidity for this trade.')}\n \n ) : showApproveFlow ? (\n \n \n {approval === ApprovalState.PENDING ? (\n \n Approving \n \n ) : approvalSubmitted && approval === ApprovalState.APPROVED ? (\n 'Approved'\n ) : (\n `Approve ${currencies[Field.INPUT]?.symbol}`\n )}\n \n {\n if (isExpertMode) {\n handleSwap()\n } else {\n setSwapState({\n tradeToConfirm: trade,\n attemptingTxn: false,\n swapErrorMessage: undefined,\n showConfirm: true,\n txHash: undefined,\n })\n }\n }}\n style={{ width: '48%' }}\n id=\"swap-button\"\n disabled={\n !isValid || approval !== ApprovalState.APPROVED || (priceImpactSeverity > 3 && !isExpertMode)\n }\n variant={isValid && priceImpactSeverity > 2 ? 'danger' : 'primary'}\n >\n {priceImpactSeverity > 3 && !isExpertMode\n ? `Price Impact High`\n : `Swap${priceImpactSeverity > 2 ? ' Anyway' : ''}`}\n \n \n ) : (\n {\n if (isExpertMode) {\n handleSwap()\n } else {\n setSwapState({\n tradeToConfirm: trade,\n attemptingTxn: false,\n swapErrorMessage: undefined,\n showConfirm: true,\n txHash: undefined,\n })\n }\n }}\n id=\"swap-button\"\n disabled={!isValid || (priceImpactSeverity > 3 && !isExpertMode) || !!swapCallbackError}\n variant={isValid && priceImpactSeverity > 2 && !swapCallbackError ? 'danger' : 'primary'}\n width=\"100%\"\n >\n {swapInputError ||\n (priceImpactSeverity > 3 && !isExpertMode\n ? `Price Impact Too High`\n : `Swap${priceImpactSeverity > 2 ? ' Anyway' : ''}`)}\n \n )}\n {showApproveFlow && }\n {isExpertMode && swapErrorMessage ? : null}\n \n \n \n \n \n \n )\n}\n\nexport default Swap\n","import { Percent } from '@pancakeswap-libs/sdk'\nimport { ALLOWED_PRICE_IMPACT_HIGH, PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN } from '../../constants'\n\n/**\n * Given the price impact, get user confirmation.\n *\n * @param priceImpactWithoutFee price impact of the trade without the fee.\n */\nexport default function confirmPriceImpactWithoutFee(priceImpactWithoutFee: Percent): boolean {\n if (!priceImpactWithoutFee.lessThan(PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN)) {\n return (\n window.prompt(\n `This swap has a price impact of at least ${PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN.toFixed(\n 0\n )}%. Please type the word \"confirm\" to continue with this swap.`\n ) === 'confirm'\n )\n } if (!priceImpactWithoutFee.lessThan(ALLOWED_PRICE_IMPACT_HIGH)) {\n return window.confirm(\n `This swap has a price impact of at least ${ALLOWED_PRICE_IMPACT_HIGH.toFixed(\n 0\n )}%. Please confirm that you would like to continue with this swap.`\n )\n }\n return true\n}\n","import React from 'react'\nimport { Redirect, RouteComponentProps } from 'react-router-dom'\n\n// Redirects to swap but only replace the pathname\nexport function RedirectPathToSwapOnly({ location }: RouteComponentProps) {\n return \n}\n\nexport default RedirectPathToSwapOnly\n","export const EN = { code: 'en', language: 'English' }\nexport const AR = { code: 'ar', language: 'العربية' }\nexport const BN = { code: 'bn', language: 'বাংলা'}\nexport const ZHCN = { code: 'zh-CN', language: '简体中文' }\nexport const ZHTW = { code: 'zh-TW', language: '繁體中文' }\nexport const NL = { code: 'nl', language: 'Nederlands' }\nexport const FIL = { code: 'fil', language: 'Filipino' }\nexport const FI = { code: 'fi', language: 'Suomalainen' }\nexport const FR = { code: 'fr', language: 'Français' }\nexport const DE = { code: 'de', language: 'Deutsch' }\nexport const EL = { code: 'el', language: 'Ελληνικά' }\nexport const HI = { code: 'hi', language: 'हिंदी' }\nexport const HU = { code: 'hu', language: 'Magyar' }\nexport const ID = { code: 'id', language: 'Bahasa Indonesia' }\nexport const IT = { code: 'it', language: 'Italiano' }\nexport const JA = { code: 'ja', language: '日本語' }\nexport const KO = { code: 'ko', language: '한국어' }\nexport const PL = { code: 'pl', language: 'Polski' }\nexport const PTPT = { code: 'pt-PT', language: 'Português (Portugal)' }\nexport const PTBR = { code: 'pt-BR', language: 'Português (Brasil)' }\nexport const RO = { code: 'ro', language: 'Română' }\nexport const RU = { code: 'ru', language: 'Русский' }\nexport const ESES = { code: 'es-ES', language: 'Español' }\nexport const SVSE = { code: 'sv-SE', language: 'Svenska' }\nexport const TA = { code: 'ta', language: 'தமிழ்' }\nexport const TR = { code: 'tr', language: 'Türkçe' }\nexport const UK = { code: 'uk', language: 'Українська' }\nexport const VI = { code: 'vi', language: 'Tiếng Việt' }\n\nexport const allLanguages = [\n EN,\n AR,\n BN,\n ZHCN,\n ZHTW,\n NL,\n FIL,\n FI,\n FR,\n DE,\n EL,\n HI,\n HU,\n ID,\n IT,\n JA,\n KO,\n PL,\n PTPT,\n PTBR,\n RO,\n RU,\n ESES,\n SVSE,\n TA,\n TR,\n UK,\n VI\n]\n","import React, { createContext } from 'react'\n\nexport interface LanguageObject {\n code: string\n language: string\n}\ninterface LanguageState {\n selectedLanguage: LanguageObject\n setSelectedLanguage: React.Dispatch>\n translatedLanguage: LanguageObject\n setTranslatedLanguage: React.Dispatch>\n}\n\nconst defaultLanguageState: LanguageState = {\n selectedLanguage: { code: '', language: '' },\n setSelectedLanguage: (): void => undefined,\n translatedLanguage: { code: '', language: '' },\n setTranslatedLanguage: (): void => undefined,\n}\n\nexport const LanguageContext = createContext(defaultLanguageState as LanguageState)\n","import React, { useState } from 'react'\nimport { ThemeProvider as SCThemeProvider } from 'styled-components'\nimport { light, dark } from '@mozartfinance/uikit'\n\nconst CACHE_KEY = 'IS_DARK'\n\nexport interface ThemeContextType {\n isDark: boolean;\n toggleTheme: () => void;\n}\n\nconst ThemeContext = React.createContext({ isDark: false, toggleTheme: () => null })\n\nconst ThemeContextProvider: React.FC = ({ children }) => {\n const [isDark, setIsDark] = useState(() => {\n const isDarkUserSetting = localStorage.getItem(CACHE_KEY)\n return isDarkUserSetting ? JSON.parse(isDarkUserSetting) : false\n })\n\n const toggleTheme = () => {\n setIsDark((prevState: any) => {\n localStorage.setItem(CACHE_KEY, JSON.stringify(!prevState))\n return !prevState\n })\n }\n\n return (\n \n {children}\n \n )\n}\n\nexport { ThemeContext, ThemeContextProvider }\n","import { useContext } from 'react'\nimport { ThemeContext as StyledThemeCopntext } from 'styled-components'\nimport { ThemeContext } from '../ThemeContext'\n\nconst useTheme = () => {\n const { isDark, toggleTheme } = useContext(ThemeContext)\n const theme = useContext(StyledThemeCopntext)\n return { isDark, toggleTheme, theme }\n}\n\nexport default useTheme\n","import { useEffect, useState } from 'react'\n\ntype ApiResponse = {\n prices: {\n [key: string]: string\n }\n update_at: string\n}\n\n/**\n * Due to Cors the api was forked and a proxy was created\n * @see https://github.com/pancakeswap/gatsby-pancake-api/commit/e811b67a43ccc41edd4a0fa1ee704b2f510aa0ba\n */\nconst api = 'https://api.pancakeswap.com/api/v1/price'\n\nconst useGetPriceData = () => {\n const [data, setData] = useState(null)\n\n useEffect(() => {\n const fetchData = async () => {\n try {\n const response = await fetch(api)\n const res: ApiResponse = await response.json()\n\n setData(res)\n } catch (error) {\n console.error('Unable to fetch price data:', error)\n }\n }\n\n fetchData()\n }, [setData])\n\n return data\n}\n\nexport default useGetPriceData\n","import { useEffect, useState } from 'react'\nimport Cookies from 'js-cookie'\nimport { useActiveWeb3React } from 'hooks'\n\nconst initialState = {\n profileLink: 'https://pancakeswap.finance/profile',\n noProfileLink: 'https://pancakeswap.finance/profile',\n}\n\n/**\n * Note - this will only work if the app is on the same domain\n */\nconst useGetLocalProfile = () => {\n const [profile, setProfile] = useState(initialState)\n const { account } = useActiveWeb3React()\n\n useEffect(() => {\n if (account) {\n try {\n const localData = Cookies.get(`profile_${account}`)\n\n if (localData) {\n const localProfile = JSON.parse(localData)\n\n setProfile((prevProfile) => ({\n ...prevProfile,\n username: localProfile.username,\n image: localProfile.avatar,\n }))\n }\n } catch (error) {\n setProfile(initialState)\n }\n } else {\n setProfile(initialState)\n }\n }, [account, setProfile])\n\n return profile\n}\n\nexport default useGetLocalProfile\n","import { MenuEntry } from '@mozartfinance/uikit'\n\nconst config: MenuEntry[] = [\n {\n label: 'Home',\n icon: 'HomeIcon',\n href: '/',\n },\n {\n label: 'Trade',\n icon: 'TradeIcon',\n items: [\n {\n label: 'Exchange',\n href: 'https://exchange.mozartfinance.io',\n },\n {\n label: 'Liquidity',\n href: 'https://exchange.mozartfinance.io/#/pool',\n },\n ],\n },\n {\n label: 'Farms',\n icon: 'FarmIcon',\n href: '/farms',\n },\n {\n label: 'Pools',\n icon: 'PoolIcon',\n href: '/pools',\n },\n {\n label: 'More',\n icon: 'MoreIcon',\n items: [\n {\n label: 'Github',\n href: 'https://github.com/mozartfinance',\n },\n {\n label: 'Docs',\n href: 'https://mozartfinance.gitbook.io/mozart-finance/',\n },\n {\n label: 'Blog',\n href: 'https://mozart-finance.medium.com/',\n },\n ],\n },\n {\n label: 'Audit by IB',\n icon: 'TicketIcon',\n href: 'https://github.com/ImmuneBytes/Smart-Contract-Audit-Reports/blob/main/Mozart%20Finance/Mozart%20Finance%20(PIANO)%20-%20Final%20Audit%20Report.pdf',\n },\n]\n\nexport default config\n","import React, { useContext } from 'react'\nimport { Menu as UikitMenu} from '@mozartfinance/uikit'\nimport { useWeb3React } from '@web3-react/core'\nimport { allLanguages } from 'constants/localisation/languageCodes'\nimport { LanguageContext } from 'hooks/LanguageContext'\nimport useTheme from 'hooks/useTheme'\nimport useGetPriceData from 'hooks/useGetPriceData'\nimport useGetLocalProfile from 'hooks/useGetLocalProfile'\nimport useAuth from 'hooks/useAuth'\nimport links from './config'\n\nconst Menu: React.FC = (props) => {\n const { account } = useWeb3React()\n const { login, logout } = useAuth()\n const { selectedLanguage, setSelectedLanguage } = useContext(LanguageContext)\n const { isDark, toggleTheme } = useTheme()\n const priceData = useGetPriceData()\n const cakePriceUsd = priceData ? Number(priceData.prices.PIANO) : undefined\n const profile = useGetLocalProfile()\n\n return (\n \n )\n}\n\nexport default Menu\n","import { useEffect } from 'react'\nimport useGetPriceData from './useGetPriceData'\n\nconst useGetDocumentTitlePrice = () => {\n const priceData = useGetPriceData()\n const cakePriceUsd = priceData ? parseFloat(priceData.prices.PIANO) : 0\n\n \n\n const cakePriceUsdString =\n Number.isNaN(cakePriceUsd) || cakePriceUsd === 0\n ? ''\n : ` - $${cakePriceUsd.toLocaleString(undefined, {\n minimumFractionDigits: 3,\n maximumFractionDigits: 3,\n })}`\n\n useEffect(() => {\n document.title = `Mozart Finance${cakePriceUsdString}`\n }, [cakePriceUsdString])\n}\nexport default useGetDocumentTitlePrice\n","import React, { Suspense, useEffect, useState } from 'react'\nimport { HashRouter, Route, Switch } from 'react-router-dom'\nimport styled from 'styled-components'\nimport { Credentials, StringTranslations } from '@crowdin/crowdin-api-client'\nimport Popups from '../components/Popups'\nimport Web3ReactManager from '../components/Web3ReactManager'\nimport { RedirectDuplicateTokenIds, RedirectOldAddLiquidityPathStructure } from './AddLiquidity/redirects'\nimport { RedirectOldRemoveLiquidityPathStructure } from './RemoveLiquidity/redirects'\nimport AddLiquidity from './AddLiquidity'\nimport Pool from './Pool'\nimport PoolFinder from './PoolFinder'\nimport RemoveLiquidity from './RemoveLiquidity'\nimport Swap from './Swap'\nimport { RedirectPathToSwapOnly } from './Swap/redirects'\nimport { EN, allLanguages } from '../constants/localisation/languageCodes'\nimport { LanguageContext } from '../hooks/LanguageContext'\nimport { TranslationsContext } from '../hooks/TranslationsContext'\n\nimport Menu from '../components/Menu'\nimport useGetDocumentTitlePrice from '../hooks/useGetDocumentTitlePrice'\n\nconst AppWrapper = styled.div`\n display: flex;\n flex-flow: column;\n align-items: flex-start;\n overflow-x: hidden;\n`\n\nconst BodyWrapper = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n padding: 32px 16px;\n align-items: center;\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n z-index: 1;\n justify-content: center;\n background-image: url('/images/group-pancake.svg');\n background-repeat: no-repeat;\n background-position: bottom 24px center;\n background-size: 90%;\n\n ${({ theme }) => theme.mediaQueries.xs} {\n background-size: auto;\n }\n\n ${({ theme }) => theme.mediaQueries.lg} {\n background-image: url('/images/arch-${({ theme }) => (theme.isDark ? 'dark' : 'light')}.svg'),\n url('/images/mozart-playing.png'), url('/images/mozart-standup-2.png');\n background-repeat: no-repeat;\n background-position: center 420px, 10% 230px, 90% 230px;\n background-size: contain, 266px, 266px;\n min-height: 90vh;\n }\n`\n\nconst Marginer = styled.div`\n margin-top: 5rem;\n`\n\nexport default function App() {\n const [selectedLanguage, setSelectedLanguage] = useState(undefined)\n const [translatedLanguage, setTranslatedLanguage] = useState(undefined)\n const [translations, setTranslations] = useState>([])\n const apiKey = `${process.env.REACT_APP_CROWDIN_APIKEY}`\n const projectId = parseInt(`${process.env.REACT_APP_CROWDIN_PROJECTID}`)\n const fileId = 6\n\n const credentials: Credentials = {\n token: apiKey,\n }\n\n const stringTranslationsApi = new StringTranslations(credentials)\n\n const getStoredLang = (storedLangCode: string) => {\n return allLanguages.filter((language) => {\n return language.code === storedLangCode\n })[0]\n }\n\n useEffect(() => {\n const storedLangCode = localStorage.getItem('pancakeSwapLanguage')\n if (storedLangCode) {\n const storedLang = getStoredLang(storedLangCode)\n setSelectedLanguage(storedLang)\n } else {\n setSelectedLanguage(EN)\n }\n }, [])\n\n const fetchTranslationsForSelectedLanguage = async () => {\n stringTranslationsApi\n .listLanguageTranslations(projectId, selectedLanguage.code, undefined, fileId, 200)\n .then((translationApiResponse) => {\n if (translationApiResponse.data.length < 1) {\n setTranslations(['error'])\n } else {\n setTranslations(translationApiResponse.data)\n }\n })\n .then(() => setTranslatedLanguage(selectedLanguage))\n .catch((error) => {\n setTranslations(['error'])\n console.error(error)\n })\n }\n\n useEffect(() => {\n if (selectedLanguage) {\n fetchTranslationsForSelectedLanguage()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedLanguage])\n\n useGetDocumentTitlePrice()\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n {/* Redirection: These old routes are still used in the code base */}\n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import { useCallback, useEffect, useState } from 'react'\n\nconst VISIBILITY_STATE_SUPPORTED = 'visibilityState' in document\n\nfunction isWindowVisible() {\n return !VISIBILITY_STATE_SUPPORTED || document.visibilityState !== 'hidden'\n}\n\n/**\n * Returns whether the window is currently visible to the user.\n */\nexport default function useIsWindowVisible(): boolean {\n const [focused, setFocused] = useState(isWindowVisible())\n const listener = useCallback(() => {\n setFocused(isWindowVisible())\n }, [setFocused])\n\n useEffect(() => {\n if (!VISIBILITY_STATE_SUPPORTED) return undefined\n\n document.addEventListener('visibilitychange', listener)\n return () => {\n document.removeEventListener('visibilitychange', listener)\n }\n }, [listener])\n\n return focused\n}\n","import { useCallback, useEffect, useState } from 'react'\nimport { useDispatch } from 'react-redux'\nimport { useActiveWeb3React } from '../../hooks'\nimport useDebounce from '../../hooks/useDebounce'\nimport useIsWindowVisible from '../../hooks/useIsWindowVisible'\nimport { updateBlockNumber } from './actions'\n\nexport default function Updater(): null {\n const { library, chainId } = useActiveWeb3React()\n const dispatch = useDispatch()\n\n const windowVisible = useIsWindowVisible()\n\n const [state, setState] = useState<{ chainId: number | undefined; blockNumber: number | null }>({\n chainId,\n blockNumber: null,\n })\n\n const blockNumberCallback = useCallback(\n (blockNumber: number) => {\n setState((s) => {\n if (chainId === s.chainId) {\n if (typeof s.blockNumber !== 'number') return { chainId, blockNumber }\n return { chainId, blockNumber: Math.max(blockNumber, s.blockNumber) }\n }\n return s\n })\n },\n [chainId, setState]\n )\n\n // attach/detach listeners\n useEffect(() => {\n if (!library || !chainId || !windowVisible) return undefined\n\n setState({ chainId, blockNumber: null })\n\n library\n .getBlockNumber()\n .then(blockNumberCallback)\n .catch((error) => console.error(`Failed to get block number for chainId: ${chainId}`, error))\n\n library.on('block', blockNumberCallback)\n return () => {\n library.removeListener('block', blockNumberCallback)\n }\n }, [dispatch, chainId, library, blockNumberCallback, windowVisible])\n\n const debouncedState = useDebounce(state, 100)\n\n useEffect(() => {\n if (!debouncedState.chainId || !debouncedState.blockNumber || !windowVisible) return\n dispatch(updateBlockNumber({ chainId: debouncedState.chainId, blockNumber: debouncedState.blockNumber }))\n }, [windowVisible, dispatch, debouncedState.blockNumber, debouncedState.chainId])\n\n return null\n}\n","import { getVersionUpgrade, minVersionBump, VersionUpgrade } from '@uniswap/token-lists'\nimport { useCallback, useEffect } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { useActiveWeb3React } from '../../hooks'\nimport { useFetchListCallback } from '../../hooks/useFetchListCallback'\nimport useInterval from '../../hooks/useInterval'\nimport useIsWindowVisible from '../../hooks/useIsWindowVisible'\nimport { addPopup } from '../application/actions'\nimport { AppDispatch, AppState } from '../index'\nimport { acceptListUpdate } from './actions'\n\nexport default function Updater(): null {\n const { library } = useActiveWeb3React()\n const dispatch = useDispatch()\n const lists = useSelector((state) => state.lists.byUrl)\n\n const isWindowVisible = useIsWindowVisible()\n\n const fetchList = useFetchListCallback()\n\n const fetchAllListsCallback = useCallback(() => {\n if (!isWindowVisible) return\n Object.keys(lists).forEach((url) =>\n fetchList(url).catch((error) => console.error('interval list fetching error', error))\n )\n }, [fetchList, isWindowVisible, lists])\n\n // fetch all lists every 10 minutes, but only after we initialize library\n useInterval(fetchAllListsCallback, library ? 1000 * 60 * 10 : null)\n\n // whenever a list is not loaded and not loading, try again to load it\n useEffect(() => {\n Object.keys(lists).forEach((listUrl) => {\n const list = lists[listUrl]\n\n if (!list.current && !list.loadingRequestId && !list.error) {\n fetchList(listUrl).catch((error) => console.error('list added fetching error', error))\n }\n })\n }, [dispatch, fetchList, library, lists])\n\n // automatically update lists if versions are minor/patch\n useEffect(() => {\n Object.keys(lists).forEach((listUrl) => {\n const list = lists[listUrl]\n if (list.current && list.pendingUpdate) {\n const bump = getVersionUpgrade(list.current.version, list.pendingUpdate.version)\n switch (bump) {\n case VersionUpgrade.NONE:\n throw new Error('unexpected no version bump')\n case VersionUpgrade.PATCH:\n case VersionUpgrade.MINOR:\n const min = minVersionBump(list.current.tokens, list.pendingUpdate.tokens)\n // automatically update minor/patch as long as bump matches the min update\n if (bump >= min) {\n dispatch(acceptListUpdate(listUrl))\n dispatch(\n addPopup({\n key: listUrl,\n content: {\n listUpdate: {\n listUrl,\n oldList: list.current,\n newList: list.pendingUpdate,\n auto: true,\n },\n },\n })\n )\n } else {\n console.error(\n `List at url ${listUrl} could not automatically update because the version bump was only PATCH/MINOR while the update had breaking changes and should have been MAJOR`\n )\n }\n break\n\n case VersionUpgrade.MAJOR:\n dispatch(\n addPopup({\n key: listUrl,\n content: {\n listUpdate: {\n listUrl,\n auto: false,\n oldList: list.current,\n newList: list.pendingUpdate,\n },\n },\n removeAfterMs: null,\n })\n )\n }\n }\n })\n }, [dispatch, lists])\n\n return null\n}\n","function wait(ms: number): Promise {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nfunction waitRandom(min: number, max: number): Promise {\n return wait(min + Math.round(Math.random() * Math.max(0, max - min)))\n}\n\n/**\n * This error is thrown if the function is cancelled before completing\n */\nexport class CancelledError extends Error {\n constructor() {\n super('Cancelled')\n }\n}\n\n/**\n * Throw this error if the function should retry\n */\nexport class RetryableError extends Error {}\n\n/**\n * Retries the function that returns the promise until the promise successfully resolves up to n retries\n * @param fn function to retry\n * @param n how many times to retry\n * @param minWait min wait between retries in ms\n * @param maxWait max wait between retries in ms\n */\nexport function retry(\n fn: () => Promise,\n { n, minWait, maxWait }: { n: number; minWait: number; maxWait: number }\n): { promise: Promise; cancel: () => void } {\n let completed = false\n let rejectCancelled: (error: Error) => void\n // eslint-disable-next-line no-async-promise-executor\n const promise = new Promise(async (resolve, reject) => {\n rejectCancelled = reject\n // eslint-disable-next-line no-constant-condition\n while (true) {\n let result: T\n try {\n result = await fn()\n if (!completed) {\n resolve(result)\n completed = true\n }\n break\n } catch (error) {\n if (completed) {\n break\n }\n if (n <= 0 || !(error instanceof RetryableError)) {\n reject(error)\n completed = true\n break\n }\n n--\n }\n await waitRandom(minWait, maxWait)\n }\n })\n return {\n promise,\n cancel: () => {\n if (completed) return\n completed = true\n rejectCancelled(new CancelledError())\n },\n }\n}\n","import { Contract } from '@ethersproject/contracts'\nimport { useEffect, useMemo, useRef } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { useActiveWeb3React } from '../../hooks'\nimport { useMulticallContract } from '../../hooks/useContract'\nimport useDebounce from '../../hooks/useDebounce'\nimport chunkArray from '../../utils/chunkArray'\nimport { CancelledError, retry, RetryableError } from '../../utils/retry'\nimport { useBlockNumber } from '../application/hooks'\nimport { AppDispatch, AppState } from '../index'\nimport {\n Call,\n errorFetchingMulticallResults,\n fetchingMulticallResults,\n parseCallKey,\n updateMulticallResults,\n} from './actions'\n\n// chunk calls so we do not exceed the gas limit\nconst CALL_CHUNK_SIZE = 500\n\n/**\n * Fetches a chunk of calls, enforcing a minimum block number constraint\n * @param multicallContract multicall contract to fetch against\n * @param chunk chunk of calls to make\n * @param minBlockNumber minimum block number of the result set\n */\nasync function fetchChunk(\n multicallContract: Contract,\n chunk: Call[],\n minBlockNumber: number\n): Promise<{ results: string[]; blockNumber: number }> {\n let resultsBlockNumber\n let returnData\n try {\n [resultsBlockNumber, returnData] = await multicallContract.aggregate(\n chunk.map((obj) => [obj.address, obj.callData])\n )\n } catch (error) {\n console.info('Failed to fetch chunk inside retry', error)\n throw error\n }\n if (resultsBlockNumber.toNumber() < minBlockNumber) {\n throw new RetryableError('Fetched for old block number')\n }\n return { results: returnData, blockNumber: resultsBlockNumber.toNumber() }\n}\n\n/**\n * From the current all listeners state, return each call key mapped to the\n * minimum number of blocks per fetch. This is how often each key must be fetched.\n * @param allListeners the all listeners state\n * @param chainId the current chain id\n */\nexport function activeListeningKeys(\n allListeners: AppState['multicall']['callListeners'],\n chainId?: number\n): { [callKey: string]: number } {\n if (!allListeners || !chainId) return {}\n const listeners = allListeners[chainId]\n if (!listeners) return {}\n\n return Object.keys(listeners).reduce<{ [callKey: string]: number }>((memo, callKey) => {\n const keyListeners = listeners[callKey]\n\n memo[callKey] = Object.keys(keyListeners)\n .filter((key) => {\n const blocksPerFetch = parseInt(key)\n if (blocksPerFetch <= 0) return false\n return keyListeners[blocksPerFetch] > 0\n })\n .reduce((previousMin, current) => {\n return Math.min(previousMin, parseInt(current))\n }, Infinity)\n return memo\n }, {})\n}\n\n/**\n * Return the keys that need to be refetched\n * @param callResults current call result state\n * @param listeningKeys each call key mapped to how old the data can be in blocks\n * @param chainId the current chain id\n * @param latestBlockNumber the latest block number\n */\nexport function outdatedListeningKeys(\n callResults: AppState['multicall']['callResults'],\n listeningKeys: { [callKey: string]: number },\n chainId: number | undefined,\n latestBlockNumber: number | undefined\n): string[] {\n if (!chainId || !latestBlockNumber) return []\n const results = callResults[chainId]\n // no results at all, load everything\n if (!results) return Object.keys(listeningKeys)\n\n return Object.keys(listeningKeys).filter((callKey) => {\n const blocksPerFetch = listeningKeys[callKey]\n\n const data = callResults[chainId][callKey]\n // no data, must fetch\n if (!data) return true\n\n const minDataBlockNumber = latestBlockNumber - (blocksPerFetch - 1)\n\n // already fetching it for a recent enough block, don't refetch it\n if (data.fetchingBlockNumber && data.fetchingBlockNumber >= minDataBlockNumber) return false\n\n // if data is older than minDataBlockNumber, fetch it\n return !data.blockNumber || data.blockNumber < minDataBlockNumber\n })\n}\n\nexport default function Updater(): null {\n const dispatch = useDispatch()\n const state = useSelector((s) => s.multicall)\n // wait for listeners to settle before triggering updates\n const debouncedListeners = useDebounce(state.callListeners, 100)\n const latestBlockNumber = useBlockNumber()\n const { chainId } = useActiveWeb3React()\n const multicallContract = useMulticallContract()\n const cancellations = useRef<{ blockNumber: number; cancellations: (() => void)[] }>()\n\n const listeningKeys: { [callKey: string]: number } = useMemo(() => {\n return activeListeningKeys(debouncedListeners, chainId)\n }, [debouncedListeners, chainId])\n\n const unserializedOutdatedCallKeys = useMemo(() => {\n return outdatedListeningKeys(state.callResults, listeningKeys, chainId, latestBlockNumber)\n }, [chainId, state.callResults, listeningKeys, latestBlockNumber])\n\n const serializedOutdatedCallKeys = useMemo(() => JSON.stringify(unserializedOutdatedCallKeys.sort()), [\n unserializedOutdatedCallKeys,\n ])\n\n useEffect(() => {\n if (!latestBlockNumber || !chainId || !multicallContract) return\n\n const outdatedCallKeys: string[] = JSON.parse(serializedOutdatedCallKeys)\n if (outdatedCallKeys.length === 0) return\n const calls = outdatedCallKeys.map((key) => parseCallKey(key))\n // .filter(item => item.address.toLowerCase() !== '0xBCfCcbde45cE874adCB698cC183deBcF17952812'.toLowerCase())\n\n const chunkedCalls = chunkArray(calls, CALL_CHUNK_SIZE)\n\n if (cancellations.current?.blockNumber !== latestBlockNumber) {\n cancellations.current?.cancellations?.forEach((c) => c())\n }\n\n dispatch(\n fetchingMulticallResults({\n calls,\n chainId,\n fetchingBlockNumber: latestBlockNumber,\n })\n )\n\n cancellations.current = {\n blockNumber: latestBlockNumber,\n cancellations: chunkedCalls.map((chunk, index) => {\n const { cancel, promise } = retry(() => fetchChunk(multicallContract, chunk, latestBlockNumber), {\n n: Infinity,\n minWait: 2500,\n maxWait: 3500,\n })\n promise\n .then(({ results: returnData, blockNumber: fetchBlockNumber }) => {\n cancellations.current = { cancellations: [], blockNumber: latestBlockNumber }\n\n // accumulates the length of all previous indices\n const firstCallKeyIndex = chunkedCalls.slice(0, index).reduce((memo, curr) => memo + curr.length, 0)\n const lastCallKeyIndex = firstCallKeyIndex + returnData.length\n\n dispatch(\n updateMulticallResults({\n chainId,\n results: outdatedCallKeys\n .slice(firstCallKeyIndex, lastCallKeyIndex)\n .reduce<{ [callKey: string]: string | null }>((memo, callKey, i) => {\n memo[callKey] = returnData[i] ?? null\n return memo\n }, {}),\n blockNumber: fetchBlockNumber,\n })\n )\n })\n .catch((error: any) => {\n if (error instanceof CancelledError) {\n console.error('Cancelled fetch for blockNumber', latestBlockNumber)\n return\n }\n console.error('Failed to fetch multicall chunk', chunk, chainId, error)\n dispatch(\n errorFetchingMulticallResults({\n calls: chunk,\n chainId,\n fetchingBlockNumber: latestBlockNumber,\n })\n )\n })\n return cancel\n }),\n }\n }, [chainId, multicallContract, dispatch, serializedOutdatedCallKeys, latestBlockNumber])\n\n return null\n}\n","// chunks array into chunks of maximum size\n// evenly distributes items among the chunks\nexport default function chunkArray(items: T[], maxChunkSize: number): T[][] {\n if (maxChunkSize < 1) throw new Error('maxChunkSize must be gte 1')\n if (items.length <= maxChunkSize) return [items]\n\n const numChunks: number = Math.ceil(items.length / maxChunkSize)\n const chunkSize = Math.ceil(items.length / numChunks)\n\n return [...Array(numChunks).keys()].map(ix => items.slice(ix * chunkSize, ix * chunkSize + chunkSize))\n}\n","import { useEffect } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { useActiveWeb3React } from '../../hooks'\nimport { useAddPopup, useBlockNumber } from '../application/hooks'\nimport { AppDispatch, AppState } from '../index'\nimport { checkedTransaction, finalizeTransaction } from './actions'\n\nexport function shouldCheck(\n lastBlockNumber: number,\n tx: { addedTime: number; receipt?: any; lastCheckedBlockNumber?: number }\n): boolean {\n if (tx.receipt) return false\n if (!tx.lastCheckedBlockNumber) return true\n const blocksSinceCheck = lastBlockNumber - tx.lastCheckedBlockNumber\n if (blocksSinceCheck < 1) return false\n const minutesPending = (new Date().getTime() - tx.addedTime) / 1000 / 60\n if (minutesPending > 60) {\n // every 10 blocks if pending for longer than an hour\n return blocksSinceCheck > 9\n }\n if (minutesPending > 5) {\n // every 3 blocks if pending more than 5 minutes\n return blocksSinceCheck > 2\n }\n // otherwise every block\n return true\n}\n\nexport default function Updater(): null {\n const { chainId, library } = useActiveWeb3React()\n\n const lastBlockNumber = useBlockNumber()\n\n const dispatch = useDispatch()\n const state = useSelector((s) => s.transactions)\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const transactions = chainId ? state[chainId] ?? {} : {}\n\n // show popup on confirm\n const addPopup = useAddPopup()\n\n useEffect(() => {\n if (!chainId || !library || !lastBlockNumber) return\n\n Object.keys(transactions)\n .filter((hash) => shouldCheck(lastBlockNumber, transactions[hash]))\n .forEach((hash) => {\n library\n .getTransactionReceipt(hash)\n .then((receipt) => {\n if (receipt) {\n dispatch(\n finalizeTransaction({\n chainId,\n hash,\n receipt: {\n blockHash: receipt.blockHash,\n blockNumber: receipt.blockNumber,\n contractAddress: receipt.contractAddress,\n from: receipt.from,\n status: receipt.status,\n to: receipt.to,\n transactionHash: receipt.transactionHash,\n transactionIndex: receipt.transactionIndex,\n },\n })\n )\n\n addPopup(\n {\n txn: {\n hash,\n success: receipt.status === 1,\n summary: transactions[hash]?.summary,\n },\n },\n hash\n )\n } else {\n dispatch(checkedTransaction({ chainId, hash, blockNumber: lastBlockNumber }))\n }\n })\n .catch((error) => {\n console.error(`failed to check transaction hash: ${hash}`, error)\n })\n })\n }, [chainId, library, transactions, lastBlockNumber, dispatch, addPopup])\n\n return null\n}\n","import React from 'react'\nimport { useSelector } from 'react-redux'\nimport { ToastContainer, Toast } from '@mozartfinance/uikit'\nimport useToast from 'hooks/useToast'\nimport { AppState } from '../../state'\n\nconst ToastListener = () => {\n const toasts: Toast[] = useSelector((state: AppState) => state.toasts.data)\n const { remove } = useToast()\n\n const handleRemove = (id: string) => remove(id)\n\n return \n}\n\nexport default ToastListener\n","import { createReducer, nanoid } from '@reduxjs/toolkit'\nimport {\n addPopup,\n PopupContent,\n removePopup,\n toggleWalletModal,\n toggleSettingsMenu,\n updateBlockNumber\n} from './actions'\n\ntype PopupList = Array<{ key: string; show: boolean; content: PopupContent; removeAfterMs: number | null }>\n\nexport interface ApplicationState {\n blockNumber: { [chainId: number]: number }\n popupList: PopupList\n walletModalOpen: boolean\n settingsMenuOpen: boolean\n}\n\nconst initialState: ApplicationState = {\n blockNumber: {},\n popupList: [],\n walletModalOpen: false,\n settingsMenuOpen: false\n}\n\nexport default createReducer(initialState, builder =>\n builder\n .addCase(updateBlockNumber, (state, action) => {\n const { chainId, blockNumber } = action.payload\n if (typeof state.blockNumber[chainId] !== 'number') {\n state.blockNumber[chainId] = blockNumber\n } else {\n state.blockNumber[chainId] = Math.max(blockNumber, state.blockNumber[chainId])\n }\n })\n .addCase(toggleWalletModal, state => {\n state.walletModalOpen = !state.walletModalOpen\n })\n .addCase(toggleSettingsMenu, state => {\n state.settingsMenuOpen = !state.settingsMenuOpen\n })\n .addCase(addPopup, (state, { payload: { content, key, removeAfterMs = 15000 } }) => {\n state.popupList = (key ? state.popupList.filter(popup => popup.key !== key) : state.popupList).concat([\n {\n key: key || nanoid(),\n show: true,\n content,\n removeAfterMs\n }\n ])\n })\n .addCase(removePopup, (state, { payload: { key } }) => {\n state.popupList.forEach(p => {\n if (p.key === key) {\n p.show = false\n }\n })\n })\n)\n","import { createAction } from '@reduxjs/toolkit'\n\n// fired once when the app reloads but before the app renders\n// allows any updates to be applied to store data loaded from localStorage\nexport const updateVersion = createAction('global/updateVersion')\n\nexport default createAction\n","import { createReducer } from '@reduxjs/toolkit'\nimport { INITIAL_ALLOWED_SLIPPAGE, DEFAULT_DEADLINE_FROM_NOW } from '../../constants'\nimport { updateVersion } from '../global/actions'\nimport {\n addSerializedPair,\n addSerializedToken,\n removeSerializedPair,\n removeSerializedToken,\n SerializedPair,\n SerializedToken,\n updateMatchesDarkMode,\n updateUserDarkMode,\n updateUserExpertMode,\n updateUserSlippageTolerance,\n updateUserDeadline,\n muteAudio,\n unmuteAudio\n} from './actions'\n\nconst currentTimestamp = () => new Date().getTime()\n\nexport interface UserState {\n // the timestamp of the last updateVersion action\n lastUpdateVersionTimestamp?: number\n\n userDarkMode: boolean | null // the user's choice for dark mode or light mode\n matchesDarkMode: boolean // whether the dark mode media query matches\n\n userExpertMode: boolean\n\n // user defined slippage tolerance in bips, used in all txns\n userSlippageTolerance: number\n\n // deadline set by user in minutes, used in all txns\n userDeadline: number\n\n tokens: {\n [chainId: number]: {\n [address: string]: SerializedToken\n }\n }\n\n pairs: {\n [chainId: number]: {\n // keyed by token0Address:token1Address\n [key: string]: SerializedPair\n }\n }\n\n timestamp: number\n\n audioPlay: boolean\n}\n\nfunction pairKey(token0Address: string, token1Address: string) {\n return `${token0Address};${token1Address}`\n}\n\nexport const initialState: UserState = {\n userDarkMode: null,\n matchesDarkMode: false,\n userExpertMode: false,\n userSlippageTolerance: INITIAL_ALLOWED_SLIPPAGE,\n userDeadline: DEFAULT_DEADLINE_FROM_NOW,\n tokens: {},\n pairs: {},\n timestamp: currentTimestamp(),\n audioPlay: true\n}\n\nexport default createReducer(initialState, builder =>\n builder\n .addCase(updateVersion, state => {\n // slippage isnt being tracked in local storage, reset to default\n // noinspection SuspiciousTypeOfGuard\n if (typeof state.userSlippageTolerance !== 'number') {\n state.userSlippageTolerance = INITIAL_ALLOWED_SLIPPAGE\n }\n\n // deadline isnt being tracked in local storage, reset to default\n // noinspection SuspiciousTypeOfGuard\n if (typeof state.userDeadline !== 'number') {\n state.userDeadline = DEFAULT_DEADLINE_FROM_NOW\n }\n\n state.lastUpdateVersionTimestamp = currentTimestamp()\n })\n .addCase(updateUserDarkMode, (state, action) => {\n state.userDarkMode = action.payload.userDarkMode\n state.timestamp = currentTimestamp()\n })\n .addCase(updateMatchesDarkMode, (state, action) => {\n state.matchesDarkMode = action.payload.matchesDarkMode\n state.timestamp = currentTimestamp()\n })\n .addCase(updateUserExpertMode, (state, action) => {\n state.userExpertMode = action.payload.userExpertMode\n state.timestamp = currentTimestamp()\n })\n .addCase(updateUserSlippageTolerance, (state, action) => {\n state.userSlippageTolerance = action.payload.userSlippageTolerance\n state.timestamp = currentTimestamp()\n })\n .addCase(updateUserDeadline, (state, action) => {\n state.userDeadline = action.payload.userDeadline\n state.timestamp = currentTimestamp()\n })\n .addCase(addSerializedToken, (state, { payload: { serializedToken } }) => {\n state.tokens[serializedToken.chainId] = state.tokens[serializedToken.chainId] || {}\n state.tokens[serializedToken.chainId][serializedToken.address] = serializedToken\n state.timestamp = currentTimestamp()\n })\n .addCase(removeSerializedToken, (state, { payload: { address, chainId } }) => {\n state.tokens[chainId] = state.tokens[chainId] || {}\n delete state.tokens[chainId][address]\n state.timestamp = currentTimestamp()\n })\n .addCase(addSerializedPair, (state, { payload: { serializedPair } }) => {\n if (\n serializedPair.token0.chainId === serializedPair.token1.chainId &&\n serializedPair.token0.address !== serializedPair.token1.address\n ) {\n const {chainId} = serializedPair.token0\n state.pairs[chainId] = state.pairs[chainId] || {}\n state.pairs[chainId][pairKey(serializedPair.token0.address, serializedPair.token1.address)] = serializedPair\n }\n state.timestamp = currentTimestamp()\n })\n .addCase(removeSerializedPair, (state, { payload: { chainId, tokenAAddress, tokenBAddress } }) => {\n if (state.pairs[chainId]) {\n // just delete both keys if either exists\n delete state.pairs[chainId][pairKey(tokenAAddress, tokenBAddress)]\n delete state.pairs[chainId][pairKey(tokenBAddress, tokenAAddress)]\n }\n state.timestamp = currentTimestamp()\n })\n .addCase(muteAudio, state => {\n state.audioPlay = false\n })\n .addCase(unmuteAudio, state => {\n state.audioPlay = true\n })\n)\n","import { createReducer } from '@reduxjs/toolkit'\nimport {\n addTransaction,\n checkedTransaction,\n clearAllTransactions,\n finalizeTransaction,\n SerializableTransactionReceipt\n} from './actions'\n\nconst now = () => new Date().getTime()\n\nexport interface TransactionDetails {\n hash: string\n approval?: { tokenAddress: string; spender: string }\n summary?: string\n receipt?: SerializableTransactionReceipt\n lastCheckedBlockNumber?: number\n addedTime: number\n confirmedTime?: number\n from: string\n}\n\nexport interface TransactionState {\n [chainId: number]: {\n [txHash: string]: TransactionDetails\n }\n}\n\nexport const initialState: TransactionState = {}\n\nexport default createReducer(initialState, builder =>\n builder\n .addCase(addTransaction, (transactions, { payload: { chainId, from, hash, approval, summary } }) => {\n if (transactions[chainId]?.[hash]) {\n throw Error('Attempted to add existing transaction.')\n }\n const txs = transactions[chainId] ?? {}\n txs[hash] = { hash, approval, summary, from, addedTime: now() }\n transactions[chainId] = txs\n })\n .addCase(clearAllTransactions, (transactions, { payload: { chainId } }) => {\n if (!transactions[chainId]) return\n transactions[chainId] = {}\n })\n .addCase(checkedTransaction, (transactions, { payload: { chainId, hash, blockNumber } }) => {\n const tx = transactions[chainId]?.[hash]\n if (!tx) {\n return\n }\n if (!tx.lastCheckedBlockNumber) {\n tx.lastCheckedBlockNumber = blockNumber\n } else {\n tx.lastCheckedBlockNumber = Math.max(blockNumber, tx.lastCheckedBlockNumber)\n }\n })\n .addCase(finalizeTransaction, (transactions, { payload: { hash, chainId, receipt } }) => {\n const tx = transactions[chainId]?.[hash]\n if (!tx) {\n return\n }\n tx.receipt = receipt\n tx.confirmedTime = now()\n })\n)\n","import { createReducer } from '@reduxjs/toolkit'\nimport { Field, replaceSwapState, selectCurrency, setRecipient, switchCurrencies, typeInput } from './actions'\n\nexport interface SwapState {\n readonly independentField: Field\n readonly typedValue: string\n readonly [Field.INPUT]: {\n readonly currencyId: string | undefined\n }\n readonly [Field.OUTPUT]: {\n readonly currencyId: string | undefined\n }\n // the typed recipient address or ENS name, or null if swap should go to sender\n readonly recipient: string | null\n}\n\nconst initialState: SwapState = {\n independentField: Field.INPUT,\n typedValue: '',\n [Field.INPUT]: {\n currencyId: '',\n },\n [Field.OUTPUT]: {\n currencyId: '',\n },\n recipient: null,\n}\n\nexport default createReducer(initialState, (builder) =>\n builder\n .addCase(\n replaceSwapState,\n (state, { payload: { typedValue, recipient, field, inputCurrencyId, outputCurrencyId } }) => {\n return {\n [Field.INPUT]: {\n currencyId: inputCurrencyId,\n },\n [Field.OUTPUT]: {\n currencyId: outputCurrencyId,\n },\n independentField: field,\n typedValue,\n recipient,\n }\n }\n )\n .addCase(selectCurrency, (state, { payload: { currencyId, field } }) => {\n const otherField = field === Field.INPUT ? Field.OUTPUT : Field.INPUT\n if (currencyId === state[otherField].currencyId) {\n // the case where we have to swap the order\n return {\n ...state,\n independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT,\n [field]: { currencyId },\n [otherField]: { currencyId: state[field].currencyId },\n }\n }\n // the normal case\n return {\n ...state,\n [field]: { currencyId },\n }\n })\n .addCase(switchCurrencies, (state) => {\n return {\n ...state,\n independentField: state.independentField === Field.INPUT ? Field.OUTPUT : Field.INPUT,\n [Field.INPUT]: { currencyId: state[Field.OUTPUT].currencyId },\n [Field.OUTPUT]: { currencyId: state[Field.INPUT].currencyId },\n }\n })\n .addCase(typeInput, (state, { payload: { field, typedValue } }) => {\n return {\n ...state,\n independentField: field,\n typedValue,\n }\n })\n .addCase(setRecipient, (state, { payload: { recipient } }) => {\n state.recipient = recipient\n })\n)\n","import { createReducer } from '@reduxjs/toolkit'\nimport { Field, resetMintState, typeInput } from './actions'\n\nexport interface MintState {\n readonly independentField: Field\n readonly typedValue: string\n readonly otherTypedValue: string // for the case when there's no liquidity\n}\n\nconst initialState: MintState = {\n independentField: Field.CURRENCY_A,\n typedValue: '',\n otherTypedValue: ''\n}\n\nexport default createReducer(initialState, builder =>\n builder\n .addCase(resetMintState, () => initialState)\n .addCase(typeInput, (state, { payload: { field, typedValue, noLiquidity } }) => {\n if (noLiquidity) {\n // they're typing into the field they've last typed in\n if (field === state.independentField) {\n return {\n ...state,\n independentField: field,\n typedValue\n }\n }\n // they're typing into a new field, store the other value\n \n return {\n ...state,\n independentField: field,\n typedValue,\n otherTypedValue: state.typedValue\n }\n \n } \n return {\n ...state,\n independentField: field,\n typedValue,\n otherTypedValue: ''\n }\n \n })\n)\n","import { createReducer } from '@reduxjs/toolkit'\nimport { getVersionUpgrade, VersionUpgrade } from '@uniswap/token-lists'\n// eslint-disable-next-line import/no-unresolved\nimport { TokenList } from '@uniswap/token-lists/dist/types'\nimport { DEFAULT_LIST_OF_LISTS, DEFAULT_TOKEN_LIST_URL } from '../../constants/lists'\nimport { updateVersion } from '../global/actions'\nimport { acceptListUpdate, addList, fetchTokenList, removeList, selectList } from './actions'\nimport DEFAULT_LIST from '../../constants/token/pancakeswap.json'\n\nexport interface ListsState {\n readonly byUrl: {\n readonly [url: string]: {\n readonly current: TokenList | null\n readonly pendingUpdate: TokenList | null\n readonly loadingRequestId: string | null\n readonly error: string | null\n }\n }\n // this contains the default list of lists from the last time the updateVersion was called, i.e. the app was reloaded\n readonly lastInitializedDefaultListOfLists?: string[]\n readonly selectedListUrl: string | undefined\n}\n\nconst NEW_LIST_STATE: ListsState['byUrl'][string] = {\n error: null,\n current: null,\n loadingRequestId: null,\n pendingUpdate: null,\n}\n\ntype Mutable = { -readonly [P in keyof T]: T[P] extends ReadonlyArray ? U[] : T[P] }\n\nconst initialState: ListsState = {\n lastInitializedDefaultListOfLists: DEFAULT_LIST_OF_LISTS,\n byUrl: {\n ...DEFAULT_LIST_OF_LISTS.reduce>((memo, listUrl) => {\n memo[listUrl] = NEW_LIST_STATE\n return memo\n }, {}),\n [DEFAULT_TOKEN_LIST_URL]: {\n error: null,\n current: DEFAULT_LIST,\n loadingRequestId: null,\n pendingUpdate: null,\n },\n },\n selectedListUrl: DEFAULT_TOKEN_LIST_URL,\n}\n\nexport default createReducer(initialState, (builder) =>\n builder\n .addCase(fetchTokenList.pending, (state, { payload: { requestId, url } }) => {\n state.byUrl[url] = {\n current: null,\n pendingUpdate: null,\n ...state.byUrl[url],\n loadingRequestId: requestId,\n error: null,\n }\n })\n .addCase(fetchTokenList.fulfilled, (state, { payload: { requestId, tokenList, url } }) => {\n const current = state.byUrl[url]?.current\n const loadingRequestId = state.byUrl[url]?.loadingRequestId\n\n // no-op if update does nothing\n if (current) {\n const upgradeType = getVersionUpgrade(current.version, tokenList.version)\n if (upgradeType === VersionUpgrade.NONE) return\n if (loadingRequestId === null || loadingRequestId === requestId) {\n state.byUrl[url] = {\n ...state.byUrl[url],\n loadingRequestId: null,\n error: null,\n current,\n pendingUpdate: tokenList,\n }\n }\n } else {\n state.byUrl[url] = {\n ...state.byUrl[url],\n loadingRequestId: null,\n error: null,\n current: tokenList,\n pendingUpdate: null,\n }\n }\n })\n .addCase(fetchTokenList.rejected, (state, { payload: { url, requestId, errorMessage } }) => {\n if (state.byUrl[url]?.loadingRequestId !== requestId) {\n // no-op since it's not the latest request\n return\n }\n\n state.byUrl[url] = {\n ...state.byUrl[url],\n loadingRequestId: null,\n error: errorMessage,\n current: null,\n pendingUpdate: null,\n }\n })\n .addCase(selectList, (state, { payload: url }) => {\n state.selectedListUrl = url\n // automatically adds list\n if (!state.byUrl[url]) {\n state.byUrl[url] = NEW_LIST_STATE\n }\n })\n .addCase(addList, (state, { payload: url }) => {\n if (!state.byUrl[url]) {\n state.byUrl[url] = NEW_LIST_STATE\n }\n })\n .addCase(removeList, (state, { payload: url }) => {\n if (state.byUrl[url]) {\n delete state.byUrl[url]\n }\n if (state.selectedListUrl === url) {\n state.selectedListUrl = Object.keys(state.byUrl)[0]\n }\n })\n .addCase(acceptListUpdate, (state, { payload: url }) => {\n if (!state.byUrl[url]?.pendingUpdate) {\n throw new Error('accept list update called without pending update')\n }\n state.byUrl[url] = {\n ...state.byUrl[url],\n pendingUpdate: null,\n current: state.byUrl[url].pendingUpdate,\n }\n })\n .addCase(updateVersion, (state) => {\n // state loaded from localStorage, but new lists have never been initialized\n if (!state.lastInitializedDefaultListOfLists) {\n state.byUrl = initialState.byUrl\n state.selectedListUrl = undefined\n } else if (state.lastInitializedDefaultListOfLists) {\n const lastInitializedSet = state.lastInitializedDefaultListOfLists.reduce>(\n (s, l) => s.add(l),\n new Set()\n )\n const newListOfListsSet = DEFAULT_LIST_OF_LISTS.reduce>((s, l) => s.add(l), new Set())\n\n DEFAULT_LIST_OF_LISTS.forEach((listUrl) => {\n if (!lastInitializedSet.has(listUrl)) {\n state.byUrl[listUrl] = NEW_LIST_STATE\n }\n })\n\n state.lastInitializedDefaultListOfLists.forEach((listUrl) => {\n if (!newListOfListsSet.has(listUrl)) {\n delete state.byUrl[listUrl]\n }\n })\n }\n\n state.lastInitializedDefaultListOfLists = DEFAULT_LIST_OF_LISTS\n })\n)\n","import { createReducer } from '@reduxjs/toolkit'\nimport { Field, typeInput } from './actions'\n\nexport interface BurnState {\n readonly independentField: Field\n readonly typedValue: string\n}\n\nconst initialState: BurnState = {\n independentField: Field.LIQUIDITY_PERCENT,\n typedValue: '0'\n}\n\nexport default createReducer(initialState, builder =>\n builder.addCase(typeInput, (state, { payload: { field, typedValue } }) => {\n return {\n ...state,\n independentField: field,\n typedValue\n }\n })\n)\n","import { createReducer } from '@reduxjs/toolkit'\nimport {\n addMulticallListeners,\n errorFetchingMulticallResults,\n fetchingMulticallResults,\n removeMulticallListeners,\n toCallKey,\n updateMulticallResults\n} from './actions'\n\nexport interface MulticallState {\n callListeners?: {\n // on a per-chain basis\n [chainId: number]: {\n // stores for each call key the listeners' preferences\n [callKey: string]: {\n // stores how many listeners there are per each blocks per fetch preference\n [blocksPerFetch: number]: number\n }\n }\n }\n\n callResults: {\n [chainId: number]: {\n [callKey: string]: {\n data?: string | null\n blockNumber?: number\n fetchingBlockNumber?: number\n }\n }\n }\n}\n\nconst initialState: MulticallState = {\n callResults: {}\n}\n\nexport default createReducer(initialState, builder =>\n builder\n .addCase(addMulticallListeners, (state, { payload: { calls, chainId, options: { blocksPerFetch = 1 } = {} } }) => {\n const listeners: MulticallState['callListeners'] = state.callListeners\n ? state.callListeners\n : (state.callListeners = {})\n listeners[chainId] = listeners[chainId] ?? {}\n calls.forEach(call => {\n const callKey = toCallKey(call)\n listeners[chainId][callKey] = listeners[chainId][callKey] ?? {}\n listeners[chainId][callKey][blocksPerFetch] = (listeners[chainId][callKey][blocksPerFetch] ?? 0) + 1\n })\n })\n .addCase(\n removeMulticallListeners,\n (state, { payload: { chainId, calls, options: { blocksPerFetch = 1 } = {} } }) => {\n const listeners: MulticallState['callListeners'] = state.callListeners\n ? state.callListeners\n : (state.callListeners = {})\n\n if (!listeners[chainId]) return\n calls.forEach(call => {\n const callKey = toCallKey(call)\n if (!listeners[chainId][callKey]) return\n if (!listeners[chainId][callKey][blocksPerFetch]) return\n\n if (listeners[chainId][callKey][blocksPerFetch] === 1) {\n delete listeners[chainId][callKey][blocksPerFetch]\n } else {\n listeners[chainId][callKey][blocksPerFetch]--\n }\n })\n }\n )\n .addCase(fetchingMulticallResults, (state, { payload: { chainId, fetchingBlockNumber, calls } }) => {\n state.callResults[chainId] = state.callResults[chainId] ?? {}\n calls.forEach(call => {\n const callKey = toCallKey(call)\n const current = state.callResults[chainId][callKey]\n if (!current) {\n state.callResults[chainId][callKey] = {\n fetchingBlockNumber\n }\n } else {\n if ((current.fetchingBlockNumber ?? 0) >= fetchingBlockNumber) return\n state.callResults[chainId][callKey].fetchingBlockNumber = fetchingBlockNumber\n }\n })\n })\n .addCase(errorFetchingMulticallResults, (state, { payload: { fetchingBlockNumber, chainId, calls } }) => {\n state.callResults[chainId] = state.callResults[chainId] ?? {}\n calls.forEach(call => {\n const callKey = toCallKey(call)\n const current = state.callResults[chainId][callKey]\n if (!current) return // only should be dispatched if we are already fetching\n if (current.fetchingBlockNumber === fetchingBlockNumber) {\n delete current.fetchingBlockNumber\n current.data = null\n current.blockNumber = fetchingBlockNumber\n }\n })\n })\n .addCase(updateMulticallResults, (state, { payload: { chainId, results, blockNumber } }) => {\n state.callResults[chainId] = state.callResults[chainId] ?? {}\n Object.keys(results).forEach(callKey => {\n const current = state.callResults[chainId][callKey]\n if ((current?.blockNumber ?? 0) > blockNumber) return\n state.callResults[chainId][callKey] = {\n data: results[callKey],\n blockNumber\n }\n })\n })\n)\n","import { configureStore, getDefaultMiddleware } from '@reduxjs/toolkit'\nimport { save, load } from 'redux-localstorage-simple'\n\nimport application from './application/reducer'\nimport { updateVersion } from './global/actions'\nimport user from './user/reducer'\nimport transactions from './transactions/reducer'\nimport swap from './swap/reducer'\nimport mint from './mint/reducer'\nimport lists from './lists/reducer'\nimport burn from './burn/reducer'\nimport multicall from './multicall/reducer'\nimport toasts from './toasts'\nimport { getThemeCache } from '../utils/theme'\n\ntype MergedState = {\n user: {\n [key: string]: any\n }\n transactions: {\n [key: string]: any\n }\n}\nconst PERSISTED_KEYS: string[] = ['user', 'transactions']\nconst loadedState = load({ states: PERSISTED_KEYS }) as MergedState\nif (loadedState.user) {\n loadedState.user.userDarkMode = getThemeCache()\n}\n\nconst store = configureStore({\n reducer: {\n application,\n user,\n transactions,\n swap,\n mint,\n burn,\n multicall,\n lists,\n toasts\n },\n middleware: [...getDefaultMiddleware({ thunk: false }), save({ states: PERSISTED_KEYS })],\n preloadedState: loadedState,\n})\n\nstore.dispatch(updateVersion())\n\nexport default store\n\nexport type AppState = ReturnType\nexport type AppDispatch = typeof store.dispatch\n","import { Web3Provider } from '@ethersproject/providers'\n\nexport default function getLibrary(provider: any): Web3Provider {\n const library = new Web3Provider(provider)\n library.pollingInterval = 15000\n return library\n}\n","import React from 'react'\nimport { createWeb3ReactRoot, Web3ReactProvider } from '@web3-react/core'\nimport { Provider } from 'react-redux'\nimport { ModalProvider } from '@mozartfinance/uikit'\nimport { NetworkContextName } from './constants'\nimport store from './state'\nimport getLibrary from './utils/getLibrary'\nimport { ThemeContextProvider } from './ThemeContext'\n\nconst Web3ProviderNetwork = createWeb3ReactRoot(NetworkContextName)\n\nconst Providers: React.FC = ({ children }) => {\n return (\n \n \n \n \n {children}\n \n \n \n \n )\n}\n\nexport default Providers\n","import i18next from 'i18next'\nimport { initReactI18next } from 'react-i18next'\nimport XHR from 'i18next-xhr-backend'\nimport LanguageDetector from 'i18next-browser-languagedetector'\n\ni18next\n .use(XHR)\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({\n backend: {\n loadPath: `./locales/{{lng}}.json`\n },\n react: {\n useSuspense: true\n },\n fallbackLng: 'en',\n preload: ['en'],\n keySeparator: false,\n interpolation: { escapeValue: false }\n })\n\nexport default i18next\n","import React, { StrictMode } from 'react'\nimport ReactDOM from 'react-dom'\nimport { ResetCSS } from '@mozartfinance/uikit'\nimport GlobalStyle from './style/Global'\nimport App from './pages/App'\nimport ApplicationUpdater from './state/application/updater'\nimport ListsUpdater from './state/lists/updater'\nimport MulticallUpdater from './state/multicall/updater'\nimport TransactionUpdater from './state/transactions/updater'\nimport ToastListener from './components/ToastListener'\nimport Providers from './Providers'\nimport 'inter-ui'\nimport './i18n'\n\nif ('ethereum' in window) {\n (window.ethereum as any).autoRefreshOnNetworkChange = false\n}\n\nwindow.addEventListener('error', () => {\n localStorage?.removeItem('redux_localstorage_simple_lists')\n})\n\nReactDOM.render(\n \n \n <>\n \n \n \n \n \n \n \n \n \n \n ,\n document.getElementById('root')\n)\n"],"sourceRoot":""}