{"version":3,"sources":["../node_modules/typescript/lib sync","style/Global.ts","connectors/Fortmatic.ts","connectors/NetworkConnector.ts","connectors/bsc/bscConnector.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","components/Shared/Common.tsx","components/Shared/Type.tsx","utils/listVersionLabel.ts","components/Row/index.tsx","components/Popups/ListUpdatePopup.tsx","utils/index.ts","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","assets/images/blue-loader.svg","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","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/abis/migrator.ts","constants/multicall/index.ts","constants/v1/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","assets/images/binance-logo.png","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","hooks/TranslationsContext.ts","utils/translateTextHelpers.ts","hooks/useI18n.ts","components/TranslatedText/index.tsx","components/SearchModal/CurrencySearch.tsx","assets/images/dropdown.svg","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","hooks/useToggledVersion.ts","hooks/useParsedQueryString.ts","data/V1.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","state/mint/hooks.ts","utils/maxAmountSpend.ts","components/Pane/index.tsx","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/MigrateV1/EmptyState.tsx","components/PositionCard/V1.tsx","pages/MigrateV1/index.tsx","pages/MigrateV1/MigrateV1Exchange.tsx","pages/MigrateV1/RemoveV1Exchange.tsx","components/PageHeader/SlippageToleranceSetting.tsx","pages/PoolFinder/index.tsx","components/PageHeader/TransactionDeadlineSetting.tsx","components/PageHeader/SettingsModal.tsx","components/PageHeader/RecentTransactionsModal.tsx","components/PageHeader/index.tsx","pages/Pool/index.tsx","state/burn/actions.ts","components/Slider/index.tsx","state/burn/hooks.ts","pages/RemoveLiquidity/index.tsx","utils/useDebouncedChangeHandler.tsx","pages/RemoveLiquidity/redirects.tsx","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/BetterTradeLink.tsx","components/swap/TradePrice.tsx","components/TokenWarningModal/index.tsx","components/SyrupWarningModal/index.tsx","components/ProgressSteps/index.tsx","hooks/useSwapCallback.ts","hooks/useWrapCallback.ts","utils/v1SwapArguments.ts","pages/Swap/index.tsx","components/swap/confirmPriceImpactWithoutFee.ts","pages/Swap/redirects.tsx","hooks/LanguageContext.ts","constants/types.ts","constants/localisation/languageCodes.ts","ThemeContext.tsx","hooks/useTheme.ts","constants/contracts.ts","utils/addressHelpers.ts","constants/eggPriceContracts.ts","constants/Farms.ts","hooks/useGetPriceData.ts","components/Menu/config.ts","components/Menu/index.tsx","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","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":["webpackEmptyContext","req","e","Error","code","keys","resolve","module","exports","id","GlobalStyle","createGlobalStyle","theme","colors","background","CHAIN_ID_NETWORK_ARGUMENT","ChainId","MAINNET","TESTNET","FortmaticConnector","a","this","fortmatic","Fortmatic","default","apiKey","chainId","provider","getProvider","pollForOverlayReady","Promise","interval","setInterval","overlayReady","clearInterval","emit","all","enable","then","accounts","account","FortmaticConnectorCore","RequestError","message","data","MiniRpcProvider","url","batchWaitTimeMs","isMetaMask","host","path","nextId","batchTimeoutId","batch","clearBatch","console","info","fetch","method","headers","accept","body","JSON","stringify","map","item","request","response","forEach","reject","ok","status","statusText","json","byKey","reduce","memo","current","result","error","sendAsync","callback","params","jsonrpc","catch","toString","promise","push","setTimeout","parsed","URL","pathname","NetworkConnector","urls","defaultChainId","invariant","Object","length","supportedChainIds","k","Number","providers","currentChainId","accumulator","AbstractConnector","parseSendReturn","sendReturn","hasOwnProperty","NoBscProviderError","name","constructor","UserRejectedRequestError","BscConnector","kwargs","handleNetworkChanged","bind","handleChainChanged","handleAccountsChanged","handleClose","emitUpdate","window","BinanceChain","emitDeactivate","networkId","on","autoRefreshOnNetworkChange","send","warning","isDapper","cachedResults","net_version","netVersion","networkVersion","_chainId","removeListener","NETWORK_URL","process","FORMATIC_KEY","REACT_APP_FORTMATIC_KEY","PORTIS_ID","REACT_APP_PORTIS_ID","NETWORK_CHAIN_ID","parseInt","networkLibrary","network","injected","InjectedConnector","bsc","walletconnect","WalletConnectConnector","rpc","bridge","qrcode","PortisConnector","dAppId","networks","WalletLinkConnector","appName","appLogoUrl","ROUTER_ADDRESS","DAI","Token","BUSD","USDT","EOS","DOT","ETH","WETH_ONLY","WETH","BASES_TO_CHECK_TRADES_AGAINST","CUSTOM_BASES","address","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","BETTER_TRADE_LINK_THRESHOLD","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","CloseIcon","button","attrs","backgroundColor","failure","primary","darken","invertedContrast","textDisabled","X","LinkStyledButton","disabled","textSubtle","StyledInternalLink","Link","StyledLink","ExternalLink","target","href","rel","rest","handleClick","event","ctrlKey","metaKey","preventDefault","onClick","rotate","keyframes","Spinner","img","BackArrowLink","text","BackArrow","to","TYPE","main","props","link","black","largeHeader","bold","fontSize","mediumHeader","subHeader","blue","darkGray","italic","style","fontStyle","color","listVersionLabel","version","major","minor","patch","Row","Box","align","padding","border","borderRadius","RowBetween","RowFlat","AutoRow","RowFixed","Body","ListUpdatePopup","popKey","listUrl","oldList","newList","auto","removeThisPopup","handleAcceptUpdate","useMemo","diffTokenLists","tokens","tokensAdded","added","tokensChanged","changed","tokensRemoved","removed","numTokensChanged","flex","fontWeight","token","i","Fragment","title","symbol","flexGrow","marginRight","isAddress","value","getAddress","ETHERSCAN_PREFIXES","getEtherscanLink","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","isTokenOnList","defaultTokens","currency","ETHER","Boolean","RowNoFlex","TransactionPopup","hash","success","summary","useContext","ThemeContext","paddingRight","size","slice","StyledClose","Popup","mediaQueries","sm","Fader","tertiary","AnimatedFader","animated","PopupItem","removeAfterMs","content","useEffect","timeout","clearTimeout","popupContent","txn","listUpdate","faderStyle","useSpring","width","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","localStorage","getItem","isMobile","ethereum","useEagerConnect","suppress","useInactiveListener","showLoader","setShowLoader","Card","LightCard","GreyCard","YellowCard","binance","PinkCard","AnimatedDialogOverlay","DialogOverlay","StyledDialogOverlay","AnimatedDialogContent","DialogContent","StyledDialogContent","minHeight","maxHeight","mobile","isOpen","transparentize","css","lg","Modal","onDismiss","initialFocusRef","fadeTransition","useTransition","opacity","enter","leave","tabIndex","Wrapper","Section","ConfirmedIcon","BottomSection","StyledContentHeader","Heading","ContentHeader","variant","CustomLightSpinner","ConfirmationPendingContent","pendingText","src","Circle","alt","TransactionSubmittedContent","mt","TransactionConfirmationModal","attemptingTxn","ConfirmationModalContent","bottomContent","topContent","TransactionErrorContent","marginTop","textAlign","StyledNav","Nav","activeIndex","ERC20_INTERFACE","Interface","ERC20_ABI","ERC20_BYTES32_ABI","WrappedTokenInfo","tokenInfo","tags","decimals","logoURI","EMPTY_LIST","listCache","WeakMap","useTokenList","lists","byUrl","get","tokenMap","tagId","x","set","listToTokenMap","useSelectedListUrl","selectedListUrl","useSelectedTokenList","ADDRESS_REGEX","LOWER_HEX_REGEX","toCallKey","call","test","callData","parseCallKey","callKey","pcs","split","addMulticallListeners","removeMulticallListeners","fetchingMulticallResults","errorFetchingMulticallResults","updateMulticallResults","isMethodArg","indexOf","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","useSingleContractMultipleData","contract","methodName","callInputs","interface","getFunction","results","inputs","encodeFunctionData","useMultipleContractSingleData","addresses","useSingleCallResult","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","useAddUserToken","useUserAddedTokens","serializedTokensMap","values","serializePair","pair","token0","token1","toV2LiquidityToken","tokenA","tokenB","Pair","MIGRATOR_ADDRESS","MULTICALL_NETWORKS","V1_FACTORY_ADDRESSES","V1_FACTORY_ABI","V1_EXCHANGE_ABI","useContract","withSignerIfPossible","useV1FactoryContract","useV1ExchangeContract","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","useBytes32TokenContract","tokenName","tokenNameBytes32","symbolBytes32","useCurrency","currencyId","isETH","toUpperCase","useETHBalances","uncheckedAddresses","multicallContract","CurrencyAmount","ether","useTokenBalancesWithLoadingIndicator","validatedTokens","balances","vt","anyLoading","some","callState","amount","TokenAmount","useTokenBalances","useTokenBalance","tokenBalances","useCurrencyBalances","currencies","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","find","s","onError","StyledListLogo","ListLogo","useInterval","delay","leading","savedCallback","useRef","tick","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","StyledEthereumLogo","StyledLogo","CurrencyLogo","uriLocations","EthereumLogo","BaseWrapper","disable","CommonBases","onSelect","selectedCurrency","currencyEquals","selected","FadedSpan","PaddedColumn","MenuItem","SearchInput","input","Separator","SeparatorDark","Main","currencyKey","StyledBalanceText","Text","Tag","Balance","balance","toExact","toSignificant","TagContainer","TokenTags","tag","description","join","CurrencyRow","isSelected","otherSelected","isOnSelectedList","customAdded","useIsUserAddedToken","removeToken","useRemoveUserAddedToken","addToken","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","defaultTranslationState","translations","setTranslations","TranslationsContext","createContext","variableRegex","getTranslation","translationId","fallback","foundTranslation","translation","stringId","translatedString","includes","stringToReplace","exec","indexToReplace","fallbackValueAtIndex","replace","replaceDynamicString","TranslateString","useI18n","TranslatedText","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","_path","_extends","assign","arguments","source","prototype","apply","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","SvgDropdown","_ref","svgRef","titleId","ForwardRef","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","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","LabelRow","Aligner","span","InputPanel","hideInput","Container","shadows","inset","CurrencyInputPanel","onMax","showMaxButton","label","disableCurrencySelect","hideBalance","modalOpen","setModalOpen","selectedCurrencyBalance","handleDismissSearch","val","Tabs","activeClassName","ActiveText","NavLink","StyledArrowLeft","ArrowLeft","FindPoolTabs","AddRemoveTabs","useTotalSupply","totalSupply","wrappedCurrency","wrappedCurrencyAmount","currencyAmount","unwrappedToken","equals","ArrowWrapper","clickable","SectionBreak","BottomGrouping","ErrorText","severity","StyledBalanceMaxMini","Dots","SwapCallbackErrorInner","SwapCallbackErrorInnerAlertTriangle","SwapCallbackError","SwapShowAcceptChanges","FixedHeightRow","HoverCard","MinimalPositionCard","showUnwrapped","showMore","setShowMore","userPoolBalance","liquidityToken","totalPoolTokens","greaterThanOrEqual","getLiquidityValue","token0Deposited","token1Deposited","textTransform","ml","FullPositionCard","poolTokenPercentage","toFixed","as","PairState","PAIR_INTERFACE","IUniswapV2PairABI","usePairs","currencyA","currencyB","reserves","LOADING","INVALID","NOT_EXISTS","reserve0","reserve1","sortsBefore","EXISTS","usePair","useTokenAllowance","owner","spender","allowance","Version","useParsedQueryString","useLocation","parseArrays","ignoreQueryPrefix","DEFAULT_VERSION","v2","useToggledVersion","use","v1","useV1ExchangeAddress","MockV1Pair","etherAmount","tokenAmount","useMockV1Pair","inputCurrency","v1PairAddress","tokenBalance","ETHBalance","useAllTokenV1Exchanges","factory","args","ix","getTradeVersion","trade","isV1","route","pairs","useV1TradeExchangeAddress","inputAmount","outputAmount","Field","ZERO_PERCENT","ONE_HUNDRED_PERCENT","isTradeBetter","tradeA","tradeB","minimumDelta","tradeType","executionPrice","lessThan","selectCurrency","switchCurrencies","typeInput","replaceSwapState","setRecipient","addTransaction","clearAllTransactions","finalizeTransaction","checkedTransaction","useTransactionAdder","approval","useAllTransactions","transactions","useIsTransactionPending","transactionHash","receipt","isTransactionRecent","tx","Date","getTime","addedTime","ApprovalState","BASE_FEE","INPUT_FRACTION_AFTER_FEE","subtract","computeTradePriceBreakdown","realizedLPFee","currentFee","priceImpactWithoutFeeFraction","priceImpact","priceImpactWithoutFee","numerator","denominator","quotient","computeSlippageAdjustedAmounts","allowedSlippage","num","pct","INPUT","maximumAmountIn","OUTPUT","minimumAmountOut","warningSeverity","formatExecutionPrice","invert","useApproveCallback","amountToApprove","currentAllowance","pendingApproval","allTransactions","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","allPairCombinations","customBases","customBasesA","customBasesB","allPairs","curr","useSwapState","swap","tryParseAmount","typedValueParsed","parseUnits","BAD_RECIPIENT_ADDRESSES","involvesAddress","checksummedAddress","useDerivedSwapInfo","inputError","toggledVersion","independentField","typedValue","inputCurrencyId","outputCurrencyId","recipient","outputCurrency","recipientLookup","relevantTokenBalances","isExactIn","parsedAmount","bestTradeExactIn","currencyAmountIn","currencyOut","allowedPairs","Trade","maxHops","maxNumResults","useTradeExactIn","bestTradeExactOut","currencyIn","currencyAmountOut","useTradeExactOut","v2Trade","currencyBalances","v1Trade","exactAmount","inputPair","outputPair","inputIsETH","outputIsETH","Route","TradeType","EXACT_INPUT","EXACT_OUTPUT","useV1Trade","formattedTo","slippageAdjustedAmounts","slippageAdjustedAmountsV1","balanceIn","amountIn","parseCurrencyFromURLParameter","urlParam","queryParametersToSwapState","parsedQs","validatedRecipient","isNaN","parseFloat","parseIndependentFieldURLParameter","exactField","ZERO","useMintState","mint","maxAmountSpend","Pane","borderColor","UnlockButton","deactivate","onPresentConnectModal","useWalletModal","connectorId","BodyWrapper","AppBody","ClickableText","ConfirmAddModalBottom","noLiquidity","price","parsedAmounts","onAdd","CURRENCY_A","CURRENCY_B","justifyContent","Black","PoolPriceBar","pt","Italic","AddLiquidity","currencyIdA","currencyIdB","history","oneCurrencyIsWETH","expertMode","otherTypedValue","dependentField","pairState","equal","independentAmount","dependentAmount","wrappedIndependentAmount","dependentCurrency","dependentTokenAmount","priceOf","quote","currencyAAmount","currencyBAmount","Price","wrappedCurrencyA","liquidityMinted","tokenAmountA","tokenAmountB","getLiquidityMinted","useDerivedMintInfo","onFieldAInput","field","onFieldBInput","useMintActionHandlers","isValid","showConfirm","setShowConfirm","setAttemptingTxn","txHash","setTxHash","formattedAmounts","maxAmounts","atMaxAmounts","approvalA","approveACallback","approvalB","approveBCallback","router","parsedAmountA","parsedAmountB","amountsMin","deadlineFromNow","Math","ceil","now","tokenBIsETH","estimate","addLiquidityETH","addLiquidity","estimatedGasLimit","modalHeader","mr","modalBottom","handleCurrencyASelect","currA","newCurrencyIdA","handleCurrencyBSelect","currB","newCurrencyIdB","handleDismissConfirmation","CardNav","mb","fullWidth","ConnectWalletButton","RedirectToAddLiquidity","OLD_PATH_STRUCTURE","RedirectOldAddLiquidityPathStructure","RedirectDuplicateTokenIds","EmptyState","alignItems","withRouter","V1LiquidityBalance","px","py","MediumHeader","MigrateV1","tokenSearch","setTokenSearch","handleTokenSearchChange","V1Exchanges","V1LiquidityTokens","exchangeAddress","V1LiquidityBalances","V1LiquidityBalancesLoading","allV1PairsWithLiquidity","V1LiquidityToken","V1","isLoading","marginBottom","LargeHeader","Blue","DarkDray","POOL_CURRENCY_AMOUNT_MIN","Fraction","WEI_DENOM","ONE","ZERO_FRACTION","ALLOWED_OUTPUT_MIN_PERCENT","FormattedPoolCurrencyAmount","V1LiquidityInfo","liquidityTokenAmount","tokenWorth","ethWorth","my","V1PairMigration","exchangeETHBalance","exchangeTokenBalance","v2PairState","v2Pair","isFirstLiquidityProvider","v2SpotPrice","reserveOf","confirmingMigration","setConfirmingMigration","pendingMigrationHash","setPendingMigrationHash","shareFraction","v1SpotPrice","priceDifferenceFraction","priceDifferenceAbs","minAmountETH","minAmountToken","isMigrationPending","migrator","MIGRATOR_ABI","migrate","floor","noLiquidityTokens","largePriceDifference","isSuccessfullyMigrated","MigrateV1Exchange","validatedAddress","userLiquidityBalance","DarkGray","V1PairRemoval","exchangeContract","confirmingRemoval","setConfirmingRemoval","pendingRemovalHash","setPendingRemovalHash","isRemovalPending","remove","removeLiquidity","isSuccessfullyRemoved","RemoveV1Exchange","Fields","StyledSlippageToleranceSettings","Option","Options","Label","predefinedValues","SlippageToleranceSettings","setUserslippageTolerance","setValue","setError","rawValue","predefinedValue","scale","step","min","evt","inputValue","isWarning","StyledTransactionDeadlineSetting","TransactionDeadlineSetting","setDeadline","defaultOnDismiss","SettingsModal","SlippageToleranceSetting","newTransactionsFirst","b","RecentTransactionsModal","sortedRecentTransactions","flexDirection","sortedRecentTransaction","icon","getRowStatus","CogIcon","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","hasV1Liquidity","exchanges","useUserHasLiquidityInAllTokens","PoolFinder","showSearch","setShowSearch","TOKEN1","activeField","setActiveField","setCurrency0","setCurrency1","addPair","serializedPair","usePairAdder","validPairNoLiquidity","position","hasPosition","TOKEN0","handleSearchDismiss","prerequisiteMessage","startIcon","endIcon","justifyItems","StyledRangeInput","Slider","max","changeCallback","useBurnState","burn","OutlineCard","RemoveLiquidity","userLiquidity","LIQUIDITY","liquidityValueA","liquidityValueB","liquidityValues","percentToRemove","LIQUIDITY_PERCENT","liquidityValue","useDerivedBurnInfo","useBurnActionHandlers","_onUserInput","showDetailed","setShowDetailed","atMaxAmount","pairContract","signatureData","setSignatureData","approveCallback","liquidityAmount","nonces","nonce","deadlineForSignature","EIP712Domain","domain","verifyingContract","Permit","toHexString","types","primaryType","splitSignature","signature","v","r","onLiquidityInput","onCurrencyAInput","onCurrencyBInput","onRemove","currencyAmountA","currencyAmountB","currencyBIsETH","oneCurrencyIsETH","methodNames","safeGasEstimates","indexOfSuccessfulEstimation","findIndex","safeGasEstimate","isBigNumber","liquidityPercentChangeCallback","handleSelectCurrencyA","handleSelectCurrencyB","debouncedMs","inner","setInner","timer","onChangeInner","newValue","useDebouncedChangeHandler","innerLiquidityPercentage","setInnerLiquidityPercentage","paddingBottom","RedirectOldRemoveLiquidityPathStructure","ContainerRow","InputContainer","AddressInputPanel","withoutSpaces","autoCapitalize","FormattedPriceImpact","SwapModalFooter","onConfirm","swapErrorMessage","disabledConfirm","showInverted","setShowInverted","paddingLeft","PriceInfoText","SwapModalHeader","showAcceptChanges","onAcceptChanges","priceImpactSeverity","ConfirmSwapModal","originalTrade","confirmationContent","flexWrap","isLastItem","flexShrink","TradeSummary","AdvancedSwapDetails","showRoute","AdvancedDetailsFooter","AdvancedSwapDetailsDropdown","lastTrade","BetterTradeLink","location","linkDestination","lineHeight","TradePrice","formattedPrice","baseCurrency","quoteCurrency","WarningContainer","StyledWarningIcon","AlertTriangle","TokenWarningCard","tokenSymbol","duplicateNameOrSymbol","userToken","TokenWarningModal","understandChecked","setUnderstandChecked","toggleUnderstand","uc","handleDismiss","htmlFor","userSelect","checked","SyrupWarningModal","transactionType","SwapCallbackState","WrapType","Grouping","confirmed","backgroundDisabled","CircleRow","Connector","prevConfirmed","ProgressCircles","steps","toHex","v1SwapArguments","inputETH","outputETH","ttl","outputToken","output","useSwapCallArguments","recipientAddressOrName","recipientAddress","v1Exchange","tradeVersion","swapMethods","Router","swapCallParameters","feeOnTransfer","parameters","NOT_APPLICABLE","wrapType","useWrapCallback","wethContract","WETH_ABI","useWETHContract","sufficientBalance","WRAP","execute","deposit","txReceipt","UNWRAP","withdraw","Swap","loadedUrlParams","setResult","useDefaultsFromURLSearch","loadedInputCurrency","loadedOutputCurrency","dismissTokenWarning","setDismissTokenWarning","isSyrup","setIsSyrup","syrupTransactionType","setSyrupTransactionType","urlLoadedTokens","handleConfirmTokenWarning","handleConfirmSyrupWarning","toggleSetExpertMode","useExpertModeManager","isExpertMode","swapInputError","onWrap","wrapInputError","showWrap","betterTradeLinkVersion","onCurrencySelection","onSwitchTokens","onChangeRecipient","useSwapActionHandlers","handleTypeInput","handleTypeOutput","tradeToConfirm","setSwapState","userHasSpecifiedInputOutput","noRoute","tradeIsV1","v1ExchangeAddress","useApproveCallbackFromTrade","approvalSubmitted","setApprovalSubmitted","maxAmountInput","atMaxAmountInput","swapCalls","VALID","gasEstimate","gasError","callStatic","callError","reason","estimatedCalls","successfulEstimation","el","errorCalls","inputSymbol","outputSymbol","withRecipient","withVersion","useSwapCallback","swapCallback","swapCallbackError","handleSwap","confirm","confirmPriceImpactWithoutFee","prevState","showApproveFlow","handleConfirmDismiss","handleAcceptChanges","checkForSyrup","purchaseType","handleInputSelect","handleMaxInput","handleOutputSelect","RedirectPathToSwapOnly","RedirectToSwap","QuoteToken","PoolCategory","defaultLanguageState","selectedLanguage","language","setSelectedLanguage","translatedLanguage","setTranslatedLanguage","LanguageContext","allLanguages","isDark","toggleTheme","ThemeContextProvider","isDarkUserSetting","setIsDark","handleSetup","dataStr","log","Provider","setItem","dark","useTheme","StyledThemeCopntext","cake","masterChef","wbnb","lottery","lotteryNFT","mulltiCall","busd","usdc","getMasterChefAddress","priceContracts","cakeAddress","busdAddress","lpAddress","farms","pid","risk","lpSymbol","lpAddresses","tokenAddresses","quoteTokenSymbol","USDC","quoteTokenAdresses","contracts","useGetPriceData","setData","fetchData","farmsConfig","farmConfig","lpAdress","isTokenOnly","calls1","aggregate","result1","tokenBalanceLP","quoteTokenBlanceLP","lpTokenBalanceMC","lpTotalSupply","tokenDecimals","quoteTokenDecimals","lpTokenRatio","pow","times","quoteTokenAmount","tokenPriceVsQuote","comparedTo","toNumber","Menu","cakePriceUsd","cakePriceUsd2","links","priceLink","login","logout","currentLang","langs","setLang","AppWrapper","Marginer","App","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","obj","resultsBlockNumber","returnData","debouncedListeners","callListeners","cancellations","listeningKeys","allListeners","listeners","keyListeners","previousMin","activeListeningKeys","unserializedOutdatedCallKeys","minDataBlockNumber","fetchingBlockNumber","outdatedListeningKeys","serializedOutdatedCallKeys","outdatedCallKeys","chunkedCalls","items","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","transactionIndex","createReducer","walletModalOpen","settingsMenuOpen","builder","addCase","action","payload","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","getLibrary","pollingInterval","Web3ProviderNetwork","createWeb3ReactRoot","Providers","i18next","XHR","LanguageDetector","initReactI18next","init","backend","loadPath","react","useSuspense","fallbackLng","preload","keySeparator","interpolation","escapeValue","removeItem","ReactDOM","render","Global"],"mappings":"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","file":"static/js/main.26efdbcc.chunk.js","sourcesContent":["function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = 227;","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 { ChainId } from '@oboswap/matic-sdk'\nimport { FortmaticConnector as FortmaticConnectorCore } from '@web3-react/fortmatic-connector'\n\nexport const OVERLAY_READY = 'OVERLAY_READY'\n\ntype FormaticSupportedChains = Extract\n\nconst CHAIN_ID_NETWORK_ARGUMENT: { readonly [chainId in FormaticSupportedChains]: string | undefined } = {\n [ChainId.MAINNET]: '',\n [ChainId.TESTNET]: ''\n}\n\nexport class FortmaticConnector extends FortmaticConnectorCore {\n async activate() {\n if (!this.fortmatic) {\n const { default: Fortmatic } = await import('fortmatic')\n\n const { apiKey, chainId } = this as any\n if (chainId in CHAIN_ID_NETWORK_ARGUMENT) {\n this.fortmatic = new Fortmatic(apiKey, CHAIN_ID_NETWORK_ARGUMENT[chainId as FormaticSupportedChains])\n } else {\n throw new Error(`Unsupported network ID: ${chainId}`)\n }\n }\n\n const provider = this.fortmatic.getProvider()\n\n const pollForOverlayReady: Promise = new Promise(resolve => {\n const interval = setInterval(() => {\n if (provider.overlayReady) {\n clearInterval(interval)\n this.emit(OVERLAY_READY)\n resolve()\n }\n }, 200)\n })\n\n const [account] = await Promise.all([\n provider.enable().then((accounts: string[]) => accounts[0]),\n pollForOverlayReady\n ])\n\n return { provider: this.fortmatic.getProvider(), chainId: (this as any).chainId, account }\n }\n}\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 if (resolve) {\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 { AbstractConnectorArguments, ConnectorUpdate } from '@web3-react/types'\nimport { AbstractConnector } from '@web3-react/abstract-connector'\nimport warning from 'tiny-warning'\n\nimport { SendReturnResult, SendReturn, Send, SendOld } from './types'\n\nfunction parseSendReturn(sendReturn: SendReturnResult | SendReturn): any {\n // eslint-disable-next-line no-prototype-builtins\n return sendReturn.hasOwnProperty('result') ? sendReturn.result : sendReturn\n}\n\nexport class NoBscProviderError extends Error {\n public constructor() {\n super()\n this.name = this.constructor.name\n this.message = 'No BSC provider was found on window.BinanceChain.'\n }\n}\n\nexport class UserRejectedRequestError extends Error {\n public constructor() {\n super()\n this.name = this.constructor.name\n this.message = 'The user rejected the request.'\n }\n}\n\nexport class BscConnector extends AbstractConnector {\n constructor(kwargs: AbstractConnectorArguments) {\n super(kwargs)\n\n this.handleNetworkChanged = this.handleNetworkChanged.bind(this)\n this.handleChainChanged = this.handleChainChanged.bind(this)\n this.handleAccountsChanged = this.handleAccountsChanged.bind(this)\n this.handleClose = this.handleClose.bind(this)\n }\n\n private handleChainChanged(chainId: string | number): void {\n this.emitUpdate({ chainId, provider: window.BinanceChain })\n }\n\n private handleAccountsChanged(accounts: string[]): void {\n if (accounts.length === 0) {\n this.emitDeactivate()\n } else {\n this.emitUpdate({ account: accounts[0] })\n }\n }\n\n private handleClose(): void {\n this.emitDeactivate()\n }\n\n private handleNetworkChanged(networkId: string | number): void {\n this.emitUpdate({ chainId: networkId, provider: window.BinanceChain })\n }\n\n public async activate(): Promise {\n if (!window.BinanceChain) {\n throw new NoBscProviderError()\n }\n\n if (window.BinanceChain.on) {\n window.BinanceChain.on('chainChanged', this.handleChainChanged)\n window.BinanceChain.on('accountsChanged', this.handleAccountsChanged)\n window.BinanceChain.on('close', this.handleClose)\n window.BinanceChain.on('networkChanged', this.handleNetworkChanged)\n }\n\n if ((window.BinanceChain as any).isMetaMask) {\n (window.BinanceChain as any).autoRefreshOnNetworkChange = false\n }\n\n // try to activate + get account via eth_requestAccounts\n let account\n try {\n account = await (window.BinanceChain.send as Send)('eth_requestAccounts').then(\n (sendReturn) => parseSendReturn(sendReturn)[0]\n )\n } catch (error) {\n if ((error as any).code === 4001) {\n throw new UserRejectedRequestError()\n }\n warning(false, 'eth_requestAccounts was unsuccessful, falling back to enable')\n }\n\n // if unsuccessful, try enable\n if (!account) {\n // if enable is successful but doesn't return accounts, fall back to getAccount (not happy i have to do this...)\n account = await window.BinanceChain.enable().then((sendReturn) => sendReturn && parseSendReturn(sendReturn)[0])\n }\n\n return { provider: window.BinanceChain, ...(account ? { account } : {}) }\n }\n\n public async getProvider(): Promise {\n return window.BinanceChain\n }\n\n public async getChainId(): Promise {\n if (!window.BinanceChain) {\n throw new NoBscProviderError()\n }\n\n let chainId\n try {\n chainId = await (window.BinanceChain.send as Send)('eth_chainId').then(parseSendReturn)\n } catch {\n warning(false, 'eth_chainId was unsuccessful, falling back to net_version')\n }\n\n if (!chainId) {\n try {\n chainId = await (window.BinanceChain.send as Send)('net_version').then(parseSendReturn)\n } catch {\n warning(false, 'net_version was unsuccessful, falling back to net version v2')\n }\n }\n\n if (!chainId) {\n try {\n chainId = parseSendReturn((window.BinanceChain.send as SendOld)({ method: 'net_version' }))\n } catch {\n warning(false, 'net_version v2 was unsuccessful, falling back to manual matches and static properties')\n }\n }\n\n if (!chainId) {\n if ((window.BinanceChain as any).isDapper) {\n chainId = parseSendReturn((window.BinanceChain as any).cachedResults.net_version)\n } else {\n chainId =\n (window.BinanceChain as any).chainId ||\n (window.BinanceChain as any).netVersion ||\n (window.BinanceChain as any).networkVersion ||\n (window.BinanceChain as any)._chainId\n }\n }\n\n return chainId\n }\n\n public async getAccount(): Promise {\n if (!window.BinanceChain) {\n throw new NoBscProviderError()\n }\n\n let account\n try {\n account = await (window.BinanceChain.send as Send)('eth_accounts').then(\n (sendReturn) => parseSendReturn(sendReturn)[0]\n )\n } catch {\n warning(false, 'eth_accounts was unsuccessful, falling back to enable')\n }\n\n if (!account) {\n try {\n account = await window.BinanceChain.enable().then((sendReturn) => parseSendReturn(sendReturn)[0])\n } catch {\n warning(false, 'enable was unsuccessful, falling back to eth_accounts v2')\n }\n }\n\n if (!account) {\n account = parseSendReturn((window.BinanceChain.send as SendOld)({ method: 'eth_accounts' }))[0]\n }\n\n return account\n }\n\n public deactivate() {\n if (window.BinanceChain && window.BinanceChain.removeListener) {\n window.BinanceChain.removeListener('chainChanged', this.handleChainChanged)\n window.BinanceChain.removeListener('accountsChanged', this.handleAccountsChanged)\n window.BinanceChain.removeListener('close', this.handleClose)\n window.BinanceChain.removeListener('networkChanged', this.handleNetworkChanged)\n }\n }\n\n public async isAuthorized(): Promise {\n if (!window.BinanceChain) {\n return false\n }\n\n try {\n return await (window.BinanceChain.send as Send)('eth_accounts').then((sendReturn) => {\n if (parseSendReturn(sendReturn).length > 0) {\n return true\n }\n return false\n })\n } catch {\n return false\n }\n }\n}\n","import { 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 { PortisConnector } from '@web3-react/portis-connector'\n\nimport { FortmaticConnector } from './Fortmatic'\nimport { NetworkConnector } from './NetworkConnector'\nimport { BscConnector } from './bsc/bscConnector'\n\nconst NETWORK_URL = process.env.REACT_APP_NETWORK_URL\nconst FORMATIC_KEY = process.env.REACT_APP_FORTMATIC_KEY\nconst PORTIS_ID = process.env.REACT_APP_PORTIS_ID\n\nexport const NETWORK_CHAIN_ID: number = parseInt(process.env.REACT_APP_CHAIN_ID ?? '1')\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: [137, 80001],\n})\n\nexport const bsc = new BscConnector({ supportedChainIds: [137,80001] })\n\n// mainnet only\nexport const walletconnect = new WalletConnectConnector({\n rpc: { 1: NETWORK_URL },\n bridge: 'https://bridge.walletconnect.org',\n qrcode: true,\n})\n\n// mainnet only\nexport const fortmatic = new FortmaticConnector({\n apiKey: FORMATIC_KEY ?? '',\n chainId: 1,\n})\n\n// mainnet only\nexport const portis = new PortisConnector({\n dAppId: PORTIS_ID ?? '',\n networks: [1],\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","import { ChainId, JSBI, Percent, Token, WETH } from '@oboswap/matic-sdk'\nimport { AbstractConnector } from '@web3-react/abstract-connector'\n\n// import { bsc, fortmatic, injected, portis, walletconnect, walletlink } from '../connectors'\nimport { injected, bsc } from '../connectors'\n// TODO\nexport const ROUTER_ADDRESS = '0x8F3a13AeA609A34C34E3f598ed594E1e2bEE3E5c'\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 USDT = new Token(ChainId.MAINNET, '0x55d398326f99059ff775485246999027b3197955', 18, 'USDT', 'Tether USD')\nexport const EOS = new Token(ChainId.MAINNET, '0x56b6fb708fc5732dec1afc8d8556423a2edccbd6', 18, 'EOS', 'EOS Token')\nexport const DOT = new Token(ChainId.MAINNET, '0x7083609fce4d1d8dc0c979aab8c869ea2c873402', 18, 'DOT', 'Polkadot Token')\nexport const ETH = new Token(ChainId.MAINNET, '0x2170ed0880ac9a755fd29b2688956bd959f933f8', 18, 'ETH', 'Ethereum Token')\n\nconst WETH_ONLY: ChainTokenList = {\n [ChainId.MAINNET]: [WETH[ChainId.MAINNET]],\n [ChainId.TESTNET]: [WETH[ChainId.TESTNET]]\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, USDT, EOS, DOT]\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 [ETH.address]: [DAI, WETH[ChainId.MAINNET]]\n }\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, 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 interface WalletInfo {\n connector?: AbstractConnector\n name: string\n iconName: string\n description: string\n href: string | null\n color: string\n primary?: true\n mobile?: true\n mobileOnly?: true\n}\n\nexport const SUPPORTED_WALLETS: { [key: string]: WalletInfo } = {\n BSC: {\n connector: bsc,\n name: 'Binance Chain Wallet',\n iconName: 'binance.svg',\n description: 'Easy-to-use browser extension.',\n href: null,\n color: '#E8831D'\n },\n INJECTED: {\n connector: injected,\n name: 'Injected',\n iconName: 'arrow-right.svg',\n description: 'Injected web3 provider.',\n href: null,\n color: '#010101',\n primary: true\n },\n METAMASK: {\n connector: injected,\n name: 'MetaMask',\n iconName: 'metamask.png',\n description: 'Easy-to-use browser extension.',\n href: null,\n color: '#E8831D'\n }\n // WALLET_CONNECT: {\n // connector: walletconnect,\n // name: 'WalletConnect',\n // iconName: 'walletConnectIcon.svg',\n // description: 'Connect to Trust Wallet, Rainbow Wallet and more...',\n // href: null,\n // color: '#4196FC',\n // mobile: true\n // },\n // WALLET_LINK: {\n // connector: walletlink,\n // name: 'Coinbase Wallet',\n // iconName: 'coinbaseWalletIcon.svg',\n // description: 'Use Coinbase Wallet app on mobile device',\n // href: null,\n // color: '#315CF5'\n // },\n // COINBASE_LINK: {\n // name: 'Open in Coinbase Wallet',\n // iconName: 'coinbaseWalletIcon.svg',\n // description: 'Open in Coinbase Wallet app.',\n // href: 'https://go.cb-w.com/mtUDhEZPy1',\n // color: '#315CF5',\n // mobile: true,\n // mobileOnly: true\n // },\n // FORTMATIC: {\n // connector: fortmatic,\n // name: 'Fortmatic',\n // iconName: 'fortmaticIcon.png',\n // description: 'Login using Fortmatic hosted wallet',\n // href: null,\n // color: '#6748FF',\n // mobile: true\n // },\n // Portis: {\n // connector: portis,\n // name: 'Portis',\n // iconName: 'portisIcon.png',\n // description: 'Login using Portis hosted wallet',\n // href: null,\n // color: '#4A6C9B',\n // mobile: true\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\nexport const BETTER_TRADE_LINK_THRESHOLD = new Percent(JSBI.BigInt(75), JSBI.BigInt(10000))\n","import { Web3Provider } from '@ethersproject/providers'\nimport { ChainId } from '@oboswap/matic-sdk'\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('accountStatus')\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 React, { HTMLProps, useCallback } from 'react'\nimport { Link } from 'react-router-dom'\nimport styled, { keyframes } from 'styled-components'\nimport { darken } from 'polished'\nimport { ArrowLeft, X } from 'react-feather'\n\nexport const Button = styled.button.attrs<{ warning: boolean }, { backgroundColor: string }>(({ warning, theme }) => ({\n backgroundColor: warning ? theme.colors.failure : theme.colors.primary\n}))`\n padding: 1rem 2rem 1rem 2rem;\n border-radius: 3rem;\n cursor: pointer;\n user-select: none;\n font-size: 1rem;\n border: none;\n outline: none;\n background-color: ${({ backgroundColor }) => backgroundColor};\n #27262cwidth: 100%;\n\n :hover,\n :focus {\n background-color: ${({ backgroundColor }) => darken(0.05, backgroundColor)};\n }\n\n :active {\n background-color: ${({ backgroundColor }) => darken(0.1, backgroundColor)};\n }\n\n :disabled {\n background-color: ${({ theme }) => theme.colors.invertedContrast};\n color: ${({ theme }) => theme.colors.textDisabled};\n cursor: auto;\n }\n`\n\nexport const CloseIcon = styled(X)<{ onClick: () => void }>`\n cursor: pointer;\n`\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\nconst BackArrowLink = styled(StyledInternalLink)`\n color: ${({ theme }) => theme.colors.text};\n`\nexport function BackArrow({ to }: { to: string }) {\n return (\n \n \n \n )\n}\n","import React from 'react'\nimport { Text } from '@pancakeswap-libs/uikit'\n\nexport const TYPE = {\n main(props: any) {\n return \n },\n link(props: any) {\n return \n },\n black(props: any) {\n return \n },\n body(props: any) {\n return \n },\n largeHeader(props: any) {\n return \n },\n mediumHeader(props: any) {\n return \n },\n subHeader(props: any) {\n return \n },\n blue(props: any) {\n return \n },\n darkGray(props: any) {\n return \n },\n italic(props: any) {\n return \n },\n error(props: any) {\n return \n },\n}\n\nexport default TYPE\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 '@pancakeswap-libs/uikit'\nimport { useDispatch } from 'react-redux'\nimport { AppDispatch } from '../../state'\nimport { useRemovePopup } from '../../state/application/hooks'\nimport { acceptListUpdate } from '../../state/lists/actions'\nimport { TYPE } from '../Shared'\nimport listVersionLabel from '../../utils/listVersionLabel'\nimport { AutoColumn } from '../Column'\nimport { AutoRow } from '../Row'\n\nconst { body: Body } = TYPE\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 '@oboswap/matic-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 ETHERSCAN_PREFIXES: { [chainId in ChainId]: string } = {\n 137: '',\n 80001: ''\n}\n\nexport function getEtherscanLink(chainId: ChainId, data: string, type: 'transaction' | 'token' | 'address'): string {\n const prefix = `https://${ETHERSCAN_PREFIXES[chainId] || ETHERSCAN_PREFIXES[137]}polygonscan.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(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, { useContext } from 'react'\nimport { AlertCircle, CheckCircle } from 'react-feather'\nimport styled, { ThemeContext } from 'styled-components'\nimport { useActiveWeb3React } from '../../hooks'\nimport { TYPE, ExternalLink } from '../Shared'\nimport { getEtherscanLink } from '../../utils'\nimport { AutoColumn } from '../Column'\nimport { AutoRow } from '../Row'\n\nconst { body: Body } = TYPE\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 polygonscan}\n \n
\n )\n}\n","import React, { useCallback, useContext, useEffect } from 'react'\nimport { X } from 'react-feather'\nimport { useSpring, animated } from 'react-spring/web'\nimport styled, { ThemeContext } from 'styled-components'\n// import { 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: #ffffff;\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 React from 'react'\nimport styled from 'styled-components'\nimport { Text } from '@pancakeswap-libs/uikit'\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: #EFEFEF;\n`\n\nexport const GreyCard = styled(Card)`\n background-color: ${({ theme }) => theme.colors.tertiary};\n`\n\nexport const OutlineCard = styled(Card)`\n border: 1px solid ${({ theme }) => theme.colors.tertiary};\n`\n\nexport const YellowCard = styled(Card)`\n background-color: rgba(243, 132, 30, 0.05);\n color: ${({ theme }) => theme.colors.binance};\n font-weight: 500;\n`\n\nexport const PinkCard = styled(Card)`\n background-color: rgba(255, 0, 122, 0.03);\n color: ${({ theme }) => theme.colors.primary};\n font-weight: 500;\n`\n\nconst BlueCardStyled = styled(Card)`\n background-color: ${({ theme }) => theme.colors.primaryDark};\n color: ${({ theme }) => theme.colors.primary};\n border-radius: 12px;\n width: fit-content;\n`\n\nexport const BlueCard = ({ children, ...rest }: any) => {\n return (\n \n {children}\n \n )\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: rgb(255 255 255);\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","export default __webpack_public_path__ + \"static/media/blue-loader.def91951.svg\";","import React, { ReactNode } from 'react'\nimport styled from 'styled-components'\nimport { Heading, IconButton, CloseIcon } from '@pancakeswap-libs/uikit'\nimport { AutoColumn, ColumnCenter } from '../Column'\n\n\nexport const Wrapper = styled.div`\n width: 100%;\n overflow-y: auto;\n background-color: #fff;\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: #EFEFEF;\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 '@pancakeswap-libs/uikit'\nimport { Spinner } from '../Shared'\nimport { AutoColumn } from '../Column'\nimport Circle from '../../assets/images/blue-loader.svg'\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 '@oboswap/matic-sdk'\nimport React, { useContext } from 'react'\nimport { ThemeContext } from 'styled-components'\nimport { Button, LinkExternal } from '@pancakeswap-libs/uikit'\nimport { ArrowUpCircle } from 'react-feather'\nimport { AutoColumn } from '../Column'\nimport { getEtherscanLink } 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 polygonscan\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 '@pancakeswap-libs/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 from 'react'\nimport styled from 'styled-components'\nimport { Link } from 'react-router-dom'\nimport { ButtonMenu, ButtonMenuItem } from '@pancakeswap-libs/uikit'\nimport TranslatedText from '../TranslatedText'\n\nconst StyledNav = styled.div`\n margin-bottom: 40px;\n`\n\nconst Nav = ({ activeIndex = 0 }: { activeIndex?: number }) => (\n \n \n {/* \n Swap\n \n \n 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\nconst ERC20_BYTES32_INTERFACE = new Interface(ERC20_BYTES32_ABI)\n\nexport default ERC20_INTERFACE\nexport { ERC20_ABI, ERC20_BYTES32_INTERFACE, ERC20_BYTES32_ABI }\n","import { ChainId, Token } from '@oboswap/matic-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.TESTNET]: {}\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 '@oboswap/matic-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, 'Obo-LP', 'Oboswap 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 MIGRATOR_ABI from './migrator.json'\n\nconst MIGRATOR_ADDRESS = '0x16D4F26C15f3658ec65B1126ff27DD3dF2a2996b'\n\nexport { MIGRATOR_ADDRESS, MIGRATOR_ABI }\n","import { ChainId } from '@oboswap/matic-sdk'\nimport MULTICALL_ABI from './abi.json'\n\nconst MULTICALL_NETWORKS: { [chainId in ChainId]: string } = {\n [ChainId.MAINNET]: '0x6c716af369343bB723415d95e33c406e6A7D61Fb', // TODO\n [ChainId.TESTNET]: '0xe4d8fF668B9800573fBF2e5788F9F6F395bfE7c1'\n}\n\nexport { MULTICALL_ABI, MULTICALL_NETWORKS }\n","import { Interface } from '@ethersproject/abi'\nimport { ChainId } from '@oboswap/matic-sdk'\nimport V1_EXCHANGE_ABI from './v1_exchange.json'\nimport V1_FACTORY_ABI from './v1_factory.json'\n\nconst V1_FACTORY_ADDRESSES: { [chainId in ChainId]: string } = {\n [ChainId.MAINNET]: '0x2D8F843BCBa7Ce146bEF5B8769107B18E3F2D1DB', // TODO\n [ChainId.TESTNET]: '0x2D8F843BCBa7Ce146bEF5B8769107B18E3F2D1DB'\n}\n\nconst V1_FACTORY_INTERFACE = new Interface(V1_FACTORY_ABI)\nconst V1_EXCHANGE_INTERFACE = new Interface(V1_EXCHANGE_ABI)\n\nexport { V1_FACTORY_ADDRESSES, V1_FACTORY_INTERFACE, V1_FACTORY_ABI, V1_EXCHANGE_INTERFACE, V1_EXCHANGE_ABI }\n","import { Contract } from '@ethersproject/contracts'\nimport { ChainId, WETH } from '@oboswap/matic-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 { MIGRATOR_ABI, MIGRATOR_ADDRESS } from '../constants/abis/migrator'\nimport UNISOCKS_ABI from '../constants/abis/unisocks.json'\nimport WETH_ABI from '../constants/abis/weth.json'\nimport { MULTICALL_ABI, MULTICALL_NETWORKS } from '../constants/multicall'\nimport { V1_EXCHANGE_ABI, V1_FACTORY_ABI, V1_FACTORY_ADDRESSES } from '../constants/v1'\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 useV1FactoryContract(): Contract | null {\n const { chainId } = useActiveWeb3React()\n return useContract(chainId && V1_FACTORY_ADDRESSES[chainId], V1_FACTORY_ABI, false)\n}\n\nexport function useV2MigratorContract(): Contract | null {\n return useContract(MIGRATOR_ADDRESS, MIGRATOR_ABI, true)\n}\n\nexport function useV1ExchangeContract(address?: string, withSignerIfPossible?: boolean): Contract | null {\n return useContract(address, V1_EXCHANGE_ABI, withSignerIfPossible)\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.TESTNET:\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\nexport function useSocksController(): Contract | null {\n const { chainId } = useActiveWeb3React()\n return useContract(\n chainId === ChainId.MAINNET ? '0x65770b5283117639760beA3F867b69b3697a91dd' : undefined,\n UNISOCKS_ABI,\n false\n )\n}\n","import { parseBytes32String } from '@ethersproject/strings'\nimport { Currency, ETHER, Token, currencyEquals } from '@oboswap/matic-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 isETH = currencyId?.toUpperCase() === 'ETH'\n const token = useToken(isETH ? undefined : currencyId)\n return isETH ? ETHER : token\n}\n","import { Currency, CurrencyAmount, ETHER, JSBI, Token, TokenAmount } from '@oboswap/matic-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: rgb(255, 255, 255) ;\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: #8acbe9;\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","export default __webpack_public_path__ + \"static/media/binance-logo.21acc0e5.png\";","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 '@oboswap/matic-sdk'\nimport React, { useMemo } from 'react'\nimport styled from 'styled-components'\n\nimport EthereumLogo from '../../assets/images/binance-logo.png'\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 ``\n\nconst StyledEthereumLogo = 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?.symbol ?? 'token'}.png`, getTokenLogoURL(currency.address)]\n }\n\n return [`/images/coins/${currency?.symbol ?? '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 '@pancakeswap-libs/uikit'\nimport { ChainId, Currency, currencyEquals, ETHER, Token } from '@oboswap/matic-sdk'\nimport styled from 'styled-components'\n\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 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 ModalInfo = styled.div`\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n padding: 1rem 1rem;\n margin: 0.25rem 0.5rem;\n justify-content: center;\n flex: 1;\n user-select: none;\n`\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 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 '@oboswap/matic-sdk'\nimport React, { CSSProperties, MutableRefObject, useCallback, useMemo } from 'react'\nimport { FixedSizeList } from 'react-window'\nimport styled from 'styled-components'\nimport { Text } from '@pancakeswap-libs/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, TYPE } 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\nconst { main: Main } = TYPE\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 '@oboswap/matic-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 '@pancakeswap-libs/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 '@oboswap/matic-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 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 { useContext } from 'react'\nimport { TranslationsContext } from 'hooks/TranslationsContext'\nimport { getTranslation } from 'utils/translateTextHelpers'\n\nconst useI18n = () => {\n const { translations } = useContext(TranslationsContext)\n\n return (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}\n\nexport default useI18n\n","import React from 'react'\nimport useI18n from 'hooks/useI18n'\n\nexport interface TranslatedTextProps {\n translationId: number\n children: string\n}\n\nconst TranslatedText = ({ translationId, children }: TranslatedTextProps) => {\n const TranslateString = useI18n()\n return <>{TranslateString(translationId, children)}\n}\n\nexport default TranslatedText\n","import { Currency, ETHER, Token } from '@oboswap/matic-sdk'\nimport React, { KeyboardEvent, RefObject, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react'\nimport { Text, CloseIcon } from '@pancakeswap-libs/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 { useActiveWeb3React } from '../../hooks'\nimport { AppState } from '../../state'\nimport { useAllTokens, useToken } from '../../hooks/Tokens'\nimport { useSelectedListInfo } from '../../state/lists/hooks'\nimport { LinkStyledButton, TYPE } 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'\nimport TranslatedText from '../TranslatedText'\nimport { TranslateString } from '../../utils/translateTextHelpers'\n\nconst { main: Main } = TYPE\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 === 'e' || s === 'et' || s === 'eth'\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 === 'eth') {\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\n return (\n \n \n \n \n Select a token\n \n \n \n \n }\n onChange={handleInput}\n onKeyDown={handleEnter}\n />\n {showCommonBases && (\n \n )}\n \n \n Token name\n \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 ? 'Change' : 'Select a list'}\n \n
\n
\n \n )}\n
\n )\n}\n\nexport default CurrencySearch\n","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgDropdown(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 12,\n height: 7,\n fill: \"none\",\n viewBox: \"0 0 12 7\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n stroke: \"#AEAEAE\",\n d: \"M0.97168 1L6.20532 6L11.439 1\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgDropdown);\nexport default __webpack_public_path__ + \"static/media/dropdown.87531686.svg\";\nexport { ForwardRef as ReactComponent };","// the Uniswap Default token list lives here\n// export const DEFAULT_TOKEN_LIST_URL = 'tokens.uniswap.eth'\nexport 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/Oboswap.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 '@oboswap/matic-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 } from '@pancakeswap-libs/uikit'\nimport styled from 'styled-components'\nimport { ReactComponent as DropDown } from '../../assets/images/dropdown.svg'\nimport { useFetchListCallback } from '../../hooks/useFetchListCallback'\nimport { useOnClickOutside } from '../../hooks/useOnClickOutside'\n\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 { CloseIcon, ExternalLink, LinkStyledButton, TYPE } 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 { error: Error } = TYPE\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\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 View list\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\n return (\n \n \n \n
\n \n
\n 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 '@oboswap/matic-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 '@oboswap/matic-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: rgb(51, 51, 51) ;\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: #7a7878;\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\n// const inputRegex = RegExp(`^\\\\d*(?:\\\\\\\\[.])?\\\\d*$`) // match escaped \".\" characters via in a non-capturing group\n","import React, { useState, useCallback } from 'react'\nimport { Currency, Pair } from '@oboswap/matic-sdk'\nimport { Button, ChevronDownIcon, Text } from '@pancakeswap-libs/uikit'\nimport styled from 'styled-components'\nimport { darken } from 'polished'\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'\nimport TranslatedText from \"../TranslatedText\"\nimport { TranslateString } from '../../utils/translateTextHelpers'\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`\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: #0009;\n border-radius: 12px;\n outline: none;\n cursor: pointer;\n user-select: none;\n border: none;\n padding: 0 0.5rem;\n\n :focus,\n :hover {\n background-color: rgb(245, 245, 245);\n }\n`\n\nconst LabelRow = styled.div`\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n color: #0009;\n font-size: 0.75rem;\n line-height: 1rem;\n padding: 0.75rem 1rem 0 1rem;\n span:hover {\n cursor: pointer;\n color: #0009;\n }\n`\n\nconst Aligner = styled.span`\n display: flex;\n align-items: center;\n justify-content: space-between;\n`\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:rgb(245, 245, 245);\n z-index: 1;\n`\n\nconst Container = styled.div<{ hideInput: boolean }>`\n border-radius: 16px;\n background-color: rgb(245, 245, 245);\n box-shadow: ${({ theme }) => theme.shadows.inset};\n`\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}\n\nexport default function CurrencyInputPanel({\n value,\n onUserInput,\n onMax,\n showMaxButton,\n label = TranslateString(132, 'Input'),\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\n const handleDismissSearch = useCallback(() => {\n setModalOpen(false)\n }, [setModalOpen])\n\n return (\n \n \n {!hideInput && (\n \n \n {label}\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) \n }...${ \n currency.symbol.slice(currency.symbol.length - 5, currency.symbol.length)}`\n : currency?.symbol) || 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 { ButtonMenu, ButtonMenuItem } from '@pancakeswap-libs/uikit'\nimport { darken } from 'polished'\nimport { NavLink, Link as HistoryLink } from 'react-router-dom'\nimport { ArrowLeft } from 'react-feather'\nimport { RowBetween } from 'components/Row'\nimport QuestionHelper from 'components/QuestionHelper'\nimport TranslatedText from 'components/TranslatedText'\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 activeClassName = 'ACTIVE'\n\nconst StyledAbsoluteLink = styled.a`\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: center;\n height: 3rem;\n border-radius: 3rem;\n outline: none;\n cursor: pointer;\n text-decoration: none;\n color: ${({ theme }) => theme.colors.textDisabled};\n font-size: 20px;\n\n &.${activeClassName} {\n border-radius: 12px;\n font-weight: 500;\n color: ${({ theme }) => theme.colors.text};\n }\n\n :hover,\n :focus {\n color: ${({ theme }) => darken(0.1, theme.colors.text)};\n }\n`\n\nconst StyledNavLink = styled(NavLink).attrs({\n activeClassName\n})`\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: center;\n height: 3rem;\n border-radius: 3rem;\n outline: none;\n cursor: pointer;\n text-decoration: none;\n color: ${({ theme }) => theme.colors.textDisabled};\n font-size: 20px;\n\n &.${activeClassName} {\n border-radius: 12px;\n font-weight: 500;\n color: ${({ theme }) => theme.colors.text};\n }\n\n :hover,\n :focus {\n color: ${({ theme }) => darken(0.1, theme.colors.text)};\n }\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 SwapPoolTabs({ active }: { active: 'swap' | 'pool' }) {\n return (\n \n active === 'swap'}>\n Swap\n \n active === 'pool'}>\n Pool\n \n {/* \n Bridge\n */}\n \n )\n}\n\nexport const Nav = ({ activeIndex = 0 }: { activeIndex?: number }) => (\n \n \n Swap\n \n \n Liquidity\n \n {/* \n Bridge\n */}\n \n)\n\nexport function FindPoolTabs() {\n return (\n \n \n \n \n \n Import Pool\n \n \n \n )\n}\n\nexport function AddRemoveTabs({ adding }: { adding: boolean }) {\n return (\n \n \n \n \n \n {adding ? 'Add' : 'Remove'} Liquidity\n \n \n \n )\n}\n","import { BigNumber } from '@ethersproject/bignumber'\nimport { Token, TokenAmount } from '@oboswap/matic-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 '@oboswap/matic-sdk'\n\nexport function currencyId(currency: Currency): string {\n if (currency === ETHER) return 'ETH'\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 '@oboswap/matic-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 '@pancakeswap-libs/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`\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 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\nexport const TruncatedText = styled(Text)`\n text-overflow: ellipsis;\n width: 220px;\n overflow: hidden;\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 '@oboswap/matic-sdk'\nimport { Button, Card as UIKitCard, CardBody, Text } from '@pancakeswap-libs/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 '@oboswap/matic-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 '@oboswap/matic-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 useParsedQueryString from './useParsedQueryString'\n\nexport enum Version {\n v1 = 'v1',\n v2 = 'v2'\n}\n\nexport const DEFAULT_VERSION: Version = Version.v2\n\nexport default function useToggledVersion(): Version {\n const { use } = useParsedQueryString()\n if (!use || typeof use !== 'string') return Version.v2\n if (use.toLowerCase() === 'v1') return Version.v1\n return DEFAULT_VERSION\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 { AddressZero } from '@ethersproject/constants'\nimport {\n BigintIsh,\n Currency,\n CurrencyAmount,\n currencyEquals,\n ETHER,\n JSBI,\n Pair,\n Percent,\n Route,\n Token,\n TokenAmount,\n Trade,\n TradeType,\n WETH,\n} from '@oboswap/matic-sdk'\nimport { useMemo } from 'react'\nimport { useActiveWeb3React } from '../hooks'\nimport { useAllTokens } from '../hooks/Tokens'\nimport { useV1FactoryContract } from '../hooks/useContract'\nimport { Version } from '../hooks/useToggledVersion'\nimport { NEVER_RELOAD, useSingleCallResult, useSingleContractMultipleData } from '../state/multicall/hooks'\nimport { useETHBalances, useTokenBalance, useTokenBalances } from '../state/wallet/hooks'\n\nexport function useV1ExchangeAddress(tokenAddress?: string): string | undefined {\n const contract = useV1FactoryContract()\n\n const inputs = useMemo(() => [tokenAddress], [tokenAddress])\n return useSingleCallResult(contract, 'getExchange', inputs)?.result?.[0]\n}\n\nexport class MockV1Pair extends Pair {\n constructor(etherAmount: BigintIsh, tokenAmount: TokenAmount) {\n super(tokenAmount, new TokenAmount(WETH[tokenAmount.token.chainId], etherAmount))\n }\n}\n\nfunction useMockV1Pair(inputCurrency?: Currency): MockV1Pair | undefined {\n const token = inputCurrency instanceof Token ? inputCurrency : undefined\n\n const isWETH = Boolean(token && token.equals(WETH[token.chainId]))\n const v1PairAddress = useV1ExchangeAddress(isWETH ? undefined : token?.address)\n const tokenBalance = useTokenBalance(v1PairAddress, token)\n const ETHBalance = useETHBalances([v1PairAddress])[v1PairAddress ?? '']\n\n return useMemo(\n () =>\n token && tokenBalance && ETHBalance && inputCurrency ? new MockV1Pair(ETHBalance.raw, tokenBalance) : undefined,\n [ETHBalance, inputCurrency, token, tokenBalance]\n )\n}\n\n// returns all v1 exchange addresses in the user's token list\nexport function useAllTokenV1Exchanges(): { [exchangeAddress: string]: Token } {\n const allTokens = useAllTokens()\n const factory = useV1FactoryContract()\n const args = useMemo(() => Object.keys(allTokens).map((tokenAddress) => [tokenAddress]), [allTokens])\n\n const data = useSingleContractMultipleData(factory, 'getExchange', args, NEVER_RELOAD)\n\n return useMemo(\n () =>\n data?.reduce<{ [exchangeAddress: string]: Token }>((memo, { result }, ix) => {\n if (result?.[0] && result[0] !== AddressZero) {\n memo[result[0]] = allTokens[args[ix][0]]\n }\n return memo\n }, {}) ?? {},\n [allTokens, args, data]\n )\n}\n\n// returns whether any of the tokens in the user's token list have liquidity on v1\nexport function useUserHasLiquidityInAllTokens(): boolean | undefined {\n const { account, chainId } = useActiveWeb3React()\n\n const exchanges = useAllTokenV1Exchanges()\n\n const v1ExchangeLiquidityTokens = useMemo(\n () =>\n chainId ? Object.keys(exchanges).map((address) => new Token(chainId, address, 18, 'UNI-V1', 'Uniswap V1')) : [],\n [chainId, exchanges]\n )\n\n const balances = useTokenBalances(account ?? undefined, v1ExchangeLiquidityTokens)\n\n return useMemo(\n () =>\n Object.keys(balances).some((tokenAddress) => {\n const b = balances[tokenAddress]?.raw\n return b && JSBI.greaterThan(b, JSBI.BigInt(0))\n }),\n [balances]\n )\n}\n\n/**\n * Returns the trade to execute on V1 to go between input and output token\n */\nexport function useV1Trade(\n isExactIn?: boolean,\n inputCurrency?: Currency,\n outputCurrency?: Currency,\n exactAmount?: CurrencyAmount\n): Trade | undefined {\n // get the mock v1 pairs\n const inputPair = useMockV1Pair(inputCurrency)\n const outputPair = useMockV1Pair(outputCurrency)\n\n const inputIsETH = inputCurrency === ETHER\n const outputIsETH = outputCurrency === ETHER\n\n // construct a direct or through ETH v1 route\n let pairs: Pair[] = []\n if (inputIsETH && outputPair) {\n pairs = [outputPair]\n } else if (outputIsETH && inputPair) {\n pairs = [inputPair]\n }\n // if neither are ETH, it's token-to-token (if they both exist)\n else if (inputPair && outputPair) {\n pairs = [inputPair, outputPair]\n }\n\n const route = inputCurrency && pairs && pairs.length > 0 && new Route(pairs, inputCurrency, outputCurrency)\n let v1Trade: Trade | undefined\n try {\n v1Trade =\n route && exactAmount\n ? new Trade(route, exactAmount, isExactIn ? TradeType.EXACT_INPUT : TradeType.EXACT_OUTPUT)\n : undefined\n } catch (error) {\n console.error('Failed to create V1 trade', error)\n }\n return v1Trade\n}\n\nexport function getTradeVersion(trade?: Trade): Version | undefined {\n const isV1 = trade?.route?.pairs?.some((pair) => pair instanceof MockV1Pair)\n if (isV1) return Version.v1\n if (isV1 === false) return Version.v2\n return undefined\n}\n\n// returns the v1 exchange against which a trade should be executed\nexport function useV1TradeExchangeAddress(trade: Trade | undefined): string | undefined {\n const tokenAddress: string | undefined = useMemo(() => {\n if (!trade) return undefined\n const isV1 = getTradeVersion(trade) === Version.v1\n if (!isV1) return undefined\n return trade.inputAmount instanceof TokenAmount\n ? trade.inputAmount.token.address\n : trade.outputAmount instanceof TokenAmount\n ? trade.outputAmount.token.address\n : undefined\n }, [trade])\n return useV1ExchangeAddress(tokenAddress)\n}\n\nconst ZERO_PERCENT = new Percent('0')\nconst ONE_HUNDRED_PERCENT = new Percent('1')\n\n// returns whether tradeB is better than tradeA by at least a threshold percentage amount\nexport function isTradeBetter(\n tradeA: Trade | undefined,\n tradeB: Trade | undefined,\n minimumDelta: Percent = ZERO_PERCENT\n): boolean | undefined {\n if (tradeA && !tradeB) return false\n if (tradeB && !tradeA) return true\n if (!tradeA || !tradeB) return undefined\n\n if (\n tradeA.tradeType !== tradeB.tradeType ||\n !currencyEquals(tradeA.inputAmount.currency, tradeB.inputAmount.currency) ||\n !currencyEquals(tradeB.outputAmount.currency, tradeB.outputAmount.currency)\n ) {\n throw new Error('Trades are not comparable')\n }\n\n if (minimumDelta.equalTo(ZERO_PERCENT)) {\n return tradeA.executionPrice.lessThan(tradeB.executionPrice)\n }\n return tradeA.executionPrice.raw.multiply(minimumDelta.add(ONE_HUNDRED_PERCENT)).lessThan(tradeB.executionPrice)\n}\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 '@oboswap/matic-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 '@oboswap/matic-sdk'\nimport { BLOCKED_PRICE_IMPACT_NON_EXPERT , ALLOWED_PRICE_IMPACT_HIGH, ALLOWED_PRICE_IMPACT_LOW, ALLOWED_PRICE_IMPACT_MEDIUM } 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.3% fees\n // e.g. for 3 tokens/2 hops: 1 - ((1 - .03) * (1-.03))\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 '@oboswap/matic-sdk'\nimport { useCallback, useMemo } from 'react'\nimport { ROUTER_ADDRESS } from '../constants'\nimport { useTokenAllowance } from '../data/Allowances'\nimport { getTradeVersion, useV1TradeExchangeAddress } from '../data/V1'\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'\nimport { Version } from './useToggledVersion'\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 const tradeIsV1 = getTradeVersion(trade) === Version.v1\n const v1ExchangeAddress = useV1TradeExchangeAddress(trade)\n return useApproveCallback(amountToApprove, tradeIsV1 ? v1ExchangeAddress : 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 '@oboswap/matic-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 // eslint-disable-next-line react-hooks/exhaustive-deps\n const bases: Token[] = chainId ? BASES_TO_CHECK_TRADES_AGAINST[chainId] : []\n\n const [tokenA, tokenB] = chainId\n ? [wrappedCurrency(currencyA, chainId), wrappedCurrency(currencyB, chainId)]\n : [undefined, undefined]\n\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 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 // eslint-disable-next-line @typescript-eslint/no-shadow\n .filter(([tokenA, tokenB]) => {\n if (!chainId) return true\n const customBases = CUSTOM_BASES[chainId]\n if (!customBases) return true\n\n const customBasesA: Token[] | undefined = customBases[tokenA.address]\n const customBasesB: Token[] | undefined = customBases[tokenB.address]\n\n if (!customBasesA && !customBasesB) return true\n\n if (customBasesA && !customBasesA.find((base) => tokenB.equals(base))) return false\n if (customBasesB && !customBasesB.find((base) => tokenA.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 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 '@oboswap/matic-sdk'\nimport { ParsedQs } from 'qs'\nimport { useCallback, useEffect, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport useToggledVersion, { Version } from '../../hooks/useToggledVersion'\nimport useENS from '../../hooks/useENS'\nimport { useV1Trade } from '../../data/V1'\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 ? 'ETH' : '',\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 v1Trade: Trade | undefined\n} {\n const { account } = useActiveWeb3React()\n\n const toggledVersion = useToggledVersion()\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 // get link to trade on v1, if a better rate exists\n const v1Trade = useV1Trade(isExactIn, currencies[Field.INPUT], currencies[Field.OUTPUT], parsedAmount)\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 const slippageAdjustedAmountsV1 =\n v1Trade && allowedSlippage && computeSlippageAdjustedAmounts(v1Trade, allowedSlippage)\n\n // compare input balance to max input based on version\n const [balanceIn, amountIn] = [\n currencyBalances[Field.INPUT],\n toggledVersion === Version.v1\n ? slippageAdjustedAmountsV1\n ? slippageAdjustedAmountsV1[Field.INPUT]\n : null\n : slippageAdjustedAmounts\n ? slippageAdjustedAmounts[Field.INPUT]\n : 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 v1Trade,\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() === 'ETH') return 'ETH'\n if (valid === false) return 'ETH'\n }\n return 'ETH' ?? ''\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 { Currency, CurrencyAmount, ETHER, JSBI, Pair, Percent, Price, TokenAmount } from '@oboswap/matic-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 '@oboswap/matic-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","import React from 'react'\nimport { useWeb3React } from '@web3-react/core'\nimport { Button, ButtonProps, ConnectorId, useWalletModal } from '@pancakeswap-libs/uikit'\nimport { injected, walletconnect } from 'connectors'\nimport useI18n from 'hooks/useI18n'\n\nconst UnlockButton: React.FC = props => {\n const TranslateString = useI18n()\n const { account, activate, deactivate } = useWeb3React()\n\n const handleLogin = (connectorId: ConnectorId) => {\n if (connectorId === 'walletconnect') {\n return activate(walletconnect)\n }\n return activate(injected)\n }\n\n const { onPresentConnectModal } = useWalletModal(handleLogin, deactivate, account as string)\n\n return (\n \n )\n}\n\nexport default UnlockButton\n","import React from 'react'\nimport styled from 'styled-components'\nimport { Card } from '@pancakeswap-libs/uikit'\n\nexport const BodyWrapper = styled(Card)`\n// // border: 1px solid white;\n// box-shadow: 0 4px 60px rgb(110 198 215 / 70%);\n position: relative;\n max-width: 436px;\n width: 100%;\n z-index: 5;\n background :rgb(255 255 255);\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 '@pancakeswap-libs/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`\nexport const MaxButton = styled.button<{ width: string }>`\n padding: 0.5rem 1rem;\n background-color: ${({ theme }) => theme.colors.primaryDark};\n border: 1px solid ${({ theme }) => theme.colors.primaryDark};\n border-radius: 0.5rem;\n font-size: 1rem;\n ${({ theme }) => theme.mediaQueries.sm} {\n padding: 0.25rem 0.5rem;\n }\n font-weight: 500;\n cursor: pointer;\n margin: 0.25rem;\n overflow: hidden;\n color: ${({ theme }) => theme.colors.primary};\n :hover {\n border: 1px solid ${({ theme }) => theme.colors.primary};\n }\n :focus {\n border: 1px solid ${({ theme }) => theme.colors.primary};\n outline: none;\n }\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 '@oboswap/matic-sdk'\nimport React from 'react'\nimport { Button } from '@pancakeswap-libs/uikit'\nimport { RowBetween, RowFixed } from '../../components/Row'\nimport CurrencyLogo from '../../components/CurrencyLogo'\nimport { Field } from '../../state/mint/actions'\nimport { TYPE } from '../../components/Shared'\n\nconst { body: Body } = TYPE\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 '@oboswap/matic-sdk'\nimport { Text } from '@pancakeswap-libs/uikit'\nimport { AutoColumn } from '../../components/Column'\nimport { AutoRow } from '../../components/Row'\nimport { ONE_BIPS } from '../../constants'\nimport { Field } from '../../state/mint/actions'\nimport { TYPE } from '../../components/Shared'\n\nconst { black: Black } = TYPE\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 '@oboswap/matic-sdk'\nimport { Button, CardBody, AddIcon, Text as UIKitText } from '@pancakeswap-libs/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 { TYPE } from 'components/Shared'\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 AppBody from '../AppBody'\nimport { Dots, Wrapper } from '../Pool/styleds'\nimport { ConfirmAddModalBottom } from './ConfirmAddModalBottom'\nimport { PoolPriceBar } from './PoolPriceBar'\nimport { ROUTER_ADDRESS } from '../../constants'\n\nconst { italic: Italic } = TYPE\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\n const oneCurrencyIsWETH = 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 tokenBIsETH = currencyB === ETHER\n estimate = router.estimateGas.addLiquidityETH\n method = router.addLiquidityETH\n args = [\n wrappedCurrency(tokenBIsETH ? currencyA : currencyB, chainId)?.address ?? '', // token\n (tokenBIsETH ? parsedAmountA : parsedAmountB).raw.toString(), // token desired\n amountsMin[tokenBIsETH ? Field.CURRENCY_A : Field.CURRENCY_B].toString(), // token min\n amountsMin[tokenBIsETH ? Field.CURRENCY_B : Field.CURRENCY_A].toString(), // eth min\n account,\n deadlineFromNow,\n ]\n value = BigNumber.from((tokenBIsETH ? 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 || 'ETH'}/${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 You are the first liquidity provider.\n The ratio of tokens you add will set the price of this pool.\n Once you are happy with the rate click supply to review.\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 ? 'Initial prices and pool share' : '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 fullWidth\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\nexport function RedirectToAddLiquidity() {\n return \n}\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 { AutoColumn } from '../../components/Column'\nimport { TYPE } from '../../components/Shared'\n\nconst { body: Body } = TYPE\n\nexport function EmptyState({ message }: { message: string }) {\n return (\n \n {message}\n \n )\n}\n\nexport default EmptyState\n","import React from 'react'\nimport { Link, RouteComponentProps, withRouter } from 'react-router-dom'\nimport { Token, TokenAmount, WETH } from '@oboswap/matic-sdk'\nimport { Button, Text } from '@pancakeswap-libs/uikit'\nimport { AutoColumn } from '../Column'\nimport { RowBetween, RowFixed } from '../Row'\nimport { FixedHeightRow, HoverCard } from './index'\nimport DoubleCurrencyLogo from '../DoubleLogo'\nimport { useActiveWeb3React } from '../../hooks'\n\ninterface PositionCardProps extends RouteComponentProps {\n token: Token\n V1LiquidityBalance: TokenAmount\n}\n\nfunction V1PositionCard({ token, V1LiquidityBalance }: PositionCardProps) {\n const { chainId } = useActiveWeb3React()\n\n return (\n \n \n \n \n \n \n {`${chainId && token.equals(WETH[chainId]) ? 'WETH' : token.symbol}/ETH`}\n \n \n V1\n \n \n \n\n \n \n \n\n \n Remove\n \n \n \n \n \n )\n}\n\nexport default withRouter(V1PositionCard)\n","import { JSBI, Token } from '@oboswap/matic-sdk'\nimport React, { useCallback, useContext, useMemo, useState, useEffect } from 'react'\nimport { ThemeContext } from 'styled-components'\nimport { AutoColumn } from '../../components/Column'\nimport { AutoRow } from '../../components/Row'\nimport { SearchInput } from '../../components/SearchModal/styleds'\nimport { useAllTokenV1Exchanges } from '../../data/V1'\nimport { useActiveWeb3React } from '../../hooks'\nimport { useAllTokens, useToken } from '../../hooks/Tokens'\nimport { useSelectedTokenList } from '../../state/lists/hooks'\nimport { useTokenBalancesWithLoadingIndicator } from '../../state/wallet/hooks'\nimport { BackArrow, TYPE } from '../../components/Shared'\nimport { LightCard } from '../../components/Card'\nimport { BodyWrapper } from '../AppBody'\nimport { EmptyState } from './EmptyState'\nimport V1PositionCard from '../../components/PositionCard/V1'\nimport QuestionHelper from '../../components/QuestionHelper'\nimport { Dots } from '../../components/swap/styleds'\nimport { useAddUserToken } from '../../state/user/hooks'\nimport { isTokenOnList } from '../../utils'\n\nconst { mediumHeader: MediumHeader, body: Body } = TYPE\n\nexport default function MigrateV1() {\n const theme = useContext(ThemeContext)\n const { account, chainId } = useActiveWeb3React()\n\n const [tokenSearch, setTokenSearch] = useState('')\n const handleTokenSearchChange = useCallback((e) => setTokenSearch(e.target.value), [setTokenSearch])\n\n // automatically add the search token\n const token = useToken(tokenSearch)\n const selectedTokenListTokens = useSelectedTokenList()\n const isOnSelectedList = isTokenOnList(selectedTokenListTokens, token ?? undefined)\n const allTokens = useAllTokens()\n const addToken = useAddUserToken()\n useEffect(() => {\n if (token && !isOnSelectedList && !allTokens[token.address]) {\n addToken(token)\n }\n }, [token, isOnSelectedList, addToken, allTokens])\n\n // get V1 LP balances\n const V1Exchanges = useAllTokenV1Exchanges()\n const V1LiquidityTokens: Token[] = useMemo(() => {\n return chainId\n ? Object.keys(V1Exchanges).map(\n (exchangeAddress) => new Token(chainId, exchangeAddress, 18, 'UNI-V1', 'Uniswap V1')\n )\n : []\n }, [chainId, V1Exchanges])\n const [V1LiquidityBalances, V1LiquidityBalancesLoading] = useTokenBalancesWithLoadingIndicator(\n account ?? undefined,\n V1LiquidityTokens\n )\n const allV1PairsWithLiquidity = V1LiquidityTokens.filter((V1LiquidityToken) => {\n const balance = V1LiquidityBalances?.[V1LiquidityToken.address]\n return balance && JSBI.greaterThan(balance.raw, JSBI.BigInt(0))\n }).map((V1LiquidityToken) => {\n const balance = V1LiquidityBalances[V1LiquidityToken.address]\n return balance ? (\n \n ) : null\n })\n\n // should never always be false, because a V1 exhchange exists for WETH on all testnets\n const isLoading = Object.keys(V1Exchanges)?.length === 0 || V1LiquidityBalancesLoading\n\n return (\n \n \n \n \n Migrate V1 Liquidity\n
\n \n
\n
\n\n \n For each pool shown below, click migrate to remove your liquidity from Uniswap V1 and deposit it into Uniswap\n V2.\n \n\n {!account ? (\n \n \n Connect to a wallet to view your V1 liquidity.\n \n \n ) : isLoading ? (\n \n \n Loading\n \n \n ) : (\n <>\n \n \n \n {allV1PairsWithLiquidity?.length > 0 ? (\n <>{allV1PairsWithLiquidity}\n ) : (\n \n )}\n \n )}\n
\n
\n )\n}\n","import { TransactionResponse } from '@ethersproject/abstract-provider'\nimport { AddressZero } from '@ethersproject/constants'\nimport { Currency, CurrencyAmount, Fraction, JSBI, Percent, Token, TokenAmount, WETH } from '@oboswap/matic-sdk'\nimport { Button, Text } from '@pancakeswap-libs/uikit'\nimport React, { useCallback, useMemo, useState } from 'react'\nimport { Redirect, RouteComponentProps } from 'react-router'\nimport { LightCard, PinkCard, YellowCard } from '../../components/Card'\nimport { AutoColumn } from '../../components/Column'\nimport CurrencyLogo from '../../components/CurrencyLogo'\nimport QuestionHelper from '../../components/QuestionHelper'\nimport { AutoRow, RowBetween, RowFixed } from '../../components/Row'\nimport { Dots } from '../../components/swap/styleds'\nimport { DEFAULT_DEADLINE_FROM_NOW, INITIAL_ALLOWED_SLIPPAGE } from '../../constants'\nimport { MIGRATOR_ADDRESS } from '../../constants/abis/migrator'\nimport { PairState, usePair } from '../../data/Reserves'\nimport { useTotalSupply } from '../../data/TotalSupply'\nimport { useActiveWeb3React } from '../../hooks'\nimport { useToken } from '../../hooks/Tokens'\nimport { ApprovalState, useApproveCallback } from '../../hooks/useApproveCallback'\nimport { useV1ExchangeContract, useV2MigratorContract } from '../../hooks/useContract'\nimport { NEVER_RELOAD, useSingleCallResult } from '../../state/multicall/hooks'\nimport { useIsTransactionPending, useTransactionAdder } from '../../state/transactions/hooks'\nimport { useETHBalances, useTokenBalance } from '../../state/wallet/hooks'\nimport { BackArrow, ExternalLink, TYPE } from '../../components/Shared'\nimport { getEtherscanLink, isAddress } from '../../utils'\nimport { BodyWrapper } from '../AppBody'\nimport { EmptyState } from './EmptyState'\n\nconst {\n mediumHeader: MediumHeader,\n largeHeader: LargeHeader,\n body: Body,\n blue: Blue,\n black: Black,\n darkGray: DarkDray,\n} = TYPE\n\nconst POOL_CURRENCY_AMOUNT_MIN = new Fraction(JSBI.BigInt(1), JSBI.BigInt(1000000))\nconst WEI_DENOM = JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(18))\nconst ZERO = JSBI.BigInt(0)\nconst ONE = JSBI.BigInt(1)\nconst ZERO_FRACTION = new Fraction(ZERO, ONE)\nconst ALLOWED_OUTPUT_MIN_PERCENT = new Percent(JSBI.BigInt(10000 - INITIAL_ALLOWED_SLIPPAGE), JSBI.BigInt(10000))\n\nfunction FormattedPoolCurrencyAmount({ currencyAmount }: { currencyAmount: CurrencyAmount }) {\n return (\n <>\n {currencyAmount.equalTo(JSBI.BigInt(0))\n ? '0'\n : currencyAmount.greaterThan(POOL_CURRENCY_AMOUNT_MIN)\n ? currencyAmount.toSignificant(4)\n : `<${POOL_CURRENCY_AMOUNT_MIN.toSignificant(1)}`}\n \n )\n}\n\nexport function V1LiquidityInfo({\n token,\n liquidityTokenAmount,\n tokenWorth,\n ethWorth,\n}: {\n token: Token\n liquidityTokenAmount: TokenAmount\n tokenWorth: TokenAmount\n ethWorth: CurrencyAmount\n}) {\n const { chainId } = useActiveWeb3React()\n\n return (\n <>\n \n \n
\n \n {}{' '}\n {chainId && token.equals(WETH[chainId]) ? 'WETH' : token.symbol}/ETH\n \n
\n
\n\n \n Pooled {chainId && token.equals(WETH[chainId]) ? 'WETH' : token.symbol}:\n \n \n {tokenWorth.toSignificant(4)}\n \n \n \n \n \n Pooled ETH:\n \n \n \n \n \n \n \n \n )\n}\n\nfunction V1PairMigration({ liquidityTokenAmount, token }: { liquidityTokenAmount: TokenAmount; token: Token }) {\n const { account, chainId } = useActiveWeb3React()\n const totalSupply = useTotalSupply(liquidityTokenAmount.token)\n const exchangeETHBalance = useETHBalances([liquidityTokenAmount.token.address])?.[liquidityTokenAmount.token.address]\n const exchangeTokenBalance = useTokenBalance(liquidityTokenAmount.token.address, token)\n\n const [v2PairState, v2Pair] = usePair(chainId ? WETH[chainId] : undefined, token)\n const isFirstLiquidityProvider: boolean = v2PairState === PairState.NOT_EXISTS\n\n const v2SpotPrice = chainId && v2Pair ? v2Pair.reserveOf(token).divide(v2Pair.reserveOf(WETH[chainId])) : undefined\n\n const [confirmingMigration, setConfirmingMigration] = useState(false)\n const [pendingMigrationHash, setPendingMigrationHash] = useState(null)\n\n const shareFraction: Fraction = totalSupply ? new Percent(liquidityTokenAmount.raw, totalSupply.raw) : ZERO_FRACTION\n\n const ethWorth: CurrencyAmount = exchangeETHBalance\n ? CurrencyAmount.ether(exchangeETHBalance.multiply(shareFraction).multiply(WEI_DENOM).quotient)\n : CurrencyAmount.ether(ZERO)\n\n const tokenWorth: TokenAmount = exchangeTokenBalance\n ? new TokenAmount(token, shareFraction.multiply(exchangeTokenBalance.raw).quotient)\n : new TokenAmount(token, ZERO)\n\n const [approval, approve] = useApproveCallback(liquidityTokenAmount, MIGRATOR_ADDRESS)\n\n const v1SpotPrice =\n exchangeTokenBalance && exchangeETHBalance\n ? exchangeTokenBalance.divide(new Fraction(exchangeETHBalance.raw, WEI_DENOM))\n : null\n\n const priceDifferenceFraction: Fraction | undefined =\n v1SpotPrice && v2SpotPrice ? v1SpotPrice.divide(v2SpotPrice).multiply('100').subtract('100') : undefined\n\n const priceDifferenceAbs: Fraction | undefined = priceDifferenceFraction?.lessThan(ZERO)\n ? priceDifferenceFraction?.multiply('-1')\n : priceDifferenceFraction\n\n const minAmountETH: JSBI | undefined =\n v2SpotPrice && tokenWorth\n ? tokenWorth.divide(v2SpotPrice).multiply(WEI_DENOM).multiply(ALLOWED_OUTPUT_MIN_PERCENT).quotient\n : ethWorth?.numerator\n\n const minAmountToken: JSBI | undefined =\n v2SpotPrice && ethWorth\n ? ethWorth\n .multiply(v2SpotPrice)\n .multiply(JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(token.decimals)))\n .multiply(ALLOWED_OUTPUT_MIN_PERCENT).quotient\n : tokenWorth?.numerator\n\n const addTransaction = useTransactionAdder()\n const isMigrationPending = useIsTransactionPending(pendingMigrationHash ?? undefined)\n\n const migrator = useV2MigratorContract()\n const migrate = useCallback(() => {\n if (!minAmountToken || !minAmountETH || !migrator) return\n\n setConfirmingMigration(true)\n migrator\n .migrate(\n token.address,\n minAmountToken.toString(),\n minAmountETH.toString(),\n account,\n Math.floor(new Date().getTime() / 1000) + DEFAULT_DEADLINE_FROM_NOW\n )\n .then((response: TransactionResponse) => {\n addTransaction(response, {\n summary: `Migrate ${token.symbol} liquidity to V2`,\n })\n setPendingMigrationHash(response.hash)\n })\n .catch(() => {\n setConfirmingMigration(false)\n })\n }, [minAmountToken, minAmountETH, migrator, token, account, addTransaction])\n\n const noLiquidityTokens = !!liquidityTokenAmount && liquidityTokenAmount.equalTo(ZERO)\n\n const largePriceDifference = !!priceDifferenceAbs && !priceDifferenceAbs.lessThan(JSBI.BigInt(5))\n\n const isSuccessfullyMigrated = !!pendingMigrationHash && noLiquidityTokens\n\n return (\n \n \n This tool will safely migrate your V1 liquidity to V2 with minimal price risk. The process is completely\n trustless thanks to the{' '}\n {chainId && (\n \n Uniswap migration contract↗\n \n )}\n .\n \n\n {!isFirstLiquidityProvider && largePriceDifference ? (\n \n \n It's best to deposit liquidity into Uniswap V2 at a price you believe is correct. If the V2 price seems\n incorrect, you can either make a swap to move the price or wait for someone else to do so.\n \n \n \n V1 Price:\n \n {v1SpotPrice?.toSignificant(6)} {token.symbol}/ETH\n \n \n \n
\n \n {v1SpotPrice?.invert()?.toSignificant(6)} ETH/{token.symbol}\n \n \n\n \n V2 Price:\n \n {v2SpotPrice?.toSignificant(6)} {token.symbol}/ETH\n \n \n \n
\n \n {v2SpotPrice?.invert()?.toSignificant(6)} ETH/{token.symbol}\n \n \n\n \n Price Difference:\n {priceDifferenceAbs?.toSignificant(4)}%\n \n \n \n ) : null}\n\n {isFirstLiquidityProvider && (\n \n \n You are the first liquidity provider for this pair on Uniswap V2. Your liquidity will be migrated at the\n current V1 price. Your transaction cost also includes the gas to create the pool.\n \n\n \n \n V1 Price:\n \n {v1SpotPrice?.toSignificant(6)} {token.symbol}/ETH\n \n \n \n
\n \n {v1SpotPrice?.invert()?.toSignificant(6)} ETH/{token.symbol}\n \n \n \n \n )}\n\n \n \n\n
\n \n \n {approval === ApprovalState.PENDING ? (\n Approving\n ) : approval === ApprovalState.APPROVED ? (\n 'Approved'\n ) : (\n 'Approve'\n )}\n \n \n \n \n {isSuccessfullyMigrated ? 'Success' : isMigrationPending ? Migrating : 'Migrate'}\n \n \n
\n
\n \n {`Your Uniswap V1 ${token.symbol}/ETH liquidity will become Uniswap V2 ${token.symbol}/ETH liquidity.`}\n \n \n )\n}\n\nexport default function MigrateV1Exchange({\n history,\n match: {\n params: { address },\n },\n}: RouteComponentProps<{ address: string }>) {\n const validatedAddress = isAddress(address)\n const { chainId, account } = useActiveWeb3React()\n\n const exchangeContract = useV1ExchangeContract(validatedAddress || undefined)\n const tokenAddress = useSingleCallResult(exchangeContract, 'tokenAddress', undefined, NEVER_RELOAD)?.result?.[0]\n\n const token = useToken(tokenAddress)\n\n const liquidityToken: Token | undefined = useMemo(\n () =>\n validatedAddress && chainId && token\n ? new Token(chainId, validatedAddress, 18, `UNI-V1-${token.symbol}`, 'Uniswap V1')\n : undefined,\n [chainId, validatedAddress, token]\n )\n const userLiquidityBalance = useTokenBalance(account ?? undefined, liquidityToken)\n\n // redirect for invalid url params\n if (!validatedAddress || tokenAddress === AddressZero) {\n console.error('Invalid address in path', address)\n return \n }\n\n return (\n \n \n \n \n Migrate V1 Liquidity\n
\n \n
\n
\n\n {!account ? (\n You must connect an account.\n ) : validatedAddress && chainId && token?.equals(WETH[chainId]) ? (\n <>\n \n Because Uniswap V2 uses WETH under the hood, your Uniswap V1 WETH/ETH liquidity cannot be migrated. You\n may want to remove your liquidity instead.\n \n\n {\n history.push(`/remove/v1/${validatedAddress}`)\n }}\n >\n Remove\n \n \n ) : userLiquidityBalance && token ? (\n \n ) : (\n \n )}\n
\n
\n )\n}\n","import React, { useCallback, useMemo, useState } from 'react'\nimport { TransactionResponse } from '@ethersproject/abstract-provider'\nimport { JSBI, Token, TokenAmount, WETH, Fraction, Percent, CurrencyAmount } from '@oboswap/matic-sdk'\nimport { Button } from '@pancakeswap-libs/uikit'\nimport { Redirect, RouteComponentProps } from 'react-router'\nimport { AddressZero } from '@ethersproject/constants'\nimport { Contract } from '@ethersproject/contracts'\nimport { LightCard } from '../../components/Card'\nimport { AutoColumn } from '../../components/Column'\nimport QuestionHelper from '../../components/QuestionHelper'\nimport { AutoRow } from '../../components/Row'\nimport { DEFAULT_DEADLINE_FROM_NOW } from '../../constants'\nimport { useActiveWeb3React } from '../../hooks'\nimport { useToken } from '../../hooks/Tokens'\nimport { useV1ExchangeContract } from '../../hooks/useContract'\nimport { NEVER_RELOAD, useSingleCallResult } from '../../state/multicall/hooks'\nimport { useIsTransactionPending, useTransactionAdder } from '../../state/transactions/hooks'\nimport { useTokenBalance, useETHBalances } from '../../state/wallet/hooks'\nimport { BackArrow, TYPE } from '../../components/Shared'\nimport { isAddress } from '../../utils'\nimport { BodyWrapper } from '../AppBody'\nimport { EmptyState } from './EmptyState'\nimport { V1LiquidityInfo } from './MigrateV1Exchange'\nimport { Dots } from '../../components/swap/styleds'\nimport { useTotalSupply } from '../../data/TotalSupply'\n\nconst { body: Body, darkGray: DarkGray, mediumHeader: MediumHeader, largeHeader: LargeHeader } = TYPE\n\nconst WEI_DENOM = JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(18))\nconst ZERO = JSBI.BigInt(0)\nconst ONE = JSBI.BigInt(1)\nconst ZERO_FRACTION = new Fraction(ZERO, ONE)\n\nfunction V1PairRemoval({\n exchangeContract,\n liquidityTokenAmount,\n token,\n}: {\n exchangeContract: Contract\n liquidityTokenAmount: TokenAmount\n token: Token\n}) {\n const { chainId } = useActiveWeb3React()\n const totalSupply = useTotalSupply(liquidityTokenAmount.token)\n const exchangeETHBalance = useETHBalances([liquidityTokenAmount.token.address])?.[liquidityTokenAmount.token.address]\n const exchangeTokenBalance = useTokenBalance(liquidityTokenAmount.token.address, token)\n\n const [confirmingRemoval, setConfirmingRemoval] = useState(false)\n const [pendingRemovalHash, setPendingRemovalHash] = useState(null)\n\n const shareFraction: Fraction = totalSupply ? new Percent(liquidityTokenAmount.raw, totalSupply.raw) : ZERO_FRACTION\n\n const ethWorth: CurrencyAmount = exchangeETHBalance\n ? CurrencyAmount.ether(exchangeETHBalance.multiply(shareFraction).multiply(WEI_DENOM).quotient)\n : CurrencyAmount.ether(ZERO)\n\n const tokenWorth: TokenAmount = exchangeTokenBalance\n ? new TokenAmount(token, shareFraction.multiply(exchangeTokenBalance.raw).quotient)\n : new TokenAmount(token, ZERO)\n\n const addTransaction = useTransactionAdder()\n const isRemovalPending = useIsTransactionPending(pendingRemovalHash ?? undefined)\n\n const remove = useCallback(() => {\n if (!liquidityTokenAmount) return\n\n setConfirmingRemoval(true)\n exchangeContract\n .removeLiquidity(\n liquidityTokenAmount.raw.toString(),\n 1, // min_eth, this is safe because we're removing liquidity\n 1, // min_tokens, this is safe because we're removing liquidity\n Math.floor(new Date().getTime() / 1000) + DEFAULT_DEADLINE_FROM_NOW\n )\n .then((response: TransactionResponse) => {\n addTransaction(response, {\n summary: `Remove ${chainId && token.equals(WETH[chainId]) ? 'WETH' : token.symbol}/ETH V1 liquidity`,\n })\n setPendingRemovalHash(response.hash)\n })\n .catch((error: Error) => {\n console.error(error)\n setConfirmingRemoval(false)\n })\n }, [exchangeContract, liquidityTokenAmount, token, chainId, addTransaction])\n\n const noLiquidityTokens = !!liquidityTokenAmount && liquidityTokenAmount.equalTo(ZERO)\n\n const isSuccessfullyRemoved = !!pendingRemovalHash && noLiquidityTokens\n\n return (\n \n \n This tool will remove your V1 liquidity and send the underlying assets to your wallet.\n \n\n \n \n\n
\n \n {isSuccessfullyRemoved ? 'Success' : isRemovalPending ? Removing : 'Remove'}\n \n
\n
\n \n {`Your Uniswap V1 ${\n chainId && token.equals(WETH[chainId]) ? 'WETH' : token.symbol\n }/ETH liquidity will be redeemed for underlying assets.`}\n \n
\n )\n}\n\nexport default function RemoveV1Exchange({\n match: {\n params: { address },\n },\n}: RouteComponentProps<{ address: string }>) {\n const validatedAddress = isAddress(address)\n const { chainId, account } = useActiveWeb3React()\n\n const exchangeContract = useV1ExchangeContract(validatedAddress || undefined, true)\n const tokenAddress = useSingleCallResult(exchangeContract, 'tokenAddress', undefined, NEVER_RELOAD)?.result?.[0]\n const token = useToken(tokenAddress)\n\n const liquidityToken: Token | undefined = useMemo(\n () =>\n validatedAddress && chainId && token\n ? new Token(chainId, validatedAddress, 18, `UNI-V1-${token.symbol}`, 'Uniswap V1')\n : undefined,\n [chainId, validatedAddress, token]\n )\n const userLiquidityBalance = useTokenBalance(account ?? undefined, liquidityToken)\n\n // redirect for invalid url params\n if (!validatedAddress || tokenAddress === AddressZero) {\n console.error('Invalid address in path', address)\n return \n }\n\n return (\n \n \n \n \n Remove V1 Liquidity\n
\n \n
\n
\n\n {!account ? (\n You must connect an account.\n ) : userLiquidityBalance && token && exchangeContract ? (\n \n ) : (\n \n )}\n
\n
\n )\n}\n","import React, { useEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport { Button, Flex, Input, Text } from '@pancakeswap-libs/uikit'\nimport { useUserSlippageTolerance } from 'state/user/hooks'\nimport QuestionHelper from '../QuestionHelper'\nimport TranslatedText from '../TranslatedText'\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\nconst SlippageToleranceSettings = () => {\n const [userSlippageTolerance, setUserslippageTolerance] = useUserSlippageTolerance()\n const [value, setValue] = useState(userSlippageTolerance / 100)\n const [error, setError] = useState(null)\n\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('Enter a valid slippage percentage')\n }\n } catch {\n setError('Enter a valid slippage percentage')\n }\n }, [value, setError, setUserslippageTolerance])\n\n // Notify user if slippage is risky\n useEffect(() => {\n if (userSlippageTolerance < RISKY_SLIPPAGE_LOW) {\n setError('Your transaction may fail')\n } else if (userSlippageTolerance > RISKY_SLIPPAGE_HIGH) {\n setError('Your transaction may be frontrun')\n }\n }, [userSlippageTolerance, setError])\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 { Currency, ETHER, JSBI, TokenAmount } from '@oboswap/matic-sdk'\nimport React, { useCallback, useEffect, useState } from 'react'\nimport { Button, ChevronDownIcon, AddIcon, CardBody, Text } from '@pancakeswap-libs/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 TranslatedText from 'components/TranslatedText'\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 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 ? 'Connect to a wallet to find pools' : '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 fullWidth\n >\n {currency0 ? currency0.symbol : 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 fullWidth\n >\n {currency1 ? currency1.symbol : Select a Token}\n \n\n {hasPosition && (\n \n Pool Found!\n \n )}\n\n {currency0 && currency1 ? (\n pairState === PairState.EXISTS ? (\n hasPosition && pair ? (\n \n ) : (\n \n \n You don’t have liquidity in this pool yet.\n \n \n Add Liquidity\n \n \n \n \n )\n ) : validPairNoLiquidity ? (\n \n \n No pool found.\n \n Create pool.\n \n \n \n ) : pairState === PairState.INVALID ? (\n \n \n \n Invalid pair.\n \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, { useEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport { Input, Text } from '@pancakeswap-libs/uikit'\nimport { useUserDeadline } from 'state/user/hooks'\nimport QuestionHelper from '../QuestionHelper'\nimport TranslatedText from '../TranslatedText'\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\nconst TransactionDeadlineSetting = () => {\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('Enter a valid deadline')\n }\n } catch {\n setError('Enter a valid deadline')\n }\n }, [value, setError, setDeadline])\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 '@pancakeswap-libs/uikit'\nimport SlippageToleranceSetting from './SlippageToleranceSetting'\nimport TransactionDeadlineSetting from './TransactionDeadlineSetting'\n\ntype SettingsModalProps = {\n onDismiss?: () => void\n}\n\n// TODO: Fix UI Kit typings\nconst defaultOnDismiss = () => null\n\nconst SettingsModal = ({ onDismiss = defaultOnDismiss }: 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 '@pancakeswap-libs/uikit'\nimport { useActiveWeb3React } from 'hooks'\nimport { getEtherscanLink } 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}\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 }: RecentTransactionsModalProps) => {\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 } from '@pancakeswap-libs/uikit'\nimport SettingsModal from './SettingsModal'\nimport RecentTransactionsModal from './RecentTransactionsModal'\n\ninterface PageHeaderProps {\n title: ReactNode\n description?: ReactNode\n children?: ReactNode\n}\n\n// TODO: use UI Kit\nconst CogIcon = () => (\n \n \n \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 [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 React, { useContext, useMemo } from 'react'\nimport { ThemeContext } from 'styled-components'\nimport { Pair } from '@oboswap/matic-sdk'\nimport { Button, CardBody, Text } from '@pancakeswap-libs/uikit'\nimport { Link } from 'react-router-dom'\nimport CardNav from 'components/CardNav'\nimport Question from 'components/QuestionHelper'\nimport FullPositionCard from 'components/PositionCard'\nimport { useUserHasLiquidityInAllTokens } from 'data/V1'\nimport { useTokenBalancesWithLoadingIndicator } from 'state/wallet/hooks'\nimport { StyledInternalLink, TYPE } 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 TranslatedText from 'components/TranslatedText'\nimport { TranslateString } from 'utils/translateTextHelpers'\nimport PageHeader from 'components/PageHeader'\nimport AppBody from '../AppBody'\n\nconst { body: Body } = TYPE\n\nexport default function Pool() {\n const theme = useContext(ThemeContext)\n const { account } = useActiveWeb3React()\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 const hasV1Liquidity = useUserHasLiquidityInAllTokens()\n \n \n return (\n <>\n \n \n \n \n \n \n \n \n \n \n Your Liquidity\n \n \n \n\n {!account ? (\n \n \n 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 \n No liquidity found.\n \n \n )}\n\n
\n \n {hasV1Liquidity\n ? 'Uniswap V1 liquidity found!'\n : \"Don't see a pool you joined?\"}{' '}\n \n {hasV1Liquidity ? 'Migrate now.' : 'Import it.'}\n \n \n \n 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 { 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 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 { Currency, CurrencyAmount, JSBI, Pair, Percent, TokenAmount } from '@oboswap/matic-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 '@oboswap/matic-sdk'\nimport { Button, Flex, Text } from '@pancakeswap-libs/uikit'\nimport { ArrowDown, Plus } from 'react-feather'\nimport { RouteComponentProps } from 'react-router'\n\nimport { BigNumber } from '@ethersproject/bignumber'\nimport ConnectWalletButton from 'components/ConnectWalletButton'\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, TYPE } 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 { italic: Italic } = TYPE\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 [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: 'Oboswap 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 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 ? 'Simple' : 'Detailed'}\n \n \n \n {formattedAmounts[Field.LIQUIDITY_PERCENT]}%\n \n {!showDetailed && (\n <>\n \n \n \n \n \n \n \n onUserInput(Field.LIQUIDITY_PERCENT, '100')}\n >\n 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 Receive WBNB\n \n ) : oneCurrencyIsWETH ? (\n \n 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 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, { useContext, useCallback } from 'react'\nimport styled, { ThemeContext } from 'styled-components'\nimport useENS from '../../hooks/useENS'\nimport { useActiveWeb3React } from '../../hooks'\nimport { ExternalLink, TYPE } from '../Shared'\nimport { AutoColumn } from '../Column'\nimport { RowBetween } from '../Row'\nimport { getEtherscanLink } from '../../utils'\n\nconst { black: Black } = TYPE\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 theme = useContext(ThemeContext)\n\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 Recipient\n \n {address && chainId && (\n \n (View on PolygonScan)\n \n )}\n \n \n \n \n \n \n )\n}\n","import { Percent } from '@oboswap/matic-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 '@oboswap/matic-sdk'\nimport React, { useMemo, useState } from 'react'\nimport { Text , Button } from '@pancakeswap-libs/uikit'\nimport { Repeat } from 'react-feather'\n\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\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 ? 'Minimum received' : '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 Price Impact\n \n \n \n \n \n \n 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 fullWidth\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 '@oboswap/matic-sdk'\nimport { Button, Text } from '@pancakeswap-libs/uikit'\nimport { ArrowDown, AlertTriangle } from 'react-feather'\n\nimport { Field } from '../../state/swap/actions'\nimport { TYPE } from '../Shared'\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 { main: Main } = TYPE\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 '@oboswap/matic-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 '@oboswap/matic-sdk'\nimport React, { Fragment, memo, useContext } from 'react'\nimport { ChevronRight } from 'react-feather'\nimport { Flex } from '@pancakeswap-libs/uikit'\nimport { ThemeContext } from 'styled-components'\nimport { TYPE } from '../Shared'\nimport CurrencyLogo from '../CurrencyLogo'\n\nconst { black: Black } = TYPE\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 '@oboswap/matic-sdk'\nimport { Card, CardBody, Text } from '@pancakeswap-libs/uikit'\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\n return (\n \n \n \n \n {isExactIn ? 'Minimum received' : 'Maximum sold'}\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 Price Impact\n \n \n \n \n\n \n \n 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\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, { useMemo } from 'react'\nimport { stringify } from 'qs'\nimport { useLocation } from 'react-router'\nimport { Text } from '@pancakeswap-libs/uikit'\nimport useParsedQueryString from '../../hooks/useParsedQueryString'\nimport { DEFAULT_VERSION, Version } from '../../hooks/useToggledVersion'\nimport { StyledInternalLink } from \"../Shared\"\nimport { YellowCard } from '../Card'\nimport { AutoColumn } from '../Column'\n\nexport default function BetterTradeLink({ version }: { version: Version }) {\n const location = useLocation()\n const search = useParsedQueryString()\n\n const linkDestination = useMemo(() => {\n return {\n ...location,\n search: `?${stringify({\n ...search,\n use: version !== DEFAULT_VERSION ? version : undefined\n })}`\n }\n }, [location, search, version])\n\n return (\n \n \n \n There is a better price for this trade on{' '}\n \n Uniswap {version.toUpperCase()} ↗\n \n \n \n \n )\n}\n","import React from 'react'\nimport { Price } from '@oboswap/matic-sdk'\nimport { SyncAltIcon, Text } from '@pancakeswap-libs/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 '@oboswap/matic-sdk'\nimport { transparentize } from 'polished'\nimport { Button, Text } from '@pancakeswap-libs/uikit'\nimport React, { useCallback, useMemo, useState } from 'react'\nimport styled from 'styled-components'\nimport { AlertTriangle } from 'react-feather'\nimport { useActiveWeb3React } from '../../hooks'\nimport { useAllTokens } from '../../hooks/Tokens'\nimport { ExternalLink, TYPE } from '../Shared'\nimport { getEtherscanLink, shortenAddress } from '../../utils'\nimport CurrencyLogo from '../CurrencyLogo'\nimport Modal from '../Modal'\nimport { AutoRow, RowBetween } from '../Row'\nimport { AutoColumn } from '../Column'\n\nconst { main: Main, blue: Blue } = TYPE\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\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 {shortenAddress(token.address)} (View on PolygonScan)\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\n const handleDismiss = useCallback(() => null, [])\n return (\n \n \n \n \n \n Token imported\n \n \n Anyone can create an ERC20 token on Polygon with any name, including creating fake versions of existing\n tokens and tokens that claim to represent projects that do not have a token.\n \n \n This interface can load arbitrary tokens by token addresses. Please take extra caution and do your research\n when interacting with arbitrary ERC20 tokens.\n \n \n If you purchase an arbitrary token, you may be unable to sell it back.\n \n {tokens.map((token) => {\n return \n })}\n \n
\n \n
\n {\n onConfirm()\n }}\n >\n Continue\n \n
\n
\n
\n
\n )\n}\n","import React, { useCallback, useState } from 'react'\nimport styled from 'styled-components'\nimport { Button, Text } from '@pancakeswap-libs/uikit'\nimport { AlertTriangle } from 'react-feather'\nimport { TYPE } from '../Shared'\nimport Modal from '../Modal'\nimport { AutoRow, RowBetween } from '../Row'\nimport { AutoColumn } from '../Column'\n\nconst { main: Main, body: Body } = TYPE\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 : '#27262c'};\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 '@oboswap/matic-sdk'\nimport { useMemo } from 'react'\nimport { BIPS_BASE, DEFAULT_DEADLINE_FROM_NOW, INITIAL_ALLOWED_SLIPPAGE } from '../constants'\nimport { getTradeVersion, useV1TradeExchangeAddress } from '../data/V1'\nimport { useTransactionAdder } from '../state/transactions/hooks'\nimport { calculateGasMargin, getRouterContract, isAddress, shortenAddress } from '../utils'\nimport isZero from '../utils/isZero'\nimport v1SwapArguments from '../utils/v1SwapArguments'\nimport { useActiveWeb3React } from './index'\nimport { useV1ExchangeContract } from './useContract'\nimport useENS from './useENS'\nimport { Version } from './useToggledVersion'\n\nexport 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 const v1Exchange = useV1ExchangeContract(useV1TradeExchangeAddress(trade), true)\n\n return useMemo(() => {\n const tradeVersion = getTradeVersion(trade)\n if (!trade || !recipient || !library || !account || !tradeVersion || !chainId) return []\n\n const contract: Contract | null =\n tradeVersion === Version.v2 ? getRouterContract(chainId, library, account) : v1Exchange\n if (!contract) {\n return []\n }\n\n const swapMethods = []\n\n switch (tradeVersion) {\n case Version.v2:\n swapMethods.push(\n // @ts-ignore\n Router.swapCallParameters(trade, {\n feeOnTransfer: false,\n allowedSlippage: new Percent(JSBI.BigInt(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(allowedSlippage), BIPS_BASE),\n recipient,\n ttl: deadline,\n })\n )\n }\n break\n case Version.v1:\n swapMethods.push(\n // @ts-ignore\n v1SwapArguments(trade, {\n allowedSlippage: new Percent(JSBI.BigInt(allowedSlippage), BIPS_BASE),\n recipient,\n ttl: deadline,\n })\n )\n break\n }\n return swapMethods.map((parameters) => ({ parameters, contract }))\n }, [account, allowedSlippage, chainId, deadline, library, recipient, trade, v1Exchange])\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 const tradeVersion = getTradeVersion(trade)\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 const withVersion =\n tradeVersion === Version.v2 ? withRecipient : `${withRecipient} on ${(tradeVersion as any).toUpperCase()}`\n\n addTransaction(response, {\n summary: withVersion,\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","import { Currency, currencyEquals, ETHER, WETH } from '@oboswap/matic-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 ETH 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 { MaxUint256 } from '@ethersproject/constants'\nimport { CurrencyAmount, ETHER, SwapParameters, Token, Trade, TradeOptions, TradeType } from '@oboswap/matic-sdk'\nimport { getTradeVersion } from '../data/V1'\nimport { Version } from '../hooks/useToggledVersion'\n\nfunction toHex(currencyAmount: CurrencyAmount): string {\n return `0x${currencyAmount.raw.toString(16)}`\n}\n\nfunction deadlineFromNow(ttl: number): string {\n return `0x${(Math.floor(new Date().getTime() / 1000) + ttl).toString(16)}`\n}\n\n/**\n * Get the arguments to make for a swap\n * @param trade trade to get v1 arguments for swapping\n * @param options options for swapping\n */\nexport default function v1SwapArguments(trade: Trade, options: Omit): SwapParameters {\n if (getTradeVersion(trade) !== Version.v1) {\n throw new Error('invalid trade version')\n }\n if (trade.route.pairs.length > 2) {\n throw new Error('too many pairs')\n }\n const isExactIn = trade.tradeType === TradeType.EXACT_INPUT\n const inputETH = trade.inputAmount.currency === ETHER\n const outputETH = trade.outputAmount.currency === ETHER\n if (inputETH && outputETH) throw new Error('ETHER to ETHER')\n const minimumAmountOut = toHex(trade.minimumAmountOut(options.allowedSlippage))\n const maximumAmountIn = toHex(trade.maximumAmountIn(options.allowedSlippage))\n const deadline = deadlineFromNow(options.ttl)\n if (isExactIn) {\n if (inputETH) {\n return {\n methodName: 'ethToTokenTransferInput',\n args: [minimumAmountOut, deadline, options.recipient],\n value: maximumAmountIn\n }\n } if (outputETH) {\n return {\n methodName: 'tokenToEthTransferInput',\n args: [maximumAmountIn, minimumAmountOut, deadline, options.recipient],\n value: '0x0'\n }\n } \n const outputToken = trade.outputAmount.currency\n // should never happen, needed for type check\n if (!(outputToken instanceof Token)) {\n throw new Error('token to token')\n }\n return {\n methodName: 'tokenToTokenTransferInput',\n args: [maximumAmountIn, minimumAmountOut, '0x1', deadline, options.recipient, outputToken.address],\n value: '0x0'\n }\n \n } \n if (inputETH) {\n return {\n methodName: 'ethToTokenTransferOutput',\n args: [minimumAmountOut, deadline, options.recipient],\n value: maximumAmountIn\n }\n } if (outputETH) {\n return {\n methodName: 'tokenToEthTransferOutput',\n args: [minimumAmountOut, maximumAmountIn, deadline, options.recipient],\n value: '0x0'\n }\n } \n const output = trade.outputAmount.currency\n if (!(output instanceof Token)) {\n throw new Error('invalid output amount currency')\n }\n\n return {\n methodName: 'tokenToTokenTransferOutput',\n args: [\n minimumAmountOut,\n maximumAmountIn,\n MaxUint256.toHexString(),\n deadline,\n options.recipient,\n output.address\n ],\n value: '0x0'\n }\n \n \n}\n","import { CurrencyAmount, JSBI, Token, Trade } from '@oboswap/matic-sdk'\nimport React, { useCallback, useContext, useEffect, useMemo, useState } from 'react'\nimport { ArrowDown } from 'react-feather'\nimport { CardBody, ArrowDownIcon, Button, IconButton, Text,CardHeader,CardFooter } from '@pancakeswap-libs/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 BetterTradeLink from 'components/swap/BetterTradeLink'\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 { BETTER_TRADE_LINK_THRESHOLD, INITIAL_ALLOWED_SLIPPAGE } from 'constants/index'\nimport { isTradeBetter } from 'data/V1'\nimport { useActiveWeb3React } from 'hooks'\nimport { useCurrency } from 'hooks/Tokens'\nimport { ApprovalState, useApproveCallbackFromTrade } from 'hooks/useApproveCallback'\nimport { useSwapCallback } from 'hooks/useSwapCallback'\nimport useToggledVersion, { Version } from 'hooks/useToggledVersion'\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, TYPE } from 'components/Shared'\nimport { maxAmountSpend } from 'utils/maxAmountSpend'\nimport { computeTradePriceBreakdown, warningSeverity } from 'utils/prices'\nimport Loader from 'components/Loader'\nimport { TranslateString } from 'utils/translateTextHelpers'\nimport PageHeader from 'components/PageHeader'\nimport ConnectWalletButton from 'components/ConnectWalletButton'\nimport AppBody from '../AppBody'\n\nimport '../../css/App.css';\n\nconst { main: Main } = TYPE\n\nconst Swap = () => {\n const loadedUrlParams = useDefaultsFromURLSearch()\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 {\n v1Trade,\n v2Trade,\n currencyBalances,\n parsedAmount,\n currencies,\n inputError: swapInputError,\n } = 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 { address: recipientAddress } = useENSAddress(recipient)\n const toggledVersion = useToggledVersion()\n const trade = showWrap\n ? undefined\n : {\n [Version.v1]: v1Trade,\n [Version.v2]: v2Trade,\n }[toggledVersion]\n\n const betterTradeLinkVersion: Version | undefined =\n toggledVersion === Version.v2 && isTradeBetter(v2Trade, v1Trade, BETTER_TRADE_LINK_THRESHOLD)\n ? Version.v1\n : toggledVersion === Version.v1 && isTradeBetter(v1Trade, v2Trade)\n ? Version.v2\n : undefined\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 size=\"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 Price\n \n \n )}\n {allowedSlippage !== INITIAL_ALLOWED_SLIPPAGE && (\n \n Slippage Tolerance\n {allowedSlippage / 100}%\n \n )}\n \n \n )}\n \n \n {!account ? (\n \n ) : showWrap ? (\n \n ) : noRoute && userHasSpecifiedInputOutput ? (\n \n
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 fullWidth\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 {betterTradeLinkVersion && }\n
\n
\n\n \n\n
\n\n \n\n
\n\n \n\n \n \n\n \n \n \n \n\n \n

\n\n *Disclaimer: Oboswap is a non custodial decentralized exchange. Oboswap does not hold any responsibility for any token and their respective team‘s action in regard to swapping, liquidity, lending, borrowing and farming. Oboswap is not accessible to any entity or individual in any restricted territories or where crypto trading is prohibited. Do your due diligence before investing in any cryptocurrency or related products.\n

\n
\n \n
\n
\n\n \n \n )\n}\n\nexport default Swap\n","import { Percent } from '@oboswap/matic-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\n// Redirects from the /swap/:outputCurrency path to the /swap?outputCurrency=:outputCurrency format\nexport function RedirectToSwap(props: RouteComponentProps<{ outputCurrency: string }>) {\n const {\n location: { search },\n match: {\n params: { outputCurrency },\n },\n } = props\n\n const { location } = props\n return (\n 1\n ? `${search}&outputCurrency=${outputCurrency}`\n : `?outputCurrency=${outputCurrency}`,\n }}\n />\n )\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","export type IfoStatus = 'coming_soon' | 'live' | 'finished'\r\n\r\nexport interface Ifo {\r\n id: string\r\n isActive: boolean\r\n address: string\r\n name: string\r\n subTitle?: string\r\n description?: string\r\n launchDate: string\r\n launchTime: string\r\n saleAmount: string\r\n raiseAmount: string\r\n cakeToBurn: string\r\n projectSiteUrl: string\r\n currency: string\r\n currencyAddress: string\r\n tokenDecimals: number\r\n releaseBlockNumber: number\r\n}\r\n\r\nexport enum QuoteToken {\r\n 'BNB' = 'BNB',\r\n 'CAKE' = 'CAKE',\r\n 'SYRUP' = 'SYRUP',\r\n 'BUSD' = 'BUSD',\r\n 'TWT' = 'TWT',\r\n 'UST' = 'UST',\r\n 'USDC' = 'USDC',\r\n}\r\n\r\nexport enum PoolCategory {\r\n 'COMMUNITY' = 'Community',\r\n 'CORE' = 'Core',\r\n 'BINANCE' = 'Binance', // Pools using native BNB behave differently than pools using a token\r\n}\r\n\r\nexport interface Address {\r\n 80001: string\r\n 137: string\r\n}\r\n\r\n\r\nexport interface FarmConfig {\r\n pid: number\r\n lpSymbol: string\r\n lpAddresses: Address\r\n tokenSymbol: string\r\n tokenAddresses: Address\r\n quoteTokenSymbol: QuoteToken\r\n quoteTokenAdresses: Address\r\n multiplier?: string\r\n isTokenOnly?: boolean\r\n isCommunity?: boolean\r\n risk: number\r\n dual?: {\r\n rewardPerBlock: number\r\n earnLabel: string\r\n endBlock: number\r\n }\r\n}\r\n\r\nexport interface PoolConfig {\r\n sousId: number\r\n image?: string\r\n tokenName: string\r\n stakingTokenName: QuoteToken\r\n stakingLimit?: number\r\n stakingTokenAddress?: string\r\n contractAddress: Address\r\n poolCategory: PoolCategory\r\n projectLink: string\r\n tokenPerBlock: string\r\n sortOrder?: number\r\n harvest?: boolean\r\n isFinished?: boolean\r\n tokenDecimals: number\r\n}\r\n\r\nexport type Nft = {\r\n name: string\r\n description: string\r\n originalImage: string\r\n previewImage: string\r\n blurImage: string\r\n sortOrder: number\r\n bunnyId: number\r\n}\r\n","export const EN = { code: 'en', language: 'English' }\nexport const AR = { code: 'ar', language: 'العربية' }\nexport const CA = { code: 'ca', language: 'Català' }\nexport const ZHCN = { code: 'zh-CN', language: '繁體中文' }\nexport const ZHTW = { code: 'zh-TW', language: '臺灣華語' }\nexport const CS = { code: 'cs', language: 'Čeština' }\nexport const DA = { code: 'da', language: 'Dansk' }\nexport const DE = { code: 'de', language: 'Deutsch' }\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 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 PTBR = { code: 'pt-BR', language: 'Português' }\nexport const RO = { code: 'ro', language: 'Română' }\nexport const RU = { code: 'ru', language: 'Русский' }\nexport const SR = { code: 'sr', 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 // CA,\n // ZHCN,\n // ZHTW,\n // CS,\n // DA,\n // DE,\n // NL,\n // FIL,\n // FI,\n // FR,\n // EL,\n // HI,\n // HU,\n // ID,\n // IT,\n // JA,\n // KO,\n // PTBR,\n // RO,\n // RU,\n // SR,\n // ESES,\n // SVSE,\n // TA,\n // TR,\n // UK,\n // VI\n]\n","import React, { useCallback, useEffect, useState } from 'react'\nimport { ThemeProvider as SCThemeProvider } from 'styled-components'\nimport { light, dark } from '@pancakeswap-libs/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 handleSetup = useCallback(event=>{\n if(event && event.data && typeof event.data === \"string\" && event.data.startsWith(\"[iFrameSizer]message:\")){\n const dataStr = event.data.substring(\"[iFrameSizer]message:\".length);\n const data = JSON.parse(dataStr);\n console.log(\"data.isDark\", data.isDark);\n setIsDark(()=>data.isDark);\n }\n }, []);\n useEffect(()=>{\n window.addEventListener(\"message\", handleSetup);\n return () => {\n window.removeEventListener('message', handleSetup);\n };\n }, [handleSetup]);\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","export default {\r\n cake: {\r\n 137: '0xb8E67956C68c0160A3c13466D1806dDd96B8a8C0',\r\n 80001: '0x98b799349c321E9D5E918607c871ED479aCfb22F',\r\n },\r\n masterChef: {\r\n 137: '0x988c33D345b0565a9F5B1D0f5074cb78071e038e',\r\n 80001: '0x06e9033E9C24e794Be8F6C7881c9519053533DCE',\r\n },\r\n wbnb: {\r\n 137: '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270',\r\n 80001: '0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889',\r\n },\r\n lottery: {\r\n 137: '',\r\n 80001: '',\r\n },\r\n lotteryNFT: {\r\n 137: '',\r\n 80001: '',\r\n },\r\n mulltiCall: { \r\n 137: '0x6c716af369343bB723415d95e33c406e6A7D61Fb',\r\n 80001: '0x0EAD1160bd2Ca5A653e11FAe3D2b39E4948BDA4d',\r\n },\r\n busd: {\r\n 137: '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', // usdt\r\n 80001: '0xc199cfdc2f09ed2227df61d4b8294b2bb3b24609',\r\n },\r\n usdc:{\r\n 137: '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', // usdc\r\n 80001: '0xc199cfdc2f09ed2227df61d4b8294b2bb3b24609',\r\n }\r\n }\r\n \r\n \r\n ","import addresses from 'constants/contracts'\r\nimport { ChainId } from '@oboswap/matic-sdk'\r\n\r\nconst chainId = process.env.REACT_APP_CHAIN_ID\r\n\r\nexport const getCakeAddress = () => {\r\n return addresses.cake[ChainId.MAINNET]\r\n}\r\nexport const getMasterChefAddress = () => {\r\n return addresses.masterChef[ChainId.MAINNET]\r\n}\r\nexport const getMulticallAddress = () => {\r\n return addresses.mulltiCall[ChainId.MAINNET]\r\n}\r\nexport const getWbnbAddress = () => {\r\n return addresses.wbnb[ChainId.MAINNET]\r\n}\r\nexport const getLotteryAddress = () => {\r\n return addresses.lottery[ChainId.MAINNET]\r\n}\r\nexport const getLotteryTicketAddress = () => {\r\n return addresses.lotteryNFT[ChainId.MAINNET]\r\n}\r\n","const priceContracts: {cakeAddress: string, busdAddress: string, lpAddress:string} = {\n cakeAddress: '0xb8E67956C68c0160A3c13466D1806dDd96B8a8C0',\n busdAddress: '0x2791bca1f2de4661ed88a30c99a7a9449aa84174',\n lpAddress: '0xa3fb5dcaf06c3a6e3ff577a0dbea9cd4941df493'\n}\n\nexport default priceContracts","import contracts from './contracts'\r\nimport { FarmConfig, QuoteToken } from './types'\r\n\r\nconst farms: FarmConfig[] = [\r\n {\r\n pid: 0,\r\n risk: 5,\r\n lpSymbol: 'OBO-USDC LP',\r\n lpAddresses: {\r\n 80001: '',\r\n 137: '0xa3fb5dcaf06c3a6e3ff577a0dbea9cd4941df493',\r\n },\r\n tokenSymbol: 'obo',\r\n tokenAddresses: {\r\n 80001: '',\r\n 137: '0xb8e67956c68c0160a3c13466d1806ddd96b8a8c0',\r\n },\r\n quoteTokenSymbol: QuoteToken.USDC,\r\n quoteTokenAdresses: contracts.usdc,\r\n }\r\n]\r\n\r\nexport default farms\r\n","import { useEffect, useState } from 'react'\nimport BigNumber from 'bignumber.js'\nimport { ChainId } from '@oboswap/matic-sdk'\nimport { getMasterChefAddress } from 'utils/addressHelpers'\nimport { useMulticallContract } from './useContract'\nimport ERC20_INTERFACE from '../constants/abis/erc20'\nimport priceContracts from '../constants/eggPriceContracts'\nimport farmsConfig from '../constants/Farms'\n\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(0)\n \n const multicallContract = useMulticallContract();\n\n useEffect(() => {\n const fetchData = async () => {\n try {\n if(multicallContract){\n const {cakeAddress, busdAddress, lpAddress} = priceContracts;\n // const calls = [\n // [cakeAddress, ERC20_INTERFACE.encodeFunctionData(\"balanceOf\", [lpAddress])],\n // [busdAddress, ERC20_INTERFACE.encodeFunctionData(\"balanceOf\", [lpAddress])],\n // ];\n\n // const [resultsBlockNumber, result] = await multicallContract.aggregate(calls);\n // const [cakeAmount, busdAmount] = result.map(r=>ERC20_INTERFACE.decodeFunctionResult(\"balanceOf\", r));\n // const cake = new BigNumber(cakeAmount);\n // const busd = new BigNumber(busdAmount);\n // const cakePrice = busd.div(cake).toNumber();\n // // console.log(busd.toString());\n // setData(cakePrice)\n\n\n farmsConfig.map(async (farmConfig) => {\n const lpAdress = lpAddress\n \n const calls2 = [\n // Balance of token in the LP contract\n {\n address: cakeAddress,\n name: 'balanceOf',\n params: [lpAdress],\n },\n // Balance of quote token on LP contract\n {\n address: farmConfig.quoteTokenAdresses[ChainId.MAINNET],\n name: 'balanceOf',\n params: [lpAdress],\n },\n // Balance of LP tokens in the master chef contract\n {\n address: farmConfig.isTokenOnly ? cakeAddress : lpAdress,\n name: 'balanceOf',\n params: [getMasterChefAddress()],\n },\n // Total supply of LP tokens\n {\n address: lpAdress,\n name: 'totalSupply',\n },\n // Token decimals\n {\n address: cakeAddress,\n name: 'decimals',\n },\n // Quote token decimals\n {\n address: busdAddress,\n name: 'decimals',\n },\n ]\n \n // const [\n // tokenBalanceLP,\n // quoteTokenBlanceLP,\n // lpTokenBalanceMC,\n // lpTotalSupply,\n // tokenDecimals,\n // quoteTokenDecimals,\n // ] = await multicall(erc20, calls)\n\n // const [resultsBlockNumber, result] = await multicallContract.aggregate(calls1);\n \n\n const calls1 = [\n [cakeAddress, ERC20_INTERFACE.encodeFunctionData(\"balanceOf\", [lpAddress])],\n [farmConfig.quoteTokenAdresses[ChainId.MAINNET], ERC20_INTERFACE.encodeFunctionData(\"balanceOf\", [lpAddress])],\n [lpAdress, ERC20_INTERFACE.encodeFunctionData(\"balanceOf\", [getMasterChefAddress()])],\n [lpAdress, ERC20_INTERFACE.encodeFunctionData(\"totalSupply\")],\n [cakeAddress, ERC20_INTERFACE.encodeFunctionData(\"decimals\")],\n [busdAddress, ERC20_INTERFACE.encodeFunctionData(\"decimals\")],\n ];\n\n const [resultsBlockNumber1, result1] = await multicallContract.aggregate(calls1);\n const [\n tokenBalanceLP,\n quoteTokenBlanceLP,\n lpTokenBalanceMC,\n lpTotalSupply,\n tokenDecimals,\n quoteTokenDecimals,\n ] = result1.map(r=>ERC20_INTERFACE.decodeFunctionResult(\"balanceOf\", r));\n // console.log(tokenBalanceLP.toString())\n // console.log(quoteTokenBlanceLP.toString())\n // console.log(lpTokenBalanceMC.toString())\n // console.log(lpTotalSupply.toString())\n // console.log(tokenDecimals.toString())\n // console.log(quoteTokenDecimals.toString())\n\n let tokenPriceVsQuote\n \n // // Ratio in % a LP tokens that are in staking, vs the total number in circulation\n const lpTokenRatio = new BigNumber(lpTokenBalanceMC).div(new BigNumber(lpTotalSupply))\n \n // // Total value in staking in quote token value\n const lpTotalInQuoteToken = new BigNumber(quoteTokenBlanceLP)\n .div(new BigNumber(10).pow(18))\n .times(new BigNumber(2))\n .times(lpTokenRatio)\n \n // // // console.log(lpTotalInQuoteToken.toString())\n \n // // Amount of token in the LP that are considered staking (i.e amount of token * lp ratio)\n const tokenAmount = new BigNumber(tokenBalanceLP).div(new BigNumber(10).pow(tokenDecimals)).times(lpTokenRatio)\n \n // // console.log(tokenAmount.toString())\n const quoteTokenAmount = new BigNumber(quoteTokenBlanceLP)\n .div(new BigNumber(10).pow(quoteTokenDecimals))\n .times(lpTokenRatio)\n \n \n // // console.log(farmConfig.tokenAddresses[137])\n // // console.log(tokenAmount.toString())\n \n if (tokenAmount.comparedTo(0) > 0) {\n // console.log(quoteTokenAmount.toString())\n // console.log(tokenAmount.toString())\n tokenPriceVsQuote = quoteTokenAmount.div(tokenAmount).toNumber()\n \n } else {\n \n tokenPriceVsQuote = new BigNumber(quoteTokenBlanceLP).div(new BigNumber(tokenBalanceLP)).toNumber()\n }\n \n \n \n setData(tokenPriceVsQuote)\n // return true;\n })\n \n } \n } catch (error) {\n console.error('Unable to fetch price data:', error)\n }\n }\n\n fetchData()\n }, [multicallContract])\n\n return data\n}\n\n\n\n\nexport default useGetPriceData\n","import { MenuEntry } from '@pancakeswap-libs/uikit'\n\nconst config: MenuEntry[] = [\n {\n label: 'Home',\n icon: 'HomeIcon',\n href: 'https://oboswap.com/farms/coming_soon.html'\n },\n {\n label: 'Swap',\n icon: 'TradeIcon',\n href: '/swap'\n },\n {\n label: 'Pool',\n icon: 'GroupsIcon',\n href: '/pool'\n },\n {\n label: 'Farms',\n icon: 'FarmIcon',\n href: 'https://oboswap.com/farms/coming_soon.html'\n },\n \n {\n label: 'Info',\n icon: 'InfoIcon',\n href: 'https://analytics-poly.oboswap.com/',\n // items: [\n // {\n // label: 'Analytics',\n // href: 'https://analytics-poly.oboswap.com/',\n // },\n \n // ]\n },\n {\n label: 'Docs',\n icon: 'MoreIcon',\n href: \"https://obo-swap.gitbook.io/oboswap/\",\n // items: [\n // // {\n // // label: 'Github',\n // // href: '',\n // // },\n // {\n // label: \"Docs\",\n // href: \"https://obo-swap.gitbook.io/oboswap/\",\n // },\n \n // ],\n },\n\n]\n\nexport default config\n","import React, { useContext } from 'react'\nimport { Menu as UikitMenu, ConnectorId } from '@pancakeswap-libs/uikit'\n// import { BigNumber } from '@ethersproject/bignumber'\nimport BigNumber from 'bignumber.js'\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 { injected, bsc, walletconnect } from 'connectors'\nimport links from './config'\n\nconst Menu: React.FC = props => {\n const { account, activate, deactivate } = useWeb3React()\n const { selectedLanguage, setSelectedLanguage } = useContext(LanguageContext)\n const { isDark, toggleTheme } = useTheme()\n const cakePriceUsd = useGetPriceData()\n // console.info(cakePriceUsd)\n const cakePriceUsd2 = new BigNumber(Number(cakePriceUsd)).toFixed(18);\n\n return (\n {\n if (connectorId === 'walletconnect') {\n return activate(walletconnect)\n }\n\n if (connectorId === 'bsc') {\n return activate(bsc)\n }\n\n return activate(injected)\n }}\n logout={deactivate}\n isDark={isDark}\n toggleTheme={toggleTheme}\n currentLang={selectedLanguage?.code || ''}\n langs={allLanguages}\n setLang={setSelectedLanguage}\n cakePriceUsd={Number(cakePriceUsd2)}\n {...props}\n />\n )\n}\n\nexport default Menu","import React, { Suspense, useEffect, useState } from 'react'\nimport { HashRouter, Route, Switch } from 'react-router-dom'\nimport styled from 'styled-components'\n// import { Credentials, StringTranslations } from '@crowdin/crowdin-api-client'\nimport Popups from '../components/Popups'\nimport Web3ReactManager from '../components/Web3ReactManager'\nimport AddLiquidity from './AddLiquidity'\nimport {\n RedirectDuplicateTokenIds,\n RedirectOldAddLiquidityPathStructure,\n RedirectToAddLiquidity\n} from './AddLiquidity/redirects'\nimport MigrateV1 from './MigrateV1'\nimport MigrateV1Exchange from './MigrateV1/MigrateV1Exchange'\nimport RemoveV1Exchange from './MigrateV1/RemoveV1Exchange'\nimport Pool from './Pool'\nimport PoolFinder from './PoolFinder'\n// import Farm from './Farm'\nimport RemoveLiquidity from './RemoveLiquidity'\nimport { RedirectOldRemoveLiquidityPathStructure } from './RemoveLiquidity/redirects'\nimport Swap from './Swap'\nimport { RedirectPathToSwapOnly, RedirectToSwap } 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'\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 min-height: calc(100vh - 152px);\n align-items: center;\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n z-index: 1;\n\n background-image: url('/static/media/bg.bfd323f2.png');\n background-repeat: no-repeat;\n background-position: top;\n background-size: contain;\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 return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \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\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}","// 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 { 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/Oboswap.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 { 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 },\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 '@pancakeswap-libs/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 '@pancakeswap-libs/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 Providers from './Providers'\nimport 'inter-ui'\nimport './i18n'\nimport 'css/App.css';\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 document.getElementById('root')\n)\n"],"sourceRoot":""}